diff --git a/aligness instructions.rtf b/aligness instructions.rtf new file mode 100644 index 0000000..7df3265 --- /dev/null +++ b/aligness instructions.rtf @@ -0,0 +1,32 @@ +{\rtf1\ansi\ansicpg1252\cocoartf2821 +\cocoatextscaling0\cocoaplatform0{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fnil\fcharset0 Menlo-Regular;} +{\colortbl;\red255\green255\blue255;\red0\green0\blue0;\red255\green255\blue255;\red0\green0\blue0; +} +{\*\expandedcolortbl;;\csgenericrgb\c0\c0\c0\c85000;\csgenericrgb\c100000\c100000\c100000;\csgray\c0; +} +\paperw11900\paperh16840\margl1440\margr1440\vieww11520\viewh8400\viewkind0 +\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0 + +\f0\fs24 \cf0 #From nextflow results directory\ +\ +\pard\tx593\pardeftab593\partightenfactor0 + +\f1 \cf2 \cb3 git clone https://github.com/nagadhia/alignESS.git\ +cd alignESS\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0 + +\fs22 \cf4 \cb1 \ul \ulc4 \CocoaLigature0 conda crea\ulnone te -n aligness python=3.9\ +conda env update --file conda_env_simple.yml\ +\ +Mkdir aligness_outputs\ +Gunzip ../picrust/picrust2-2.5.2/EC_predicted.tsv\ +\ +#1st arg is a file where EC predictions are the columns for each ASV, 2nd arg is output file\ +python aligness_preprocess.py ../picrust/picrust2-2.5.2/EC_predicted.tsv aligness_strings.txt\ +\ +python alignESS.py dbalign aligness_strings.txt -nproc 8 -t 1\ +\ +#Creates similarity matrix - arguments are \ +python aligness_to_matrix.py output.txt ../../../dada2/ASV_table.tsv \ +\ +} \ No newline at end of file diff --git a/aligness_preprocess.py b/aligness_preprocess.py new file mode 100755 index 0000000..0aa6e15 --- /dev/null +++ b/aligness_preprocess.py @@ -0,0 +1,55 @@ +import pandas as pd +import sys + +def process_ec_data(input_filepath, output_filepath): + """ + Processes EC data from a TSV file and writes the results to a text file. + + Args: + input_filepath (str): Path to the input TSV file. + output_filepath (str): Path to the output text file. + """ + + # Read and prepare output of picrust + function_per_species_df = pd.read_csv(input_filepath, sep="\t") + d = function_per_species_df.drop("sequence", axis=1) + d = d.to_numpy() + + # Get strings in the format aligness takes it - at depth of 3 EC numbers eg 2.1.3 + function_per_species_dict = {} + for i in range(len(function_per_species_df)): + func_str_list = [] + for j in range(len(function_per_species_df.columns[1:])): + if d[i][j] > 0: + s = function_per_species_df.columns[1:][j] + l0, l1, l2, l3 = s.split(".") + func_str = l0[-1] + "." + l1 + "." + l2 + func_str_list.append(func_str) + + all_func_str = "" + for funcs in list(set(func_str_list)): + all_func_str += funcs + all_func_str += ":" + function_per_species_dict[function_per_species_df["sequence"][i]] = all_func_str + + # Combine into a single string + ec_strings = [] + for s in list(function_per_species_dict.values()): + s = s[:-1] + ec_strings.append(s) + + # Write strings into txt file with strings of each species in a new line + with open(output_filepath, mode="w", encoding="utf-8") as myfile: + for i in range(len(ec_strings)): + item = ec_strings[i] + sp_id = function_per_species_df["sequence"][i] + myfile.write(f"{sp_id}\t{item}\n") + +if __name__ == "__main__": + if len(sys.argv) != 3: + print("Usage: python script.py ") + sys.exit(1) + + input_filepath = sys.argv[1] + output_filepath = sys.argv[2] + process_ec_data(input_filepath, output_filepath) diff --git a/aligness_strings.txt b/aligness_strings.txt new file mode 100644 index 0000000..e725ee6 --- /dev/null +++ b/aligness_strings.txt @@ -0,0 +1,75 @@ +02dc3392bbd45d671126d2e428e44aaf 3.4.19:2.4.2:3.2.1:4.3.3:3.6.1:2.1.1:6.3.1:6.3.3:1.12.1:3.5.2:5.1.99:5.4.99:3.1.26:3.1.21:1.12.7:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:1.7.99:4.2.99:2.7.3:2.1.3:5.1.1:1.20.4:6.2.1:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:3.4.17:2.8.3:1.17.7:1.3.8:3.4.23:6.1.1:4.3.1:3.4.22:2.7.14:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:3.5.3:1.2.7:2.1.2:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.2.1:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +06d08190476d4cc80d11c337aafbab11 3.4.19:2.4.2:3.2.1:5.4.3:4.3.3:3.6.1:2.1.1:1.4.4:6.3.1:6.3.3:1.12.1:3.5.2:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:1.7.99:4.2.99:2.7.3:2.1.3:5.1.1:1.20.4:6.2.1:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:1.1.3:3.1.11:2.9.1:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:4.99.1:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:3.4.17:2.10.1:1.17.7:1.3.8:3.4.23:3.8.1:6.1.1:4.3.1:3.4.22:3.7.1:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:1.2.7:2.1.2:1.6.5:1.97.1:2.3.2:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +06f2c2918a786f90eb7f3a527c2c8f39 2.4.2:3.2.1:4.3.3:1.1.5:3.6.1:2.1.1:6.3.1:6.3.3:1.12.1:3.5.2:1.8.4:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:2.7.1:3.6.3:1.7.99:4.2.99:2.7.3:2.1.3:5.1.1:1.20.4:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:1.7.7:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:1.17.7:3.4.23:3.8.1:6.1.1:4.3.1:3.4.22:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:3.5.3:1.2.7:2.1.2:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.1:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +108b663854e719ad9815683df54886ac 3.4.19:2.4.2:3.2.1:4.3.3:3.6.1:2.1.1:6.3.1:6.3.3:1.12.1:3.5.2:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:1.7.99:4.2.99:2.7.3:2.1.3:5.1.1:1.20.4:6.2.1:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:3.4.17:1.17.7:3.4.23:6.1.1:4.3.1:3.4.22:2.7.14:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:3.5.3:1.2.7:2.1.2:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.1:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +115601c3c552e86c3ef594bf3c83ddb2 3.4.19:2.4.2:3.2.1:5.4.3:4.3.3:3.6.1:2.1.1:1.4.4:6.3.1:6.3.3:1.12.1:3.5.2:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:1.7.99:4.2.99:2.7.3:2.1.3:5.1.1:1.20.4:6.2.1:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:1.1.3:3.1.11:2.9.1:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:4.99.1:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:3.4.17:2.10.1:1.17.7:1.3.8:3.4.23:3.8.1:6.1.1:4.3.1:3.4.22:3.7.1:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:1.2.7:2.1.2:1.6.5:1.97.1:2.3.2:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +116e48c1ba1b6c86601c402022615156 2.4.2:3.2.1:4.3.3:3.6.1:2.1.1:6.3.1:6.3.3:3.5.2:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:1.7.99:4.2.99:2.7.3:2.1.3:5.1.1:1.20.4:6.2.1:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:1.17.7:3.4.23:6.1.1:4.3.1:3.4.22:3.7.1:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:1.2.7:2.1.2:1.4.7:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +124fd5acf900552fc3baaabcdd7f5244 2.4.2:3.2.1:5.4.3:4.3.3:3.6.1:2.1.1:6.3.1:6.3.3:3.5.2:1.8.4:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:4.3.99:3.6.3:1.7.99:4.2.99:2.7.3:2.1.3:5.1.1:1.20.4:6.2.1:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:4.99.1:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:1.17.7:3.4.23:6.1.1:4.3.1:3.4.22:3.7.1:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:3.5.3:1.2.7:2.1.2:1.4.7:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:3.1.4:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +14a77e7ca65232bb55745938eec7985d 5.3.3:3.4.19:2.4.2:3.2.1:5.4.3:4.3.3:1.1.5:3.6.1:2.1.1:1.4.4:6.3.1:1.16.1:6.3.3:3.5.2:1.8.4:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:4.3.99:3.6.3:1.7.99:4.2.99:1.16.3:2.7.3:2.1.3:5.1.1:1.20.4:1.12.99:5.1.2:6.2.1:1.14.12:1.1.2:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:1.1.3:3.1.11:2.9.1:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:4.99.1:2.6.1:1.8.1:1.7.1:1.8.5:1.3.1:2.7.7:6.4.1:4.1.1:2.2.1:3.4.15:3.5.4:2.6.99:3.4.21:4.3.2:2.7.2:4.7.1:1.11.1:3.4.17:2.10.1:2.8.3:1.17.7:3.4.23:6.1.1:4.3.1:1.5.5:3.1.6:1.13.11:1.3.5:3.7.1:1.2.5:4.4.1:2.5.1:2.8.1:5.4.4:3.4.11:1.7.2:3.5.3:1.2.7:2.1.2:1.6.5:1.97.1:2.3.2:5.99.1:3.1.7:3.4.13:2.7.6:2.7.11:1.14.14:1.1.99:3.3.2:3.1.27:5.3.4:1.14.99:1.17.4:4.2.1:1.4.3:1.6.1:1.2.1:3.1.4:6.5.1:3.4.25:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:1.14.13:1.3.3:6.3.2:1.15.1:3.5.1:1.2.4:2.4.1:3.1.2:1.6.99:3.1.13:6.3.4:5.2.1:1.14.11:1.18.1:3.1.5:2.7.4:1.17.99 +15b29aacd690aae3b3090a490c8cdc19 5.3.3:3.4.19:2.4.2:3.2.1:5.4.3:4.3.3:3.6.1:2.1.1:1.4.4:6.3.1:6.3.3:3.5.2:1.8.4:5.1.99:5.4.99:3.1.26:3.1.21:1.12.7:1.4.1:1.5.1:2.7.9:3.1.3:3.5.5:2.7.1:4.1.99:3.6.3:1.7.99:4.2.99:1.16.3:2.7.3:2.1.3:5.1.1:1.20.4:1.3.98:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:1.1.3:3.1.11:2.9.1:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:1.7.7:4.99.1:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:2.2.1:3.5.4:3.4.21:4.3.2:2.7.2:4.7.1:1.11.1:3.4.17:2.10.1:2.8.3:1.17.7:1.3.8:3.4.23:6.1.1:4.3.1:3.4.22:3.7.1:1.3.5:2.7.14:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:3.5.3:1.2.7:2.1.2:1.6.5:1.97.1:2.3.2:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:3.1.4:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:1.2.4:2.4.1:1.21.4:3.1.13:6.3.4:5.2.1:1.18.1:2.7.4 +179c66c2fe46ba14dab5bc400006a4eb 5.3.3:2.4.2:3.2.1:5.4.3:4.3.3:1.1.5:3.6.1:2.1.1:6.3.1:6.3.3:1.12.1:3.5.2:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:1.7.99:4.2.99:2.7.3:2.1.3:5.1.1:1.20.4:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:2.8.3:1.17.7:1.3.8:3.4.23:6.1.1:4.3.1:3.7.1:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:3.5.3:1.2.7:2.1.2:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.2.99:1.2.1:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +206baa3e0dd353fafdf2c44a56a8f979 2.4.2:3.2.1:5.4.3:4.3.3:1.1.5:3.6.1:2.1.1:1.4.4:6.3.1:6.3.3:1.12.1:3.5.2:1.8.4:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:1.7.99:4.2.99:1.16.3:2.7.3:2.1.3:5.1.1:1.20.4:6.2.1:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:4.99.1:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:2.10.1:1.17.7:3.4.23:6.1.1:4.3.1:3.4.22:1.3.5:2.7.14:4.4.1:2.5.1:2.8.1:3.4.11:1.2.7:2.1.2:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:3.1.4:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +22caa464d134048a0ce7feadcfbaf985 2.4.2:3.2.1:4.3.3:3.6.1:2.1.1:6.3.1:6.3.3:3.5.2:1.8.4:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:4.3.99:3.6.3:1.7.99:4.2.99:2.7.3:2.1.3:5.1.1:1.20.4:6.2.1:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:4.99.1:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:1.17.7:3.4.23:6.1.1:4.3.1:3.4.22:3.7.1:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:3.5.3:1.2.7:2.1.2:1.4.7:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:3.1.4:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +2594c18153258d768d72ca37db992969 2.4.2:3.2.1:4.3.3:1.1.5:3.6.1:2.1.1:6.3.1:6.3.3:1.12.1:3.5.2:1.8.4:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:1.7.99:4.2.99:2.7.3:2.1.3:5.1.1:1.20.4:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:1.7.7:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:1.17.7:3.4.23:3.8.1:6.1.1:4.3.1:3.4.22:1.3.5:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:3.5.3:1.2.7:2.1.2:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:3.1.4:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +308c12f2c65e3b38fab8d3e6623dc423 3.4.19:2.4.2:3.2.1:5.4.3:4.3.3:3.6.1:2.1.1:6.3.1:6.3.3:1.12.1:3.5.2:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:1.7.99:4.2.99:1.16.3:2.7.3:2.1.3:5.1.1:1.20.4:1.3.98:6.2.1:5.1.3:3.4.16:3.6.4:5.5.1:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:1.1.3:3.1.11:2.9.1:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:1.7.7:4.99.1:2.6.1:1.8.1:1.3.1:2.7.7:4.1.1:2.2.1:3.5.4:3.4.21:4.3.2:2.7.2:1.11.1:3.4.17:2.10.1:2.8.3:1.17.7:1.3.8:3.4.23:3.8.1:6.1.1:4.3.1:3.4.22:3.7.1:1.3.5:4.4.1:2.5.1:2.8.1:3.4.11:1.2.7:2.1.2:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:3.1.4:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:1.3.4:1.18.6:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +34db7b31435da7851e6e1ff442a302f3 2.4.2:3.2.1:4.3.3:1.1.5:3.6.1:2.1.1:6.3.1:6.3.3:3.5.2:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:4.2.99:1.16.3:2.7.3:2.1.3:5.1.1:1.20.4:1.1.2:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.1.11:2.9.1:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:4.7.1:3.4.17:1.17.7:3.4.23:6.1.1:4.3.1:3.4.22:4.4.1:2.5.1:2.8.1:3.4.11:3.5.3:1.2.7:2.1.2:1.4.7:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.1:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +369db8943bdb18f238aa1561a6e1de9f 2.4.2:3.2.1:4.3.3:1.1.5:3.6.1:2.1.1:1.4.4:6.3.1:6.3.3:1.12.1:3.5.2:1.8.4:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:1.7.99:4.2.99:1.16.3:2.7.3:2.1.3:5.1.1:1.20.4:6.2.1:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:4.99.1:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:3.4.17:1.17.7:1.3.8:3.4.23:3.8.1:6.1.1:4.3.1:3.4.22:3.7.1:1.3.5:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:3.5.3:1.2.7:2.1.2:1.4.7:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:3.1.4:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:1.18.6:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +3c062536401ebeab239c2490e6d3efea 5.3.3:2.4.2:3.2.1:5.4.3:4.3.3:1.1.5:3.6.1:2.1.1:1.4.4:6.3.1:6.3.3:1.12.1:3.3.1:3.5.2:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:2.7.1:3.6.3:1.7.99:4.2.99:1.16.3:2.7.3:2.1.3:5.1.1:1.20.4:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:4.99.1:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:2.2.1:3.5.4:3.4.21:4.3.2:2.7.2:1.11.1:3.4.17:2.8.3:1.17.7:1.3.8:3.4.23:3.8.1:6.1.1:4.3.1:3.4.22:3.7.1:1.3.5:4.4.1:6.6.1:2.5.1:2.8.1:3.1.12:3.4.14:3.4.11:3.5.3:1.2.7:2.1.2:1.4.7:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:3.1.4:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:1.3.4:1.18.6:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:1.2.4:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4:1.17.99 +3fd08461a5678f97083d0ab80980d24e 3.4.19:2.4.2:3.2.1:4.3.3:3.6.1:2.1.1:6.3.1:6.3.3:3.3.1:3.5.2:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:3.1.3:2.7.1:3.6.3:4.2.99:2.1.3:5.1.1:1.3.98:6.2.1:5.1.3:3.4.16:3.6.4:5.5.1:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:1.17.7:3.4.23:3.8.1:6.1.1:4.3.1:3.4.22:1.3.5:4.4.1:2.5.1:2.8.1:3.4.14:3.4.11:2.1.2:1.97.1:5.99.1:2.7.6:2.7.11:1.17.4:4.2.1:1.6.1:1.2.1:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +44e35311e08456d21bf5f156f7a1b960 3.4.19:2.4.2:3.2.1:4.3.3:3.6.1:2.1.1:6.3.1:6.3.3:1.12.1:3.5.2:5.1.99:5.4.99:3.1.26:3.1.21:1.12.7:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:1.7.99:4.2.99:2.7.3:2.1.3:5.1.1:1.20.4:6.2.1:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:3.4.17:2.8.3:1.17.7:1.3.8:3.4.23:6.1.1:4.3.1:3.4.22:2.7.14:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:3.5.3:1.2.7:2.1.2:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.2.1:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +45cd7ce66538ba76795c7cd8a97cd55d 2.4.2:3.2.1:4.3.3:3.6.1:2.1.1:6.3.1:6.3.3:3.5.2:1.8.4:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:1.7.99:4.2.99:1.16.3:2.7.3:2.1.3:5.1.1:1.20.4:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.2.2:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:2.8.3:1.17.7:1.3.8:3.4.23:3.8.1:6.1.1:4.3.1:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:1.2.7:2.1.2:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.2.99:1.2.1:3.1.4:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:1.2.4:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +482b7596f48574470f00a5e161ed8eb3 2.4.2:3.2.1:4.3.3:1.1.5:3.6.1:2.1.1:6.3.1:6.3.3:3.5.2:1.8.4:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:1.7.99:4.2.99:1.16.3:2.7.3:2.1.3:5.1.1:1.20.4:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:1.1.3:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:4.99.1:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:1.17.7:3.4.23:6.1.1:4.3.1:3.4.22:3.7.1:4.4.1:2.5.1:2.8.1:3.4.11:3.5.3:1.2.7:2.1.2:1.4.7:1.6.5:1.97.1:5.99.1:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:3.1.4:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +4862f7aa77b183b09b99933c37a6d238 2.4.2:3.2.1:5.4.3:4.3.3:1.1.5:3.6.1:2.1.1:1.4.4:6.3.1:6.3.3:1.12.1:3.5.2:1.8.4:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:1.7.99:4.2.99:1.16.3:2.7.3:2.1.3:5.1.1:1.20.4:6.2.1:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:4.99.1:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:2.10.1:1.17.7:3.4.23:6.1.1:4.3.1:3.4.22:1.3.5:2.7.14:4.4.1:2.5.1:2.8.1:3.4.11:1.2.7:2.1.2:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:3.1.4:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +4b2c76d6e1325bba41014003df684a1d 3.4.19:2.4.2:3.2.1:5.4.3:4.3.3:3.6.1:2.1.1:1.4.4:6.3.1:6.3.3:1.12.1:3.5.2:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:1.7.99:4.2.99:2.7.3:2.1.3:5.1.1:1.20.4:6.2.1:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:1.1.3:3.1.11:2.9.1:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:4.99.1:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:3.4.17:2.10.1:1.17.7:1.3.8:3.4.23:3.8.1:6.1.1:4.3.1:3.4.22:3.7.1:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:1.2.7:2.1.2:1.6.5:1.97.1:2.3.2:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +4e4c5ae156d9bb517532c7d1aa8099f6 2.4.2:3.2.1:4.3.3:3.6.1:2.1.1:6.3.1:6.3.3:3.5.2:1.8.4:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:4.3.99:3.6.3:1.7.99:4.2.99:2.7.3:2.1.3:5.1.1:1.20.4:6.2.1:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:4.99.1:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:1.17.7:3.4.23:6.1.1:4.3.1:3.4.22:3.7.1:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:3.5.3:1.2.7:2.1.2:1.4.7:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:3.1.4:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +4e4e18c588fc35b5f1a99bc147e77020 5.3.3:2.4.2:3.2.1:4.3.3:3.6.1:2.1.1:6.3.1:6.3.3:1.12.1:3.3.1:3.5.2:1.8.4:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:2.7.1:3.6.3:1.7.99:4.2.99:2.1.3:5.1.1:1.20.4:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:2.8.3:1.17.7:1.3.8:3.4.23:6.1.1:4.3.1:3.4.22:3.7.1:4.4.1:2.5.1:2.8.1:3.4.11:3.5.3:1.2.7:2.1.2:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +51de8a0c2b635cb654a2d81d4d0147ad 2.4.2:3.2.1:4.3.3:3.6.1:2.1.1:6.3.1:6.3.3:3.5.2:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:1.7.99:4.2.99:2.7.3:2.1.3:5.1.1:1.20.4:6.2.1:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:1.17.7:3.4.23:6.1.1:4.3.1:3.4.22:3.7.1:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:1.2.7:2.1.2:1.4.7:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +521a975b888d41a0eb82a0d67464979b 2.4.2:3.2.1:5.4.3:4.3.3:3.6.1:2.1.1:6.3.1:6.3.3:3.5.2:5.1.99:5.4.99:3.1.26:3.1.21:1.12.7:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:4.3.99:3.6.3:1.7.99:4.2.99:2.7.3:2.1.3:5.1.1:1.20.4:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:4.99.1:2.6.1:1.8.1:1.7.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:1.17.7:3.4.23:6.1.1:4.3.1:3.4.22:3.7.1:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:3.5.3:1.2.7:2.1.2:1.4.7:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:3.1.4:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +554ec45b177292cd26daed0902a89a24 3.4.19:2.4.2:3.2.1:4.3.3:3.6.1:2.1.1:6.3.1:6.3.3:1.12.1:3.5.2:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:1.7.99:4.2.99:2.7.3:2.1.3:5.1.1:1.20.4:6.2.1:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:1.17.7:3.4.23:6.1.1:4.3.1:3.4.22:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:3.5.3:1.2.7:2.1.2:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.1:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +57e5a176ff73dde428390003172fdffb 5.3.3:3.4.19:2.4.2:3.2.1:4.3.3:1.1.5:3.6.1:2.1.1:1.4.4:6.3.1:6.3.3:1.12.1:3.5.2:1.8.4:5.1.99:5.4.99:3.1.26:3.1.21:1.12.7:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:1.7.99:4.2.99:1.16.3:2.7.3:2.1.3:5.1.1:1.20.4:6.2.1:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:2.9.1:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:4.99.1:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:2.2.1:3.5.4:3.4.21:4.3.2:2.7.2:1.11.1:3.4.17:2.10.1:2.8.3:1.17.7:1.3.8:3.4.23:3.8.1:6.1.1:4.3.1:3.4.22:3.7.1:1.3.5:2.7.14:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:3.5.3:1.2.7:2.1.2:1.4.7:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.14.14:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:3.1.4:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:1.18.6:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:1.21.4:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +590e8de05fd1cecc79347f1257a7c14c 3.4.19:2.4.2:3.2.1:4.3.3:1.1.5:3.6.1:2.1.1:1.4.4:6.3.1:6.3.3:3.5.2:1.8.4:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:1.7.99:4.2.99:2.7.3:2.1.3:5.1.1:1.20.4:5.3.2:6.2.1:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:2.9.1:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:1.7.7:4.99.1:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:3.4.17:2.8.3:1.17.7:1.3.8:3.4.23:3.8.1:6.1.1:4.3.1:3.4.22:3.7.1:1.3.5:2.7.14:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:3.5.3:1.2.7:2.1.2:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:3.1.4:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:1.21.4:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +61114735a84894739ff1a386694d9287 2.4.2:3.2.1:4.3.3:1.1.5:3.6.1:2.1.1:6.3.1:6.3.3:1.12.1:3.5.2:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:1.7.99:4.2.99:1.16.3:2.7.3:2.1.3:5.1.1:1.20.4:6.2.1:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:4.99.1:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.17.7:3.4.23:6.1.1:4.3.1:3.4.22:3.7.1:4.4.1:2.5.1:2.8.1:3.4.11:1.2.7:2.1.2:1.4.7:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.1:3.1.4:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:1.18.6:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +66b3fd3631119304322f51a077d216a8 3.4.19:2.4.2:3.2.1:4.3.3:3.6.1:2.1.1:6.3.1:6.3.3:1.12.1:3.5.2:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:4.2.99:1.16.3:2.7.3:2.1.3:5.1.1:1.20.4:3.1.31:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:1.17.7:3.4.23:6.1.1:4.3.1:4.2.2:3.4.22:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:3.5.3:1.2.7:2.1.2:1.4.7:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.1:3.1.4:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +66eabd96e837bc63970b8b43dc3e7d59 2.4.2:3.2.1:5.4.3:4.3.3:3.6.1:2.1.1:6.3.1:6.3.3:1.12.1:3.3.1:3.5.2:1.8.4:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:1.7.99:4.2.99:2.7.3:2.1.3:5.1.1:1.20.4:6.2.1:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:1.17.7:3.4.23:6.1.1:4.3.1:3.7.1:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:3.5.3:1.2.7:2.1.2:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +677563d77f33dde9a437e9769cd97350 5.3.3:2.4.2:3.2.1:4.3.3:3.6.1:2.1.1:6.3.1:6.3.3:1.12.1:3.3.1:3.5.2:1.8.4:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:2.7.1:3.6.3:1.7.99:4.2.99:2.1.3:5.1.1:1.20.4:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:2.8.3:1.17.7:1.3.8:3.4.23:6.1.1:4.3.1:3.4.22:3.7.1:4.4.1:2.5.1:2.8.1:3.4.11:3.5.3:1.2.7:2.1.2:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +6c194f239694aec7cf630c1ad0e43db7 2.4.2:3.2.1:5.4.3:4.3.3:3.6.1:2.1.1:6.3.1:6.3.3:1.12.1:3.3.1:3.5.2:1.8.4:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:1.7.99:4.2.99:2.7.3:2.1.3:5.1.1:1.20.4:6.2.1:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:1.17.7:3.4.23:6.1.1:4.3.1:3.7.1:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:3.5.3:1.2.7:2.1.2:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +6c1ed97536601e49cd993c2c3dc0e628 2.4.2:3.2.1:4.3.3:3.6.1:2.1.1:6.3.1:6.3.3:3.5.2:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:4.3.99:3.6.3:1.7.99:4.2.99:2.7.3:2.1.3:5.1.1:6.2.1:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:2.6.1:1.8.1:1.7.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:2.8.3:1.17.7:3.4.23:6.1.1:4.3.1:3.4.22:3.7.1:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:3.5.3:1.2.7:2.1.2:1.4.7:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.1:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +6d3e5d85b2aa35d58347bb4b9b203e43 5.3.3:3.4.19:2.4.2:3.2.1:5.4.3:4.3.3:1.1.5:3.6.1:2.1.1:1.4.4:6.3.1:1.16.1:6.3.3:3.5.2:1.8.4:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:4.3.99:3.6.3:1.7.99:4.2.99:1.16.3:2.7.3:2.1.3:5.1.1:1.20.4:1.12.99:5.1.2:6.2.1:1.14.12:1.1.2:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:1.1.3:3.1.11:2.9.1:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:4.99.1:2.6.1:1.8.1:1.7.1:1.8.5:1.3.1:2.7.7:6.4.1:4.1.1:2.2.1:3.4.15:3.5.4:2.6.99:3.4.21:4.3.2:2.7.2:4.7.1:1.11.1:3.4.17:2.10.1:2.8.3:1.17.7:3.4.23:6.1.1:4.3.1:1.5.5:3.1.6:1.13.11:1.3.5:3.7.1:1.2.5:4.4.1:2.5.1:2.8.1:5.4.4:3.4.11:1.7.2:3.5.3:1.2.7:2.1.2:1.6.5:1.97.1:2.3.2:5.99.1:3.1.7:3.4.13:2.7.6:2.7.11:1.14.14:1.1.99:3.3.2:3.1.27:5.3.4:1.14.99:1.17.4:4.2.1:1.4.3:1.6.1:1.2.1:3.1.4:6.5.1:3.4.25:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:1.14.13:1.3.3:6.3.2:1.15.1:3.5.1:1.2.4:2.4.1:3.1.2:1.6.99:3.1.13:6.3.4:5.2.1:1.14.11:1.18.1:3.1.5:2.7.4:1.17.99 +6dd32e33c78a21fef169e6423c91dfcd 5.3.3:2.4.2:3.2.1:4.3.3:3.6.1:2.1.1:6.3.1:6.3.3:3.5.2:1.8.4:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:3.5.5:2.7.1:4.1.99:3.6.3:4.2.99:1.16.3:2.1.3:5.1.1:1.20.4:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.11.1:3.4.21:4.3.2:2.7.2:3.4.17:2.8.3:1.17.7:1.3.8:3.4.23:3.8.1:6.1.1:4.3.1:3.4.22:3.7.1:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:3.5.3:1.2.7:2.1.2:1.4.7:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.2.99:1.2.1:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:1.2.4:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:2.7.4 +712ceab0f39ef3518910c2244af3d58f 2.4.2:3.2.1:4.3.3:1.1.5:3.6.1:2.1.1:6.3.1:6.3.3:1.12.1:3.5.2:1.8.4:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:1.7.99:4.2.99:2.7.3:2.1.3:5.1.1:1.20.4:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:1.7.7:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:1.17.7:3.4.23:3.8.1:6.1.1:4.3.1:3.4.22:1.3.5:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:3.5.3:1.2.7:2.1.2:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:3.1.4:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +8423cb55f94b74aff6335ffc08e1ffa0 2.4.2:3.2.1:4.3.3:3.6.1:2.1.1:6.3.1:6.3.3:1.12.1:3.5.2:5.1.99:5.4.99:3.1.26:3.1.21:1.12.7:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:1.7.99:4.2.99:2.7.3:2.1.3:5.1.1:1.20.4:6.2.1:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:3.4.17:2.8.3:1.17.7:1.3.8:3.4.23:3.8.1:6.1.1:4.3.1:3.4.22:2.7.14:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:1.2.7:2.1.2:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.2.1:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +857b927ef6cfe28868c7f0b4beb0f9c5 5.3.3:2.4.2:3.2.1:4.3.3:3.6.1:2.1.1:6.3.1:6.3.3:1.12.1:3.3.1:3.5.2:1.8.4:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:2.7.1:3.6.3:1.7.99:4.2.99:2.1.3:5.1.1:1.20.4:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:2.8.3:1.17.7:1.3.8:3.4.23:6.1.1:4.3.1:3.4.22:3.7.1:4.4.1:2.5.1:2.8.1:3.4.11:3.5.3:1.2.7:2.1.2:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +88aa65483a9d0d188a09ae32f835fbd5 5.3.3:2.4.2:3.2.1:5.4.3:4.3.3:1.1.5:3.6.1:2.1.1:1.4.4:6.3.1:6.3.3:1.12.1:3.5.2:1.8.4:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:2.7.1:3.6.3:1.7.99:4.2.99:1.16.3:2.1.3:5.1.1:1.20.4:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:4.99.1:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:2.8.3:1.17.7:1.3.8:3.4.23:3.8.1:6.1.1:4.3.1:3.7.1:4.4.1:2.5.1:2.8.1:3.1.12:3.4.14:3.4.11:1.2.7:2.1.2:1.4.7:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:3.1.4:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:1.18.6:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +8ec183a3479d0541d4b13cff95940cee 2.4.2:3.2.1:4.3.3:1.1.5:3.6.1:2.1.1:6.3.1:6.3.3:3.5.2:1.8.4:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:1.7.99:4.2.99:1.16.3:2.7.3:2.1.3:5.1.1:1.20.4:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:1.1.3:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:4.99.1:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:1.17.7:3.4.23:6.1.1:4.3.1:3.4.22:3.7.1:4.4.1:2.5.1:2.8.1:3.4.11:3.5.3:1.2.7:2.1.2:1.4.7:1.6.5:1.97.1:5.99.1:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:3.1.4:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +8f3fb318e9afc95f071ac38522976b1b 2.4.2:3.2.1:4.3.3:3.6.1:2.1.1:6.3.1:6.3.3:3.5.2:1.8.4:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:4.3.99:3.6.3:1.7.99:4.2.99:2.7.3:2.1.3:5.1.1:1.20.4:6.2.1:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:4.99.1:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:1.17.7:3.4.23:6.1.1:4.3.1:3.4.22:3.7.1:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:3.5.3:1.2.7:2.1.2:1.4.7:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:3.1.4:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +9374803bb59357889b692ca61dd87b48 5.3.3:2.4.2:3.2.1:5.4.3:4.3.3:1.1.5:3.6.1:2.1.1:6.3.1:6.3.3:3.5.2:1.8.4:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:4.2.99:1.16.3:2.7.3:2.1.3:5.1.1:1.20.4:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:5.3.99:4.6.1:5.4.2:4.99.1:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.11.1:3.4.21:4.3.2:2.7.2:1.11.1:2.8.3:1.17.7:1.3.8:3.4.23:6.1.1:4.3.1:3.4.22:3.7.1:1.3.5:2.7.14:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:3.5.3:1.2.7:2.1.2:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.2.99:1.2.1:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +946b5f1cf84bc4409e87cbd1ee0ef26a 5.3.3:2.4.2:3.2.1:5.4.3:4.3.3:1.1.5:3.6.1:2.1.1:6.3.1:6.3.3:1.12.1:3.5.2:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:1.7.99:4.2.99:2.7.3:2.1.3:5.1.1:1.20.4:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:2.8.3:1.17.7:1.3.8:3.4.23:6.1.1:4.3.1:3.7.1:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:3.5.3:1.2.7:2.1.2:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.2.99:1.2.1:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +955c2ad95941c2cab740e78216da597c 2.4.2:3.2.1:5.4.3:4.3.3:1.1.5:3.6.1:2.1.1:1.4.4:6.3.1:6.3.3:1.12.1:3.5.2:1.8.4:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:1.7.99:4.2.99:1.16.3:2.7.3:2.1.3:5.1.1:1.20.4:6.2.1:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:4.99.1:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:2.10.1:1.17.7:3.4.23:6.1.1:4.3.1:3.4.22:1.3.5:2.7.14:4.4.1:2.5.1:2.8.1:3.4.11:1.2.7:2.1.2:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:3.1.4:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +9620df9ac2a3839d04df86692d43528f 2.4.2:3.2.1:5.4.3:4.3.3:1.1.5:3.6.1:2.1.1:1.4.4:6.3.1:6.3.3:1.12.1:3.3.1:3.5.2:1.8.4:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:1.7.99:4.2.99:2.7.3:2.1.3:5.1.1:1.20.4:6.2.1:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:2.9.1:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:4.99.1:2.6.1:1.8.1:1.3.1:2.7.7:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:2.10.1:1.17.7:1.3.8:3.4.23:6.1.1:4.3.1:3.7.1:2.7.14:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:3.5.3:1.2.7:2.1.2:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:3.1.4:6.5.1:3.4.25:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4:1.17.99 +a04dff74cc5e783025a349d32f5ce915 2.4.2:3.2.1:5.4.3:4.3.3:1.1.5:3.6.1:2.1.1:1.4.4:6.3.1:6.3.3:1.12.1:3.5.2:1.8.4:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:1.7.99:4.2.99:1.16.3:2.7.3:2.1.3:5.1.1:1.20.4:6.2.1:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:4.99.1:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:2.10.1:1.17.7:3.4.23:6.1.1:4.3.1:3.4.22:1.3.5:2.7.14:4.4.1:2.5.1:2.8.1:3.4.11:1.2.7:2.1.2:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:3.1.4:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +a2c496dfec8a1bf1f2a450e699b829ad 2.4.2:3.2.1:4.3.3:1.1.5:3.6.1:2.1.1:6.3.1:6.3.3:1.12.1:3.5.2:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:1.7.99:4.2.99:1.16.3:2.7.3:2.1.3:5.1.1:1.20.4:6.2.1:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:2.9.1:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:4.99.1:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:1.17.7:3.4.23:6.1.1:4.3.1:3.4.22:3.7.1:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:1.2.7:2.1.2:1.4.7:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:3.1.4:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:1.21.4:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +ad8a15dd4bde7a1d96e95da04e910853 2.4.2:3.2.1:4.3.3:3.6.1:2.1.1:6.3.1:6.3.3:3.5.2:1.8.4:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:1.7.99:4.2.99:1.16.3:2.7.3:2.1.3:5.1.1:1.20.4:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.2.2:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:2.8.3:1.17.7:1.3.8:3.4.23:3.8.1:6.1.1:4.3.1:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:1.2.7:2.1.2:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.2.99:1.2.1:3.1.4:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:1.2.4:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +af2135763c26212ed95a8a891c7dfca3 3.4.19:2.4.2:3.2.1:4.3.3:3.6.1:2.1.1:6.3.1:6.3.3:1.12.1:3.5.2:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:4.2.99:1.16.3:2.7.3:2.1.3:5.1.1:1.20.4:3.1.31:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:1.17.7:3.4.23:6.1.1:4.3.1:4.2.2:3.4.22:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:3.5.3:1.2.7:2.1.2:1.4.7:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.1:3.1.4:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +b4c9b3e8f6e5852ee29efa686ffcdca0 2.4.2:3.2.1:4.3.3:1.1.5:3.6.1:2.1.1:6.3.1:6.3.3:3.5.2:1.8.4:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:1.7.99:4.2.99:1.16.3:2.7.3:2.1.3:5.1.1:1.20.4:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:1.1.3:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:4.99.1:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:1.17.7:3.4.23:6.1.1:4.3.1:3.4.22:3.7.1:4.4.1:2.5.1:2.8.1:3.4.11:3.5.3:1.2.7:2.1.2:1.4.7:1.6.5:1.97.1:5.99.1:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:3.1.4:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +b521d9b8e55a26909e3ac0292b42d8f3 3.4.19:2.4.2:3.2.1:4.3.3:3.6.1:2.1.1:6.3.1:6.3.3:1.12.1:3.5.2:5.1.99:5.4.99:3.1.26:3.1.21:1.12.7:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:1.7.99:4.2.99:2.7.3:2.1.3:5.1.1:1.20.4:6.2.1:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:3.4.17:2.8.3:1.17.7:1.3.8:3.4.23:6.1.1:4.3.1:3.4.22:2.7.14:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:3.5.3:1.2.7:2.1.2:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.2.1:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +b8783f557b3ed4a9b4269539b1583419 3.4.19:2.4.2:3.2.1:4.3.3:3.6.1:2.1.1:1.4.4:6.3.1:1.5.3:6.3.3:3.5.2:1.8.4:5.1.99:5.4.99:3.1.26:3.1.21:1.12.7:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:4.2.99:1.16.3:2.7.3:2.1.3:5.1.1:1.20.4:5.3.2:6.2.1:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:2.9.1:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:4.99.1:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.11.1:3.4.21:4.3.2:2.7.2:1.11.1:2.10.1:1.17.7:3.4.23:6.1.1:4.3.1:3.4.22:3.7.1:4.4.1:2.5.1:2.8.1:3.4.14:3.4.11:3.5.3:1.2.7:2.1.2:1.4.7:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:3.1.4:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:1.21.4:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +bd2031065307a5b5b38ea208e314d340 2.4.2:3.2.1:4.3.3:3.6.1:2.1.1:6.3.1:6.3.3:3.5.2:1.8.4:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:1.7.99:4.2.99:1.16.3:2.7.3:2.1.3:5.1.1:1.20.4:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.2.2:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:2.8.3:1.17.7:1.3.8:3.4.23:3.8.1:6.1.1:4.3.1:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:1.2.7:2.1.2:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.2.99:1.2.1:3.1.4:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:1.2.4:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +bf4312f7e11603ff2ae87587fcebbc9c 5.3.3:2.4.2:3.2.1:5.4.3:4.3.3:1.1.5:3.6.1:2.1.1:6.3.1:6.3.3:1.12.1:3.5.2:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:1.7.99:4.2.99:2.7.3:2.1.3:5.1.1:1.20.4:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:2.8.3:1.17.7:1.3.8:3.4.23:6.1.1:4.3.1:3.7.1:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:3.5.3:1.2.7:2.1.2:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.2.99:1.2.1:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +c13e1b0a3d3829bf266d9a2162207b28 3.4.19:2.4.2:3.2.1:5.4.3:4.3.3:3.6.1:2.1.1:1.4.4:6.3.1:6.3.3:1.12.1:3.5.2:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:1.7.99:4.2.99:2.7.3:2.1.3:5.1.1:1.20.4:6.2.1:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:1.1.3:3.1.11:2.9.1:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:4.99.1:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:3.4.17:2.10.1:1.17.7:1.3.8:3.4.23:3.8.1:6.1.1:4.3.1:3.4.22:3.7.1:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:1.2.7:2.1.2:1.6.5:1.97.1:2.3.2:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +c6fe12ce4cddb1b8423b63e6dfad808b 2.4.2:3.2.1:5.4.3:4.3.3:1.1.5:3.6.1:2.1.1:1.4.4:6.3.1:6.3.3:3.3.1:3.5.2:1.8.4:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:4.2.99:2.7.3:2.1.3:5.1.1:1.20.4:6.2.1:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:1.1.3:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:4.99.1:2.6.1:1.8.1:1.7.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:2.6.99:3.4.21:4.3.2:2.7.2:1.11.1:2.10.1:1.17.7:3.4.23:6.1.1:4.3.1:1.3.5:4.4.1:2.5.1:2.8.1:3.4.11:1.2.7:2.1.2:1.6.5:1.97.1:5.99.1:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.1:1.9.3:3.1.4:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:1.2.4:2.4.1:3.1.2:1.6.99:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4:1.17.99 +cb8d96ae1287284021e9038a79bf3131 5.3.3:2.4.2:3.2.1:4.3.3:3.6.1:2.1.1:6.3.1:6.3.3:3.5.2:1.8.4:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:3.5.5:2.7.1:4.1.99:3.6.3:4.2.99:1.16.3:2.1.3:5.1.1:1.20.4:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.11.1:3.4.21:4.3.2:2.7.2:3.4.17:2.8.3:1.17.7:1.3.8:3.4.23:3.8.1:6.1.1:4.3.1:3.4.22:3.7.1:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:3.5.3:1.2.7:2.1.2:1.4.7:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.2.99:1.2.1:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:1.2.4:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:2.7.4 +ccda3b30480708f505105d95da0bfb62 3.4.19:2.4.2:3.2.1:4.3.3:1.1.5:3.6.1:2.1.1:6.3.1:6.3.3:3.5.2:1.8.4:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:1.7.99:4.2.99:2.7.3:2.1.3:5.1.1:1.20.4:6.2.1:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:4.99.1:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:3.4.17:2.8.3:1.17.7:1.3.8:3.4.23:3.8.1:6.1.1:4.3.1:3.4.22:3.7.1:1.3.5:2.7.14:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:1.2.7:2.1.2:1.4.7:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:3.1.4:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +d8e6b7b0368832247dbc5acab0fa4971 3.4.19:2.4.2:3.2.1:4.3.3:3.6.1:2.1.1:6.3.1:6.3.3:3.5.2:1.8.4:5.4.99:3.1.26:1.4.1:1.5.1:3.1.3:2.7.1:3.6.3:4.2.99:2.1.3:5.1.1:1.3.98:6.2.1:5.1.3:3.4.16:3.6.4:5.5.1:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:1.6.3:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:2.8.3:1.17.7:3.4.23:3.8.1:6.1.1:4.3.1:3.4.22:1.3.5:4.4.1:2.5.1:2.8.1:3.4.14:3.4.11:2.1.2:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.6.1:1.2.1:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:2.7.4 +dfa3146f46afd34506e6a71e0ec8b111 3.4.19:2.4.2:3.2.1:4.3.3:3.6.1:2.1.1:6.3.1:6.3.3:1.12.1:3.5.2:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:2.7.1:3.6.3:4.2.99:1.16.3:2.7.3:2.1.3:5.1.1:1.20.4:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:1.17.7:3.4.23:3.8.1:6.1.1:4.3.1:3.4.22:4.4.1:2.5.1:2.8.1:3.4.11:1.2.7:2.1.2:1.4.7:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:3.1.4:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +e238a64ed05a08249266e0e5839548e5 5.3.3:2.4.2:3.2.1:5.4.3:4.3.3:1.1.5:3.6.1:2.1.1:6.3.1:6.3.3:1.12.1:3.5.2:1.8.4:5.1.99:5.4.99:3.1.26:3.1.21:1.12.7:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:1.7.99:4.2.99:1.16.3:2.7.3:1.11.2:2.1.3:5.1.1:1.20.4:1.12.99:1.8.99:6.2.1:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:1.1.3:3.1.11:2.9.1:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:1.7.7:4.99.1:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:2.2.1:3.5.4:3.4.21:4.3.2:2.7.2:1.11.1:3.4.17:2.8.3:1.17.7:1.3.8:3.4.23:3.8.1:6.1.1:4.3.1:3.4.22:3.7.1:1.3.5:2.7.14:4.4.1:2.5.1:2.8.1:3.4.11:3.5.3:1.2.7:2.1.2:1.4.7:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:3.1.4:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:1.18.6:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:1.21.4:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +e396578f1078dd14484f24e821e31f7b 2.4.2:3.2.1:5.4.3:4.3.3:1.1.5:3.6.1:2.1.1:6.3.1:6.3.3:1.12.1:3.5.2:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:4.3.99:3.6.3:1.7.99:4.2.99:1.16.3:2.7.3:2.1.3:5.1.1:1.20.4:3.1.31:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:2.6.1:1.8.1:1.7.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.11.1:3.4.21:4.3.2:2.7.2:1.11.1:1.17.7:3.4.23:6.1.1:4.3.1:3.4.22:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:3.5.3:1.2.7:2.1.2:1.4.7:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.1:3.1.4:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:1.21.4:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +e5f50fc1871b817d772009a19b1a639a 5.3.3:2.4.2:3.2.1:4.3.3:1.1.5:3.6.1:2.1.1:6.3.1:6.3.3:3.5.2:1.8.4:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:3.1.3:2.7.1:3.6.3:4.2.99:2.7.3:1.2.3:2.1.3:5.1.1:1.20.4:5.3.2:1.3.98:6.2.1:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:3.2.2:4.1.3:2.7.8:3.1.1:1.1.3:3.1.11:3.5.99:4.2.3:5.3.1:5.4.2:2.6.1:1.8.1:1.7.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:3.4.23:3.8.1:6.1.1:4.3.1:3.4.22:1.3.5:4.4.1:2.5.1:2.8.1:3.4.14:3.4.11:3.5.3:2.1.2:1.6.5:1.97.1:2.3.2:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.2.1:3.1.4:6.5.1:3.4.25:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:6.3.2:3.5.1:1.2.4:2.4.1:3.1.2:1.6.99:3.1.13:6.3.4:5.2.1:2.7.4 +e645222fbec3f59af2ffb3b22123ac56 3.4.19:2.4.2:3.2.1:5.4.3:4.3.3:3.6.1:2.1.1:6.3.1:6.3.3:1.12.1:3.5.2:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:1.7.99:4.2.99:1.16.3:2.7.3:2.1.3:5.1.1:1.20.4:1.3.98:6.2.1:5.1.3:3.4.16:3.6.4:5.5.1:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:1.1.3:3.1.11:2.9.1:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:1.7.7:4.99.1:2.6.1:1.8.1:1.3.1:2.7.7:4.1.1:2.2.1:3.5.4:3.4.21:4.3.2:2.7.2:1.11.1:3.4.17:2.10.1:2.8.3:1.17.7:1.3.8:3.4.23:3.8.1:6.1.1:4.3.1:3.4.22:3.7.1:1.3.5:4.4.1:2.5.1:2.8.1:3.4.11:1.2.7:2.1.2:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:3.1.4:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:1.3.4:1.18.6:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +e956cc2ce89bd8b63426fbab21f2f2e6 3.4.19:2.4.2:3.2.1:4.3.3:3.6.1:2.1.1:6.3.1:6.3.3:1.12.1:3.5.2:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:1.7.99:4.2.99:2.7.3:2.1.3:5.1.1:1.20.4:6.2.1:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:1.17.7:3.4.23:6.1.1:4.3.1:3.4.22:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:3.5.3:1.2.7:2.1.2:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.1:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +ecbbb5fea0464f857d513de5c23423f1 2.4.2:3.2.1:4.3.3:3.6.1:2.1.1:6.3.1:6.3.3:3.5.2:1.8.4:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:4.3.99:3.6.3:1.7.99:4.2.99:2.7.3:2.1.3:5.1.1:1.20.4:6.2.1:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:4.99.1:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:1.17.7:3.4.23:6.1.1:4.3.1:3.4.22:3.7.1:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:3.5.3:1.2.7:2.1.2:1.4.7:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:3.1.4:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +f41879b82690dbbd64eba913bb60b084 5.3.3:2.4.2:3.2.1:4.3.3:3.6.1:2.1.1:6.3.1:6.3.3:1.12.1:3.3.1:3.5.2:1.8.4:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:2.7.1:3.6.3:1.7.99:4.2.99:2.1.3:5.1.1:1.20.4:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:2.8.3:1.17.7:1.3.8:3.4.23:6.1.1:4.3.1:3.4.22:3.7.1:4.4.1:2.5.1:2.8.1:3.4.11:3.5.3:1.2.7:2.1.2:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +f4b3941d7d57b2f17e1f22ec3077cc57 5.3.3:3.4.19:2.4.2:3.2.1:5.4.3:4.3.3:3.6.1:2.1.1:1.4.4:6.3.1:6.3.3:3.5.2:1.8.4:5.1.99:5.4.99:3.1.26:3.1.21:1.12.7:1.4.1:1.5.1:2.7.9:3.1.3:3.5.5:2.7.1:4.1.99:3.6.3:1.7.99:4.2.99:1.16.3:2.7.3:2.1.3:5.1.1:1.20.4:1.3.98:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:1.1.3:3.1.11:2.9.1:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:1.7.7:4.99.1:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:2.2.1:3.5.4:3.4.21:4.3.2:2.7.2:4.7.1:1.11.1:3.4.17:2.10.1:2.8.3:1.17.7:1.3.8:3.4.23:6.1.1:4.3.1:3.4.22:3.7.1:1.3.5:2.7.14:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:3.5.3:1.2.7:2.1.2:1.6.5:1.97.1:2.3.2:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:3.1.4:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:1.2.4:2.4.1:1.21.4:3.1.13:6.3.4:5.2.1:1.18.1:2.7.4 +f64340086bf5617b5b73684e79e6851c 2.4.2:3.2.1:5.4.3:4.3.3:1.1.5:3.6.1:2.1.1:1.4.4:6.3.1:6.3.3:1.12.1:3.5.2:1.8.4:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:1.7.99:4.2.99:1.16.3:2.7.3:2.1.3:5.1.1:1.20.4:6.2.1:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:4.99.1:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:2.10.1:1.17.7:3.4.23:6.1.1:4.3.1:3.4.22:1.3.5:2.7.14:4.4.1:2.5.1:2.8.1:3.4.11:1.2.7:2.1.2:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:3.1.4:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +f67c4609c1e7a5fa403de7e22c501457 5.3.3:2.4.2:3.2.1:5.4.3:4.3.3:1.1.5:3.6.1:2.1.1:6.3.1:6.3.3:3.5.2:1.8.4:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:4.2.99:1.16.3:2.7.3:2.1.3:5.1.1:1.20.4:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:5.3.99:4.6.1:5.4.2:4.99.1:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.11.1:3.4.21:4.3.2:2.7.2:1.11.1:2.8.3:1.17.7:1.3.8:3.4.23:6.1.1:4.3.1:3.4.22:3.7.1:1.3.5:2.7.14:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:3.5.3:1.2.7:2.1.2:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.2.99:1.2.1:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +fd032fad609be92a9a9d2a36e2e03faa 2.4.2:3.2.1:5.4.3:4.3.3:1.1.5:3.6.1:2.1.1:1.4.4:6.3.1:6.3.3:1.12.1:3.5.2:1.8.4:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:1.7.99:4.2.99:1.16.3:2.7.3:2.1.3:5.1.1:1.20.4:6.2.1:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:3.2.2:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:4.99.1:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:2.10.1:1.17.7:3.4.23:6.1.1:4.3.1:3.4.22:1.3.5:2.7.14:4.4.1:2.5.1:2.8.1:3.4.11:1.2.7:2.1.2:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.4.3:1.2.99:1.2.1:3.1.4:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 +fe888f4b12c0b05171796bd6d1b4f590 5.3.3:2.4.2:3.2.1:5.4.3:4.3.3:1.1.5:3.6.1:2.1.1:6.3.1:6.3.3:1.12.1:3.5.2:5.1.99:5.4.99:3.1.26:3.1.21:1.4.1:1.5.1:2.7.9:3.1.3:4.1.99:2.7.1:3.6.3:1.7.99:4.2.99:2.7.3:2.1.3:5.1.1:1.20.4:5.1.3:3.4.16:3.6.4:1.1.1:1.17.1:2.8.4:3.1.22:4.1.3:2.7.8:3.1.1:3.4.24:3.1.11:3.5.99:4.2.3:5.3.1:4.6.1:5.4.2:2.6.1:1.8.1:1.3.1:2.7.7:6.4.1:4.1.1:3.5.4:2.2.1:3.4.21:4.3.2:2.7.2:1.11.1:2.8.3:1.17.7:1.3.8:3.4.23:6.1.1:4.3.1:3.7.1:4.4.1:2.5.1:2.8.1:3.1.12:3.4.11:3.5.3:1.2.7:2.1.2:1.6.5:1.97.1:5.99.1:3.4.13:2.7.6:2.7.11:1.17.4:4.2.1:1.2.99:1.2.1:6.5.1:6.3.5:2.3.3:2.7.13:2.4.99:2.3.1:4.1.2:1.3.99:6.3.2:1.15.1:3.5.1:2.4.1:3.1.13:6.3.4:5.2.1:1.18.1:3.1.5:2.7.4 diff --git a/build/lib.macosx-10.13-x86_64-cpython-310/nw_ec_alignx.cpython-310-darwin.so b/build/lib.macosx-10.13-x86_64-cpython-310/nw_ec_alignx.cpython-310-darwin.so new file mode 100755 index 0000000..a889c66 Binary files /dev/null and b/build/lib.macosx-10.13-x86_64-cpython-310/nw_ec_alignx.cpython-310-darwin.so differ diff --git a/build/temp.macosx-10.13-x86_64-cpython-310/nw_ec_alignx.o b/build/temp.macosx-10.13-x86_64-cpython-310/nw_ec_alignx.o new file mode 100644 index 0000000..5f09514 Binary files /dev/null and b/build/temp.macosx-10.13-x86_64-cpython-310/nw_ec_alignx.o differ diff --git a/conda_env_simple.yml b/conda_env_simple.yml new file mode 100644 index 0000000..436c5b1 --- /dev/null +++ b/conda_env_simple.yml @@ -0,0 +1,17 @@ +name: ess-env +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - python=3.10 + - pip + - numpy + - pandas + - matplotlib + - seaborn + - scipy + - biopython + - scikit-learn + + diff --git a/nw_ec_alignx.c b/nw_ec_alignx.c new file mode 100644 index 0000000..67aaaab --- /dev/null +++ b/nw_ec_alignx.c @@ -0,0 +1,24683 @@ +/* Generated by Cython 3.0.11 */ + +/* BEGIN: Cython Metadata +{ + "distutils": { + "define_macros": [ + [ + "NPY_NO_DEPRECATED_API", + "NPY_1_7_API_VERSION" + ] + ], + "depends": [ + "/Users/nandini.gadhia/miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/_core/include/numpy/arrayobject.h", + "/Users/nandini.gadhia/miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/_core/include/numpy/arrayscalars.h", + "/Users/nandini.gadhia/miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/_core/include/numpy/ndarrayobject.h", + "/Users/nandini.gadhia/miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/_core/include/numpy/ndarraytypes.h", + "/Users/nandini.gadhia/miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/_core/include/numpy/ufuncobject.h" + ], + "include_dirs": [ + "/Users/nandini.gadhia/miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/_core/include" + ], + "name": "nw_ec_alignx", + "sources": [ + "nw_ec_alignx.pyx" + ] + }, + "module_name": "nw_ec_alignx" +} +END: Cython Metadata */ + +#ifndef PY_SSIZE_T_CLEAN +#define PY_SSIZE_T_CLEAN +#endif /* PY_SSIZE_T_CLEAN */ +#if defined(CYTHON_LIMITED_API) && 0 + #ifndef Py_LIMITED_API + #if CYTHON_LIMITED_API+0 > 0x03030000 + #define Py_LIMITED_API CYTHON_LIMITED_API + #else + #define Py_LIMITED_API 0x03030000 + #endif + #endif +#endif + +#include "Python.h" + + #if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyFloat_FromString(obj) PyFloat_FromString(obj) + #else + #define __Pyx_PyFloat_FromString(obj) PyFloat_FromString(obj, NULL) + #endif + + + #if PY_MAJOR_VERSION <= 2 + #define PyDict_GetItemWithError _PyDict_GetItemWithError + #endif + + + #if (PY_VERSION_HEX < 0x030700b1 || (CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM < 0x07030600)) && !defined(PyContextVar_Get) + #define PyContextVar_Get(var, d, v) ((d) ? ((void)(var), Py_INCREF(d), (v)[0] = (d), 0) : ((v)[0] = NULL, 0) ) + #endif + +#ifndef Py_PYTHON_H + #error Python headers needed to compile C extensions, please install development version of Python. +#elif PY_VERSION_HEX < 0x02070000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) + #error Cython requires Python 2.7+ or Python 3.3+. +#else +#if defined(CYTHON_LIMITED_API) && CYTHON_LIMITED_API +#define __PYX_EXTRA_ABI_MODULE_NAME "limited" +#else +#define __PYX_EXTRA_ABI_MODULE_NAME "" +#endif +#define CYTHON_ABI "3_0_11" __PYX_EXTRA_ABI_MODULE_NAME +#define __PYX_ABI_MODULE_NAME "_cython_" CYTHON_ABI +#define __PYX_TYPE_MODULE_PREFIX __PYX_ABI_MODULE_NAME "." +#define CYTHON_HEX_VERSION 0x03000BF0 +#define CYTHON_FUTURE_DIVISION 1 +#include +#ifndef offsetof + #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) +#endif +#if !defined(_WIN32) && !defined(WIN32) && !defined(MS_WINDOWS) + #ifndef __stdcall + #define __stdcall + #endif + #ifndef __cdecl + #define __cdecl + #endif + #ifndef __fastcall + #define __fastcall + #endif +#endif +#ifndef DL_IMPORT + #define DL_IMPORT(t) t +#endif +#ifndef DL_EXPORT + #define DL_EXPORT(t) t +#endif +#define __PYX_COMMA , +#ifndef HAVE_LONG_LONG + #define HAVE_LONG_LONG +#endif +#ifndef PY_LONG_LONG + #define PY_LONG_LONG LONG_LONG +#endif +#ifndef Py_HUGE_VAL + #define Py_HUGE_VAL HUGE_VAL +#endif +#define __PYX_LIMITED_VERSION_HEX PY_VERSION_HEX +#if defined(GRAALVM_PYTHON) + /* For very preliminary testing purposes. Most variables are set the same as PyPy. + The existence of this section does not imply that anything works or is even tested */ + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 1 + #define CYTHON_COMPILING_IN_NOGIL 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3) + #endif + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 +#elif defined(PYPY_VERSION) + #define CYTHON_COMPILING_IN_PYPY 1 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3) + #endif + #if PY_VERSION_HEX < 0x03090000 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT) + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #endif + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1 && PYPY_VERSION_NUM >= 0x07030C00) + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 +#elif defined(CYTHON_LIMITED_API) + #ifdef Py_LIMITED_API + #undef __PYX_LIMITED_VERSION_HEX + #define __PYX_LIMITED_VERSION_HEX Py_LIMITED_API + #endif + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 1 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 + #undef CYTHON_CLINE_IN_TRACEBACK + #define CYTHON_CLINE_IN_TRACEBACK 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 1 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #endif + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 1 + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #endif + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 +#elif defined(Py_GIL_DISABLED) || defined(Py_NOGIL) + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 1 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #ifndef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #ifndef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #ifndef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 1 + #endif + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif + #ifndef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #endif + #ifndef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #endif + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 1 + #endif + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 + #endif + #ifndef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 + #endif +#else + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 1 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif + #ifndef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 1 + #endif + #if PY_MAJOR_VERSION < 3 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #ifndef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 1 + #endif + #ifndef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 1 + #endif + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #if PY_VERSION_HEX < 0x030300F0 || PY_VERSION_HEX >= 0x030B00A2 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #elif !defined(CYTHON_USE_UNICODE_WRITER) + #define CYTHON_USE_UNICODE_WRITER 1 + #endif + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #ifndef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 1 + #endif + #ifndef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL (PY_MAJOR_VERSION < 3 || PY_VERSION_HEX >= 0x03060000 && PY_VERSION_HEX < 0x030C00A6) + #endif + #ifndef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL (PY_VERSION_HEX >= 0x030700A1) + #endif + #ifndef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 1 + #endif + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT) + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #endif + #ifndef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #endif + #if PY_VERSION_HEX < 0x030400a1 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #elif !defined(CYTHON_USE_TP_FINALIZE) + #define CYTHON_USE_TP_FINALIZE 1 + #endif + #if PY_VERSION_HEX < 0x030600B1 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #elif !defined(CYTHON_USE_DICT_VERSIONS) + #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX < 0x030C00A5) + #endif + #if PY_VERSION_HEX < 0x030700A3 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #elif !defined(CYTHON_USE_EXC_INFO_STACK) + #define CYTHON_USE_EXC_INFO_STACK 1 + #endif + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 + #endif + #ifndef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 1 + #endif +#endif +#if !defined(CYTHON_FAST_PYCCALL) +#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) +#endif +#if !defined(CYTHON_VECTORCALL) +#define CYTHON_VECTORCALL (CYTHON_FAST_PYCCALL && PY_VERSION_HEX >= 0x030800B1) +#endif +#define CYTHON_BACKPORT_VECTORCALL (CYTHON_METH_FASTCALL && PY_VERSION_HEX < 0x030800B1) +#if CYTHON_USE_PYLONG_INTERNALS + #if PY_MAJOR_VERSION < 3 + #include "longintrepr.h" + #endif + #undef SHIFT + #undef BASE + #undef MASK + #ifdef SIZEOF_VOID_P + enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) }; + #endif +#endif +#ifndef __has_attribute + #define __has_attribute(x) 0 +#endif +#ifndef __has_cpp_attribute + #define __has_cpp_attribute(x) 0 +#endif +#ifndef CYTHON_RESTRICT + #if defined(__GNUC__) + #define CYTHON_RESTRICT __restrict__ + #elif defined(_MSC_VER) && _MSC_VER >= 1400 + #define CYTHON_RESTRICT __restrict + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_RESTRICT restrict + #else + #define CYTHON_RESTRICT + #endif +#endif +#ifndef CYTHON_UNUSED + #if defined(__cplusplus) + /* for clang __has_cpp_attribute(maybe_unused) is true even before C++17 + * but leads to warnings with -pedantic, since it is a C++17 feature */ + #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) + #if __has_cpp_attribute(maybe_unused) + #define CYTHON_UNUSED [[maybe_unused]] + #endif + #endif + #endif +#endif +#ifndef CYTHON_UNUSED +# if defined(__GNUC__) +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +#endif +#ifndef CYTHON_UNUSED_VAR +# if defined(__cplusplus) + template void CYTHON_UNUSED_VAR( const T& ) { } +# else +# define CYTHON_UNUSED_VAR(x) (void)(x) +# endif +#endif +#ifndef CYTHON_MAYBE_UNUSED_VAR + #define CYTHON_MAYBE_UNUSED_VAR(x) CYTHON_UNUSED_VAR(x) +#endif +#ifndef CYTHON_NCP_UNUSED +# if CYTHON_COMPILING_IN_CPYTHON +# define CYTHON_NCP_UNUSED +# else +# define CYTHON_NCP_UNUSED CYTHON_UNUSED +# endif +#endif +#ifndef CYTHON_USE_CPP_STD_MOVE + #if defined(__cplusplus) && (\ + __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1600)) + #define CYTHON_USE_CPP_STD_MOVE 1 + #else + #define CYTHON_USE_CPP_STD_MOVE 0 + #endif +#endif +#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None) +#ifdef _MSC_VER + #ifndef _MSC_STDINT_H_ + #if _MSC_VER < 1300 + typedef unsigned char uint8_t; + typedef unsigned short uint16_t; + typedef unsigned int uint32_t; + #else + typedef unsigned __int8 uint8_t; + typedef unsigned __int16 uint16_t; + typedef unsigned __int32 uint32_t; + #endif + #endif + #if _MSC_VER < 1300 + #ifdef _WIN64 + typedef unsigned long long __pyx_uintptr_t; + #else + typedef unsigned int __pyx_uintptr_t; + #endif + #else + #ifdef _WIN64 + typedef unsigned __int64 __pyx_uintptr_t; + #else + typedef unsigned __int32 __pyx_uintptr_t; + #endif + #endif +#else + #include + typedef uintptr_t __pyx_uintptr_t; +#endif +#ifndef CYTHON_FALLTHROUGH + #if defined(__cplusplus) + /* for clang __has_cpp_attribute(fallthrough) is true even before C++17 + * but leads to warnings with -pedantic, since it is a C++17 feature */ + #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) + #if __has_cpp_attribute(fallthrough) + #define CYTHON_FALLTHROUGH [[fallthrough]] + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_cpp_attribute(clang::fallthrough) + #define CYTHON_FALLTHROUGH [[clang::fallthrough]] + #elif __has_cpp_attribute(gnu::fallthrough) + #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] + #endif + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_attribute(fallthrough) + #define CYTHON_FALLTHROUGH __attribute__((fallthrough)) + #else + #define CYTHON_FALLTHROUGH + #endif + #endif + #if defined(__clang__) && defined(__apple_build_version__) + #if __apple_build_version__ < 7000000 + #undef CYTHON_FALLTHROUGH + #define CYTHON_FALLTHROUGH + #endif + #endif +#endif +#ifdef __cplusplus + template + struct __PYX_IS_UNSIGNED_IMPL {static const bool value = T(0) < T(-1);}; + #define __PYX_IS_UNSIGNED(type) (__PYX_IS_UNSIGNED_IMPL::value) +#else + #define __PYX_IS_UNSIGNED(type) (((type)-1) > 0) +#endif +#if CYTHON_COMPILING_IN_PYPY == 1 + #define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x030A0000) +#else + #define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000) +#endif +#define __PYX_REINTERPRET_FUNCION(func_pointer, other_pointer) ((func_pointer)(void(*)(void))(other_pointer)) + +#ifndef CYTHON_INLINE + #if defined(__clang__) + #define CYTHON_INLINE __inline__ __attribute__ ((__unused__)) + #elif defined(__GNUC__) + #define CYTHON_INLINE __inline__ + #elif defined(_MSC_VER) + #define CYTHON_INLINE __inline + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_INLINE inline + #else + #define CYTHON_INLINE + #endif +#endif + +#define __PYX_BUILD_PY_SSIZE_T "n" +#define CYTHON_FORMAT_SSIZE_T "z" +#if PY_MAJOR_VERSION < 3 + #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" + #define __Pyx_DefaultClassType PyClass_Type + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#else + #define __Pyx_BUILTIN_MODULE_NAME "builtins" + #define __Pyx_DefaultClassType PyType_Type +#if CYTHON_COMPILING_IN_LIMITED_API + static CYTHON_INLINE PyObject* __Pyx_PyCode_New(int a, int p, int k, int l, int s, int f, + PyObject *code, PyObject *c, PyObject* n, PyObject *v, + PyObject *fv, PyObject *cell, PyObject* fn, + PyObject *name, int fline, PyObject *lnos) { + PyObject *exception_table = NULL; + PyObject *types_module=NULL, *code_type=NULL, *result=NULL; + #if __PYX_LIMITED_VERSION_HEX < 0x030B0000 + PyObject *version_info; + PyObject *py_minor_version = NULL; + #endif + long minor_version = 0; + PyObject *type, *value, *traceback; + PyErr_Fetch(&type, &value, &traceback); + #if __PYX_LIMITED_VERSION_HEX >= 0x030B0000 + minor_version = 11; + #else + if (!(version_info = PySys_GetObject("version_info"))) goto end; + if (!(py_minor_version = PySequence_GetItem(version_info, 1))) goto end; + minor_version = PyLong_AsLong(py_minor_version); + Py_DECREF(py_minor_version); + if (minor_version == -1 && PyErr_Occurred()) goto end; + #endif + if (!(types_module = PyImport_ImportModule("types"))) goto end; + if (!(code_type = PyObject_GetAttrString(types_module, "CodeType"))) goto end; + if (minor_version <= 7) { + (void)p; + result = PyObject_CallFunction(code_type, "iiiiiOOOOOOiOO", a, k, l, s, f, code, + c, n, v, fn, name, fline, lnos, fv, cell); + } else if (minor_version <= 10) { + result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOiOO", a,p, k, l, s, f, code, + c, n, v, fn, name, fline, lnos, fv, cell); + } else { + if (!(exception_table = PyBytes_FromStringAndSize(NULL, 0))) goto end; + result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOOiOO", a,p, k, l, s, f, code, + c, n, v, fn, name, name, fline, lnos, exception_table, fv, cell); + } + end: + Py_XDECREF(code_type); + Py_XDECREF(exception_table); + Py_XDECREF(types_module); + if (type) { + PyErr_Restore(type, value, traceback); + } + return result; + } + #ifndef CO_OPTIMIZED + #define CO_OPTIMIZED 0x0001 + #endif + #ifndef CO_NEWLOCALS + #define CO_NEWLOCALS 0x0002 + #endif + #ifndef CO_VARARGS + #define CO_VARARGS 0x0004 + #endif + #ifndef CO_VARKEYWORDS + #define CO_VARKEYWORDS 0x0008 + #endif + #ifndef CO_ASYNC_GENERATOR + #define CO_ASYNC_GENERATOR 0x0200 + #endif + #ifndef CO_GENERATOR + #define CO_GENERATOR 0x0020 + #endif + #ifndef CO_COROUTINE + #define CO_COROUTINE 0x0080 + #endif +#elif PY_VERSION_HEX >= 0x030B0000 + static CYTHON_INLINE PyCodeObject* __Pyx_PyCode_New(int a, int p, int k, int l, int s, int f, + PyObject *code, PyObject *c, PyObject* n, PyObject *v, + PyObject *fv, PyObject *cell, PyObject* fn, + PyObject *name, int fline, PyObject *lnos) { + PyCodeObject *result; + PyObject *empty_bytes = PyBytes_FromStringAndSize("", 0); + if (!empty_bytes) return NULL; + result = + #if PY_VERSION_HEX >= 0x030C0000 + PyUnstable_Code_NewWithPosOnlyArgs + #else + PyCode_NewWithPosOnlyArgs + #endif + (a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, name, fline, lnos, empty_bytes); + Py_DECREF(empty_bytes); + return result; + } +#elif PY_VERSION_HEX >= 0x030800B2 && !CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_NewWithPosOnlyArgs(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#else + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#endif +#endif +#if PY_VERSION_HEX >= 0x030900A4 || defined(Py_IS_TYPE) + #define __Pyx_IS_TYPE(ob, type) Py_IS_TYPE(ob, type) +#else + #define __Pyx_IS_TYPE(ob, type) (((const PyObject*)ob)->ob_type == (type)) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_Is) + #define __Pyx_Py_Is(x, y) Py_Is(x, y) +#else + #define __Pyx_Py_Is(x, y) ((x) == (y)) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsNone) + #define __Pyx_Py_IsNone(ob) Py_IsNone(ob) +#else + #define __Pyx_Py_IsNone(ob) __Pyx_Py_Is((ob), Py_None) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsTrue) + #define __Pyx_Py_IsTrue(ob) Py_IsTrue(ob) +#else + #define __Pyx_Py_IsTrue(ob) __Pyx_Py_Is((ob), Py_True) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsFalse) + #define __Pyx_Py_IsFalse(ob) Py_IsFalse(ob) +#else + #define __Pyx_Py_IsFalse(ob) __Pyx_Py_Is((ob), Py_False) +#endif +#define __Pyx_NoneAsNull(obj) (__Pyx_Py_IsNone(obj) ? NULL : (obj)) +#if PY_VERSION_HEX >= 0x030900F0 && !CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyObject_GC_IsFinalized(o) PyObject_GC_IsFinalized(o) +#else + #define __Pyx_PyObject_GC_IsFinalized(o) _PyGC_FINALIZED(o) +#endif +#ifndef CO_COROUTINE + #define CO_COROUTINE 0x80 +#endif +#ifndef CO_ASYNC_GENERATOR + #define CO_ASYNC_GENERATOR 0x200 +#endif +#ifndef Py_TPFLAGS_CHECKTYPES + #define Py_TPFLAGS_CHECKTYPES 0 +#endif +#ifndef Py_TPFLAGS_HAVE_INDEX + #define Py_TPFLAGS_HAVE_INDEX 0 +#endif +#ifndef Py_TPFLAGS_HAVE_NEWBUFFER + #define Py_TPFLAGS_HAVE_NEWBUFFER 0 +#endif +#ifndef Py_TPFLAGS_HAVE_FINALIZE + #define Py_TPFLAGS_HAVE_FINALIZE 0 +#endif +#ifndef Py_TPFLAGS_SEQUENCE + #define Py_TPFLAGS_SEQUENCE 0 +#endif +#ifndef Py_TPFLAGS_MAPPING + #define Py_TPFLAGS_MAPPING 0 +#endif +#ifndef METH_STACKLESS + #define METH_STACKLESS 0 +#endif +#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL) + #ifndef METH_FASTCALL + #define METH_FASTCALL 0x80 + #endif + typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs); + typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args, + Py_ssize_t nargs, PyObject *kwnames); +#else + #if PY_VERSION_HEX >= 0x030d00A4 + # define __Pyx_PyCFunctionFast PyCFunctionFast + # define __Pyx_PyCFunctionFastWithKeywords PyCFunctionFastWithKeywords + #else + # define __Pyx_PyCFunctionFast _PyCFunctionFast + # define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords + #endif +#endif +#if CYTHON_METH_FASTCALL + #define __Pyx_METH_FASTCALL METH_FASTCALL + #define __Pyx_PyCFunction_FastCall __Pyx_PyCFunctionFast + #define __Pyx_PyCFunction_FastCallWithKeywords __Pyx_PyCFunctionFastWithKeywords +#else + #define __Pyx_METH_FASTCALL METH_VARARGS + #define __Pyx_PyCFunction_FastCall PyCFunction + #define __Pyx_PyCFunction_FastCallWithKeywords PyCFunctionWithKeywords +#endif +#if CYTHON_VECTORCALL + #define __pyx_vectorcallfunc vectorcallfunc + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET PY_VECTORCALL_ARGUMENTS_OFFSET + #define __Pyx_PyVectorcall_NARGS(n) PyVectorcall_NARGS((size_t)(n)) +#elif CYTHON_BACKPORT_VECTORCALL + typedef PyObject *(*__pyx_vectorcallfunc)(PyObject *callable, PyObject *const *args, + size_t nargsf, PyObject *kwnames); + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET ((size_t)1 << (8 * sizeof(size_t) - 1)) + #define __Pyx_PyVectorcall_NARGS(n) ((Py_ssize_t)(((size_t)(n)) & ~__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)) +#else + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET 0 + #define __Pyx_PyVectorcall_NARGS(n) ((Py_ssize_t)(n)) +#endif +#if PY_MAJOR_VERSION >= 0x030900B1 +#define __Pyx_PyCFunction_CheckExact(func) PyCFunction_CheckExact(func) +#else +#define __Pyx_PyCFunction_CheckExact(func) PyCFunction_Check(func) +#endif +#define __Pyx_CyOrPyCFunction_Check(func) PyCFunction_Check(func) +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_CyOrPyCFunction_GET_FUNCTION(func) (((PyCFunctionObject*)(func))->m_ml->ml_meth) +#elif !CYTHON_COMPILING_IN_LIMITED_API +#define __Pyx_CyOrPyCFunction_GET_FUNCTION(func) PyCFunction_GET_FUNCTION(func) +#endif +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_CyOrPyCFunction_GET_FLAGS(func) (((PyCFunctionObject*)(func))->m_ml->ml_flags) +static CYTHON_INLINE PyObject* __Pyx_CyOrPyCFunction_GET_SELF(PyObject *func) { + return (__Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_STATIC) ? NULL : ((PyCFunctionObject*)func)->m_self; +} +#endif +static CYTHON_INLINE int __Pyx__IsSameCFunction(PyObject *func, void *cfunc) { +#if CYTHON_COMPILING_IN_LIMITED_API + return PyCFunction_Check(func) && PyCFunction_GetFunction(func) == (PyCFunction) cfunc; +#else + return PyCFunction_Check(func) && PyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc; +#endif +} +#define __Pyx_IsSameCFunction(func, cfunc) __Pyx__IsSameCFunction(func, cfunc) +#if __PYX_LIMITED_VERSION_HEX < 0x030900B1 + #define __Pyx_PyType_FromModuleAndSpec(m, s, b) ((void)m, PyType_FromSpecWithBases(s, b)) + typedef PyObject *(*__Pyx_PyCMethod)(PyObject *, PyTypeObject *, PyObject *const *, size_t, PyObject *); +#else + #define __Pyx_PyType_FromModuleAndSpec(m, s, b) PyType_FromModuleAndSpec(m, s, b) + #define __Pyx_PyCMethod PyCMethod +#endif +#ifndef METH_METHOD + #define METH_METHOD 0x200 +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc) + #define PyObject_Malloc(s) PyMem_Malloc(s) + #define PyObject_Free(p) PyMem_Free(p) + #define PyObject_Realloc(p) PyMem_Realloc(p) +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) +#else + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno) +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyThreadState_Current PyThreadState_Get() +#elif !CYTHON_FAST_THREAD_STATE + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#elif PY_VERSION_HEX >= 0x030d00A1 + #define __Pyx_PyThreadState_Current PyThreadState_GetUnchecked() +#elif PY_VERSION_HEX >= 0x03060000 + #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet() +#elif PY_VERSION_HEX >= 0x03000000 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#else + #define __Pyx_PyThreadState_Current _PyThreadState_Current +#endif +#if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_INLINE void *__Pyx_PyModule_GetState(PyObject *op) +{ + void *result; + result = PyModule_GetState(op); + if (!result) + Py_FatalError("Couldn't find the module state"); + return result; +} +#endif +#define __Pyx_PyObject_GetSlot(obj, name, func_ctype) __Pyx_PyType_GetSlot(Py_TYPE(obj), name, func_ctype) +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyType_GetSlot(type, name, func_ctype) ((func_ctype) PyType_GetSlot((type), Py_##name)) +#else + #define __Pyx_PyType_GetSlot(type, name, func_ctype) ((type)->name) +#endif +#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT) +#include "pythread.h" +#define Py_tss_NEEDS_INIT 0 +typedef int Py_tss_t; +static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) { + *key = PyThread_create_key(); + return 0; +} +static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) { + Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t)); + *key = Py_tss_NEEDS_INIT; + return key; +} +static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) { + PyObject_Free(key); +} +static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) { + return *key != Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) { + PyThread_delete_key(*key); + *key = Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) { + return PyThread_set_key_value(*key, value); +} +static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { + return PyThread_get_key_value(*key); +} +#endif +#if PY_MAJOR_VERSION < 3 + #if CYTHON_COMPILING_IN_PYPY + #if PYPY_VERSION_NUM < 0x07030600 + #if defined(__cplusplus) && __cplusplus >= 201402L + [[deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")]] + #elif defined(__GNUC__) || defined(__clang__) + __attribute__ ((__deprecated__("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6"))) + #elif defined(_MSC_VER) + __declspec(deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")) + #endif + static CYTHON_INLINE int PyGILState_Check(void) { + return 0; + } + #else // PYPY_VERSION_NUM < 0x07030600 + #endif // PYPY_VERSION_NUM < 0x07030600 + #else + static CYTHON_INLINE int PyGILState_Check(void) { + PyThreadState * tstate = _PyThreadState_Current; + return tstate && (tstate == PyGILState_GetThisThreadState()); + } + #endif +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030d0000 || defined(_PyDict_NewPresized) +#define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n)) +#else +#define __Pyx_PyDict_NewPresized(n) PyDict_New() +#endif +#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION + #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) +#else + #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX > 0x030600B4 && PY_VERSION_HEX < 0x030d0000 && CYTHON_USE_UNICODE_INTERNALS +#define __Pyx_PyDict_GetItemStrWithError(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) +static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStr(PyObject *dict, PyObject *name) { + PyObject *res = __Pyx_PyDict_GetItemStrWithError(dict, name); + if (res == NULL) PyErr_Clear(); + return res; +} +#elif PY_MAJOR_VERSION >= 3 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07020000) +#define __Pyx_PyDict_GetItemStrWithError PyDict_GetItemWithError +#define __Pyx_PyDict_GetItemStr PyDict_GetItem +#else +static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStrWithError(PyObject *dict, PyObject *name) { +#if CYTHON_COMPILING_IN_PYPY + return PyDict_GetItem(dict, name); +#else + PyDictEntry *ep; + PyDictObject *mp = (PyDictObject*) dict; + long hash = ((PyStringObject *) name)->ob_shash; + assert(hash != -1); + ep = (mp->ma_lookup)(mp, name, hash); + if (ep == NULL) { + return NULL; + } + return ep->me_value; +#endif +} +#define __Pyx_PyDict_GetItemStr PyDict_GetItem +#endif +#if CYTHON_USE_TYPE_SLOTS + #define __Pyx_PyType_GetFlags(tp) (((PyTypeObject *)tp)->tp_flags) + #define __Pyx_PyType_HasFeature(type, feature) ((__Pyx_PyType_GetFlags(type) & (feature)) != 0) + #define __Pyx_PyObject_GetIterNextFunc(obj) (Py_TYPE(obj)->tp_iternext) +#else + #define __Pyx_PyType_GetFlags(tp) (PyType_GetFlags((PyTypeObject *)tp)) + #define __Pyx_PyType_HasFeature(type, feature) PyType_HasFeature(type, feature) + #define __Pyx_PyObject_GetIterNextFunc(obj) PyIter_Next +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_SetItemOnTypeDict(tp, k, v) PyObject_GenericSetAttr((PyObject*)tp, k, v) +#else + #define __Pyx_SetItemOnTypeDict(tp, k, v) PyDict_SetItem(tp->tp_dict, k, v) +#endif +#if CYTHON_USE_TYPE_SPECS && PY_VERSION_HEX >= 0x03080000 +#define __Pyx_PyHeapTypeObject_GC_Del(obj) {\ + PyTypeObject *type = Py_TYPE((PyObject*)obj);\ + assert(__Pyx_PyType_HasFeature(type, Py_TPFLAGS_HEAPTYPE));\ + PyObject_GC_Del(obj);\ + Py_DECREF(type);\ +} +#else +#define __Pyx_PyHeapTypeObject_GC_Del(obj) PyObject_GC_Del(obj) +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define CYTHON_PEP393_ENABLED 1 + #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GetLength(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_ReadChar(u, i) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((void)u, 1114111U) + #define __Pyx_PyUnicode_KIND(u) ((void)u, (0)) + #define __Pyx_PyUnicode_DATA(u) ((void*)u) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)k, PyUnicode_ReadChar((PyObject*)(d), i)) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GetLength(u)) +#elif PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) + #define CYTHON_PEP393_ENABLED 1 + #if PY_VERSION_HEX >= 0x030C0000 + #define __Pyx_PyUnicode_READY(op) (0) + #else + #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ + 0 : _PyUnicode_Ready((PyObject *)(op))) + #endif + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u) + #define __Pyx_PyUnicode_KIND(u) ((int)PyUnicode_KIND(u)) + #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) + #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, (Py_UCS4) ch) + #if PY_VERSION_HEX >= 0x030C0000 + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_LENGTH(u)) + #else + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03090000 + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : ((PyCompactUnicodeObject *)(u))->wstr_length)) + #else + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) + #endif + #endif +#else + #define CYTHON_PEP393_ENABLED 0 + #define PyUnicode_1BYTE_KIND 1 + #define PyUnicode_2BYTE_KIND 2 + #define PyUnicode_4BYTE_KIND 4 + #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535U : 1114111U) + #define __Pyx_PyUnicode_KIND(u) ((int)sizeof(Py_UNICODE)) + #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = (Py_UNICODE) ch) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u)) +#endif +#if CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) +#else + #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\ + PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) +#endif +#if CYTHON_COMPILING_IN_PYPY + #if !defined(PyUnicode_DecodeUnicodeEscape) + #define PyUnicode_DecodeUnicodeEscape(s, size, errors) PyUnicode_Decode(s, size, "unicode_escape", errors) + #endif + #if !defined(PyUnicode_Contains) || (PY_MAJOR_VERSION == 2 && PYPY_VERSION_NUM < 0x07030500) + #undef PyUnicode_Contains + #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) + #endif + #if !defined(PyByteArray_Check) + #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type) + #endif + #if !defined(PyObject_Format) + #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt) + #endif +#endif +#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) +#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) +#else + #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) +#endif +#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII) + #define PyObject_ASCII(o) PyObject_Repr(o) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBaseString_Type PyUnicode_Type + #define PyStringObject PyUnicodeObject + #define PyString_Type PyUnicode_Type + #define PyString_Check PyUnicode_Check + #define PyString_CheckExact PyUnicode_CheckExact +#ifndef PyObject_Unicode + #define PyObject_Unicode PyObject_Str +#endif +#endif +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) + #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) +#else + #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj)) + #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) +#endif +#if CYTHON_COMPILING_IN_CPYTHON + #define __Pyx_PySequence_ListKeepNew(obj)\ + (likely(PyList_CheckExact(obj) && Py_REFCNT(obj) == 1) ? __Pyx_NewRef(obj) : PySequence_List(obj)) +#else + #define __Pyx_PySequence_ListKeepNew(obj) PySequence_List(obj) +#endif +#ifndef PySet_CheckExact + #define PySet_CheckExact(obj) __Pyx_IS_TYPE(obj, &PySet_Type) +#endif +#if PY_VERSION_HEX >= 0x030900A4 + #define __Pyx_SET_REFCNT(obj, refcnt) Py_SET_REFCNT(obj, refcnt) + #define __Pyx_SET_SIZE(obj, size) Py_SET_SIZE(obj, size) +#else + #define __Pyx_SET_REFCNT(obj, refcnt) Py_REFCNT(obj) = (refcnt) + #define __Pyx_SET_SIZE(obj, size) Py_SIZE(obj) = (size) +#endif +#if CYTHON_ASSUME_SAFE_MACROS + #define __Pyx_PySequence_ITEM(o, i) PySequence_ITEM(o, i) + #define __Pyx_PySequence_SIZE(seq) Py_SIZE(seq) + #define __Pyx_PyTuple_SET_ITEM(o, i, v) (PyTuple_SET_ITEM(o, i, v), (0)) + #define __Pyx_PyList_SET_ITEM(o, i, v) (PyList_SET_ITEM(o, i, v), (0)) + #define __Pyx_PyTuple_GET_SIZE(o) PyTuple_GET_SIZE(o) + #define __Pyx_PyList_GET_SIZE(o) PyList_GET_SIZE(o) + #define __Pyx_PySet_GET_SIZE(o) PySet_GET_SIZE(o) + #define __Pyx_PyBytes_GET_SIZE(o) PyBytes_GET_SIZE(o) + #define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_GET_SIZE(o) +#else + #define __Pyx_PySequence_ITEM(o, i) PySequence_GetItem(o, i) + #define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq) + #define __Pyx_PyTuple_SET_ITEM(o, i, v) PyTuple_SetItem(o, i, v) + #define __Pyx_PyList_SET_ITEM(o, i, v) PyList_SetItem(o, i, v) + #define __Pyx_PyTuple_GET_SIZE(o) PyTuple_Size(o) + #define __Pyx_PyList_GET_SIZE(o) PyList_Size(o) + #define __Pyx_PySet_GET_SIZE(o) PySet_Size(o) + #define __Pyx_PyBytes_GET_SIZE(o) PyBytes_Size(o) + #define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_Size(o) +#endif +#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1 + #define __Pyx_PyImport_AddModuleRef(name) PyImport_AddModuleRef(name) +#else + static CYTHON_INLINE PyObject *__Pyx_PyImport_AddModuleRef(const char *name) { + PyObject *module = PyImport_AddModule(name); + Py_XINCREF(module); + return module; + } +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyIntObject PyLongObject + #define PyInt_Type PyLong_Type + #define PyInt_Check(op) PyLong_Check(op) + #define PyInt_CheckExact(op) PyLong_CheckExact(op) + #define __Pyx_Py3Int_Check(op) PyLong_Check(op) + #define __Pyx_Py3Int_CheckExact(op) PyLong_CheckExact(op) + #define PyInt_FromString PyLong_FromString + #define PyInt_FromUnicode PyLong_FromUnicode + #define PyInt_FromLong PyLong_FromLong + #define PyInt_FromSize_t PyLong_FromSize_t + #define PyInt_FromSsize_t PyLong_FromSsize_t + #define PyInt_AsLong PyLong_AsLong + #define PyInt_AS_LONG PyLong_AS_LONG + #define PyInt_AsSsize_t PyLong_AsSsize_t + #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask + #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask + #define PyNumber_Int PyNumber_Long +#else + #define __Pyx_Py3Int_Check(op) (PyLong_Check(op) || PyInt_Check(op)) + #define __Pyx_Py3Int_CheckExact(op) (PyLong_CheckExact(op) || PyInt_CheckExact(op)) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBoolObject PyLongObject +#endif +#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY + #ifndef PyUnicode_InternFromString + #define PyUnicode_InternFromString(s) PyUnicode_FromString(s) + #endif +#endif +#if PY_VERSION_HEX < 0x030200A4 + typedef long Py_hash_t; + #define __Pyx_PyInt_FromHash_t PyInt_FromLong + #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsHash_t +#else + #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t + #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsSsize_t +#endif +#if CYTHON_USE_ASYNC_SLOTS + #if PY_VERSION_HEX >= 0x030500B1 + #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods + #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async) + #else + #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved)) + #endif +#else + #define __Pyx_PyType_AsAsync(obj) NULL +#endif +#ifndef __Pyx_PyAsyncMethodsStruct + typedef struct { + unaryfunc am_await; + unaryfunc am_aiter; + unaryfunc am_anext; + } __Pyx_PyAsyncMethodsStruct; +#endif + +#if defined(_WIN32) || defined(WIN32) || defined(MS_WINDOWS) + #if !defined(_USE_MATH_DEFINES) + #define _USE_MATH_DEFINES + #endif +#endif +#include +#ifdef NAN +#define __PYX_NAN() ((float) NAN) +#else +static CYTHON_INLINE float __PYX_NAN() { + float value; + memset(&value, 0xFF, sizeof(value)); + return value; +} +#endif +#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL) +#define __Pyx_truncl trunc +#else +#define __Pyx_truncl truncl +#endif + +#define __PYX_MARK_ERR_POS(f_index, lineno) \ + { __pyx_filename = __pyx_f[f_index]; (void)__pyx_filename; __pyx_lineno = lineno; (void)__pyx_lineno; __pyx_clineno = __LINE__; (void)__pyx_clineno; } +#define __PYX_ERR(f_index, lineno, Ln_error) \ + { __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; } + +#ifdef CYTHON_EXTERN_C + #undef __PYX_EXTERN_C + #define __PYX_EXTERN_C CYTHON_EXTERN_C +#elif defined(__PYX_EXTERN_C) + #ifdef _MSC_VER + #pragma message ("Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead.") + #else + #warning Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead. + #endif +#else + #ifdef __cplusplus + #define __PYX_EXTERN_C extern "C" + #else + #define __PYX_EXTERN_C extern + #endif +#endif + +#define __PYX_HAVE__nw_ec_alignx +#define __PYX_HAVE_API__nw_ec_alignx +/* Early includes */ +#include +#include +#include +#include "pythread.h" + + /* Using NumPy API declarations from "numpy/__init__.cython-30.pxd" */ + +#include "numpy/arrayobject.h" +#include "numpy/ndarrayobject.h" +#include "numpy/ndarraytypes.h" +#include "numpy/arrayscalars.h" +#include "numpy/ufuncobject.h" +#include +#include +#include "limits.h" +#ifdef _OPENMP +#include +#endif /* _OPENMP */ + +#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS) +#define CYTHON_WITHOUT_ASSERTIONS +#endif + +typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding; + const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; + +#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8) +#define __PYX_DEFAULT_STRING_ENCODING "" +#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString +#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#define __Pyx_uchar_cast(c) ((unsigned char)c) +#define __Pyx_long_cast(x) ((long)x) +#define __Pyx_fits_Py_ssize_t(v, type, is_signed) (\ + (sizeof(type) < sizeof(Py_ssize_t)) ||\ + (sizeof(type) > sizeof(Py_ssize_t) &&\ + likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX) &&\ + (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\ + v == (type)PY_SSIZE_T_MIN))) ||\ + (sizeof(type) == sizeof(Py_ssize_t) &&\ + (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX))) ) +static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) { + return (size_t) i < (size_t) limit; +} +#if defined (__cplusplus) && __cplusplus >= 201103L + #include + #define __Pyx_sst_abs(value) std::abs(value) +#elif SIZEOF_INT >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) abs(value) +#elif SIZEOF_LONG >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) labs(value) +#elif defined (_MSC_VER) + #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value)) +#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define __Pyx_sst_abs(value) llabs(value) +#elif defined (__GNUC__) + #define __Pyx_sst_abs(value) __builtin_llabs(value) +#else + #define __Pyx_sst_abs(value) ((value<0) ? -value : value) +#endif +static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s); +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*); +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); +static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char*); +#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) +#define __Pyx_PyBytes_FromString PyBytes_FromString +#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); +#if PY_MAJOR_VERSION < 3 + #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#else + #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize +#endif +#define __Pyx_PyBytes_AsWritableString(s) ((char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableSString(s) ((signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableUString(s) ((unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyObject_AsWritableString(s) ((char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableSString(s) ((signed char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s) +#define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s) +#define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s) +#define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s) +#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s) +#define __Pyx_PyUnicode_FromOrdinal(o) PyUnicode_FromOrdinal((int)o) +#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode +#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj) +#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None) +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b); +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*); +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x); +#define __Pyx_PySequence_Tuple(obj)\ + (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj)) +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); +static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject*); +#if CYTHON_ASSUME_SAFE_MACROS +#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) +#else +#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) +#endif +#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) +#if PY_MAJOR_VERSION >= 3 +#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x)) +#else +#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x)) +#endif +#if CYTHON_USE_PYLONG_INTERNALS + #if PY_VERSION_HEX >= 0x030C00A7 + #ifndef _PyLong_SIGN_MASK + #define _PyLong_SIGN_MASK 3 + #endif + #ifndef _PyLong_NON_SIZE_BITS + #define _PyLong_NON_SIZE_BITS 3 + #endif + #define __Pyx_PyLong_Sign(x) (((PyLongObject*)x)->long_value.lv_tag & _PyLong_SIGN_MASK) + #define __Pyx_PyLong_IsNeg(x) ((__Pyx_PyLong_Sign(x) & 2) != 0) + #define __Pyx_PyLong_IsNonNeg(x) (!__Pyx_PyLong_IsNeg(x)) + #define __Pyx_PyLong_IsZero(x) (__Pyx_PyLong_Sign(x) & 1) + #define __Pyx_PyLong_IsPos(x) (__Pyx_PyLong_Sign(x) == 0) + #define __Pyx_PyLong_CompactValueUnsigned(x) (__Pyx_PyLong_Digits(x)[0]) + #define __Pyx_PyLong_DigitCount(x) ((Py_ssize_t) (((PyLongObject*)x)->long_value.lv_tag >> _PyLong_NON_SIZE_BITS)) + #define __Pyx_PyLong_SignedDigitCount(x)\ + ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * __Pyx_PyLong_DigitCount(x)) + #if defined(PyUnstable_Long_IsCompact) && defined(PyUnstable_Long_CompactValue) + #define __Pyx_PyLong_IsCompact(x) PyUnstable_Long_IsCompact((PyLongObject*) x) + #define __Pyx_PyLong_CompactValue(x) PyUnstable_Long_CompactValue((PyLongObject*) x) + #else + #define __Pyx_PyLong_IsCompact(x) (((PyLongObject*)x)->long_value.lv_tag < (2 << _PyLong_NON_SIZE_BITS)) + #define __Pyx_PyLong_CompactValue(x) ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * (Py_ssize_t) __Pyx_PyLong_Digits(x)[0]) + #endif + typedef Py_ssize_t __Pyx_compact_pylong; + typedef size_t __Pyx_compact_upylong; + #else + #define __Pyx_PyLong_IsNeg(x) (Py_SIZE(x) < 0) + #define __Pyx_PyLong_IsNonNeg(x) (Py_SIZE(x) >= 0) + #define __Pyx_PyLong_IsZero(x) (Py_SIZE(x) == 0) + #define __Pyx_PyLong_IsPos(x) (Py_SIZE(x) > 0) + #define __Pyx_PyLong_CompactValueUnsigned(x) ((Py_SIZE(x) == 0) ? 0 : __Pyx_PyLong_Digits(x)[0]) + #define __Pyx_PyLong_DigitCount(x) __Pyx_sst_abs(Py_SIZE(x)) + #define __Pyx_PyLong_SignedDigitCount(x) Py_SIZE(x) + #define __Pyx_PyLong_IsCompact(x) (Py_SIZE(x) == 0 || Py_SIZE(x) == 1 || Py_SIZE(x) == -1) + #define __Pyx_PyLong_CompactValue(x)\ + ((Py_SIZE(x) == 0) ? (sdigit) 0 : ((Py_SIZE(x) < 0) ? -(sdigit)__Pyx_PyLong_Digits(x)[0] : (sdigit)__Pyx_PyLong_Digits(x)[0])) + typedef sdigit __Pyx_compact_pylong; + typedef digit __Pyx_compact_upylong; + #endif + #if PY_VERSION_HEX >= 0x030C00A5 + #define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->long_value.ob_digit) + #else + #define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->ob_digit) + #endif +#endif +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII +#include +static int __Pyx_sys_getdefaultencoding_not_ascii; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + PyObject* ascii_chars_u = NULL; + PyObject* ascii_chars_b = NULL; + const char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + if (strcmp(default_encoding_c, "ascii") == 0) { + __Pyx_sys_getdefaultencoding_not_ascii = 0; + } else { + char ascii_chars[128]; + int c; + for (c = 0; c < 128; c++) { + ascii_chars[c] = (char) c; + } + __Pyx_sys_getdefaultencoding_not_ascii = 1; + ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); + if (!ascii_chars_u) goto bad; + ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); + if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { + PyErr_Format( + PyExc_ValueError, + "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", + default_encoding_c); + goto bad; + } + Py_DECREF(ascii_chars_u); + Py_DECREF(ascii_chars_b); + } + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + Py_XDECREF(ascii_chars_u); + Py_XDECREF(ascii_chars_b); + return -1; +} +#endif +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) +#else +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +#include +static char* __PYX_DEFAULT_STRING_ENCODING; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c) + 1); + if (!__PYX_DEFAULT_STRING_ENCODING) goto bad; + strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + return -1; +} +#endif +#endif + + +/* Test for GCC > 2.95 */ +#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))) + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) +#else /* !__GNUC__ or GCC < 2.95 */ + #define likely(x) (x) + #define unlikely(x) (x) +#endif /* __GNUC__ */ +static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; } + +#if !CYTHON_USE_MODULE_STATE +static PyObject *__pyx_m = NULL; +#endif +static int __pyx_lineno; +static int __pyx_clineno = 0; +static const char * __pyx_cfilenm = __FILE__; +static const char *__pyx_filename; + +/* Header.proto */ +#if !defined(CYTHON_CCOMPLEX) + #if defined(__cplusplus) + #define CYTHON_CCOMPLEX 1 + #elif (defined(_Complex_I) && !defined(_MSC_VER)) || ((defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) && !defined(__STDC_NO_COMPLEX__) && !defined(_MSC_VER)) + #define CYTHON_CCOMPLEX 1 + #else + #define CYTHON_CCOMPLEX 0 + #endif +#endif +#if CYTHON_CCOMPLEX + #ifdef __cplusplus + #include + #else + #include + #endif +#endif +#if CYTHON_CCOMPLEX && !defined(__cplusplus) && defined(__sun__) && defined(__GNUC__) + #undef _Complex_I + #define _Complex_I 1.0fj +#endif + +/* #### Code section: filename_table ### */ + +static const char *__pyx_f[] = { + "nw_ec_alignx.pyx", + "contextvars.pxd", + "__init__.cython-30.pxd", + "type.pxd", + "bool.pxd", + "complex.pxd", +}; +/* #### Code section: utility_code_proto_before_types ### */ +/* ForceInitThreads.proto */ +#ifndef __PYX_FORCE_INIT_THREADS + #define __PYX_FORCE_INIT_THREADS 0 +#endif + +/* BufferFormatStructs.proto */ +struct __Pyx_StructField_; +#define __PYX_BUF_FLAGS_PACKED_STRUCT (1 << 0) +typedef struct { + const char* name; + struct __Pyx_StructField_* fields; + size_t size; + size_t arraysize[8]; + int ndim; + char typegroup; + char is_unsigned; + int flags; +} __Pyx_TypeInfo; +typedef struct __Pyx_StructField_ { + __Pyx_TypeInfo* type; + const char* name; + size_t offset; +} __Pyx_StructField; +typedef struct { + __Pyx_StructField* field; + size_t parent_offset; +} __Pyx_BufFmt_StackElem; +typedef struct { + __Pyx_StructField root; + __Pyx_BufFmt_StackElem* head; + size_t fmt_offset; + size_t new_count, enc_count; + size_t struct_alignment; + int is_complex; + char enc_type; + char new_packmode; + char enc_packmode; + char is_valid_array; +} __Pyx_BufFmt_Context; + +/* #### Code section: numeric_typedefs ### */ + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":787 + * # in Cython to enable them only on the right systems. + * + * ctypedef npy_int8 int8_t # <<<<<<<<<<<<<< + * ctypedef npy_int16 int16_t + * ctypedef npy_int32 int32_t + */ +typedef npy_int8 __pyx_t_5numpy_int8_t; + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":788 + * + * ctypedef npy_int8 int8_t + * ctypedef npy_int16 int16_t # <<<<<<<<<<<<<< + * ctypedef npy_int32 int32_t + * ctypedef npy_int64 int64_t + */ +typedef npy_int16 __pyx_t_5numpy_int16_t; + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":789 + * ctypedef npy_int8 int8_t + * ctypedef npy_int16 int16_t + * ctypedef npy_int32 int32_t # <<<<<<<<<<<<<< + * ctypedef npy_int64 int64_t + * #ctypedef npy_int96 int96_t + */ +typedef npy_int32 __pyx_t_5numpy_int32_t; + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":790 + * ctypedef npy_int16 int16_t + * ctypedef npy_int32 int32_t + * ctypedef npy_int64 int64_t # <<<<<<<<<<<<<< + * #ctypedef npy_int96 int96_t + * #ctypedef npy_int128 int128_t + */ +typedef npy_int64 __pyx_t_5numpy_int64_t; + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":794 + * #ctypedef npy_int128 int128_t + * + * ctypedef npy_uint8 uint8_t # <<<<<<<<<<<<<< + * ctypedef npy_uint16 uint16_t + * ctypedef npy_uint32 uint32_t + */ +typedef npy_uint8 __pyx_t_5numpy_uint8_t; + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":795 + * + * ctypedef npy_uint8 uint8_t + * ctypedef npy_uint16 uint16_t # <<<<<<<<<<<<<< + * ctypedef npy_uint32 uint32_t + * ctypedef npy_uint64 uint64_t + */ +typedef npy_uint16 __pyx_t_5numpy_uint16_t; + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":796 + * ctypedef npy_uint8 uint8_t + * ctypedef npy_uint16 uint16_t + * ctypedef npy_uint32 uint32_t # <<<<<<<<<<<<<< + * ctypedef npy_uint64 uint64_t + * #ctypedef npy_uint96 uint96_t + */ +typedef npy_uint32 __pyx_t_5numpy_uint32_t; + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":797 + * ctypedef npy_uint16 uint16_t + * ctypedef npy_uint32 uint32_t + * ctypedef npy_uint64 uint64_t # <<<<<<<<<<<<<< + * #ctypedef npy_uint96 uint96_t + * #ctypedef npy_uint128 uint128_t + */ +typedef npy_uint64 __pyx_t_5numpy_uint64_t; + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":801 + * #ctypedef npy_uint128 uint128_t + * + * ctypedef npy_float32 float32_t # <<<<<<<<<<<<<< + * ctypedef npy_float64 float64_t + * #ctypedef npy_float80 float80_t + */ +typedef npy_float32 __pyx_t_5numpy_float32_t; + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":802 + * + * ctypedef npy_float32 float32_t + * ctypedef npy_float64 float64_t # <<<<<<<<<<<<<< + * #ctypedef npy_float80 float80_t + * #ctypedef npy_float128 float128_t + */ +typedef npy_float64 __pyx_t_5numpy_float64_t; + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":809 + * ctypedef double complex complex128_t + * + * ctypedef npy_longlong longlong_t # <<<<<<<<<<<<<< + * ctypedef npy_ulonglong ulonglong_t + * + */ +typedef npy_longlong __pyx_t_5numpy_longlong_t; + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":810 + * + * ctypedef npy_longlong longlong_t + * ctypedef npy_ulonglong ulonglong_t # <<<<<<<<<<<<<< + * + * ctypedef npy_intp intp_t + */ +typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t; + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":812 + * ctypedef npy_ulonglong ulonglong_t + * + * ctypedef npy_intp intp_t # <<<<<<<<<<<<<< + * ctypedef npy_uintp uintp_t + * + */ +typedef npy_intp __pyx_t_5numpy_intp_t; + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":813 + * + * ctypedef npy_intp intp_t + * ctypedef npy_uintp uintp_t # <<<<<<<<<<<<<< + * + * ctypedef npy_double float_t + */ +typedef npy_uintp __pyx_t_5numpy_uintp_t; + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":815 + * ctypedef npy_uintp uintp_t + * + * ctypedef npy_double float_t # <<<<<<<<<<<<<< + * ctypedef npy_double double_t + * ctypedef npy_longdouble longdouble_t + */ +typedef npy_double __pyx_t_5numpy_float_t; + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":816 + * + * ctypedef npy_double float_t + * ctypedef npy_double double_t # <<<<<<<<<<<<<< + * ctypedef npy_longdouble longdouble_t + * + */ +typedef npy_double __pyx_t_5numpy_double_t; + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":817 + * ctypedef npy_double float_t + * ctypedef npy_double double_t + * ctypedef npy_longdouble longdouble_t # <<<<<<<<<<<<<< + * + * ctypedef float complex cfloat_t + */ +typedef npy_longdouble __pyx_t_5numpy_longdouble_t; + +/* "nw_ec_alignx.pyx":33 + * + * DTYPE = np.int32 + * ctypedef np.int32_t DTYPE_t # <<<<<<<<<<<<<< + * DTYPEF = np.float64 + * ctypedef np.float64_t DTYPEF_t + */ +typedef __pyx_t_5numpy_int32_t __pyx_t_12nw_ec_alignx_DTYPE_t; + +/* "nw_ec_alignx.pyx":35 + * ctypedef np.int32_t DTYPE_t + * DTYPEF = np.float64 + * ctypedef np.float64_t DTYPEF_t # <<<<<<<<<<<<<< + * + * + */ +typedef __pyx_t_5numpy_float64_t __pyx_t_12nw_ec_alignx_DTYPEF_t; +/* #### Code section: complex_type_declarations ### */ +/* Declarations.proto */ +#if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) + #ifdef __cplusplus + typedef ::std::complex< float > __pyx_t_float_complex; + #else + typedef float _Complex __pyx_t_float_complex; + #endif +#else + typedef struct { float real, imag; } __pyx_t_float_complex; +#endif +static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float, float); + +/* Declarations.proto */ +#if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) + #ifdef __cplusplus + typedef ::std::complex< double > __pyx_t_double_complex; + #else + typedef double _Complex __pyx_t_double_complex; + #endif +#else + typedef struct { double real, imag; } __pyx_t_double_complex; +#endif +static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double, double); + +/* Declarations.proto */ +#if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) + #ifdef __cplusplus + typedef ::std::complex< long double > __pyx_t_long_double_complex; + #else + typedef long double _Complex __pyx_t_long_double_complex; + #endif +#else + typedef struct { long double real, imag; } __pyx_t_long_double_complex; +#endif +static CYTHON_INLINE __pyx_t_long_double_complex __pyx_t_long_double_complex_from_parts(long double, long double); + +/* #### Code section: type_declarations ### */ + +/*--- Type declarations ---*/ +struct __pyx_opt_args_7cpython_11contextvars_get_value; +struct __pyx_opt_args_7cpython_11contextvars_get_value_no_default; + +/* "cpython/contextvars.pxd":112 + * + * + * cdef inline object get_value(var, default_value=None): # <<<<<<<<<<<<<< + * """Return a new reference to the value of the context variable, + * or the default value of the context variable, + */ +struct __pyx_opt_args_7cpython_11contextvars_get_value { + int __pyx_n; + PyObject *default_value; +}; + +/* "cpython/contextvars.pxd":129 + * + * + * cdef inline object get_value_no_default(var, default_value=None): # <<<<<<<<<<<<<< + * """Return a new reference to the value of the context variable, + * or the provided default value if no such value was found. + */ +struct __pyx_opt_args_7cpython_11contextvars_get_value_no_default { + int __pyx_n; + PyObject *default_value; +}; + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1113 + * + * # Iterator API added in v1.6 + * ctypedef int (*NpyIter_IterNextFunc)(NpyIter* it) noexcept nogil # <<<<<<<<<<<<<< + * ctypedef void (*NpyIter_GetMultiIndexFunc)(NpyIter* it, npy_intp* outcoords) noexcept nogil + * + */ +typedef int (*__pyx_t_5numpy_NpyIter_IterNextFunc)(NpyIter *); + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1114 + * # Iterator API added in v1.6 + * ctypedef int (*NpyIter_IterNextFunc)(NpyIter* it) noexcept nogil + * ctypedef void (*NpyIter_GetMultiIndexFunc)(NpyIter* it, npy_intp* outcoords) noexcept nogil # <<<<<<<<<<<<<< + * + * cdef extern from "numpy/arrayobject.h": + */ +typedef void (*__pyx_t_5numpy_NpyIter_GetMultiIndexFunc)(NpyIter *, npy_intp *); +/* #### Code section: utility_code_proto ### */ + +/* --- Runtime support code (head) --- */ +/* Refnanny.proto */ +#ifndef CYTHON_REFNANNY + #define CYTHON_REFNANNY 0 +#endif +#if CYTHON_REFNANNY + typedef struct { + void (*INCREF)(void*, PyObject*, Py_ssize_t); + void (*DECREF)(void*, PyObject*, Py_ssize_t); + void (*GOTREF)(void*, PyObject*, Py_ssize_t); + void (*GIVEREF)(void*, PyObject*, Py_ssize_t); + void* (*SetupContext)(const char*, Py_ssize_t, const char*); + void (*FinishContext)(void**); + } __Pyx_RefNannyAPIStruct; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); + #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; +#ifdef WITH_THREAD + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + if (acquire_gil) {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\ + PyGILState_Release(__pyx_gilstate_save);\ + } else {\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\ + } + #define __Pyx_RefNannyFinishContextNogil() {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __Pyx_RefNannyFinishContext();\ + PyGILState_Release(__pyx_gilstate_save);\ + } +#else + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__)) + #define __Pyx_RefNannyFinishContextNogil() __Pyx_RefNannyFinishContext() +#endif + #define __Pyx_RefNannyFinishContextNogil() {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __Pyx_RefNannyFinishContext();\ + PyGILState_Release(__pyx_gilstate_save);\ + } + #define __Pyx_RefNannyFinishContext()\ + __Pyx_RefNanny->FinishContext(&__pyx_refnanny) + #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_XINCREF(r) do { if((r) == NULL); else {__Pyx_INCREF(r); }} while(0) + #define __Pyx_XDECREF(r) do { if((r) == NULL); else {__Pyx_DECREF(r); }} while(0) + #define __Pyx_XGOTREF(r) do { if((r) == NULL); else {__Pyx_GOTREF(r); }} while(0) + #define __Pyx_XGIVEREF(r) do { if((r) == NULL); else {__Pyx_GIVEREF(r);}} while(0) +#else + #define __Pyx_RefNannyDeclarations + #define __Pyx_RefNannySetupContext(name, acquire_gil) + #define __Pyx_RefNannyFinishContextNogil() + #define __Pyx_RefNannyFinishContext() + #define __Pyx_INCREF(r) Py_INCREF(r) + #define __Pyx_DECREF(r) Py_DECREF(r) + #define __Pyx_GOTREF(r) + #define __Pyx_GIVEREF(r) + #define __Pyx_XINCREF(r) Py_XINCREF(r) + #define __Pyx_XDECREF(r) Py_XDECREF(r) + #define __Pyx_XGOTREF(r) + #define __Pyx_XGIVEREF(r) +#endif +#define __Pyx_Py_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; Py_XDECREF(tmp);\ + } while (0) +#define __Pyx_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_XDECREF(tmp);\ + } while (0) +#define __Pyx_DECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_DECREF(tmp);\ + } while (0) +#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) +#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) + +/* PyErrExceptionMatches.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err) +static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err); +#else +#define __Pyx_PyErr_ExceptionMatches(err) PyErr_ExceptionMatches(err) +#endif + +/* PyThreadStateGet.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate; +#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current; +#if PY_VERSION_HEX >= 0x030C00A6 +#define __Pyx_PyErr_Occurred() (__pyx_tstate->current_exception != NULL) +#define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->current_exception ? (PyObject*) Py_TYPE(__pyx_tstate->current_exception) : (PyObject*) NULL) +#else +#define __Pyx_PyErr_Occurred() (__pyx_tstate->curexc_type != NULL) +#define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->curexc_type) +#endif +#else +#define __Pyx_PyThreadState_declare +#define __Pyx_PyThreadState_assign +#define __Pyx_PyErr_Occurred() (PyErr_Occurred() != NULL) +#define __Pyx_PyErr_CurrentExceptionType() PyErr_Occurred() +#endif + +/* PyErrFetchRestore.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) +#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A6 +#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) +#else +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#endif +#else +#define __Pyx_PyErr_Clear() PyErr_Clear() +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) +#endif + +/* PyObjectGetAttrStr.proto */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) +#endif + +/* PyObjectGetAttrStrNoError.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name); + +/* GetBuiltinName.proto */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name); + +/* GetTopmostException.proto */ +#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE +static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate); +#endif + +/* SaveResetException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_ExceptionSave(type, value, tb) __Pyx__ExceptionSave(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#define __Pyx_ExceptionReset(type, value, tb) __Pyx__ExceptionReset(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +#else +#define __Pyx_ExceptionSave(type, value, tb) PyErr_GetExcInfo(type, value, tb) +#define __Pyx_ExceptionReset(type, value, tb) PyErr_SetExcInfo(type, value, tb) +#endif + +/* GetException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_GetException(type, value, tb) __Pyx__GetException(__pyx_tstate, type, value, tb) +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); +#endif + +/* PyObjectCall.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); +#else +#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) +#endif + +/* RaiseException.proto */ +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); + +/* TupleAndListFromArray.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n); +static CYTHON_INLINE PyObject* __Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n); +#endif + +/* IncludeStringH.proto */ +#include + +/* BytesEquals.proto */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); + +/* UnicodeEquals.proto */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); + +/* fastcall.proto */ +#if CYTHON_AVOID_BORROWED_REFS + #define __Pyx_Arg_VARARGS(args, i) PySequence_GetItem(args, i) +#elif CYTHON_ASSUME_SAFE_MACROS + #define __Pyx_Arg_VARARGS(args, i) PyTuple_GET_ITEM(args, i) +#else + #define __Pyx_Arg_VARARGS(args, i) PyTuple_GetItem(args, i) +#endif +#if CYTHON_AVOID_BORROWED_REFS + #define __Pyx_Arg_NewRef_VARARGS(arg) __Pyx_NewRef(arg) + #define __Pyx_Arg_XDECREF_VARARGS(arg) Py_XDECREF(arg) +#else + #define __Pyx_Arg_NewRef_VARARGS(arg) arg + #define __Pyx_Arg_XDECREF_VARARGS(arg) +#endif +#define __Pyx_NumKwargs_VARARGS(kwds) PyDict_Size(kwds) +#define __Pyx_KwValues_VARARGS(args, nargs) NULL +#define __Pyx_GetKwValue_VARARGS(kw, kwvalues, s) __Pyx_PyDict_GetItemStrWithError(kw, s) +#define __Pyx_KwargsAsDict_VARARGS(kw, kwvalues) PyDict_Copy(kw) +#if CYTHON_METH_FASTCALL + #define __Pyx_Arg_FASTCALL(args, i) args[i] + #define __Pyx_NumKwargs_FASTCALL(kwds) PyTuple_GET_SIZE(kwds) + #define __Pyx_KwValues_FASTCALL(args, nargs) ((args) + (nargs)) + static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s); +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 + CYTHON_UNUSED static PyObject *__Pyx_KwargsAsDict_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues); + #else + #define __Pyx_KwargsAsDict_FASTCALL(kw, kwvalues) _PyStack_AsDict(kwvalues, kw) + #endif + #define __Pyx_Arg_NewRef_FASTCALL(arg) arg /* no-op, __Pyx_Arg_FASTCALL is direct and this needs + to have the same reference counting */ + #define __Pyx_Arg_XDECREF_FASTCALL(arg) +#else + #define __Pyx_Arg_FASTCALL __Pyx_Arg_VARARGS + #define __Pyx_NumKwargs_FASTCALL __Pyx_NumKwargs_VARARGS + #define __Pyx_KwValues_FASTCALL __Pyx_KwValues_VARARGS + #define __Pyx_GetKwValue_FASTCALL __Pyx_GetKwValue_VARARGS + #define __Pyx_KwargsAsDict_FASTCALL __Pyx_KwargsAsDict_VARARGS + #define __Pyx_Arg_NewRef_FASTCALL(arg) __Pyx_Arg_NewRef_VARARGS(arg) + #define __Pyx_Arg_XDECREF_FASTCALL(arg) __Pyx_Arg_XDECREF_VARARGS(arg) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS +#define __Pyx_ArgsSlice_VARARGS(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_VARARGS(args, start), stop - start) +#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_FASTCALL(args, start), stop - start) +#else +#define __Pyx_ArgsSlice_VARARGS(args, start, stop) PyTuple_GetSlice(args, start, stop) +#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) PyTuple_GetSlice(args, start, stop) +#endif + +/* RaiseArgTupleInvalid.proto */ +static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, + Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); + +/* RaiseDoubleKeywords.proto */ +static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); + +/* ParseKeywords.proto */ +static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject *const *kwvalues, + PyObject **argnames[], + PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, + const char* function_name); + +/* ArgTypeTest.proto */ +#define __Pyx_ArgTypeTest(obj, type, none_allowed, name, exact)\ + ((likely(__Pyx_IS_TYPE(obj, type) | (none_allowed && (obj == Py_None)))) ? 1 :\ + __Pyx__ArgTypeTest(obj, type, name, exact)) +static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact); + +/* IsLittleEndian.proto */ +static CYTHON_INLINE int __Pyx_Is_Little_Endian(void); + +/* BufferFormatCheck.proto */ +static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts); +static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx, + __Pyx_BufFmt_StackElem* stack, + __Pyx_TypeInfo* type); + +/* BufferGetAndValidate.proto */ +#define __Pyx_GetBufferAndValidate(buf, obj, dtype, flags, nd, cast, stack)\ + ((obj == Py_None || obj == NULL) ?\ + (__Pyx_ZeroBuffer(buf), 0) :\ + __Pyx__GetBufferAndValidate(buf, obj, dtype, flags, nd, cast, stack)) +static int __Pyx__GetBufferAndValidate(Py_buffer* buf, PyObject* obj, + __Pyx_TypeInfo* dtype, int flags, int nd, int cast, __Pyx_BufFmt_StackElem* stack); +static void __Pyx_ZeroBuffer(Py_buffer* buf); +static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info); +static Py_ssize_t __Pyx_minusones[] = { -1, -1, -1, -1, -1, -1, -1, -1 }; +static Py_ssize_t __Pyx_zeros[] = { 0, 0, 0, 0, 0, 0, 0, 0 }; + +/* PyDictVersioning.proto */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +#define __PYX_DICT_VERSION_INIT ((PY_UINT64_T) -1) +#define __PYX_GET_DICT_VERSION(dict) (((PyDictObject*)(dict))->ma_version_tag) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\ + (version_var) = __PYX_GET_DICT_VERSION(dict);\ + (cache_var) = (value); +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\ + (VAR) = __pyx_dict_cached_value;\ + } else {\ + (VAR) = __pyx_dict_cached_value = (LOOKUP);\ + __pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\ + }\ +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj); +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj); +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version); +#else +#define __PYX_GET_DICT_VERSION(dict) (0) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var) +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) (VAR) = (LOOKUP); +#endif + +/* GetModuleGlobalName.proto */ +#if CYTHON_USE_DICT_VERSIONS +#define __Pyx_GetModuleGlobalName(var, name) do {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\ + (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\ + __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} while(0) +#define __Pyx_GetModuleGlobalNameUncached(var, name) do {\ + PY_UINT64_T __pyx_dict_version;\ + PyObject *__pyx_dict_cached_value;\ + (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} while(0) +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value); +#else +#define __Pyx_GetModuleGlobalName(var, name) (var) = __Pyx__GetModuleGlobalName(name) +#define __Pyx_GetModuleGlobalNameUncached(var, name) (var) = __Pyx__GetModuleGlobalName(name) +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name); +#endif + +/* PyFunctionFastCall.proto */ +#if CYTHON_FAST_PYCALL +#if !CYTHON_VECTORCALL +#define __Pyx_PyFunction_FastCall(func, args, nargs)\ + __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL) +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs); +#endif +#define __Pyx_BUILD_ASSERT_EXPR(cond)\ + (sizeof(char [1 - 2*!(cond)]) - 1) +#ifndef Py_MEMBER_SIZE +#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member) +#endif +#if !CYTHON_VECTORCALL +#if PY_VERSION_HEX >= 0x03080000 + #include "frameobject.h" +#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API + #ifndef Py_BUILD_CORE + #define Py_BUILD_CORE 1 + #endif + #include "internal/pycore_frame.h" +#endif + #define __Pxy_PyFrame_Initialize_Offsets() + #define __Pyx_PyFrame_GetLocalsplus(frame) ((frame)->f_localsplus) +#else + static size_t __pyx_pyframe_localsplus_offset = 0; + #include "frameobject.h" + #define __Pxy_PyFrame_Initialize_Offsets()\ + ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\ + (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus))) + #define __Pyx_PyFrame_GetLocalsplus(frame)\ + (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset)) +#endif +#endif +#endif + +/* PyObjectCallMethO.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg); +#endif + +/* PyObjectFastCall.proto */ +#define __Pyx_PyObject_FastCall(func, args, nargs) __Pyx_PyObject_FastCallDict(func, args, (size_t)(nargs), NULL) +static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject **args, size_t nargs, PyObject *kwargs); + +/* ExtTypeTest.proto */ +static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); + +#define __Pyx_BufPtrStrided2d(type, buf, i0, s0, i1, s1) (type)((char*)buf + i0 * s0 + i1 * s1) +/* DictGetItem.proto */ +#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY +static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key); +#define __Pyx_PyObject_Dict_GetItem(obj, name)\ + (likely(PyDict_CheckExact(obj)) ?\ + __Pyx_PyDict_GetItem(obj, name) : PyObject_GetItem(obj, name)) +#else +#define __Pyx_PyDict_GetItem(d, key) PyObject_GetItem(d, key) +#define __Pyx_PyObject_Dict_GetItem(obj, name) PyObject_GetItem(obj, name) +#endif + +/* RaiseTooManyValuesToUnpack.proto */ +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); + +/* RaiseNeedMoreValuesToUnpack.proto */ +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); + +/* IterFinish.proto */ +static CYTHON_INLINE int __Pyx_IterFinish(void); + +/* UnpackItemEndCheck.proto */ +static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected); + +/* PySequenceContains.proto */ +static CYTHON_INLINE int __Pyx_PySequence_ContainsTF(PyObject* item, PyObject* seq, int eq) { + int result = PySequence_Contains(seq, item); + return unlikely(result < 0) ? result : (result == (eq == Py_EQ)); +} + +/* GetItemInt.proto */ +#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\ + (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\ + __Pyx_GetItemInt_Generic(o, to_py_func(i)))) +#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j); +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, + int is_list, int wraparound, int boundscheck); + +/* RaiseUnexpectedTypeError.proto */ +static int __Pyx_RaiseUnexpectedTypeError(const char *expected, PyObject *obj); + +/* AssertionsEnabled.proto */ +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag) + #define __Pyx_init_assertions_enabled() (0) + #define __pyx_assertions_enabled() (1) +#elif CYTHON_COMPILING_IN_LIMITED_API || (CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030C0000) + static int __pyx_assertions_enabled_flag; + #define __pyx_assertions_enabled() (__pyx_assertions_enabled_flag) + static int __Pyx_init_assertions_enabled(void) { + PyObject *builtins, *debug, *debug_str; + int flag; + builtins = PyEval_GetBuiltins(); + if (!builtins) goto bad; + debug_str = PyUnicode_FromStringAndSize("__debug__", 9); + if (!debug_str) goto bad; + debug = PyObject_GetItem(builtins, debug_str); + Py_DECREF(debug_str); + if (!debug) goto bad; + flag = PyObject_IsTrue(debug); + Py_DECREF(debug); + if (flag == -1) goto bad; + __pyx_assertions_enabled_flag = flag; + return 0; + bad: + __pyx_assertions_enabled_flag = 1; + return -1; + } +#else + #define __Pyx_init_assertions_enabled() (0) + #define __pyx_assertions_enabled() (!Py_OptimizeFlag) +#endif + +/* ListAppend.proto */ +#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS +static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) { + PyListObject* L = (PyListObject*) list; + Py_ssize_t len = Py_SIZE(list); + if (likely(L->allocated > len) & likely(len > (L->allocated >> 1))) { + Py_INCREF(x); + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 + L->ob_item[len] = x; + #else + PyList_SET_ITEM(list, len, x); + #endif + __Pyx_SET_SIZE(list, len + 1); + return 0; + } + return PyList_Append(list, x); +} +#else +#define __Pyx_PyList_Append(L,x) PyList_Append(L,x) +#endif + +/* PyObjectCallOneArg.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg); + +/* ObjectGetItem.proto */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject *key); +#else +#define __Pyx_PyObject_GetItem(obj, key) PyObject_GetItem(obj, key) +#endif + +/* SliceTupleAndList.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyList_GetSlice(PyObject* src, Py_ssize_t start, Py_ssize_t stop); +static CYTHON_INLINE PyObject* __Pyx_PyTuple_GetSlice(PyObject* src, Py_ssize_t start, Py_ssize_t stop); +#else +#define __Pyx_PyList_GetSlice(seq, start, stop) PySequence_GetSlice(seq, start, stop) +#define __Pyx_PyTuple_GetSlice(seq, start, stop) PySequence_GetSlice(seq, start, stop) +#endif + +/* SetItemInt.proto */ +#define __Pyx_SetItemInt(o, i, v, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_SetItemInt_Fast(o, (Py_ssize_t)i, v, is_list, wraparound, boundscheck) :\ + (is_list ? (PyErr_SetString(PyExc_IndexError, "list assignment index out of range"), -1) :\ + __Pyx_SetItemInt_Generic(o, to_py_func(i), v))) +static int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v); +static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v, + int is_list, int wraparound, int boundscheck); + +/* UnpackUnboundCMethod.proto */ +typedef struct { + PyObject *type; + PyObject **method_name; + PyCFunction func; + PyObject *method; + int flag; +} __Pyx_CachedCFunction; + +/* CallUnboundCMethod1.proto */ +static PyObject* __Pyx__CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg); +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg); +#else +#define __Pyx_CallUnboundCMethod1(cfunc, self, arg) __Pyx__CallUnboundCMethod1(cfunc, self, arg) +#endif + +/* PyIntBinop.proto */ +#if !CYTHON_COMPILING_IN_PYPY +static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check); +#else +#define __Pyx_PyInt_AddObjC(op1, op2, intval, inplace, zerodivision_check)\ + (inplace ? PyNumber_InPlaceAdd(op1, op2) : PyNumber_Add(op1, op2)) +#endif + +/* PyObjectCallNoArg.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func); + +/* PyObjectGetMethod.proto */ +static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method); + +/* PyObjectCallMethod0.proto */ +static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name); + +/* RaiseNoneIterError.proto */ +static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void); + +/* UnpackTupleError.proto */ +static void __Pyx_UnpackTupleError(PyObject *, Py_ssize_t index); + +/* UnpackTuple2.proto */ +#define __Pyx_unpack_tuple2(tuple, value1, value2, is_tuple, has_known_size, decref_tuple)\ + (likely(is_tuple || PyTuple_Check(tuple)) ?\ + (likely(has_known_size || PyTuple_GET_SIZE(tuple) == 2) ?\ + __Pyx_unpack_tuple2_exact(tuple, value1, value2, decref_tuple) :\ + (__Pyx_UnpackTupleError(tuple, 2), -1)) :\ + __Pyx_unpack_tuple2_generic(tuple, value1, value2, has_known_size, decref_tuple)) +static CYTHON_INLINE int __Pyx_unpack_tuple2_exact( + PyObject* tuple, PyObject** value1, PyObject** value2, int decref_tuple); +static int __Pyx_unpack_tuple2_generic( + PyObject* tuple, PyObject** value1, PyObject** value2, int has_known_size, int decref_tuple); + +/* dict_iter.proto */ +static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* dict, int is_dict, PyObject* method_name, + Py_ssize_t* p_orig_length, int* p_is_dict); +static CYTHON_INLINE int __Pyx_dict_iter_next(PyObject* dict_or_iter, Py_ssize_t orig_length, Py_ssize_t* ppos, + PyObject** pkey, PyObject** pvalue, PyObject** pitem, int is_dict); + +/* PyObjectFormatSimple.proto */ +#if CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + PyObject_Format(s, f)) +#elif PY_MAJOR_VERSION < 3 + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + likely(PyString_CheckExact(s)) ? PyUnicode_FromEncodedObject(s, NULL, "strict") :\ + PyObject_Format(s, f)) +#elif CYTHON_USE_TYPE_SLOTS + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + likely(PyLong_CheckExact(s)) ? PyLong_Type.tp_repr(s) :\ + likely(PyFloat_CheckExact(s)) ? PyFloat_Type.tp_repr(s) :\ + PyObject_Format(s, f)) +#else + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + PyObject_Format(s, f)) +#endif + +/* JoinPyUnicode.proto */ +static PyObject* __Pyx_PyUnicode_Join(PyObject* value_tuple, Py_ssize_t value_count, Py_ssize_t result_ulength, + Py_UCS4 max_char); + +/* TypeImport.proto */ +#ifndef __PYX_HAVE_RT_ImportType_proto_3_0_11 +#define __PYX_HAVE_RT_ImportType_proto_3_0_11 +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L +#include +#endif +#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) || __cplusplus >= 201103L +#define __PYX_GET_STRUCT_ALIGNMENT_3_0_11(s) alignof(s) +#else +#define __PYX_GET_STRUCT_ALIGNMENT_3_0_11(s) sizeof(void*) +#endif +enum __Pyx_ImportType_CheckSize_3_0_11 { + __Pyx_ImportType_CheckSize_Error_3_0_11 = 0, + __Pyx_ImportType_CheckSize_Warn_3_0_11 = 1, + __Pyx_ImportType_CheckSize_Ignore_3_0_11 = 2 +}; +static PyTypeObject *__Pyx_ImportType_3_0_11(PyObject* module, const char *module_name, const char *class_name, size_t size, size_t alignment, enum __Pyx_ImportType_CheckSize_3_0_11 check_size); +#endif + +/* Import.proto */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); + +/* ImportDottedModule.proto */ +static PyObject *__Pyx_ImportDottedModule(PyObject *name, PyObject *parts_tuple); +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_ImportDottedModule_WalkParts(PyObject *module, PyObject *name, PyObject *parts_tuple); +#endif + +/* ImportFrom.proto */ +static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); + +/* IncludeStructmemberH.proto */ +#include + +/* FixUpExtensionType.proto */ +#if CYTHON_USE_TYPE_SPECS +static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type); +#endif + +/* FetchSharedCythonModule.proto */ +static PyObject *__Pyx_FetchSharedCythonABIModule(void); + +/* FetchCommonType.proto */ +#if !CYTHON_USE_TYPE_SPECS +static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type); +#else +static PyTypeObject* __Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases); +#endif + +/* PyMethodNew.proto */ +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) { + PyObject *typesModule=NULL, *methodType=NULL, *result=NULL; + CYTHON_UNUSED_VAR(typ); + if (!self) + return __Pyx_NewRef(func); + typesModule = PyImport_ImportModule("types"); + if (!typesModule) return NULL; + methodType = PyObject_GetAttrString(typesModule, "MethodType"); + Py_DECREF(typesModule); + if (!methodType) return NULL; + result = PyObject_CallFunctionObjArgs(methodType, func, self, NULL); + Py_DECREF(methodType); + return result; +} +#elif PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) { + CYTHON_UNUSED_VAR(typ); + if (!self) + return __Pyx_NewRef(func); + return PyMethod_New(func, self); +} +#else + #define __Pyx_PyMethod_New PyMethod_New +#endif + +/* PyVectorcallFastCallDict.proto */ +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw); +#endif + +/* CythonFunctionShared.proto */ +#define __Pyx_CyFunction_USED +#define __Pyx_CYFUNCTION_STATICMETHOD 0x01 +#define __Pyx_CYFUNCTION_CLASSMETHOD 0x02 +#define __Pyx_CYFUNCTION_CCLASS 0x04 +#define __Pyx_CYFUNCTION_COROUTINE 0x08 +#define __Pyx_CyFunction_GetClosure(f)\ + (((__pyx_CyFunctionObject *) (f))->func_closure) +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_CyFunction_GetClassObj(f)\ + (((__pyx_CyFunctionObject *) (f))->func_classobj) +#else + #define __Pyx_CyFunction_GetClassObj(f)\ + ((PyObject*) ((PyCMethodObject *) (f))->mm_class) +#endif +#define __Pyx_CyFunction_SetClassObj(f, classobj)\ + __Pyx__CyFunction_SetClassObj((__pyx_CyFunctionObject *) (f), (classobj)) +#define __Pyx_CyFunction_Defaults(type, f)\ + ((type *)(((__pyx_CyFunctionObject *) (f))->defaults)) +#define __Pyx_CyFunction_SetDefaultsGetter(f, g)\ + ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g) +typedef struct { +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject_HEAD + PyObject *func; +#elif PY_VERSION_HEX < 0x030900B1 + PyCFunctionObject func; +#else + PyCMethodObject func; +#endif +#if CYTHON_BACKPORT_VECTORCALL + __pyx_vectorcallfunc func_vectorcall; +#endif +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API + PyObject *func_weakreflist; +#endif + PyObject *func_dict; + PyObject *func_name; + PyObject *func_qualname; + PyObject *func_doc; + PyObject *func_globals; + PyObject *func_code; + PyObject *func_closure; +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + PyObject *func_classobj; +#endif + void *defaults; + int defaults_pyobjects; + size_t defaults_size; + int flags; + PyObject *defaults_tuple; + PyObject *defaults_kwdict; + PyObject *(*defaults_getter)(PyObject *); + PyObject *func_annotations; + PyObject *func_is_coroutine; +} __pyx_CyFunctionObject; +#undef __Pyx_CyOrPyCFunction_Check +#define __Pyx_CyFunction_Check(obj) __Pyx_TypeCheck(obj, __pyx_CyFunctionType) +#define __Pyx_CyOrPyCFunction_Check(obj) __Pyx_TypeCheck2(obj, __pyx_CyFunctionType, &PyCFunction_Type) +#define __Pyx_CyFunction_CheckExact(obj) __Pyx_IS_TYPE(obj, __pyx_CyFunctionType) +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc); +#undef __Pyx_IsSameCFunction +#define __Pyx_IsSameCFunction(func, cfunc) __Pyx__IsSameCyOrCFunction(func, cfunc) +static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject* op, PyMethodDef *ml, + int flags, PyObject* qualname, + PyObject *closure, + PyObject *module, PyObject *globals, + PyObject* code); +static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj); +static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m, + size_t size, + int pyobjects); +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m, + PyObject *tuple); +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m, + PyObject *dict); +static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m, + PyObject *dict); +static int __pyx_CyFunction_init(PyObject *module); +#if CYTHON_METH_FASTCALL +static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +#if CYTHON_BACKPORT_VECTORCALL +#define __Pyx_CyFunction_func_vectorcall(f) (((__pyx_CyFunctionObject*)f)->func_vectorcall) +#else +#define __Pyx_CyFunction_func_vectorcall(f) (((PyCFunctionObject*)f)->vectorcall) +#endif +#endif + +/* CythonFunction.proto */ +static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, + int flags, PyObject* qualname, + PyObject *closure, + PyObject *module, PyObject *globals, + PyObject* code); + +/* CLineInTraceback.proto */ +#ifdef CYTHON_CLINE_IN_TRACEBACK +#define __Pyx_CLineForTraceback(tstate, c_line) (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0) +#else +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line); +#endif + +/* CodeObjectCache.proto */ +#if !CYTHON_COMPILING_IN_LIMITED_API +typedef struct { + PyCodeObject* code_object; + int code_line; +} __Pyx_CodeObjectCacheEntry; +struct __Pyx_CodeObjectCache { + int count; + int max_count; + __Pyx_CodeObjectCacheEntry* entries; +}; +static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); +static PyCodeObject *__pyx_find_code_object(int code_line); +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); +#endif + +/* AddTraceback.proto */ +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename); + +/* BufferStructDeclare.proto */ +typedef struct { + Py_ssize_t shape, strides, suboffsets; +} __Pyx_Buf_DimInfo; +typedef struct { + size_t refcount; + Py_buffer pybuffer; +} __Pyx_Buffer; +typedef struct { + __Pyx_Buffer *rcbuffer; + char *data; + __Pyx_Buf_DimInfo diminfo[8]; +} __Pyx_LocalBuf_ND; + +#if PY_MAJOR_VERSION < 3 + static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags); + static void __Pyx_ReleaseBuffer(Py_buffer *view); +#else + #define __Pyx_GetBuffer PyObject_GetBuffer + #define __Pyx_ReleaseBuffer PyBuffer_Release +#endif + + +/* GCCDiagnostics.proto */ +#if !defined(__INTEL_COMPILER) && defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) +#define __Pyx_HAS_GCC_DIAGNOSTIC +#endif + +/* RealImag.proto */ +#if CYTHON_CCOMPLEX + #ifdef __cplusplus + #define __Pyx_CREAL(z) ((z).real()) + #define __Pyx_CIMAG(z) ((z).imag()) + #else + #define __Pyx_CREAL(z) (__real__(z)) + #define __Pyx_CIMAG(z) (__imag__(z)) + #endif +#else + #define __Pyx_CREAL(z) ((z).real) + #define __Pyx_CIMAG(z) ((z).imag) +#endif +#if defined(__cplusplus) && CYTHON_CCOMPLEX\ + && (defined(_WIN32) || defined(__clang__) || (defined(__GNUC__) && (__GNUC__ >= 5 || __GNUC__ == 4 && __GNUC_MINOR__ >= 4 )) || __cplusplus >= 201103) + #define __Pyx_SET_CREAL(z,x) ((z).real(x)) + #define __Pyx_SET_CIMAG(z,y) ((z).imag(y)) +#else + #define __Pyx_SET_CREAL(z,x) __Pyx_CREAL(z) = (x) + #define __Pyx_SET_CIMAG(z,y) __Pyx_CIMAG(z) = (y) +#endif + +/* Arithmetic.proto */ +#if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) + #define __Pyx_c_eq_float(a, b) ((a)==(b)) + #define __Pyx_c_sum_float(a, b) ((a)+(b)) + #define __Pyx_c_diff_float(a, b) ((a)-(b)) + #define __Pyx_c_prod_float(a, b) ((a)*(b)) + #define __Pyx_c_quot_float(a, b) ((a)/(b)) + #define __Pyx_c_neg_float(a) (-(a)) + #ifdef __cplusplus + #define __Pyx_c_is_zero_float(z) ((z)==(float)0) + #define __Pyx_c_conj_float(z) (::std::conj(z)) + #if 1 + #define __Pyx_c_abs_float(z) (::std::abs(z)) + #define __Pyx_c_pow_float(a, b) (::std::pow(a, b)) + #endif + #else + #define __Pyx_c_is_zero_float(z) ((z)==0) + #define __Pyx_c_conj_float(z) (conjf(z)) + #if 1 + #define __Pyx_c_abs_float(z) (cabsf(z)) + #define __Pyx_c_pow_float(a, b) (cpowf(a, b)) + #endif + #endif +#else + static CYTHON_INLINE int __Pyx_c_eq_float(__pyx_t_float_complex, __pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sum_float(__pyx_t_float_complex, __pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_diff_float(__pyx_t_float_complex, __pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prod_float(__pyx_t_float_complex, __pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quot_float(__pyx_t_float_complex, __pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_neg_float(__pyx_t_float_complex); + static CYTHON_INLINE int __Pyx_c_is_zero_float(__pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conj_float(__pyx_t_float_complex); + #if 1 + static CYTHON_INLINE float __Pyx_c_abs_float(__pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_pow_float(__pyx_t_float_complex, __pyx_t_float_complex); + #endif +#endif + +/* Arithmetic.proto */ +#if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) + #define __Pyx_c_eq_double(a, b) ((a)==(b)) + #define __Pyx_c_sum_double(a, b) ((a)+(b)) + #define __Pyx_c_diff_double(a, b) ((a)-(b)) + #define __Pyx_c_prod_double(a, b) ((a)*(b)) + #define __Pyx_c_quot_double(a, b) ((a)/(b)) + #define __Pyx_c_neg_double(a) (-(a)) + #ifdef __cplusplus + #define __Pyx_c_is_zero_double(z) ((z)==(double)0) + #define __Pyx_c_conj_double(z) (::std::conj(z)) + #if 1 + #define __Pyx_c_abs_double(z) (::std::abs(z)) + #define __Pyx_c_pow_double(a, b) (::std::pow(a, b)) + #endif + #else + #define __Pyx_c_is_zero_double(z) ((z)==0) + #define __Pyx_c_conj_double(z) (conj(z)) + #if 1 + #define __Pyx_c_abs_double(z) (cabs(z)) + #define __Pyx_c_pow_double(a, b) (cpow(a, b)) + #endif + #endif +#else + static CYTHON_INLINE int __Pyx_c_eq_double(__pyx_t_double_complex, __pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum_double(__pyx_t_double_complex, __pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff_double(__pyx_t_double_complex, __pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod_double(__pyx_t_double_complex, __pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot_double(__pyx_t_double_complex, __pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg_double(__pyx_t_double_complex); + static CYTHON_INLINE int __Pyx_c_is_zero_double(__pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj_double(__pyx_t_double_complex); + #if 1 + static CYTHON_INLINE double __Pyx_c_abs_double(__pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow_double(__pyx_t_double_complex, __pyx_t_double_complex); + #endif +#endif + +/* Arithmetic.proto */ +#if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) + #define __Pyx_c_eq_long__double(a, b) ((a)==(b)) + #define __Pyx_c_sum_long__double(a, b) ((a)+(b)) + #define __Pyx_c_diff_long__double(a, b) ((a)-(b)) + #define __Pyx_c_prod_long__double(a, b) ((a)*(b)) + #define __Pyx_c_quot_long__double(a, b) ((a)/(b)) + #define __Pyx_c_neg_long__double(a) (-(a)) + #ifdef __cplusplus + #define __Pyx_c_is_zero_long__double(z) ((z)==(long double)0) + #define __Pyx_c_conj_long__double(z) (::std::conj(z)) + #if 1 + #define __Pyx_c_abs_long__double(z) (::std::abs(z)) + #define __Pyx_c_pow_long__double(a, b) (::std::pow(a, b)) + #endif + #else + #define __Pyx_c_is_zero_long__double(z) ((z)==0) + #define __Pyx_c_conj_long__double(z) (conjl(z)) + #if 1 + #define __Pyx_c_abs_long__double(z) (cabsl(z)) + #define __Pyx_c_pow_long__double(a, b) (cpowl(a, b)) + #endif + #endif +#else + static CYTHON_INLINE int __Pyx_c_eq_long__double(__pyx_t_long_double_complex, __pyx_t_long_double_complex); + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_sum_long__double(__pyx_t_long_double_complex, __pyx_t_long_double_complex); + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_diff_long__double(__pyx_t_long_double_complex, __pyx_t_long_double_complex); + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_prod_long__double(__pyx_t_long_double_complex, __pyx_t_long_double_complex); + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_quot_long__double(__pyx_t_long_double_complex, __pyx_t_long_double_complex); + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_neg_long__double(__pyx_t_long_double_complex); + static CYTHON_INLINE int __Pyx_c_is_zero_long__double(__pyx_t_long_double_complex); + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_conj_long__double(__pyx_t_long_double_complex); + #if 1 + static CYTHON_INLINE long double __Pyx_c_abs_long__double(__pyx_t_long_double_complex); + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_pow_long__double(__pyx_t_long_double_complex, __pyx_t_long_double_complex); + #endif +#endif + +/* CIntFromPy.proto */ +static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_int(unsigned int value); + +/* CIntFromPy.proto */ +static CYTHON_INLINE unsigned int __Pyx_PyInt_As_unsigned_int(PyObject *); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_char(char value); + +/* CIntFromPy.proto */ +static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); + +/* FormatTypeName.proto */ +#if CYTHON_COMPILING_IN_LIMITED_API +typedef PyObject *__Pyx_TypeName; +#define __Pyx_FMT_TYPENAME "%U" +static __Pyx_TypeName __Pyx_PyType_GetName(PyTypeObject* tp); +#define __Pyx_DECREF_TypeName(obj) Py_XDECREF(obj) +#else +typedef const char *__Pyx_TypeName; +#define __Pyx_FMT_TYPENAME "%.200s" +#define __Pyx_PyType_GetName(tp) ((tp)->tp_name) +#define __Pyx_DECREF_TypeName(obj) +#endif + +/* FastTypeChecks.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) +#define __Pyx_TypeCheck2(obj, type1, type2) __Pyx_IsAnySubtype2(Py_TYPE(obj), (PyTypeObject *)type1, (PyTypeObject *)type2) +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2); +#else +#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) +#define __Pyx_TypeCheck2(obj, type1, type2) (PyObject_TypeCheck(obj, (PyTypeObject *)type1) || PyObject_TypeCheck(obj, (PyTypeObject *)type2)) +#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type) +#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2)) +#endif +#define __Pyx_PyErr_ExceptionMatches2(err1, err2) __Pyx_PyErr_GivenExceptionMatches2(__Pyx_PyErr_CurrentExceptionType(), err1, err2) +#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) + +/* CheckBinaryVersion.proto */ +static unsigned long __Pyx_get_runtime_version(void); +static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer); + +/* InitStrings.proto */ +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); + +/* #### Code section: module_declarations ### */ +static CYTHON_INLINE double __pyx_f_7cpython_7complex_7complex_4real_real(PyComplexObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE double __pyx_f_7cpython_7complex_7complex_4imag_imag(PyComplexObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE npy_intp __pyx_f_5numpy_5dtype_8itemsize_itemsize(PyArray_Descr *__pyx_v_self); /* proto*/ +static CYTHON_INLINE npy_intp __pyx_f_5numpy_5dtype_9alignment_alignment(PyArray_Descr *__pyx_v_self); /* proto*/ +static CYTHON_INLINE PyObject *__pyx_f_5numpy_5dtype_6fields_fields(PyArray_Descr *__pyx_v_self); /* proto*/ +static CYTHON_INLINE PyObject *__pyx_f_5numpy_5dtype_5names_names(PyArray_Descr *__pyx_v_self); /* proto*/ +static CYTHON_INLINE PyArray_ArrayDescr *__pyx_f_5numpy_5dtype_8subarray_subarray(PyArray_Descr *__pyx_v_self); /* proto*/ +static CYTHON_INLINE npy_uint64 __pyx_f_5numpy_5dtype_5flags_flags(PyArray_Descr *__pyx_v_self); /* proto*/ +static CYTHON_INLINE int __pyx_f_5numpy_9broadcast_7numiter_numiter(PyArrayMultiIterObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE npy_intp __pyx_f_5numpy_9broadcast_4size_size(PyArrayMultiIterObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE npy_intp __pyx_f_5numpy_9broadcast_5index_index(PyArrayMultiIterObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE int __pyx_f_5numpy_9broadcast_2nd_nd(PyArrayMultiIterObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE npy_intp *__pyx_f_5numpy_9broadcast_10dimensions_dimensions(PyArrayMultiIterObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE void **__pyx_f_5numpy_9broadcast_5iters_iters(PyArrayMultiIterObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE PyObject *__pyx_f_5numpy_7ndarray_4base_base(PyArrayObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE PyArray_Descr *__pyx_f_5numpy_7ndarray_5descr_descr(PyArrayObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE int __pyx_f_5numpy_7ndarray_4ndim_ndim(PyArrayObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_5shape_shape(PyArrayObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_7strides_strides(PyArrayObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE npy_intp __pyx_f_5numpy_7ndarray_4size_size(PyArrayObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE char *__pyx_f_5numpy_7ndarray_4data_data(PyArrayObject *__pyx_v_self); /* proto*/ + +/* Module declarations from "cython" */ + +/* Module declarations from "cpython.version" */ + +/* Module declarations from "__builtin__" */ + +/* Module declarations from "cpython.type" */ + +/* Module declarations from "libc.string" */ + +/* Module declarations from "libc.stdio" */ + +/* Module declarations from "cpython.object" */ + +/* Module declarations from "cpython.ref" */ + +/* Module declarations from "cpython.exc" */ + +/* Module declarations from "cpython.module" */ + +/* Module declarations from "cpython.mem" */ + +/* Module declarations from "cpython.tuple" */ + +/* Module declarations from "cpython.list" */ + +/* Module declarations from "cpython.sequence" */ + +/* Module declarations from "cpython.mapping" */ + +/* Module declarations from "cpython.iterator" */ + +/* Module declarations from "cpython.number" */ + +/* Module declarations from "cpython.int" */ + +/* Module declarations from "__builtin__" */ + +/* Module declarations from "cpython.bool" */ + +/* Module declarations from "cpython.long" */ + +/* Module declarations from "cpython.float" */ + +/* Module declarations from "__builtin__" */ + +/* Module declarations from "cpython.complex" */ + +/* Module declarations from "cpython.string" */ + +/* Module declarations from "libc.stddef" */ + +/* Module declarations from "cpython.unicode" */ + +/* Module declarations from "cpython.pyport" */ + +/* Module declarations from "cpython.dict" */ + +/* Module declarations from "cpython.instance" */ + +/* Module declarations from "cpython.function" */ + +/* Module declarations from "cpython.method" */ + +/* Module declarations from "cpython.weakref" */ + +/* Module declarations from "cpython.getargs" */ + +/* Module declarations from "cpython.pythread" */ + +/* Module declarations from "cpython.pystate" */ + +/* Module declarations from "cpython.cobject" */ + +/* Module declarations from "cpython.oldbuffer" */ + +/* Module declarations from "cpython.set" */ + +/* Module declarations from "cpython.buffer" */ + +/* Module declarations from "cpython.bytes" */ + +/* Module declarations from "cpython.pycapsule" */ + +/* Module declarations from "cpython.contextvars" */ + +/* Module declarations from "cpython" */ + +/* Module declarations from "numpy" */ + +/* Module declarations from "numpy" */ + +/* Module declarations from "libc.stdlib" */ + +/* Module declarations from "libc.math" */ + +/* Module declarations from "nw_ec_alignx" */ +static PyObject *__pyx_f_12nw_ec_alignx_minarg(float *); /*proto*/ +static PyObject *__pyx_f_12nw_ec_alignx_gappen(PyObject *, PyObject *); /*proto*/ +/* #### Code section: typeinfo ### */ +static __Pyx_TypeInfo __Pyx_TypeInfo_nn___pyx_t_12nw_ec_alignx_DTYPEF_t = { "DTYPEF_t", NULL, sizeof(__pyx_t_12nw_ec_alignx_DTYPEF_t), { 0 }, 0, 'R', 0, 0 }; +static __Pyx_TypeInfo __Pyx_TypeInfo_nn___pyx_t_12nw_ec_alignx_DTYPE_t = { "DTYPE_t", NULL, sizeof(__pyx_t_12nw_ec_alignx_DTYPE_t), { 0 }, 0, __PYX_IS_UNSIGNED(__pyx_t_12nw_ec_alignx_DTYPE_t) ? 'U' : 'I', __PYX_IS_UNSIGNED(__pyx_t_12nw_ec_alignx_DTYPE_t), 0 }; +/* #### Code section: before_global_var ### */ +#define __Pyx_MODULE_NAME "nw_ec_alignx" +extern int __pyx_module_is_main_nw_ec_alignx; +int __pyx_module_is_main_nw_ec_alignx = 0; + +/* Implementation of "nw_ec_alignx" */ +/* #### Code section: global_var ### */ +static PyObject *__pyx_builtin_range; +static PyObject *__pyx_builtin_AssertionError; +static PyObject *__pyx_builtin_open; +static PyObject *__pyx_builtin_ImportError; +/* #### Code section: string_decls ### */ +static const char __pyx_k_d[] = "d"; +static const char __pyx_k_f[] = "f"; +static const char __pyx_k_h[] = "h"; +static const char __pyx_k_i[] = "i"; +static const char __pyx_k_j[] = "j"; +static const char __pyx_k_k[] = "k"; +static const char __pyx_k_v[] = "v"; +static const char __pyx_k_w[] = "w"; +static const char __pyx_k_x[] = "x"; +static const char __pyx_k_y[] = "y"; +static const char __pyx_k_NW[] = "NW"; +static const char __pyx_k__3[] = "-.-.-"; +static const char __pyx_k__4[] = "..."; +static const char __pyx_k__5[] = ""; +static const char __pyx_k_fi[] = "fi"; +static const char __pyx_k_ii[] = "ii"; +static const char __pyx_k_l1[] = "l1"; +static const char __pyx_k_l2[] = "l2"; +static const char __pyx_k_li[] = "li"; +static const char __pyx_k_np[] = "np"; +static const char __pyx_k_ok[] = "ok"; +static const char __pyx_k__11[] = ":"; +static const char __pyx_k__26[] = "\t"; +static const char __pyx_k__27[] = "{}\t{}\n"; +static const char __pyx_k__28[] = "{}\t{}\t{}\n"; +static const char __pyx_k__29[] = "*"; +static const char __pyx_k__30[] = "."; +static const char __pyx_k__59[] = "?"; +static const char __pyx_k_arr[] = "arr"; +static const char __pyx_k_dic[] = "dic"; +static const char __pyx_k_ec1[] = "ec1"; +static const char __pyx_k_ec2[] = "ec2"; +static const char __pyx_k_eci[] = "eci"; +static const char __pyx_k_ecj[] = "ecj"; +static const char __pyx_k_ecs[] = "ecs"; +static const char __pyx_k_gap[] = "gap"; +static const char __pyx_k_ind[] = "ind"; +static const char __pyx_k_map[] = "map"; +static const char __pyx_k_mat[] = "mat"; +static const char __pyx_k_nws[] = "nws"; +static const char __pyx_k_sco[] = "sco"; +static const char __pyx_k_st1[] = "st1"; +static const char __pyx_k_st2[] = "st2"; +static const char __pyx_k_Pool[] = "Pool"; +static const char __pyx_k_decs[] = "decs"; +static const char __pyx_k_homo[] = "homo"; +static const char __pyx_k_ind1[] = "ind1"; +static const char __pyx_k_ind2[] = "ind2"; +static const char __pyx_k_line[] = "line"; +static const char __pyx_k_main[] = "__main__"; +static const char __pyx_k_mini[] = "mini"; +static const char __pyx_k_name[] = "__name__"; +static const char __pyx_k_open[] = "open"; +static const char __pyx_k_outf[] = "outf"; +static const char __pyx_k_pool[] = "pool"; +static const char __pyx_k_resd[] = "resd"; +static const char __pyx_k_seq1[] = "seq1"; +static const char __pyx_k_seq2[] = "seq2"; +static const char __pyx_k_seqs[] = "seqs"; +static const char __pyx_k_spec[] = "__spec__"; +static const char __pyx_k_test[] = "__test__"; +static const char __pyx_k_Array[] = "Array"; +static const char __pyx_k_DTYPE[] = "DTYPE"; +static const char __pyx_k_arrow[] = "arrow"; +static const char __pyx_k_aseq1[] = "aseq1"; +static const char __pyx_k_aseq2[] = "aseq2"; +static const char __pyx_k_binit[] = "binit"; +static const char __pyx_k_close[] = "close"; +static const char __pyx_k_dtype[] = "dtype"; +static const char __pyx_k_fhomo[] = "fhomo"; +static const char __pyx_k_fname[] = "fname"; +static const char __pyx_k_int32[] = "int32"; +static const char __pyx_k_items[] = "items"; +static const char __pyx_k_nproc[] = "nproc"; +static const char __pyx_k_numpy[] = "numpy"; +static const char __pyx_k_range[] = "range"; +static const char __pyx_k_rdict[] = "rdict"; +static const char __pyx_k_score[] = "score"; +static const char __pyx_k_seqs1[] = "seqs1"; +static const char __pyx_k_seqs2[] = "seqs2"; +static const char __pyx_k_thres[] = "thres"; +static const char __pyx_k_total[] = "total"; +static const char __pyx_k_write[] = "write"; +static const char __pyx_k_zeros[] = "zeros"; +static const char __pyx_k_DTYPEF[] = "DTYPEF"; +static const char __pyx_k_FastNW[] = "_FastNW"; +static const char __pyx_k_bblock[] = "bblock"; +static const char __pyx_k_ctypes[] = "ctypes"; +static const char __pyx_k_dotstr[] = "dotstr"; +static const char __pyx_k_format[] = "format"; +static const char __pyx_k_gapstr[] = "gapstr"; +static const char __pyx_k_import[] = "__import__"; +static const char __pyx_k_length[] = "length"; +static const char __pyx_k_minpos[] = "minpos"; +static const char __pyx_k_oscore[] = "oscore"; +static const char __pyx_k_pengap[] = "pengap"; +static const char __pyx_k_randum[] = "randum"; +static const char __pyx_k_resdic[] = "resdic"; +static const char __pyx_k_result[] = "result"; +static const char __pyx_k_scomat[] = "scomat"; +static const char __pyx_k_strfmt[] = "strfmt"; +static const char __pyx_k_update[] = "update"; +static const char __pyx_k_values[] = "values"; +static const char __pyx_k_c_float[] = "c_float"; +static const char __pyx_k_float32[] = "float32"; +static const char __pyx_k_float64[] = "float64"; +static const char __pyx_k_fpengap[] = "fpengap"; +static const char __pyx_k_get_obj[] = "get_obj"; +static const char __pyx_k_indices[] = "indices"; +static const char __pyx_k_partial[] = "partial"; +static const char __pyx_k_randnum[] = "randnum"; +static const char __pyx_k_resdict[] = "resdict"; +static const char __pyx_k_reshape[] = "reshape"; +static const char __pyx_k_scoring[] = "scoring"; +static const char __pyx_k_testval[] = "testval"; +static const char __pyx_k_wholedb[] = "wholedb"; +static const char __pyx_k_db_vs_db[] = "db_vs_db"; +static const char __pyx_k_fill_mat[] = "_fill_mat"; +static const char __pyx_k_indices2[] = "indices2"; +static const char __pyx_k_localize[] = "localize"; +static const char __pyx_k_scomat_2[] = "scomat_"; +static const char __pyx_k_scoremat[] = "scoremat"; +static const char __pyx_k_backtrace[] = "_backtrace"; +static const char __pyx_k_buffering[] = "buffering"; +static const char __pyx_k_chunksize[] = "chunksize"; +static const char __pyx_k_functools[] = "functools"; +static const char __pyx_k_processes[] = "processes"; +static const char __pyx_k_seq_vs_db[] = "seq_vs_db"; +static const char __pyx_k_align_func[] = "align_func"; +static const char __pyx_k_alldb_comp[] = "alldb_comp"; +static const char __pyx_k_frombuffer[] = "frombuffer"; +static const char __pyx_k_randfactor[] = "randfactor"; +static const char __pyx_k_store_dict[] = "store_dict"; +static const char __pyx_k_ImportError[] = "ImportError"; +static const char __pyx_k_scoring_gap[] = "scoring_gap"; +static const char __pyx_k_alldb_shared[] = "alldb_shared"; +static const char __pyx_k_ind_vs_alldb[] = "ind_vs_alldb"; +static const char __pyx_k_initializing[] = "_initializing"; +static const char __pyx_k_is_coroutine[] = "_is_coroutine"; +static const char __pyx_k_nw_ec_alignx[] = "nw_ec_alignx"; +static const char __pyx_k_class_getitem[] = "__class_getitem__"; +static const char __pyx_k_list_vs_alldb[] = "list_vs_alldb"; +static const char __pyx_k_AssertionError[] = "AssertionError"; +static const char __pyx_k_multiprocessing[] = "multiprocessing"; +static const char __pyx_k_shared_sco_base[] = "shared_sco_base"; +static const char __pyx_k_nw_ec_alignx_pyx[] = "nw_ec_alignx.pyx"; +static const char __pyx_k_create_global_arr[] = "_create_global_arr"; +static const char __pyx_k_asyncio_coroutines[] = "asyncio.coroutines"; +static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback"; +static const char __pyx_k_fhomo_fpengap_must_sum_aprox_1[] = "fhomo + fpengap must sum aprox. 1"; +static const char __pyx_k_Needelman_Wunsh_algorithm_for_EC[] = "Needelman-Wunsh algorithm for EC number alignment - Cython version.\nThis version performs ~30 times fastter than the original pure python/numpy\nimplementation."; +static const char __pyx_k_The_aligned_sequences_must_be_of[] = "The aligned sequences must be of the same length"; +static const char __pyx_k_numpy__core_multiarray_failed_to[] = "numpy._core.multiarray failed to import"; +static const char __pyx_k_numpy__core_umath_failed_to_impo[] = "numpy._core.umath failed to import"; +/* #### Code section: decls ### */ +static PyObject *__pyx_pf_12nw_ec_alignx__FastNW(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_mat, PyObject *__pyx_v_ecs, PyObject *__pyx_v_seq1, PyObject *__pyx_v_seq2, float __pyx_v_gap); /* proto */ +static PyObject *__pyx_pf_12nw_ec_alignx_2scoring(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_mat, PyObject *__pyx_v_ecs, PyObject *__pyx_v_seq1, PyObject *__pyx_v_seq2, float __pyx_v_gap, float __pyx_v_fhomo, float __pyx_v_fpengap); /* proto */ +static PyObject *__pyx_pf_12nw_ec_alignx_4_backtrace(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_arrow, PyObject *__pyx_v_seq1, PyObject *__pyx_v_seq2); /* proto */ +static PyObject *__pyx_pf_12nw_ec_alignx_6NW(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_mat, PyObject *__pyx_v_ecs, PyObject *__pyx_v_seq1, PyObject *__pyx_v_seq2, float __pyx_v_gap, PyBoolObject *__pyx_v_localize, PyBoolObject *__pyx_v_nws, PyBoolObject *__pyx_v_strfmt, PyBoolObject *__pyx_v_oscore); /* proto */ +static PyObject *__pyx_pf_12nw_ec_alignx_8ind_vs_alldb(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_ind, PyObject *__pyx_v_seqs, PyArrayObject *__pyx_v_mat, PyObject *__pyx_v_decs, float __pyx_v_thres, PyBoolObject *__pyx_v_wholedb, PyBoolObject *__pyx_v_localize, PyBoolObject *__pyx_v_oscore); /* proto */ +static PyObject *__pyx_pf_12nw_ec_alignx_10seq_vs_db(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_seq1, PyObject *__pyx_v_seqs, PyArrayObject *__pyx_v_mat, PyObject *__pyx_v_decs, float __pyx_v_thres, PyBoolObject *__pyx_v_localize, PyBoolObject *__pyx_v_oscore); /* proto */ +static PyObject *__pyx_pf_12nw_ec_alignx_12db_vs_db(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_seqs1, PyObject *__pyx_v_seqs2, PyArrayObject *__pyx_v_mat, PyObject *__pyx_v_decs, float __pyx_v_thres, PyBoolObject *__pyx_v_localize, PyBoolObject *__pyx_v_oscore, int __pyx_v_nproc); /* proto */ +static PyObject *__pyx_pf_12nw_ec_alignx_14alldb_comp(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_seqs, PyArrayObject *__pyx_v_mat, PyObject *__pyx_v_decs, float __pyx_v_thres, PyBoolObject *__pyx_v_localize, PyBoolObject *__pyx_v_oscore, int __pyx_v_nproc); /* proto */ +static PyObject *__pyx_pf_12nw_ec_alignx_16list_vs_alldb(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_seqs, PyArrayObject *__pyx_v_mat, PyObject *__pyx_v_decs, float __pyx_v_thres, PyBoolObject *__pyx_v_localize, PyBoolObject *__pyx_v_wholedb, PyBoolObject *__pyx_v_oscore, int __pyx_v_nproc); /* proto */ +static PyObject *__pyx_pf_12nw_ec_alignx_18alldb_shared(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_seqs, PyObject *__pyx_v_mat, PyObject *__pyx_v_decs, PyObject *__pyx_v_thres, PyObject *__pyx_v_localize, PyObject *__pyx_v_nproc); /* proto */ +static PyObject *__pyx_pf_12nw_ec_alignx_20_create_global_arr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_total); /* proto */ +static PyObject *__pyx_pf_12nw_ec_alignx_22_fill_mat(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_ind, PyObject *__pyx_v_seqs, PyObject *__pyx_v_mat, PyObject *__pyx_v_decs, PyObject *__pyx_v_localize, CYTHON_UNUSED float __pyx_v_thres); /* proto */ +static PyObject *__pyx_pf_12nw_ec_alignx_24store_dict(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_fname, PyObject *__pyx_v_rdict, PyObject *__pyx_v_indices, PyObject *__pyx_v_indices2); /* proto */ +static __Pyx_CachedCFunction __pyx_umethod_PyDict_Type_update = {0, 0, 0, 0, 0}; +/* #### Code section: late_includes ### */ +/* #### Code section: module_state ### */ +typedef struct { + PyObject *__pyx_d; + PyObject *__pyx_b; + PyObject *__pyx_cython_runtime; + PyObject *__pyx_empty_tuple; + PyObject *__pyx_empty_bytes; + PyObject *__pyx_empty_unicode; + #ifdef __Pyx_CyFunction_USED + PyTypeObject *__pyx_CyFunctionType; + #endif + #ifdef __Pyx_FusedFunction_USED + PyTypeObject *__pyx_FusedFunctionType; + #endif + #ifdef __Pyx_Generator_USED + PyTypeObject *__pyx_GeneratorType; + #endif + #ifdef __Pyx_IterableCoroutine_USED + PyTypeObject *__pyx_IterableCoroutineType; + #endif + #ifdef __Pyx_Coroutine_USED + PyTypeObject *__pyx_CoroutineAwaitType; + #endif + #ifdef __Pyx_Coroutine_USED + PyTypeObject *__pyx_CoroutineType; + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + PyTypeObject *__pyx_ptype_7cpython_4type_type; + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + PyTypeObject *__pyx_ptype_7cpython_4bool_bool; + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + PyTypeObject *__pyx_ptype_7cpython_7complex_complex; + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + PyTypeObject *__pyx_ptype_5numpy_dtype; + PyTypeObject *__pyx_ptype_5numpy_flatiter; + PyTypeObject *__pyx_ptype_5numpy_broadcast; + PyTypeObject *__pyx_ptype_5numpy_ndarray; + PyTypeObject *__pyx_ptype_5numpy_generic; + PyTypeObject *__pyx_ptype_5numpy_number; + PyTypeObject *__pyx_ptype_5numpy_integer; + PyTypeObject *__pyx_ptype_5numpy_signedinteger; + PyTypeObject *__pyx_ptype_5numpy_unsignedinteger; + PyTypeObject *__pyx_ptype_5numpy_inexact; + PyTypeObject *__pyx_ptype_5numpy_floating; + PyTypeObject *__pyx_ptype_5numpy_complexfloating; + PyTypeObject *__pyx_ptype_5numpy_flexible; + PyTypeObject *__pyx_ptype_5numpy_character; + PyTypeObject *__pyx_ptype_5numpy_ufunc; + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + PyObject *__pyx_n_s_Array; + PyObject *__pyx_n_s_AssertionError; + PyObject *__pyx_n_s_DTYPE; + PyObject *__pyx_n_s_DTYPEF; + PyObject *__pyx_n_s_FastNW; + PyObject *__pyx_n_s_ImportError; + PyObject *__pyx_n_s_NW; + PyObject *__pyx_n_s_Pool; + PyObject *__pyx_kp_u_The_aligned_sequences_must_be_of; + PyObject *__pyx_kp_u__11; + PyObject *__pyx_kp_u__26; + PyObject *__pyx_kp_u__27; + PyObject *__pyx_kp_u__28; + PyObject *__pyx_n_s__29; + PyObject *__pyx_kp_u__3; + PyObject *__pyx_kp_u__30; + PyObject *__pyx_kp_u__4; + PyObject *__pyx_kp_u__5; + PyObject *__pyx_n_s__59; + PyObject *__pyx_n_s_align_func; + PyObject *__pyx_n_s_alldb_comp; + PyObject *__pyx_n_s_alldb_shared; + PyObject *__pyx_n_s_arr; + PyObject *__pyx_n_s_arrow; + PyObject *__pyx_n_s_aseq1; + PyObject *__pyx_n_s_aseq2; + PyObject *__pyx_n_s_asyncio_coroutines; + PyObject *__pyx_n_s_backtrace; + PyObject *__pyx_n_s_bblock; + PyObject *__pyx_n_s_binit; + PyObject *__pyx_n_s_buffering; + PyObject *__pyx_n_s_c_float; + PyObject *__pyx_n_s_chunksize; + PyObject *__pyx_n_s_class_getitem; + PyObject *__pyx_n_s_cline_in_traceback; + PyObject *__pyx_n_s_close; + PyObject *__pyx_n_s_create_global_arr; + PyObject *__pyx_n_s_ctypes; + PyObject *__pyx_n_s_d; + PyObject *__pyx_n_s_db_vs_db; + PyObject *__pyx_n_s_decs; + PyObject *__pyx_n_s_dic; + PyObject *__pyx_n_s_dotstr; + PyObject *__pyx_n_s_dtype; + PyObject *__pyx_n_s_ec1; + PyObject *__pyx_n_s_ec2; + PyObject *__pyx_n_s_eci; + PyObject *__pyx_n_s_ecj; + PyObject *__pyx_n_s_ecs; + PyObject *__pyx_n_s_f; + PyObject *__pyx_n_s_fhomo; + PyObject *__pyx_kp_u_fhomo_fpengap_must_sum_aprox_1; + PyObject *__pyx_n_s_fi; + PyObject *__pyx_n_s_fill_mat; + PyObject *__pyx_n_s_float32; + PyObject *__pyx_n_s_float64; + PyObject *__pyx_n_s_fname; + PyObject *__pyx_n_s_format; + PyObject *__pyx_n_s_fpengap; + PyObject *__pyx_n_s_frombuffer; + PyObject *__pyx_n_s_functools; + PyObject *__pyx_n_s_gap; + PyObject *__pyx_n_s_gapstr; + PyObject *__pyx_n_s_get_obj; + PyObject *__pyx_n_s_h; + PyObject *__pyx_n_s_homo; + PyObject *__pyx_n_s_i; + PyObject *__pyx_n_s_ii; + PyObject *__pyx_n_s_import; + PyObject *__pyx_n_s_ind; + PyObject *__pyx_n_s_ind1; + PyObject *__pyx_n_s_ind2; + PyObject *__pyx_n_s_ind_vs_alldb; + PyObject *__pyx_n_s_indices; + PyObject *__pyx_n_s_indices2; + PyObject *__pyx_n_s_initializing; + PyObject *__pyx_n_s_int32; + PyObject *__pyx_n_s_is_coroutine; + PyObject *__pyx_n_s_items; + PyObject *__pyx_n_s_j; + PyObject *__pyx_n_s_k; + PyObject *__pyx_n_s_l1; + PyObject *__pyx_n_s_l2; + PyObject *__pyx_n_s_length; + PyObject *__pyx_n_s_li; + PyObject *__pyx_n_s_line; + PyObject *__pyx_n_s_list_vs_alldb; + PyObject *__pyx_n_s_localize; + PyObject *__pyx_n_s_main; + PyObject *__pyx_n_s_map; + PyObject *__pyx_n_s_mat; + PyObject *__pyx_n_s_mini; + PyObject *__pyx_n_s_minpos; + PyObject *__pyx_n_s_multiprocessing; + PyObject *__pyx_n_s_name; + PyObject *__pyx_n_s_np; + PyObject *__pyx_n_s_nproc; + PyObject *__pyx_n_s_numpy; + PyObject *__pyx_kp_u_numpy__core_multiarray_failed_to; + PyObject *__pyx_kp_u_numpy__core_umath_failed_to_impo; + PyObject *__pyx_n_s_nw_ec_alignx; + PyObject *__pyx_kp_s_nw_ec_alignx_pyx; + PyObject *__pyx_n_s_nws; + PyObject *__pyx_n_s_ok; + PyObject *__pyx_n_s_open; + PyObject *__pyx_n_s_oscore; + PyObject *__pyx_n_s_outf; + PyObject *__pyx_n_s_partial; + PyObject *__pyx_n_s_pengap; + PyObject *__pyx_n_s_pool; + PyObject *__pyx_n_s_processes; + PyObject *__pyx_n_s_randfactor; + PyObject *__pyx_n_s_randnum; + PyObject *__pyx_n_s_randum; + PyObject *__pyx_n_s_range; + PyObject *__pyx_n_s_rdict; + PyObject *__pyx_n_s_resd; + PyObject *__pyx_n_s_resdic; + PyObject *__pyx_n_s_resdict; + PyObject *__pyx_n_s_reshape; + PyObject *__pyx_n_s_result; + PyObject *__pyx_n_s_sco; + PyObject *__pyx_n_s_scomat; + PyObject *__pyx_n_s_scomat_2; + PyObject *__pyx_n_s_score; + PyObject *__pyx_n_s_scoremat; + PyObject *__pyx_n_s_scoring; + PyObject *__pyx_n_s_scoring_gap; + PyObject *__pyx_n_s_seq1; + PyObject *__pyx_n_s_seq2; + PyObject *__pyx_n_s_seq_vs_db; + PyObject *__pyx_n_s_seqs; + PyObject *__pyx_n_s_seqs1; + PyObject *__pyx_n_s_seqs2; + PyObject *__pyx_n_s_shared_sco_base; + PyObject *__pyx_n_s_spec; + PyObject *__pyx_n_s_st1; + PyObject *__pyx_n_s_st2; + PyObject *__pyx_n_s_store_dict; + PyObject *__pyx_n_s_strfmt; + PyObject *__pyx_n_s_test; + PyObject *__pyx_n_s_testval; + PyObject *__pyx_n_s_thres; + PyObject *__pyx_n_s_total; + PyObject *__pyx_n_s_update; + PyObject *__pyx_n_s_v; + PyObject *__pyx_n_s_values; + PyObject *__pyx_n_u_w; + PyObject *__pyx_n_s_wholedb; + PyObject *__pyx_n_s_write; + PyObject *__pyx_n_s_x; + PyObject *__pyx_n_s_y; + PyObject *__pyx_n_s_zeros; + PyObject *__pyx_float_1_0; + PyObject *__pyx_float_0_05; + PyObject *__pyx_float_0_95; + PyObject *__pyx_int_1; + PyObject *__pyx_int_2; + PyObject *__pyx_int_1000; + PyObject *__pyx_int_neg_1; + PyBoolObject *__pyx_k__7; + PyBoolObject *__pyx_k__8; + PyBoolObject *__pyx_k__9; + PyBoolObject *__pyx_k__10; + PyBoolObject *__pyx_k__12; + PyBoolObject *__pyx_k__13; + PyBoolObject *__pyx_k__14; + PyBoolObject *__pyx_k__15; + PyBoolObject *__pyx_k__16; + PyBoolObject *__pyx_k__17; + PyBoolObject *__pyx_k__18; + PyBoolObject *__pyx_k__19; + PyBoolObject *__pyx_k__20; + PyBoolObject *__pyx_k__21; + PyBoolObject *__pyx_k__22; + PyBoolObject *__pyx_k__23; + PyObject *__pyx_tuple_; + PyObject *__pyx_slice__6; + PyObject *__pyx_tuple__2; + PyObject *__pyx_slice__24; + PyObject *__pyx_tuple__25; + PyObject *__pyx_tuple__31; + PyObject *__pyx_tuple__33; + PyObject *__pyx_tuple__35; + PyObject *__pyx_tuple__37; + PyObject *__pyx_tuple__39; + PyObject *__pyx_tuple__41; + PyObject *__pyx_tuple__43; + PyObject *__pyx_tuple__45; + PyObject *__pyx_tuple__47; + PyObject *__pyx_tuple__49; + PyObject *__pyx_tuple__51; + PyObject *__pyx_tuple__52; + PyObject *__pyx_tuple__54; + PyObject *__pyx_tuple__56; + PyObject *__pyx_tuple__58; + PyObject *__pyx_codeobj__32; + PyObject *__pyx_codeobj__34; + PyObject *__pyx_codeobj__36; + PyObject *__pyx_codeobj__38; + PyObject *__pyx_codeobj__40; + PyObject *__pyx_codeobj__42; + PyObject *__pyx_codeobj__44; + PyObject *__pyx_codeobj__46; + PyObject *__pyx_codeobj__48; + PyObject *__pyx_codeobj__50; + PyObject *__pyx_codeobj__53; + PyObject *__pyx_codeobj__55; + PyObject *__pyx_codeobj__57; +} __pyx_mstate; + +#if CYTHON_USE_MODULE_STATE +#ifdef __cplusplus +namespace { + extern struct PyModuleDef __pyx_moduledef; +} /* anonymous namespace */ +#else +static struct PyModuleDef __pyx_moduledef; +#endif + +#define __pyx_mstate(o) ((__pyx_mstate *)__Pyx_PyModule_GetState(o)) + +#define __pyx_mstate_global (__pyx_mstate(PyState_FindModule(&__pyx_moduledef))) + +#define __pyx_m (PyState_FindModule(&__pyx_moduledef)) +#else +static __pyx_mstate __pyx_mstate_global_static = +#ifdef __cplusplus + {}; +#else + {0}; +#endif +static __pyx_mstate *__pyx_mstate_global = &__pyx_mstate_global_static; +#endif +/* #### Code section: module_state_clear ### */ +#if CYTHON_USE_MODULE_STATE +static int __pyx_m_clear(PyObject *m) { + __pyx_mstate *clear_module_state = __pyx_mstate(m); + if (!clear_module_state) return 0; + Py_CLEAR(clear_module_state->__pyx_d); + Py_CLEAR(clear_module_state->__pyx_b); + Py_CLEAR(clear_module_state->__pyx_cython_runtime); + Py_CLEAR(clear_module_state->__pyx_empty_tuple); + Py_CLEAR(clear_module_state->__pyx_empty_bytes); + Py_CLEAR(clear_module_state->__pyx_empty_unicode); + #ifdef __Pyx_CyFunction_USED + Py_CLEAR(clear_module_state->__pyx_CyFunctionType); + #endif + #ifdef __Pyx_FusedFunction_USED + Py_CLEAR(clear_module_state->__pyx_FusedFunctionType); + #endif + Py_CLEAR(clear_module_state->__pyx_ptype_7cpython_4type_type); + Py_CLEAR(clear_module_state->__pyx_ptype_7cpython_4bool_bool); + Py_CLEAR(clear_module_state->__pyx_ptype_7cpython_7complex_complex); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_dtype); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_flatiter); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_broadcast); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_ndarray); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_generic); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_number); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_integer); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_signedinteger); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_unsignedinteger); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_inexact); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_floating); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_complexfloating); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_flexible); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_character); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_ufunc); + Py_CLEAR(clear_module_state->__pyx_n_s_Array); + Py_CLEAR(clear_module_state->__pyx_n_s_AssertionError); + Py_CLEAR(clear_module_state->__pyx_n_s_DTYPE); + Py_CLEAR(clear_module_state->__pyx_n_s_DTYPEF); + Py_CLEAR(clear_module_state->__pyx_n_s_FastNW); + Py_CLEAR(clear_module_state->__pyx_n_s_ImportError); + Py_CLEAR(clear_module_state->__pyx_n_s_NW); + Py_CLEAR(clear_module_state->__pyx_n_s_Pool); + Py_CLEAR(clear_module_state->__pyx_kp_u_The_aligned_sequences_must_be_of); + Py_CLEAR(clear_module_state->__pyx_kp_u__11); + Py_CLEAR(clear_module_state->__pyx_kp_u__26); + Py_CLEAR(clear_module_state->__pyx_kp_u__27); + Py_CLEAR(clear_module_state->__pyx_kp_u__28); + Py_CLEAR(clear_module_state->__pyx_n_s__29); + Py_CLEAR(clear_module_state->__pyx_kp_u__3); + Py_CLEAR(clear_module_state->__pyx_kp_u__30); + Py_CLEAR(clear_module_state->__pyx_kp_u__4); + Py_CLEAR(clear_module_state->__pyx_kp_u__5); + Py_CLEAR(clear_module_state->__pyx_n_s__59); + Py_CLEAR(clear_module_state->__pyx_n_s_align_func); + Py_CLEAR(clear_module_state->__pyx_n_s_alldb_comp); + Py_CLEAR(clear_module_state->__pyx_n_s_alldb_shared); + Py_CLEAR(clear_module_state->__pyx_n_s_arr); + Py_CLEAR(clear_module_state->__pyx_n_s_arrow); + Py_CLEAR(clear_module_state->__pyx_n_s_aseq1); + Py_CLEAR(clear_module_state->__pyx_n_s_aseq2); + Py_CLEAR(clear_module_state->__pyx_n_s_asyncio_coroutines); + Py_CLEAR(clear_module_state->__pyx_n_s_backtrace); + Py_CLEAR(clear_module_state->__pyx_n_s_bblock); + Py_CLEAR(clear_module_state->__pyx_n_s_binit); + Py_CLEAR(clear_module_state->__pyx_n_s_buffering); + Py_CLEAR(clear_module_state->__pyx_n_s_c_float); + Py_CLEAR(clear_module_state->__pyx_n_s_chunksize); + Py_CLEAR(clear_module_state->__pyx_n_s_class_getitem); + Py_CLEAR(clear_module_state->__pyx_n_s_cline_in_traceback); + Py_CLEAR(clear_module_state->__pyx_n_s_close); + Py_CLEAR(clear_module_state->__pyx_n_s_create_global_arr); + Py_CLEAR(clear_module_state->__pyx_n_s_ctypes); + Py_CLEAR(clear_module_state->__pyx_n_s_d); + Py_CLEAR(clear_module_state->__pyx_n_s_db_vs_db); + Py_CLEAR(clear_module_state->__pyx_n_s_decs); + Py_CLEAR(clear_module_state->__pyx_n_s_dic); + Py_CLEAR(clear_module_state->__pyx_n_s_dotstr); + Py_CLEAR(clear_module_state->__pyx_n_s_dtype); + Py_CLEAR(clear_module_state->__pyx_n_s_ec1); + Py_CLEAR(clear_module_state->__pyx_n_s_ec2); + Py_CLEAR(clear_module_state->__pyx_n_s_eci); + Py_CLEAR(clear_module_state->__pyx_n_s_ecj); + Py_CLEAR(clear_module_state->__pyx_n_s_ecs); + Py_CLEAR(clear_module_state->__pyx_n_s_f); + Py_CLEAR(clear_module_state->__pyx_n_s_fhomo); + Py_CLEAR(clear_module_state->__pyx_kp_u_fhomo_fpengap_must_sum_aprox_1); + Py_CLEAR(clear_module_state->__pyx_n_s_fi); + Py_CLEAR(clear_module_state->__pyx_n_s_fill_mat); + Py_CLEAR(clear_module_state->__pyx_n_s_float32); + Py_CLEAR(clear_module_state->__pyx_n_s_float64); + Py_CLEAR(clear_module_state->__pyx_n_s_fname); + Py_CLEAR(clear_module_state->__pyx_n_s_format); + Py_CLEAR(clear_module_state->__pyx_n_s_fpengap); + Py_CLEAR(clear_module_state->__pyx_n_s_frombuffer); + Py_CLEAR(clear_module_state->__pyx_n_s_functools); + Py_CLEAR(clear_module_state->__pyx_n_s_gap); + Py_CLEAR(clear_module_state->__pyx_n_s_gapstr); + Py_CLEAR(clear_module_state->__pyx_n_s_get_obj); + Py_CLEAR(clear_module_state->__pyx_n_s_h); + Py_CLEAR(clear_module_state->__pyx_n_s_homo); + Py_CLEAR(clear_module_state->__pyx_n_s_i); + Py_CLEAR(clear_module_state->__pyx_n_s_ii); + Py_CLEAR(clear_module_state->__pyx_n_s_import); + Py_CLEAR(clear_module_state->__pyx_n_s_ind); + Py_CLEAR(clear_module_state->__pyx_n_s_ind1); + Py_CLEAR(clear_module_state->__pyx_n_s_ind2); + Py_CLEAR(clear_module_state->__pyx_n_s_ind_vs_alldb); + Py_CLEAR(clear_module_state->__pyx_n_s_indices); + Py_CLEAR(clear_module_state->__pyx_n_s_indices2); + Py_CLEAR(clear_module_state->__pyx_n_s_initializing); + Py_CLEAR(clear_module_state->__pyx_n_s_int32); + Py_CLEAR(clear_module_state->__pyx_n_s_is_coroutine); + Py_CLEAR(clear_module_state->__pyx_n_s_items); + Py_CLEAR(clear_module_state->__pyx_n_s_j); + Py_CLEAR(clear_module_state->__pyx_n_s_k); + Py_CLEAR(clear_module_state->__pyx_n_s_l1); + Py_CLEAR(clear_module_state->__pyx_n_s_l2); + Py_CLEAR(clear_module_state->__pyx_n_s_length); + Py_CLEAR(clear_module_state->__pyx_n_s_li); + Py_CLEAR(clear_module_state->__pyx_n_s_line); + Py_CLEAR(clear_module_state->__pyx_n_s_list_vs_alldb); + Py_CLEAR(clear_module_state->__pyx_n_s_localize); + Py_CLEAR(clear_module_state->__pyx_n_s_main); + Py_CLEAR(clear_module_state->__pyx_n_s_map); + Py_CLEAR(clear_module_state->__pyx_n_s_mat); + Py_CLEAR(clear_module_state->__pyx_n_s_mini); + Py_CLEAR(clear_module_state->__pyx_n_s_minpos); + Py_CLEAR(clear_module_state->__pyx_n_s_multiprocessing); + Py_CLEAR(clear_module_state->__pyx_n_s_name); + Py_CLEAR(clear_module_state->__pyx_n_s_np); + Py_CLEAR(clear_module_state->__pyx_n_s_nproc); + Py_CLEAR(clear_module_state->__pyx_n_s_numpy); + Py_CLEAR(clear_module_state->__pyx_kp_u_numpy__core_multiarray_failed_to); + Py_CLEAR(clear_module_state->__pyx_kp_u_numpy__core_umath_failed_to_impo); + Py_CLEAR(clear_module_state->__pyx_n_s_nw_ec_alignx); + Py_CLEAR(clear_module_state->__pyx_kp_s_nw_ec_alignx_pyx); + Py_CLEAR(clear_module_state->__pyx_n_s_nws); + Py_CLEAR(clear_module_state->__pyx_n_s_ok); + Py_CLEAR(clear_module_state->__pyx_n_s_open); + Py_CLEAR(clear_module_state->__pyx_n_s_oscore); + Py_CLEAR(clear_module_state->__pyx_n_s_outf); + Py_CLEAR(clear_module_state->__pyx_n_s_partial); + Py_CLEAR(clear_module_state->__pyx_n_s_pengap); + Py_CLEAR(clear_module_state->__pyx_n_s_pool); + Py_CLEAR(clear_module_state->__pyx_n_s_processes); + Py_CLEAR(clear_module_state->__pyx_n_s_randfactor); + Py_CLEAR(clear_module_state->__pyx_n_s_randnum); + Py_CLEAR(clear_module_state->__pyx_n_s_randum); + Py_CLEAR(clear_module_state->__pyx_n_s_range); + Py_CLEAR(clear_module_state->__pyx_n_s_rdict); + Py_CLEAR(clear_module_state->__pyx_n_s_resd); + Py_CLEAR(clear_module_state->__pyx_n_s_resdic); + Py_CLEAR(clear_module_state->__pyx_n_s_resdict); + Py_CLEAR(clear_module_state->__pyx_n_s_reshape); + Py_CLEAR(clear_module_state->__pyx_n_s_result); + Py_CLEAR(clear_module_state->__pyx_n_s_sco); + Py_CLEAR(clear_module_state->__pyx_n_s_scomat); + Py_CLEAR(clear_module_state->__pyx_n_s_scomat_2); + Py_CLEAR(clear_module_state->__pyx_n_s_score); + Py_CLEAR(clear_module_state->__pyx_n_s_scoremat); + Py_CLEAR(clear_module_state->__pyx_n_s_scoring); + Py_CLEAR(clear_module_state->__pyx_n_s_scoring_gap); + Py_CLEAR(clear_module_state->__pyx_n_s_seq1); + Py_CLEAR(clear_module_state->__pyx_n_s_seq2); + Py_CLEAR(clear_module_state->__pyx_n_s_seq_vs_db); + Py_CLEAR(clear_module_state->__pyx_n_s_seqs); + Py_CLEAR(clear_module_state->__pyx_n_s_seqs1); + Py_CLEAR(clear_module_state->__pyx_n_s_seqs2); + Py_CLEAR(clear_module_state->__pyx_n_s_shared_sco_base); + Py_CLEAR(clear_module_state->__pyx_n_s_spec); + Py_CLEAR(clear_module_state->__pyx_n_s_st1); + Py_CLEAR(clear_module_state->__pyx_n_s_st2); + Py_CLEAR(clear_module_state->__pyx_n_s_store_dict); + Py_CLEAR(clear_module_state->__pyx_n_s_strfmt); + Py_CLEAR(clear_module_state->__pyx_n_s_test); + Py_CLEAR(clear_module_state->__pyx_n_s_testval); + Py_CLEAR(clear_module_state->__pyx_n_s_thres); + Py_CLEAR(clear_module_state->__pyx_n_s_total); + Py_CLEAR(clear_module_state->__pyx_n_s_update); + Py_CLEAR(clear_module_state->__pyx_n_s_v); + Py_CLEAR(clear_module_state->__pyx_n_s_values); + Py_CLEAR(clear_module_state->__pyx_n_u_w); + Py_CLEAR(clear_module_state->__pyx_n_s_wholedb); + Py_CLEAR(clear_module_state->__pyx_n_s_write); + Py_CLEAR(clear_module_state->__pyx_n_s_x); + Py_CLEAR(clear_module_state->__pyx_n_s_y); + Py_CLEAR(clear_module_state->__pyx_n_s_zeros); + Py_CLEAR(clear_module_state->__pyx_float_1_0); + Py_CLEAR(clear_module_state->__pyx_float_0_05); + Py_CLEAR(clear_module_state->__pyx_float_0_95); + Py_CLEAR(clear_module_state->__pyx_int_1); + Py_CLEAR(clear_module_state->__pyx_int_2); + Py_CLEAR(clear_module_state->__pyx_int_1000); + Py_CLEAR(clear_module_state->__pyx_int_neg_1); + Py_CLEAR(clear_module_state->__pyx_k__7); + Py_CLEAR(clear_module_state->__pyx_k__8); + Py_CLEAR(clear_module_state->__pyx_k__9); + Py_CLEAR(clear_module_state->__pyx_k__10); + Py_CLEAR(clear_module_state->__pyx_k__12); + Py_CLEAR(clear_module_state->__pyx_k__13); + Py_CLEAR(clear_module_state->__pyx_k__14); + Py_CLEAR(clear_module_state->__pyx_k__15); + Py_CLEAR(clear_module_state->__pyx_k__16); + Py_CLEAR(clear_module_state->__pyx_k__17); + Py_CLEAR(clear_module_state->__pyx_k__18); + Py_CLEAR(clear_module_state->__pyx_k__19); + Py_CLEAR(clear_module_state->__pyx_k__20); + Py_CLEAR(clear_module_state->__pyx_k__21); + Py_CLEAR(clear_module_state->__pyx_k__22); + Py_CLEAR(clear_module_state->__pyx_k__23); + Py_CLEAR(clear_module_state->__pyx_tuple_); + Py_CLEAR(clear_module_state->__pyx_slice__6); + Py_CLEAR(clear_module_state->__pyx_tuple__2); + Py_CLEAR(clear_module_state->__pyx_slice__24); + Py_CLEAR(clear_module_state->__pyx_tuple__25); + Py_CLEAR(clear_module_state->__pyx_tuple__31); + Py_CLEAR(clear_module_state->__pyx_tuple__33); + Py_CLEAR(clear_module_state->__pyx_tuple__35); + Py_CLEAR(clear_module_state->__pyx_tuple__37); + Py_CLEAR(clear_module_state->__pyx_tuple__39); + Py_CLEAR(clear_module_state->__pyx_tuple__41); + Py_CLEAR(clear_module_state->__pyx_tuple__43); + Py_CLEAR(clear_module_state->__pyx_tuple__45); + Py_CLEAR(clear_module_state->__pyx_tuple__47); + Py_CLEAR(clear_module_state->__pyx_tuple__49); + Py_CLEAR(clear_module_state->__pyx_tuple__51); + Py_CLEAR(clear_module_state->__pyx_tuple__52); + Py_CLEAR(clear_module_state->__pyx_tuple__54); + Py_CLEAR(clear_module_state->__pyx_tuple__56); + Py_CLEAR(clear_module_state->__pyx_tuple__58); + Py_CLEAR(clear_module_state->__pyx_codeobj__32); + Py_CLEAR(clear_module_state->__pyx_codeobj__34); + Py_CLEAR(clear_module_state->__pyx_codeobj__36); + Py_CLEAR(clear_module_state->__pyx_codeobj__38); + Py_CLEAR(clear_module_state->__pyx_codeobj__40); + Py_CLEAR(clear_module_state->__pyx_codeobj__42); + Py_CLEAR(clear_module_state->__pyx_codeobj__44); + Py_CLEAR(clear_module_state->__pyx_codeobj__46); + Py_CLEAR(clear_module_state->__pyx_codeobj__48); + Py_CLEAR(clear_module_state->__pyx_codeobj__50); + Py_CLEAR(clear_module_state->__pyx_codeobj__53); + Py_CLEAR(clear_module_state->__pyx_codeobj__55); + Py_CLEAR(clear_module_state->__pyx_codeobj__57); + return 0; +} +#endif +/* #### Code section: module_state_traverse ### */ +#if CYTHON_USE_MODULE_STATE +static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { + __pyx_mstate *traverse_module_state = __pyx_mstate(m); + if (!traverse_module_state) return 0; + Py_VISIT(traverse_module_state->__pyx_d); + Py_VISIT(traverse_module_state->__pyx_b); + Py_VISIT(traverse_module_state->__pyx_cython_runtime); + Py_VISIT(traverse_module_state->__pyx_empty_tuple); + Py_VISIT(traverse_module_state->__pyx_empty_bytes); + Py_VISIT(traverse_module_state->__pyx_empty_unicode); + #ifdef __Pyx_CyFunction_USED + Py_VISIT(traverse_module_state->__pyx_CyFunctionType); + #endif + #ifdef __Pyx_FusedFunction_USED + Py_VISIT(traverse_module_state->__pyx_FusedFunctionType); + #endif + Py_VISIT(traverse_module_state->__pyx_ptype_7cpython_4type_type); + Py_VISIT(traverse_module_state->__pyx_ptype_7cpython_4bool_bool); + Py_VISIT(traverse_module_state->__pyx_ptype_7cpython_7complex_complex); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_dtype); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_flatiter); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_broadcast); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_ndarray); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_generic); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_number); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_integer); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_signedinteger); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_unsignedinteger); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_inexact); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_floating); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_complexfloating); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_flexible); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_character); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_ufunc); + Py_VISIT(traverse_module_state->__pyx_n_s_Array); + Py_VISIT(traverse_module_state->__pyx_n_s_AssertionError); + Py_VISIT(traverse_module_state->__pyx_n_s_DTYPE); + Py_VISIT(traverse_module_state->__pyx_n_s_DTYPEF); + Py_VISIT(traverse_module_state->__pyx_n_s_FastNW); + Py_VISIT(traverse_module_state->__pyx_n_s_ImportError); + Py_VISIT(traverse_module_state->__pyx_n_s_NW); + Py_VISIT(traverse_module_state->__pyx_n_s_Pool); + Py_VISIT(traverse_module_state->__pyx_kp_u_The_aligned_sequences_must_be_of); + Py_VISIT(traverse_module_state->__pyx_kp_u__11); + Py_VISIT(traverse_module_state->__pyx_kp_u__26); + Py_VISIT(traverse_module_state->__pyx_kp_u__27); + Py_VISIT(traverse_module_state->__pyx_kp_u__28); + Py_VISIT(traverse_module_state->__pyx_n_s__29); + Py_VISIT(traverse_module_state->__pyx_kp_u__3); + Py_VISIT(traverse_module_state->__pyx_kp_u__30); + Py_VISIT(traverse_module_state->__pyx_kp_u__4); + Py_VISIT(traverse_module_state->__pyx_kp_u__5); + Py_VISIT(traverse_module_state->__pyx_n_s__59); + Py_VISIT(traverse_module_state->__pyx_n_s_align_func); + Py_VISIT(traverse_module_state->__pyx_n_s_alldb_comp); + Py_VISIT(traverse_module_state->__pyx_n_s_alldb_shared); + Py_VISIT(traverse_module_state->__pyx_n_s_arr); + Py_VISIT(traverse_module_state->__pyx_n_s_arrow); + Py_VISIT(traverse_module_state->__pyx_n_s_aseq1); + Py_VISIT(traverse_module_state->__pyx_n_s_aseq2); + Py_VISIT(traverse_module_state->__pyx_n_s_asyncio_coroutines); + Py_VISIT(traverse_module_state->__pyx_n_s_backtrace); + Py_VISIT(traverse_module_state->__pyx_n_s_bblock); + Py_VISIT(traverse_module_state->__pyx_n_s_binit); + Py_VISIT(traverse_module_state->__pyx_n_s_buffering); + Py_VISIT(traverse_module_state->__pyx_n_s_c_float); + Py_VISIT(traverse_module_state->__pyx_n_s_chunksize); + Py_VISIT(traverse_module_state->__pyx_n_s_class_getitem); + Py_VISIT(traverse_module_state->__pyx_n_s_cline_in_traceback); + Py_VISIT(traverse_module_state->__pyx_n_s_close); + Py_VISIT(traverse_module_state->__pyx_n_s_create_global_arr); + Py_VISIT(traverse_module_state->__pyx_n_s_ctypes); + Py_VISIT(traverse_module_state->__pyx_n_s_d); + Py_VISIT(traverse_module_state->__pyx_n_s_db_vs_db); + Py_VISIT(traverse_module_state->__pyx_n_s_decs); + Py_VISIT(traverse_module_state->__pyx_n_s_dic); + Py_VISIT(traverse_module_state->__pyx_n_s_dotstr); + Py_VISIT(traverse_module_state->__pyx_n_s_dtype); + Py_VISIT(traverse_module_state->__pyx_n_s_ec1); + Py_VISIT(traverse_module_state->__pyx_n_s_ec2); + Py_VISIT(traverse_module_state->__pyx_n_s_eci); + Py_VISIT(traverse_module_state->__pyx_n_s_ecj); + Py_VISIT(traverse_module_state->__pyx_n_s_ecs); + Py_VISIT(traverse_module_state->__pyx_n_s_f); + Py_VISIT(traverse_module_state->__pyx_n_s_fhomo); + Py_VISIT(traverse_module_state->__pyx_kp_u_fhomo_fpengap_must_sum_aprox_1); + Py_VISIT(traverse_module_state->__pyx_n_s_fi); + Py_VISIT(traverse_module_state->__pyx_n_s_fill_mat); + Py_VISIT(traverse_module_state->__pyx_n_s_float32); + Py_VISIT(traverse_module_state->__pyx_n_s_float64); + Py_VISIT(traverse_module_state->__pyx_n_s_fname); + Py_VISIT(traverse_module_state->__pyx_n_s_format); + Py_VISIT(traverse_module_state->__pyx_n_s_fpengap); + Py_VISIT(traverse_module_state->__pyx_n_s_frombuffer); + Py_VISIT(traverse_module_state->__pyx_n_s_functools); + Py_VISIT(traverse_module_state->__pyx_n_s_gap); + Py_VISIT(traverse_module_state->__pyx_n_s_gapstr); + Py_VISIT(traverse_module_state->__pyx_n_s_get_obj); + Py_VISIT(traverse_module_state->__pyx_n_s_h); + Py_VISIT(traverse_module_state->__pyx_n_s_homo); + Py_VISIT(traverse_module_state->__pyx_n_s_i); + Py_VISIT(traverse_module_state->__pyx_n_s_ii); + Py_VISIT(traverse_module_state->__pyx_n_s_import); + Py_VISIT(traverse_module_state->__pyx_n_s_ind); + Py_VISIT(traverse_module_state->__pyx_n_s_ind1); + Py_VISIT(traverse_module_state->__pyx_n_s_ind2); + Py_VISIT(traverse_module_state->__pyx_n_s_ind_vs_alldb); + Py_VISIT(traverse_module_state->__pyx_n_s_indices); + Py_VISIT(traverse_module_state->__pyx_n_s_indices2); + Py_VISIT(traverse_module_state->__pyx_n_s_initializing); + Py_VISIT(traverse_module_state->__pyx_n_s_int32); + Py_VISIT(traverse_module_state->__pyx_n_s_is_coroutine); + Py_VISIT(traverse_module_state->__pyx_n_s_items); + Py_VISIT(traverse_module_state->__pyx_n_s_j); + Py_VISIT(traverse_module_state->__pyx_n_s_k); + Py_VISIT(traverse_module_state->__pyx_n_s_l1); + Py_VISIT(traverse_module_state->__pyx_n_s_l2); + Py_VISIT(traverse_module_state->__pyx_n_s_length); + Py_VISIT(traverse_module_state->__pyx_n_s_li); + Py_VISIT(traverse_module_state->__pyx_n_s_line); + Py_VISIT(traverse_module_state->__pyx_n_s_list_vs_alldb); + Py_VISIT(traverse_module_state->__pyx_n_s_localize); + Py_VISIT(traverse_module_state->__pyx_n_s_main); + Py_VISIT(traverse_module_state->__pyx_n_s_map); + Py_VISIT(traverse_module_state->__pyx_n_s_mat); + Py_VISIT(traverse_module_state->__pyx_n_s_mini); + Py_VISIT(traverse_module_state->__pyx_n_s_minpos); + Py_VISIT(traverse_module_state->__pyx_n_s_multiprocessing); + Py_VISIT(traverse_module_state->__pyx_n_s_name); + Py_VISIT(traverse_module_state->__pyx_n_s_np); + Py_VISIT(traverse_module_state->__pyx_n_s_nproc); + Py_VISIT(traverse_module_state->__pyx_n_s_numpy); + Py_VISIT(traverse_module_state->__pyx_kp_u_numpy__core_multiarray_failed_to); + Py_VISIT(traverse_module_state->__pyx_kp_u_numpy__core_umath_failed_to_impo); + Py_VISIT(traverse_module_state->__pyx_n_s_nw_ec_alignx); + Py_VISIT(traverse_module_state->__pyx_kp_s_nw_ec_alignx_pyx); + Py_VISIT(traverse_module_state->__pyx_n_s_nws); + Py_VISIT(traverse_module_state->__pyx_n_s_ok); + Py_VISIT(traverse_module_state->__pyx_n_s_open); + Py_VISIT(traverse_module_state->__pyx_n_s_oscore); + Py_VISIT(traverse_module_state->__pyx_n_s_outf); + Py_VISIT(traverse_module_state->__pyx_n_s_partial); + Py_VISIT(traverse_module_state->__pyx_n_s_pengap); + Py_VISIT(traverse_module_state->__pyx_n_s_pool); + Py_VISIT(traverse_module_state->__pyx_n_s_processes); + Py_VISIT(traverse_module_state->__pyx_n_s_randfactor); + Py_VISIT(traverse_module_state->__pyx_n_s_randnum); + Py_VISIT(traverse_module_state->__pyx_n_s_randum); + Py_VISIT(traverse_module_state->__pyx_n_s_range); + Py_VISIT(traverse_module_state->__pyx_n_s_rdict); + Py_VISIT(traverse_module_state->__pyx_n_s_resd); + Py_VISIT(traverse_module_state->__pyx_n_s_resdic); + Py_VISIT(traverse_module_state->__pyx_n_s_resdict); + Py_VISIT(traverse_module_state->__pyx_n_s_reshape); + Py_VISIT(traverse_module_state->__pyx_n_s_result); + Py_VISIT(traverse_module_state->__pyx_n_s_sco); + Py_VISIT(traverse_module_state->__pyx_n_s_scomat); + Py_VISIT(traverse_module_state->__pyx_n_s_scomat_2); + Py_VISIT(traverse_module_state->__pyx_n_s_score); + Py_VISIT(traverse_module_state->__pyx_n_s_scoremat); + Py_VISIT(traverse_module_state->__pyx_n_s_scoring); + Py_VISIT(traverse_module_state->__pyx_n_s_scoring_gap); + Py_VISIT(traverse_module_state->__pyx_n_s_seq1); + Py_VISIT(traverse_module_state->__pyx_n_s_seq2); + Py_VISIT(traverse_module_state->__pyx_n_s_seq_vs_db); + Py_VISIT(traverse_module_state->__pyx_n_s_seqs); + Py_VISIT(traverse_module_state->__pyx_n_s_seqs1); + Py_VISIT(traverse_module_state->__pyx_n_s_seqs2); + Py_VISIT(traverse_module_state->__pyx_n_s_shared_sco_base); + Py_VISIT(traverse_module_state->__pyx_n_s_spec); + Py_VISIT(traverse_module_state->__pyx_n_s_st1); + Py_VISIT(traverse_module_state->__pyx_n_s_st2); + Py_VISIT(traverse_module_state->__pyx_n_s_store_dict); + Py_VISIT(traverse_module_state->__pyx_n_s_strfmt); + Py_VISIT(traverse_module_state->__pyx_n_s_test); + Py_VISIT(traverse_module_state->__pyx_n_s_testval); + Py_VISIT(traverse_module_state->__pyx_n_s_thres); + Py_VISIT(traverse_module_state->__pyx_n_s_total); + Py_VISIT(traverse_module_state->__pyx_n_s_update); + Py_VISIT(traverse_module_state->__pyx_n_s_v); + Py_VISIT(traverse_module_state->__pyx_n_s_values); + Py_VISIT(traverse_module_state->__pyx_n_u_w); + Py_VISIT(traverse_module_state->__pyx_n_s_wholedb); + Py_VISIT(traverse_module_state->__pyx_n_s_write); + Py_VISIT(traverse_module_state->__pyx_n_s_x); + Py_VISIT(traverse_module_state->__pyx_n_s_y); + Py_VISIT(traverse_module_state->__pyx_n_s_zeros); + Py_VISIT(traverse_module_state->__pyx_float_1_0); + Py_VISIT(traverse_module_state->__pyx_float_0_05); + Py_VISIT(traverse_module_state->__pyx_float_0_95); + Py_VISIT(traverse_module_state->__pyx_int_1); + Py_VISIT(traverse_module_state->__pyx_int_2); + Py_VISIT(traverse_module_state->__pyx_int_1000); + Py_VISIT(traverse_module_state->__pyx_int_neg_1); + Py_VISIT(traverse_module_state->__pyx_k__7); + Py_VISIT(traverse_module_state->__pyx_k__8); + Py_VISIT(traverse_module_state->__pyx_k__9); + Py_VISIT(traverse_module_state->__pyx_k__10); + Py_VISIT(traverse_module_state->__pyx_k__12); + Py_VISIT(traverse_module_state->__pyx_k__13); + Py_VISIT(traverse_module_state->__pyx_k__14); + Py_VISIT(traverse_module_state->__pyx_k__15); + Py_VISIT(traverse_module_state->__pyx_k__16); + Py_VISIT(traverse_module_state->__pyx_k__17); + Py_VISIT(traverse_module_state->__pyx_k__18); + Py_VISIT(traverse_module_state->__pyx_k__19); + Py_VISIT(traverse_module_state->__pyx_k__20); + Py_VISIT(traverse_module_state->__pyx_k__21); + Py_VISIT(traverse_module_state->__pyx_k__22); + Py_VISIT(traverse_module_state->__pyx_k__23); + Py_VISIT(traverse_module_state->__pyx_tuple_); + Py_VISIT(traverse_module_state->__pyx_slice__6); + Py_VISIT(traverse_module_state->__pyx_tuple__2); + Py_VISIT(traverse_module_state->__pyx_slice__24); + Py_VISIT(traverse_module_state->__pyx_tuple__25); + Py_VISIT(traverse_module_state->__pyx_tuple__31); + Py_VISIT(traverse_module_state->__pyx_tuple__33); + Py_VISIT(traverse_module_state->__pyx_tuple__35); + Py_VISIT(traverse_module_state->__pyx_tuple__37); + Py_VISIT(traverse_module_state->__pyx_tuple__39); + Py_VISIT(traverse_module_state->__pyx_tuple__41); + Py_VISIT(traverse_module_state->__pyx_tuple__43); + Py_VISIT(traverse_module_state->__pyx_tuple__45); + Py_VISIT(traverse_module_state->__pyx_tuple__47); + Py_VISIT(traverse_module_state->__pyx_tuple__49); + Py_VISIT(traverse_module_state->__pyx_tuple__51); + Py_VISIT(traverse_module_state->__pyx_tuple__52); + Py_VISIT(traverse_module_state->__pyx_tuple__54); + Py_VISIT(traverse_module_state->__pyx_tuple__56); + Py_VISIT(traverse_module_state->__pyx_tuple__58); + Py_VISIT(traverse_module_state->__pyx_codeobj__32); + Py_VISIT(traverse_module_state->__pyx_codeobj__34); + Py_VISIT(traverse_module_state->__pyx_codeobj__36); + Py_VISIT(traverse_module_state->__pyx_codeobj__38); + Py_VISIT(traverse_module_state->__pyx_codeobj__40); + Py_VISIT(traverse_module_state->__pyx_codeobj__42); + Py_VISIT(traverse_module_state->__pyx_codeobj__44); + Py_VISIT(traverse_module_state->__pyx_codeobj__46); + Py_VISIT(traverse_module_state->__pyx_codeobj__48); + Py_VISIT(traverse_module_state->__pyx_codeobj__50); + Py_VISIT(traverse_module_state->__pyx_codeobj__53); + Py_VISIT(traverse_module_state->__pyx_codeobj__55); + Py_VISIT(traverse_module_state->__pyx_codeobj__57); + return 0; +} +#endif +/* #### Code section: module_state_defines ### */ +#define __pyx_d __pyx_mstate_global->__pyx_d +#define __pyx_b __pyx_mstate_global->__pyx_b +#define __pyx_cython_runtime __pyx_mstate_global->__pyx_cython_runtime +#define __pyx_empty_tuple __pyx_mstate_global->__pyx_empty_tuple +#define __pyx_empty_bytes __pyx_mstate_global->__pyx_empty_bytes +#define __pyx_empty_unicode __pyx_mstate_global->__pyx_empty_unicode +#ifdef __Pyx_CyFunction_USED +#define __pyx_CyFunctionType __pyx_mstate_global->__pyx_CyFunctionType +#endif +#ifdef __Pyx_FusedFunction_USED +#define __pyx_FusedFunctionType __pyx_mstate_global->__pyx_FusedFunctionType +#endif +#ifdef __Pyx_Generator_USED +#define __pyx_GeneratorType __pyx_mstate_global->__pyx_GeneratorType +#endif +#ifdef __Pyx_IterableCoroutine_USED +#define __pyx_IterableCoroutineType __pyx_mstate_global->__pyx_IterableCoroutineType +#endif +#ifdef __Pyx_Coroutine_USED +#define __pyx_CoroutineAwaitType __pyx_mstate_global->__pyx_CoroutineAwaitType +#endif +#ifdef __Pyx_Coroutine_USED +#define __pyx_CoroutineType __pyx_mstate_global->__pyx_CoroutineType +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#define __pyx_ptype_7cpython_4type_type __pyx_mstate_global->__pyx_ptype_7cpython_4type_type +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#define __pyx_ptype_7cpython_4bool_bool __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#define __pyx_ptype_7cpython_7complex_complex __pyx_mstate_global->__pyx_ptype_7cpython_7complex_complex +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#define __pyx_ptype_5numpy_dtype __pyx_mstate_global->__pyx_ptype_5numpy_dtype +#define __pyx_ptype_5numpy_flatiter __pyx_mstate_global->__pyx_ptype_5numpy_flatiter +#define __pyx_ptype_5numpy_broadcast __pyx_mstate_global->__pyx_ptype_5numpy_broadcast +#define __pyx_ptype_5numpy_ndarray __pyx_mstate_global->__pyx_ptype_5numpy_ndarray +#define __pyx_ptype_5numpy_generic __pyx_mstate_global->__pyx_ptype_5numpy_generic +#define __pyx_ptype_5numpy_number __pyx_mstate_global->__pyx_ptype_5numpy_number +#define __pyx_ptype_5numpy_integer __pyx_mstate_global->__pyx_ptype_5numpy_integer +#define __pyx_ptype_5numpy_signedinteger __pyx_mstate_global->__pyx_ptype_5numpy_signedinteger +#define __pyx_ptype_5numpy_unsignedinteger __pyx_mstate_global->__pyx_ptype_5numpy_unsignedinteger +#define __pyx_ptype_5numpy_inexact __pyx_mstate_global->__pyx_ptype_5numpy_inexact +#define __pyx_ptype_5numpy_floating __pyx_mstate_global->__pyx_ptype_5numpy_floating +#define __pyx_ptype_5numpy_complexfloating __pyx_mstate_global->__pyx_ptype_5numpy_complexfloating +#define __pyx_ptype_5numpy_flexible __pyx_mstate_global->__pyx_ptype_5numpy_flexible +#define __pyx_ptype_5numpy_character __pyx_mstate_global->__pyx_ptype_5numpy_character +#define __pyx_ptype_5numpy_ufunc __pyx_mstate_global->__pyx_ptype_5numpy_ufunc +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#define __pyx_n_s_Array __pyx_mstate_global->__pyx_n_s_Array +#define __pyx_n_s_AssertionError __pyx_mstate_global->__pyx_n_s_AssertionError +#define __pyx_n_s_DTYPE __pyx_mstate_global->__pyx_n_s_DTYPE +#define __pyx_n_s_DTYPEF __pyx_mstate_global->__pyx_n_s_DTYPEF +#define __pyx_n_s_FastNW __pyx_mstate_global->__pyx_n_s_FastNW +#define __pyx_n_s_ImportError __pyx_mstate_global->__pyx_n_s_ImportError +#define __pyx_n_s_NW __pyx_mstate_global->__pyx_n_s_NW +#define __pyx_n_s_Pool __pyx_mstate_global->__pyx_n_s_Pool +#define __pyx_kp_u_The_aligned_sequences_must_be_of __pyx_mstate_global->__pyx_kp_u_The_aligned_sequences_must_be_of +#define __pyx_kp_u__11 __pyx_mstate_global->__pyx_kp_u__11 +#define __pyx_kp_u__26 __pyx_mstate_global->__pyx_kp_u__26 +#define __pyx_kp_u__27 __pyx_mstate_global->__pyx_kp_u__27 +#define __pyx_kp_u__28 __pyx_mstate_global->__pyx_kp_u__28 +#define __pyx_n_s__29 __pyx_mstate_global->__pyx_n_s__29 +#define __pyx_kp_u__3 __pyx_mstate_global->__pyx_kp_u__3 +#define __pyx_kp_u__30 __pyx_mstate_global->__pyx_kp_u__30 +#define __pyx_kp_u__4 __pyx_mstate_global->__pyx_kp_u__4 +#define __pyx_kp_u__5 __pyx_mstate_global->__pyx_kp_u__5 +#define __pyx_n_s__59 __pyx_mstate_global->__pyx_n_s__59 +#define __pyx_n_s_align_func __pyx_mstate_global->__pyx_n_s_align_func +#define __pyx_n_s_alldb_comp __pyx_mstate_global->__pyx_n_s_alldb_comp +#define __pyx_n_s_alldb_shared __pyx_mstate_global->__pyx_n_s_alldb_shared +#define __pyx_n_s_arr __pyx_mstate_global->__pyx_n_s_arr +#define __pyx_n_s_arrow __pyx_mstate_global->__pyx_n_s_arrow +#define __pyx_n_s_aseq1 __pyx_mstate_global->__pyx_n_s_aseq1 +#define __pyx_n_s_aseq2 __pyx_mstate_global->__pyx_n_s_aseq2 +#define __pyx_n_s_asyncio_coroutines __pyx_mstate_global->__pyx_n_s_asyncio_coroutines +#define __pyx_n_s_backtrace __pyx_mstate_global->__pyx_n_s_backtrace +#define __pyx_n_s_bblock __pyx_mstate_global->__pyx_n_s_bblock +#define __pyx_n_s_binit __pyx_mstate_global->__pyx_n_s_binit +#define __pyx_n_s_buffering __pyx_mstate_global->__pyx_n_s_buffering +#define __pyx_n_s_c_float __pyx_mstate_global->__pyx_n_s_c_float +#define __pyx_n_s_chunksize __pyx_mstate_global->__pyx_n_s_chunksize +#define __pyx_n_s_class_getitem __pyx_mstate_global->__pyx_n_s_class_getitem +#define __pyx_n_s_cline_in_traceback __pyx_mstate_global->__pyx_n_s_cline_in_traceback +#define __pyx_n_s_close __pyx_mstate_global->__pyx_n_s_close +#define __pyx_n_s_create_global_arr __pyx_mstate_global->__pyx_n_s_create_global_arr +#define __pyx_n_s_ctypes __pyx_mstate_global->__pyx_n_s_ctypes +#define __pyx_n_s_d __pyx_mstate_global->__pyx_n_s_d +#define __pyx_n_s_db_vs_db __pyx_mstate_global->__pyx_n_s_db_vs_db +#define __pyx_n_s_decs __pyx_mstate_global->__pyx_n_s_decs +#define __pyx_n_s_dic __pyx_mstate_global->__pyx_n_s_dic +#define __pyx_n_s_dotstr __pyx_mstate_global->__pyx_n_s_dotstr +#define __pyx_n_s_dtype __pyx_mstate_global->__pyx_n_s_dtype +#define __pyx_n_s_ec1 __pyx_mstate_global->__pyx_n_s_ec1 +#define __pyx_n_s_ec2 __pyx_mstate_global->__pyx_n_s_ec2 +#define __pyx_n_s_eci __pyx_mstate_global->__pyx_n_s_eci +#define __pyx_n_s_ecj __pyx_mstate_global->__pyx_n_s_ecj +#define __pyx_n_s_ecs __pyx_mstate_global->__pyx_n_s_ecs +#define __pyx_n_s_f __pyx_mstate_global->__pyx_n_s_f +#define __pyx_n_s_fhomo __pyx_mstate_global->__pyx_n_s_fhomo +#define __pyx_kp_u_fhomo_fpengap_must_sum_aprox_1 __pyx_mstate_global->__pyx_kp_u_fhomo_fpengap_must_sum_aprox_1 +#define __pyx_n_s_fi __pyx_mstate_global->__pyx_n_s_fi +#define __pyx_n_s_fill_mat __pyx_mstate_global->__pyx_n_s_fill_mat +#define __pyx_n_s_float32 __pyx_mstate_global->__pyx_n_s_float32 +#define __pyx_n_s_float64 __pyx_mstate_global->__pyx_n_s_float64 +#define __pyx_n_s_fname __pyx_mstate_global->__pyx_n_s_fname +#define __pyx_n_s_format __pyx_mstate_global->__pyx_n_s_format +#define __pyx_n_s_fpengap __pyx_mstate_global->__pyx_n_s_fpengap +#define __pyx_n_s_frombuffer __pyx_mstate_global->__pyx_n_s_frombuffer +#define __pyx_n_s_functools __pyx_mstate_global->__pyx_n_s_functools +#define __pyx_n_s_gap __pyx_mstate_global->__pyx_n_s_gap +#define __pyx_n_s_gapstr __pyx_mstate_global->__pyx_n_s_gapstr +#define __pyx_n_s_get_obj __pyx_mstate_global->__pyx_n_s_get_obj +#define __pyx_n_s_h __pyx_mstate_global->__pyx_n_s_h +#define __pyx_n_s_homo __pyx_mstate_global->__pyx_n_s_homo +#define __pyx_n_s_i __pyx_mstate_global->__pyx_n_s_i +#define __pyx_n_s_ii __pyx_mstate_global->__pyx_n_s_ii +#define __pyx_n_s_import __pyx_mstate_global->__pyx_n_s_import +#define __pyx_n_s_ind __pyx_mstate_global->__pyx_n_s_ind +#define __pyx_n_s_ind1 __pyx_mstate_global->__pyx_n_s_ind1 +#define __pyx_n_s_ind2 __pyx_mstate_global->__pyx_n_s_ind2 +#define __pyx_n_s_ind_vs_alldb __pyx_mstate_global->__pyx_n_s_ind_vs_alldb +#define __pyx_n_s_indices __pyx_mstate_global->__pyx_n_s_indices +#define __pyx_n_s_indices2 __pyx_mstate_global->__pyx_n_s_indices2 +#define __pyx_n_s_initializing __pyx_mstate_global->__pyx_n_s_initializing +#define __pyx_n_s_int32 __pyx_mstate_global->__pyx_n_s_int32 +#define __pyx_n_s_is_coroutine __pyx_mstate_global->__pyx_n_s_is_coroutine +#define __pyx_n_s_items __pyx_mstate_global->__pyx_n_s_items +#define __pyx_n_s_j __pyx_mstate_global->__pyx_n_s_j +#define __pyx_n_s_k __pyx_mstate_global->__pyx_n_s_k +#define __pyx_n_s_l1 __pyx_mstate_global->__pyx_n_s_l1 +#define __pyx_n_s_l2 __pyx_mstate_global->__pyx_n_s_l2 +#define __pyx_n_s_length __pyx_mstate_global->__pyx_n_s_length +#define __pyx_n_s_li __pyx_mstate_global->__pyx_n_s_li +#define __pyx_n_s_line __pyx_mstate_global->__pyx_n_s_line +#define __pyx_n_s_list_vs_alldb __pyx_mstate_global->__pyx_n_s_list_vs_alldb +#define __pyx_n_s_localize __pyx_mstate_global->__pyx_n_s_localize +#define __pyx_n_s_main __pyx_mstate_global->__pyx_n_s_main +#define __pyx_n_s_map __pyx_mstate_global->__pyx_n_s_map +#define __pyx_n_s_mat __pyx_mstate_global->__pyx_n_s_mat +#define __pyx_n_s_mini __pyx_mstate_global->__pyx_n_s_mini +#define __pyx_n_s_minpos __pyx_mstate_global->__pyx_n_s_minpos +#define __pyx_n_s_multiprocessing __pyx_mstate_global->__pyx_n_s_multiprocessing +#define __pyx_n_s_name __pyx_mstate_global->__pyx_n_s_name +#define __pyx_n_s_np __pyx_mstate_global->__pyx_n_s_np +#define __pyx_n_s_nproc __pyx_mstate_global->__pyx_n_s_nproc +#define __pyx_n_s_numpy __pyx_mstate_global->__pyx_n_s_numpy +#define __pyx_kp_u_numpy__core_multiarray_failed_to __pyx_mstate_global->__pyx_kp_u_numpy__core_multiarray_failed_to +#define __pyx_kp_u_numpy__core_umath_failed_to_impo __pyx_mstate_global->__pyx_kp_u_numpy__core_umath_failed_to_impo +#define __pyx_n_s_nw_ec_alignx __pyx_mstate_global->__pyx_n_s_nw_ec_alignx +#define __pyx_kp_s_nw_ec_alignx_pyx __pyx_mstate_global->__pyx_kp_s_nw_ec_alignx_pyx +#define __pyx_n_s_nws __pyx_mstate_global->__pyx_n_s_nws +#define __pyx_n_s_ok __pyx_mstate_global->__pyx_n_s_ok +#define __pyx_n_s_open __pyx_mstate_global->__pyx_n_s_open +#define __pyx_n_s_oscore __pyx_mstate_global->__pyx_n_s_oscore +#define __pyx_n_s_outf __pyx_mstate_global->__pyx_n_s_outf +#define __pyx_n_s_partial __pyx_mstate_global->__pyx_n_s_partial +#define __pyx_n_s_pengap __pyx_mstate_global->__pyx_n_s_pengap +#define __pyx_n_s_pool __pyx_mstate_global->__pyx_n_s_pool +#define __pyx_n_s_processes __pyx_mstate_global->__pyx_n_s_processes +#define __pyx_n_s_randfactor __pyx_mstate_global->__pyx_n_s_randfactor +#define __pyx_n_s_randnum __pyx_mstate_global->__pyx_n_s_randnum +#define __pyx_n_s_randum __pyx_mstate_global->__pyx_n_s_randum +#define __pyx_n_s_range __pyx_mstate_global->__pyx_n_s_range +#define __pyx_n_s_rdict __pyx_mstate_global->__pyx_n_s_rdict +#define __pyx_n_s_resd __pyx_mstate_global->__pyx_n_s_resd +#define __pyx_n_s_resdic __pyx_mstate_global->__pyx_n_s_resdic +#define __pyx_n_s_resdict __pyx_mstate_global->__pyx_n_s_resdict +#define __pyx_n_s_reshape __pyx_mstate_global->__pyx_n_s_reshape +#define __pyx_n_s_result __pyx_mstate_global->__pyx_n_s_result +#define __pyx_n_s_sco __pyx_mstate_global->__pyx_n_s_sco +#define __pyx_n_s_scomat __pyx_mstate_global->__pyx_n_s_scomat +#define __pyx_n_s_scomat_2 __pyx_mstate_global->__pyx_n_s_scomat_2 +#define __pyx_n_s_score __pyx_mstate_global->__pyx_n_s_score +#define __pyx_n_s_scoremat __pyx_mstate_global->__pyx_n_s_scoremat +#define __pyx_n_s_scoring __pyx_mstate_global->__pyx_n_s_scoring +#define __pyx_n_s_scoring_gap __pyx_mstate_global->__pyx_n_s_scoring_gap +#define __pyx_n_s_seq1 __pyx_mstate_global->__pyx_n_s_seq1 +#define __pyx_n_s_seq2 __pyx_mstate_global->__pyx_n_s_seq2 +#define __pyx_n_s_seq_vs_db __pyx_mstate_global->__pyx_n_s_seq_vs_db +#define __pyx_n_s_seqs __pyx_mstate_global->__pyx_n_s_seqs +#define __pyx_n_s_seqs1 __pyx_mstate_global->__pyx_n_s_seqs1 +#define __pyx_n_s_seqs2 __pyx_mstate_global->__pyx_n_s_seqs2 +#define __pyx_n_s_shared_sco_base __pyx_mstate_global->__pyx_n_s_shared_sco_base +#define __pyx_n_s_spec __pyx_mstate_global->__pyx_n_s_spec +#define __pyx_n_s_st1 __pyx_mstate_global->__pyx_n_s_st1 +#define __pyx_n_s_st2 __pyx_mstate_global->__pyx_n_s_st2 +#define __pyx_n_s_store_dict __pyx_mstate_global->__pyx_n_s_store_dict +#define __pyx_n_s_strfmt __pyx_mstate_global->__pyx_n_s_strfmt +#define __pyx_n_s_test __pyx_mstate_global->__pyx_n_s_test +#define __pyx_n_s_testval __pyx_mstate_global->__pyx_n_s_testval +#define __pyx_n_s_thres __pyx_mstate_global->__pyx_n_s_thres +#define __pyx_n_s_total __pyx_mstate_global->__pyx_n_s_total +#define __pyx_n_s_update __pyx_mstate_global->__pyx_n_s_update +#define __pyx_n_s_v __pyx_mstate_global->__pyx_n_s_v +#define __pyx_n_s_values __pyx_mstate_global->__pyx_n_s_values +#define __pyx_n_u_w __pyx_mstate_global->__pyx_n_u_w +#define __pyx_n_s_wholedb __pyx_mstate_global->__pyx_n_s_wholedb +#define __pyx_n_s_write __pyx_mstate_global->__pyx_n_s_write +#define __pyx_n_s_x __pyx_mstate_global->__pyx_n_s_x +#define __pyx_n_s_y __pyx_mstate_global->__pyx_n_s_y +#define __pyx_n_s_zeros __pyx_mstate_global->__pyx_n_s_zeros +#define __pyx_float_1_0 __pyx_mstate_global->__pyx_float_1_0 +#define __pyx_float_0_05 __pyx_mstate_global->__pyx_float_0_05 +#define __pyx_float_0_95 __pyx_mstate_global->__pyx_float_0_95 +#define __pyx_int_1 __pyx_mstate_global->__pyx_int_1 +#define __pyx_int_2 __pyx_mstate_global->__pyx_int_2 +#define __pyx_int_1000 __pyx_mstate_global->__pyx_int_1000 +#define __pyx_int_neg_1 __pyx_mstate_global->__pyx_int_neg_1 +#define __pyx_k__7 __pyx_mstate_global->__pyx_k__7 +#define __pyx_k__8 __pyx_mstate_global->__pyx_k__8 +#define __pyx_k__9 __pyx_mstate_global->__pyx_k__9 +#define __pyx_k__10 __pyx_mstate_global->__pyx_k__10 +#define __pyx_k__12 __pyx_mstate_global->__pyx_k__12 +#define __pyx_k__13 __pyx_mstate_global->__pyx_k__13 +#define __pyx_k__14 __pyx_mstate_global->__pyx_k__14 +#define __pyx_k__15 __pyx_mstate_global->__pyx_k__15 +#define __pyx_k__16 __pyx_mstate_global->__pyx_k__16 +#define __pyx_k__17 __pyx_mstate_global->__pyx_k__17 +#define __pyx_k__18 __pyx_mstate_global->__pyx_k__18 +#define __pyx_k__19 __pyx_mstate_global->__pyx_k__19 +#define __pyx_k__20 __pyx_mstate_global->__pyx_k__20 +#define __pyx_k__21 __pyx_mstate_global->__pyx_k__21 +#define __pyx_k__22 __pyx_mstate_global->__pyx_k__22 +#define __pyx_k__23 __pyx_mstate_global->__pyx_k__23 +#define __pyx_tuple_ __pyx_mstate_global->__pyx_tuple_ +#define __pyx_slice__6 __pyx_mstate_global->__pyx_slice__6 +#define __pyx_tuple__2 __pyx_mstate_global->__pyx_tuple__2 +#define __pyx_slice__24 __pyx_mstate_global->__pyx_slice__24 +#define __pyx_tuple__25 __pyx_mstate_global->__pyx_tuple__25 +#define __pyx_tuple__31 __pyx_mstate_global->__pyx_tuple__31 +#define __pyx_tuple__33 __pyx_mstate_global->__pyx_tuple__33 +#define __pyx_tuple__35 __pyx_mstate_global->__pyx_tuple__35 +#define __pyx_tuple__37 __pyx_mstate_global->__pyx_tuple__37 +#define __pyx_tuple__39 __pyx_mstate_global->__pyx_tuple__39 +#define __pyx_tuple__41 __pyx_mstate_global->__pyx_tuple__41 +#define __pyx_tuple__43 __pyx_mstate_global->__pyx_tuple__43 +#define __pyx_tuple__45 __pyx_mstate_global->__pyx_tuple__45 +#define __pyx_tuple__47 __pyx_mstate_global->__pyx_tuple__47 +#define __pyx_tuple__49 __pyx_mstate_global->__pyx_tuple__49 +#define __pyx_tuple__51 __pyx_mstate_global->__pyx_tuple__51 +#define __pyx_tuple__52 __pyx_mstate_global->__pyx_tuple__52 +#define __pyx_tuple__54 __pyx_mstate_global->__pyx_tuple__54 +#define __pyx_tuple__56 __pyx_mstate_global->__pyx_tuple__56 +#define __pyx_tuple__58 __pyx_mstate_global->__pyx_tuple__58 +#define __pyx_codeobj__32 __pyx_mstate_global->__pyx_codeobj__32 +#define __pyx_codeobj__34 __pyx_mstate_global->__pyx_codeobj__34 +#define __pyx_codeobj__36 __pyx_mstate_global->__pyx_codeobj__36 +#define __pyx_codeobj__38 __pyx_mstate_global->__pyx_codeobj__38 +#define __pyx_codeobj__40 __pyx_mstate_global->__pyx_codeobj__40 +#define __pyx_codeobj__42 __pyx_mstate_global->__pyx_codeobj__42 +#define __pyx_codeobj__44 __pyx_mstate_global->__pyx_codeobj__44 +#define __pyx_codeobj__46 __pyx_mstate_global->__pyx_codeobj__46 +#define __pyx_codeobj__48 __pyx_mstate_global->__pyx_codeobj__48 +#define __pyx_codeobj__50 __pyx_mstate_global->__pyx_codeobj__50 +#define __pyx_codeobj__53 __pyx_mstate_global->__pyx_codeobj__53 +#define __pyx_codeobj__55 __pyx_mstate_global->__pyx_codeobj__55 +#define __pyx_codeobj__57 __pyx_mstate_global->__pyx_codeobj__57 +/* #### Code section: module_code ### */ + +/* "cpython/complex.pxd":19 + * + * @property + * cdef inline double real(self) noexcept: # <<<<<<<<<<<<<< + * return self.cval.real + * + */ + +static CYTHON_INLINE double __pyx_f_7cpython_7complex_7complex_4real_real(PyComplexObject *__pyx_v_self) { + double __pyx_r; + + /* "cpython/complex.pxd":20 + * @property + * cdef inline double real(self) noexcept: + * return self.cval.real # <<<<<<<<<<<<<< + * + * @property + */ + __pyx_r = __pyx_v_self->cval.real; + goto __pyx_L0; + + /* "cpython/complex.pxd":19 + * + * @property + * cdef inline double real(self) noexcept: # <<<<<<<<<<<<<< + * return self.cval.real + * + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "cpython/complex.pxd":23 + * + * @property + * cdef inline double imag(self) noexcept: # <<<<<<<<<<<<<< + * return self.cval.imag + * + */ + +static CYTHON_INLINE double __pyx_f_7cpython_7complex_7complex_4imag_imag(PyComplexObject *__pyx_v_self) { + double __pyx_r; + + /* "cpython/complex.pxd":24 + * @property + * cdef inline double imag(self) noexcept: + * return self.cval.imag # <<<<<<<<<<<<<< + * + * # PyTypeObject PyComplex_Type + */ + __pyx_r = __pyx_v_self->cval.imag; + goto __pyx_L0; + + /* "cpython/complex.pxd":23 + * + * @property + * cdef inline double imag(self) noexcept: # <<<<<<<<<<<<<< + * return self.cval.imag + * + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "cpython/contextvars.pxd":112 + * + * + * cdef inline object get_value(var, default_value=None): # <<<<<<<<<<<<<< + * """Return a new reference to the value of the context variable, + * or the default value of the context variable, + */ + +static CYTHON_INLINE PyObject *__pyx_f_7cpython_11contextvars_get_value(PyObject *__pyx_v_var, struct __pyx_opt_args_7cpython_11contextvars_get_value *__pyx_optional_args) { + PyObject *__pyx_v_default_value = ((PyObject *)Py_None); + PyObject *__pyx_v_value; + PyObject *__pyx_v_pyvalue = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("get_value", 1); + if (__pyx_optional_args) { + if (__pyx_optional_args->__pyx_n > 0) { + __pyx_v_default_value = __pyx_optional_args->default_value; + } + } + + /* "cpython/contextvars.pxd":117 + * or None if no such value or default was found. + * """ + * cdef PyObject *value = NULL # <<<<<<<<<<<<<< + * PyContextVar_Get(var, NULL, &value) + * if value is NULL: + */ + __pyx_v_value = NULL; + + /* "cpython/contextvars.pxd":118 + * """ + * cdef PyObject *value = NULL + * PyContextVar_Get(var, NULL, &value) # <<<<<<<<<<<<<< + * if value is NULL: + * # context variable does not have a default + */ + __pyx_t_1 = PyContextVar_Get(__pyx_v_var, NULL, (&__pyx_v_value)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(1, 118, __pyx_L1_error) + + /* "cpython/contextvars.pxd":119 + * cdef PyObject *value = NULL + * PyContextVar_Get(var, NULL, &value) + * if value is NULL: # <<<<<<<<<<<<<< + * # context variable does not have a default + * pyvalue = default_value + */ + __pyx_t_2 = (__pyx_v_value == NULL); + if (__pyx_t_2) { + + /* "cpython/contextvars.pxd":121 + * if value is NULL: + * # context variable does not have a default + * pyvalue = default_value # <<<<<<<<<<<<<< + * else: + * # value or default value of context variable + */ + __Pyx_INCREF(__pyx_v_default_value); + __pyx_v_pyvalue = __pyx_v_default_value; + + /* "cpython/contextvars.pxd":119 + * cdef PyObject *value = NULL + * PyContextVar_Get(var, NULL, &value) + * if value is NULL: # <<<<<<<<<<<<<< + * # context variable does not have a default + * pyvalue = default_value + */ + goto __pyx_L3; + } + + /* "cpython/contextvars.pxd":124 + * else: + * # value or default value of context variable + * pyvalue = value # <<<<<<<<<<<<<< + * Py_XDECREF(value) # PyContextVar_Get() returned an owned reference as 'PyObject*' + * return pyvalue + */ + /*else*/ { + __pyx_t_3 = ((PyObject *)__pyx_v_value); + __Pyx_INCREF(__pyx_t_3); + __pyx_v_pyvalue = __pyx_t_3; + __pyx_t_3 = 0; + + /* "cpython/contextvars.pxd":125 + * # value or default value of context variable + * pyvalue = value + * Py_XDECREF(value) # PyContextVar_Get() returned an owned reference as 'PyObject*' # <<<<<<<<<<<<<< + * return pyvalue + * + */ + Py_XDECREF(__pyx_v_value); + } + __pyx_L3:; + + /* "cpython/contextvars.pxd":126 + * pyvalue = value + * Py_XDECREF(value) # PyContextVar_Get() returned an owned reference as 'PyObject*' + * return pyvalue # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_pyvalue); + __pyx_r = __pyx_v_pyvalue; + goto __pyx_L0; + + /* "cpython/contextvars.pxd":112 + * + * + * cdef inline object get_value(var, default_value=None): # <<<<<<<<<<<<<< + * """Return a new reference to the value of the context variable, + * or the default value of the context variable, + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("cpython.contextvars.get_value", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_pyvalue); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "cpython/contextvars.pxd":129 + * + * + * cdef inline object get_value_no_default(var, default_value=None): # <<<<<<<<<<<<<< + * """Return a new reference to the value of the context variable, + * or the provided default value if no such value was found. + */ + +static CYTHON_INLINE PyObject *__pyx_f_7cpython_11contextvars_get_value_no_default(PyObject *__pyx_v_var, struct __pyx_opt_args_7cpython_11contextvars_get_value_no_default *__pyx_optional_args) { + PyObject *__pyx_v_default_value = ((PyObject *)Py_None); + PyObject *__pyx_v_value; + PyObject *__pyx_v_pyvalue = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("get_value_no_default", 1); + if (__pyx_optional_args) { + if (__pyx_optional_args->__pyx_n > 0) { + __pyx_v_default_value = __pyx_optional_args->default_value; + } + } + + /* "cpython/contextvars.pxd":135 + * Ignores the default value of the context variable, if any. + * """ + * cdef PyObject *value = NULL # <<<<<<<<<<<<<< + * PyContextVar_Get(var, default_value, &value) + * # value of context variable or 'default_value' + */ + __pyx_v_value = NULL; + + /* "cpython/contextvars.pxd":136 + * """ + * cdef PyObject *value = NULL + * PyContextVar_Get(var, default_value, &value) # <<<<<<<<<<<<<< + * # value of context variable or 'default_value' + * pyvalue = value + */ + __pyx_t_1 = PyContextVar_Get(__pyx_v_var, ((PyObject *)__pyx_v_default_value), (&__pyx_v_value)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(1, 136, __pyx_L1_error) + + /* "cpython/contextvars.pxd":138 + * PyContextVar_Get(var, default_value, &value) + * # value of context variable or 'default_value' + * pyvalue = value # <<<<<<<<<<<<<< + * Py_XDECREF(value) # PyContextVar_Get() returned an owned reference as 'PyObject*' + * return pyvalue + */ + __pyx_t_2 = ((PyObject *)__pyx_v_value); + __Pyx_INCREF(__pyx_t_2); + __pyx_v_pyvalue = __pyx_t_2; + __pyx_t_2 = 0; + + /* "cpython/contextvars.pxd":139 + * # value of context variable or 'default_value' + * pyvalue = value + * Py_XDECREF(value) # PyContextVar_Get() returned an owned reference as 'PyObject*' # <<<<<<<<<<<<<< + * return pyvalue + */ + Py_XDECREF(__pyx_v_value); + + /* "cpython/contextvars.pxd":140 + * pyvalue = value + * Py_XDECREF(value) # PyContextVar_Get() returned an owned reference as 'PyObject*' + * return pyvalue # <<<<<<<<<<<<<< + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_pyvalue); + __pyx_r = __pyx_v_pyvalue; + goto __pyx_L0; + + /* "cpython/contextvars.pxd":129 + * + * + * cdef inline object get_value_no_default(var, default_value=None): # <<<<<<<<<<<<<< + * """Return a new reference to the value of the context variable, + * or the provided default value if no such value was found. + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("cpython.contextvars.get_value_no_default", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_pyvalue); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":287 + * + * @property + * cdef inline npy_intp itemsize(self) noexcept nogil: # <<<<<<<<<<<<<< + * return PyDataType_ELSIZE(self) + * + */ + +static CYTHON_INLINE npy_intp __pyx_f_5numpy_5dtype_8itemsize_itemsize(PyArray_Descr *__pyx_v_self) { + npy_intp __pyx_r; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":288 + * @property + * cdef inline npy_intp itemsize(self) noexcept nogil: + * return PyDataType_ELSIZE(self) # <<<<<<<<<<<<<< + * + * @property + */ + __pyx_r = PyDataType_ELSIZE(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":287 + * + * @property + * cdef inline npy_intp itemsize(self) noexcept nogil: # <<<<<<<<<<<<<< + * return PyDataType_ELSIZE(self) + * + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":291 + * + * @property + * cdef inline npy_intp alignment(self) noexcept nogil: # <<<<<<<<<<<<<< + * return PyDataType_ALIGNMENT(self) + * + */ + +static CYTHON_INLINE npy_intp __pyx_f_5numpy_5dtype_9alignment_alignment(PyArray_Descr *__pyx_v_self) { + npy_intp __pyx_r; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":292 + * @property + * cdef inline npy_intp alignment(self) noexcept nogil: + * return PyDataType_ALIGNMENT(self) # <<<<<<<<<<<<<< + * + * # Use fields/names with care as they may be NULL. You must check + */ + __pyx_r = PyDataType_ALIGNMENT(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":291 + * + * @property + * cdef inline npy_intp alignment(self) noexcept nogil: # <<<<<<<<<<<<<< + * return PyDataType_ALIGNMENT(self) + * + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":297 + * # for this using PyDataType_HASFIELDS. + * @property + * cdef inline object fields(self): # <<<<<<<<<<<<<< + * return PyDataType_FIELDS(self) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_5dtype_6fields_fields(PyArray_Descr *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1; + __Pyx_RefNannySetupContext("fields", 1); + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":298 + * @property + * cdef inline object fields(self): + * return PyDataType_FIELDS(self) # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyDataType_FIELDS(__pyx_v_self); + __Pyx_INCREF(((PyObject *)__pyx_t_1)); + __pyx_r = ((PyObject *)__pyx_t_1); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":297 + * # for this using PyDataType_HASFIELDS. + * @property + * cdef inline object fields(self): # <<<<<<<<<<<<<< + * return PyDataType_FIELDS(self) + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":301 + * + * @property + * cdef inline tuple names(self): # <<<<<<<<<<<<<< + * return PyDataType_NAMES(self) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_5dtype_5names_names(PyArray_Descr *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1; + __Pyx_RefNannySetupContext("names", 1); + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":302 + * @property + * cdef inline tuple names(self): + * return PyDataType_NAMES(self) # <<<<<<<<<<<<<< + * + * # Use PyDataType_HASSUBARRAY to test whether this field is + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyDataType_NAMES(__pyx_v_self); + __Pyx_INCREF(((PyObject*)__pyx_t_1)); + __pyx_r = ((PyObject*)__pyx_t_1); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":301 + * + * @property + * cdef inline tuple names(self): # <<<<<<<<<<<<<< + * return PyDataType_NAMES(self) + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":308 + * # this field via the inline helper method PyDataType_SHAPE. + * @property + * cdef inline PyArray_ArrayDescr* subarray(self) noexcept nogil: # <<<<<<<<<<<<<< + * return PyDataType_SUBARRAY(self) + * + */ + +static CYTHON_INLINE PyArray_ArrayDescr *__pyx_f_5numpy_5dtype_8subarray_subarray(PyArray_Descr *__pyx_v_self) { + PyArray_ArrayDescr *__pyx_r; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":309 + * @property + * cdef inline PyArray_ArrayDescr* subarray(self) noexcept nogil: + * return PyDataType_SUBARRAY(self) # <<<<<<<<<<<<<< + * + * @property + */ + __pyx_r = PyDataType_SUBARRAY(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":308 + * # this field via the inline helper method PyDataType_SHAPE. + * @property + * cdef inline PyArray_ArrayDescr* subarray(self) noexcept nogil: # <<<<<<<<<<<<<< + * return PyDataType_SUBARRAY(self) + * + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":312 + * + * @property + * cdef inline npy_uint64 flags(self) noexcept nogil: # <<<<<<<<<<<<<< + * """The data types flags.""" + * return PyDataType_FLAGS(self) + */ + +static CYTHON_INLINE npy_uint64 __pyx_f_5numpy_5dtype_5flags_flags(PyArray_Descr *__pyx_v_self) { + npy_uint64 __pyx_r; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":314 + * cdef inline npy_uint64 flags(self) noexcept nogil: + * """The data types flags.""" + * return PyDataType_FLAGS(self) # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = PyDataType_FLAGS(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":312 + * + * @property + * cdef inline npy_uint64 flags(self) noexcept nogil: # <<<<<<<<<<<<<< + * """The data types flags.""" + * return PyDataType_FLAGS(self) + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":324 + * + * @property + * cdef inline int numiter(self) noexcept nogil: # <<<<<<<<<<<<<< + * """The number of arrays that need to be broadcast to the same shape.""" + * return PyArray_MultiIter_NUMITER(self) + */ + +static CYTHON_INLINE int __pyx_f_5numpy_9broadcast_7numiter_numiter(PyArrayMultiIterObject *__pyx_v_self) { + int __pyx_r; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":326 + * cdef inline int numiter(self) noexcept nogil: + * """The number of arrays that need to be broadcast to the same shape.""" + * return PyArray_MultiIter_NUMITER(self) # <<<<<<<<<<<<<< + * + * @property + */ + __pyx_r = PyArray_MultiIter_NUMITER(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":324 + * + * @property + * cdef inline int numiter(self) noexcept nogil: # <<<<<<<<<<<<<< + * """The number of arrays that need to be broadcast to the same shape.""" + * return PyArray_MultiIter_NUMITER(self) + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":329 + * + * @property + * cdef inline npy_intp size(self) noexcept nogil: # <<<<<<<<<<<<<< + * """The total broadcasted size.""" + * return PyArray_MultiIter_SIZE(self) + */ + +static CYTHON_INLINE npy_intp __pyx_f_5numpy_9broadcast_4size_size(PyArrayMultiIterObject *__pyx_v_self) { + npy_intp __pyx_r; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":331 + * cdef inline npy_intp size(self) noexcept nogil: + * """The total broadcasted size.""" + * return PyArray_MultiIter_SIZE(self) # <<<<<<<<<<<<<< + * + * @property + */ + __pyx_r = PyArray_MultiIter_SIZE(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":329 + * + * @property + * cdef inline npy_intp size(self) noexcept nogil: # <<<<<<<<<<<<<< + * """The total broadcasted size.""" + * return PyArray_MultiIter_SIZE(self) + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":334 + * + * @property + * cdef inline npy_intp index(self) noexcept nogil: # <<<<<<<<<<<<<< + * """The current (1-d) index into the broadcasted result.""" + * return PyArray_MultiIter_INDEX(self) + */ + +static CYTHON_INLINE npy_intp __pyx_f_5numpy_9broadcast_5index_index(PyArrayMultiIterObject *__pyx_v_self) { + npy_intp __pyx_r; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":336 + * cdef inline npy_intp index(self) noexcept nogil: + * """The current (1-d) index into the broadcasted result.""" + * return PyArray_MultiIter_INDEX(self) # <<<<<<<<<<<<<< + * + * @property + */ + __pyx_r = PyArray_MultiIter_INDEX(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":334 + * + * @property + * cdef inline npy_intp index(self) noexcept nogil: # <<<<<<<<<<<<<< + * """The current (1-d) index into the broadcasted result.""" + * return PyArray_MultiIter_INDEX(self) + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":339 + * + * @property + * cdef inline int nd(self) noexcept nogil: # <<<<<<<<<<<<<< + * """The number of dimensions in the broadcasted result.""" + * return PyArray_MultiIter_NDIM(self) + */ + +static CYTHON_INLINE int __pyx_f_5numpy_9broadcast_2nd_nd(PyArrayMultiIterObject *__pyx_v_self) { + int __pyx_r; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":341 + * cdef inline int nd(self) noexcept nogil: + * """The number of dimensions in the broadcasted result.""" + * return PyArray_MultiIter_NDIM(self) # <<<<<<<<<<<<<< + * + * @property + */ + __pyx_r = PyArray_MultiIter_NDIM(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":339 + * + * @property + * cdef inline int nd(self) noexcept nogil: # <<<<<<<<<<<<<< + * """The number of dimensions in the broadcasted result.""" + * return PyArray_MultiIter_NDIM(self) + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":344 + * + * @property + * cdef inline npy_intp* dimensions(self) noexcept nogil: # <<<<<<<<<<<<<< + * """The shape of the broadcasted result.""" + * return PyArray_MultiIter_DIMS(self) + */ + +static CYTHON_INLINE npy_intp *__pyx_f_5numpy_9broadcast_10dimensions_dimensions(PyArrayMultiIterObject *__pyx_v_self) { + npy_intp *__pyx_r; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":346 + * cdef inline npy_intp* dimensions(self) noexcept nogil: + * """The shape of the broadcasted result.""" + * return PyArray_MultiIter_DIMS(self) # <<<<<<<<<<<<<< + * + * @property + */ + __pyx_r = PyArray_MultiIter_DIMS(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":344 + * + * @property + * cdef inline npy_intp* dimensions(self) noexcept nogil: # <<<<<<<<<<<<<< + * """The shape of the broadcasted result.""" + * return PyArray_MultiIter_DIMS(self) + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":349 + * + * @property + * cdef inline void** iters(self) noexcept nogil: # <<<<<<<<<<<<<< + * """An array of iterator objects that holds the iterators for the arrays to be broadcast together. + * On return, the iterators are adjusted for broadcasting.""" + */ + +static CYTHON_INLINE void **__pyx_f_5numpy_9broadcast_5iters_iters(PyArrayMultiIterObject *__pyx_v_self) { + void **__pyx_r; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":352 + * """An array of iterator objects that holds the iterators for the arrays to be broadcast together. + * On return, the iterators are adjusted for broadcasting.""" + * return PyArray_MultiIter_ITERS(self) # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = PyArray_MultiIter_ITERS(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":349 + * + * @property + * cdef inline void** iters(self) noexcept nogil: # <<<<<<<<<<<<<< + * """An array of iterator objects that holds the iterators for the arrays to be broadcast together. + * On return, the iterators are adjusted for broadcasting.""" + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":367 + * + * @property + * cdef inline PyObject* base(self) noexcept nogil: # <<<<<<<<<<<<<< + * """Returns a borrowed reference to the object owning the data/memory. + * """ + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_7ndarray_4base_base(PyArrayObject *__pyx_v_self) { + PyObject *__pyx_r; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":370 + * """Returns a borrowed reference to the object owning the data/memory. + * """ + * return PyArray_BASE(self) # <<<<<<<<<<<<<< + * + * @property + */ + __pyx_r = PyArray_BASE(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":367 + * + * @property + * cdef inline PyObject* base(self) noexcept nogil: # <<<<<<<<<<<<<< + * """Returns a borrowed reference to the object owning the data/memory. + * """ + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":373 + * + * @property + * cdef inline dtype descr(self): # <<<<<<<<<<<<<< + * """Returns an owned reference to the dtype of the array. + * """ + */ + +static CYTHON_INLINE PyArray_Descr *__pyx_f_5numpy_7ndarray_5descr_descr(PyArrayObject *__pyx_v_self) { + PyArray_Descr *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyArray_Descr *__pyx_t_1; + __Pyx_RefNannySetupContext("descr", 1); + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":376 + * """Returns an owned reference to the dtype of the array. + * """ + * return PyArray_DESCR(self) # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF((PyObject *)__pyx_r); + __pyx_t_1 = PyArray_DESCR(__pyx_v_self); + __Pyx_INCREF((PyObject *)((PyArray_Descr *)__pyx_t_1)); + __pyx_r = ((PyArray_Descr *)__pyx_t_1); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":373 + * + * @property + * cdef inline dtype descr(self): # <<<<<<<<<<<<<< + * """Returns an owned reference to the dtype of the array. + * """ + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF((PyObject *)__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":379 + * + * @property + * cdef inline int ndim(self) noexcept nogil: # <<<<<<<<<<<<<< + * """Returns the number of dimensions in the array. + * """ + */ + +static CYTHON_INLINE int __pyx_f_5numpy_7ndarray_4ndim_ndim(PyArrayObject *__pyx_v_self) { + int __pyx_r; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":382 + * """Returns the number of dimensions in the array. + * """ + * return PyArray_NDIM(self) # <<<<<<<<<<<<<< + * + * @property + */ + __pyx_r = PyArray_NDIM(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":379 + * + * @property + * cdef inline int ndim(self) noexcept nogil: # <<<<<<<<<<<<<< + * """Returns the number of dimensions in the array. + * """ + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":385 + * + * @property + * cdef inline npy_intp *shape(self) noexcept nogil: # <<<<<<<<<<<<<< + * """Returns a pointer to the dimensions/shape of the array. + * The number of elements matches the number of dimensions of the array (ndim). + */ + +static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_5shape_shape(PyArrayObject *__pyx_v_self) { + npy_intp *__pyx_r; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":390 + * Can return NULL for 0-dimensional arrays. + * """ + * return PyArray_DIMS(self) # <<<<<<<<<<<<<< + * + * @property + */ + __pyx_r = PyArray_DIMS(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":385 + * + * @property + * cdef inline npy_intp *shape(self) noexcept nogil: # <<<<<<<<<<<<<< + * """Returns a pointer to the dimensions/shape of the array. + * The number of elements matches the number of dimensions of the array (ndim). + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":393 + * + * @property + * cdef inline npy_intp *strides(self) noexcept nogil: # <<<<<<<<<<<<<< + * """Returns a pointer to the strides of the array. + * The number of elements matches the number of dimensions of the array (ndim). + */ + +static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_7strides_strides(PyArrayObject *__pyx_v_self) { + npy_intp *__pyx_r; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":397 + * The number of elements matches the number of dimensions of the array (ndim). + * """ + * return PyArray_STRIDES(self) # <<<<<<<<<<<<<< + * + * @property + */ + __pyx_r = PyArray_STRIDES(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":393 + * + * @property + * cdef inline npy_intp *strides(self) noexcept nogil: # <<<<<<<<<<<<<< + * """Returns a pointer to the strides of the array. + * The number of elements matches the number of dimensions of the array (ndim). + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":400 + * + * @property + * cdef inline npy_intp size(self) noexcept nogil: # <<<<<<<<<<<<<< + * """Returns the total size (in number of elements) of the array. + * """ + */ + +static CYTHON_INLINE npy_intp __pyx_f_5numpy_7ndarray_4size_size(PyArrayObject *__pyx_v_self) { + npy_intp __pyx_r; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":403 + * """Returns the total size (in number of elements) of the array. + * """ + * return PyArray_SIZE(self) # <<<<<<<<<<<<<< + * + * @property + */ + __pyx_r = PyArray_SIZE(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":400 + * + * @property + * cdef inline npy_intp size(self) noexcept nogil: # <<<<<<<<<<<<<< + * """Returns the total size (in number of elements) of the array. + * """ + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":406 + * + * @property + * cdef inline char* data(self) noexcept nogil: # <<<<<<<<<<<<<< + * """The pointer to the data buffer as a char*. + * This is provided for legacy reasons to avoid direct struct field access. + */ + +static CYTHON_INLINE char *__pyx_f_5numpy_7ndarray_4data_data(PyArrayObject *__pyx_v_self) { + char *__pyx_r; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":412 + * of `PyArray_DATA()` instead, which returns a 'void*'. + * """ + * return PyArray_BYTES(self) # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = PyArray_BYTES(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":406 + * + * @property + * cdef inline char* data(self) noexcept nogil: # <<<<<<<<<<<<<< + * """The pointer to the data buffer as a char*. + * This is provided for legacy reasons to avoid direct struct field access. + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":824 + * ctypedef long double complex clongdouble_t + * + * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(1, a) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__pyx_v_a) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("PyArray_MultiIterNew1", 1); + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":825 + * + * cdef inline object PyArray_MultiIterNew1(a): + * return PyArray_MultiIterNew(1, a) # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew2(a, b): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(1, ((void *)__pyx_v_a)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 825, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":824 + * ctypedef long double complex clongdouble_t + * + * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(1, a) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew1", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":827 + * return PyArray_MultiIterNew(1, a) + * + * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(2, a, b) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__pyx_v_a, PyObject *__pyx_v_b) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("PyArray_MultiIterNew2", 1); + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":828 + * + * cdef inline object PyArray_MultiIterNew2(a, b): + * return PyArray_MultiIterNew(2, a, b) # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew3(a, b, c): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(2, ((void *)__pyx_v_a), ((void *)__pyx_v_b)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 828, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":827 + * return PyArray_MultiIterNew(1, a) + * + * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(2, a, b) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew2", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":830 + * return PyArray_MultiIterNew(2, a, b) + * + * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(3, a, b, c) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("PyArray_MultiIterNew3", 1); + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":831 + * + * cdef inline object PyArray_MultiIterNew3(a, b, c): + * return PyArray_MultiIterNew(3, a, b, c) # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew4(a, b, c, d): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(3, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 831, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":830 + * return PyArray_MultiIterNew(2, a, b) + * + * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(3, a, b, c) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew3", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":833 + * return PyArray_MultiIterNew(3, a, b, c) + * + * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(4, a, b, c, d) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("PyArray_MultiIterNew4", 1); + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":834 + * + * cdef inline object PyArray_MultiIterNew4(a, b, c, d): + * return PyArray_MultiIterNew(4, a, b, c, d) # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(4, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 834, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":833 + * return PyArray_MultiIterNew(3, a, b, c) + * + * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(4, a, b, c, d) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew4", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":836 + * return PyArray_MultiIterNew(4, a, b, c, d) + * + * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(5, a, b, c, d, e) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d, PyObject *__pyx_v_e) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("PyArray_MultiIterNew5", 1); + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":837 + * + * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): + * return PyArray_MultiIterNew(5, a, b, c, d, e) # <<<<<<<<<<<<<< + * + * cdef inline tuple PyDataType_SHAPE(dtype d): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(5, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d), ((void *)__pyx_v_e)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 837, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":836 + * return PyArray_MultiIterNew(4, a, b, c, d) + * + * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(5, a, b, c, d, e) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew5", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":839 + * return PyArray_MultiIterNew(5, a, b, c, d, e) + * + * cdef inline tuple PyDataType_SHAPE(dtype d): # <<<<<<<<<<<<<< + * if PyDataType_HASSUBARRAY(d): + * return d.subarray.shape + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__pyx_v_d) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2; + __Pyx_RefNannySetupContext("PyDataType_SHAPE", 1); + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":840 + * + * cdef inline tuple PyDataType_SHAPE(dtype d): + * if PyDataType_HASSUBARRAY(d): # <<<<<<<<<<<<<< + * return d.subarray.shape + * else: + */ + __pyx_t_1 = PyDataType_HASSUBARRAY(__pyx_v_d); + if (__pyx_t_1) { + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":841 + * cdef inline tuple PyDataType_SHAPE(dtype d): + * if PyDataType_HASSUBARRAY(d): + * return d.subarray.shape # <<<<<<<<<<<<<< + * else: + * return () + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __pyx_f_5numpy_5dtype_8subarray_subarray(__pyx_v_d)->shape; + __Pyx_INCREF(((PyObject*)__pyx_t_2)); + __pyx_r = ((PyObject*)__pyx_t_2); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":840 + * + * cdef inline tuple PyDataType_SHAPE(dtype d): + * if PyDataType_HASSUBARRAY(d): # <<<<<<<<<<<<<< + * return d.subarray.shape + * else: + */ + } + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":843 + * return d.subarray.shape + * else: + * return () # <<<<<<<<<<<<<< + * + * + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_empty_tuple); + __pyx_r = __pyx_empty_tuple; + goto __pyx_L0; + } + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":839 + * return PyArray_MultiIterNew(5, a, b, c, d, e) + * + * cdef inline tuple PyDataType_SHAPE(dtype d): # <<<<<<<<<<<<<< + * if PyDataType_HASSUBARRAY(d): + * return d.subarray.shape + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1027 + * int _import_umath() except -1 + * + * cdef inline void set_array_base(ndarray arr, object base) except *: # <<<<<<<<<<<<<< + * Py_INCREF(base) # important to do this before stealing the reference below! + * PyArray_SetBaseObject(arr, base) + */ + +static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_arr, PyObject *__pyx_v_base) { + int __pyx_t_1; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1028 + * + * cdef inline void set_array_base(ndarray arr, object base) except *: + * Py_INCREF(base) # important to do this before stealing the reference below! # <<<<<<<<<<<<<< + * PyArray_SetBaseObject(arr, base) + * + */ + Py_INCREF(__pyx_v_base); + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1029 + * cdef inline void set_array_base(ndarray arr, object base) except *: + * Py_INCREF(base) # important to do this before stealing the reference below! + * PyArray_SetBaseObject(arr, base) # <<<<<<<<<<<<<< + * + * cdef inline object get_array_base(ndarray arr): + */ + __pyx_t_1 = PyArray_SetBaseObject(__pyx_v_arr, __pyx_v_base); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(2, 1029, __pyx_L1_error) + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1027 + * int _import_umath() except -1 + * + * cdef inline void set_array_base(ndarray arr, object base) except *: # <<<<<<<<<<<<<< + * Py_INCREF(base) # important to do this before stealing the reference below! + * PyArray_SetBaseObject(arr, base) + */ + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_AddTraceback("numpy.set_array_base", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1031 + * PyArray_SetBaseObject(arr, base) + * + * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< + * base = PyArray_BASE(arr) + * if base is NULL: + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__pyx_v_arr) { + PyObject *__pyx_v_base; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("get_array_base", 1); + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1032 + * + * cdef inline object get_array_base(ndarray arr): + * base = PyArray_BASE(arr) # <<<<<<<<<<<<<< + * if base is NULL: + * return None + */ + __pyx_v_base = PyArray_BASE(__pyx_v_arr); + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1033 + * cdef inline object get_array_base(ndarray arr): + * base = PyArray_BASE(arr) + * if base is NULL: # <<<<<<<<<<<<<< + * return None + * return base + */ + __pyx_t_1 = (__pyx_v_base == NULL); + if (__pyx_t_1) { + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1034 + * base = PyArray_BASE(arr) + * if base is NULL: + * return None # <<<<<<<<<<<<<< + * return base + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1033 + * cdef inline object get_array_base(ndarray arr): + * base = PyArray_BASE(arr) + * if base is NULL: # <<<<<<<<<<<<<< + * return None + * return base + */ + } + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1035 + * if base is NULL: + * return None + * return base # <<<<<<<<<<<<<< + * + * # Versions of the import_* functions which are more suitable for + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_base)); + __pyx_r = ((PyObject *)__pyx_v_base); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1031 + * PyArray_SetBaseObject(arr, base) + * + * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< + * base = PyArray_BASE(arr) + * if base is NULL: + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1039 + * # Versions of the import_* functions which are more suitable for + * # Cython code. + * cdef inline int import_array() except -1: # <<<<<<<<<<<<<< + * try: + * __pyx_import_array() + */ + +static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("import_array", 1); + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1040 + * # Cython code. + * cdef inline int import_array() except -1: + * try: # <<<<<<<<<<<<<< + * __pyx_import_array() + * except Exception: + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + /*try:*/ { + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1041 + * cdef inline int import_array() except -1: + * try: + * __pyx_import_array() # <<<<<<<<<<<<<< + * except Exception: + * raise ImportError("numpy._core.multiarray failed to import") + */ + __pyx_t_4 = _import_array(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(2, 1041, __pyx_L3_error) + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1040 + * # Cython code. + * cdef inline int import_array() except -1: + * try: # <<<<<<<<<<<<<< + * __pyx_import_array() + * except Exception: + */ + } + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L8_try_end; + __pyx_L3_error:; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1042 + * try: + * __pyx_import_array() + * except Exception: # <<<<<<<<<<<<<< + * raise ImportError("numpy._core.multiarray failed to import") + * + */ + __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); + if (__pyx_t_4) { + __Pyx_AddTraceback("numpy.import_array", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(2, 1042, __pyx_L5_except_error) + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_7); + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1043 + * __pyx_import_array() + * except Exception: + * raise ImportError("numpy._core.multiarray failed to import") # <<<<<<<<<<<<<< + * + * cdef inline int import_umath() except -1: + */ + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 1043, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_Raise(__pyx_t_8, 0, 0, 0); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __PYX_ERR(2, 1043, __pyx_L5_except_error) + } + goto __pyx_L5_except_error; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1040 + * # Cython code. + * cdef inline int import_array() except -1: + * try: # <<<<<<<<<<<<<< + * __pyx_import_array() + * except Exception: + */ + __pyx_L5_except_error:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L1_error; + __pyx_L8_try_end:; + } + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1039 + * # Versions of the import_* functions which are more suitable for + * # Cython code. + * cdef inline int import_array() except -1: # <<<<<<<<<<<<<< + * try: + * __pyx_import_array() + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("numpy.import_array", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1045 + * raise ImportError("numpy._core.multiarray failed to import") + * + * cdef inline int import_umath() except -1: # <<<<<<<<<<<<<< + * try: + * _import_umath() + */ + +static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("import_umath", 1); + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1046 + * + * cdef inline int import_umath() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + /*try:*/ { + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1047 + * cdef inline int import_umath() except -1: + * try: + * _import_umath() # <<<<<<<<<<<<<< + * except Exception: + * raise ImportError("numpy._core.umath failed to import") + */ + __pyx_t_4 = _import_umath(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(2, 1047, __pyx_L3_error) + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1046 + * + * cdef inline int import_umath() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: + */ + } + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L8_try_end; + __pyx_L3_error:; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1048 + * try: + * _import_umath() + * except Exception: # <<<<<<<<<<<<<< + * raise ImportError("numpy._core.umath failed to import") + * + */ + __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); + if (__pyx_t_4) { + __Pyx_AddTraceback("numpy.import_umath", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(2, 1048, __pyx_L5_except_error) + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_7); + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1049 + * _import_umath() + * except Exception: + * raise ImportError("numpy._core.umath failed to import") # <<<<<<<<<<<<<< + * + * cdef inline int import_ufunc() except -1: + */ + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 1049, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_Raise(__pyx_t_8, 0, 0, 0); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __PYX_ERR(2, 1049, __pyx_L5_except_error) + } + goto __pyx_L5_except_error; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1046 + * + * cdef inline int import_umath() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: + */ + __pyx_L5_except_error:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L1_error; + __pyx_L8_try_end:; + } + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1045 + * raise ImportError("numpy._core.multiarray failed to import") + * + * cdef inline int import_umath() except -1: # <<<<<<<<<<<<<< + * try: + * _import_umath() + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("numpy.import_umath", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1051 + * raise ImportError("numpy._core.umath failed to import") + * + * cdef inline int import_ufunc() except -1: # <<<<<<<<<<<<<< + * try: + * _import_umath() + */ + +static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("import_ufunc", 1); + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1052 + * + * cdef inline int import_ufunc() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + /*try:*/ { + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1053 + * cdef inline int import_ufunc() except -1: + * try: + * _import_umath() # <<<<<<<<<<<<<< + * except Exception: + * raise ImportError("numpy._core.umath failed to import") + */ + __pyx_t_4 = _import_umath(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(2, 1053, __pyx_L3_error) + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1052 + * + * cdef inline int import_ufunc() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: + */ + } + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L8_try_end; + __pyx_L3_error:; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1054 + * try: + * _import_umath() + * except Exception: # <<<<<<<<<<<<<< + * raise ImportError("numpy._core.umath failed to import") + * + */ + __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); + if (__pyx_t_4) { + __Pyx_AddTraceback("numpy.import_ufunc", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(2, 1054, __pyx_L5_except_error) + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_7); + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1055 + * _import_umath() + * except Exception: + * raise ImportError("numpy._core.umath failed to import") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 1055, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_Raise(__pyx_t_8, 0, 0, 0); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __PYX_ERR(2, 1055, __pyx_L5_except_error) + } + goto __pyx_L5_except_error; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1052 + * + * cdef inline int import_ufunc() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: + */ + __pyx_L5_except_error:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L1_error; + __pyx_L8_try_end:; + } + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1051 + * raise ImportError("numpy._core.umath failed to import") + * + * cdef inline int import_ufunc() except -1: # <<<<<<<<<<<<<< + * try: + * _import_umath() + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("numpy.import_ufunc", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1058 + * + * + * cdef inline bint is_timedelta64_object(object obj) noexcept: # <<<<<<<<<<<<<< + * """ + * Cython equivalent of `isinstance(obj, np.timedelta64)` + */ + +static CYTHON_INLINE int __pyx_f_5numpy_is_timedelta64_object(PyObject *__pyx_v_obj) { + int __pyx_r; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1070 + * bool + * """ + * return PyObject_TypeCheck(obj, &PyTimedeltaArrType_Type) # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = PyObject_TypeCheck(__pyx_v_obj, (&PyTimedeltaArrType_Type)); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1058 + * + * + * cdef inline bint is_timedelta64_object(object obj) noexcept: # <<<<<<<<<<<<<< + * """ + * Cython equivalent of `isinstance(obj, np.timedelta64)` + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1073 + * + * + * cdef inline bint is_datetime64_object(object obj) noexcept: # <<<<<<<<<<<<<< + * """ + * Cython equivalent of `isinstance(obj, np.datetime64)` + */ + +static CYTHON_INLINE int __pyx_f_5numpy_is_datetime64_object(PyObject *__pyx_v_obj) { + int __pyx_r; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1085 + * bool + * """ + * return PyObject_TypeCheck(obj, &PyDatetimeArrType_Type) # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = PyObject_TypeCheck(__pyx_v_obj, (&PyDatetimeArrType_Type)); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1073 + * + * + * cdef inline bint is_datetime64_object(object obj) noexcept: # <<<<<<<<<<<<<< + * """ + * Cython equivalent of `isinstance(obj, np.datetime64)` + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1088 + * + * + * cdef inline npy_datetime get_datetime64_value(object obj) noexcept nogil: # <<<<<<<<<<<<<< + * """ + * returns the int64 value underlying scalar numpy datetime64 object + */ + +static CYTHON_INLINE npy_datetime __pyx_f_5numpy_get_datetime64_value(PyObject *__pyx_v_obj) { + npy_datetime __pyx_r; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1095 + * also needed. That can be found using `get_datetime64_unit`. + * """ + * return (obj).obval # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = ((PyDatetimeScalarObject *)__pyx_v_obj)->obval; + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1088 + * + * + * cdef inline npy_datetime get_datetime64_value(object obj) noexcept nogil: # <<<<<<<<<<<<<< + * """ + * returns the int64 value underlying scalar numpy datetime64 object + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1098 + * + * + * cdef inline npy_timedelta get_timedelta64_value(object obj) noexcept nogil: # <<<<<<<<<<<<<< + * """ + * returns the int64 value underlying scalar numpy timedelta64 object + */ + +static CYTHON_INLINE npy_timedelta __pyx_f_5numpy_get_timedelta64_value(PyObject *__pyx_v_obj) { + npy_timedelta __pyx_r; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1102 + * returns the int64 value underlying scalar numpy timedelta64 object + * """ + * return (obj).obval # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = ((PyTimedeltaScalarObject *)__pyx_v_obj)->obval; + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1098 + * + * + * cdef inline npy_timedelta get_timedelta64_value(object obj) noexcept nogil: # <<<<<<<<<<<<<< + * """ + * returns the int64 value underlying scalar numpy timedelta64 object + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1105 + * + * + * cdef inline NPY_DATETIMEUNIT get_datetime64_unit(object obj) noexcept nogil: # <<<<<<<<<<<<<< + * """ + * returns the unit part of the dtype for a numpy datetime64 object. + */ + +static CYTHON_INLINE NPY_DATETIMEUNIT __pyx_f_5numpy_get_datetime64_unit(PyObject *__pyx_v_obj) { + NPY_DATETIMEUNIT __pyx_r; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1109 + * returns the unit part of the dtype for a numpy datetime64 object. + * """ + * return (obj).obmeta.base # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = ((NPY_DATETIMEUNIT)((PyDatetimeScalarObject *)__pyx_v_obj)->obmeta.base); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1105 + * + * + * cdef inline NPY_DATETIMEUNIT get_datetime64_unit(object obj) noexcept nogil: # <<<<<<<<<<<<<< + * """ + * returns the unit part of the dtype for a numpy datetime64 object. + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "nw_ec_alignx.pyx":38 + * + * + * cdef minarg(float f[3]): # <<<<<<<<<<<<<< + * """Returns the minimum value and the index of that value from an array + * of 3 elements + */ + +static PyObject *__pyx_f_12nw_ec_alignx_minarg(float *__pyx_v_f) { + int __pyx_v_i; + int __pyx_v_argmin; + float __pyx_v_mini; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("minarg", 1); + + /* "nw_ec_alignx.pyx":44 + * cdef: + * int i + * int argmin = 0 # <<<<<<<<<<<<<< + * float mini = f[0] + * for i in range(1, 3): + */ + __pyx_v_argmin = 0; + + /* "nw_ec_alignx.pyx":45 + * int i + * int argmin = 0 + * float mini = f[0] # <<<<<<<<<<<<<< + * for i in range(1, 3): + * if f[i] < mini: + */ + __pyx_v_mini = (__pyx_v_f[0]); + + /* "nw_ec_alignx.pyx":46 + * int argmin = 0 + * float mini = f[0] + * for i in range(1, 3): # <<<<<<<<<<<<<< + * if f[i] < mini: + * mini = f[i] + */ + for (__pyx_t_1 = 1; __pyx_t_1 < 3; __pyx_t_1+=1) { + __pyx_v_i = __pyx_t_1; + + /* "nw_ec_alignx.pyx":47 + * float mini = f[0] + * for i in range(1, 3): + * if f[i] < mini: # <<<<<<<<<<<<<< + * mini = f[i] + * argmin = i + */ + __pyx_t_2 = ((__pyx_v_f[__pyx_v_i]) < __pyx_v_mini); + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":48 + * for i in range(1, 3): + * if f[i] < mini: + * mini = f[i] # <<<<<<<<<<<<<< + * argmin = i + * return mini, argmin + */ + __pyx_v_mini = (__pyx_v_f[__pyx_v_i]); + + /* "nw_ec_alignx.pyx":49 + * if f[i] < mini: + * mini = f[i] + * argmin = i # <<<<<<<<<<<<<< + * return mini, argmin + * + */ + __pyx_v_argmin = __pyx_v_i; + + /* "nw_ec_alignx.pyx":47 + * float mini = f[0] + * for i in range(1, 3): + * if f[i] < mini: # <<<<<<<<<<<<<< + * mini = f[i] + * argmin = i + */ + } + } + + /* "nw_ec_alignx.pyx":50 + * mini = f[i] + * argmin = i + * return mini, argmin # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = PyFloat_FromDouble(__pyx_v_mini); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 50, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_argmin); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 50, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 50, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3)) __PYX_ERR(0, 50, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4)) __PYX_ERR(0, 50, __pyx_L1_error); + __pyx_t_3 = 0; + __pyx_t_4 = 0; + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L0; + + /* "nw_ec_alignx.pyx":38 + * + * + * cdef minarg(float f[3]): # <<<<<<<<<<<<<< + * """Returns the minimum value and the index of that value from an array + * of 3 elements + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("nw_ec_alignx.minarg", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "nw_ec_alignx.pyx":54 + * + * # best performance + * @cython.boundscheck(False) # <<<<<<<<<<<<<< + * @cython.wraparound(False) + * def _FastNW(np.ndarray[DTYPEF_t, ndim=2] mat, dict ecs, list seq1, list seq2, + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_12nw_ec_alignx_1_FastNW(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_12nw_ec_alignx__FastNW, "Perform dynamic programing alignment of EC numbers sequences. Creates\n the scoring and arrow matrices using brute force loops.\n\n Returns the dynamic programing matrix and the arrow matrix used to trace\n back the alignment.\n\n Arguments:\n - `mat`: EC number similarity (distance) matrix\n - `ecs`: EC number dictionary. Keys are EC numbers (3 levels of\n classification) and values are indices to similarity matrix (mat)\n - `seq1`: enzymatic step sequence 1, list of (unaligned) EC numbers\n - `seq2`: enzymatic step sequence 2, list of (unaligned) EC numbers\n - `gap`: gap penalties, default = 1\n "); +static PyMethodDef __pyx_mdef_12nw_ec_alignx_1_FastNW = {"_FastNW", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_12nw_ec_alignx_1_FastNW, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_12nw_ec_alignx__FastNW}; +static PyObject *__pyx_pw_12nw_ec_alignx_1_FastNW(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyArrayObject *__pyx_v_mat = 0; + PyObject *__pyx_v_ecs = 0; + PyObject *__pyx_v_seq1 = 0; + PyObject *__pyx_v_seq2 = 0; + float __pyx_v_gap; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[5] = {0,0,0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("_FastNW (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_mat,&__pyx_n_s_ecs,&__pyx_n_s_seq1,&__pyx_n_s_seq2,&__pyx_n_s_gap,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_mat)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 54, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_ecs)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 54, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_FastNW", 0, 4, 5, 1); __PYX_ERR(0, 54, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_seq1)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 54, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_FastNW", 0, 4, 5, 2); __PYX_ERR(0, 54, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_seq2)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 54, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_FastNW", 0, 4, 5, 3); __PYX_ERR(0, 54, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gap); + if (value) { values[4] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 54, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_FastNW") < 0)) __PYX_ERR(0, 54, __pyx_L3_error) + } + } else { + switch (__pyx_nargs) { + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_mat = ((PyArrayObject *)values[0]); + __pyx_v_ecs = ((PyObject*)values[1]); + __pyx_v_seq1 = ((PyObject*)values[2]); + __pyx_v_seq2 = ((PyObject*)values[3]); + if (values[4]) { + __pyx_v_gap = __pyx_PyFloat_AsFloat(values[4]); if (unlikely((__pyx_v_gap == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 57, __pyx_L3_error) + } else { + __pyx_v_gap = ((float)((double)0.9)); + } + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("_FastNW", 0, 4, 5, __pyx_nargs); __PYX_ERR(0, 54, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("nw_ec_alignx._FastNW", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_5numpy_ndarray, 1, "mat", 0))) __PYX_ERR(0, 56, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ecs), (&PyDict_Type), 1, "ecs", 1))) __PYX_ERR(0, 56, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_seq1), (&PyList_Type), 1, "seq1", 1))) __PYX_ERR(0, 56, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_seq2), (&PyList_Type), 1, "seq2", 1))) __PYX_ERR(0, 56, __pyx_L1_error) + __pyx_r = __pyx_pf_12nw_ec_alignx__FastNW(__pyx_self, __pyx_v_mat, __pyx_v_ecs, __pyx_v_seq1, __pyx_v_seq2, __pyx_v_gap); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_12nw_ec_alignx__FastNW(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_mat, PyObject *__pyx_v_ecs, PyObject *__pyx_v_seq1, PyObject *__pyx_v_seq2, float __pyx_v_gap) { + int __pyx_v_l1; + int __pyx_v_l2; + int __pyx_v_i; + int __pyx_v_j; + int __pyx_v_k; + int __pyx_v_eci; + int __pyx_v_ecj; + int __pyx_v_minpos; + float __pyx_v_mini; + float __pyx_v_randfactor; + float __pyx_v_f[3]; + PyArrayObject *__pyx_v_scoremat = 0; + PyArrayObject *__pyx_v_arrow = 0; + PyObject *__pyx_v_sco = NULL; + double __pyx_v_randnum; + __Pyx_LocalBuf_ND __pyx_pybuffernd_arrow; + __Pyx_Buffer __pyx_pybuffer_arrow; + __Pyx_LocalBuf_ND __pyx_pybuffernd_mat; + __Pyx_Buffer __pyx_pybuffer_mat; + __Pyx_LocalBuf_ND __pyx_pybuffernd_scoremat; + __Pyx_Buffer __pyx_pybuffer_scoremat; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + Py_ssize_t __pyx_t_1; + Py_ssize_t __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + unsigned int __pyx_t_8; + PyArrayObject *__pyx_t_9 = NULL; + PyArrayObject *__pyx_t_10 = NULL; + long __pyx_t_11; + long __pyx_t_12; + int __pyx_t_13; + Py_ssize_t __pyx_t_14; + Py_ssize_t __pyx_t_15; + long __pyx_t_16; + long __pyx_t_17; + int __pyx_t_18; + long __pyx_t_19; + int __pyx_t_20; + float __pyx_t_21; + int __pyx_t_22; + PyObject *(*__pyx_t_23)(PyObject *); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_FastNW", 1); + __pyx_pybuffer_scoremat.pybuffer.buf = NULL; + __pyx_pybuffer_scoremat.refcount = 0; + __pyx_pybuffernd_scoremat.data = NULL; + __pyx_pybuffernd_scoremat.rcbuffer = &__pyx_pybuffer_scoremat; + __pyx_pybuffer_arrow.pybuffer.buf = NULL; + __pyx_pybuffer_arrow.refcount = 0; + __pyx_pybuffernd_arrow.data = NULL; + __pyx_pybuffernd_arrow.rcbuffer = &__pyx_pybuffer_arrow; + __pyx_pybuffer_mat.pybuffer.buf = NULL; + __pyx_pybuffer_mat.refcount = 0; + __pyx_pybuffernd_mat.data = NULL; + __pyx_pybuffernd_mat.rcbuffer = &__pyx_pybuffer_mat; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mat.rcbuffer->pybuffer, (PyObject*)__pyx_v_mat, &__Pyx_TypeInfo_nn___pyx_t_12nw_ec_alignx_DTYPEF_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 54, __pyx_L1_error) + } + __pyx_pybuffernd_mat.diminfo[0].strides = __pyx_pybuffernd_mat.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_mat.diminfo[0].shape = __pyx_pybuffernd_mat.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_mat.diminfo[1].strides = __pyx_pybuffernd_mat.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_mat.diminfo[1].shape = __pyx_pybuffernd_mat.rcbuffer->pybuffer.shape[1]; + + /* "nw_ec_alignx.pyx":76 + * float mini, randum, randfactor + * float f[3] + * mini = 0 # <<<<<<<<<<<<<< + * l1, l2 = len(seq1), len(seq2) + * # Create the score and arrow matrices + */ + __pyx_v_mini = 0.0; + + /* "nw_ec_alignx.pyx":77 + * float f[3] + * mini = 0 + * l1, l2 = len(seq1), len(seq2) # <<<<<<<<<<<<<< + * # Create the score and arrow matrices + * cdef np.ndarray[DTYPEF_t, ndim= 2] scoremat = np.zeros((l1 + 1, l2 + 1), DTYPEF) + */ + if (unlikely(__pyx_v_seq1 == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(0, 77, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_PyList_GET_SIZE(__pyx_v_seq1); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 77, __pyx_L1_error) + if (unlikely(__pyx_v_seq2 == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(0, 77, __pyx_L1_error) + } + __pyx_t_2 = __Pyx_PyList_GET_SIZE(__pyx_v_seq2); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(0, 77, __pyx_L1_error) + __pyx_v_l1 = __pyx_t_1; + __pyx_v_l2 = __pyx_t_2; + + /* "nw_ec_alignx.pyx":79 + * l1, l2 = len(seq1), len(seq2) + * # Create the score and arrow matrices + * cdef np.ndarray[DTYPEF_t, ndim= 2] scoremat = np.zeros((l1 + 1, l2 + 1), DTYPEF) # <<<<<<<<<<<<<< + * cdef np.ndarray[DTYPE_t, ndim= 2] arrow = np.zeros((l1 + 1, l2 + 1), DTYPE) + * # Create first row and first column with gaps + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 79, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_zeros); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 79, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyInt_From_long((__pyx_v_l1 + 1)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 79, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = __Pyx_PyInt_From_long((__pyx_v_l2 + 1)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 79, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 79, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_4)) __PYX_ERR(0, 79, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_6); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6)) __PYX_ERR(0, 79, __pyx_L1_error); + __pyx_t_4 = 0; + __pyx_t_6 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_DTYPEF); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 79, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_4 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_7, __pyx_t_6}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_8, 2+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 79, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 79, __pyx_L1_error) + __pyx_t_9 = ((PyArrayObject *)__pyx_t_3); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_scoremat.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_12nw_ec_alignx_DTYPEF_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_scoremat = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_scoremat.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 79, __pyx_L1_error) + } else {__pyx_pybuffernd_scoremat.diminfo[0].strides = __pyx_pybuffernd_scoremat.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_scoremat.diminfo[0].shape = __pyx_pybuffernd_scoremat.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_scoremat.diminfo[1].strides = __pyx_pybuffernd_scoremat.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_scoremat.diminfo[1].shape = __pyx_pybuffernd_scoremat.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_9 = 0; + __pyx_v_scoremat = ((PyArrayObject *)__pyx_t_3); + __pyx_t_3 = 0; + + /* "nw_ec_alignx.pyx":80 + * # Create the score and arrow matrices + * cdef np.ndarray[DTYPEF_t, ndim= 2] scoremat = np.zeros((l1 + 1, l2 + 1), DTYPEF) + * cdef np.ndarray[DTYPE_t, ndim= 2] arrow = np.zeros((l1 + 1, l2 + 1), DTYPE) # <<<<<<<<<<<<<< + * # Create first row and first column with gaps + * for i in range(l2 + 1): + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 80, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_zeros); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 80, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyInt_From_long((__pyx_v_l1 + 1)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 80, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_7 = __Pyx_PyInt_From_long((__pyx_v_l2 + 1)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 80, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 80, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_5); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5)) __PYX_ERR(0, 80, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_7); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_7)) __PYX_ERR(0, 80, __pyx_L1_error); + __pyx_t_5 = 0; + __pyx_t_7 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 80, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_5 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_4, __pyx_t_7}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_8, 2+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 80, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 80, __pyx_L1_error) + __pyx_t_10 = ((PyArrayObject *)__pyx_t_3); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_arrow.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_nn___pyx_t_12nw_ec_alignx_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_arrow = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_arrow.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 80, __pyx_L1_error) + } else {__pyx_pybuffernd_arrow.diminfo[0].strides = __pyx_pybuffernd_arrow.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_arrow.diminfo[0].shape = __pyx_pybuffernd_arrow.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_arrow.diminfo[1].strides = __pyx_pybuffernd_arrow.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_arrow.diminfo[1].shape = __pyx_pybuffernd_arrow.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_10 = 0; + __pyx_v_arrow = ((PyArrayObject *)__pyx_t_3); + __pyx_t_3 = 0; + + /* "nw_ec_alignx.pyx":82 + * cdef np.ndarray[DTYPE_t, ndim= 2] arrow = np.zeros((l1 + 1, l2 + 1), DTYPE) + * # Create first row and first column with gaps + * for i in range(l2 + 1): # <<<<<<<<<<<<<< + * scoremat[0, i] = i * gap + * arrow[0, i] = 1 + */ + __pyx_t_11 = (__pyx_v_l2 + 1); + __pyx_t_12 = __pyx_t_11; + for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) { + __pyx_v_i = __pyx_t_13; + + /* "nw_ec_alignx.pyx":83 + * # Create first row and first column with gaps + * for i in range(l2 + 1): + * scoremat[0, i] = i * gap # <<<<<<<<<<<<<< + * arrow[0, i] = 1 + * for i in range(l1 + 1): + */ + __pyx_t_14 = 0; + __pyx_t_15 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_12nw_ec_alignx_DTYPEF_t *, __pyx_pybuffernd_scoremat.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_scoremat.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_scoremat.diminfo[1].strides) = (__pyx_v_i * __pyx_v_gap); + + /* "nw_ec_alignx.pyx":84 + * for i in range(l2 + 1): + * scoremat[0, i] = i * gap + * arrow[0, i] = 1 # <<<<<<<<<<<<<< + * for i in range(l1 + 1): + * scoremat[i, 0] = i * gap + */ + __pyx_t_15 = 0; + __pyx_t_14 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_12nw_ec_alignx_DTYPE_t *, __pyx_pybuffernd_arrow.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_arrow.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_arrow.diminfo[1].strides) = 1; + } + + /* "nw_ec_alignx.pyx":85 + * scoremat[0, i] = i * gap + * arrow[0, i] = 1 + * for i in range(l1 + 1): # <<<<<<<<<<<<<< + * scoremat[i, 0] = i * gap + * # Fill the matrix. f array is cell posible values (len = 3) + */ + __pyx_t_11 = (__pyx_v_l1 + 1); + __pyx_t_12 = __pyx_t_11; + for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) { + __pyx_v_i = __pyx_t_13; + + /* "nw_ec_alignx.pyx":86 + * arrow[0, i] = 1 + * for i in range(l1 + 1): + * scoremat[i, 0] = i * gap # <<<<<<<<<<<<<< + * # Fill the matrix. f array is cell posible values (len = 3) + * for i in range(1, l1 + 1): + */ + __pyx_t_14 = __pyx_v_i; + __pyx_t_15 = 0; + *__Pyx_BufPtrStrided2d(__pyx_t_12nw_ec_alignx_DTYPEF_t *, __pyx_pybuffernd_scoremat.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_scoremat.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_scoremat.diminfo[1].strides) = (__pyx_v_i * __pyx_v_gap); + } + + /* "nw_ec_alignx.pyx":88 + * scoremat[i, 0] = i * gap + * # Fill the matrix. f array is cell posible values (len = 3) + * for i in range(1, l1 + 1): # <<<<<<<<<<<<<< + * for j in range(1, l2 + 1): + * eci = ecs[seq1[i - 1]] + */ + __pyx_t_11 = (__pyx_v_l1 + 1); + __pyx_t_12 = __pyx_t_11; + for (__pyx_t_13 = 1; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) { + __pyx_v_i = __pyx_t_13; + + /* "nw_ec_alignx.pyx":89 + * # Fill the matrix. f array is cell posible values (len = 3) + * for i in range(1, l1 + 1): + * for j in range(1, l2 + 1): # <<<<<<<<<<<<<< + * eci = ecs[seq1[i - 1]] + * ecj = ecs[seq2[j - 1]] + */ + __pyx_t_16 = (__pyx_v_l2 + 1); + __pyx_t_17 = __pyx_t_16; + for (__pyx_t_18 = 1; __pyx_t_18 < __pyx_t_17; __pyx_t_18+=1) { + __pyx_v_j = __pyx_t_18; + + /* "nw_ec_alignx.pyx":90 + * for i in range(1, l1 + 1): + * for j in range(1, l2 + 1): + * eci = ecs[seq1[i - 1]] # <<<<<<<<<<<<<< + * ecj = ecs[seq2[j - 1]] + * sco = mat[eci, ecj] + */ + if (unlikely(__pyx_v_ecs == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 90, __pyx_L1_error) + } + if (unlikely(__pyx_v_seq1 == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 90, __pyx_L1_error) + } + __pyx_t_19 = (__pyx_v_i - 1); + __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_ecs, PyList_GET_ITEM(__pyx_v_seq1, __pyx_t_19)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 90, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_20 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_20 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 90, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_eci = __pyx_t_20; + + /* "nw_ec_alignx.pyx":91 + * for j in range(1, l2 + 1): + * eci = ecs[seq1[i - 1]] + * ecj = ecs[seq2[j - 1]] # <<<<<<<<<<<<<< + * sco = mat[eci, ecj] + * f[0] = scoremat[i - 1, j] + gap + */ + if (unlikely(__pyx_v_ecs == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 91, __pyx_L1_error) + } + if (unlikely(__pyx_v_seq2 == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 91, __pyx_L1_error) + } + __pyx_t_19 = (__pyx_v_j - 1); + __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_ecs, PyList_GET_ITEM(__pyx_v_seq2, __pyx_t_19)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 91, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_20 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_20 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 91, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_ecj = __pyx_t_20; + + /* "nw_ec_alignx.pyx":92 + * eci = ecs[seq1[i - 1]] + * ecj = ecs[seq2[j - 1]] + * sco = mat[eci, ecj] # <<<<<<<<<<<<<< + * f[0] = scoremat[i - 1, j] + gap + * f[1] = scoremat[i, j - 1] + gap + */ + __pyx_t_15 = __pyx_v_eci; + __pyx_t_14 = __pyx_v_ecj; + __pyx_t_3 = PyFloat_FromDouble((*__Pyx_BufPtrStrided2d(__pyx_t_12nw_ec_alignx_DTYPEF_t *, __pyx_pybuffernd_mat.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_mat.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_mat.diminfo[1].strides))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 92, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_XDECREF_SET(__pyx_v_sco, __pyx_t_3); + __pyx_t_3 = 0; + + /* "nw_ec_alignx.pyx":93 + * ecj = ecs[seq2[j - 1]] + * sco = mat[eci, ecj] + * f[0] = scoremat[i - 1, j] + gap # <<<<<<<<<<<<<< + * f[1] = scoremat[i, j - 1] + gap + * f[2] = scoremat[i - 1, j - 1] + sco + */ + __pyx_t_14 = (__pyx_v_i - 1); + __pyx_t_15 = __pyx_v_j; + (__pyx_v_f[0]) = ((*__Pyx_BufPtrStrided2d(__pyx_t_12nw_ec_alignx_DTYPEF_t *, __pyx_pybuffernd_scoremat.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_scoremat.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_scoremat.diminfo[1].strides)) + __pyx_v_gap); + + /* "nw_ec_alignx.pyx":94 + * sco = mat[eci, ecj] + * f[0] = scoremat[i - 1, j] + gap + * f[1] = scoremat[i, j - 1] + gap # <<<<<<<<<<<<<< + * f[2] = scoremat[i - 1, j - 1] + sco + * # Adding some random variation to solve draws + */ + __pyx_t_15 = __pyx_v_i; + __pyx_t_14 = (__pyx_v_j - 1); + (__pyx_v_f[1]) = ((*__Pyx_BufPtrStrided2d(__pyx_t_12nw_ec_alignx_DTYPEF_t *, __pyx_pybuffernd_scoremat.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_scoremat.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_scoremat.diminfo[1].strides)) + __pyx_v_gap); + + /* "nw_ec_alignx.pyx":95 + * f[0] = scoremat[i - 1, j] + gap + * f[1] = scoremat[i, j - 1] + gap + * f[2] = scoremat[i - 1, j - 1] + sco # <<<<<<<<<<<<<< + * # Adding some random variation to solve draws + * for k in range(3): + */ + __pyx_t_14 = (__pyx_v_i - 1); + __pyx_t_15 = (__pyx_v_j - 1); + __pyx_t_3 = PyFloat_FromDouble((*__Pyx_BufPtrStrided2d(__pyx_t_12nw_ec_alignx_DTYPEF_t *, __pyx_pybuffernd_scoremat.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_scoremat.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_scoremat.diminfo[1].strides))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 95, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = PyNumber_Add(__pyx_t_3, __pyx_v_sco); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 95, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_21 = __pyx_PyFloat_AsFloat(__pyx_t_6); if (unlikely((__pyx_t_21 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 95, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + (__pyx_v_f[2]) = __pyx_t_21; + + /* "nw_ec_alignx.pyx":97 + * f[2] = scoremat[i - 1, j - 1] + sco + * # Adding some random variation to solve draws + * for k in range(3): # <<<<<<<<<<<<<< + * randfactor = copysignf(0.001, f[k]) + * randnum = rand() / float(INT_MAX) + */ + for (__pyx_t_20 = 0; __pyx_t_20 < 3; __pyx_t_20+=1) { + __pyx_v_k = __pyx_t_20; + + /* "nw_ec_alignx.pyx":98 + * # Adding some random variation to solve draws + * for k in range(3): + * randfactor = copysignf(0.001, f[k]) # <<<<<<<<<<<<<< + * randnum = rand() / float(INT_MAX) + * f[k] -= randfactor * randnum + */ + __pyx_v_randfactor = copysignf(0.001, (__pyx_v_f[__pyx_v_k])); + + /* "nw_ec_alignx.pyx":99 + * for k in range(3): + * randfactor = copysignf(0.001, f[k]) + * randnum = rand() / float(INT_MAX) # <<<<<<<<<<<<<< + * f[k] -= randfactor * randnum + * # select min value + */ + __pyx_t_22 = rand(); + if (unlikely(((double)INT_MAX) == 0)) { + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + __PYX_ERR(0, 99, __pyx_L1_error) + } + __pyx_v_randnum = (((double)__pyx_t_22) / ((double)INT_MAX)); + + /* "nw_ec_alignx.pyx":100 + * randfactor = copysignf(0.001, f[k]) + * randnum = rand() / float(INT_MAX) + * f[k] -= randfactor * randnum # <<<<<<<<<<<<<< + * # select min value + * mini, minpos = minarg(f) + */ + __pyx_t_22 = __pyx_v_k; + (__pyx_v_f[__pyx_t_22]) = ((__pyx_v_f[__pyx_t_22]) - (__pyx_v_randfactor * __pyx_v_randnum)); + } + + /* "nw_ec_alignx.pyx":102 + * f[k] -= randfactor * randnum + * # select min value + * mini, minpos = minarg(f) # <<<<<<<<<<<<<< + * # fill the matrices + * scoremat[i, j] = mini + */ + __pyx_t_6 = __pyx_f_12nw_ec_alignx_minarg(__pyx_v_f); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 102, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + if ((likely(PyTuple_CheckExact(__pyx_t_6))) || (PyList_CheckExact(__pyx_t_6))) { + PyObject* sequence = __pyx_t_6; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 102, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_7 = PyTuple_GET_ITEM(sequence, 1); + } else { + __pyx_t_3 = PyList_GET_ITEM(sequence, 0); + __pyx_t_7 = PyList_GET_ITEM(sequence, 1); + } + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(__pyx_t_7); + #else + __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 102, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 102, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + #endif + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } else { + Py_ssize_t index = -1; + __pyx_t_4 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 102, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_23 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); + index = 0; __pyx_t_3 = __pyx_t_23(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L13_unpacking_failed; + __Pyx_GOTREF(__pyx_t_3); + index = 1; __pyx_t_7 = __pyx_t_23(__pyx_t_4); if (unlikely(!__pyx_t_7)) goto __pyx_L13_unpacking_failed; + __Pyx_GOTREF(__pyx_t_7); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_23(__pyx_t_4), 2) < 0) __PYX_ERR(0, 102, __pyx_L1_error) + __pyx_t_23 = NULL; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + goto __pyx_L14_unpacking_done; + __pyx_L13_unpacking_failed:; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_23 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 102, __pyx_L1_error) + __pyx_L14_unpacking_done:; + } + __pyx_t_21 = __pyx_PyFloat_AsFloat(__pyx_t_3); if (unlikely((__pyx_t_21 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 102, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_20 = __Pyx_PyInt_As_int(__pyx_t_7); if (unlikely((__pyx_t_20 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 102, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_v_mini = __pyx_t_21; + __pyx_v_minpos = __pyx_t_20; + + /* "nw_ec_alignx.pyx":104 + * mini, minpos = minarg(f) + * # fill the matrices + * scoremat[i, j] = mini # <<<<<<<<<<<<<< + * arrow[i, j] = minpos + * return arrow, mini + */ + __pyx_t_15 = __pyx_v_i; + __pyx_t_14 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_12nw_ec_alignx_DTYPEF_t *, __pyx_pybuffernd_scoremat.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_scoremat.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_scoremat.diminfo[1].strides) = __pyx_v_mini; + + /* "nw_ec_alignx.pyx":105 + * # fill the matrices + * scoremat[i, j] = mini + * arrow[i, j] = minpos # <<<<<<<<<<<<<< + * return arrow, mini + * + */ + __pyx_t_14 = __pyx_v_i; + __pyx_t_15 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_12nw_ec_alignx_DTYPE_t *, __pyx_pybuffernd_arrow.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_arrow.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_arrow.diminfo[1].strides) = __pyx_v_minpos; + } + } + + /* "nw_ec_alignx.pyx":106 + * scoremat[i, j] = mini + * arrow[i, j] = minpos + * return arrow, mini # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_6 = PyFloat_FromDouble(__pyx_v_mini); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 106, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 106, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_INCREF((PyObject *)__pyx_v_arrow); + __Pyx_GIVEREF((PyObject *)__pyx_v_arrow); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 0, ((PyObject *)__pyx_v_arrow))) __PYX_ERR(0, 106, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_6); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6)) __PYX_ERR(0, 106, __pyx_L1_error); + __pyx_t_6 = 0; + __pyx_r = __pyx_t_7; + __pyx_t_7 = 0; + goto __pyx_L0; + + /* "nw_ec_alignx.pyx":54 + * + * # best performance + * @cython.boundscheck(False) # <<<<<<<<<<<<<< + * @cython.wraparound(False) + * def _FastNW(np.ndarray[DTYPEF_t, ndim=2] mat, dict ecs, list seq1, list seq2, + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_arrow.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mat.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_scoremat.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("nw_ec_alignx._FastNW", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_arrow.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mat.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_scoremat.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XDECREF((PyObject *)__pyx_v_scoremat); + __Pyx_XDECREF((PyObject *)__pyx_v_arrow); + __Pyx_XDECREF(__pyx_v_sco); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "nw_ec_alignx.pyx":109 + * + * + * cdef gappen(seq1, seq2): # <<<<<<<<<<<<<< + * """Returns the number + * Keyword Arguments: + */ + +static PyObject *__pyx_f_12nw_ec_alignx_gappen(PyObject *__pyx_v_seq1, PyObject *__pyx_v_seq2) { + int __pyx_v_l1; + float __pyx_v_gappen; + PyObject *__pyx_v_gap = 0; + int __pyx_v_i; + float __pyx_v_sgaps; + float __pyx_v_ngaps; + float __pyx_v_sgaps2; + float __pyx_v_ngaps2; + CYTHON_UNUSED float __pyx_v_fgaps; + CYTHON_UNUSED float __pyx_v_fgaps2; + float __pyx_v_fblock1; + float __pyx_v_fblock2; + PyObject *__pyx_v_ec1 = 0; + PyObject *__pyx_v_ec2 = 0; + PyBoolObject *__pyx_v_begin1 = 0; + PyBoolObject *__pyx_v_begin2 = 0; + PyBoolObject *__pyx_v_block1 = 0; + PyBoolObject *__pyx_v_block2 = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + Py_ssize_t __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + PyObject *__pyx_t_4 = NULL; + int __pyx_t_5; + int __pyx_t_6; + int __pyx_t_7; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("gappen", 1); + + /* "nw_ec_alignx.pyx":116 + * """ + * cdef: + * int l1 = len(seq1) # <<<<<<<<<<<<<< + * float gappen = 0 + * str gap = '-.-.-' + */ + __pyx_t_1 = PyObject_Length(__pyx_v_seq1); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 116, __pyx_L1_error) + __pyx_v_l1 = __pyx_t_1; + + /* "nw_ec_alignx.pyx":117 + * cdef: + * int l1 = len(seq1) + * float gappen = 0 # <<<<<<<<<<<<<< + * str gap = '-.-.-' + * int i + */ + __pyx_v_gappen = 0.0; + + /* "nw_ec_alignx.pyx":118 + * int l1 = len(seq1) + * float gappen = 0 + * str gap = '-.-.-' # <<<<<<<<<<<<<< + * int i + * float sgaps = 0 + */ + __Pyx_INCREF(__pyx_kp_u__3); + __pyx_v_gap = __pyx_kp_u__3; + + /* "nw_ec_alignx.pyx":120 + * str gap = '-.-.-' + * int i + * float sgaps = 0 # <<<<<<<<<<<<<< + * float ngaps = 0 + * float sgaps2 = 0 + */ + __pyx_v_sgaps = 0.0; + + /* "nw_ec_alignx.pyx":121 + * int i + * float sgaps = 0 + * float ngaps = 0 # <<<<<<<<<<<<<< + * float sgaps2 = 0 + * float ngaps2 = 0 + */ + __pyx_v_ngaps = 0.0; + + /* "nw_ec_alignx.pyx":122 + * float sgaps = 0 + * float ngaps = 0 + * float sgaps2 = 0 # <<<<<<<<<<<<<< + * float ngaps2 = 0 + * float fgaps = 0 + */ + __pyx_v_sgaps2 = 0.0; + + /* "nw_ec_alignx.pyx":123 + * float ngaps = 0 + * float sgaps2 = 0 + * float ngaps2 = 0 # <<<<<<<<<<<<<< + * float fgaps = 0 + * float fgaps2 = 0 + */ + __pyx_v_ngaps2 = 0.0; + + /* "nw_ec_alignx.pyx":124 + * float sgaps2 = 0 + * float ngaps2 = 0 + * float fgaps = 0 # <<<<<<<<<<<<<< + * float fgaps2 = 0 + * float fblock1 = 0 + */ + __pyx_v_fgaps = 0.0; + + /* "nw_ec_alignx.pyx":125 + * float ngaps2 = 0 + * float fgaps = 0 + * float fgaps2 = 0 # <<<<<<<<<<<<<< + * float fblock1 = 0 + * float fblock2 = 0 + */ + __pyx_v_fgaps2 = 0.0; + + /* "nw_ec_alignx.pyx":126 + * float fgaps = 0 + * float fgaps2 = 0 + * float fblock1 = 0 # <<<<<<<<<<<<<< + * float fblock2 = 0 + * str ec1, ec2 + */ + __pyx_v_fblock1 = 0.0; + + /* "nw_ec_alignx.pyx":127 + * float fgaps2 = 0 + * float fblock1 = 0 + * float fblock2 = 0 # <<<<<<<<<<<<<< + * str ec1, ec2 + * bool begin1 = True + */ + __pyx_v_fblock2 = 0.0; + + /* "nw_ec_alignx.pyx":129 + * float fblock2 = 0 + * str ec1, ec2 + * bool begin1 = True # <<<<<<<<<<<<<< + * bool begin2 = True + * bool block1 = True + */ + __Pyx_INCREF(Py_True); + __pyx_v_begin1 = ((PyBoolObject *)Py_True); + + /* "nw_ec_alignx.pyx":130 + * str ec1, ec2 + * bool begin1 = True + * bool begin2 = True # <<<<<<<<<<<<<< + * bool block1 = True + * bool block2 = True + */ + __Pyx_INCREF(Py_True); + __pyx_v_begin2 = ((PyBoolObject *)Py_True); + + /* "nw_ec_alignx.pyx":131 + * bool begin1 = True + * bool begin2 = True + * bool block1 = True # <<<<<<<<<<<<<< + * bool block2 = True + * + */ + __Pyx_INCREF(Py_True); + __pyx_v_block1 = ((PyBoolObject *)Py_True); + + /* "nw_ec_alignx.pyx":132 + * bool begin2 = True + * bool block1 = True + * bool block2 = True # <<<<<<<<<<<<<< + * + * # four cases depending in wich sequence has gaps + */ + __Pyx_INCREF(Py_True); + __pyx_v_block2 = ((PyBoolObject *)Py_True); + + /* "nw_ec_alignx.pyx":135 + * + * # four cases depending in wich sequence has gaps + * if gap not in seq1 and gap not in seq2: # <<<<<<<<<<<<<< + * return gappen # no gaps, return 0 + * elif gap in seq1 and gap not in seq2: + */ + __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_v_gap, __pyx_v_seq1, Py_NE)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 135, __pyx_L1_error) + if (__pyx_t_3) { + } else { + __pyx_t_2 = __pyx_t_3; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_v_gap, __pyx_v_seq2, Py_NE)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 135, __pyx_L1_error) + __pyx_t_2 = __pyx_t_3; + __pyx_L4_bool_binop_done:; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":136 + * # four cases depending in wich sequence has gaps + * if gap not in seq1 and gap not in seq2: + * return gappen # no gaps, return 0 # <<<<<<<<<<<<<< + * elif gap in seq1 and gap not in seq2: + * for i in range(l1): # Gaps only in seq1 + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_4 = PyFloat_FromDouble(__pyx_v_gappen); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 136, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + + /* "nw_ec_alignx.pyx":135 + * + * # four cases depending in wich sequence has gaps + * if gap not in seq1 and gap not in seq2: # <<<<<<<<<<<<<< + * return gappen # no gaps, return 0 + * elif gap in seq1 and gap not in seq2: + */ + } + + /* "nw_ec_alignx.pyx":137 + * if gap not in seq1 and gap not in seq2: + * return gappen # no gaps, return 0 + * elif gap in seq1 and gap not in seq2: # <<<<<<<<<<<<<< + * for i in range(l1): # Gaps only in seq1 + * ec1 = seq1[i] + */ + __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_v_gap, __pyx_v_seq1, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 137, __pyx_L1_error) + if (__pyx_t_3) { + } else { + __pyx_t_2 = __pyx_t_3; + goto __pyx_L6_bool_binop_done; + } + __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_v_gap, __pyx_v_seq2, Py_NE)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 137, __pyx_L1_error) + __pyx_t_2 = __pyx_t_3; + __pyx_L6_bool_binop_done:; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":138 + * return gappen # no gaps, return 0 + * elif gap in seq1 and gap not in seq2: + * for i in range(l1): # Gaps only in seq1 # <<<<<<<<<<<<<< + * ec1 = seq1[i] + * if begin1 == True: + */ + __pyx_t_5 = __pyx_v_l1; + __pyx_t_6 = __pyx_t_5; + for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) { + __pyx_v_i = __pyx_t_7; + + /* "nw_ec_alignx.pyx":139 + * elif gap in seq1 and gap not in seq2: + * for i in range(l1): # Gaps only in seq1 + * ec1 = seq1[i] # <<<<<<<<<<<<<< + * if begin1 == True: + * if ec1 == gap: + */ + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_seq1, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 139, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (!(likely(PyUnicode_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("unicode", __pyx_t_4))) __PYX_ERR(0, 139, __pyx_L1_error) + __Pyx_XDECREF_SET(__pyx_v_ec1, ((PyObject*)__pyx_t_4)); + __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":140 + * for i in range(l1): # Gaps only in seq1 + * ec1 = seq1[i] + * if begin1 == True: # <<<<<<<<<<<<<< + * if ec1 == gap: + * continue + */ + __pyx_t_4 = PyObject_RichCompare(((PyObject *)__pyx_v_begin1), Py_True, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 140, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 140, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":141 + * ec1 = seq1[i] + * if begin1 == True: + * if ec1 == gap: # <<<<<<<<<<<<<< + * continue + * else: + */ + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_ec1, __pyx_v_gap, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 141, __pyx_L1_error) + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":142 + * if begin1 == True: + * if ec1 == gap: + * continue # <<<<<<<<<<<<<< + * else: + * begin1 = False + */ + goto __pyx_L8_continue; + + /* "nw_ec_alignx.pyx":141 + * ec1 = seq1[i] + * if begin1 == True: + * if ec1 == gap: # <<<<<<<<<<<<<< + * continue + * else: + */ + } + + /* "nw_ec_alignx.pyx":144 + * continue + * else: + * begin1 = False # <<<<<<<<<<<<<< + * continue + * else: + */ + /*else*/ { + __Pyx_INCREF(Py_False); + __Pyx_DECREF_SET(__pyx_v_begin1, ((PyBoolObject *)Py_False)); + + /* "nw_ec_alignx.pyx":145 + * else: + * begin1 = False + * continue # <<<<<<<<<<<<<< + * else: + * if ec1 == gap: + */ + goto __pyx_L8_continue; + } + + /* "nw_ec_alignx.pyx":140 + * for i in range(l1): # Gaps only in seq1 + * ec1 = seq1[i] + * if begin1 == True: # <<<<<<<<<<<<<< + * if ec1 == gap: + * continue + */ + } + + /* "nw_ec_alignx.pyx":147 + * continue + * else: + * if ec1 == gap: # <<<<<<<<<<<<<< + * sgaps += 1 + * fblock1 += 1 + */ + /*else*/ { + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_ec1, __pyx_v_gap, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 147, __pyx_L1_error) + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":148 + * else: + * if ec1 == gap: + * sgaps += 1 # <<<<<<<<<<<<<< + * fblock1 += 1 + * if block1 == True: + */ + __pyx_v_sgaps = (__pyx_v_sgaps + 1.0); + + /* "nw_ec_alignx.pyx":149 + * if ec1 == gap: + * sgaps += 1 + * fblock1 += 1 # <<<<<<<<<<<<<< + * if block1 == True: + * ngaps += 1 + */ + __pyx_v_fblock1 = (__pyx_v_fblock1 + 1.0); + + /* "nw_ec_alignx.pyx":150 + * sgaps += 1 + * fblock1 += 1 + * if block1 == True: # <<<<<<<<<<<<<< + * ngaps += 1 + * block1 = False + */ + __pyx_t_4 = PyObject_RichCompare(((PyObject *)__pyx_v_block1), Py_True, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 150, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 150, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":151 + * fblock1 += 1 + * if block1 == True: + * ngaps += 1 # <<<<<<<<<<<<<< + * block1 = False + * else: + */ + __pyx_v_ngaps = (__pyx_v_ngaps + 1.0); + + /* "nw_ec_alignx.pyx":152 + * if block1 == True: + * ngaps += 1 + * block1 = False # <<<<<<<<<<<<<< + * else: + * block1 = True + */ + __Pyx_INCREF(Py_False); + __Pyx_DECREF_SET(__pyx_v_block1, ((PyBoolObject *)Py_False)); + + /* "nw_ec_alignx.pyx":150 + * sgaps += 1 + * fblock1 += 1 + * if block1 == True: # <<<<<<<<<<<<<< + * ngaps += 1 + * block1 = False + */ + } + + /* "nw_ec_alignx.pyx":147 + * continue + * else: + * if ec1 == gap: # <<<<<<<<<<<<<< + * sgaps += 1 + * fblock1 += 1 + */ + goto __pyx_L12; + } + + /* "nw_ec_alignx.pyx":154 + * block1 = False + * else: + * block1 = True # <<<<<<<<<<<<<< + * fblock1 = 0 + * if block1 == False: + */ + /*else*/ { + __Pyx_INCREF(Py_True); + __Pyx_DECREF_SET(__pyx_v_block1, ((PyBoolObject *)Py_True)); + + /* "nw_ec_alignx.pyx":155 + * else: + * block1 = True + * fblock1 = 0 # <<<<<<<<<<<<<< + * if block1 == False: + * sgaps -= fblock1 + */ + __pyx_v_fblock1 = 0.0; + } + __pyx_L12:; + } + __pyx_L8_continue:; + } + + /* "nw_ec_alignx.pyx":156 + * block1 = True + * fblock1 = 0 + * if block1 == False: # <<<<<<<<<<<<<< + * sgaps -= fblock1 + * ngaps -= 1 + */ + __pyx_t_4 = PyObject_RichCompare(((PyObject *)__pyx_v_block1), Py_False, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 156, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 156, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":157 + * fblock1 = 0 + * if block1 == False: + * sgaps -= fblock1 # <<<<<<<<<<<<<< + * ngaps -= 1 + * if sgaps == 0: + */ + __pyx_v_sgaps = (__pyx_v_sgaps - __pyx_v_fblock1); + + /* "nw_ec_alignx.pyx":158 + * if block1 == False: + * sgaps -= fblock1 + * ngaps -= 1 # <<<<<<<<<<<<<< + * if sgaps == 0: + * gappen = 0.0 + */ + __pyx_v_ngaps = (__pyx_v_ngaps - 1.0); + + /* "nw_ec_alignx.pyx":156 + * block1 = True + * fblock1 = 0 + * if block1 == False: # <<<<<<<<<<<<<< + * sgaps -= fblock1 + * ngaps -= 1 + */ + } + + /* "nw_ec_alignx.pyx":159 + * sgaps -= fblock1 + * ngaps -= 1 + * if sgaps == 0: # <<<<<<<<<<<<<< + * gappen = 0.0 + * else: + */ + __pyx_t_2 = (__pyx_v_sgaps == 0.0); + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":160 + * ngaps -= 1 + * if sgaps == 0: + * gappen = 0.0 # <<<<<<<<<<<<<< + * else: + * gappen = ngaps / sgaps / 2 + */ + __pyx_v_gappen = 0.0; + + /* "nw_ec_alignx.pyx":159 + * sgaps -= fblock1 + * ngaps -= 1 + * if sgaps == 0: # <<<<<<<<<<<<<< + * gappen = 0.0 + * else: + */ + goto __pyx_L15; + } + + /* "nw_ec_alignx.pyx":162 + * gappen = 0.0 + * else: + * gappen = ngaps / sgaps / 2 # <<<<<<<<<<<<<< + * return gappen + * elif gap not in seq1 and gap in seq2: + */ + /*else*/ { + if (unlikely(__pyx_v_sgaps == 0)) { + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + __PYX_ERR(0, 162, __pyx_L1_error) + } + __pyx_v_gappen = ((__pyx_v_ngaps / __pyx_v_sgaps) / 2.0); + } + __pyx_L15:; + + /* "nw_ec_alignx.pyx":163 + * else: + * gappen = ngaps / sgaps / 2 + * return gappen # <<<<<<<<<<<<<< + * elif gap not in seq1 and gap in seq2: + * for i in range(l1): # Gaps only in seq2 + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_4 = PyFloat_FromDouble(__pyx_v_gappen); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 163, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + + /* "nw_ec_alignx.pyx":137 + * if gap not in seq1 and gap not in seq2: + * return gappen # no gaps, return 0 + * elif gap in seq1 and gap not in seq2: # <<<<<<<<<<<<<< + * for i in range(l1): # Gaps only in seq1 + * ec1 = seq1[i] + */ + } + + /* "nw_ec_alignx.pyx":164 + * gappen = ngaps / sgaps / 2 + * return gappen + * elif gap not in seq1 and gap in seq2: # <<<<<<<<<<<<<< + * for i in range(l1): # Gaps only in seq2 + * ec2 = seq2[i] + */ + __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_v_gap, __pyx_v_seq1, Py_NE)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 164, __pyx_L1_error) + if (__pyx_t_3) { + } else { + __pyx_t_2 = __pyx_t_3; + goto __pyx_L16_bool_binop_done; + } + __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_v_gap, __pyx_v_seq2, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 164, __pyx_L1_error) + __pyx_t_2 = __pyx_t_3; + __pyx_L16_bool_binop_done:; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":165 + * return gappen + * elif gap not in seq1 and gap in seq2: + * for i in range(l1): # Gaps only in seq2 # <<<<<<<<<<<<<< + * ec2 = seq2[i] + * if begin2 == True: + */ + __pyx_t_5 = __pyx_v_l1; + __pyx_t_6 = __pyx_t_5; + for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) { + __pyx_v_i = __pyx_t_7; + + /* "nw_ec_alignx.pyx":166 + * elif gap not in seq1 and gap in seq2: + * for i in range(l1): # Gaps only in seq2 + * ec2 = seq2[i] # <<<<<<<<<<<<<< + * if begin2 == True: + * if ec2 == gap: + */ + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_seq2, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 166, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (!(likely(PyUnicode_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("unicode", __pyx_t_4))) __PYX_ERR(0, 166, __pyx_L1_error) + __Pyx_XDECREF_SET(__pyx_v_ec2, ((PyObject*)__pyx_t_4)); + __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":167 + * for i in range(l1): # Gaps only in seq2 + * ec2 = seq2[i] + * if begin2 == True: # <<<<<<<<<<<<<< + * if ec2 == gap: + * continue + */ + __pyx_t_4 = PyObject_RichCompare(((PyObject *)__pyx_v_begin2), Py_True, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 167, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":168 + * ec2 = seq2[i] + * if begin2 == True: + * if ec2 == gap: # <<<<<<<<<<<<<< + * continue + * else: + */ + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_ec2, __pyx_v_gap, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 168, __pyx_L1_error) + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":169 + * if begin2 == True: + * if ec2 == gap: + * continue # <<<<<<<<<<<<<< + * else: + * begin2 = False + */ + goto __pyx_L18_continue; + + /* "nw_ec_alignx.pyx":168 + * ec2 = seq2[i] + * if begin2 == True: + * if ec2 == gap: # <<<<<<<<<<<<<< + * continue + * else: + */ + } + + /* "nw_ec_alignx.pyx":171 + * continue + * else: + * begin2 = False # <<<<<<<<<<<<<< + * continue + * else: + */ + /*else*/ { + __Pyx_INCREF(Py_False); + __Pyx_DECREF_SET(__pyx_v_begin2, ((PyBoolObject *)Py_False)); + + /* "nw_ec_alignx.pyx":172 + * else: + * begin2 = False + * continue # <<<<<<<<<<<<<< + * else: + * if ec2 == gap: + */ + goto __pyx_L18_continue; + } + + /* "nw_ec_alignx.pyx":167 + * for i in range(l1): # Gaps only in seq2 + * ec2 = seq2[i] + * if begin2 == True: # <<<<<<<<<<<<<< + * if ec2 == gap: + * continue + */ + } + + /* "nw_ec_alignx.pyx":174 + * continue + * else: + * if ec2 == gap: # <<<<<<<<<<<<<< + * sgaps += 1 + * fblock2 += 1 + */ + /*else*/ { + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_ec2, __pyx_v_gap, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 174, __pyx_L1_error) + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":175 + * else: + * if ec2 == gap: + * sgaps += 1 # <<<<<<<<<<<<<< + * fblock2 += 1 + * if block2 == True: + */ + __pyx_v_sgaps = (__pyx_v_sgaps + 1.0); + + /* "nw_ec_alignx.pyx":176 + * if ec2 == gap: + * sgaps += 1 + * fblock2 += 1 # <<<<<<<<<<<<<< + * if block2 == True: + * ngaps += 1 + */ + __pyx_v_fblock2 = (__pyx_v_fblock2 + 1.0); + + /* "nw_ec_alignx.pyx":177 + * sgaps += 1 + * fblock2 += 1 + * if block2 == True: # <<<<<<<<<<<<<< + * ngaps += 1 + * block2 = False + */ + __pyx_t_4 = PyObject_RichCompare(((PyObject *)__pyx_v_block2), Py_True, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 177, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 177, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":178 + * fblock2 += 1 + * if block2 == True: + * ngaps += 1 # <<<<<<<<<<<<<< + * block2 = False + * else: + */ + __pyx_v_ngaps = (__pyx_v_ngaps + 1.0); + + /* "nw_ec_alignx.pyx":179 + * if block2 == True: + * ngaps += 1 + * block2 = False # <<<<<<<<<<<<<< + * else: + * block2 = True + */ + __Pyx_INCREF(Py_False); + __Pyx_DECREF_SET(__pyx_v_block2, ((PyBoolObject *)Py_False)); + + /* "nw_ec_alignx.pyx":177 + * sgaps += 1 + * fblock2 += 1 + * if block2 == True: # <<<<<<<<<<<<<< + * ngaps += 1 + * block2 = False + */ + } + + /* "nw_ec_alignx.pyx":174 + * continue + * else: + * if ec2 == gap: # <<<<<<<<<<<<<< + * sgaps += 1 + * fblock2 += 1 + */ + goto __pyx_L22; + } + + /* "nw_ec_alignx.pyx":181 + * block2 = False + * else: + * block2 = True # <<<<<<<<<<<<<< + * fblock2 = 0 + * if block2 == False: + */ + /*else*/ { + __Pyx_INCREF(Py_True); + __Pyx_DECREF_SET(__pyx_v_block2, ((PyBoolObject *)Py_True)); + + /* "nw_ec_alignx.pyx":182 + * else: + * block2 = True + * fblock2 = 0 # <<<<<<<<<<<<<< + * if block2 == False: + * sgaps -= fblock2 + */ + __pyx_v_fblock2 = 0.0; + } + __pyx_L22:; + } + __pyx_L18_continue:; + } + + /* "nw_ec_alignx.pyx":183 + * block2 = True + * fblock2 = 0 + * if block2 == False: # <<<<<<<<<<<<<< + * sgaps -= fblock2 + * ngaps -= 1 + */ + __pyx_t_4 = PyObject_RichCompare(((PyObject *)__pyx_v_block2), Py_False, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 183, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 183, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":184 + * fblock2 = 0 + * if block2 == False: + * sgaps -= fblock2 # <<<<<<<<<<<<<< + * ngaps -= 1 + * if sgaps == 0: + */ + __pyx_v_sgaps = (__pyx_v_sgaps - __pyx_v_fblock2); + + /* "nw_ec_alignx.pyx":185 + * if block2 == False: + * sgaps -= fblock2 + * ngaps -= 1 # <<<<<<<<<<<<<< + * if sgaps == 0: + * gappen = 0.0 + */ + __pyx_v_ngaps = (__pyx_v_ngaps - 1.0); + + /* "nw_ec_alignx.pyx":183 + * block2 = True + * fblock2 = 0 + * if block2 == False: # <<<<<<<<<<<<<< + * sgaps -= fblock2 + * ngaps -= 1 + */ + } + + /* "nw_ec_alignx.pyx":186 + * sgaps -= fblock2 + * ngaps -= 1 + * if sgaps == 0: # <<<<<<<<<<<<<< + * gappen = 0.0 + * else: + */ + __pyx_t_2 = (__pyx_v_sgaps == 0.0); + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":187 + * ngaps -= 1 + * if sgaps == 0: + * gappen = 0.0 # <<<<<<<<<<<<<< + * else: + * gappen = ngaps / sgaps / 2 + */ + __pyx_v_gappen = 0.0; + + /* "nw_ec_alignx.pyx":186 + * sgaps -= fblock2 + * ngaps -= 1 + * if sgaps == 0: # <<<<<<<<<<<<<< + * gappen = 0.0 + * else: + */ + goto __pyx_L25; + } + + /* "nw_ec_alignx.pyx":189 + * gappen = 0.0 + * else: + * gappen = ngaps / sgaps / 2 # <<<<<<<<<<<<<< + * else: + * for i in range(l1): + */ + /*else*/ { + if (unlikely(__pyx_v_sgaps == 0)) { + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + __PYX_ERR(0, 189, __pyx_L1_error) + } + __pyx_v_gappen = ((__pyx_v_ngaps / __pyx_v_sgaps) / 2.0); + } + __pyx_L25:; + + /* "nw_ec_alignx.pyx":164 + * gappen = ngaps / sgaps / 2 + * return gappen + * elif gap not in seq1 and gap in seq2: # <<<<<<<<<<<<<< + * for i in range(l1): # Gaps only in seq2 + * ec2 = seq2[i] + */ + goto __pyx_L3; + } + + /* "nw_ec_alignx.pyx":191 + * gappen = ngaps / sgaps / 2 + * else: + * for i in range(l1): # <<<<<<<<<<<<<< + * ec1 = seq1[i] + * ec2 = seq2[i] + */ + /*else*/ { + __pyx_t_5 = __pyx_v_l1; + __pyx_t_6 = __pyx_t_5; + for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) { + __pyx_v_i = __pyx_t_7; + + /* "nw_ec_alignx.pyx":192 + * else: + * for i in range(l1): + * ec1 = seq1[i] # <<<<<<<<<<<<<< + * ec2 = seq2[i] + * if begin1 == True: + */ + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_seq1, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 192, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (!(likely(PyUnicode_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("unicode", __pyx_t_4))) __PYX_ERR(0, 192, __pyx_L1_error) + __Pyx_XDECREF_SET(__pyx_v_ec1, ((PyObject*)__pyx_t_4)); + __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":193 + * for i in range(l1): + * ec1 = seq1[i] + * ec2 = seq2[i] # <<<<<<<<<<<<<< + * if begin1 == True: + * if ec1 == gap: + */ + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_seq2, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 193, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (!(likely(PyUnicode_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("unicode", __pyx_t_4))) __PYX_ERR(0, 193, __pyx_L1_error) + __Pyx_XDECREF_SET(__pyx_v_ec2, ((PyObject*)__pyx_t_4)); + __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":194 + * ec1 = seq1[i] + * ec2 = seq2[i] + * if begin1 == True: # <<<<<<<<<<<<<< + * if ec1 == gap: + * pass + */ + __pyx_t_4 = PyObject_RichCompare(((PyObject *)__pyx_v_begin1), Py_True, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 194, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 194, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":195 + * ec2 = seq2[i] + * if begin1 == True: + * if ec1 == gap: # <<<<<<<<<<<<<< + * pass + * else: + */ + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_ec1, __pyx_v_gap, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 195, __pyx_L1_error) + if (__pyx_t_2) { + goto __pyx_L29; + } + + /* "nw_ec_alignx.pyx":198 + * pass + * else: + * begin1 = False # <<<<<<<<<<<<<< + * pass + * else: + */ + /*else*/ { + __Pyx_INCREF(Py_False); + __Pyx_DECREF_SET(__pyx_v_begin1, ((PyBoolObject *)Py_False)); + } + __pyx_L29:; + + /* "nw_ec_alignx.pyx":194 + * ec1 = seq1[i] + * ec2 = seq2[i] + * if begin1 == True: # <<<<<<<<<<<<<< + * if ec1 == gap: + * pass + */ + goto __pyx_L28; + } + + /* "nw_ec_alignx.pyx":201 + * pass + * else: + * if ec1 == gap: # <<<<<<<<<<<<<< + * sgaps += 1 + * fblock1 += 1 + */ + /*else*/ { + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_ec1, __pyx_v_gap, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 201, __pyx_L1_error) + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":202 + * else: + * if ec1 == gap: + * sgaps += 1 # <<<<<<<<<<<<<< + * fblock1 += 1 + * if block1 == True: + */ + __pyx_v_sgaps = (__pyx_v_sgaps + 1.0); + + /* "nw_ec_alignx.pyx":203 + * if ec1 == gap: + * sgaps += 1 + * fblock1 += 1 # <<<<<<<<<<<<<< + * if block1 == True: + * ngaps += 1 + */ + __pyx_v_fblock1 = (__pyx_v_fblock1 + 1.0); + + /* "nw_ec_alignx.pyx":204 + * sgaps += 1 + * fblock1 += 1 + * if block1 == True: # <<<<<<<<<<<<<< + * ngaps += 1 + * block1 = False + */ + __pyx_t_4 = PyObject_RichCompare(((PyObject *)__pyx_v_block1), Py_True, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 204, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 204, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":205 + * fblock1 += 1 + * if block1 == True: + * ngaps += 1 # <<<<<<<<<<<<<< + * block1 = False + * else: + */ + __pyx_v_ngaps = (__pyx_v_ngaps + 1.0); + + /* "nw_ec_alignx.pyx":206 + * if block1 == True: + * ngaps += 1 + * block1 = False # <<<<<<<<<<<<<< + * else: + * block1 = True + */ + __Pyx_INCREF(Py_False); + __Pyx_DECREF_SET(__pyx_v_block1, ((PyBoolObject *)Py_False)); + + /* "nw_ec_alignx.pyx":204 + * sgaps += 1 + * fblock1 += 1 + * if block1 == True: # <<<<<<<<<<<<<< + * ngaps += 1 + * block1 = False + */ + } + + /* "nw_ec_alignx.pyx":201 + * pass + * else: + * if ec1 == gap: # <<<<<<<<<<<<<< + * sgaps += 1 + * fblock1 += 1 + */ + goto __pyx_L30; + } + + /* "nw_ec_alignx.pyx":208 + * block1 = False + * else: + * block1 = True # <<<<<<<<<<<<<< + * fblock1 = 0 + * ec2 = seq2[i] + */ + /*else*/ { + __Pyx_INCREF(Py_True); + __Pyx_DECREF_SET(__pyx_v_block1, ((PyBoolObject *)Py_True)); + + /* "nw_ec_alignx.pyx":209 + * else: + * block1 = True + * fblock1 = 0 # <<<<<<<<<<<<<< + * ec2 = seq2[i] + * if begin2 == True: + */ + __pyx_v_fblock1 = 0.0; + } + __pyx_L30:; + } + __pyx_L28:; + + /* "nw_ec_alignx.pyx":210 + * block1 = True + * fblock1 = 0 + * ec2 = seq2[i] # <<<<<<<<<<<<<< + * if begin2 == True: + * if ec2 == gap: + */ + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_seq2, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 210, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (!(likely(PyUnicode_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("unicode", __pyx_t_4))) __PYX_ERR(0, 210, __pyx_L1_error) + __Pyx_DECREF_SET(__pyx_v_ec2, ((PyObject*)__pyx_t_4)); + __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":211 + * fblock1 = 0 + * ec2 = seq2[i] + * if begin2 == True: # <<<<<<<<<<<<<< + * if ec2 == gap: + * pass + */ + __pyx_t_4 = PyObject_RichCompare(((PyObject *)__pyx_v_begin2), Py_True, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 211, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 211, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":212 + * ec2 = seq2[i] + * if begin2 == True: + * if ec2 == gap: # <<<<<<<<<<<<<< + * pass + * else: + */ + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_ec2, __pyx_v_gap, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 212, __pyx_L1_error) + if (__pyx_t_2) { + goto __pyx_L33; + } + + /* "nw_ec_alignx.pyx":215 + * pass + * else: + * begin2 = False # <<<<<<<<<<<<<< + * pass + * else: + */ + /*else*/ { + __Pyx_INCREF(Py_False); + __Pyx_DECREF_SET(__pyx_v_begin2, ((PyBoolObject *)Py_False)); + } + __pyx_L33:; + + /* "nw_ec_alignx.pyx":211 + * fblock1 = 0 + * ec2 = seq2[i] + * if begin2 == True: # <<<<<<<<<<<<<< + * if ec2 == gap: + * pass + */ + goto __pyx_L32; + } + + /* "nw_ec_alignx.pyx":218 + * pass + * else: + * if ec2 == gap: # <<<<<<<<<<<<<< + * sgaps2 += 1 + * fblock2 += 1 + */ + /*else*/ { + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_ec2, __pyx_v_gap, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 218, __pyx_L1_error) + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":219 + * else: + * if ec2 == gap: + * sgaps2 += 1 # <<<<<<<<<<<<<< + * fblock2 += 1 + * if block2 == True: + */ + __pyx_v_sgaps2 = (__pyx_v_sgaps2 + 1.0); + + /* "nw_ec_alignx.pyx":220 + * if ec2 == gap: + * sgaps2 += 1 + * fblock2 += 1 # <<<<<<<<<<<<<< + * if block2 == True: + * ngaps2 += 1 + */ + __pyx_v_fblock2 = (__pyx_v_fblock2 + 1.0); + + /* "nw_ec_alignx.pyx":221 + * sgaps2 += 1 + * fblock2 += 1 + * if block2 == True: # <<<<<<<<<<<<<< + * ngaps2 += 1 + * block2 = False + */ + __pyx_t_4 = PyObject_RichCompare(((PyObject *)__pyx_v_block2), Py_True, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 221, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 221, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":222 + * fblock2 += 1 + * if block2 == True: + * ngaps2 += 1 # <<<<<<<<<<<<<< + * block2 = False + * else: + */ + __pyx_v_ngaps2 = (__pyx_v_ngaps2 + 1.0); + + /* "nw_ec_alignx.pyx":223 + * if block2 == True: + * ngaps2 += 1 + * block2 = False # <<<<<<<<<<<<<< + * else: + * block2 = True + */ + __Pyx_INCREF(Py_False); + __Pyx_DECREF_SET(__pyx_v_block2, ((PyBoolObject *)Py_False)); + + /* "nw_ec_alignx.pyx":221 + * sgaps2 += 1 + * fblock2 += 1 + * if block2 == True: # <<<<<<<<<<<<<< + * ngaps2 += 1 + * block2 = False + */ + } + + /* "nw_ec_alignx.pyx":218 + * pass + * else: + * if ec2 == gap: # <<<<<<<<<<<<<< + * sgaps2 += 1 + * fblock2 += 1 + */ + goto __pyx_L34; + } + + /* "nw_ec_alignx.pyx":225 + * block2 = False + * else: + * block2 = True # <<<<<<<<<<<<<< + * fblock2 = 0 + * if block1 == False: + */ + /*else*/ { + __Pyx_INCREF(Py_True); + __Pyx_DECREF_SET(__pyx_v_block2, ((PyBoolObject *)Py_True)); + + /* "nw_ec_alignx.pyx":226 + * else: + * block2 = True + * fblock2 = 0 # <<<<<<<<<<<<<< + * if block1 == False: + * sgaps -= fblock1 + */ + __pyx_v_fblock2 = 0.0; + } + __pyx_L34:; + } + __pyx_L32:; + } + + /* "nw_ec_alignx.pyx":227 + * block2 = True + * fblock2 = 0 + * if block1 == False: # <<<<<<<<<<<<<< + * sgaps -= fblock1 + * ngaps -= 1 + */ + __pyx_t_4 = PyObject_RichCompare(((PyObject *)__pyx_v_block1), Py_False, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 227, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 227, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":228 + * fblock2 = 0 + * if block1 == False: + * sgaps -= fblock1 # <<<<<<<<<<<<<< + * ngaps -= 1 + * if block2 == False: + */ + __pyx_v_sgaps = (__pyx_v_sgaps - __pyx_v_fblock1); + + /* "nw_ec_alignx.pyx":229 + * if block1 == False: + * sgaps -= fblock1 + * ngaps -= 1 # <<<<<<<<<<<<<< + * if block2 == False: + * sgaps2 -= fblock2 + */ + __pyx_v_ngaps = (__pyx_v_ngaps - 1.0); + + /* "nw_ec_alignx.pyx":227 + * block2 = True + * fblock2 = 0 + * if block1 == False: # <<<<<<<<<<<<<< + * sgaps -= fblock1 + * ngaps -= 1 + */ + } + + /* "nw_ec_alignx.pyx":230 + * sgaps -= fblock1 + * ngaps -= 1 + * if block2 == False: # <<<<<<<<<<<<<< + * sgaps2 -= fblock2 + * ngaps2 -= 1 + */ + __pyx_t_4 = PyObject_RichCompare(((PyObject *)__pyx_v_block2), Py_False, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 230, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 230, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":231 + * ngaps -= 1 + * if block2 == False: + * sgaps2 -= fblock2 # <<<<<<<<<<<<<< + * ngaps2 -= 1 + * if ngaps <= 0 and ngaps2 > 0: + */ + __pyx_v_sgaps2 = (__pyx_v_sgaps2 - __pyx_v_fblock2); + + /* "nw_ec_alignx.pyx":232 + * if block2 == False: + * sgaps2 -= fblock2 + * ngaps2 -= 1 # <<<<<<<<<<<<<< + * if ngaps <= 0 and ngaps2 > 0: + * gappen = (ngaps2 / sgaps2) / 2 + */ + __pyx_v_ngaps2 = (__pyx_v_ngaps2 - 1.0); + + /* "nw_ec_alignx.pyx":230 + * sgaps -= fblock1 + * ngaps -= 1 + * if block2 == False: # <<<<<<<<<<<<<< + * sgaps2 -= fblock2 + * ngaps2 -= 1 + */ + } + + /* "nw_ec_alignx.pyx":233 + * sgaps2 -= fblock2 + * ngaps2 -= 1 + * if ngaps <= 0 and ngaps2 > 0: # <<<<<<<<<<<<<< + * gappen = (ngaps2 / sgaps2) / 2 + * elif ngaps > 0 and ngaps2 <= 0: + */ + __pyx_t_3 = (__pyx_v_ngaps <= 0.0); + if (__pyx_t_3) { + } else { + __pyx_t_2 = __pyx_t_3; + goto __pyx_L39_bool_binop_done; + } + __pyx_t_3 = (__pyx_v_ngaps2 > 0.0); + __pyx_t_2 = __pyx_t_3; + __pyx_L39_bool_binop_done:; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":234 + * ngaps2 -= 1 + * if ngaps <= 0 and ngaps2 > 0: + * gappen = (ngaps2 / sgaps2) / 2 # <<<<<<<<<<<<<< + * elif ngaps > 0 and ngaps2 <= 0: + * gappen = (ngaps / sgaps) / 2 + */ + if (unlikely(__pyx_v_sgaps2 == 0)) { + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + __PYX_ERR(0, 234, __pyx_L1_error) + } + __pyx_v_gappen = ((__pyx_v_ngaps2 / __pyx_v_sgaps2) / 2.0); + + /* "nw_ec_alignx.pyx":233 + * sgaps2 -= fblock2 + * ngaps2 -= 1 + * if ngaps <= 0 and ngaps2 > 0: # <<<<<<<<<<<<<< + * gappen = (ngaps2 / sgaps2) / 2 + * elif ngaps > 0 and ngaps2 <= 0: + */ + goto __pyx_L38; + } + + /* "nw_ec_alignx.pyx":235 + * if ngaps <= 0 and ngaps2 > 0: + * gappen = (ngaps2 / sgaps2) / 2 + * elif ngaps > 0 and ngaps2 <= 0: # <<<<<<<<<<<<<< + * gappen = (ngaps / sgaps) / 2 + * elif ngaps <= 0 and ngaps2 <= 0: + */ + __pyx_t_3 = (__pyx_v_ngaps > 0.0); + if (__pyx_t_3) { + } else { + __pyx_t_2 = __pyx_t_3; + goto __pyx_L41_bool_binop_done; + } + __pyx_t_3 = (__pyx_v_ngaps2 <= 0.0); + __pyx_t_2 = __pyx_t_3; + __pyx_L41_bool_binop_done:; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":236 + * gappen = (ngaps2 / sgaps2) / 2 + * elif ngaps > 0 and ngaps2 <= 0: + * gappen = (ngaps / sgaps) / 2 # <<<<<<<<<<<<<< + * elif ngaps <= 0 and ngaps2 <= 0: + * gappen = 0.0 + */ + if (unlikely(__pyx_v_sgaps == 0)) { + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + __PYX_ERR(0, 236, __pyx_L1_error) + } + __pyx_v_gappen = ((__pyx_v_ngaps / __pyx_v_sgaps) / 2.0); + + /* "nw_ec_alignx.pyx":235 + * if ngaps <= 0 and ngaps2 > 0: + * gappen = (ngaps2 / sgaps2) / 2 + * elif ngaps > 0 and ngaps2 <= 0: # <<<<<<<<<<<<<< + * gappen = (ngaps / sgaps) / 2 + * elif ngaps <= 0 and ngaps2 <= 0: + */ + goto __pyx_L38; + } + + /* "nw_ec_alignx.pyx":237 + * elif ngaps > 0 and ngaps2 <= 0: + * gappen = (ngaps / sgaps) / 2 + * elif ngaps <= 0 and ngaps2 <= 0: # <<<<<<<<<<<<<< + * gappen = 0.0 + * else: + */ + __pyx_t_3 = (__pyx_v_ngaps <= 0.0); + if (__pyx_t_3) { + } else { + __pyx_t_2 = __pyx_t_3; + goto __pyx_L43_bool_binop_done; + } + __pyx_t_3 = (__pyx_v_ngaps2 <= 0.0); + __pyx_t_2 = __pyx_t_3; + __pyx_L43_bool_binop_done:; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":238 + * gappen = (ngaps / sgaps) / 2 + * elif ngaps <= 0 and ngaps2 <= 0: + * gappen = 0.0 # <<<<<<<<<<<<<< + * else: + * gappen = ((ngaps / sgaps) + (ngaps2 / sgaps2)) / 2 + */ + __pyx_v_gappen = 0.0; + + /* "nw_ec_alignx.pyx":237 + * elif ngaps > 0 and ngaps2 <= 0: + * gappen = (ngaps / sgaps) / 2 + * elif ngaps <= 0 and ngaps2 <= 0: # <<<<<<<<<<<<<< + * gappen = 0.0 + * else: + */ + goto __pyx_L38; + } + + /* "nw_ec_alignx.pyx":240 + * gappen = 0.0 + * else: + * gappen = ((ngaps / sgaps) + (ngaps2 / sgaps2)) / 2 # <<<<<<<<<<<<<< + * return gappen + * + */ + /*else*/ { + if (unlikely(__pyx_v_sgaps == 0)) { + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + __PYX_ERR(0, 240, __pyx_L1_error) + } + if (unlikely(__pyx_v_sgaps2 == 0)) { + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + __PYX_ERR(0, 240, __pyx_L1_error) + } + __pyx_v_gappen = (((__pyx_v_ngaps / __pyx_v_sgaps) + (__pyx_v_ngaps2 / __pyx_v_sgaps2)) / 2.0); + } + __pyx_L38:; + } + __pyx_L3:; + + /* "nw_ec_alignx.pyx":241 + * else: + * gappen = ((ngaps / sgaps) + (ngaps2 / sgaps2)) / 2 + * return gappen # <<<<<<<<<<<<<< + * + * # better performance + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_4 = PyFloat_FromDouble(__pyx_v_gappen); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 241, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + + /* "nw_ec_alignx.pyx":109 + * + * + * cdef gappen(seq1, seq2): # <<<<<<<<<<<<<< + * """Returns the number + * Keyword Arguments: + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("nw_ec_alignx.gappen", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_gap); + __Pyx_XDECREF(__pyx_v_ec1); + __Pyx_XDECREF(__pyx_v_ec2); + __Pyx_XDECREF((PyObject *)__pyx_v_begin1); + __Pyx_XDECREF((PyObject *)__pyx_v_begin2); + __Pyx_XDECREF((PyObject *)__pyx_v_block1); + __Pyx_XDECREF((PyObject *)__pyx_v_block2); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "nw_ec_alignx.pyx":246 + * + * + * @cython.boundscheck(False) # <<<<<<<<<<<<<< + * @cython.wraparound(False) + * def scoring(np.ndarray[DTYPEF_t, ndim=2] mat, dict ecs, seq1, seq2, + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_12nw_ec_alignx_3scoring(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_12nw_ec_alignx_2scoring, " This function evaluates a pair of alignmed ESS and returns an entroy\n based similarity (distance) score. This value is in the range 0-1. 0 means\n more similar sequences and 1 means dissimilar sequences.\n\n The score tries to recall the fitness function proposed in Ortegon, et al.\n 2015. Comput Struct Biotechnol J. 9;13.\n\n Arguments:\n - `mat`: EC number similarity (distance) matrix\n - `ecs`: EC number dictionary. Keys are EC numbers (3 levels of\n classification) and values are indices to similarity matrix (mat)\n - `seq1`: enzymatic step sequence 1, list of (unaligned) EC numbers\n - `seq2`: enzymatic step sequence 2, list of (unaligned) EC numbers\n - `gap`: gap penalties, default = 1\n - `fhomo`: Weight factor to multiplicate the homogeneity fraction of score\n - `fpengap`: Weight factor to multiplicate the gap penalization\n "); +static PyMethodDef __pyx_mdef_12nw_ec_alignx_3scoring = {"scoring", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_12nw_ec_alignx_3scoring, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_12nw_ec_alignx_2scoring}; +static PyObject *__pyx_pw_12nw_ec_alignx_3scoring(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyArrayObject *__pyx_v_mat = 0; + PyObject *__pyx_v_ecs = 0; + PyObject *__pyx_v_seq1 = 0; + PyObject *__pyx_v_seq2 = 0; + float __pyx_v_gap; + float __pyx_v_fhomo; + float __pyx_v_fpengap; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[7] = {0,0,0,0,0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("scoring (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_mat,&__pyx_n_s_ecs,&__pyx_n_s_seq1,&__pyx_n_s_seq2,&__pyx_n_s_gap,&__pyx_n_s_fhomo,&__pyx_n_s_fpengap,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_mat)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 246, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_ecs)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 246, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("scoring", 0, 4, 7, 1); __PYX_ERR(0, 246, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_seq1)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 246, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("scoring", 0, 4, 7, 2); __PYX_ERR(0, 246, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_seq2)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 246, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("scoring", 0, 4, 7, 3); __PYX_ERR(0, 246, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gap); + if (value) { values[4] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 246, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_fhomo); + if (value) { values[5] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 246, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_fpengap); + if (value) { values[6] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 246, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "scoring") < 0)) __PYX_ERR(0, 246, __pyx_L3_error) + } + } else { + switch (__pyx_nargs) { + case 7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_mat = ((PyArrayObject *)values[0]); + __pyx_v_ecs = ((PyObject*)values[1]); + __pyx_v_seq1 = values[2]; + __pyx_v_seq2 = values[3]; + if (values[4]) { + __pyx_v_gap = __pyx_PyFloat_AsFloat(values[4]); if (unlikely((__pyx_v_gap == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 249, __pyx_L3_error) + } else { + __pyx_v_gap = ((float)((float)1.0)); + } + if (values[5]) { + __pyx_v_fhomo = __pyx_PyFloat_AsFloat(values[5]); if (unlikely((__pyx_v_fhomo == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 249, __pyx_L3_error) + } else { + __pyx_v_fhomo = ((float)((double)0.95)); + } + if (values[6]) { + __pyx_v_fpengap = __pyx_PyFloat_AsFloat(values[6]); if (unlikely((__pyx_v_fpengap == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 249, __pyx_L3_error) + } else { + __pyx_v_fpengap = ((float)((double)0.05)); + } + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("scoring", 0, 4, 7, __pyx_nargs); __PYX_ERR(0, 246, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("nw_ec_alignx.scoring", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_5numpy_ndarray, 1, "mat", 0))) __PYX_ERR(0, 248, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ecs), (&PyDict_Type), 1, "ecs", 1))) __PYX_ERR(0, 248, __pyx_L1_error) + __pyx_r = __pyx_pf_12nw_ec_alignx_2scoring(__pyx_self, __pyx_v_mat, __pyx_v_ecs, __pyx_v_seq1, __pyx_v_seq2, __pyx_v_gap, __pyx_v_fhomo, __pyx_v_fpengap); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_12nw_ec_alignx_2scoring(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_mat, PyObject *__pyx_v_ecs, PyObject *__pyx_v_seq1, PyObject *__pyx_v_seq2, float __pyx_v_gap, float __pyx_v_fhomo, float __pyx_v_fpengap) { + unsigned int __pyx_v_length; + unsigned int __pyx_v_i; + unsigned int __pyx_v_x; + unsigned int __pyx_v_y; + float __pyx_v_pengap; + float __pyx_v_score; + float __pyx_v_homo; + PyObject *__pyx_v_ec1 = 0; + PyObject *__pyx_v_ec2 = 0; + PyObject *__pyx_v_gapstr = 0; + PyObject *__pyx_v_dotstr = 0; + __Pyx_LocalBuf_ND __pyx_pybuffernd_mat; + __Pyx_Buffer __pyx_pybuffer_mat; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + float __pyx_t_1; + int __pyx_t_2; + Py_ssize_t __pyx_t_3; + Py_ssize_t __pyx_t_4; + unsigned int __pyx_t_5; + unsigned int __pyx_t_6; + unsigned int __pyx_t_7; + PyObject *__pyx_t_8 = NULL; + int __pyx_t_9; + unsigned int __pyx_t_10; + size_t __pyx_t_11; + size_t __pyx_t_12; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("scoring", 1); + __pyx_pybuffer_mat.pybuffer.buf = NULL; + __pyx_pybuffer_mat.refcount = 0; + __pyx_pybuffernd_mat.data = NULL; + __pyx_pybuffernd_mat.rcbuffer = &__pyx_pybuffer_mat; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mat.rcbuffer->pybuffer, (PyObject*)__pyx_v_mat, &__Pyx_TypeInfo_nn___pyx_t_12nw_ec_alignx_DTYPEF_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 246, __pyx_L1_error) + } + __pyx_pybuffernd_mat.diminfo[0].strides = __pyx_pybuffernd_mat.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_mat.diminfo[0].shape = __pyx_pybuffernd_mat.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_mat.diminfo[1].strides = __pyx_pybuffernd_mat.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_mat.diminfo[1].shape = __pyx_pybuffernd_mat.rcbuffer->pybuffer.shape[1]; + + /* "nw_ec_alignx.pyx":270 + * unsigned int length, i, x, y + * float pengap, score + * float homo = 0.0 # <<<<<<<<<<<<<< + * str ec1, ec2 + * str gapstr = '-.-.-' + */ + __pyx_v_homo = 0.0; + + /* "nw_ec_alignx.pyx":272 + * float homo = 0.0 + * str ec1, ec2 + * str gapstr = '-.-.-' # <<<<<<<<<<<<<< + * str dotstr = '...' + * # are sequences of same length? + */ + __Pyx_INCREF(__pyx_kp_u__3); + __pyx_v_gapstr = __pyx_kp_u__3; + + /* "nw_ec_alignx.pyx":273 + * str ec1, ec2 + * str gapstr = '-.-.-' + * str dotstr = '...' # <<<<<<<<<<<<<< + * # are sequences of same length? + * assert 0.99999 < (fhomo + fpengap) < 1.0001, \ + */ + __Pyx_INCREF(__pyx_kp_u__4); + __pyx_v_dotstr = __pyx_kp_u__4; + + /* "nw_ec_alignx.pyx":275 + * str dotstr = '...' + * # are sequences of same length? + * assert 0.99999 < (fhomo + fpengap) < 1.0001, \ # <<<<<<<<<<<<<< + * 'fhomo + fpengap must sum aprox. 1' + * assert len(seq1) == len(seq2), \ + */ + #ifndef CYTHON_WITHOUT_ASSERTIONS + if (unlikely(__pyx_assertions_enabled())) { + __pyx_t_1 = (__pyx_v_fhomo + __pyx_v_fpengap); + __pyx_t_2 = (0.99999 < __pyx_t_1); + if (__pyx_t_2) { + __pyx_t_2 = (__pyx_t_1 < 1.0001); + } + if (unlikely(!__pyx_t_2)) { + __Pyx_Raise(__pyx_builtin_AssertionError, __pyx_kp_u_fhomo_fpengap_must_sum_aprox_1, 0, 0); + __PYX_ERR(0, 275, __pyx_L1_error) + } + } + #else + if ((1)); else __PYX_ERR(0, 275, __pyx_L1_error) + #endif + + /* "nw_ec_alignx.pyx":277 + * assert 0.99999 < (fhomo + fpengap) < 1.0001, \ + * 'fhomo + fpengap must sum aprox. 1' + * assert len(seq1) == len(seq2), \ # <<<<<<<<<<<<<< + * 'The aligned sequences must be of the same length' + * length = len(seq1) # Alignment length + */ + #ifndef CYTHON_WITHOUT_ASSERTIONS + if (unlikely(__pyx_assertions_enabled())) { + __pyx_t_3 = PyObject_Length(__pyx_v_seq1); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(0, 277, __pyx_L1_error) + __pyx_t_4 = PyObject_Length(__pyx_v_seq2); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(0, 277, __pyx_L1_error) + __pyx_t_2 = (__pyx_t_3 == __pyx_t_4); + if (unlikely(!__pyx_t_2)) { + __Pyx_Raise(__pyx_builtin_AssertionError, __pyx_kp_u_The_aligned_sequences_must_be_of, 0, 0); + __PYX_ERR(0, 277, __pyx_L1_error) + } + } + #else + if ((1)); else __PYX_ERR(0, 277, __pyx_L1_error) + #endif + + /* "nw_ec_alignx.pyx":279 + * assert len(seq1) == len(seq2), \ + * 'The aligned sequences must be of the same length' + * length = len(seq1) # Alignment length # <<<<<<<<<<<<<< + * # -- Sum homogeneity evaluation + * for i in range(length): + */ + __pyx_t_4 = PyObject_Length(__pyx_v_seq1); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(0, 279, __pyx_L1_error) + __pyx_v_length = __pyx_t_4; + + /* "nw_ec_alignx.pyx":281 + * length = len(seq1) # Alignment length + * # -- Sum homogeneity evaluation + * for i in range(length): # <<<<<<<<<<<<<< + * ec1 = seq1[i] + * ec2 = seq2[i] + */ + __pyx_t_5 = __pyx_v_length; + __pyx_t_6 = __pyx_t_5; + for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) { + __pyx_v_i = __pyx_t_7; + + /* "nw_ec_alignx.pyx":282 + * # -- Sum homogeneity evaluation + * for i in range(length): + * ec1 = seq1[i] # <<<<<<<<<<<<<< + * ec2 = seq2[i] + * if ec1 == gapstr or ec2 == gapstr: # and s1[i] != s2[1] + */ + __pyx_t_8 = __Pyx_GetItemInt(__pyx_v_seq1, __pyx_v_i, unsigned int, 0, __Pyx_PyInt_From_unsigned_int, 0, 0, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 282, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + if (!(likely(PyUnicode_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("unicode", __pyx_t_8))) __PYX_ERR(0, 282, __pyx_L1_error) + __Pyx_XDECREF_SET(__pyx_v_ec1, ((PyObject*)__pyx_t_8)); + __pyx_t_8 = 0; + + /* "nw_ec_alignx.pyx":283 + * for i in range(length): + * ec1 = seq1[i] + * ec2 = seq2[i] # <<<<<<<<<<<<<< + * if ec1 == gapstr or ec2 == gapstr: # and s1[i] != s2[1] + * homo += gap # gap homogeneity = 1 + */ + __pyx_t_8 = __Pyx_GetItemInt(__pyx_v_seq2, __pyx_v_i, unsigned int, 0, __Pyx_PyInt_From_unsigned_int, 0, 0, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 283, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + if (!(likely(PyUnicode_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("unicode", __pyx_t_8))) __PYX_ERR(0, 283, __pyx_L1_error) + __Pyx_XDECREF_SET(__pyx_v_ec2, ((PyObject*)__pyx_t_8)); + __pyx_t_8 = 0; + + /* "nw_ec_alignx.pyx":284 + * ec1 = seq1[i] + * ec2 = seq2[i] + * if ec1 == gapstr or ec2 == gapstr: # and s1[i] != s2[1] # <<<<<<<<<<<<<< + * homo += gap # gap homogeneity = 1 + * elif ec1 == dotstr or ec2 == dotstr: + */ + __pyx_t_9 = (__Pyx_PyUnicode_Equals(__pyx_v_ec1, __pyx_v_gapstr, Py_EQ)); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 284, __pyx_L1_error) + if (!__pyx_t_9) { + } else { + __pyx_t_2 = __pyx_t_9; + goto __pyx_L6_bool_binop_done; + } + __pyx_t_9 = (__Pyx_PyUnicode_Equals(__pyx_v_ec2, __pyx_v_gapstr, Py_EQ)); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 284, __pyx_L1_error) + __pyx_t_2 = __pyx_t_9; + __pyx_L6_bool_binop_done:; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":285 + * ec2 = seq2[i] + * if ec1 == gapstr or ec2 == gapstr: # and s1[i] != s2[1] + * homo += gap # gap homogeneity = 1 # <<<<<<<<<<<<<< + * elif ec1 == dotstr or ec2 == dotstr: + * pass + */ + __pyx_v_homo = (__pyx_v_homo + __pyx_v_gap); + + /* "nw_ec_alignx.pyx":284 + * ec1 = seq1[i] + * ec2 = seq2[i] + * if ec1 == gapstr or ec2 == gapstr: # and s1[i] != s2[1] # <<<<<<<<<<<<<< + * homo += gap # gap homogeneity = 1 + * elif ec1 == dotstr or ec2 == dotstr: + */ + goto __pyx_L5; + } + + /* "nw_ec_alignx.pyx":286 + * if ec1 == gapstr or ec2 == gapstr: # and s1[i] != s2[1] + * homo += gap # gap homogeneity = 1 + * elif ec1 == dotstr or ec2 == dotstr: # <<<<<<<<<<<<<< + * pass + * elif ec1 == '' or ec2 == '': + */ + __pyx_t_9 = (__Pyx_PyUnicode_Equals(__pyx_v_ec1, __pyx_v_dotstr, Py_EQ)); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 286, __pyx_L1_error) + if (!__pyx_t_9) { + } else { + __pyx_t_2 = __pyx_t_9; + goto __pyx_L8_bool_binop_done; + } + __pyx_t_9 = (__Pyx_PyUnicode_Equals(__pyx_v_ec2, __pyx_v_dotstr, Py_EQ)); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 286, __pyx_L1_error) + __pyx_t_2 = __pyx_t_9; + __pyx_L8_bool_binop_done:; + if (__pyx_t_2) { + goto __pyx_L5; + } + + /* "nw_ec_alignx.pyx":288 + * elif ec1 == dotstr or ec2 == dotstr: + * pass + * elif ec1 == '' or ec2 == '': # <<<<<<<<<<<<<< + * pass + * else: + */ + __pyx_t_9 = (__Pyx_PyUnicode_Equals(__pyx_v_ec1, __pyx_kp_u__5, Py_EQ)); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 288, __pyx_L1_error) + if (!__pyx_t_9) { + } else { + __pyx_t_2 = __pyx_t_9; + goto __pyx_L10_bool_binop_done; + } + __pyx_t_9 = (__Pyx_PyUnicode_Equals(__pyx_v_ec2, __pyx_kp_u__5, Py_EQ)); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 288, __pyx_L1_error) + __pyx_t_2 = __pyx_t_9; + __pyx_L10_bool_binop_done:; + if (__pyx_t_2) { + goto __pyx_L5; + } + + /* "nw_ec_alignx.pyx":291 + * pass + * else: + * x = ecs[ec1] # <<<<<<<<<<<<<< + * y = ecs[ec2] + * homo += mat[x, y] + */ + /*else*/ { + if (unlikely(__pyx_v_ecs == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 291, __pyx_L1_error) + } + __pyx_t_8 = __Pyx_PyDict_GetItem(__pyx_v_ecs, __pyx_v_ec1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 291, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_10 = __Pyx_PyInt_As_unsigned_int(__pyx_t_8); if (unlikely((__pyx_t_10 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 291, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_v_x = __pyx_t_10; + + /* "nw_ec_alignx.pyx":292 + * else: + * x = ecs[ec1] + * y = ecs[ec2] # <<<<<<<<<<<<<< + * homo += mat[x, y] + * homo = homo / length # mean homogeneity + */ + if (unlikely(__pyx_v_ecs == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 292, __pyx_L1_error) + } + __pyx_t_8 = __Pyx_PyDict_GetItem(__pyx_v_ecs, __pyx_v_ec2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 292, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_10 = __Pyx_PyInt_As_unsigned_int(__pyx_t_8); if (unlikely((__pyx_t_10 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 292, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_v_y = __pyx_t_10; + + /* "nw_ec_alignx.pyx":293 + * x = ecs[ec1] + * y = ecs[ec2] + * homo += mat[x, y] # <<<<<<<<<<<<<< + * homo = homo / length # mean homogeneity + * pengap = gappen(seq1, seq2) # dap penalization + */ + __pyx_t_11 = __pyx_v_x; + __pyx_t_12 = __pyx_v_y; + __pyx_v_homo = (__pyx_v_homo + (*__Pyx_BufPtrStrided2d(__pyx_t_12nw_ec_alignx_DTYPEF_t *, __pyx_pybuffernd_mat.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_mat.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_mat.diminfo[1].strides))); + } + __pyx_L5:; + } + + /* "nw_ec_alignx.pyx":294 + * y = ecs[ec2] + * homo += mat[x, y] + * homo = homo / length # mean homogeneity # <<<<<<<<<<<<<< + * pengap = gappen(seq1, seq2) # dap penalization + * # Final score calculation + */ + if (unlikely(__pyx_v_length == 0)) { + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + __PYX_ERR(0, 294, __pyx_L1_error) + } + __pyx_v_homo = (__pyx_v_homo / ((float)__pyx_v_length)); + + /* "nw_ec_alignx.pyx":295 + * homo += mat[x, y] + * homo = homo / length # mean homogeneity + * pengap = gappen(seq1, seq2) # dap penalization # <<<<<<<<<<<<<< + * # Final score calculation + * score = (homo * fhomo) + (pengap * fpengap) + */ + __pyx_t_8 = __pyx_f_12nw_ec_alignx_gappen(__pyx_v_seq1, __pyx_v_seq2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 295, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __pyx_PyFloat_AsFloat(__pyx_t_8); if (unlikely((__pyx_t_1 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 295, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_v_pengap = __pyx_t_1; + + /* "nw_ec_alignx.pyx":297 + * pengap = gappen(seq1, seq2) # dap penalization + * # Final score calculation + * score = (homo * fhomo) + (pengap * fpengap) # <<<<<<<<<<<<<< + * # there is no penalizarion for increment in columns + * return score + */ + __pyx_v_score = ((__pyx_v_homo * __pyx_v_fhomo) + (__pyx_v_pengap * __pyx_v_fpengap)); + + /* "nw_ec_alignx.pyx":299 + * score = (homo * fhomo) + (pengap * fpengap) + * # there is no penalizarion for increment in columns + * return score # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_8 = PyFloat_FromDouble(__pyx_v_score); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 299, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_r = __pyx_t_8; + __pyx_t_8 = 0; + goto __pyx_L0; + + /* "nw_ec_alignx.pyx":246 + * + * + * @cython.boundscheck(False) # <<<<<<<<<<<<<< + * @cython.wraparound(False) + * def scoring(np.ndarray[DTYPEF_t, ndim=2] mat, dict ecs, seq1, seq2, + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_8); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mat.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("nw_ec_alignx.scoring", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mat.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XDECREF(__pyx_v_ec1); + __Pyx_XDECREF(__pyx_v_ec2); + __Pyx_XDECREF(__pyx_v_gapstr); + __Pyx_XDECREF(__pyx_v_dotstr); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "nw_ec_alignx.pyx":302 + * + * + * def _backtrace(np.ndarray[DTYPE_t, ndim=2] arrow, list seq1, list seq2): # <<<<<<<<<<<<<< + * """Reads the arrow matrix of NW alignment and return two lists of + * with the aligned EC numbers. + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_12nw_ec_alignx_5_backtrace(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_12nw_ec_alignx_4_backtrace, "Reads the arrow matrix of NW alignment and return two lists of\n with the aligned EC numbers.\n\n Arguments:\n - `arrow`: arrow matrix generated by dynamic programing\n - `seq1`: enzymatic step sequence, list of (unaligned) EC numbers\n - `seq2`: enzymatic step sequence, list of (unaligned) EC numbers\n "); +static PyMethodDef __pyx_mdef_12nw_ec_alignx_5_backtrace = {"_backtrace", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_12nw_ec_alignx_5_backtrace, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_12nw_ec_alignx_4_backtrace}; +static PyObject *__pyx_pw_12nw_ec_alignx_5_backtrace(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyArrayObject *__pyx_v_arrow = 0; + PyObject *__pyx_v_seq1 = 0; + PyObject *__pyx_v_seq2 = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[3] = {0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("_backtrace (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_arrow,&__pyx_n_s_seq1,&__pyx_n_s_seq2,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_arrow)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 302, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_seq1)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 302, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_backtrace", 1, 3, 3, 1); __PYX_ERR(0, 302, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_seq2)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 302, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_backtrace", 1, 3, 3, 2); __PYX_ERR(0, 302, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_backtrace") < 0)) __PYX_ERR(0, 302, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 3)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + } + __pyx_v_arrow = ((PyArrayObject *)values[0]); + __pyx_v_seq1 = ((PyObject*)values[1]); + __pyx_v_seq2 = ((PyObject*)values[2]); + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("_backtrace", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 302, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("nw_ec_alignx._backtrace", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_arrow), __pyx_ptype_5numpy_ndarray, 1, "arrow", 0))) __PYX_ERR(0, 302, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_seq1), (&PyList_Type), 1, "seq1", 1))) __PYX_ERR(0, 302, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_seq2), (&PyList_Type), 1, "seq2", 1))) __PYX_ERR(0, 302, __pyx_L1_error) + __pyx_r = __pyx_pf_12nw_ec_alignx_4_backtrace(__pyx_self, __pyx_v_arrow, __pyx_v_seq1, __pyx_v_seq2); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_12nw_ec_alignx_4_backtrace(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_arrow, PyObject *__pyx_v_seq1, PyObject *__pyx_v_seq2) { + int __pyx_v_v; + int __pyx_v_h; + PyBoolObject *__pyx_v_ok = 0; + PyObject *__pyx_v_st1 = 0; + PyObject *__pyx_v_st2 = 0; + __Pyx_LocalBuf_ND __pyx_pybuffernd_arrow; + __Pyx_Buffer __pyx_pybuffer_arrow; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + Py_ssize_t __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_t_3; + Py_ssize_t __pyx_t_4; + Py_ssize_t __pyx_t_5; + long __pyx_t_6; + int __pyx_t_7; + int __pyx_t_8; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_backtrace", 1); + __pyx_pybuffer_arrow.pybuffer.buf = NULL; + __pyx_pybuffer_arrow.refcount = 0; + __pyx_pybuffernd_arrow.data = NULL; + __pyx_pybuffernd_arrow.rcbuffer = &__pyx_pybuffer_arrow; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_arrow.rcbuffer->pybuffer, (PyObject*)__pyx_v_arrow, &__Pyx_TypeInfo_nn___pyx_t_12nw_ec_alignx_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 302, __pyx_L1_error) + } + __pyx_pybuffernd_arrow.diminfo[0].strides = __pyx_pybuffernd_arrow.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_arrow.diminfo[0].shape = __pyx_pybuffernd_arrow.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_arrow.diminfo[1].strides = __pyx_pybuffernd_arrow.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_arrow.diminfo[1].shape = __pyx_pybuffernd_arrow.rcbuffer->pybuffer.shape[1]; + + /* "nw_ec_alignx.pyx":312 + * """ + * cdef: + * int v = len(seq1) # <<<<<<<<<<<<<< + * int h = len(seq2) + * bool ok = True + */ + if (unlikely(__pyx_v_seq1 == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(0, 312, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_PyList_GET_SIZE(__pyx_v_seq1); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 312, __pyx_L1_error) + __pyx_v_v = __pyx_t_1; + + /* "nw_ec_alignx.pyx":313 + * cdef: + * int v = len(seq1) + * int h = len(seq2) # <<<<<<<<<<<<<< + * bool ok = True + * list st1 = [] + */ + if (unlikely(__pyx_v_seq2 == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(0, 313, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_PyList_GET_SIZE(__pyx_v_seq2); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 313, __pyx_L1_error) + __pyx_v_h = __pyx_t_1; + + /* "nw_ec_alignx.pyx":314 + * int v = len(seq1) + * int h = len(seq2) + * bool ok = True # <<<<<<<<<<<<<< + * list st1 = [] + * list st2 = [] + */ + __Pyx_INCREF(Py_True); + __pyx_v_ok = ((PyBoolObject *)Py_True); + + /* "nw_ec_alignx.pyx":315 + * int h = len(seq2) + * bool ok = True + * list st1 = [] # <<<<<<<<<<<<<< + * list st2 = [] + * while ok: # backtrace walk + */ + __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 315, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_st1 = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; + + /* "nw_ec_alignx.pyx":316 + * bool ok = True + * list st1 = [] + * list st2 = [] # <<<<<<<<<<<<<< + * while ok: # backtrace walk + * if arrow[v, h] == 0: # vertical best result, s1 + */ + __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 316, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_st2 = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; + + /* "nw_ec_alignx.pyx":317 + * list st1 = [] + * list st2 = [] + * while ok: # backtrace walk # <<<<<<<<<<<<<< + * if arrow[v, h] == 0: # vertical best result, s1 + * st1.append(seq1[v - 1]) + */ + while (1) { + __pyx_t_3 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_ok)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 317, __pyx_L1_error) + if (!__pyx_t_3) break; + + /* "nw_ec_alignx.pyx":318 + * list st2 = [] + * while ok: # backtrace walk + * if arrow[v, h] == 0: # vertical best result, s1 # <<<<<<<<<<<<<< + * st1.append(seq1[v - 1]) + * st2.append('-.-.-') + */ + __pyx_t_4 = __pyx_v_v; + __pyx_t_5 = __pyx_v_h; + __pyx_t_3 = ((*__Pyx_BufPtrStrided2d(__pyx_t_12nw_ec_alignx_DTYPE_t *, __pyx_pybuffernd_arrow.rcbuffer->pybuffer.buf, __pyx_t_4, __pyx_pybuffernd_arrow.diminfo[0].strides, __pyx_t_5, __pyx_pybuffernd_arrow.diminfo[1].strides)) == 0); + if (__pyx_t_3) { + + /* "nw_ec_alignx.pyx":319 + * while ok: # backtrace walk + * if arrow[v, h] == 0: # vertical best result, s1 + * st1.append(seq1[v - 1]) # <<<<<<<<<<<<<< + * st2.append('-.-.-') + * v -= 1 + */ + if (unlikely(__pyx_v_seq1 == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 319, __pyx_L1_error) + } + __pyx_t_6 = (__pyx_v_v - 1); + __pyx_t_2 = PyList_GET_ITEM(__pyx_v_seq1, __pyx_t_6); + __Pyx_INCREF(__pyx_t_2); + __pyx_t_7 = __Pyx_PyList_Append(__pyx_v_st1, __pyx_t_2); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 319, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "nw_ec_alignx.pyx":320 + * if arrow[v, h] == 0: # vertical best result, s1 + * st1.append(seq1[v - 1]) + * st2.append('-.-.-') # <<<<<<<<<<<<<< + * v -= 1 + * elif arrow[v, h] == 1: # horizontal best result, s2 + */ + __pyx_t_7 = __Pyx_PyList_Append(__pyx_v_st2, __pyx_kp_u__3); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 320, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":321 + * st1.append(seq1[v - 1]) + * st2.append('-.-.-') + * v -= 1 # <<<<<<<<<<<<<< + * elif arrow[v, h] == 1: # horizontal best result, s2 + * st1.append('-.-.-') + */ + __pyx_v_v = (__pyx_v_v - 1); + + /* "nw_ec_alignx.pyx":318 + * list st2 = [] + * while ok: # backtrace walk + * if arrow[v, h] == 0: # vertical best result, s1 # <<<<<<<<<<<<<< + * st1.append(seq1[v - 1]) + * st2.append('-.-.-') + */ + goto __pyx_L5; + } + + /* "nw_ec_alignx.pyx":322 + * st2.append('-.-.-') + * v -= 1 + * elif arrow[v, h] == 1: # horizontal best result, s2 # <<<<<<<<<<<<<< + * st1.append('-.-.-') + * st2.append(seq2[h - 1]) + */ + __pyx_t_5 = __pyx_v_v; + __pyx_t_4 = __pyx_v_h; + __pyx_t_3 = ((*__Pyx_BufPtrStrided2d(__pyx_t_12nw_ec_alignx_DTYPE_t *, __pyx_pybuffernd_arrow.rcbuffer->pybuffer.buf, __pyx_t_5, __pyx_pybuffernd_arrow.diminfo[0].strides, __pyx_t_4, __pyx_pybuffernd_arrow.diminfo[1].strides)) == 1); + if (__pyx_t_3) { + + /* "nw_ec_alignx.pyx":323 + * v -= 1 + * elif arrow[v, h] == 1: # horizontal best result, s2 + * st1.append('-.-.-') # <<<<<<<<<<<<<< + * st2.append(seq2[h - 1]) + * h -= 1 + */ + __pyx_t_7 = __Pyx_PyList_Append(__pyx_v_st1, __pyx_kp_u__3); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 323, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":324 + * elif arrow[v, h] == 1: # horizontal best result, s2 + * st1.append('-.-.-') + * st2.append(seq2[h - 1]) # <<<<<<<<<<<<<< + * h -= 1 + * elif arrow[v, h] == 2: # diagonal best result, s1,s2 aligned + */ + if (unlikely(__pyx_v_seq2 == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 324, __pyx_L1_error) + } + __pyx_t_6 = (__pyx_v_h - 1); + __pyx_t_2 = PyList_GET_ITEM(__pyx_v_seq2, __pyx_t_6); + __Pyx_INCREF(__pyx_t_2); + __pyx_t_7 = __Pyx_PyList_Append(__pyx_v_st2, __pyx_t_2); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 324, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "nw_ec_alignx.pyx":325 + * st1.append('-.-.-') + * st2.append(seq2[h - 1]) + * h -= 1 # <<<<<<<<<<<<<< + * elif arrow[v, h] == 2: # diagonal best result, s1,s2 aligned + * st1.append(seq1[v - 1]) + */ + __pyx_v_h = (__pyx_v_h - 1); + + /* "nw_ec_alignx.pyx":322 + * st2.append('-.-.-') + * v -= 1 + * elif arrow[v, h] == 1: # horizontal best result, s2 # <<<<<<<<<<<<<< + * st1.append('-.-.-') + * st2.append(seq2[h - 1]) + */ + goto __pyx_L5; + } + + /* "nw_ec_alignx.pyx":326 + * st2.append(seq2[h - 1]) + * h -= 1 + * elif arrow[v, h] == 2: # diagonal best result, s1,s2 aligned # <<<<<<<<<<<<<< + * st1.append(seq1[v - 1]) + * st2.append(seq2[h - 1]) + */ + __pyx_t_4 = __pyx_v_v; + __pyx_t_5 = __pyx_v_h; + __pyx_t_3 = ((*__Pyx_BufPtrStrided2d(__pyx_t_12nw_ec_alignx_DTYPE_t *, __pyx_pybuffernd_arrow.rcbuffer->pybuffer.buf, __pyx_t_4, __pyx_pybuffernd_arrow.diminfo[0].strides, __pyx_t_5, __pyx_pybuffernd_arrow.diminfo[1].strides)) == 2); + if (__pyx_t_3) { + + /* "nw_ec_alignx.pyx":327 + * h -= 1 + * elif arrow[v, h] == 2: # diagonal best result, s1,s2 aligned + * st1.append(seq1[v - 1]) # <<<<<<<<<<<<<< + * st2.append(seq2[h - 1]) + * v -= 1 + */ + if (unlikely(__pyx_v_seq1 == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 327, __pyx_L1_error) + } + __pyx_t_6 = (__pyx_v_v - 1); + __pyx_t_2 = PyList_GET_ITEM(__pyx_v_seq1, __pyx_t_6); + __Pyx_INCREF(__pyx_t_2); + __pyx_t_7 = __Pyx_PyList_Append(__pyx_v_st1, __pyx_t_2); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 327, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "nw_ec_alignx.pyx":328 + * elif arrow[v, h] == 2: # diagonal best result, s1,s2 aligned + * st1.append(seq1[v - 1]) + * st2.append(seq2[h - 1]) # <<<<<<<<<<<<<< + * v -= 1 + * h -= 1 + */ + if (unlikely(__pyx_v_seq2 == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 328, __pyx_L1_error) + } + __pyx_t_6 = (__pyx_v_h - 1); + __pyx_t_2 = PyList_GET_ITEM(__pyx_v_seq2, __pyx_t_6); + __Pyx_INCREF(__pyx_t_2); + __pyx_t_7 = __Pyx_PyList_Append(__pyx_v_st2, __pyx_t_2); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 328, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "nw_ec_alignx.pyx":329 + * st1.append(seq1[v - 1]) + * st2.append(seq2[h - 1]) + * v -= 1 # <<<<<<<<<<<<<< + * h -= 1 + * if v == 0 and h == 0: + */ + __pyx_v_v = (__pyx_v_v - 1); + + /* "nw_ec_alignx.pyx":330 + * st2.append(seq2[h - 1]) + * v -= 1 + * h -= 1 # <<<<<<<<<<<<<< + * if v == 0 and h == 0: + * ok = False + */ + __pyx_v_h = (__pyx_v_h - 1); + + /* "nw_ec_alignx.pyx":326 + * st2.append(seq2[h - 1]) + * h -= 1 + * elif arrow[v, h] == 2: # diagonal best result, s1,s2 aligned # <<<<<<<<<<<<<< + * st1.append(seq1[v - 1]) + * st2.append(seq2[h - 1]) + */ + } + __pyx_L5:; + + /* "nw_ec_alignx.pyx":331 + * v -= 1 + * h -= 1 + * if v == 0 and h == 0: # <<<<<<<<<<<<<< + * ok = False + * # reverse sequences + */ + __pyx_t_8 = (__pyx_v_v == 0); + if (__pyx_t_8) { + } else { + __pyx_t_3 = __pyx_t_8; + goto __pyx_L7_bool_binop_done; + } + __pyx_t_8 = (__pyx_v_h == 0); + __pyx_t_3 = __pyx_t_8; + __pyx_L7_bool_binop_done:; + if (__pyx_t_3) { + + /* "nw_ec_alignx.pyx":332 + * h -= 1 + * if v == 0 and h == 0: + * ok = False # <<<<<<<<<<<<<< + * # reverse sequences + * st1 = st1[::-1] + */ + __Pyx_INCREF(Py_False); + __Pyx_DECREF_SET(__pyx_v_ok, ((PyBoolObject *)Py_False)); + + /* "nw_ec_alignx.pyx":331 + * v -= 1 + * h -= 1 + * if v == 0 and h == 0: # <<<<<<<<<<<<<< + * ok = False + * # reverse sequences + */ + } + } + + /* "nw_ec_alignx.pyx":334 + * ok = False + * # reverse sequences + * st1 = st1[::-1] # <<<<<<<<<<<<<< + * st2 = st2[::-1] + * return st1, st2 + */ + __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_st1, __pyx_slice__6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 334, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF_SET(__pyx_v_st1, ((PyObject*)__pyx_t_2)); + __pyx_t_2 = 0; + + /* "nw_ec_alignx.pyx":335 + * # reverse sequences + * st1 = st1[::-1] + * st2 = st2[::-1] # <<<<<<<<<<<<<< + * return st1, st2 + * + */ + __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_st2, __pyx_slice__6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 335, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF_SET(__pyx_v_st2, ((PyObject*)__pyx_t_2)); + __pyx_t_2 = 0; + + /* "nw_ec_alignx.pyx":336 + * st1 = st1[::-1] + * st2 = st2[::-1] + * return st1, st2 # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 336, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_v_st1); + __Pyx_GIVEREF(__pyx_v_st1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_st1)) __PYX_ERR(0, 336, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_st2); + __Pyx_GIVEREF(__pyx_v_st2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_st2)) __PYX_ERR(0, 336, __pyx_L1_error); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "nw_ec_alignx.pyx":302 + * + * + * def _backtrace(np.ndarray[DTYPE_t, ndim=2] arrow, list seq1, list seq2): # <<<<<<<<<<<<<< + * """Reads the arrow matrix of NW alignment and return two lists of + * with the aligned EC numbers. + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_arrow.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("nw_ec_alignx._backtrace", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_arrow.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XDECREF((PyObject *)__pyx_v_ok); + __Pyx_XDECREF(__pyx_v_st1); + __Pyx_XDECREF(__pyx_v_st2); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "nw_ec_alignx.pyx":339 + * + * + * def NW(np.ndarray[DTYPEF_t, ndim=2] mat, dict ecs, list seq1, list seq2, # <<<<<<<<<<<<<< + * float gap=0.9, bool localize=False, bool nws=False, + * bool strfmt=True, bool oscore=False): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_12nw_ec_alignx_7NW(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_12nw_ec_alignx_6NW, "\n NW alignment function. Creates a pairwise alignment of Enzymatic Step\n Sequences (ESS) using a Needelman-Wunsh algorithm.\n\n Arguments:\n - `mat`: EC number (3 levels) substitution matrix\n - `ecs`: List of ec numbers that represent the labels of the matrix\n - `seq1`: EC numbers sequence 1, list\n - `seq2`: EC numbers sequence 2, list\n - `gap`: gap penalty for NW algorithm (not for scoring)\n - `localize`: if localize = True, then, the function returns only the\n fragment of the alignment covered by the shortest sequence\n and the score is calculated accordingly\n - `nws`: if true, the function returns the scores as is returned by the\n NW algorithm\n - `strfmt`: if True. The aligned sequences are in string format. If\n False, the sequences are in list format\n - `oscore`: if True, only returns the score of the alignment, else\n "); +static PyMethodDef __pyx_mdef_12nw_ec_alignx_7NW = {"NW", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_12nw_ec_alignx_7NW, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_12nw_ec_alignx_6NW}; +static PyObject *__pyx_pw_12nw_ec_alignx_7NW(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyArrayObject *__pyx_v_mat = 0; + PyObject *__pyx_v_ecs = 0; + PyObject *__pyx_v_seq1 = 0; + PyObject *__pyx_v_seq2 = 0; + float __pyx_v_gap; + PyBoolObject *__pyx_v_localize = 0; + PyBoolObject *__pyx_v_nws = 0; + PyBoolObject *__pyx_v_strfmt = 0; + PyBoolObject *__pyx_v_oscore = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[9] = {0,0,0,0,0,0,0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("NW (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_mat,&__pyx_n_s_ecs,&__pyx_n_s_seq1,&__pyx_n_s_seq2,&__pyx_n_s_gap,&__pyx_n_s_localize,&__pyx_n_s_nws,&__pyx_n_s_strfmt,&__pyx_n_s_oscore,0}; + values[5] = __Pyx_Arg_NewRef_FASTCALL((PyObject *)__pyx_k__7); + values[6] = __Pyx_Arg_NewRef_FASTCALL((PyObject *)__pyx_k__8); + values[7] = __Pyx_Arg_NewRef_FASTCALL((PyObject *)__pyx_k__9); + values[8] = __Pyx_Arg_NewRef_FASTCALL((PyObject *)__pyx_k__10); + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 9: values[8] = __Pyx_Arg_FASTCALL(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_mat)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 339, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_ecs)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 339, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("NW", 0, 4, 9, 1); __PYX_ERR(0, 339, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_seq1)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 339, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("NW", 0, 4, 9, 2); __PYX_ERR(0, 339, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_seq2)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 339, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("NW", 0, 4, 9, 3); __PYX_ERR(0, 339, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gap); + if (value) { values[4] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 339, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_localize); + if (value) { values[5] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 339, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_nws); + if (value) { values[6] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 339, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_strfmt); + if (value) { values[7] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 339, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_oscore); + if (value) { values[8] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 339, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "NW") < 0)) __PYX_ERR(0, 339, __pyx_L3_error) + } + } else { + switch (__pyx_nargs) { + case 9: values[8] = __Pyx_Arg_FASTCALL(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_mat = ((PyArrayObject *)values[0]); + __pyx_v_ecs = ((PyObject*)values[1]); + __pyx_v_seq1 = ((PyObject*)values[2]); + __pyx_v_seq2 = ((PyObject*)values[3]); + if (values[4]) { + __pyx_v_gap = __pyx_PyFloat_AsFloat(values[4]); if (unlikely((__pyx_v_gap == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 340, __pyx_L3_error) + } else { + __pyx_v_gap = ((float)((double)0.9)); + } + __pyx_v_localize = ((PyBoolObject *)values[5]); + __pyx_v_nws = ((PyBoolObject *)values[6]); + __pyx_v_strfmt = ((PyBoolObject *)values[7]); + __pyx_v_oscore = ((PyBoolObject *)values[8]); + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("NW", 0, 4, 9, __pyx_nargs); __PYX_ERR(0, 339, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("nw_ec_alignx.NW", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_5numpy_ndarray, 1, "mat", 0))) __PYX_ERR(0, 339, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ecs), (&PyDict_Type), 1, "ecs", 1))) __PYX_ERR(0, 339, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_seq1), (&PyList_Type), 1, "seq1", 1))) __PYX_ERR(0, 339, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_seq2), (&PyList_Type), 1, "seq2", 1))) __PYX_ERR(0, 339, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_localize), __pyx_ptype_7cpython_4bool_bool, 1, "localize", 0))) __PYX_ERR(0, 340, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_nws), __pyx_ptype_7cpython_4bool_bool, 1, "nws", 0))) __PYX_ERR(0, 340, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_strfmt), __pyx_ptype_7cpython_4bool_bool, 1, "strfmt", 0))) __PYX_ERR(0, 341, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_oscore), __pyx_ptype_7cpython_4bool_bool, 1, "oscore", 0))) __PYX_ERR(0, 341, __pyx_L1_error) + __pyx_r = __pyx_pf_12nw_ec_alignx_6NW(__pyx_self, __pyx_v_mat, __pyx_v_ecs, __pyx_v_seq1, __pyx_v_seq2, __pyx_v_gap, __pyx_v_localize, __pyx_v_nws, __pyx_v_strfmt, __pyx_v_oscore); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_12nw_ec_alignx_6NW(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_mat, PyObject *__pyx_v_ecs, PyObject *__pyx_v_seq1, PyObject *__pyx_v_seq2, float __pyx_v_gap, PyBoolObject *__pyx_v_localize, PyBoolObject *__pyx_v_nws, PyBoolObject *__pyx_v_strfmt, PyBoolObject *__pyx_v_oscore) { + float __pyx_v_score; + float __pyx_v_mini; + float __pyx_v_scoring_gap; + PyObject *__pyx_v_aseq1 = 0; + PyObject *__pyx_v_aseq2 = 0; + int __pyx_v_length; + int __pyx_v_i; + int __pyx_v_ii; + int __pyx_v_fi; + char __pyx_v_binit; + char __pyx_v_bblock; + PyObject *__pyx_v_arr = NULL; + __Pyx_LocalBuf_ND __pyx_pybuffernd_mat; + __Pyx_Buffer __pyx_pybuffer_mat; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *(*__pyx_t_5)(PyObject *); + float __pyx_t_6; + unsigned int __pyx_t_7; + int __pyx_t_8; + Py_ssize_t __pyx_t_9; + int __pyx_t_10; + int __pyx_t_11; + int __pyx_t_12; + int __pyx_t_13; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("NW", 0); + __Pyx_INCREF(__pyx_v_seq1); + __Pyx_INCREF(__pyx_v_seq2); + __pyx_pybuffer_mat.pybuffer.buf = NULL; + __pyx_pybuffer_mat.refcount = 0; + __pyx_pybuffernd_mat.data = NULL; + __pyx_pybuffernd_mat.rcbuffer = &__pyx_pybuffer_mat; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mat.rcbuffer->pybuffer, (PyObject*)__pyx_v_mat, &__Pyx_TypeInfo_nn___pyx_t_12nw_ec_alignx_DTYPEF_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 339, __pyx_L1_error) + } + __pyx_pybuffernd_mat.diminfo[0].strides = __pyx_pybuffernd_mat.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_mat.diminfo[0].shape = __pyx_pybuffernd_mat.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_mat.diminfo[1].strides = __pyx_pybuffernd_mat.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_mat.diminfo[1].shape = __pyx_pybuffernd_mat.rcbuffer->pybuffer.shape[1]; + + /* "nw_ec_alignx.pyx":368 + * char bblock # block mar boolean + * # create NW matrices + * arr, mini = _FastNW(mat, ecs, seq1, seq2, gap=gap) # <<<<<<<<<<<<<< + * seq1, seq2 = _backtrace(arr, seq1, seq2) # backtrace alingment + * # localized alignmet + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_FastNW); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 368, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 368, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF((PyObject *)__pyx_v_mat); + __Pyx_GIVEREF((PyObject *)__pyx_v_mat); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_mat))) __PYX_ERR(0, 368, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_ecs); + __Pyx_GIVEREF(__pyx_v_ecs); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_ecs)) __PYX_ERR(0, 368, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_seq1); + __Pyx_GIVEREF(__pyx_v_seq1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_seq1)) __PYX_ERR(0, 368, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_seq2); + __Pyx_GIVEREF(__pyx_v_seq2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_v_seq2)) __PYX_ERR(0, 368, __pyx_L1_error); + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 368, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyFloat_FromDouble(__pyx_v_gap); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 368, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_gap, __pyx_t_4) < 0) __PYX_ERR(0, 368, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 368, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) { + PyObject* sequence = __pyx_t_4; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 368, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); + } else { + __pyx_t_3 = PyList_GET_ITEM(sequence, 0); + __pyx_t_2 = PyList_GET_ITEM(sequence, 1); + } + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + #else + __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 368, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 368, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + #endif + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } else { + Py_ssize_t index = -1; + __pyx_t_1 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 368, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_5 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); + index = 0; __pyx_t_3 = __pyx_t_5(__pyx_t_1); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed; + __Pyx_GOTREF(__pyx_t_3); + index = 1; __pyx_t_2 = __pyx_t_5(__pyx_t_1); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed; + __Pyx_GOTREF(__pyx_t_2); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_1), 2) < 0) __PYX_ERR(0, 368, __pyx_L1_error) + __pyx_t_5 = NULL; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + goto __pyx_L4_unpacking_done; + __pyx_L3_unpacking_failed:; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_5 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 368, __pyx_L1_error) + __pyx_L4_unpacking_done:; + } + __pyx_t_6 = __pyx_PyFloat_AsFloat(__pyx_t_2); if (unlikely((__pyx_t_6 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 368, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_arr = __pyx_t_3; + __pyx_t_3 = 0; + __pyx_v_mini = __pyx_t_6; + + /* "nw_ec_alignx.pyx":369 + * # create NW matrices + * arr, mini = _FastNW(mat, ecs, seq1, seq2, gap=gap) + * seq1, seq2 = _backtrace(arr, seq1, seq2) # backtrace alingment # <<<<<<<<<<<<<< + * # localized alignmet + * if localize: + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_backtrace); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 369, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_3, __pyx_v_arr, __pyx_v_seq1, __pyx_v_seq2}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 3+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 369, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) { + PyObject* sequence = __pyx_t_4; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 369, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); + } else { + __pyx_t_2 = PyList_GET_ITEM(sequence, 0); + __pyx_t_3 = PyList_GET_ITEM(sequence, 1); + } + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + #else + __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 369, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 369, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + #endif + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } else { + Py_ssize_t index = -1; + __pyx_t_1 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 369, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_5 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); + index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_1); if (unlikely(!__pyx_t_2)) goto __pyx_L5_unpacking_failed; + __Pyx_GOTREF(__pyx_t_2); + index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_1); if (unlikely(!__pyx_t_3)) goto __pyx_L5_unpacking_failed; + __Pyx_GOTREF(__pyx_t_3); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_1), 2) < 0) __PYX_ERR(0, 369, __pyx_L1_error) + __pyx_t_5 = NULL; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + goto __pyx_L6_unpacking_done; + __pyx_L5_unpacking_failed:; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_5 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 369, __pyx_L1_error) + __pyx_L6_unpacking_done:; + } + if (!(likely(PyList_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_2))) __PYX_ERR(0, 369, __pyx_L1_error) + if (!(likely(PyList_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_3))) __PYX_ERR(0, 369, __pyx_L1_error) + __Pyx_DECREF_SET(__pyx_v_seq1, ((PyObject*)__pyx_t_2)); + __pyx_t_2 = 0; + __Pyx_DECREF_SET(__pyx_v_seq2, ((PyObject*)__pyx_t_3)); + __pyx_t_3 = 0; + + /* "nw_ec_alignx.pyx":371 + * seq1, seq2 = _backtrace(arr, seq1, seq2) # backtrace alingment + * # localized alignmet + * if localize: # <<<<<<<<<<<<<< + * binit = 1 + * bblock = 0 + */ + __pyx_t_8 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_localize)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 371, __pyx_L1_error) + if (__pyx_t_8) { + + /* "nw_ec_alignx.pyx":372 + * # localized alignmet + * if localize: + * binit = 1 # <<<<<<<<<<<<<< + * bblock = 0 + * length = len(seq1) + */ + __pyx_v_binit = 1; + + /* "nw_ec_alignx.pyx":373 + * if localize: + * binit = 1 + * bblock = 0 # <<<<<<<<<<<<<< + * length = len(seq1) + * ii = 0 + */ + __pyx_v_bblock = 0; + + /* "nw_ec_alignx.pyx":374 + * binit = 1 + * bblock = 0 + * length = len(seq1) # <<<<<<<<<<<<<< + * ii = 0 + * fi = 0 + */ + if (unlikely(__pyx_v_seq1 == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(0, 374, __pyx_L1_error) + } + __pyx_t_9 = __Pyx_PyList_GET_SIZE(__pyx_v_seq1); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(0, 374, __pyx_L1_error) + __pyx_v_length = __pyx_t_9; + + /* "nw_ec_alignx.pyx":375 + * bblock = 0 + * length = len(seq1) + * ii = 0 # <<<<<<<<<<<<<< + * fi = 0 + * for i in range(length): + */ + __pyx_v_ii = 0; + + /* "nw_ec_alignx.pyx":376 + * length = len(seq1) + * ii = 0 + * fi = 0 # <<<<<<<<<<<<<< + * for i in range(length): + * if seq1[i] != '-.-.-' and seq2[i] != '-.-.-' and binit: + */ + __pyx_v_fi = 0; + + /* "nw_ec_alignx.pyx":377 + * ii = 0 + * fi = 0 + * for i in range(length): # <<<<<<<<<<<<<< + * if seq1[i] != '-.-.-' and seq2[i] != '-.-.-' and binit: + * ii = i + */ + __pyx_t_10 = __pyx_v_length; + __pyx_t_11 = __pyx_t_10; + for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) { + __pyx_v_i = __pyx_t_12; + + /* "nw_ec_alignx.pyx":378 + * fi = 0 + * for i in range(length): + * if seq1[i] != '-.-.-' and seq2[i] != '-.-.-' and binit: # <<<<<<<<<<<<<< + * ii = i + * binit = 0 + */ + if (unlikely(__pyx_v_seq1 == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 378, __pyx_L1_error) + } + __pyx_t_13 = (__Pyx_PyUnicode_Equals(PyList_GET_ITEM(__pyx_v_seq1, __pyx_v_i), __pyx_kp_u__3, Py_NE)); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 378, __pyx_L1_error) + if (__pyx_t_13) { + } else { + __pyx_t_8 = __pyx_t_13; + goto __pyx_L11_bool_binop_done; + } + if (unlikely(__pyx_v_seq2 == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 378, __pyx_L1_error) + } + __pyx_t_13 = (__Pyx_PyUnicode_Equals(PyList_GET_ITEM(__pyx_v_seq2, __pyx_v_i), __pyx_kp_u__3, Py_NE)); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 378, __pyx_L1_error) + if (__pyx_t_13) { + } else { + __pyx_t_8 = __pyx_t_13; + goto __pyx_L11_bool_binop_done; + } + __pyx_t_13 = (__pyx_v_binit != 0); + __pyx_t_8 = __pyx_t_13; + __pyx_L11_bool_binop_done:; + if (__pyx_t_8) { + + /* "nw_ec_alignx.pyx":379 + * for i in range(length): + * if seq1[i] != '-.-.-' and seq2[i] != '-.-.-' and binit: + * ii = i # <<<<<<<<<<<<<< + * binit = 0 + * fi = ii + 1 + */ + __pyx_v_ii = __pyx_v_i; + + /* "nw_ec_alignx.pyx":380 + * if seq1[i] != '-.-.-' and seq2[i] != '-.-.-' and binit: + * ii = i + * binit = 0 # <<<<<<<<<<<<<< + * fi = ii + 1 + * elif (seq1[i] == '-.-.-' or seq2[i] == '-.-.-') and bblock: + */ + __pyx_v_binit = 0; + + /* "nw_ec_alignx.pyx":381 + * ii = i + * binit = 0 + * fi = ii + 1 # <<<<<<<<<<<<<< + * elif (seq1[i] == '-.-.-' or seq2[i] == '-.-.-') and bblock: + * fi = i + */ + __pyx_v_fi = (__pyx_v_ii + 1); + + /* "nw_ec_alignx.pyx":378 + * fi = 0 + * for i in range(length): + * if seq1[i] != '-.-.-' and seq2[i] != '-.-.-' and binit: # <<<<<<<<<<<<<< + * ii = i + * binit = 0 + */ + goto __pyx_L10; + } + + /* "nw_ec_alignx.pyx":382 + * binit = 0 + * fi = ii + 1 + * elif (seq1[i] == '-.-.-' or seq2[i] == '-.-.-') and bblock: # <<<<<<<<<<<<<< + * fi = i + * bblock = 0 + */ + if (unlikely(__pyx_v_seq1 == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 382, __pyx_L1_error) + } + __pyx_t_13 = (__Pyx_PyUnicode_Equals(PyList_GET_ITEM(__pyx_v_seq1, __pyx_v_i), __pyx_kp_u__3, Py_EQ)); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 382, __pyx_L1_error) + if (!__pyx_t_13) { + } else { + goto __pyx_L15_next_and; + } + if (unlikely(__pyx_v_seq2 == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 382, __pyx_L1_error) + } + __pyx_t_13 = (__Pyx_PyUnicode_Equals(PyList_GET_ITEM(__pyx_v_seq2, __pyx_v_i), __pyx_kp_u__3, Py_EQ)); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 382, __pyx_L1_error) + if (__pyx_t_13) { + } else { + __pyx_t_8 = __pyx_t_13; + goto __pyx_L14_bool_binop_done; + } + __pyx_L15_next_and:; + __pyx_t_13 = (__pyx_v_bblock != 0); + __pyx_t_8 = __pyx_t_13; + __pyx_L14_bool_binop_done:; + if (__pyx_t_8) { + + /* "nw_ec_alignx.pyx":383 + * fi = ii + 1 + * elif (seq1[i] == '-.-.-' or seq2[i] == '-.-.-') and bblock: + * fi = i # <<<<<<<<<<<<<< + * bblock = 0 + * elif seq1[i] != '-.-.-' and seq2[i] != '-.-.-': + */ + __pyx_v_fi = __pyx_v_i; + + /* "nw_ec_alignx.pyx":384 + * elif (seq1[i] == '-.-.-' or seq2[i] == '-.-.-') and bblock: + * fi = i + * bblock = 0 # <<<<<<<<<<<<<< + * elif seq1[i] != '-.-.-' and seq2[i] != '-.-.-': + * bblock = 1 + */ + __pyx_v_bblock = 0; + + /* "nw_ec_alignx.pyx":382 + * binit = 0 + * fi = ii + 1 + * elif (seq1[i] == '-.-.-' or seq2[i] == '-.-.-') and bblock: # <<<<<<<<<<<<<< + * fi = i + * bblock = 0 + */ + goto __pyx_L10; + } + + /* "nw_ec_alignx.pyx":385 + * fi = i + * bblock = 0 + * elif seq1[i] != '-.-.-' and seq2[i] != '-.-.-': # <<<<<<<<<<<<<< + * bblock = 1 + * if bblock: + */ + if (unlikely(__pyx_v_seq1 == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 385, __pyx_L1_error) + } + __pyx_t_13 = (__Pyx_PyUnicode_Equals(PyList_GET_ITEM(__pyx_v_seq1, __pyx_v_i), __pyx_kp_u__3, Py_NE)); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 385, __pyx_L1_error) + if (__pyx_t_13) { + } else { + __pyx_t_8 = __pyx_t_13; + goto __pyx_L17_bool_binop_done; + } + if (unlikely(__pyx_v_seq2 == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 385, __pyx_L1_error) + } + __pyx_t_13 = (__Pyx_PyUnicode_Equals(PyList_GET_ITEM(__pyx_v_seq2, __pyx_v_i), __pyx_kp_u__3, Py_NE)); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 385, __pyx_L1_error) + __pyx_t_8 = __pyx_t_13; + __pyx_L17_bool_binop_done:; + if (__pyx_t_8) { + + /* "nw_ec_alignx.pyx":386 + * bblock = 0 + * elif seq1[i] != '-.-.-' and seq2[i] != '-.-.-': + * bblock = 1 # <<<<<<<<<<<<<< + * if bblock: + * fi = length + */ + __pyx_v_bblock = 1; + + /* "nw_ec_alignx.pyx":385 + * fi = i + * bblock = 0 + * elif seq1[i] != '-.-.-' and seq2[i] != '-.-.-': # <<<<<<<<<<<<<< + * bblock = 1 + * if bblock: + */ + } + __pyx_L10:; + } + + /* "nw_ec_alignx.pyx":387 + * elif seq1[i] != '-.-.-' and seq2[i] != '-.-.-': + * bblock = 1 + * if bblock: # <<<<<<<<<<<<<< + * fi = length + * seq1 = seq1[ii: fi] + */ + __pyx_t_8 = (__pyx_v_bblock != 0); + if (__pyx_t_8) { + + /* "nw_ec_alignx.pyx":388 + * bblock = 1 + * if bblock: + * fi = length # <<<<<<<<<<<<<< + * seq1 = seq1[ii: fi] + * seq2 = seq2[ii: fi] + */ + __pyx_v_fi = __pyx_v_length; + + /* "nw_ec_alignx.pyx":387 + * elif seq1[i] != '-.-.-' and seq2[i] != '-.-.-': + * bblock = 1 + * if bblock: # <<<<<<<<<<<<<< + * fi = length + * seq1 = seq1[ii: fi] + */ + } + + /* "nw_ec_alignx.pyx":389 + * if bblock: + * fi = length + * seq1 = seq1[ii: fi] # <<<<<<<<<<<<<< + * seq2 = seq2[ii: fi] + * # NW score or entropy based score + */ + if (unlikely(__pyx_v_seq1 == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 389, __pyx_L1_error) + } + __pyx_t_4 = __Pyx_PyList_GetSlice(__pyx_v_seq1, __pyx_v_ii, __pyx_v_fi); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 389, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF_SET(__pyx_v_seq1, ((PyObject*)__pyx_t_4)); + __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":390 + * fi = length + * seq1 = seq1[ii: fi] + * seq2 = seq2[ii: fi] # <<<<<<<<<<<<<< + * # NW score or entropy based score + * if nws: + */ + if (unlikely(__pyx_v_seq2 == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 390, __pyx_L1_error) + } + __pyx_t_4 = __Pyx_PyList_GetSlice(__pyx_v_seq2, __pyx_v_ii, __pyx_v_fi); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 390, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF_SET(__pyx_v_seq2, ((PyObject*)__pyx_t_4)); + __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":371 + * seq1, seq2 = _backtrace(arr, seq1, seq2) # backtrace alingment + * # localized alignmet + * if localize: # <<<<<<<<<<<<<< + * binit = 1 + * bblock = 0 + */ + } + + /* "nw_ec_alignx.pyx":392 + * seq2 = seq2[ii: fi] + * # NW score or entropy based score + * if nws: # <<<<<<<<<<<<<< + * score = mini + * else: + */ + __pyx_t_8 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_nws)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 392, __pyx_L1_error) + if (__pyx_t_8) { + + /* "nw_ec_alignx.pyx":393 + * # NW score or entropy based score + * if nws: + * score = mini # <<<<<<<<<<<<<< + * else: + * scoring_gap = 1 + */ + __pyx_v_score = __pyx_v_mini; + + /* "nw_ec_alignx.pyx":392 + * seq2 = seq2[ii: fi] + * # NW score or entropy based score + * if nws: # <<<<<<<<<<<<<< + * score = mini + * else: + */ + goto __pyx_L20; + } + + /* "nw_ec_alignx.pyx":395 + * score = mini + * else: + * scoring_gap = 1 # <<<<<<<<<<<<<< + * score = scoring(mat, ecs, seq1, seq2, gap=scoring_gap, fhomo=0.95, + * fpengap=0.05) + */ + /*else*/ { + __pyx_v_scoring_gap = 1.0; + + /* "nw_ec_alignx.pyx":396 + * else: + * scoring_gap = 1 + * score = scoring(mat, ecs, seq1, seq2, gap=scoring_gap, fhomo=0.95, # <<<<<<<<<<<<<< + * fpengap=0.05) + * if oscore: + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_scoring); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 396, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 396, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF((PyObject *)__pyx_v_mat); + __Pyx_GIVEREF((PyObject *)__pyx_v_mat); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_mat))) __PYX_ERR(0, 396, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_ecs); + __Pyx_GIVEREF(__pyx_v_ecs); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_ecs)) __PYX_ERR(0, 396, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_seq1); + __Pyx_GIVEREF(__pyx_v_seq1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_seq1)) __PYX_ERR(0, 396, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_seq2); + __Pyx_GIVEREF(__pyx_v_seq2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_v_seq2)) __PYX_ERR(0, 396, __pyx_L1_error); + __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 396, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = PyFloat_FromDouble(__pyx_v_scoring_gap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 396, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_gap, __pyx_t_1) < 0) __PYX_ERR(0, 396, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_fhomo, __pyx_float_0_95) < 0) __PYX_ERR(0, 396, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_fpengap, __pyx_float_0_05) < 0) __PYX_ERR(0, 396, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 396, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_6 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_6 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 396, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_score = __pyx_t_6; + } + __pyx_L20:; + + /* "nw_ec_alignx.pyx":398 + * score = scoring(mat, ecs, seq1, seq2, gap=scoring_gap, fhomo=0.95, + * fpengap=0.05) + * if oscore: # <<<<<<<<<<<<<< + * return score + * if strfmt: + */ + __pyx_t_8 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_oscore)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 398, __pyx_L1_error) + if (__pyx_t_8) { + + /* "nw_ec_alignx.pyx":399 + * fpengap=0.05) + * if oscore: + * return score # <<<<<<<<<<<<<< + * if strfmt: + * aseq1 = ':'.join(seq1) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyFloat_FromDouble(__pyx_v_score); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 399, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "nw_ec_alignx.pyx":398 + * score = scoring(mat, ecs, seq1, seq2, gap=scoring_gap, fhomo=0.95, + * fpengap=0.05) + * if oscore: # <<<<<<<<<<<<<< + * return score + * if strfmt: + */ + } + + /* "nw_ec_alignx.pyx":400 + * if oscore: + * return score + * if strfmt: # <<<<<<<<<<<<<< + * aseq1 = ':'.join(seq1) + * aseq2 = ':'.join(seq2) + */ + __pyx_t_8 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_strfmt)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 400, __pyx_L1_error) + if (__pyx_t_8) { + + /* "nw_ec_alignx.pyx":401 + * return score + * if strfmt: + * aseq1 = ':'.join(seq1) # <<<<<<<<<<<<<< + * aseq2 = ':'.join(seq2) + * return aseq1, aseq2, score + */ + __pyx_t_1 = PyUnicode_Join(__pyx_kp_u__11, __pyx_v_seq1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 401, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_aseq1 = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "nw_ec_alignx.pyx":402 + * if strfmt: + * aseq1 = ':'.join(seq1) + * aseq2 = ':'.join(seq2) # <<<<<<<<<<<<<< + * return aseq1, aseq2, score + * else: + */ + __pyx_t_1 = PyUnicode_Join(__pyx_kp_u__11, __pyx_v_seq2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 402, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_aseq2 = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "nw_ec_alignx.pyx":403 + * aseq1 = ':'.join(seq1) + * aseq2 = ':'.join(seq2) + * return aseq1, aseq2, score # <<<<<<<<<<<<<< + * else: + * return seq1, seq2, score + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyFloat_FromDouble(__pyx_v_score); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 403, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 403, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_v_aseq1); + __Pyx_GIVEREF(__pyx_v_aseq1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_aseq1)) __PYX_ERR(0, 403, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_aseq2); + __Pyx_GIVEREF(__pyx_v_aseq2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_aseq2)) __PYX_ERR(0, 403, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_1)) __PYX_ERR(0, 403, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "nw_ec_alignx.pyx":400 + * if oscore: + * return score + * if strfmt: # <<<<<<<<<<<<<< + * aseq1 = ':'.join(seq1) + * aseq2 = ':'.join(seq2) + */ + } + + /* "nw_ec_alignx.pyx":405 + * return aseq1, aseq2, score + * else: + * return seq1, seq2, score # <<<<<<<<<<<<<< + * + * + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = PyFloat_FromDouble(__pyx_v_score); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 405, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 405, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v_seq1); + __Pyx_GIVEREF(__pyx_v_seq1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_seq1)) __PYX_ERR(0, 405, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_seq2); + __Pyx_GIVEREF(__pyx_v_seq2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_seq2)) __PYX_ERR(0, 405, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_2)) __PYX_ERR(0, 405, __pyx_L1_error); + __pyx_t_2 = 0; + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + } + + /* "nw_ec_alignx.pyx":339 + * + * + * def NW(np.ndarray[DTYPEF_t, ndim=2] mat, dict ecs, list seq1, list seq2, # <<<<<<<<<<<<<< + * float gap=0.9, bool localize=False, bool nws=False, + * bool strfmt=True, bool oscore=False): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mat.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("nw_ec_alignx.NW", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mat.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XDECREF(__pyx_v_aseq1); + __Pyx_XDECREF(__pyx_v_aseq2); + __Pyx_XDECREF(__pyx_v_arr); + __Pyx_XDECREF(__pyx_v_seq1); + __Pyx_XDECREF(__pyx_v_seq2); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "nw_ec_alignx.pyx":408 + * + * + * def ind_vs_alldb(int ind, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, # <<<<<<<<<<<<<< + * dict decs, float thres=1.0, bool wholedb=False, + * bool localize=False, bool oscore=True): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_12nw_ec_alignx_9ind_vs_alldb(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_12nw_ec_alignx_8ind_vs_alldb, "Align the ESSs in the specified index (ind) versus\nall the rest of sequences with index > ind.\n\n Keyword Arguments:\n ind -- Int, index of the ESS to compare against the database\n seqs -- List, ESSs database. Each ESS is a list of EC numbers\n mat -- ndarray, EC number similarity matrix\n decs -- Dict, EC number index dictionary\n thres -- Float, threshold score to filter data (default 1.0). The data \n captured will be score <= thres.\n wholedb -- Bool, If True, the ind ESS is compared against all the sequences\n stored in seqs list.\n localize -- Bool. If True, the scoring of the alignment will be \n made only in the part of the alignment covered by \n the shortest ESS (default False)\n oscore -- Bool. If True, returns only the score of the alignment \n otherwise, returns a tuple with the algined ESSs and\n the corresonding score (defautl True)\n "); +static PyMethodDef __pyx_mdef_12nw_ec_alignx_9ind_vs_alldb = {"ind_vs_alldb", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_12nw_ec_alignx_9ind_vs_alldb, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_12nw_ec_alignx_8ind_vs_alldb}; +static PyObject *__pyx_pw_12nw_ec_alignx_9ind_vs_alldb(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + int __pyx_v_ind; + PyObject *__pyx_v_seqs = 0; + PyArrayObject *__pyx_v_mat = 0; + PyObject *__pyx_v_decs = 0; + float __pyx_v_thres; + PyBoolObject *__pyx_v_wholedb = 0; + PyBoolObject *__pyx_v_localize = 0; + PyBoolObject *__pyx_v_oscore = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[8] = {0,0,0,0,0,0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("ind_vs_alldb (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ind,&__pyx_n_s_seqs,&__pyx_n_s_mat,&__pyx_n_s_decs,&__pyx_n_s_thres,&__pyx_n_s_wholedb,&__pyx_n_s_localize,&__pyx_n_s_oscore,0}; + values[5] = __Pyx_Arg_NewRef_FASTCALL((PyObject *)__pyx_k__12); + values[6] = __Pyx_Arg_NewRef_FASTCALL((PyObject *)__pyx_k__13); + values[7] = __Pyx_Arg_NewRef_FASTCALL((PyObject *)__pyx_k__14); + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 8: values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_ind)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 408, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_seqs)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 408, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("ind_vs_alldb", 0, 4, 8, 1); __PYX_ERR(0, 408, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_mat)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 408, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("ind_vs_alldb", 0, 4, 8, 2); __PYX_ERR(0, 408, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_decs)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 408, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("ind_vs_alldb", 0, 4, 8, 3); __PYX_ERR(0, 408, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_thres); + if (value) { values[4] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 408, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_wholedb); + if (value) { values[5] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 408, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_localize); + if (value) { values[6] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 408, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_oscore); + if (value) { values[7] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 408, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "ind_vs_alldb") < 0)) __PYX_ERR(0, 408, __pyx_L3_error) + } + } else { + switch (__pyx_nargs) { + case 8: values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_ind = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_ind == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 408, __pyx_L3_error) + __pyx_v_seqs = ((PyObject*)values[1]); + __pyx_v_mat = ((PyArrayObject *)values[2]); + __pyx_v_decs = ((PyObject*)values[3]); + if (values[4]) { + __pyx_v_thres = __pyx_PyFloat_AsFloat(values[4]); if (unlikely((__pyx_v_thres == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 409, __pyx_L3_error) + } else { + __pyx_v_thres = ((float)((double)1.0)); + } + __pyx_v_wholedb = ((PyBoolObject *)values[5]); + __pyx_v_localize = ((PyBoolObject *)values[6]); + __pyx_v_oscore = ((PyBoolObject *)values[7]); + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("ind_vs_alldb", 0, 4, 8, __pyx_nargs); __PYX_ERR(0, 408, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("nw_ec_alignx.ind_vs_alldb", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_seqs), (&PyList_Type), 1, "seqs", 1))) __PYX_ERR(0, 408, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_5numpy_ndarray, 1, "mat", 0))) __PYX_ERR(0, 408, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_decs), (&PyDict_Type), 1, "decs", 1))) __PYX_ERR(0, 409, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_wholedb), __pyx_ptype_7cpython_4bool_bool, 1, "wholedb", 0))) __PYX_ERR(0, 409, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_localize), __pyx_ptype_7cpython_4bool_bool, 1, "localize", 0))) __PYX_ERR(0, 410, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_oscore), __pyx_ptype_7cpython_4bool_bool, 1, "oscore", 0))) __PYX_ERR(0, 410, __pyx_L1_error) + __pyx_r = __pyx_pf_12nw_ec_alignx_8ind_vs_alldb(__pyx_self, __pyx_v_ind, __pyx_v_seqs, __pyx_v_mat, __pyx_v_decs, __pyx_v_thres, __pyx_v_wholedb, __pyx_v_localize, __pyx_v_oscore); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_12nw_ec_alignx_8ind_vs_alldb(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_ind, PyObject *__pyx_v_seqs, PyArrayObject *__pyx_v_mat, PyObject *__pyx_v_decs, float __pyx_v_thres, PyBoolObject *__pyx_v_wholedb, PyBoolObject *__pyx_v_localize, PyBoolObject *__pyx_v_oscore) { + PyObject *__pyx_v_resdic = 0; + PyObject *__pyx_v_seq1 = 0; + PyObject *__pyx_v_seq2 = 0; + int __pyx_v_j; + PyObject *__pyx_v_indices = NULL; + PyObject *__pyx_v_sco = NULL; + __Pyx_LocalBuf_ND __pyx_pybuffernd_mat; + __Pyx_Buffer __pyx_pybuffer_mat; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + Py_ssize_t __pyx_t_5; + PyObject *(*__pyx_t_6)(PyObject *); + int __pyx_t_7; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("ind_vs_alldb", 1); + __pyx_pybuffer_mat.pybuffer.buf = NULL; + __pyx_pybuffer_mat.refcount = 0; + __pyx_pybuffernd_mat.data = NULL; + __pyx_pybuffernd_mat.rcbuffer = &__pyx_pybuffer_mat; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mat.rcbuffer->pybuffer, (PyObject*)__pyx_v_mat, &__Pyx_TypeInfo_nn___pyx_t_12nw_ec_alignx_DTYPEF_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 408, __pyx_L1_error) + } + __pyx_pybuffernd_mat.diminfo[0].strides = __pyx_pybuffernd_mat.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_mat.diminfo[0].shape = __pyx_pybuffernd_mat.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_mat.diminfo[1].strides = __pyx_pybuffernd_mat.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_mat.diminfo[1].shape = __pyx_pybuffernd_mat.rcbuffer->pybuffer.shape[1]; + + /* "nw_ec_alignx.pyx":431 + * """ + * cdef: + * dict resdic = {ind: {}} # <<<<<<<<<<<<<< + * list seq1, seq2 + * int j + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 431, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_ind); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 431, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 431, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_t_3) < 0) __PYX_ERR(0, 431, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_resdic = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "nw_ec_alignx.pyx":435 + * int j + * # float sco + * seq1 = seqs[ind] # <<<<<<<<<<<<<< + * if wholedb: + * indices = range(len(seqs)) + */ + if (unlikely(__pyx_v_seqs == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 435, __pyx_L1_error) + } + if (!(likely(PyList_CheckExact(PyList_GET_ITEM(__pyx_v_seqs, __pyx_v_ind)))||((PyList_GET_ITEM(__pyx_v_seqs, __pyx_v_ind)) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", PyList_GET_ITEM(__pyx_v_seqs, __pyx_v_ind)))) __PYX_ERR(0, 435, __pyx_L1_error) + __pyx_t_1 = PyList_GET_ITEM(__pyx_v_seqs, __pyx_v_ind); + __Pyx_INCREF(__pyx_t_1); + __pyx_v_seq1 = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "nw_ec_alignx.pyx":436 + * # float sco + * seq1 = seqs[ind] + * if wholedb: # <<<<<<<<<<<<<< + * indices = range(len(seqs)) + * else: + */ + __pyx_t_4 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_wholedb)); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 436, __pyx_L1_error) + if (__pyx_t_4) { + + /* "nw_ec_alignx.pyx":437 + * seq1 = seqs[ind] + * if wholedb: + * indices = range(len(seqs)) # <<<<<<<<<<<<<< + * else: + * indices = range(ind + 1, len(seqs)) + */ + if (unlikely(__pyx_v_seqs == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(0, 437, __pyx_L1_error) + } + __pyx_t_5 = __Pyx_PyList_GET_SIZE(__pyx_v_seqs); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 437, __pyx_L1_error) + __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 437, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 437, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_indices = __pyx_t_3; + __pyx_t_3 = 0; + + /* "nw_ec_alignx.pyx":436 + * # float sco + * seq1 = seqs[ind] + * if wholedb: # <<<<<<<<<<<<<< + * indices = range(len(seqs)) + * else: + */ + goto __pyx_L3; + } + + /* "nw_ec_alignx.pyx":439 + * indices = range(len(seqs)) + * else: + * indices = range(ind + 1, len(seqs)) # <<<<<<<<<<<<<< + * for j in indices: + * seq2 = seqs[j] + */ + /*else*/ { + __pyx_t_3 = __Pyx_PyInt_From_long((__pyx_v_ind + 1)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 439, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (unlikely(__pyx_v_seqs == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(0, 439, __pyx_L1_error) + } + __pyx_t_5 = __Pyx_PyList_GET_SIZE(__pyx_v_seqs); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 439, __pyx_L1_error) + __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 439, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 439, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3)) __PYX_ERR(0, 439, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1)) __PYX_ERR(0, 439, __pyx_L1_error); + __pyx_t_3 = 0; + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 439, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_indices = __pyx_t_1; + __pyx_t_1 = 0; + } + __pyx_L3:; + + /* "nw_ec_alignx.pyx":440 + * else: + * indices = range(ind + 1, len(seqs)) + * for j in indices: # <<<<<<<<<<<<<< + * seq2 = seqs[j] + * sco = NW(mat, decs, seq1, seq2, oscore=oscore, + */ + if (likely(PyList_CheckExact(__pyx_v_indices)) || PyTuple_CheckExact(__pyx_v_indices)) { + __pyx_t_1 = __pyx_v_indices; __Pyx_INCREF(__pyx_t_1); + __pyx_t_5 = 0; + __pyx_t_6 = NULL; + } else { + __pyx_t_5 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_indices); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 440, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 440, __pyx_L1_error) + } + for (;;) { + if (likely(!__pyx_t_6)) { + if (likely(PyList_CheckExact(__pyx_t_1))) { + { + Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 440, __pyx_L1_error) + #endif + if (__pyx_t_5 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_5); __Pyx_INCREF(__pyx_t_2); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 440, __pyx_L1_error) + #else + __pyx_t_2 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 440, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + #endif + } else { + { + Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 440, __pyx_L1_error) + #endif + if (__pyx_t_5 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_5); __Pyx_INCREF(__pyx_t_2); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 440, __pyx_L1_error) + #else + __pyx_t_2 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 440, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + #endif + } + } else { + __pyx_t_2 = __pyx_t_6(__pyx_t_1); + if (unlikely(!__pyx_t_2)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 440, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_2); + } + __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 440, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_j = __pyx_t_7; + + /* "nw_ec_alignx.pyx":441 + * indices = range(ind + 1, len(seqs)) + * for j in indices: + * seq2 = seqs[j] # <<<<<<<<<<<<<< + * sco = NW(mat, decs, seq1, seq2, oscore=oscore, + * localize=localize) + */ + if (unlikely(__pyx_v_seqs == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 441, __pyx_L1_error) + } + if (!(likely(PyList_CheckExact(PyList_GET_ITEM(__pyx_v_seqs, __pyx_v_j)))||((PyList_GET_ITEM(__pyx_v_seqs, __pyx_v_j)) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", PyList_GET_ITEM(__pyx_v_seqs, __pyx_v_j)))) __PYX_ERR(0, 441, __pyx_L1_error) + __pyx_t_2 = PyList_GET_ITEM(__pyx_v_seqs, __pyx_v_j); + __Pyx_INCREF(__pyx_t_2); + __Pyx_XDECREF_SET(__pyx_v_seq2, ((PyObject*)__pyx_t_2)); + __pyx_t_2 = 0; + + /* "nw_ec_alignx.pyx":442 + * for j in indices: + * seq2 = seqs[j] + * sco = NW(mat, decs, seq1, seq2, oscore=oscore, # <<<<<<<<<<<<<< + * localize=localize) + * if oscore: + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_NW); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 442, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 442, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF((PyObject *)__pyx_v_mat); + __Pyx_GIVEREF((PyObject *)__pyx_v_mat); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_mat))) __PYX_ERR(0, 442, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_decs); + __Pyx_GIVEREF(__pyx_v_decs); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_decs)) __PYX_ERR(0, 442, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_seq1); + __Pyx_GIVEREF(__pyx_v_seq1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_seq1)) __PYX_ERR(0, 442, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_seq2); + __Pyx_GIVEREF(__pyx_v_seq2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_v_seq2)) __PYX_ERR(0, 442, __pyx_L1_error); + __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 442, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_oscore, ((PyObject *)__pyx_v_oscore)) < 0) __PYX_ERR(0, 442, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":443 + * seq2 = seqs[j] + * sco = NW(mat, decs, seq1, seq2, oscore=oscore, + * localize=localize) # <<<<<<<<<<<<<< + * if oscore: + * if sco <= thres: + */ + if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_localize, ((PyObject *)__pyx_v_localize)) < 0) __PYX_ERR(0, 442, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":442 + * for j in indices: + * seq2 = seqs[j] + * sco = NW(mat, decs, seq1, seq2, oscore=oscore, # <<<<<<<<<<<<<< + * localize=localize) + * if oscore: + */ + __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 442, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF_SET(__pyx_v_sco, __pyx_t_9); + __pyx_t_9 = 0; + + /* "nw_ec_alignx.pyx":444 + * sco = NW(mat, decs, seq1, seq2, oscore=oscore, + * localize=localize) + * if oscore: # <<<<<<<<<<<<<< + * if sco <= thres: + * resdic[ind][j] = sco + */ + __pyx_t_4 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_oscore)); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 444, __pyx_L1_error) + if (__pyx_t_4) { + + /* "nw_ec_alignx.pyx":445 + * localize=localize) + * if oscore: + * if sco <= thres: # <<<<<<<<<<<<<< + * resdic[ind][j] = sco + * else: + */ + __pyx_t_9 = PyFloat_FromDouble(__pyx_v_thres); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 445, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_8 = PyObject_RichCompare(__pyx_v_sco, __pyx_t_9, Py_LE); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 445, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 445, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (__pyx_t_4) { + + /* "nw_ec_alignx.pyx":446 + * if oscore: + * if sco <= thres: + * resdic[ind][j] = sco # <<<<<<<<<<<<<< + * else: + * if sco[2] <= thres: + */ + __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_ind); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 446, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_9 = __Pyx_PyDict_GetItem(__pyx_v_resdic, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 446, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely((__Pyx_SetItemInt(__pyx_t_9, __pyx_v_j, __pyx_v_sco, int, 1, __Pyx_PyInt_From_int, 0, 0, 0) < 0))) __PYX_ERR(0, 446, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + + /* "nw_ec_alignx.pyx":445 + * localize=localize) + * if oscore: + * if sco <= thres: # <<<<<<<<<<<<<< + * resdic[ind][j] = sco + * else: + */ + } + + /* "nw_ec_alignx.pyx":444 + * sco = NW(mat, decs, seq1, seq2, oscore=oscore, + * localize=localize) + * if oscore: # <<<<<<<<<<<<<< + * if sco <= thres: + * resdic[ind][j] = sco + */ + goto __pyx_L6; + } + + /* "nw_ec_alignx.pyx":448 + * resdic[ind][j] = sco + * else: + * if sco[2] <= thres: # <<<<<<<<<<<<<< + * resdic[ind][j] = sco + * return resdic + */ + /*else*/ { + __pyx_t_9 = __Pyx_GetItemInt(__pyx_v_sco, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 448, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_8 = PyFloat_FromDouble(__pyx_v_thres); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 448, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_3 = PyObject_RichCompare(__pyx_t_9, __pyx_t_8, Py_LE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 448, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 448, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_4) { + + /* "nw_ec_alignx.pyx":449 + * else: + * if sco[2] <= thres: + * resdic[ind][j] = sco # <<<<<<<<<<<<<< + * return resdic + * + */ + __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_ind); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 449, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_8 = __Pyx_PyDict_GetItem(__pyx_v_resdic, __pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 449, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely((__Pyx_SetItemInt(__pyx_t_8, __pyx_v_j, __pyx_v_sco, int, 1, __Pyx_PyInt_From_int, 0, 0, 0) < 0))) __PYX_ERR(0, 449, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + + /* "nw_ec_alignx.pyx":448 + * resdic[ind][j] = sco + * else: + * if sco[2] <= thres: # <<<<<<<<<<<<<< + * resdic[ind][j] = sco + * return resdic + */ + } + } + __pyx_L6:; + + /* "nw_ec_alignx.pyx":440 + * else: + * indices = range(ind + 1, len(seqs)) + * for j in indices: # <<<<<<<<<<<<<< + * seq2 = seqs[j] + * sco = NW(mat, decs, seq1, seq2, oscore=oscore, + */ + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "nw_ec_alignx.pyx":450 + * if sco[2] <= thres: + * resdic[ind][j] = sco + * return resdic # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_resdic); + __pyx_r = __pyx_v_resdic; + goto __pyx_L0; + + /* "nw_ec_alignx.pyx":408 + * + * + * def ind_vs_alldb(int ind, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, # <<<<<<<<<<<<<< + * dict decs, float thres=1.0, bool wholedb=False, + * bool localize=False, bool oscore=True): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_9); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mat.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("nw_ec_alignx.ind_vs_alldb", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mat.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XDECREF(__pyx_v_resdic); + __Pyx_XDECREF(__pyx_v_seq1); + __Pyx_XDECREF(__pyx_v_seq2); + __Pyx_XDECREF(__pyx_v_indices); + __Pyx_XDECREF(__pyx_v_sco); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "nw_ec_alignx.pyx":453 + * + * + * def seq_vs_db(list seq1, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, dict decs, # <<<<<<<<<<<<<< + * float thres=1.0, bool localize=False, bool oscore=True): + * """Align de specified ESSs vs all the ESS in the database seqs. + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_12nw_ec_alignx_11seq_vs_db(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_12nw_ec_alignx_10seq_vs_db, "Align de specified ESSs vs all the ESS in the database seqs. \n Returns a dictionary with the scores. The keys are the index of\n the sequenc in database (seqs) and the values are ths scores.\n\n Keyword Arguments:\n seq1 -- List, ESS. Each element of the list is an EC number\n seqs -- List, ESSs database. Each ESS is a list of EC numbers\n mat -- ndarray, EC number similarity matrix\n decs -- Dict, EC number index dictionary\n thres -- Float, threshold score to filter de data (default 1.0)\n The data wil be captured with score <= thres.\n localize -- Bool. If True, the scoring of the alignment will be \n made only in the part of the alignment covered by \n the shortest ESS (default False)\n oscore -- Bool. If True, returns only the score of the alignment \n otherwise, returns a tuple with the algined ESSs and\n the corresonding score (defautl True)\n "); +static PyMethodDef __pyx_mdef_12nw_ec_alignx_11seq_vs_db = {"seq_vs_db", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_12nw_ec_alignx_11seq_vs_db, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_12nw_ec_alignx_10seq_vs_db}; +static PyObject *__pyx_pw_12nw_ec_alignx_11seq_vs_db(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_seq1 = 0; + PyObject *__pyx_v_seqs = 0; + PyArrayObject *__pyx_v_mat = 0; + PyObject *__pyx_v_decs = 0; + float __pyx_v_thres; + PyBoolObject *__pyx_v_localize = 0; + PyBoolObject *__pyx_v_oscore = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[7] = {0,0,0,0,0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("seq_vs_db (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_seq1,&__pyx_n_s_seqs,&__pyx_n_s_mat,&__pyx_n_s_decs,&__pyx_n_s_thres,&__pyx_n_s_localize,&__pyx_n_s_oscore,0}; + values[5] = __Pyx_Arg_NewRef_FASTCALL((PyObject *)__pyx_k__15); + values[6] = __Pyx_Arg_NewRef_FASTCALL((PyObject *)__pyx_k__16); + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_seq1)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 453, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_seqs)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 453, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("seq_vs_db", 0, 4, 7, 1); __PYX_ERR(0, 453, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_mat)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 453, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("seq_vs_db", 0, 4, 7, 2); __PYX_ERR(0, 453, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_decs)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 453, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("seq_vs_db", 0, 4, 7, 3); __PYX_ERR(0, 453, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_thres); + if (value) { values[4] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 453, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_localize); + if (value) { values[5] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 453, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_oscore); + if (value) { values[6] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 453, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "seq_vs_db") < 0)) __PYX_ERR(0, 453, __pyx_L3_error) + } + } else { + switch (__pyx_nargs) { + case 7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_seq1 = ((PyObject*)values[0]); + __pyx_v_seqs = ((PyObject*)values[1]); + __pyx_v_mat = ((PyArrayObject *)values[2]); + __pyx_v_decs = ((PyObject*)values[3]); + if (values[4]) { + __pyx_v_thres = __pyx_PyFloat_AsFloat(values[4]); if (unlikely((__pyx_v_thres == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 454, __pyx_L3_error) + } else { + __pyx_v_thres = ((float)((double)1.0)); + } + __pyx_v_localize = ((PyBoolObject *)values[5]); + __pyx_v_oscore = ((PyBoolObject *)values[6]); + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("seq_vs_db", 0, 4, 7, __pyx_nargs); __PYX_ERR(0, 453, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("nw_ec_alignx.seq_vs_db", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_seq1), (&PyList_Type), 1, "seq1", 1))) __PYX_ERR(0, 453, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_seqs), (&PyList_Type), 1, "seqs", 1))) __PYX_ERR(0, 453, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_5numpy_ndarray, 1, "mat", 0))) __PYX_ERR(0, 453, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_decs), (&PyDict_Type), 1, "decs", 1))) __PYX_ERR(0, 453, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_localize), __pyx_ptype_7cpython_4bool_bool, 1, "localize", 0))) __PYX_ERR(0, 454, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_oscore), __pyx_ptype_7cpython_4bool_bool, 1, "oscore", 0))) __PYX_ERR(0, 454, __pyx_L1_error) + __pyx_r = __pyx_pf_12nw_ec_alignx_10seq_vs_db(__pyx_self, __pyx_v_seq1, __pyx_v_seqs, __pyx_v_mat, __pyx_v_decs, __pyx_v_thres, __pyx_v_localize, __pyx_v_oscore); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_12nw_ec_alignx_10seq_vs_db(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_seq1, PyObject *__pyx_v_seqs, PyArrayObject *__pyx_v_mat, PyObject *__pyx_v_decs, float __pyx_v_thres, PyBoolObject *__pyx_v_localize, PyBoolObject *__pyx_v_oscore) { + PyObject *__pyx_v_resdict = 0; + Py_ssize_t __pyx_v_i; + PyObject *__pyx_v_seq2 = NULL; + PyObject *__pyx_v_sco = NULL; + __Pyx_LocalBuf_ND __pyx_pybuffernd_mat; + __Pyx_Buffer __pyx_pybuffer_mat; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + Py_ssize_t __pyx_t_2; + Py_ssize_t __pyx_t_3; + Py_ssize_t __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + int __pyx_t_8; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("seq_vs_db", 1); + __pyx_pybuffer_mat.pybuffer.buf = NULL; + __pyx_pybuffer_mat.refcount = 0; + __pyx_pybuffernd_mat.data = NULL; + __pyx_pybuffernd_mat.rcbuffer = &__pyx_pybuffer_mat; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mat.rcbuffer->pybuffer, (PyObject*)__pyx_v_mat, &__Pyx_TypeInfo_nn___pyx_t_12nw_ec_alignx_DTYPEF_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 453, __pyx_L1_error) + } + __pyx_pybuffernd_mat.diminfo[0].strides = __pyx_pybuffernd_mat.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_mat.diminfo[0].shape = __pyx_pybuffernd_mat.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_mat.diminfo[1].strides = __pyx_pybuffernd_mat.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_mat.diminfo[1].shape = __pyx_pybuffernd_mat.rcbuffer->pybuffer.shape[1]; + + /* "nw_ec_alignx.pyx":474 + * """ + * cdef: + * dict resdict = {} # <<<<<<<<<<<<<< + * for i in range(len(seqs)): + * seq2 = seqs[i] + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 474, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_resdict = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "nw_ec_alignx.pyx":475 + * cdef: + * dict resdict = {} + * for i in range(len(seqs)): # <<<<<<<<<<<<<< + * seq2 = seqs[i] + * sco = NW(mat, decs, seq1, seq2, oscore=oscore, localize=localize) + */ + if (unlikely(__pyx_v_seqs == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(0, 475, __pyx_L1_error) + } + __pyx_t_2 = __Pyx_PyList_GET_SIZE(__pyx_v_seqs); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(0, 475, __pyx_L1_error) + __pyx_t_3 = __pyx_t_2; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_i = __pyx_t_4; + + /* "nw_ec_alignx.pyx":476 + * dict resdict = {} + * for i in range(len(seqs)): + * seq2 = seqs[i] # <<<<<<<<<<<<<< + * sco = NW(mat, decs, seq1, seq2, oscore=oscore, localize=localize) + * if oscore: + */ + if (unlikely(__pyx_v_seqs == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 476, __pyx_L1_error) + } + __pyx_t_1 = PyList_GET_ITEM(__pyx_v_seqs, __pyx_v_i); + __Pyx_INCREF(__pyx_t_1); + __Pyx_XDECREF_SET(__pyx_v_seq2, __pyx_t_1); + __pyx_t_1 = 0; + + /* "nw_ec_alignx.pyx":477 + * for i in range(len(seqs)): + * seq2 = seqs[i] + * sco = NW(mat, decs, seq1, seq2, oscore=oscore, localize=localize) # <<<<<<<<<<<<<< + * if oscore: + * if sco <= thres: + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_NW); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 477, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 477, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_INCREF((PyObject *)__pyx_v_mat); + __Pyx_GIVEREF((PyObject *)__pyx_v_mat); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_mat))) __PYX_ERR(0, 477, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_decs); + __Pyx_GIVEREF(__pyx_v_decs); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_decs)) __PYX_ERR(0, 477, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_seq1); + __Pyx_GIVEREF(__pyx_v_seq1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_seq1)) __PYX_ERR(0, 477, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_seq2); + __Pyx_GIVEREF(__pyx_v_seq2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_v_seq2)) __PYX_ERR(0, 477, __pyx_L1_error); + __pyx_t_6 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 477, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_oscore, ((PyObject *)__pyx_v_oscore)) < 0) __PYX_ERR(0, 477, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_localize, ((PyObject *)__pyx_v_localize)) < 0) __PYX_ERR(0, 477, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 477, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF_SET(__pyx_v_sco, __pyx_t_7); + __pyx_t_7 = 0; + + /* "nw_ec_alignx.pyx":478 + * seq2 = seqs[i] + * sco = NW(mat, decs, seq1, seq2, oscore=oscore, localize=localize) + * if oscore: # <<<<<<<<<<<<<< + * if sco <= thres: + * resdict[i] = sco + */ + __pyx_t_8 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_oscore)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 478, __pyx_L1_error) + if (__pyx_t_8) { + + /* "nw_ec_alignx.pyx":479 + * sco = NW(mat, decs, seq1, seq2, oscore=oscore, localize=localize) + * if oscore: + * if sco <= thres: # <<<<<<<<<<<<<< + * resdict[i] = sco + * else: + */ + __pyx_t_7 = PyFloat_FromDouble(__pyx_v_thres); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 479, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_6 = PyObject_RichCompare(__pyx_v_sco, __pyx_t_7, Py_LE); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 479, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 479, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (__pyx_t_8) { + + /* "nw_ec_alignx.pyx":480 + * if oscore: + * if sco <= thres: + * resdict[i] = sco # <<<<<<<<<<<<<< + * else: + * if sco[2] <= thres: + */ + __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_i); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 480, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + if (unlikely((PyDict_SetItem(__pyx_v_resdict, __pyx_t_6, __pyx_v_sco) < 0))) __PYX_ERR(0, 480, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "nw_ec_alignx.pyx":479 + * sco = NW(mat, decs, seq1, seq2, oscore=oscore, localize=localize) + * if oscore: + * if sco <= thres: # <<<<<<<<<<<<<< + * resdict[i] = sco + * else: + */ + } + + /* "nw_ec_alignx.pyx":478 + * seq2 = seqs[i] + * sco = NW(mat, decs, seq1, seq2, oscore=oscore, localize=localize) + * if oscore: # <<<<<<<<<<<<<< + * if sco <= thres: + * resdict[i] = sco + */ + goto __pyx_L5; + } + + /* "nw_ec_alignx.pyx":482 + * resdict[i] = sco + * else: + * if sco[2] <= thres: # <<<<<<<<<<<<<< + * resdict[i] = sco + * return resdict + */ + /*else*/ { + __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_sco, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyFloat_FromDouble(__pyx_v_thres); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_5 = PyObject_RichCompare(__pyx_t_6, __pyx_t_7, Py_LE); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_8) { + + /* "nw_ec_alignx.pyx":483 + * else: + * if sco[2] <= thres: + * resdict[i] = sco # <<<<<<<<<<<<<< + * return resdict + * + */ + __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_i); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 483, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (unlikely((PyDict_SetItem(__pyx_v_resdict, __pyx_t_5, __pyx_v_sco) < 0))) __PYX_ERR(0, 483, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "nw_ec_alignx.pyx":482 + * resdict[i] = sco + * else: + * if sco[2] <= thres: # <<<<<<<<<<<<<< + * resdict[i] = sco + * return resdict + */ + } + } + __pyx_L5:; + } + + /* "nw_ec_alignx.pyx":484 + * if sco[2] <= thres: + * resdict[i] = sco + * return resdict # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_resdict); + __pyx_r = __pyx_v_resdict; + goto __pyx_L0; + + /* "nw_ec_alignx.pyx":453 + * + * + * def seq_vs_db(list seq1, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, dict decs, # <<<<<<<<<<<<<< + * float thres=1.0, bool localize=False, bool oscore=True): + * """Align de specified ESSs vs all the ESS in the database seqs. + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mat.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("nw_ec_alignx.seq_vs_db", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mat.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XDECREF(__pyx_v_resdict); + __Pyx_XDECREF(__pyx_v_seq2); + __Pyx_XDECREF(__pyx_v_sco); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "nw_ec_alignx.pyx":487 + * + * + * def db_vs_db(list seqs1, list seqs2, np.ndarray[DTYPEF_t, ndim=2] mat, # <<<<<<<<<<<<<< + * dict decs, float thres=1.0, bool localize=False, + * bool oscore=True, int nproc=2): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_12nw_ec_alignx_13db_vs_db(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_12nw_ec_alignx_12db_vs_db, "Align all the ESS in both databases (seqs1, seqs2). The result\n is a dictionary of dictionaries. The fist key representes the index\n in of the ESS in the first database; the second key is the index of\n the ESS in the second database and the value is the score.\n\n BEWARE if the database is huge and the threshold is > 0.4 the procces may \n use all the RAM\n\n Keyword Arguments:\n seqs1 -- List, ESSs database1. Each element is a list of EC numbers\n seqs2 -- List, ESSs database2.\n mat -- ndarray, EC number similarity matrix\n decs -- Dict, EC number index dictionary\n thres -- Float, threshold score to filter de data (default 1.0)\n The data wil be captured with score <= thres.\n localize -- Bool. If True, the scoring of the alignment will be \n made only in the part of the alignment covered by \n the shortest ESS (default False)\n nproc -- Number of cores to use (default 2)\n oscore -- Bool. If True, returns only the score of the alignment \n otherwise, returns a tuple with the algined ESSs and\n the corresonding score (defautl True)\n "); +static PyMethodDef __pyx_mdef_12nw_ec_alignx_13db_vs_db = {"db_vs_db", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_12nw_ec_alignx_13db_vs_db, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_12nw_ec_alignx_12db_vs_db}; +static PyObject *__pyx_pw_12nw_ec_alignx_13db_vs_db(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_seqs1 = 0; + PyObject *__pyx_v_seqs2 = 0; + PyArrayObject *__pyx_v_mat = 0; + PyObject *__pyx_v_decs = 0; + float __pyx_v_thres; + PyBoolObject *__pyx_v_localize = 0; + PyBoolObject *__pyx_v_oscore = 0; + int __pyx_v_nproc; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[8] = {0,0,0,0,0,0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("db_vs_db (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_seqs1,&__pyx_n_s_seqs2,&__pyx_n_s_mat,&__pyx_n_s_decs,&__pyx_n_s_thres,&__pyx_n_s_localize,&__pyx_n_s_oscore,&__pyx_n_s_nproc,0}; + values[5] = __Pyx_Arg_NewRef_FASTCALL((PyObject *)__pyx_k__17); + values[6] = __Pyx_Arg_NewRef_FASTCALL((PyObject *)__pyx_k__18); + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 8: values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_seqs1)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 487, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_seqs2)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 487, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("db_vs_db", 0, 4, 8, 1); __PYX_ERR(0, 487, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_mat)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 487, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("db_vs_db", 0, 4, 8, 2); __PYX_ERR(0, 487, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_decs)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 487, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("db_vs_db", 0, 4, 8, 3); __PYX_ERR(0, 487, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_thres); + if (value) { values[4] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 487, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_localize); + if (value) { values[5] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 487, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_oscore); + if (value) { values[6] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 487, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_nproc); + if (value) { values[7] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 487, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "db_vs_db") < 0)) __PYX_ERR(0, 487, __pyx_L3_error) + } + } else { + switch (__pyx_nargs) { + case 8: values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_seqs1 = ((PyObject*)values[0]); + __pyx_v_seqs2 = ((PyObject*)values[1]); + __pyx_v_mat = ((PyArrayObject *)values[2]); + __pyx_v_decs = ((PyObject*)values[3]); + if (values[4]) { + __pyx_v_thres = __pyx_PyFloat_AsFloat(values[4]); if (unlikely((__pyx_v_thres == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 488, __pyx_L3_error) + } else { + __pyx_v_thres = ((float)((double)1.0)); + } + __pyx_v_localize = ((PyBoolObject *)values[5]); + __pyx_v_oscore = ((PyBoolObject *)values[6]); + if (values[7]) { + __pyx_v_nproc = __Pyx_PyInt_As_int(values[7]); if (unlikely((__pyx_v_nproc == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 489, __pyx_L3_error) + } else { + __pyx_v_nproc = ((int)((int)2)); + } + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("db_vs_db", 0, 4, 8, __pyx_nargs); __PYX_ERR(0, 487, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("nw_ec_alignx.db_vs_db", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_seqs1), (&PyList_Type), 1, "seqs1", 1))) __PYX_ERR(0, 487, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_seqs2), (&PyList_Type), 1, "seqs2", 1))) __PYX_ERR(0, 487, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_5numpy_ndarray, 1, "mat", 0))) __PYX_ERR(0, 487, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_decs), (&PyDict_Type), 1, "decs", 1))) __PYX_ERR(0, 488, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_localize), __pyx_ptype_7cpython_4bool_bool, 1, "localize", 0))) __PYX_ERR(0, 488, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_oscore), __pyx_ptype_7cpython_4bool_bool, 1, "oscore", 0))) __PYX_ERR(0, 489, __pyx_L1_error) + __pyx_r = __pyx_pf_12nw_ec_alignx_12db_vs_db(__pyx_self, __pyx_v_seqs1, __pyx_v_seqs2, __pyx_v_mat, __pyx_v_decs, __pyx_v_thres, __pyx_v_localize, __pyx_v_oscore, __pyx_v_nproc); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_12nw_ec_alignx_12db_vs_db(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_seqs1, PyObject *__pyx_v_seqs2, PyArrayObject *__pyx_v_mat, PyObject *__pyx_v_decs, float __pyx_v_thres, PyBoolObject *__pyx_v_localize, PyBoolObject *__pyx_v_oscore, int __pyx_v_nproc) { + PyObject *__pyx_v_resdic = 0; + PyObject *__pyx_v_pool = NULL; + PyObject *__pyx_v_align_func = NULL; + PyObject *__pyx_v_resd = NULL; + Py_ssize_t __pyx_v_i; + PyObject *__pyx_v_d = NULL; + __Pyx_LocalBuf_ND __pyx_pybuffernd_mat; + __Pyx_Buffer __pyx_pybuffer_mat; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + unsigned int __pyx_t_5; + Py_ssize_t __pyx_t_6; + Py_ssize_t __pyx_t_7; + Py_ssize_t __pyx_t_8; + int __pyx_t_9; + int __pyx_t_10; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("db_vs_db", 1); + __pyx_pybuffer_mat.pybuffer.buf = NULL; + __pyx_pybuffer_mat.refcount = 0; + __pyx_pybuffernd_mat.data = NULL; + __pyx_pybuffernd_mat.rcbuffer = &__pyx_pybuffer_mat; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mat.rcbuffer->pybuffer, (PyObject*)__pyx_v_mat, &__Pyx_TypeInfo_nn___pyx_t_12nw_ec_alignx_DTYPEF_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 487, __pyx_L1_error) + } + __pyx_pybuffernd_mat.diminfo[0].strides = __pyx_pybuffernd_mat.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_mat.diminfo[0].shape = __pyx_pybuffernd_mat.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_mat.diminfo[1].strides = __pyx_pybuffernd_mat.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_mat.diminfo[1].shape = __pyx_pybuffernd_mat.rcbuffer->pybuffer.shape[1]; + + /* "nw_ec_alignx.pyx":514 + * """ + * cdef: + * dict resdic = {} # <<<<<<<<<<<<<< + * pool = Pool(processes=nproc) + * align_func = partial(seq_vs_db, seqs=seqs2, mat=mat, decs=decs, thres=thres, + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 514, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_resdic = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "nw_ec_alignx.pyx":515 + * cdef: + * dict resdic = {} + * pool = Pool(processes=nproc) # <<<<<<<<<<<<<< + * align_func = partial(seq_vs_db, seqs=seqs2, mat=mat, decs=decs, thres=thres, + * localize=localize, oscore=oscore) + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Pool); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 515, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 515, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_nproc); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 515, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_processes, __pyx_t_3) < 0) __PYX_ERR(0, 515, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 515, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_pool = __pyx_t_3; + __pyx_t_3 = 0; + + /* "nw_ec_alignx.pyx":516 + * dict resdic = {} + * pool = Pool(processes=nproc) + * align_func = partial(seq_vs_db, seqs=seqs2, mat=mat, decs=decs, thres=thres, # <<<<<<<<<<<<<< + * localize=localize, oscore=oscore) + * resd = pool.map(align_func, seqs1) + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_partial); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 516, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_seq_vs_db); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 516, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 516, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2)) __PYX_ERR(0, 516, __pyx_L1_error); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 516, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_seqs, __pyx_v_seqs2) < 0) __PYX_ERR(0, 516, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_mat, ((PyObject *)__pyx_v_mat)) < 0) __PYX_ERR(0, 516, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_decs, __pyx_v_decs) < 0) __PYX_ERR(0, 516, __pyx_L1_error) + __pyx_t_4 = PyFloat_FromDouble(__pyx_v_thres); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 516, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_thres, __pyx_t_4) < 0) __PYX_ERR(0, 516, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":517 + * pool = Pool(processes=nproc) + * align_func = partial(seq_vs_db, seqs=seqs2, mat=mat, decs=decs, thres=thres, + * localize=localize, oscore=oscore) # <<<<<<<<<<<<<< + * resd = pool.map(align_func, seqs1) + * for i in range(len(resd)): + */ + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_localize, ((PyObject *)__pyx_v_localize)) < 0) __PYX_ERR(0, 516, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_oscore, ((PyObject *)__pyx_v_oscore)) < 0) __PYX_ERR(0, 516, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":516 + * dict resdic = {} + * pool = Pool(processes=nproc) + * align_func = partial(seq_vs_db, seqs=seqs2, mat=mat, decs=decs, thres=thres, # <<<<<<<<<<<<<< + * localize=localize, oscore=oscore) + * resd = pool.map(align_func, seqs1) + */ + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 516, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_align_func = __pyx_t_4; + __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":518 + * align_func = partial(seq_vs_db, seqs=seqs2, mat=mat, decs=decs, thres=thres, + * localize=localize, oscore=oscore) + * resd = pool.map(align_func, seqs1) # <<<<<<<<<<<<<< + * for i in range(len(resd)): + * d = resd[i] + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_pool, __pyx_n_s_map); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 518, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_v_align_func, __pyx_v_seqs1}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 2+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 518, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_v_resd = __pyx_t_4; + __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":519 + * localize=localize, oscore=oscore) + * resd = pool.map(align_func, seqs1) + * for i in range(len(resd)): # <<<<<<<<<<<<<< + * d = resd[i] + * if not d == {}: + */ + __pyx_t_6 = PyObject_Length(__pyx_v_resd); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 519, __pyx_L1_error) + __pyx_t_7 = __pyx_t_6; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { + __pyx_v_i = __pyx_t_8; + + /* "nw_ec_alignx.pyx":520 + * resd = pool.map(align_func, seqs1) + * for i in range(len(resd)): + * d = resd[i] # <<<<<<<<<<<<<< + * if not d == {}: + * resdic[i] = resd[i] + */ + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_resd, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 520, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_XDECREF_SET(__pyx_v_d, __pyx_t_4); + __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":521 + * for i in range(len(resd)): + * d = resd[i] + * if not d == {}: # <<<<<<<<<<<<<< + * resdic[i] = resd[i] + * pool.close() + */ + __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 521, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = PyObject_RichCompare(__pyx_v_d, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 521, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 521, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_10 = (!__pyx_t_9); + if (__pyx_t_10) { + + /* "nw_ec_alignx.pyx":522 + * d = resd[i] + * if not d == {}: + * resdic[i] = resd[i] # <<<<<<<<<<<<<< + * pool.close() + * return resdic + */ + __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_resd, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 522, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_i); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 522, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (unlikely((PyDict_SetItem(__pyx_v_resdic, __pyx_t_4, __pyx_t_2) < 0))) __PYX_ERR(0, 522, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "nw_ec_alignx.pyx":521 + * for i in range(len(resd)): + * d = resd[i] + * if not d == {}: # <<<<<<<<<<<<<< + * resdic[i] = resd[i] + * pool.close() + */ + } + } + + /* "nw_ec_alignx.pyx":523 + * if not d == {}: + * resdic[i] = resd[i] + * pool.close() # <<<<<<<<<<<<<< + * return resdic + * + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_pool, __pyx_n_s_close); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 523, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, NULL}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 523, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "nw_ec_alignx.pyx":524 + * resdic[i] = resd[i] + * pool.close() + * return resdic # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_resdic); + __pyx_r = __pyx_v_resdic; + goto __pyx_L0; + + /* "nw_ec_alignx.pyx":487 + * + * + * def db_vs_db(list seqs1, list seqs2, np.ndarray[DTYPEF_t, ndim=2] mat, # <<<<<<<<<<<<<< + * dict decs, float thres=1.0, bool localize=False, + * bool oscore=True, int nproc=2): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mat.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("nw_ec_alignx.db_vs_db", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mat.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XDECREF(__pyx_v_resdic); + __Pyx_XDECREF(__pyx_v_pool); + __Pyx_XDECREF(__pyx_v_align_func); + __Pyx_XDECREF(__pyx_v_resd); + __Pyx_XDECREF(__pyx_v_d); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "nw_ec_alignx.pyx":527 + * + * + * def alldb_comp(list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, dict decs, # <<<<<<<<<<<<<< + * float thres=1.0, bool localize=False, bool oscore=True, + * int nproc=2): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_12nw_ec_alignx_15alldb_comp(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_12nw_ec_alignx_14alldb_comp, "Align all the ESS in the database (seqs) and return the results in form \n of dictionary. The result is equivalent to the upper part the all vs all \n comparisson matrix.\n\n BEWARE if the database is huge and the threshold is > 0.4 the procces may \n use all the RAM\n\n Keyword Arguments:\n seqs -- List, ESSs database. Each ESS is a list of EC numbers\n mat -- ndarray, EC number similarity matrix\n decs -- Dict, EC number index dictionary\n thres -- Float, score threshold to filter data (default 1.0). The data \n captured will be score <= thres.\n localize -- Score the alignment in the segment covered by te smallest ESS \n (default False)\n nproc -- Number of cores to use (default 2)\n oscore -- Bool. If True, returns only the score of the alignment \n otherwise, returns a tuple with the algined ESSs and\n the corresonding score (defautl True)\n "); +static PyMethodDef __pyx_mdef_12nw_ec_alignx_15alldb_comp = {"alldb_comp", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_12nw_ec_alignx_15alldb_comp, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_12nw_ec_alignx_14alldb_comp}; +static PyObject *__pyx_pw_12nw_ec_alignx_15alldb_comp(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_seqs = 0; + PyArrayObject *__pyx_v_mat = 0; + PyObject *__pyx_v_decs = 0; + float __pyx_v_thres; + PyBoolObject *__pyx_v_localize = 0; + PyBoolObject *__pyx_v_oscore = 0; + int __pyx_v_nproc; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[7] = {0,0,0,0,0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("alldb_comp (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_seqs,&__pyx_n_s_mat,&__pyx_n_s_decs,&__pyx_n_s_thres,&__pyx_n_s_localize,&__pyx_n_s_oscore,&__pyx_n_s_nproc,0}; + values[4] = __Pyx_Arg_NewRef_FASTCALL((PyObject *)__pyx_k__19); + values[5] = __Pyx_Arg_NewRef_FASTCALL((PyObject *)__pyx_k__20); + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_seqs)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 527, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_mat)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 527, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("alldb_comp", 0, 3, 7, 1); __PYX_ERR(0, 527, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_decs)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 527, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("alldb_comp", 0, 3, 7, 2); __PYX_ERR(0, 527, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_thres); + if (value) { values[3] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 527, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_localize); + if (value) { values[4] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 527, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_oscore); + if (value) { values[5] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 527, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_nproc); + if (value) { values[6] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 527, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "alldb_comp") < 0)) __PYX_ERR(0, 527, __pyx_L3_error) + } + } else { + switch (__pyx_nargs) { + case 7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_seqs = ((PyObject*)values[0]); + __pyx_v_mat = ((PyArrayObject *)values[1]); + __pyx_v_decs = ((PyObject*)values[2]); + if (values[3]) { + __pyx_v_thres = __pyx_PyFloat_AsFloat(values[3]); if (unlikely((__pyx_v_thres == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 528, __pyx_L3_error) + } else { + __pyx_v_thres = ((float)((double)1.0)); + } + __pyx_v_localize = ((PyBoolObject *)values[4]); + __pyx_v_oscore = ((PyBoolObject *)values[5]); + if (values[6]) { + __pyx_v_nproc = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_nproc == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 529, __pyx_L3_error) + } else { + __pyx_v_nproc = ((int)((int)2)); + } + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("alldb_comp", 0, 3, 7, __pyx_nargs); __PYX_ERR(0, 527, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("nw_ec_alignx.alldb_comp", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_seqs), (&PyList_Type), 1, "seqs", 1))) __PYX_ERR(0, 527, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_5numpy_ndarray, 1, "mat", 0))) __PYX_ERR(0, 527, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_decs), (&PyDict_Type), 1, "decs", 1))) __PYX_ERR(0, 527, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_localize), __pyx_ptype_7cpython_4bool_bool, 1, "localize", 0))) __PYX_ERR(0, 528, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_oscore), __pyx_ptype_7cpython_4bool_bool, 1, "oscore", 0))) __PYX_ERR(0, 528, __pyx_L1_error) + __pyx_r = __pyx_pf_12nw_ec_alignx_14alldb_comp(__pyx_self, __pyx_v_seqs, __pyx_v_mat, __pyx_v_decs, __pyx_v_thres, __pyx_v_localize, __pyx_v_oscore, __pyx_v_nproc); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_12nw_ec_alignx_14alldb_comp(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_seqs, PyArrayObject *__pyx_v_mat, PyObject *__pyx_v_decs, float __pyx_v_thres, PyBoolObject *__pyx_v_localize, PyBoolObject *__pyx_v_oscore, int __pyx_v_nproc) { + PyObject *__pyx_v_indices = 0; + PyObject *__pyx_v_resd = 0; + PyObject *__pyx_v_d = 0; + PyObject *__pyx_v_result = 0; + PyObject *__pyx_v_pool = NULL; + PyObject *__pyx_v_align_func = NULL; + __Pyx_LocalBuf_ND __pyx_pybuffernd_mat; + __Pyx_Buffer __pyx_pybuffer_mat; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + Py_ssize_t __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("alldb_comp", 1); + __pyx_pybuffer_mat.pybuffer.buf = NULL; + __pyx_pybuffer_mat.refcount = 0; + __pyx_pybuffernd_mat.data = NULL; + __pyx_pybuffernd_mat.rcbuffer = &__pyx_pybuffer_mat; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mat.rcbuffer->pybuffer, (PyObject*)__pyx_v_mat, &__Pyx_TypeInfo_nn___pyx_t_12nw_ec_alignx_DTYPEF_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 527, __pyx_L1_error) + } + __pyx_pybuffernd_mat.diminfo[0].strides = __pyx_pybuffernd_mat.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_mat.diminfo[0].shape = __pyx_pybuffernd_mat.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_mat.diminfo[1].strides = __pyx_pybuffernd_mat.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_mat.diminfo[1].shape = __pyx_pybuffernd_mat.rcbuffer->pybuffer.shape[1]; + + /* "nw_ec_alignx.pyx":551 + * """ + * cdef: + * indices = list(range(len(seqs))) # <<<<<<<<<<<<<< + * list resd + * dict d + */ + if (unlikely(__pyx_v_seqs == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(0, 551, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_PyList_GET_SIZE(__pyx_v_seqs); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 551, __pyx_L1_error) + __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 551, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 551, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PySequence_ListKeepNew(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 551, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_indices = __pyx_t_2; + __pyx_t_2 = 0; + + /* "nw_ec_alignx.pyx":554 + * list resd + * dict d + * dict result = {} # <<<<<<<<<<<<<< + * pool = Pool(processes=nproc) + * align_func = partial(ind_vs_alldb, mat=mat, decs=decs, seqs=seqs, + */ + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 554, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_result = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; + + /* "nw_ec_alignx.pyx":555 + * dict d + * dict result = {} + * pool = Pool(processes=nproc) # <<<<<<<<<<<<<< + * align_func = partial(ind_vs_alldb, mat=mat, decs=decs, seqs=seqs, + * thres=thres, localize=localize, oscore=oscore) + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Pool); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 555, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 555, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_nproc); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 555, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_processes, __pyx_t_4) < 0) __PYX_ERR(0, 555, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 555, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_pool = __pyx_t_4; + __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":556 + * dict result = {} + * pool = Pool(processes=nproc) + * align_func = partial(ind_vs_alldb, mat=mat, decs=decs, seqs=seqs, # <<<<<<<<<<<<<< + * thres=thres, localize=localize, oscore=oscore) + * resd = pool.map(align_func, indices, chunksize=nproc) + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_partial); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 556, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ind_vs_alldb); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 556, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 556, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3)) __PYX_ERR(0, 556, __pyx_L1_error); + __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 556, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_mat, ((PyObject *)__pyx_v_mat)) < 0) __PYX_ERR(0, 556, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_decs, __pyx_v_decs) < 0) __PYX_ERR(0, 556, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_seqs, __pyx_v_seqs) < 0) __PYX_ERR(0, 556, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":557 + * pool = Pool(processes=nproc) + * align_func = partial(ind_vs_alldb, mat=mat, decs=decs, seqs=seqs, + * thres=thres, localize=localize, oscore=oscore) # <<<<<<<<<<<<<< + * resd = pool.map(align_func, indices, chunksize=nproc) + * + */ + __pyx_t_5 = PyFloat_FromDouble(__pyx_v_thres); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 557, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_thres, __pyx_t_5) < 0) __PYX_ERR(0, 556, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_localize, ((PyObject *)__pyx_v_localize)) < 0) __PYX_ERR(0, 556, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_oscore, ((PyObject *)__pyx_v_oscore)) < 0) __PYX_ERR(0, 556, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":556 + * dict result = {} + * pool = Pool(processes=nproc) + * align_func = partial(ind_vs_alldb, mat=mat, decs=decs, seqs=seqs, # <<<<<<<<<<<<<< + * thres=thres, localize=localize, oscore=oscore) + * resd = pool.map(align_func, indices, chunksize=nproc) + */ + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 556, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_align_func = __pyx_t_5; + __pyx_t_5 = 0; + + /* "nw_ec_alignx.pyx":558 + * align_func = partial(ind_vs_alldb, mat=mat, decs=decs, seqs=seqs, + * thres=thres, localize=localize, oscore=oscore) + * resd = pool.map(align_func, indices, chunksize=nproc) # <<<<<<<<<<<<<< + * + * for d in resd: + */ + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_pool, __pyx_n_s_map); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 558, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 558, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_align_func); + __Pyx_GIVEREF(__pyx_v_align_func); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_align_func)) __PYX_ERR(0, 558, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_indices); + __Pyx_GIVEREF(__pyx_v_indices); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_indices)) __PYX_ERR(0, 558, __pyx_L1_error); + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 558, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_nproc); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 558, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_chunksize, __pyx_t_4) < 0) __PYX_ERR(0, 558, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 558, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!(likely(PyList_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_4))) __PYX_ERR(0, 558, __pyx_L1_error) + __pyx_v_resd = ((PyObject*)__pyx_t_4); + __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":560 + * resd = pool.map(align_func, indices, chunksize=nproc) + * + * for d in resd: # <<<<<<<<<<<<<< + * result.update(d) + * return result + */ + if (unlikely(__pyx_v_resd == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); + __PYX_ERR(0, 560, __pyx_L1_error) + } + __pyx_t_4 = __pyx_v_resd; __Pyx_INCREF(__pyx_t_4); + __pyx_t_1 = 0; + for (;;) { + { + Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_4); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 560, __pyx_L1_error) + #endif + if (__pyx_t_1 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_2 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_1); __Pyx_INCREF(__pyx_t_2); __pyx_t_1++; if (unlikely((0 < 0))) __PYX_ERR(0, 560, __pyx_L1_error) + #else + __pyx_t_2 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_1); __pyx_t_1++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 560, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + #endif + if (!(likely(PyDict_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_2))) __PYX_ERR(0, 560, __pyx_L1_error) + __Pyx_XDECREF_SET(__pyx_v_d, ((PyObject*)__pyx_t_2)); + __pyx_t_2 = 0; + + /* "nw_ec_alignx.pyx":561 + * + * for d in resd: + * result.update(d) # <<<<<<<<<<<<<< + * return result + * + */ + __pyx_t_2 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyDict_Type_update, __pyx_v_result, __pyx_v_d); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 561, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "nw_ec_alignx.pyx":560 + * resd = pool.map(align_func, indices, chunksize=nproc) + * + * for d in resd: # <<<<<<<<<<<<<< + * result.update(d) + * return result + */ + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":562 + * for d in resd: + * result.update(d) + * return result # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_result); + __pyx_r = __pyx_v_result; + goto __pyx_L0; + + /* "nw_ec_alignx.pyx":527 + * + * + * def alldb_comp(list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, dict decs, # <<<<<<<<<<<<<< + * float thres=1.0, bool localize=False, bool oscore=True, + * int nproc=2): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mat.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("nw_ec_alignx.alldb_comp", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mat.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XDECREF(__pyx_v_indices); + __Pyx_XDECREF(__pyx_v_resd); + __Pyx_XDECREF(__pyx_v_d); + __Pyx_XDECREF(__pyx_v_result); + __Pyx_XDECREF(__pyx_v_pool); + __Pyx_XDECREF(__pyx_v_align_func); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "nw_ec_alignx.pyx":565 + * + * + * def list_vs_alldb(list indices, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, # <<<<<<<<<<<<<< + * dict decs, float thres=1.0, bool localize=False, + * bool wholedb=False, bool oscore=False, int nproc=2): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_12nw_ec_alignx_17list_vs_alldb(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_12nw_ec_alignx_16list_vs_alldb, "Align all the ESS in the database (seqs) and return the results in form \n of dictionary. The result is equivalent to the upper part the all vs all \n comparisson matrix.\n\n BEWARE if the database is huge and the threshold is > 0.4 the procces may \n use all the RAM\n\n Keyword Arguments:\n inds -- List of indices of the database to align vs the rest of database\n seqs -- List, ESSs database. Each ESS is a list of EC numbers\n mat -- ndarray, EC number similarity matrix\n decs -- Dict, EC number index dictionary\n thres -- Float, score threshold to filter data (default 1.0). The data \n captured will be score <= thres.\n localize -- Score the alignment in the segment covered by te smallest ESS \n (default False)\n wholedb -- Bool, If True, the ind ESS is compared against all the sequences\n stored in seqs list.\n oscore -- Bool. If True, returns only the score of the alignment \n otherwise, returns a tuple with the algined ESSs and\n the corresonding score (defautl True)\n nproc -- Number of cores used (default 2)\n "); +static PyMethodDef __pyx_mdef_12nw_ec_alignx_17list_vs_alldb = {"list_vs_alldb", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_12nw_ec_alignx_17list_vs_alldb, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_12nw_ec_alignx_16list_vs_alldb}; +static PyObject *__pyx_pw_12nw_ec_alignx_17list_vs_alldb(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_indices = 0; + PyObject *__pyx_v_seqs = 0; + PyArrayObject *__pyx_v_mat = 0; + PyObject *__pyx_v_decs = 0; + float __pyx_v_thres; + PyBoolObject *__pyx_v_localize = 0; + PyBoolObject *__pyx_v_wholedb = 0; + PyBoolObject *__pyx_v_oscore = 0; + int __pyx_v_nproc; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[9] = {0,0,0,0,0,0,0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("list_vs_alldb (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_indices,&__pyx_n_s_seqs,&__pyx_n_s_mat,&__pyx_n_s_decs,&__pyx_n_s_thres,&__pyx_n_s_localize,&__pyx_n_s_wholedb,&__pyx_n_s_oscore,&__pyx_n_s_nproc,0}; + values[5] = __Pyx_Arg_NewRef_FASTCALL((PyObject *)__pyx_k__21); + values[6] = __Pyx_Arg_NewRef_FASTCALL((PyObject *)__pyx_k__22); + values[7] = __Pyx_Arg_NewRef_FASTCALL((PyObject *)__pyx_k__23); + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 9: values[8] = __Pyx_Arg_FASTCALL(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_indices)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 565, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_seqs)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 565, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("list_vs_alldb", 0, 4, 9, 1); __PYX_ERR(0, 565, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_mat)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 565, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("list_vs_alldb", 0, 4, 9, 2); __PYX_ERR(0, 565, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_decs)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 565, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("list_vs_alldb", 0, 4, 9, 3); __PYX_ERR(0, 565, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_thres); + if (value) { values[4] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 565, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_localize); + if (value) { values[5] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 565, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_wholedb); + if (value) { values[6] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 565, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_oscore); + if (value) { values[7] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 565, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_nproc); + if (value) { values[8] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 565, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "list_vs_alldb") < 0)) __PYX_ERR(0, 565, __pyx_L3_error) + } + } else { + switch (__pyx_nargs) { + case 9: values[8] = __Pyx_Arg_FASTCALL(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_indices = ((PyObject*)values[0]); + __pyx_v_seqs = ((PyObject*)values[1]); + __pyx_v_mat = ((PyArrayObject *)values[2]); + __pyx_v_decs = ((PyObject*)values[3]); + if (values[4]) { + __pyx_v_thres = __pyx_PyFloat_AsFloat(values[4]); if (unlikely((__pyx_v_thres == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 566, __pyx_L3_error) + } else { + __pyx_v_thres = ((float)((double)1.0)); + } + __pyx_v_localize = ((PyBoolObject *)values[5]); + __pyx_v_wholedb = ((PyBoolObject *)values[6]); + __pyx_v_oscore = ((PyBoolObject *)values[7]); + if (values[8]) { + __pyx_v_nproc = __Pyx_PyInt_As_int(values[8]); if (unlikely((__pyx_v_nproc == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 567, __pyx_L3_error) + } else { + __pyx_v_nproc = ((int)((int)2)); + } + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("list_vs_alldb", 0, 4, 9, __pyx_nargs); __PYX_ERR(0, 565, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("nw_ec_alignx.list_vs_alldb", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_indices), (&PyList_Type), 1, "indices", 1))) __PYX_ERR(0, 565, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_seqs), (&PyList_Type), 1, "seqs", 1))) __PYX_ERR(0, 565, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_5numpy_ndarray, 1, "mat", 0))) __PYX_ERR(0, 565, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_decs), (&PyDict_Type), 1, "decs", 1))) __PYX_ERR(0, 566, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_localize), __pyx_ptype_7cpython_4bool_bool, 1, "localize", 0))) __PYX_ERR(0, 566, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_wholedb), __pyx_ptype_7cpython_4bool_bool, 1, "wholedb", 0))) __PYX_ERR(0, 567, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_oscore), __pyx_ptype_7cpython_4bool_bool, 1, "oscore", 0))) __PYX_ERR(0, 567, __pyx_L1_error) + __pyx_r = __pyx_pf_12nw_ec_alignx_16list_vs_alldb(__pyx_self, __pyx_v_indices, __pyx_v_seqs, __pyx_v_mat, __pyx_v_decs, __pyx_v_thres, __pyx_v_localize, __pyx_v_wholedb, __pyx_v_oscore, __pyx_v_nproc); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_12nw_ec_alignx_16list_vs_alldb(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_seqs, PyArrayObject *__pyx_v_mat, PyObject *__pyx_v_decs, float __pyx_v_thres, PyBoolObject *__pyx_v_localize, PyBoolObject *__pyx_v_wholedb, PyBoolObject *__pyx_v_oscore, int __pyx_v_nproc) { + PyObject *__pyx_v_resd = 0; + PyObject *__pyx_v_d = 0; + PyObject *__pyx_v_result = 0; + PyObject *__pyx_v_pool = NULL; + PyObject *__pyx_v_align_func = NULL; + __Pyx_LocalBuf_ND __pyx_pybuffernd_mat; + __Pyx_Buffer __pyx_pybuffer_mat; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + Py_ssize_t __pyx_t_5; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("list_vs_alldb", 1); + __pyx_pybuffer_mat.pybuffer.buf = NULL; + __pyx_pybuffer_mat.refcount = 0; + __pyx_pybuffernd_mat.data = NULL; + __pyx_pybuffernd_mat.rcbuffer = &__pyx_pybuffer_mat; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mat.rcbuffer->pybuffer, (PyObject*)__pyx_v_mat, &__Pyx_TypeInfo_nn___pyx_t_12nw_ec_alignx_DTYPEF_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 565, __pyx_L1_error) + } + __pyx_pybuffernd_mat.diminfo[0].strides = __pyx_pybuffernd_mat.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_mat.diminfo[0].shape = __pyx_pybuffernd_mat.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_mat.diminfo[1].strides = __pyx_pybuffernd_mat.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_mat.diminfo[1].shape = __pyx_pybuffernd_mat.rcbuffer->pybuffer.shape[1]; + + /* "nw_ec_alignx.pyx":594 + * list resd + * dict d + * dict result = {} # <<<<<<<<<<<<<< + * pool = Pool(processes=nproc) + * align_func = partial(ind_vs_alldb, mat=mat, decs=decs, seqs=seqs, + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 594, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_result = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "nw_ec_alignx.pyx":595 + * dict d + * dict result = {} + * pool = Pool(processes=nproc) # <<<<<<<<<<<<<< + * align_func = partial(ind_vs_alldb, mat=mat, decs=decs, seqs=seqs, + * thres=thres, localize=localize, wholedb=wholedb, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Pool); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 595, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 595, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_nproc); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 595, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_processes, __pyx_t_3) < 0) __PYX_ERR(0, 595, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 595, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_pool = __pyx_t_3; + __pyx_t_3 = 0; + + /* "nw_ec_alignx.pyx":596 + * dict result = {} + * pool = Pool(processes=nproc) + * align_func = partial(ind_vs_alldb, mat=mat, decs=decs, seqs=seqs, # <<<<<<<<<<<<<< + * thres=thres, localize=localize, wholedb=wholedb, + * oscore=oscore) + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_partial); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 596, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ind_vs_alldb); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 596, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 596, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2)) __PYX_ERR(0, 596, __pyx_L1_error); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 596, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_mat, ((PyObject *)__pyx_v_mat)) < 0) __PYX_ERR(0, 596, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_decs, __pyx_v_decs) < 0) __PYX_ERR(0, 596, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_seqs, __pyx_v_seqs) < 0) __PYX_ERR(0, 596, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":597 + * pool = Pool(processes=nproc) + * align_func = partial(ind_vs_alldb, mat=mat, decs=decs, seqs=seqs, + * thres=thres, localize=localize, wholedb=wholedb, # <<<<<<<<<<<<<< + * oscore=oscore) + * resd = pool.map(align_func, indices, chunksize=nproc) + */ + __pyx_t_4 = PyFloat_FromDouble(__pyx_v_thres); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 597, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_thres, __pyx_t_4) < 0) __PYX_ERR(0, 596, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_localize, ((PyObject *)__pyx_v_localize)) < 0) __PYX_ERR(0, 596, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_wholedb, ((PyObject *)__pyx_v_wholedb)) < 0) __PYX_ERR(0, 596, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":598 + * align_func = partial(ind_vs_alldb, mat=mat, decs=decs, seqs=seqs, + * thres=thres, localize=localize, wholedb=wholedb, + * oscore=oscore) # <<<<<<<<<<<<<< + * resd = pool.map(align_func, indices, chunksize=nproc) + * + */ + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_oscore, ((PyObject *)__pyx_v_oscore)) < 0) __PYX_ERR(0, 596, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":596 + * dict result = {} + * pool = Pool(processes=nproc) + * align_func = partial(ind_vs_alldb, mat=mat, decs=decs, seqs=seqs, # <<<<<<<<<<<<<< + * thres=thres, localize=localize, wholedb=wholedb, + * oscore=oscore) + */ + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 596, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_align_func = __pyx_t_4; + __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":599 + * thres=thres, localize=localize, wholedb=wholedb, + * oscore=oscore) + * resd = pool.map(align_func, indices, chunksize=nproc) # <<<<<<<<<<<<<< + * + * for d in resd: + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_pool, __pyx_n_s_map); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 599, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 599, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_v_align_func); + __Pyx_GIVEREF(__pyx_v_align_func); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_align_func)) __PYX_ERR(0, 599, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_indices); + __Pyx_GIVEREF(__pyx_v_indices); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_indices)) __PYX_ERR(0, 599, __pyx_L1_error); + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 599, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_nproc); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 599, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_chunksize, __pyx_t_3) < 0) __PYX_ERR(0, 599, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 599, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (!(likely(PyList_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_3))) __PYX_ERR(0, 599, __pyx_L1_error) + __pyx_v_resd = ((PyObject*)__pyx_t_3); + __pyx_t_3 = 0; + + /* "nw_ec_alignx.pyx":601 + * resd = pool.map(align_func, indices, chunksize=nproc) + * + * for d in resd: # <<<<<<<<<<<<<< + * result.update(d) + * return result + */ + if (unlikely(__pyx_v_resd == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); + __PYX_ERR(0, 601, __pyx_L1_error) + } + __pyx_t_3 = __pyx_v_resd; __Pyx_INCREF(__pyx_t_3); + __pyx_t_5 = 0; + for (;;) { + { + Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 601, __pyx_L1_error) + #endif + if (__pyx_t_5 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 601, __pyx_L1_error) + #else + __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 601, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + #endif + if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_1))) __PYX_ERR(0, 601, __pyx_L1_error) + __Pyx_XDECREF_SET(__pyx_v_d, ((PyObject*)__pyx_t_1)); + __pyx_t_1 = 0; + + /* "nw_ec_alignx.pyx":602 + * + * for d in resd: + * result.update(d) # <<<<<<<<<<<<<< + * return result + * + */ + __pyx_t_1 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyDict_Type_update, __pyx_v_result, __pyx_v_d); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 602, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "nw_ec_alignx.pyx":601 + * resd = pool.map(align_func, indices, chunksize=nproc) + * + * for d in resd: # <<<<<<<<<<<<<< + * result.update(d) + * return result + */ + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "nw_ec_alignx.pyx":603 + * for d in resd: + * result.update(d) + * return result # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_result); + __pyx_r = __pyx_v_result; + goto __pyx_L0; + + /* "nw_ec_alignx.pyx":565 + * + * + * def list_vs_alldb(list indices, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, # <<<<<<<<<<<<<< + * dict decs, float thres=1.0, bool localize=False, + * bool wholedb=False, bool oscore=False, int nproc=2): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mat.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("nw_ec_alignx.list_vs_alldb", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mat.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XDECREF(__pyx_v_resd); + __Pyx_XDECREF(__pyx_v_d); + __Pyx_XDECREF(__pyx_v_result); + __Pyx_XDECREF(__pyx_v_pool); + __Pyx_XDECREF(__pyx_v_align_func); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "nw_ec_alignx.pyx":606 + * + * + * def alldb_shared(seqs, mat, decs, thres=1.0, localize=False, # <<<<<<<<<<<<<< + * nproc=2): + * """Align all the ESS in the database (seqs) and return the results as a + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_12nw_ec_alignx_19alldb_shared(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_12nw_ec_alignx_18alldb_shared, "Align all the ESS in the database (seqs) and return the results as a \n matrix with only the upper part filled. The rest of the matrix is \n initialized with 1s.\n\n This function is more memory efficient than alldb function, whoever\n coution must be taken if th database is to big (> 80000 seqs)\n\n Keyword Arguments:\n seqs -- List, ESSs database. Each ESS is a list of EC numbers\n mat -- ndarray, EC number similarity matrix\n decs -- Dict, EC number index dictionary\n thres -- Float, score threshold to filter data (default 1.0). The data \n captured will be score <= thres.\n localize -- Score the alignment in the segment covered by te smallest ESS \n (default False)\n nproc -- Number of cores used (default 2)\n "); +static PyMethodDef __pyx_mdef_12nw_ec_alignx_19alldb_shared = {"alldb_shared", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_12nw_ec_alignx_19alldb_shared, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_12nw_ec_alignx_18alldb_shared}; +static PyObject *__pyx_pw_12nw_ec_alignx_19alldb_shared(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_seqs = 0; + PyObject *__pyx_v_mat = 0; + PyObject *__pyx_v_decs = 0; + PyObject *__pyx_v_thres = 0; + PyObject *__pyx_v_localize = 0; + PyObject *__pyx_v_nproc = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[6] = {0,0,0,0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("alldb_shared (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_seqs,&__pyx_n_s_mat,&__pyx_n_s_decs,&__pyx_n_s_thres,&__pyx_n_s_localize,&__pyx_n_s_nproc,0}; + values[3] = __Pyx_Arg_NewRef_FASTCALL(((PyObject *)((PyObject*)__pyx_float_1_0))); + values[4] = __Pyx_Arg_NewRef_FASTCALL(((PyObject *)((PyObject *)Py_False))); + values[5] = __Pyx_Arg_NewRef_FASTCALL(((PyObject *)((PyObject *)__pyx_int_2))); + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_seqs)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 606, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_mat)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 606, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("alldb_shared", 0, 3, 6, 1); __PYX_ERR(0, 606, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_decs)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 606, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("alldb_shared", 0, 3, 6, 2); __PYX_ERR(0, 606, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_thres); + if (value) { values[3] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 606, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_localize); + if (value) { values[4] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 606, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_nproc); + if (value) { values[5] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 606, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "alldb_shared") < 0)) __PYX_ERR(0, 606, __pyx_L3_error) + } + } else { + switch (__pyx_nargs) { + case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_seqs = values[0]; + __pyx_v_mat = values[1]; + __pyx_v_decs = values[2]; + __pyx_v_thres = values[3]; + __pyx_v_localize = values[4]; + __pyx_v_nproc = values[5]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("alldb_shared", 0, 3, 6, __pyx_nargs); __PYX_ERR(0, 606, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("nw_ec_alignx.alldb_shared", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_12nw_ec_alignx_18alldb_shared(__pyx_self, __pyx_v_seqs, __pyx_v_mat, __pyx_v_decs, __pyx_v_thres, __pyx_v_localize, __pyx_v_nproc); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_12nw_ec_alignx_18alldb_shared(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_seqs, PyObject *__pyx_v_mat, PyObject *__pyx_v_decs, PyObject *__pyx_v_thres, PyObject *__pyx_v_localize, PyObject *__pyx_v_nproc) { + Py_ssize_t __pyx_v_total; + PyObject *__pyx_v_indices = NULL; + PyObject *__pyx_v_pool = NULL; + PyObject *__pyx_v_align_func = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + Py_ssize_t __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + unsigned int __pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("alldb_shared", 1); + + /* "nw_ec_alignx.pyx":625 + * nproc -- Number of cores used (default 2) + * """ + * total = len(seqs) # <<<<<<<<<<<<<< + * _create_global_arr(total) + * indices = range(total) + */ + __pyx_t_1 = PyObject_Length(__pyx_v_seqs); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 625, __pyx_L1_error) + __pyx_v_total = __pyx_t_1; + + /* "nw_ec_alignx.pyx":626 + * """ + * total = len(seqs) + * _create_global_arr(total) # <<<<<<<<<<<<<< + * indices = range(total) + * pool = Pool(processes=nproc) + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_create_global_arr); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 626, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_total); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 626, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_4}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 626, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "nw_ec_alignx.pyx":627 + * total = len(seqs) + * _create_global_arr(total) + * indices = range(total) # <<<<<<<<<<<<<< + * pool = Pool(processes=nproc) + * align_func = partial(_fill_mat, seqs=seqs, mat=mat, decs=decs, + */ + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_total); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 627, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 627, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_indices = __pyx_t_3; + __pyx_t_3 = 0; + + /* "nw_ec_alignx.pyx":628 + * _create_global_arr(total) + * indices = range(total) + * pool = Pool(processes=nproc) # <<<<<<<<<<<<<< + * align_func = partial(_fill_mat, seqs=seqs, mat=mat, decs=decs, + * thres=thres, localize=localize) + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Pool); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 628, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 628, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_processes, __pyx_v_nproc) < 0) __PYX_ERR(0, 628, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 628, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_pool = __pyx_t_4; + __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":629 + * indices = range(total) + * pool = Pool(processes=nproc) + * align_func = partial(_fill_mat, seqs=seqs, mat=mat, decs=decs, # <<<<<<<<<<<<<< + * thres=thres, localize=localize) + * pool.map(align_func, indices, chunksize=nproc) + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_partial); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 629, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_fill_mat); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 629, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 629, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2)) __PYX_ERR(0, 629, __pyx_L1_error); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 629, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_seqs, __pyx_v_seqs) < 0) __PYX_ERR(0, 629, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_mat, __pyx_v_mat) < 0) __PYX_ERR(0, 629, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_decs, __pyx_v_decs) < 0) __PYX_ERR(0, 629, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":630 + * pool = Pool(processes=nproc) + * align_func = partial(_fill_mat, seqs=seqs, mat=mat, decs=decs, + * thres=thres, localize=localize) # <<<<<<<<<<<<<< + * pool.map(align_func, indices, chunksize=nproc) + * pool.close() + */ + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_thres, __pyx_v_thres) < 0) __PYX_ERR(0, 629, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_localize, __pyx_v_localize) < 0) __PYX_ERR(0, 629, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":629 + * indices = range(total) + * pool = Pool(processes=nproc) + * align_func = partial(_fill_mat, seqs=seqs, mat=mat, decs=decs, # <<<<<<<<<<<<<< + * thres=thres, localize=localize) + * pool.map(align_func, indices, chunksize=nproc) + */ + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 629, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_align_func = __pyx_t_5; + __pyx_t_5 = 0; + + /* "nw_ec_alignx.pyx":631 + * align_func = partial(_fill_mat, seqs=seqs, mat=mat, decs=decs, + * thres=thres, localize=localize) + * pool.map(align_func, indices, chunksize=nproc) # <<<<<<<<<<<<<< + * pool.close() + * return scomat + */ + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_pool, __pyx_n_s_map); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 631, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 631, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_v_align_func); + __Pyx_GIVEREF(__pyx_v_align_func); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_align_func)) __PYX_ERR(0, 631, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_indices); + __Pyx_GIVEREF(__pyx_v_indices); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_indices)) __PYX_ERR(0, 631, __pyx_L1_error); + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 631, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_chunksize, __pyx_v_nproc) < 0) __PYX_ERR(0, 631, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 631, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":632 + * thres=thres, localize=localize) + * pool.map(align_func, indices, chunksize=nproc) + * pool.close() # <<<<<<<<<<<<<< + * return scomat + * + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_pool, __pyx_n_s_close); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 632, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_6, 0+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 632, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":633 + * pool.map(align_func, indices, chunksize=nproc) + * pool.close() + * return scomat # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_scomat); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 633, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + + /* "nw_ec_alignx.pyx":606 + * + * + * def alldb_shared(seqs, mat, decs, thres=1.0, localize=False, # <<<<<<<<<<<<<< + * nproc=2): + * """Align all the ESS in the database (seqs) and return the results as a + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("nw_ec_alignx.alldb_shared", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_indices); + __Pyx_XDECREF(__pyx_v_pool); + __Pyx_XDECREF(__pyx_v_align_func); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "nw_ec_alignx.pyx":636 + * + * + * def _create_global_arr(total): # <<<<<<<<<<<<<< + * """Create shared global array for all vs all comparisson + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_12nw_ec_alignx_21_create_global_arr(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_12nw_ec_alignx_20_create_global_arr, "Create shared global array for all vs all comparisson\n\n Keyword Arguments:\n total -- Row size of square matrix\n "); +static PyMethodDef __pyx_mdef_12nw_ec_alignx_21_create_global_arr = {"_create_global_arr", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_12nw_ec_alignx_21_create_global_arr, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_12nw_ec_alignx_20_create_global_arr}; +static PyObject *__pyx_pw_12nw_ec_alignx_21_create_global_arr(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_total = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("_create_global_arr (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_total,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_total)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 636, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_create_global_arr") < 0)) __PYX_ERR(0, 636, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v_total = values[0]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("_create_global_arr", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 636, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("nw_ec_alignx._create_global_arr", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_12nw_ec_alignx_20_create_global_arr(__pyx_self, __pyx_v_total); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_12nw_ec_alignx_20_create_global_arr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_total) { + PyObject *__pyx_v_shared_sco_base = NULL; + PyObject *__pyx_v_scomat_ = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + unsigned int __pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_create_global_arr", 1); + + /* "nw_ec_alignx.pyx":643 + * """ + * global scomat + * shared_sco_base = Array(ctypes.c_float, total * total) # <<<<<<<<<<<<<< + * scomat_ = np.frombuffer(shared_sco_base.get_obj(), dtype=np.float32) + * scomat = scomat_.reshape((total, total)) + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Array); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 643, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ctypes); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 643, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_c_float); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 643, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyNumber_Multiply(__pyx_v_total, __pyx_v_total); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 643, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_4, __pyx_t_3}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_6, 2+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 643, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_v_shared_sco_base = __pyx_t_1; + __pyx_t_1 = 0; + + /* "nw_ec_alignx.pyx":644 + * global scomat + * shared_sco_base = Array(ctypes.c_float, total * total) + * scomat_ = np.frombuffer(shared_sco_base.get_obj(), dtype=np.float32) # <<<<<<<<<<<<<< + * scomat = scomat_.reshape((total, total)) + * scomat[:, :] = 1 + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 644, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 644, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_shared_sco_base, __pyx_n_s_get_obj); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 644, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_6, 0+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 644, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 644, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 644, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 644, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 644, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_float32); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 644, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 644, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 644, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_scomat_ = __pyx_t_5; + __pyx_t_5 = 0; + + /* "nw_ec_alignx.pyx":645 + * shared_sco_base = Array(ctypes.c_float, total * total) + * scomat_ = np.frombuffer(shared_sco_base.get_obj(), dtype=np.float32) + * scomat = scomat_.reshape((total, total)) # <<<<<<<<<<<<<< + * scomat[:, :] = 1 + * + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_scomat_, __pyx_n_s_reshape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 645, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 645, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_total); + __Pyx_GIVEREF(__pyx_v_total); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_total)) __PYX_ERR(0, 645, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_total); + __Pyx_GIVEREF(__pyx_v_total); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_total)) __PYX_ERR(0, 645, __pyx_L1_error); + __pyx_t_2 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_3}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 645, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + if (PyDict_SetItem(__pyx_d, __pyx_n_s_scomat, __pyx_t_5) < 0) __PYX_ERR(0, 645, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "nw_ec_alignx.pyx":646 + * scomat_ = np.frombuffer(shared_sco_base.get_obj(), dtype=np.float32) + * scomat = scomat_.reshape((total, total)) + * scomat[:, :] = 1 # <<<<<<<<<<<<<< + * + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_scomat); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 646, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (unlikely((PyObject_SetItem(__pyx_t_5, __pyx_tuple__25, __pyx_int_1) < 0))) __PYX_ERR(0, 646, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "nw_ec_alignx.pyx":636 + * + * + * def _create_global_arr(total): # <<<<<<<<<<<<<< + * """Create shared global array for all vs all comparisson + * + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("nw_ec_alignx._create_global_arr", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_shared_sco_base); + __Pyx_XDECREF(__pyx_v_scomat_); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "nw_ec_alignx.pyx":649 + * + * + * def _fill_mat(ind, seqs, mat, decs, localize, float thres): # <<<<<<<<<<<<<< + * """Fill shared global matrix + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_12nw_ec_alignx_23_fill_mat(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_12nw_ec_alignx_22_fill_mat, "Fill shared global matrix\n\n Keyword Arguments:\n seqs -- List, ESSs database. Each ESS is a list of EC numbers\n mat -- ndarray, EC number similarity matrix\n decs -- Dict, EC number index dictionary\n thres -- Float, score threshold to filter data (default 1.0). The data \n captured will be score <= thres.\n localize -- Score the alignment in the segment covered by te smallest ESS \n (default False)\n "); +static PyMethodDef __pyx_mdef_12nw_ec_alignx_23_fill_mat = {"_fill_mat", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_12nw_ec_alignx_23_fill_mat, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_12nw_ec_alignx_22_fill_mat}; +static PyObject *__pyx_pw_12nw_ec_alignx_23_fill_mat(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_ind = 0; + PyObject *__pyx_v_seqs = 0; + PyObject *__pyx_v_mat = 0; + PyObject *__pyx_v_decs = 0; + PyObject *__pyx_v_localize = 0; + CYTHON_UNUSED float __pyx_v_thres; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[6] = {0,0,0,0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("_fill_mat (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ind,&__pyx_n_s_seqs,&__pyx_n_s_mat,&__pyx_n_s_decs,&__pyx_n_s_localize,&__pyx_n_s_thres,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_ind)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 649, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_seqs)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 649, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fill_mat", 1, 6, 6, 1); __PYX_ERR(0, 649, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_mat)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 649, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fill_mat", 1, 6, 6, 2); __PYX_ERR(0, 649, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_decs)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 649, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fill_mat", 1, 6, 6, 3); __PYX_ERR(0, 649, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_localize)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[4]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 649, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fill_mat", 1, 6, 6, 4); __PYX_ERR(0, 649, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_thres)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[5]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 649, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fill_mat", 1, 6, 6, 5); __PYX_ERR(0, 649, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_fill_mat") < 0)) __PYX_ERR(0, 649, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 6)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + } + __pyx_v_ind = values[0]; + __pyx_v_seqs = values[1]; + __pyx_v_mat = values[2]; + __pyx_v_decs = values[3]; + __pyx_v_localize = values[4]; + __pyx_v_thres = __pyx_PyFloat_AsFloat(values[5]); if (unlikely((__pyx_v_thres == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 649, __pyx_L3_error) + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("_fill_mat", 1, 6, 6, __pyx_nargs); __PYX_ERR(0, 649, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("nw_ec_alignx._fill_mat", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_12nw_ec_alignx_22_fill_mat(__pyx_self, __pyx_v_ind, __pyx_v_seqs, __pyx_v_mat, __pyx_v_decs, __pyx_v_localize, __pyx_v_thres); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_12nw_ec_alignx_22_fill_mat(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_ind, PyObject *__pyx_v_seqs, PyObject *__pyx_v_mat, PyObject *__pyx_v_decs, PyObject *__pyx_v_localize, CYTHON_UNUSED float __pyx_v_thres) { + int __pyx_v_j; + float __pyx_v_sco; + PyObject *__pyx_v_seq1 = 0; + PyObject *__pyx_v_seq2 = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + Py_ssize_t __pyx_t_2; + long __pyx_t_3; + Py_ssize_t __pyx_t_4; + int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + float __pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_fill_mat", 1); + + /* "nw_ec_alignx.pyx":665 + * float sco + * list seq1, seq2 + * seq1 = seqs[ind] # <<<<<<<<<<<<<< + * for j in range(ind + 1, len(seqs)): + * seq2 = seqs[j] + */ + __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_seqs, __pyx_v_ind); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 665, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!(likely(PyList_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_1))) __PYX_ERR(0, 665, __pyx_L1_error) + __pyx_v_seq1 = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "nw_ec_alignx.pyx":666 + * list seq1, seq2 + * seq1 = seqs[ind] + * for j in range(ind + 1, len(seqs)): # <<<<<<<<<<<<<< + * seq2 = seqs[j] + * sco = NW(mat, decs, seq1, seq2, oscore=True, + */ + __pyx_t_2 = PyObject_Length(__pyx_v_seqs); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(0, 666, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_AddObjC(__pyx_v_ind, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 666, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 666, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_4 = __pyx_t_2; + for (__pyx_t_5 = __pyx_t_3; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) { + __pyx_v_j = __pyx_t_5; + + /* "nw_ec_alignx.pyx":667 + * seq1 = seqs[ind] + * for j in range(ind + 1, len(seqs)): + * seq2 = seqs[j] # <<<<<<<<<<<<<< + * sco = NW(mat, decs, seq1, seq2, oscore=True, + * localize=localize) + */ + __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_seqs, __pyx_v_j, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 667, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!(likely(PyList_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_1))) __PYX_ERR(0, 667, __pyx_L1_error) + __Pyx_XDECREF_SET(__pyx_v_seq2, ((PyObject*)__pyx_t_1)); + __pyx_t_1 = 0; + + /* "nw_ec_alignx.pyx":668 + * for j in range(ind + 1, len(seqs)): + * seq2 = seqs[j] + * sco = NW(mat, decs, seq1, seq2, oscore=True, # <<<<<<<<<<<<<< + * localize=localize) + * scomat[ind, j] = sco + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_NW); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 668, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 668, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_INCREF(__pyx_v_mat); + __Pyx_GIVEREF(__pyx_v_mat); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_mat)) __PYX_ERR(0, 668, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_decs); + __Pyx_GIVEREF(__pyx_v_decs); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_v_decs)) __PYX_ERR(0, 668, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_seq1); + __Pyx_GIVEREF(__pyx_v_seq1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_v_seq1)) __PYX_ERR(0, 668, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_seq2); + __Pyx_GIVEREF(__pyx_v_seq2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 3, __pyx_v_seq2)) __PYX_ERR(0, 668, __pyx_L1_error); + __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 668, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_oscore, Py_True) < 0) __PYX_ERR(0, 668, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":669 + * seq2 = seqs[j] + * sco = NW(mat, decs, seq1, seq2, oscore=True, + * localize=localize) # <<<<<<<<<<<<<< + * scomat[ind, j] = sco + * + */ + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_localize, __pyx_v_localize) < 0) __PYX_ERR(0, 668, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":668 + * for j in range(ind + 1, len(seqs)): + * seq2 = seqs[j] + * sco = NW(mat, decs, seq1, seq2, oscore=True, # <<<<<<<<<<<<<< + * localize=localize) + * scomat[ind, j] = sco + */ + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 668, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_9 = __pyx_PyFloat_AsFloat(__pyx_t_8); if (unlikely((__pyx_t_9 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 668, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_v_sco = __pyx_t_9; + + /* "nw_ec_alignx.pyx":670 + * sco = NW(mat, decs, seq1, seq2, oscore=True, + * localize=localize) + * scomat[ind, j] = sco # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_8 = PyFloat_FromDouble(__pyx_v_sco); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 670, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_scomat); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 670, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_j); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 670, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 670, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v_ind); + __Pyx_GIVEREF(__pyx_v_ind); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_ind)) __PYX_ERR(0, 670, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_6); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_6)) __PYX_ERR(0, 670, __pyx_L1_error); + __pyx_t_6 = 0; + if (unlikely((PyObject_SetItem(__pyx_t_7, __pyx_t_1, __pyx_t_8) < 0))) __PYX_ERR(0, 670, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + + /* "nw_ec_alignx.pyx":649 + * + * + * def _fill_mat(ind, seqs, mat, decs, localize, float thres): # <<<<<<<<<<<<<< + * """Fill shared global matrix + * + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("nw_ec_alignx._fill_mat", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_seq1); + __Pyx_XDECREF(__pyx_v_seq2); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "nw_ec_alignx.pyx":673 + * + * + * def store_dict(fname, rdict, indices=None, indices2=None): # <<<<<<<<<<<<<< + * """Stores the scores of the alignments in a tab separated text + * file. The first column corresponds to the first sequence index + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_12nw_ec_alignx_25store_dict(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_12nw_ec_alignx_24store_dict, "Stores the scores of the alignments in a tab separated text\n file. The first column corresponds to the first sequence index\n the scond column to the second index and the third column to \n the score.\n\n Keyword Arguments:\n fname -- Str, file name\n rdict -- Dict, result dictionary\n indices -- List, indices to translate (default None)\n indices2 -- List, indices to translate (default None) if there\n is a second database. In this case the this list is \n used to translate the indices in the internal dictionaries\n "); +static PyMethodDef __pyx_mdef_12nw_ec_alignx_25store_dict = {"store_dict", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_12nw_ec_alignx_25store_dict, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_12nw_ec_alignx_24store_dict}; +static PyObject *__pyx_pw_12nw_ec_alignx_25store_dict(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_fname = 0; + PyObject *__pyx_v_rdict = 0; + PyObject *__pyx_v_indices = 0; + PyObject *__pyx_v_indices2 = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[4] = {0,0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("store_dict (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fname,&__pyx_n_s_rdict,&__pyx_n_s_indices,&__pyx_n_s_indices2,0}; + values[2] = __Pyx_Arg_NewRef_FASTCALL(((PyObject *)Py_None)); + values[3] = __Pyx_Arg_NewRef_FASTCALL(((PyObject *)Py_None)); + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_fname)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 673, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rdict)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 673, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("store_dict", 0, 2, 4, 1); __PYX_ERR(0, 673, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_indices); + if (value) { values[2] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 673, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_indices2); + if (value) { values[3] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 673, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "store_dict") < 0)) __PYX_ERR(0, 673, __pyx_L3_error) + } + } else { + switch (__pyx_nargs) { + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_fname = values[0]; + __pyx_v_rdict = values[1]; + __pyx_v_indices = values[2]; + __pyx_v_indices2 = values[3]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("store_dict", 0, 2, 4, __pyx_nargs); __PYX_ERR(0, 673, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("nw_ec_alignx.store_dict", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_12nw_ec_alignx_24store_dict(__pyx_self, __pyx_v_fname, __pyx_v_rdict, __pyx_v_indices, __pyx_v_indices2); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_12nw_ec_alignx_24store_dict(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_fname, PyObject *__pyx_v_rdict, PyObject *__pyx_v_indices, PyObject *__pyx_v_indices2) { + PyObject *__pyx_v_outf = NULL; + PyObject *__pyx_v_testval = NULL; + PyObject *__pyx_v_i = NULL; + PyObject *__pyx_v_sco = NULL; + PyObject *__pyx_v_line = NULL; + PyObject *__pyx_v_dic = NULL; + PyObject *__pyx_v_j = NULL; + PyObject *__pyx_v_ind1 = NULL; + PyObject *__pyx_v_ind2 = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + unsigned int __pyx_t_6; + int __pyx_t_7; + Py_ssize_t __pyx_t_8; + Py_ssize_t __pyx_t_9; + int __pyx_t_10; + int __pyx_t_11; + Py_ssize_t __pyx_t_12; + Py_UCS4 __pyx_t_13; + PyObject *__pyx_t_14 = NULL; + Py_ssize_t __pyx_t_15; + int __pyx_t_16; + Py_ssize_t __pyx_t_17; + PyObject *__pyx_t_18 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("store_dict", 1); + + /* "nw_ec_alignx.pyx":687 + * used to translate the indices in the internal dictionaries + * """ + * if not rdict: # <<<<<<<<<<<<<< + * return + * outf = open(fname, 'w', buffering=1000) + */ + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_rdict); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 687, __pyx_L1_error) + __pyx_t_2 = (!__pyx_t_1); + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":688 + * """ + * if not rdict: + * return # <<<<<<<<<<<<<< + * outf = open(fname, 'w', buffering=1000) + * testval = list(rdict.values())[0] + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "nw_ec_alignx.pyx":687 + * used to translate the indices in the internal dictionaries + * """ + * if not rdict: # <<<<<<<<<<<<<< + * return + * outf = open(fname, 'w', buffering=1000) + */ + } + + /* "nw_ec_alignx.pyx":689 + * if not rdict: + * return + * outf = open(fname, 'w', buffering=1000) # <<<<<<<<<<<<<< + * testval = list(rdict.values())[0] + * if type(testval) == float and not indices: + */ + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 689, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_fname); + __Pyx_GIVEREF(__pyx_v_fname); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_fname)) __PYX_ERR(0, 689, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_u_w); + __Pyx_GIVEREF(__pyx_n_u_w); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_n_u_w)) __PYX_ERR(0, 689, __pyx_L1_error); + __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 689, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_buffering, __pyx_int_1000) < 0) __PYX_ERR(0, 689, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_open, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 689, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_outf = __pyx_t_5; + __pyx_t_5 = 0; + + /* "nw_ec_alignx.pyx":690 + * return + * outf = open(fname, 'w', buffering=1000) + * testval = list(rdict.values())[0] # <<<<<<<<<<<<<< + * if type(testval) == float and not indices: + * for i, sco in rdict.items(): + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_rdict, __pyx_n_s_values); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 690, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 0+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 690, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __pyx_t_4 = __Pyx_PySequence_ListKeepNew(__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 690, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = PyList_GET_ITEM(__pyx_t_4, 0); + __Pyx_INCREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_testval = __pyx_t_5; + __pyx_t_5 = 0; + + /* "nw_ec_alignx.pyx":691 + * outf = open(fname, 'w', buffering=1000) + * testval = list(rdict.values())[0] + * if type(testval) == float and not indices: # <<<<<<<<<<<<<< + * for i, sco in rdict.items(): + * if type(sco) is tuple: + */ + __pyx_t_5 = PyObject_RichCompare(((PyObject *)Py_TYPE(__pyx_v_testval)), ((PyObject *)(&PyFloat_Type)), Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 691, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 691, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_1) { + } else { + __pyx_t_2 = __pyx_t_1; + goto __pyx_L5_bool_binop_done; + } + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_indices); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 691, __pyx_L1_error) + __pyx_t_7 = (!__pyx_t_1); + __pyx_t_2 = __pyx_t_7; + __pyx_L5_bool_binop_done:; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":692 + * testval = list(rdict.values())[0] + * if type(testval) == float and not indices: + * for i, sco in rdict.items(): # <<<<<<<<<<<<<< + * if type(sco) is tuple: + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + */ + __pyx_t_8 = 0; + if (unlikely(__pyx_v_rdict == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); + __PYX_ERR(0, 692, __pyx_L1_error) + } + __pyx_t_4 = __Pyx_dict_iterator(__pyx_v_rdict, 0, __pyx_n_s_items, (&__pyx_t_9), (&__pyx_t_10)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 692, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __pyx_t_5 = __pyx_t_4; + __pyx_t_4 = 0; + while (1) { + __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_5, __pyx_t_9, &__pyx_t_8, &__pyx_t_4, &__pyx_t_3, NULL, __pyx_t_10); + if (unlikely(__pyx_t_11 == 0)) break; + if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 692, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GOTREF(__pyx_t_3); + __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_4); + __pyx_t_4 = 0; + __Pyx_XDECREF_SET(__pyx_v_sco, __pyx_t_3); + __pyx_t_3 = 0; + + /* "nw_ec_alignx.pyx":693 + * if type(testval) == float and not indices: + * for i, sco in rdict.items(): + * if type(sco) is tuple: # <<<<<<<<<<<<<< + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\n'.format(i, sco) + */ + __pyx_t_2 = (((PyObject *)Py_TYPE(__pyx_v_sco)) == ((PyObject *)(&PyTuple_Type))); + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":694 + * for i, sco in rdict.items(): + * if type(sco) is tuple: + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" # <<<<<<<<<<<<<< + * line = '{}\t{}\n'.format(i, sco) + * outf.write(line) + */ + __pyx_t_3 = PyTuple_New(5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 694, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_12 = 0; + __pyx_t_13 = 127; + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sco, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 694, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_14 = __Pyx_PyObject_FormatSimple(__pyx_t_4, __pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 694, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) : __pyx_t_13; + __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14); + __Pyx_GIVEREF(__pyx_t_14); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_14); + __pyx_t_14 = 0; + __Pyx_INCREF(__pyx_kp_u__26); + __pyx_t_12 += 1; + __Pyx_GIVEREF(__pyx_kp_u__26); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_kp_u__26); + __pyx_t_14 = __Pyx_GetItemInt(__pyx_v_sco, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 694, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_t_14, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 694, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_13; + __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_4); + __pyx_t_4 = 0; + __Pyx_INCREF(__pyx_kp_u__26); + __pyx_t_12 += 1; + __Pyx_GIVEREF(__pyx_kp_u__26); + PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_kp_u__26); + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sco, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 694, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_14 = __Pyx_PyObject_FormatSimple(__pyx_t_4, __pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 694, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) : __pyx_t_13; + __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14); + __Pyx_GIVEREF(__pyx_t_14); + PyTuple_SET_ITEM(__pyx_t_3, 4, __pyx_t_14); + __pyx_t_14 = 0; + __pyx_t_14 = __Pyx_PyUnicode_Join(__pyx_t_3, 5, __pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 694, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF_SET(__pyx_v_sco, __pyx_t_14); + __pyx_t_14 = 0; + + /* "nw_ec_alignx.pyx":693 + * if type(testval) == float and not indices: + * for i, sco in rdict.items(): + * if type(sco) is tuple: # <<<<<<<<<<<<<< + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\n'.format(i, sco) + */ + } + + /* "nw_ec_alignx.pyx":695 + * if type(sco) is tuple: + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\n'.format(i, sco) # <<<<<<<<<<<<<< + * outf.write(line) + * elif type(testval) == float: + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u__27, __pyx_n_s_format); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 695, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_v_i, __pyx_v_sco}; + __pyx_t_14 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_6, 2+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 695, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_XDECREF_SET(__pyx_v_line, __pyx_t_14); + __pyx_t_14 = 0; + + /* "nw_ec_alignx.pyx":696 + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\n'.format(i, sco) + * outf.write(line) # <<<<<<<<<<<<<< + * elif type(testval) == float: + * for i, sco in rdict.items(): + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_outf, __pyx_n_s_write); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 696, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_line}; + __pyx_t_14 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 696, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + } + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "nw_ec_alignx.pyx":691 + * outf = open(fname, 'w', buffering=1000) + * testval = list(rdict.values())[0] + * if type(testval) == float and not indices: # <<<<<<<<<<<<<< + * for i, sco in rdict.items(): + * if type(sco) is tuple: + */ + goto __pyx_L4; + } + + /* "nw_ec_alignx.pyx":697 + * line = '{}\t{}\n'.format(i, sco) + * outf.write(line) + * elif type(testval) == float: # <<<<<<<<<<<<<< + * for i, sco in rdict.items(): + * i = indices[i] + */ + __pyx_t_5 = PyObject_RichCompare(((PyObject *)Py_TYPE(__pyx_v_testval)), ((PyObject *)(&PyFloat_Type)), Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 697, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 697, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":698 + * outf.write(line) + * elif type(testval) == float: + * for i, sco in rdict.items(): # <<<<<<<<<<<<<< + * i = indices[i] + * if type(sco) is tuple: + */ + __pyx_t_9 = 0; + if (unlikely(__pyx_v_rdict == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); + __PYX_ERR(0, 698, __pyx_L1_error) + } + __pyx_t_14 = __Pyx_dict_iterator(__pyx_v_rdict, 0, __pyx_n_s_items, (&__pyx_t_8), (&__pyx_t_10)); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 698, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_XDECREF(__pyx_t_5); + __pyx_t_5 = __pyx_t_14; + __pyx_t_14 = 0; + while (1) { + __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_5, __pyx_t_8, &__pyx_t_9, &__pyx_t_14, &__pyx_t_3, NULL, __pyx_t_10); + if (unlikely(__pyx_t_11 == 0)) break; + if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 698, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_GOTREF(__pyx_t_3); + __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_14); + __pyx_t_14 = 0; + __Pyx_XDECREF_SET(__pyx_v_sco, __pyx_t_3); + __pyx_t_3 = 0; + + /* "nw_ec_alignx.pyx":699 + * elif type(testval) == float: + * for i, sco in rdict.items(): + * i = indices[i] # <<<<<<<<<<<<<< + * if type(sco) is tuple: + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + */ + __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_indices, __pyx_v_i); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 699, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF_SET(__pyx_v_i, __pyx_t_3); + __pyx_t_3 = 0; + + /* "nw_ec_alignx.pyx":700 + * for i, sco in rdict.items(): + * i = indices[i] + * if type(sco) is tuple: # <<<<<<<<<<<<<< + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\n'.format(i, sco) + */ + __pyx_t_2 = (((PyObject *)Py_TYPE(__pyx_v_sco)) == ((PyObject *)(&PyTuple_Type))); + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":701 + * i = indices[i] + * if type(sco) is tuple: + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" # <<<<<<<<<<<<<< + * line = '{}\t{}\n'.format(i, sco) + * outf.write(line) + */ + __pyx_t_3 = PyTuple_New(5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 701, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_12 = 0; + __pyx_t_13 = 127; + __pyx_t_14 = __Pyx_GetItemInt(__pyx_v_sco, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 701, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_t_14, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 701, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_13; + __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4); + __pyx_t_4 = 0; + __Pyx_INCREF(__pyx_kp_u__26); + __pyx_t_12 += 1; + __Pyx_GIVEREF(__pyx_kp_u__26); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_kp_u__26); + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sco, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 701, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_14 = __Pyx_PyObject_FormatSimple(__pyx_t_4, __pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 701, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) : __pyx_t_13; + __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14); + __Pyx_GIVEREF(__pyx_t_14); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_14); + __pyx_t_14 = 0; + __Pyx_INCREF(__pyx_kp_u__26); + __pyx_t_12 += 1; + __Pyx_GIVEREF(__pyx_kp_u__26); + PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_kp_u__26); + __pyx_t_14 = __Pyx_GetItemInt(__pyx_v_sco, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 701, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_t_14, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 701, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_13; + __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_3, 4, __pyx_t_4); + __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_3, 5, __pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 701, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF_SET(__pyx_v_sco, __pyx_t_4); + __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":700 + * for i, sco in rdict.items(): + * i = indices[i] + * if type(sco) is tuple: # <<<<<<<<<<<<<< + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\n'.format(i, sco) + */ + } + + /* "nw_ec_alignx.pyx":702 + * if type(sco) is tuple: + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\n'.format(i, sco) # <<<<<<<<<<<<<< + * outf.write(line) + * + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u__27, __pyx_n_s_format); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 702, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_14 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_14)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_14); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_14, __pyx_v_i, __pyx_v_sco}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_6, 2+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 702, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_XDECREF_SET(__pyx_v_line, __pyx_t_4); + __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":703 + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\n'.format(i, sco) + * outf.write(line) # <<<<<<<<<<<<<< + * + * elif not indices and not indices2: + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_outf, __pyx_n_s_write); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 703, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_14 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_14)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_14); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_14, __pyx_v_line}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 703, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "nw_ec_alignx.pyx":697 + * line = '{}\t{}\n'.format(i, sco) + * outf.write(line) + * elif type(testval) == float: # <<<<<<<<<<<<<< + * for i, sco in rdict.items(): + * i = indices[i] + */ + goto __pyx_L4; + } + + /* "nw_ec_alignx.pyx":705 + * outf.write(line) + * + * elif not indices and not indices2: # <<<<<<<<<<<<<< + * for i, dic in rdict.items(): + * for j, sco in dic.items(): + */ + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_indices); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 705, __pyx_L1_error) + __pyx_t_1 = (!__pyx_t_7); + if (__pyx_t_1) { + } else { + __pyx_t_2 = __pyx_t_1; + goto __pyx_L13_bool_binop_done; + } + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_indices2); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 705, __pyx_L1_error) + __pyx_t_7 = (!__pyx_t_1); + __pyx_t_2 = __pyx_t_7; + __pyx_L13_bool_binop_done:; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":706 + * + * elif not indices and not indices2: + * for i, dic in rdict.items(): # <<<<<<<<<<<<<< + * for j, sco in dic.items(): + * if type(sco) is tuple: + */ + __pyx_t_8 = 0; + if (unlikely(__pyx_v_rdict == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); + __PYX_ERR(0, 706, __pyx_L1_error) + } + __pyx_t_4 = __Pyx_dict_iterator(__pyx_v_rdict, 0, __pyx_n_s_items, (&__pyx_t_9), (&__pyx_t_10)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 706, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __pyx_t_5 = __pyx_t_4; + __pyx_t_4 = 0; + while (1) { + __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_5, __pyx_t_9, &__pyx_t_8, &__pyx_t_4, &__pyx_t_3, NULL, __pyx_t_10); + if (unlikely(__pyx_t_11 == 0)) break; + if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 706, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GOTREF(__pyx_t_3); + __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_4); + __pyx_t_4 = 0; + __Pyx_XDECREF_SET(__pyx_v_dic, __pyx_t_3); + __pyx_t_3 = 0; + + /* "nw_ec_alignx.pyx":707 + * elif not indices and not indices2: + * for i, dic in rdict.items(): + * for j, sco in dic.items(): # <<<<<<<<<<<<<< + * if type(sco) is tuple: + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + */ + __pyx_t_12 = 0; + if (unlikely(__pyx_v_dic == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); + __PYX_ERR(0, 707, __pyx_L1_error) + } + __pyx_t_4 = __Pyx_dict_iterator(__pyx_v_dic, 0, __pyx_n_s_items, (&__pyx_t_15), (&__pyx_t_11)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 707, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); + __pyx_t_3 = __pyx_t_4; + __pyx_t_4 = 0; + while (1) { + __pyx_t_16 = __Pyx_dict_iter_next(__pyx_t_3, __pyx_t_15, &__pyx_t_12, &__pyx_t_4, &__pyx_t_14, NULL, __pyx_t_11); + if (unlikely(__pyx_t_16 == 0)) break; + if (unlikely(__pyx_t_16 == -1)) __PYX_ERR(0, 707, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GOTREF(__pyx_t_14); + __Pyx_XDECREF_SET(__pyx_v_j, __pyx_t_4); + __pyx_t_4 = 0; + __Pyx_XDECREF_SET(__pyx_v_sco, __pyx_t_14); + __pyx_t_14 = 0; + + /* "nw_ec_alignx.pyx":708 + * for i, dic in rdict.items(): + * for j, sco in dic.items(): + * if type(sco) is tuple: # <<<<<<<<<<<<<< + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\t{}\n'.format(i, j, sco) + */ + __pyx_t_2 = (((PyObject *)Py_TYPE(__pyx_v_sco)) == ((PyObject *)(&PyTuple_Type))); + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":709 + * for j, sco in dic.items(): + * if type(sco) is tuple: + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" # <<<<<<<<<<<<<< + * line = '{}\t{}\t{}\n'.format(i, j, sco) + * outf.write(line) + */ + __pyx_t_14 = PyTuple_New(5); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 709, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_17 = 0; + __pyx_t_13 = 127; + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sco, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 709, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_18 = __Pyx_PyObject_FormatSimple(__pyx_t_4, __pyx_empty_unicode); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 709, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_18); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_18) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_18) : __pyx_t_13; + __pyx_t_17 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_18); + __Pyx_GIVEREF(__pyx_t_18); + PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_18); + __pyx_t_18 = 0; + __Pyx_INCREF(__pyx_kp_u__26); + __pyx_t_17 += 1; + __Pyx_GIVEREF(__pyx_kp_u__26); + PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_kp_u__26); + __pyx_t_18 = __Pyx_GetItemInt(__pyx_v_sco, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 709, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_18); + __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_t_18, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 709, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_13; + __pyx_t_17 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_14, 2, __pyx_t_4); + __pyx_t_4 = 0; + __Pyx_INCREF(__pyx_kp_u__26); + __pyx_t_17 += 1; + __Pyx_GIVEREF(__pyx_kp_u__26); + PyTuple_SET_ITEM(__pyx_t_14, 3, __pyx_kp_u__26); + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sco, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 709, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_18 = __Pyx_PyObject_FormatSimple(__pyx_t_4, __pyx_empty_unicode); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 709, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_18); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_18) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_18) : __pyx_t_13; + __pyx_t_17 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_18); + __Pyx_GIVEREF(__pyx_t_18); + PyTuple_SET_ITEM(__pyx_t_14, 4, __pyx_t_18); + __pyx_t_18 = 0; + __pyx_t_18 = __Pyx_PyUnicode_Join(__pyx_t_14, 5, __pyx_t_17, __pyx_t_13); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 709, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_18); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF_SET(__pyx_v_sco, __pyx_t_18); + __pyx_t_18 = 0; + + /* "nw_ec_alignx.pyx":708 + * for i, dic in rdict.items(): + * for j, sco in dic.items(): + * if type(sco) is tuple: # <<<<<<<<<<<<<< + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\t{}\n'.format(i, j, sco) + */ + } + + /* "nw_ec_alignx.pyx":710 + * if type(sco) is tuple: + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\t{}\n'.format(i, j, sco) # <<<<<<<<<<<<<< + * outf.write(line) + * elif indices and not indices2: + */ + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u__28, __pyx_n_s_format); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 710, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_4 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_14))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_14); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_14, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_4, __pyx_v_i, __pyx_v_j, __pyx_v_sco}; + __pyx_t_18 = __Pyx_PyObject_FastCall(__pyx_t_14, __pyx_callargs+1-__pyx_t_6, 3+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 710, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_18); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + } + __Pyx_XDECREF_SET(__pyx_v_line, __pyx_t_18); + __pyx_t_18 = 0; + + /* "nw_ec_alignx.pyx":711 + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\t{}\n'.format(i, j, sco) + * outf.write(line) # <<<<<<<<<<<<<< + * elif indices and not indices2: + * for i, dic in rdict.items(): + */ + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_outf, __pyx_n_s_write); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 711, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_4 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_14))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_14); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_14, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_line}; + __pyx_t_18 = __Pyx_PyObject_FastCall(__pyx_t_14, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 711, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_18); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + } + __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "nw_ec_alignx.pyx":705 + * outf.write(line) + * + * elif not indices and not indices2: # <<<<<<<<<<<<<< + * for i, dic in rdict.items(): + * for j, sco in dic.items(): + */ + goto __pyx_L4; + } + + /* "nw_ec_alignx.pyx":712 + * line = '{}\t{}\t{}\n'.format(i, j, sco) + * outf.write(line) + * elif indices and not indices2: # <<<<<<<<<<<<<< + * for i, dic in rdict.items(): + * for j, sco in dic.items(): + */ + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_indices); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 712, __pyx_L1_error) + if (__pyx_t_7) { + } else { + __pyx_t_2 = __pyx_t_7; + goto __pyx_L20_bool_binop_done; + } + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_indices2); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 712, __pyx_L1_error) + __pyx_t_1 = (!__pyx_t_7); + __pyx_t_2 = __pyx_t_1; + __pyx_L20_bool_binop_done:; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":713 + * outf.write(line) + * elif indices and not indices2: + * for i, dic in rdict.items(): # <<<<<<<<<<<<<< + * for j, sco in dic.items(): + * ind1 = indices[i] + */ + __pyx_t_9 = 0; + if (unlikely(__pyx_v_rdict == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); + __PYX_ERR(0, 713, __pyx_L1_error) + } + __pyx_t_3 = __Pyx_dict_iterator(__pyx_v_rdict, 0, __pyx_n_s_items, (&__pyx_t_8), (&__pyx_t_10)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 713, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_5); + __pyx_t_5 = __pyx_t_3; + __pyx_t_3 = 0; + while (1) { + __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_5, __pyx_t_8, &__pyx_t_9, &__pyx_t_3, &__pyx_t_18, NULL, __pyx_t_10); + if (unlikely(__pyx_t_11 == 0)) break; + if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 713, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GOTREF(__pyx_t_18); + __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_3); + __pyx_t_3 = 0; + __Pyx_XDECREF_SET(__pyx_v_dic, __pyx_t_18); + __pyx_t_18 = 0; + + /* "nw_ec_alignx.pyx":714 + * elif indices and not indices2: + * for i, dic in rdict.items(): + * for j, sco in dic.items(): # <<<<<<<<<<<<<< + * ind1 = indices[i] + * ind2 = j + */ + __pyx_t_15 = 0; + if (unlikely(__pyx_v_dic == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); + __PYX_ERR(0, 714, __pyx_L1_error) + } + __pyx_t_3 = __Pyx_dict_iterator(__pyx_v_dic, 0, __pyx_n_s_items, (&__pyx_t_12), (&__pyx_t_11)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 714, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_18); + __pyx_t_18 = __pyx_t_3; + __pyx_t_3 = 0; + while (1) { + __pyx_t_16 = __Pyx_dict_iter_next(__pyx_t_18, __pyx_t_12, &__pyx_t_15, &__pyx_t_3, &__pyx_t_14, NULL, __pyx_t_11); + if (unlikely(__pyx_t_16 == 0)) break; + if (unlikely(__pyx_t_16 == -1)) __PYX_ERR(0, 714, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GOTREF(__pyx_t_14); + __Pyx_XDECREF_SET(__pyx_v_j, __pyx_t_3); + __pyx_t_3 = 0; + __Pyx_XDECREF_SET(__pyx_v_sco, __pyx_t_14); + __pyx_t_14 = 0; + + /* "nw_ec_alignx.pyx":715 + * for i, dic in rdict.items(): + * for j, sco in dic.items(): + * ind1 = indices[i] # <<<<<<<<<<<<<< + * ind2 = j + * if type(sco) is tuple: + */ + __pyx_t_14 = __Pyx_PyObject_GetItem(__pyx_v_indices, __pyx_v_i); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 715, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_XDECREF_SET(__pyx_v_ind1, __pyx_t_14); + __pyx_t_14 = 0; + + /* "nw_ec_alignx.pyx":716 + * for j, sco in dic.items(): + * ind1 = indices[i] + * ind2 = j # <<<<<<<<<<<<<< + * if type(sco) is tuple: + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + */ + __Pyx_INCREF(__pyx_v_j); + __Pyx_XDECREF_SET(__pyx_v_ind2, __pyx_v_j); + + /* "nw_ec_alignx.pyx":717 + * ind1 = indices[i] + * ind2 = j + * if type(sco) is tuple: # <<<<<<<<<<<<<< + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\t{}\n'.format(ind1, ind2, sco) + */ + __pyx_t_2 = (((PyObject *)Py_TYPE(__pyx_v_sco)) == ((PyObject *)(&PyTuple_Type))); + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":718 + * ind2 = j + * if type(sco) is tuple: + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" # <<<<<<<<<<<<<< + * line = '{}\t{}\t{}\n'.format(ind1, ind2, sco) + * outf.write(line) + */ + __pyx_t_14 = PyTuple_New(5); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 718, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_17 = 0; + __pyx_t_13 = 127; + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_sco, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 718, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_t_3, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 718, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_13; + __pyx_t_17 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_4); + __pyx_t_4 = 0; + __Pyx_INCREF(__pyx_kp_u__26); + __pyx_t_17 += 1; + __Pyx_GIVEREF(__pyx_kp_u__26); + PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_kp_u__26); + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sco, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 718, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_t_4, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 718, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_13; + __pyx_t_17 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_14, 2, __pyx_t_3); + __pyx_t_3 = 0; + __Pyx_INCREF(__pyx_kp_u__26); + __pyx_t_17 += 1; + __Pyx_GIVEREF(__pyx_kp_u__26); + PyTuple_SET_ITEM(__pyx_t_14, 3, __pyx_kp_u__26); + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_sco, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 718, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_t_3, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 718, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_13; + __pyx_t_17 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_14, 4, __pyx_t_4); + __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_14, 5, __pyx_t_17, __pyx_t_13); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 718, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF_SET(__pyx_v_sco, __pyx_t_4); + __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":717 + * ind1 = indices[i] + * ind2 = j + * if type(sco) is tuple: # <<<<<<<<<<<<<< + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\t{}\n'.format(ind1, ind2, sco) + */ + } + + /* "nw_ec_alignx.pyx":719 + * if type(sco) is tuple: + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\t{}\n'.format(ind1, ind2, sco) # <<<<<<<<<<<<<< + * outf.write(line) + * elif not indices and indices2: + */ + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u__28, __pyx_n_s_format); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 719, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_3 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_14))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_14); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_14, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_3, __pyx_v_ind1, __pyx_v_ind2, __pyx_v_sco}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_14, __pyx_callargs+1-__pyx_t_6, 3+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 719, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + } + __Pyx_XDECREF_SET(__pyx_v_line, __pyx_t_4); + __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":720 + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\t{}\n'.format(ind1, ind2, sco) + * outf.write(line) # <<<<<<<<<<<<<< + * elif not indices and indices2: + * for i, dic in rdict.items(): + */ + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_outf, __pyx_n_s_write); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 720, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_3 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_14))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_14); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_14, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_line}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_14, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 720, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; + } + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "nw_ec_alignx.pyx":712 + * line = '{}\t{}\t{}\n'.format(i, j, sco) + * outf.write(line) + * elif indices and not indices2: # <<<<<<<<<<<<<< + * for i, dic in rdict.items(): + * for j, sco in dic.items(): + */ + goto __pyx_L4; + } + + /* "nw_ec_alignx.pyx":721 + * line = '{}\t{}\t{}\n'.format(ind1, ind2, sco) + * outf.write(line) + * elif not indices and indices2: # <<<<<<<<<<<<<< + * for i, dic in rdict.items(): + * for j, sco in dic.items(): + */ + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_indices); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 721, __pyx_L1_error) + __pyx_t_7 = (!__pyx_t_1); + if (__pyx_t_7) { + } else { + __pyx_t_2 = __pyx_t_7; + goto __pyx_L27_bool_binop_done; + } + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_indices2); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 721, __pyx_L1_error) + __pyx_t_2 = __pyx_t_7; + __pyx_L27_bool_binop_done:; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":722 + * outf.write(line) + * elif not indices and indices2: + * for i, dic in rdict.items(): # <<<<<<<<<<<<<< + * for j, sco in dic.items(): + * ind1 = i + */ + __pyx_t_8 = 0; + if (unlikely(__pyx_v_rdict == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); + __PYX_ERR(0, 722, __pyx_L1_error) + } + __pyx_t_18 = __Pyx_dict_iterator(__pyx_v_rdict, 0, __pyx_n_s_items, (&__pyx_t_9), (&__pyx_t_10)); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 722, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_18); + __Pyx_XDECREF(__pyx_t_5); + __pyx_t_5 = __pyx_t_18; + __pyx_t_18 = 0; + while (1) { + __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_5, __pyx_t_9, &__pyx_t_8, &__pyx_t_18, &__pyx_t_4, NULL, __pyx_t_10); + if (unlikely(__pyx_t_11 == 0)) break; + if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 722, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_18); + __Pyx_GOTREF(__pyx_t_4); + __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_18); + __pyx_t_18 = 0; + __Pyx_XDECREF_SET(__pyx_v_dic, __pyx_t_4); + __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":723 + * elif not indices and indices2: + * for i, dic in rdict.items(): + * for j, sco in dic.items(): # <<<<<<<<<<<<<< + * ind1 = i + * ind2 = indices2[j] + */ + __pyx_t_12 = 0; + if (unlikely(__pyx_v_dic == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); + __PYX_ERR(0, 723, __pyx_L1_error) + } + __pyx_t_18 = __Pyx_dict_iterator(__pyx_v_dic, 0, __pyx_n_s_items, (&__pyx_t_15), (&__pyx_t_11)); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 723, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_18); + __Pyx_XDECREF(__pyx_t_4); + __pyx_t_4 = __pyx_t_18; + __pyx_t_18 = 0; + while (1) { + __pyx_t_16 = __Pyx_dict_iter_next(__pyx_t_4, __pyx_t_15, &__pyx_t_12, &__pyx_t_18, &__pyx_t_14, NULL, __pyx_t_11); + if (unlikely(__pyx_t_16 == 0)) break; + if (unlikely(__pyx_t_16 == -1)) __PYX_ERR(0, 723, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_18); + __Pyx_GOTREF(__pyx_t_14); + __Pyx_XDECREF_SET(__pyx_v_j, __pyx_t_18); + __pyx_t_18 = 0; + __Pyx_XDECREF_SET(__pyx_v_sco, __pyx_t_14); + __pyx_t_14 = 0; + + /* "nw_ec_alignx.pyx":724 + * for i, dic in rdict.items(): + * for j, sco in dic.items(): + * ind1 = i # <<<<<<<<<<<<<< + * ind2 = indices2[j] + * if type(sco) is tuple: + */ + __Pyx_INCREF(__pyx_v_i); + __Pyx_XDECREF_SET(__pyx_v_ind1, __pyx_v_i); + + /* "nw_ec_alignx.pyx":725 + * for j, sco in dic.items(): + * ind1 = i + * ind2 = indices2[j] # <<<<<<<<<<<<<< + * if type(sco) is tuple: + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + */ + __pyx_t_14 = __Pyx_PyObject_GetItem(__pyx_v_indices2, __pyx_v_j); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 725, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_XDECREF_SET(__pyx_v_ind2, __pyx_t_14); + __pyx_t_14 = 0; + + /* "nw_ec_alignx.pyx":726 + * ind1 = i + * ind2 = indices2[j] + * if type(sco) is tuple: # <<<<<<<<<<<<<< + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\t{}\n'.format(ind1, ind2, sco) + */ + __pyx_t_2 = (((PyObject *)Py_TYPE(__pyx_v_sco)) == ((PyObject *)(&PyTuple_Type))); + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":727 + * ind2 = indices2[j] + * if type(sco) is tuple: + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" # <<<<<<<<<<<<<< + * line = '{}\t{}\t{}\n'.format(ind1, ind2, sco) + * outf.write(line) + */ + __pyx_t_14 = PyTuple_New(5); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 727, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_17 = 0; + __pyx_t_13 = 127; + __pyx_t_18 = __Pyx_GetItemInt(__pyx_v_sco, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 727, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_18); + __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_t_18, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 727, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_13; + __pyx_t_17 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_3); + __pyx_t_3 = 0; + __Pyx_INCREF(__pyx_kp_u__26); + __pyx_t_17 += 1; + __Pyx_GIVEREF(__pyx_kp_u__26); + PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_kp_u__26); + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_sco, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 727, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_18 = __Pyx_PyObject_FormatSimple(__pyx_t_3, __pyx_empty_unicode); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 727, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_18); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_18) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_18) : __pyx_t_13; + __pyx_t_17 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_18); + __Pyx_GIVEREF(__pyx_t_18); + PyTuple_SET_ITEM(__pyx_t_14, 2, __pyx_t_18); + __pyx_t_18 = 0; + __Pyx_INCREF(__pyx_kp_u__26); + __pyx_t_17 += 1; + __Pyx_GIVEREF(__pyx_kp_u__26); + PyTuple_SET_ITEM(__pyx_t_14, 3, __pyx_kp_u__26); + __pyx_t_18 = __Pyx_GetItemInt(__pyx_v_sco, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 727, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_18); + __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_t_18, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 727, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_13; + __pyx_t_17 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_14, 4, __pyx_t_3); + __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_14, 5, __pyx_t_17, __pyx_t_13); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 727, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF_SET(__pyx_v_sco, __pyx_t_3); + __pyx_t_3 = 0; + + /* "nw_ec_alignx.pyx":726 + * ind1 = i + * ind2 = indices2[j] + * if type(sco) is tuple: # <<<<<<<<<<<<<< + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\t{}\n'.format(ind1, ind2, sco) + */ + } + + /* "nw_ec_alignx.pyx":728 + * if type(sco) is tuple: + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\t{}\n'.format(ind1, ind2, sco) # <<<<<<<<<<<<<< + * outf.write(line) + * else: + */ + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u__28, __pyx_n_s_format); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 728, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_18 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_14))) { + __pyx_t_18 = PyMethod_GET_SELF(__pyx_t_14); + if (likely(__pyx_t_18)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14); + __Pyx_INCREF(__pyx_t_18); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_14, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_18, __pyx_v_ind1, __pyx_v_ind2, __pyx_v_sco}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_14, __pyx_callargs+1-__pyx_t_6, 3+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 728, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + } + __Pyx_XDECREF_SET(__pyx_v_line, __pyx_t_3); + __pyx_t_3 = 0; + + /* "nw_ec_alignx.pyx":729 + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\t{}\n'.format(ind1, ind2, sco) + * outf.write(line) # <<<<<<<<<<<<<< + * else: + * for i, dic in rdict.items(): + */ + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_outf, __pyx_n_s_write); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 729, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_18 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_14))) { + __pyx_t_18 = PyMethod_GET_SELF(__pyx_t_14); + if (likely(__pyx_t_18)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14); + __Pyx_INCREF(__pyx_t_18); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_14, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_18, __pyx_v_line}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_14, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 729, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "nw_ec_alignx.pyx":721 + * line = '{}\t{}\t{}\n'.format(ind1, ind2, sco) + * outf.write(line) + * elif not indices and indices2: # <<<<<<<<<<<<<< + * for i, dic in rdict.items(): + * for j, sco in dic.items(): + */ + goto __pyx_L4; + } + + /* "nw_ec_alignx.pyx":731 + * outf.write(line) + * else: + * for i, dic in rdict.items(): # <<<<<<<<<<<<<< + * for j, sco in dic.items(): + * ind1 = indices[i] + */ + /*else*/ { + __pyx_t_9 = 0; + if (unlikely(__pyx_v_rdict == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); + __PYX_ERR(0, 731, __pyx_L1_error) + } + __pyx_t_4 = __Pyx_dict_iterator(__pyx_v_rdict, 0, __pyx_n_s_items, (&__pyx_t_8), (&__pyx_t_10)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 731, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __pyx_t_5 = __pyx_t_4; + __pyx_t_4 = 0; + while (1) { + __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_5, __pyx_t_8, &__pyx_t_9, &__pyx_t_4, &__pyx_t_3, NULL, __pyx_t_10); + if (unlikely(__pyx_t_11 == 0)) break; + if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 731, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GOTREF(__pyx_t_3); + __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_4); + __pyx_t_4 = 0; + __Pyx_XDECREF_SET(__pyx_v_dic, __pyx_t_3); + __pyx_t_3 = 0; + + /* "nw_ec_alignx.pyx":732 + * else: + * for i, dic in rdict.items(): + * for j, sco in dic.items(): # <<<<<<<<<<<<<< + * ind1 = indices[i] + * ind2 = indices2[j] + */ + __pyx_t_15 = 0; + if (unlikely(__pyx_v_dic == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); + __PYX_ERR(0, 732, __pyx_L1_error) + } + __pyx_t_4 = __Pyx_dict_iterator(__pyx_v_dic, 0, __pyx_n_s_items, (&__pyx_t_12), (&__pyx_t_11)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 732, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); + __pyx_t_3 = __pyx_t_4; + __pyx_t_4 = 0; + while (1) { + __pyx_t_16 = __Pyx_dict_iter_next(__pyx_t_3, __pyx_t_12, &__pyx_t_15, &__pyx_t_4, &__pyx_t_14, NULL, __pyx_t_11); + if (unlikely(__pyx_t_16 == 0)) break; + if (unlikely(__pyx_t_16 == -1)) __PYX_ERR(0, 732, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GOTREF(__pyx_t_14); + __Pyx_XDECREF_SET(__pyx_v_j, __pyx_t_4); + __pyx_t_4 = 0; + __Pyx_XDECREF_SET(__pyx_v_sco, __pyx_t_14); + __pyx_t_14 = 0; + + /* "nw_ec_alignx.pyx":733 + * for i, dic in rdict.items(): + * for j, sco in dic.items(): + * ind1 = indices[i] # <<<<<<<<<<<<<< + * ind2 = indices2[j] + * if type(sco) is tuple: + */ + __pyx_t_14 = __Pyx_PyObject_GetItem(__pyx_v_indices, __pyx_v_i); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 733, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_XDECREF_SET(__pyx_v_ind1, __pyx_t_14); + __pyx_t_14 = 0; + + /* "nw_ec_alignx.pyx":734 + * for j, sco in dic.items(): + * ind1 = indices[i] + * ind2 = indices2[j] # <<<<<<<<<<<<<< + * if type(sco) is tuple: + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + */ + __pyx_t_14 = __Pyx_PyObject_GetItem(__pyx_v_indices2, __pyx_v_j); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 734, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_XDECREF_SET(__pyx_v_ind2, __pyx_t_14); + __pyx_t_14 = 0; + + /* "nw_ec_alignx.pyx":735 + * ind1 = indices[i] + * ind2 = indices2[j] + * if type(sco) is tuple: # <<<<<<<<<<<<<< + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\t{}\n'.format(ind1, ind2, sco) + */ + __pyx_t_2 = (((PyObject *)Py_TYPE(__pyx_v_sco)) == ((PyObject *)(&PyTuple_Type))); + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":736 + * ind2 = indices2[j] + * if type(sco) is tuple: + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" # <<<<<<<<<<<<<< + * line = '{}\t{}\t{}\n'.format(ind1, ind2, sco) + * outf.write(line) + */ + __pyx_t_14 = PyTuple_New(5); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 736, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_17 = 0; + __pyx_t_13 = 127; + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sco, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 736, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_18 = __Pyx_PyObject_FormatSimple(__pyx_t_4, __pyx_empty_unicode); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 736, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_18); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_18) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_18) : __pyx_t_13; + __pyx_t_17 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_18); + __Pyx_GIVEREF(__pyx_t_18); + PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_18); + __pyx_t_18 = 0; + __Pyx_INCREF(__pyx_kp_u__26); + __pyx_t_17 += 1; + __Pyx_GIVEREF(__pyx_kp_u__26); + PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_kp_u__26); + __pyx_t_18 = __Pyx_GetItemInt(__pyx_v_sco, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 736, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_18); + __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_t_18, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 736, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_13; + __pyx_t_17 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_14, 2, __pyx_t_4); + __pyx_t_4 = 0; + __Pyx_INCREF(__pyx_kp_u__26); + __pyx_t_17 += 1; + __Pyx_GIVEREF(__pyx_kp_u__26); + PyTuple_SET_ITEM(__pyx_t_14, 3, __pyx_kp_u__26); + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sco, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 736, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_18 = __Pyx_PyObject_FormatSimple(__pyx_t_4, __pyx_empty_unicode); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 736, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_18); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_18) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_18) : __pyx_t_13; + __pyx_t_17 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_18); + __Pyx_GIVEREF(__pyx_t_18); + PyTuple_SET_ITEM(__pyx_t_14, 4, __pyx_t_18); + __pyx_t_18 = 0; + __pyx_t_18 = __Pyx_PyUnicode_Join(__pyx_t_14, 5, __pyx_t_17, __pyx_t_13); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 736, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_18); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF_SET(__pyx_v_sco, __pyx_t_18); + __pyx_t_18 = 0; + + /* "nw_ec_alignx.pyx":735 + * ind1 = indices[i] + * ind2 = indices2[j] + * if type(sco) is tuple: # <<<<<<<<<<<<<< + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\t{}\n'.format(ind1, ind2, sco) + */ + } + + /* "nw_ec_alignx.pyx":737 + * if type(sco) is tuple: + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\t{}\n'.format(ind1, ind2, sco) # <<<<<<<<<<<<<< + * outf.write(line) + * outf.close() + */ + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u__28, __pyx_n_s_format); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 737, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_4 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_14))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_14); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_14, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_4, __pyx_v_ind1, __pyx_v_ind2, __pyx_v_sco}; + __pyx_t_18 = __Pyx_PyObject_FastCall(__pyx_t_14, __pyx_callargs+1-__pyx_t_6, 3+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 737, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_18); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + } + __Pyx_XDECREF_SET(__pyx_v_line, __pyx_t_18); + __pyx_t_18 = 0; + + /* "nw_ec_alignx.pyx":738 + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\t{}\n'.format(ind1, ind2, sco) + * outf.write(line) # <<<<<<<<<<<<<< + * outf.close() + */ + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_outf, __pyx_n_s_write); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 738, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_4 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_14))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_14); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_14, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_line}; + __pyx_t_18 = __Pyx_PyObject_FastCall(__pyx_t_14, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 738, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_18); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + } + __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __pyx_L4:; + + /* "nw_ec_alignx.pyx":739 + * line = '{}\t{}\t{}\n'.format(ind1, ind2, sco) + * outf.write(line) + * outf.close() # <<<<<<<<<<<<<< + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_outf, __pyx_n_s_close); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 739, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_18 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_18 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_18)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_18); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_18, NULL}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_6, 0+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 739, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "nw_ec_alignx.pyx":673 + * + * + * def store_dict(fname, rdict, indices=None, indices2=None): # <<<<<<<<<<<<<< + * """Stores the scores of the alignments in a tab separated text + * file. The first column corresponds to the first sequence index + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_14); + __Pyx_XDECREF(__pyx_t_18); + __Pyx_AddTraceback("nw_ec_alignx.store_dict", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_outf); + __Pyx_XDECREF(__pyx_v_testval); + __Pyx_XDECREF(__pyx_v_i); + __Pyx_XDECREF(__pyx_v_sco); + __Pyx_XDECREF(__pyx_v_line); + __Pyx_XDECREF(__pyx_v_dic); + __Pyx_XDECREF(__pyx_v_j); + __Pyx_XDECREF(__pyx_v_ind1); + __Pyx_XDECREF(__pyx_v_ind2); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyMethodDef __pyx_methods[] = { + {0, 0, 0, 0} +}; +#ifndef CYTHON_SMALL_CODE +#if defined(__clang__) + #define CYTHON_SMALL_CODE +#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) + #define CYTHON_SMALL_CODE __attribute__((cold)) +#else + #define CYTHON_SMALL_CODE +#endif +#endif +/* #### Code section: pystring_table ### */ + +static int __Pyx_CreateStringTabAndInitStrings(void) { + __Pyx_StringTabEntry __pyx_string_tab[] = { + {&__pyx_n_s_Array, __pyx_k_Array, sizeof(__pyx_k_Array), 0, 0, 1, 1}, + {&__pyx_n_s_AssertionError, __pyx_k_AssertionError, sizeof(__pyx_k_AssertionError), 0, 0, 1, 1}, + {&__pyx_n_s_DTYPE, __pyx_k_DTYPE, sizeof(__pyx_k_DTYPE), 0, 0, 1, 1}, + {&__pyx_n_s_DTYPEF, __pyx_k_DTYPEF, sizeof(__pyx_k_DTYPEF), 0, 0, 1, 1}, + {&__pyx_n_s_FastNW, __pyx_k_FastNW, sizeof(__pyx_k_FastNW), 0, 0, 1, 1}, + {&__pyx_n_s_ImportError, __pyx_k_ImportError, sizeof(__pyx_k_ImportError), 0, 0, 1, 1}, + {&__pyx_n_s_NW, __pyx_k_NW, sizeof(__pyx_k_NW), 0, 0, 1, 1}, + {&__pyx_n_s_Pool, __pyx_k_Pool, sizeof(__pyx_k_Pool), 0, 0, 1, 1}, + {&__pyx_kp_u_The_aligned_sequences_must_be_of, __pyx_k_The_aligned_sequences_must_be_of, sizeof(__pyx_k_The_aligned_sequences_must_be_of), 0, 1, 0, 0}, + {&__pyx_kp_u__11, __pyx_k__11, sizeof(__pyx_k__11), 0, 1, 0, 0}, + {&__pyx_kp_u__26, __pyx_k__26, sizeof(__pyx_k__26), 0, 1, 0, 0}, + {&__pyx_kp_u__27, __pyx_k__27, sizeof(__pyx_k__27), 0, 1, 0, 0}, + {&__pyx_kp_u__28, __pyx_k__28, sizeof(__pyx_k__28), 0, 1, 0, 0}, + {&__pyx_n_s__29, __pyx_k__29, sizeof(__pyx_k__29), 0, 0, 1, 1}, + {&__pyx_kp_u__3, __pyx_k__3, sizeof(__pyx_k__3), 0, 1, 0, 0}, + {&__pyx_kp_u__30, __pyx_k__30, sizeof(__pyx_k__30), 0, 1, 0, 0}, + {&__pyx_kp_u__4, __pyx_k__4, sizeof(__pyx_k__4), 0, 1, 0, 0}, + {&__pyx_kp_u__5, __pyx_k__5, sizeof(__pyx_k__5), 0, 1, 0, 0}, + {&__pyx_n_s__59, __pyx_k__59, sizeof(__pyx_k__59), 0, 0, 1, 1}, + {&__pyx_n_s_align_func, __pyx_k_align_func, sizeof(__pyx_k_align_func), 0, 0, 1, 1}, + {&__pyx_n_s_alldb_comp, __pyx_k_alldb_comp, sizeof(__pyx_k_alldb_comp), 0, 0, 1, 1}, + {&__pyx_n_s_alldb_shared, __pyx_k_alldb_shared, sizeof(__pyx_k_alldb_shared), 0, 0, 1, 1}, + {&__pyx_n_s_arr, __pyx_k_arr, sizeof(__pyx_k_arr), 0, 0, 1, 1}, + {&__pyx_n_s_arrow, __pyx_k_arrow, sizeof(__pyx_k_arrow), 0, 0, 1, 1}, + {&__pyx_n_s_aseq1, __pyx_k_aseq1, sizeof(__pyx_k_aseq1), 0, 0, 1, 1}, + {&__pyx_n_s_aseq2, __pyx_k_aseq2, sizeof(__pyx_k_aseq2), 0, 0, 1, 1}, + {&__pyx_n_s_asyncio_coroutines, __pyx_k_asyncio_coroutines, sizeof(__pyx_k_asyncio_coroutines), 0, 0, 1, 1}, + {&__pyx_n_s_backtrace, __pyx_k_backtrace, sizeof(__pyx_k_backtrace), 0, 0, 1, 1}, + {&__pyx_n_s_bblock, __pyx_k_bblock, sizeof(__pyx_k_bblock), 0, 0, 1, 1}, + {&__pyx_n_s_binit, __pyx_k_binit, sizeof(__pyx_k_binit), 0, 0, 1, 1}, + {&__pyx_n_s_buffering, __pyx_k_buffering, sizeof(__pyx_k_buffering), 0, 0, 1, 1}, + {&__pyx_n_s_c_float, __pyx_k_c_float, sizeof(__pyx_k_c_float), 0, 0, 1, 1}, + {&__pyx_n_s_chunksize, __pyx_k_chunksize, sizeof(__pyx_k_chunksize), 0, 0, 1, 1}, + {&__pyx_n_s_class_getitem, __pyx_k_class_getitem, sizeof(__pyx_k_class_getitem), 0, 0, 1, 1}, + {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1}, + {&__pyx_n_s_close, __pyx_k_close, sizeof(__pyx_k_close), 0, 0, 1, 1}, + {&__pyx_n_s_create_global_arr, __pyx_k_create_global_arr, sizeof(__pyx_k_create_global_arr), 0, 0, 1, 1}, + {&__pyx_n_s_ctypes, __pyx_k_ctypes, sizeof(__pyx_k_ctypes), 0, 0, 1, 1}, + {&__pyx_n_s_d, __pyx_k_d, sizeof(__pyx_k_d), 0, 0, 1, 1}, + {&__pyx_n_s_db_vs_db, __pyx_k_db_vs_db, sizeof(__pyx_k_db_vs_db), 0, 0, 1, 1}, + {&__pyx_n_s_decs, __pyx_k_decs, sizeof(__pyx_k_decs), 0, 0, 1, 1}, + {&__pyx_n_s_dic, __pyx_k_dic, sizeof(__pyx_k_dic), 0, 0, 1, 1}, + {&__pyx_n_s_dotstr, __pyx_k_dotstr, sizeof(__pyx_k_dotstr), 0, 0, 1, 1}, + {&__pyx_n_s_dtype, __pyx_k_dtype, sizeof(__pyx_k_dtype), 0, 0, 1, 1}, + {&__pyx_n_s_ec1, __pyx_k_ec1, sizeof(__pyx_k_ec1), 0, 0, 1, 1}, + {&__pyx_n_s_ec2, __pyx_k_ec2, sizeof(__pyx_k_ec2), 0, 0, 1, 1}, + {&__pyx_n_s_eci, __pyx_k_eci, sizeof(__pyx_k_eci), 0, 0, 1, 1}, + {&__pyx_n_s_ecj, __pyx_k_ecj, sizeof(__pyx_k_ecj), 0, 0, 1, 1}, + {&__pyx_n_s_ecs, __pyx_k_ecs, sizeof(__pyx_k_ecs), 0, 0, 1, 1}, + {&__pyx_n_s_f, __pyx_k_f, sizeof(__pyx_k_f), 0, 0, 1, 1}, + {&__pyx_n_s_fhomo, __pyx_k_fhomo, sizeof(__pyx_k_fhomo), 0, 0, 1, 1}, + {&__pyx_kp_u_fhomo_fpengap_must_sum_aprox_1, __pyx_k_fhomo_fpengap_must_sum_aprox_1, sizeof(__pyx_k_fhomo_fpengap_must_sum_aprox_1), 0, 1, 0, 0}, + {&__pyx_n_s_fi, __pyx_k_fi, sizeof(__pyx_k_fi), 0, 0, 1, 1}, + {&__pyx_n_s_fill_mat, __pyx_k_fill_mat, sizeof(__pyx_k_fill_mat), 0, 0, 1, 1}, + {&__pyx_n_s_float32, __pyx_k_float32, sizeof(__pyx_k_float32), 0, 0, 1, 1}, + {&__pyx_n_s_float64, __pyx_k_float64, sizeof(__pyx_k_float64), 0, 0, 1, 1}, + {&__pyx_n_s_fname, __pyx_k_fname, sizeof(__pyx_k_fname), 0, 0, 1, 1}, + {&__pyx_n_s_format, __pyx_k_format, sizeof(__pyx_k_format), 0, 0, 1, 1}, + {&__pyx_n_s_fpengap, __pyx_k_fpengap, sizeof(__pyx_k_fpengap), 0, 0, 1, 1}, + {&__pyx_n_s_frombuffer, __pyx_k_frombuffer, sizeof(__pyx_k_frombuffer), 0, 0, 1, 1}, + {&__pyx_n_s_functools, __pyx_k_functools, sizeof(__pyx_k_functools), 0, 0, 1, 1}, + {&__pyx_n_s_gap, __pyx_k_gap, sizeof(__pyx_k_gap), 0, 0, 1, 1}, + {&__pyx_n_s_gapstr, __pyx_k_gapstr, sizeof(__pyx_k_gapstr), 0, 0, 1, 1}, + {&__pyx_n_s_get_obj, __pyx_k_get_obj, sizeof(__pyx_k_get_obj), 0, 0, 1, 1}, + {&__pyx_n_s_h, __pyx_k_h, sizeof(__pyx_k_h), 0, 0, 1, 1}, + {&__pyx_n_s_homo, __pyx_k_homo, sizeof(__pyx_k_homo), 0, 0, 1, 1}, + {&__pyx_n_s_i, __pyx_k_i, sizeof(__pyx_k_i), 0, 0, 1, 1}, + {&__pyx_n_s_ii, __pyx_k_ii, sizeof(__pyx_k_ii), 0, 0, 1, 1}, + {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, + {&__pyx_n_s_ind, __pyx_k_ind, sizeof(__pyx_k_ind), 0, 0, 1, 1}, + {&__pyx_n_s_ind1, __pyx_k_ind1, sizeof(__pyx_k_ind1), 0, 0, 1, 1}, + {&__pyx_n_s_ind2, __pyx_k_ind2, sizeof(__pyx_k_ind2), 0, 0, 1, 1}, + {&__pyx_n_s_ind_vs_alldb, __pyx_k_ind_vs_alldb, sizeof(__pyx_k_ind_vs_alldb), 0, 0, 1, 1}, + {&__pyx_n_s_indices, __pyx_k_indices, sizeof(__pyx_k_indices), 0, 0, 1, 1}, + {&__pyx_n_s_indices2, __pyx_k_indices2, sizeof(__pyx_k_indices2), 0, 0, 1, 1}, + {&__pyx_n_s_initializing, __pyx_k_initializing, sizeof(__pyx_k_initializing), 0, 0, 1, 1}, + {&__pyx_n_s_int32, __pyx_k_int32, sizeof(__pyx_k_int32), 0, 0, 1, 1}, + {&__pyx_n_s_is_coroutine, __pyx_k_is_coroutine, sizeof(__pyx_k_is_coroutine), 0, 0, 1, 1}, + {&__pyx_n_s_items, __pyx_k_items, sizeof(__pyx_k_items), 0, 0, 1, 1}, + {&__pyx_n_s_j, __pyx_k_j, sizeof(__pyx_k_j), 0, 0, 1, 1}, + {&__pyx_n_s_k, __pyx_k_k, sizeof(__pyx_k_k), 0, 0, 1, 1}, + {&__pyx_n_s_l1, __pyx_k_l1, sizeof(__pyx_k_l1), 0, 0, 1, 1}, + {&__pyx_n_s_l2, __pyx_k_l2, sizeof(__pyx_k_l2), 0, 0, 1, 1}, + {&__pyx_n_s_length, __pyx_k_length, sizeof(__pyx_k_length), 0, 0, 1, 1}, + {&__pyx_n_s_li, __pyx_k_li, sizeof(__pyx_k_li), 0, 0, 1, 1}, + {&__pyx_n_s_line, __pyx_k_line, sizeof(__pyx_k_line), 0, 0, 1, 1}, + {&__pyx_n_s_list_vs_alldb, __pyx_k_list_vs_alldb, sizeof(__pyx_k_list_vs_alldb), 0, 0, 1, 1}, + {&__pyx_n_s_localize, __pyx_k_localize, sizeof(__pyx_k_localize), 0, 0, 1, 1}, + {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, + {&__pyx_n_s_map, __pyx_k_map, sizeof(__pyx_k_map), 0, 0, 1, 1}, + {&__pyx_n_s_mat, __pyx_k_mat, sizeof(__pyx_k_mat), 0, 0, 1, 1}, + {&__pyx_n_s_mini, __pyx_k_mini, sizeof(__pyx_k_mini), 0, 0, 1, 1}, + {&__pyx_n_s_minpos, __pyx_k_minpos, sizeof(__pyx_k_minpos), 0, 0, 1, 1}, + {&__pyx_n_s_multiprocessing, __pyx_k_multiprocessing, sizeof(__pyx_k_multiprocessing), 0, 0, 1, 1}, + {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, + {&__pyx_n_s_np, __pyx_k_np, sizeof(__pyx_k_np), 0, 0, 1, 1}, + {&__pyx_n_s_nproc, __pyx_k_nproc, sizeof(__pyx_k_nproc), 0, 0, 1, 1}, + {&__pyx_n_s_numpy, __pyx_k_numpy, sizeof(__pyx_k_numpy), 0, 0, 1, 1}, + {&__pyx_kp_u_numpy__core_multiarray_failed_to, __pyx_k_numpy__core_multiarray_failed_to, sizeof(__pyx_k_numpy__core_multiarray_failed_to), 0, 1, 0, 0}, + {&__pyx_kp_u_numpy__core_umath_failed_to_impo, __pyx_k_numpy__core_umath_failed_to_impo, sizeof(__pyx_k_numpy__core_umath_failed_to_impo), 0, 1, 0, 0}, + {&__pyx_n_s_nw_ec_alignx, __pyx_k_nw_ec_alignx, sizeof(__pyx_k_nw_ec_alignx), 0, 0, 1, 1}, + {&__pyx_kp_s_nw_ec_alignx_pyx, __pyx_k_nw_ec_alignx_pyx, sizeof(__pyx_k_nw_ec_alignx_pyx), 0, 0, 1, 0}, + {&__pyx_n_s_nws, __pyx_k_nws, sizeof(__pyx_k_nws), 0, 0, 1, 1}, + {&__pyx_n_s_ok, __pyx_k_ok, sizeof(__pyx_k_ok), 0, 0, 1, 1}, + {&__pyx_n_s_open, __pyx_k_open, sizeof(__pyx_k_open), 0, 0, 1, 1}, + {&__pyx_n_s_oscore, __pyx_k_oscore, sizeof(__pyx_k_oscore), 0, 0, 1, 1}, + {&__pyx_n_s_outf, __pyx_k_outf, sizeof(__pyx_k_outf), 0, 0, 1, 1}, + {&__pyx_n_s_partial, __pyx_k_partial, sizeof(__pyx_k_partial), 0, 0, 1, 1}, + {&__pyx_n_s_pengap, __pyx_k_pengap, sizeof(__pyx_k_pengap), 0, 0, 1, 1}, + {&__pyx_n_s_pool, __pyx_k_pool, sizeof(__pyx_k_pool), 0, 0, 1, 1}, + {&__pyx_n_s_processes, __pyx_k_processes, sizeof(__pyx_k_processes), 0, 0, 1, 1}, + {&__pyx_n_s_randfactor, __pyx_k_randfactor, sizeof(__pyx_k_randfactor), 0, 0, 1, 1}, + {&__pyx_n_s_randnum, __pyx_k_randnum, sizeof(__pyx_k_randnum), 0, 0, 1, 1}, + {&__pyx_n_s_randum, __pyx_k_randum, sizeof(__pyx_k_randum), 0, 0, 1, 1}, + {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1}, + {&__pyx_n_s_rdict, __pyx_k_rdict, sizeof(__pyx_k_rdict), 0, 0, 1, 1}, + {&__pyx_n_s_resd, __pyx_k_resd, sizeof(__pyx_k_resd), 0, 0, 1, 1}, + {&__pyx_n_s_resdic, __pyx_k_resdic, sizeof(__pyx_k_resdic), 0, 0, 1, 1}, + {&__pyx_n_s_resdict, __pyx_k_resdict, sizeof(__pyx_k_resdict), 0, 0, 1, 1}, + {&__pyx_n_s_reshape, __pyx_k_reshape, sizeof(__pyx_k_reshape), 0, 0, 1, 1}, + {&__pyx_n_s_result, __pyx_k_result, sizeof(__pyx_k_result), 0, 0, 1, 1}, + {&__pyx_n_s_sco, __pyx_k_sco, sizeof(__pyx_k_sco), 0, 0, 1, 1}, + {&__pyx_n_s_scomat, __pyx_k_scomat, sizeof(__pyx_k_scomat), 0, 0, 1, 1}, + {&__pyx_n_s_scomat_2, __pyx_k_scomat_2, sizeof(__pyx_k_scomat_2), 0, 0, 1, 1}, + {&__pyx_n_s_score, __pyx_k_score, sizeof(__pyx_k_score), 0, 0, 1, 1}, + {&__pyx_n_s_scoremat, __pyx_k_scoremat, sizeof(__pyx_k_scoremat), 0, 0, 1, 1}, + {&__pyx_n_s_scoring, __pyx_k_scoring, sizeof(__pyx_k_scoring), 0, 0, 1, 1}, + {&__pyx_n_s_scoring_gap, __pyx_k_scoring_gap, sizeof(__pyx_k_scoring_gap), 0, 0, 1, 1}, + {&__pyx_n_s_seq1, __pyx_k_seq1, sizeof(__pyx_k_seq1), 0, 0, 1, 1}, + {&__pyx_n_s_seq2, __pyx_k_seq2, sizeof(__pyx_k_seq2), 0, 0, 1, 1}, + {&__pyx_n_s_seq_vs_db, __pyx_k_seq_vs_db, sizeof(__pyx_k_seq_vs_db), 0, 0, 1, 1}, + {&__pyx_n_s_seqs, __pyx_k_seqs, sizeof(__pyx_k_seqs), 0, 0, 1, 1}, + {&__pyx_n_s_seqs1, __pyx_k_seqs1, sizeof(__pyx_k_seqs1), 0, 0, 1, 1}, + {&__pyx_n_s_seqs2, __pyx_k_seqs2, sizeof(__pyx_k_seqs2), 0, 0, 1, 1}, + {&__pyx_n_s_shared_sco_base, __pyx_k_shared_sco_base, sizeof(__pyx_k_shared_sco_base), 0, 0, 1, 1}, + {&__pyx_n_s_spec, __pyx_k_spec, sizeof(__pyx_k_spec), 0, 0, 1, 1}, + {&__pyx_n_s_st1, __pyx_k_st1, sizeof(__pyx_k_st1), 0, 0, 1, 1}, + {&__pyx_n_s_st2, __pyx_k_st2, sizeof(__pyx_k_st2), 0, 0, 1, 1}, + {&__pyx_n_s_store_dict, __pyx_k_store_dict, sizeof(__pyx_k_store_dict), 0, 0, 1, 1}, + {&__pyx_n_s_strfmt, __pyx_k_strfmt, sizeof(__pyx_k_strfmt), 0, 0, 1, 1}, + {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, + {&__pyx_n_s_testval, __pyx_k_testval, sizeof(__pyx_k_testval), 0, 0, 1, 1}, + {&__pyx_n_s_thres, __pyx_k_thres, sizeof(__pyx_k_thres), 0, 0, 1, 1}, + {&__pyx_n_s_total, __pyx_k_total, sizeof(__pyx_k_total), 0, 0, 1, 1}, + {&__pyx_n_s_update, __pyx_k_update, sizeof(__pyx_k_update), 0, 0, 1, 1}, + {&__pyx_n_s_v, __pyx_k_v, sizeof(__pyx_k_v), 0, 0, 1, 1}, + {&__pyx_n_s_values, __pyx_k_values, sizeof(__pyx_k_values), 0, 0, 1, 1}, + {&__pyx_n_u_w, __pyx_k_w, sizeof(__pyx_k_w), 0, 1, 0, 1}, + {&__pyx_n_s_wholedb, __pyx_k_wholedb, sizeof(__pyx_k_wholedb), 0, 0, 1, 1}, + {&__pyx_n_s_write, __pyx_k_write, sizeof(__pyx_k_write), 0, 0, 1, 1}, + {&__pyx_n_s_x, __pyx_k_x, sizeof(__pyx_k_x), 0, 0, 1, 1}, + {&__pyx_n_s_y, __pyx_k_y, sizeof(__pyx_k_y), 0, 0, 1, 1}, + {&__pyx_n_s_zeros, __pyx_k_zeros, sizeof(__pyx_k_zeros), 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0} + }; + return __Pyx_InitStrings(__pyx_string_tab); +} +/* #### Code section: cached_builtins ### */ +static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { + __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 46, __pyx_L1_error) + __pyx_builtin_AssertionError = __Pyx_GetBuiltinName(__pyx_n_s_AssertionError); if (!__pyx_builtin_AssertionError) __PYX_ERR(0, 275, __pyx_L1_error) + __pyx_builtin_open = __Pyx_GetBuiltinName(__pyx_n_s_open); if (!__pyx_builtin_open) __PYX_ERR(0, 689, __pyx_L1_error) + __pyx_builtin_ImportError = __Pyx_GetBuiltinName(__pyx_n_s_ImportError); if (!__pyx_builtin_ImportError) __PYX_ERR(2, 1043, __pyx_L1_error) + return 0; + __pyx_L1_error:; + return -1; +} +/* #### Code section: cached_constants ### */ + +static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1043 + * __pyx_import_array() + * except Exception: + * raise ImportError("numpy._core.multiarray failed to import") # <<<<<<<<<<<<<< + * + * cdef inline int import_umath() except -1: + */ + __pyx_tuple_ = PyTuple_Pack(1, __pyx_kp_u_numpy__core_multiarray_failed_to); if (unlikely(!__pyx_tuple_)) __PYX_ERR(2, 1043, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple_); + __Pyx_GIVEREF(__pyx_tuple_); + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1049 + * _import_umath() + * except Exception: + * raise ImportError("numpy._core.umath failed to import") # <<<<<<<<<<<<<< + * + * cdef inline int import_ufunc() except -1: + */ + __pyx_tuple__2 = PyTuple_Pack(1, __pyx_kp_u_numpy__core_umath_failed_to_impo); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(2, 1049, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__2); + __Pyx_GIVEREF(__pyx_tuple__2); + + /* "nw_ec_alignx.pyx":334 + * ok = False + * # reverse sequences + * st1 = st1[::-1] # <<<<<<<<<<<<<< + * st2 = st2[::-1] + * return st1, st2 + */ + __pyx_slice__6 = PySlice_New(Py_None, Py_None, __pyx_int_neg_1); if (unlikely(!__pyx_slice__6)) __PYX_ERR(0, 334, __pyx_L1_error) + __Pyx_GOTREF(__pyx_slice__6); + __Pyx_GIVEREF(__pyx_slice__6); + + /* "nw_ec_alignx.pyx":646 + * scomat_ = np.frombuffer(shared_sco_base.get_obj(), dtype=np.float32) + * scomat = scomat_.reshape((total, total)) + * scomat[:, :] = 1 # <<<<<<<<<<<<<< + * + * + */ + __pyx_slice__24 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__24)) __PYX_ERR(0, 646, __pyx_L1_error) + __Pyx_GOTREF(__pyx_slice__24); + __Pyx_GIVEREF(__pyx_slice__24); + __pyx_tuple__25 = PyTuple_Pack(2, __pyx_slice__24, __pyx_slice__24); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(0, 646, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__25); + __Pyx_GIVEREF(__pyx_tuple__25); + + /* "nw_ec_alignx.pyx":54 + * + * # best performance + * @cython.boundscheck(False) # <<<<<<<<<<<<<< + * @cython.wraparound(False) + * def _FastNW(np.ndarray[DTYPEF_t, ndim=2] mat, dict ecs, list seq1, list seq2, + */ + __pyx_tuple__31 = PyTuple_Pack(22, __pyx_n_s_mat, __pyx_n_s_ecs, __pyx_n_s_seq1, __pyx_n_s_seq2, __pyx_n_s_gap, __pyx_n_s_l1, __pyx_n_s_l2, __pyx_n_s_li, __pyx_n_s_i, __pyx_n_s_j, __pyx_n_s_k, __pyx_n_s_eci, __pyx_n_s_ecj, __pyx_n_s_minpos, __pyx_n_s_mini, __pyx_n_s_randum, __pyx_n_s_randfactor, __pyx_n_s_f, __pyx_n_s_scoremat, __pyx_n_s_arrow, __pyx_n_s_sco, __pyx_n_s_randnum); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(0, 54, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__31); + __Pyx_GIVEREF(__pyx_tuple__31); + __pyx_codeobj__32 = (PyObject*)__Pyx_PyCode_New(5, 0, 0, 22, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__31, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_nw_ec_alignx_pyx, __pyx_n_s_FastNW, 54, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__32)) __PYX_ERR(0, 54, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":246 + * + * + * @cython.boundscheck(False) # <<<<<<<<<<<<<< + * @cython.wraparound(False) + * def scoring(np.ndarray[DTYPEF_t, ndim=2] mat, dict ecs, seq1, seq2, + */ + __pyx_tuple__33 = PyTuple_Pack(18, __pyx_n_s_mat, __pyx_n_s_ecs, __pyx_n_s_seq1, __pyx_n_s_seq2, __pyx_n_s_gap, __pyx_n_s_fhomo, __pyx_n_s_fpengap, __pyx_n_s_length, __pyx_n_s_i, __pyx_n_s_x, __pyx_n_s_y, __pyx_n_s_pengap, __pyx_n_s_score, __pyx_n_s_homo, __pyx_n_s_ec1, __pyx_n_s_ec2, __pyx_n_s_gapstr, __pyx_n_s_dotstr); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(0, 246, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__33); + __Pyx_GIVEREF(__pyx_tuple__33); + __pyx_codeobj__34 = (PyObject*)__Pyx_PyCode_New(7, 0, 0, 18, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__33, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_nw_ec_alignx_pyx, __pyx_n_s_scoring, 246, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__34)) __PYX_ERR(0, 246, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":302 + * + * + * def _backtrace(np.ndarray[DTYPE_t, ndim=2] arrow, list seq1, list seq2): # <<<<<<<<<<<<<< + * """Reads the arrow matrix of NW alignment and return two lists of + * with the aligned EC numbers. + */ + __pyx_tuple__35 = PyTuple_Pack(8, __pyx_n_s_arrow, __pyx_n_s_seq1, __pyx_n_s_seq2, __pyx_n_s_v, __pyx_n_s_h, __pyx_n_s_ok, __pyx_n_s_st1, __pyx_n_s_st2); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(0, 302, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__35); + __Pyx_GIVEREF(__pyx_tuple__35); + __pyx_codeobj__36 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__35, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_nw_ec_alignx_pyx, __pyx_n_s_backtrace, 302, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__36)) __PYX_ERR(0, 302, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":339 + * + * + * def NW(np.ndarray[DTYPEF_t, ndim=2] mat, dict ecs, list seq1, list seq2, # <<<<<<<<<<<<<< + * float gap=0.9, bool localize=False, bool nws=False, + * bool strfmt=True, bool oscore=False): + */ + __pyx_tuple__37 = PyTuple_Pack(21, __pyx_n_s_mat, __pyx_n_s_ecs, __pyx_n_s_seq1, __pyx_n_s_seq2, __pyx_n_s_gap, __pyx_n_s_localize, __pyx_n_s_nws, __pyx_n_s_strfmt, __pyx_n_s_oscore, __pyx_n_s_score, __pyx_n_s_mini, __pyx_n_s_scoring_gap, __pyx_n_s_aseq1, __pyx_n_s_aseq2, __pyx_n_s_length, __pyx_n_s_i, __pyx_n_s_ii, __pyx_n_s_fi, __pyx_n_s_binit, __pyx_n_s_bblock, __pyx_n_s_arr); if (unlikely(!__pyx_tuple__37)) __PYX_ERR(0, 339, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__37); + __Pyx_GIVEREF(__pyx_tuple__37); + __pyx_codeobj__38 = (PyObject*)__Pyx_PyCode_New(9, 0, 0, 21, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__37, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_nw_ec_alignx_pyx, __pyx_n_s_NW, 339, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__38)) __PYX_ERR(0, 339, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":408 + * + * + * def ind_vs_alldb(int ind, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, # <<<<<<<<<<<<<< + * dict decs, float thres=1.0, bool wholedb=False, + * bool localize=False, bool oscore=True): + */ + __pyx_tuple__39 = PyTuple_Pack(14, __pyx_n_s_ind, __pyx_n_s_seqs, __pyx_n_s_mat, __pyx_n_s_decs, __pyx_n_s_thres, __pyx_n_s_wholedb, __pyx_n_s_localize, __pyx_n_s_oscore, __pyx_n_s_resdic, __pyx_n_s_seq1, __pyx_n_s_seq2, __pyx_n_s_j, __pyx_n_s_indices, __pyx_n_s_sco); if (unlikely(!__pyx_tuple__39)) __PYX_ERR(0, 408, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__39); + __Pyx_GIVEREF(__pyx_tuple__39); + __pyx_codeobj__40 = (PyObject*)__Pyx_PyCode_New(8, 0, 0, 14, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__39, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_nw_ec_alignx_pyx, __pyx_n_s_ind_vs_alldb, 408, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__40)) __PYX_ERR(0, 408, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":453 + * + * + * def seq_vs_db(list seq1, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, dict decs, # <<<<<<<<<<<<<< + * float thres=1.0, bool localize=False, bool oscore=True): + * """Align de specified ESSs vs all the ESS in the database seqs. + */ + __pyx_tuple__41 = PyTuple_Pack(11, __pyx_n_s_seq1, __pyx_n_s_seqs, __pyx_n_s_mat, __pyx_n_s_decs, __pyx_n_s_thres, __pyx_n_s_localize, __pyx_n_s_oscore, __pyx_n_s_resdict, __pyx_n_s_i, __pyx_n_s_seq2, __pyx_n_s_sco); if (unlikely(!__pyx_tuple__41)) __PYX_ERR(0, 453, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__41); + __Pyx_GIVEREF(__pyx_tuple__41); + __pyx_codeobj__42 = (PyObject*)__Pyx_PyCode_New(7, 0, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_nw_ec_alignx_pyx, __pyx_n_s_seq_vs_db, 453, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__42)) __PYX_ERR(0, 453, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":487 + * + * + * def db_vs_db(list seqs1, list seqs2, np.ndarray[DTYPEF_t, ndim=2] mat, # <<<<<<<<<<<<<< + * dict decs, float thres=1.0, bool localize=False, + * bool oscore=True, int nproc=2): + */ + __pyx_tuple__43 = PyTuple_Pack(14, __pyx_n_s_seqs1, __pyx_n_s_seqs2, __pyx_n_s_mat, __pyx_n_s_decs, __pyx_n_s_thres, __pyx_n_s_localize, __pyx_n_s_oscore, __pyx_n_s_nproc, __pyx_n_s_resdic, __pyx_n_s_pool, __pyx_n_s_align_func, __pyx_n_s_resd, __pyx_n_s_i, __pyx_n_s_d); if (unlikely(!__pyx_tuple__43)) __PYX_ERR(0, 487, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__43); + __Pyx_GIVEREF(__pyx_tuple__43); + __pyx_codeobj__44 = (PyObject*)__Pyx_PyCode_New(8, 0, 0, 14, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__43, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_nw_ec_alignx_pyx, __pyx_n_s_db_vs_db, 487, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__44)) __PYX_ERR(0, 487, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":527 + * + * + * def alldb_comp(list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, dict decs, # <<<<<<<<<<<<<< + * float thres=1.0, bool localize=False, bool oscore=True, + * int nproc=2): + */ + __pyx_tuple__45 = PyTuple_Pack(13, __pyx_n_s_seqs, __pyx_n_s_mat, __pyx_n_s_decs, __pyx_n_s_thres, __pyx_n_s_localize, __pyx_n_s_oscore, __pyx_n_s_nproc, __pyx_n_s_indices, __pyx_n_s_resd, __pyx_n_s_d, __pyx_n_s_result, __pyx_n_s_pool, __pyx_n_s_align_func); if (unlikely(!__pyx_tuple__45)) __PYX_ERR(0, 527, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__45); + __Pyx_GIVEREF(__pyx_tuple__45); + __pyx_codeobj__46 = (PyObject*)__Pyx_PyCode_New(7, 0, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__45, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_nw_ec_alignx_pyx, __pyx_n_s_alldb_comp, 527, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__46)) __PYX_ERR(0, 527, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":565 + * + * + * def list_vs_alldb(list indices, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, # <<<<<<<<<<<<<< + * dict decs, float thres=1.0, bool localize=False, + * bool wholedb=False, bool oscore=False, int nproc=2): + */ + __pyx_tuple__47 = PyTuple_Pack(14, __pyx_n_s_indices, __pyx_n_s_seqs, __pyx_n_s_mat, __pyx_n_s_decs, __pyx_n_s_thres, __pyx_n_s_localize, __pyx_n_s_wholedb, __pyx_n_s_oscore, __pyx_n_s_nproc, __pyx_n_s_resd, __pyx_n_s_d, __pyx_n_s_result, __pyx_n_s_pool, __pyx_n_s_align_func); if (unlikely(!__pyx_tuple__47)) __PYX_ERR(0, 565, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__47); + __Pyx_GIVEREF(__pyx_tuple__47); + __pyx_codeobj__48 = (PyObject*)__Pyx_PyCode_New(9, 0, 0, 14, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__47, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_nw_ec_alignx_pyx, __pyx_n_s_list_vs_alldb, 565, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__48)) __PYX_ERR(0, 565, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":606 + * + * + * def alldb_shared(seqs, mat, decs, thres=1.0, localize=False, # <<<<<<<<<<<<<< + * nproc=2): + * """Align all the ESS in the database (seqs) and return the results as a + */ + __pyx_tuple__49 = PyTuple_Pack(10, __pyx_n_s_seqs, __pyx_n_s_mat, __pyx_n_s_decs, __pyx_n_s_thres, __pyx_n_s_localize, __pyx_n_s_nproc, __pyx_n_s_total, __pyx_n_s_indices, __pyx_n_s_pool, __pyx_n_s_align_func); if (unlikely(!__pyx_tuple__49)) __PYX_ERR(0, 606, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__49); + __Pyx_GIVEREF(__pyx_tuple__49); + __pyx_codeobj__50 = (PyObject*)__Pyx_PyCode_New(6, 0, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__49, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_nw_ec_alignx_pyx, __pyx_n_s_alldb_shared, 606, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__50)) __PYX_ERR(0, 606, __pyx_L1_error) + __pyx_tuple__51 = PyTuple_Pack(3, ((PyObject*)__pyx_float_1_0), ((PyObject *)Py_False), ((PyObject *)__pyx_int_2)); if (unlikely(!__pyx_tuple__51)) __PYX_ERR(0, 606, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__51); + __Pyx_GIVEREF(__pyx_tuple__51); + + /* "nw_ec_alignx.pyx":636 + * + * + * def _create_global_arr(total): # <<<<<<<<<<<<<< + * """Create shared global array for all vs all comparisson + * + */ + __pyx_tuple__52 = PyTuple_Pack(3, __pyx_n_s_total, __pyx_n_s_shared_sco_base, __pyx_n_s_scomat_2); if (unlikely(!__pyx_tuple__52)) __PYX_ERR(0, 636, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__52); + __Pyx_GIVEREF(__pyx_tuple__52); + __pyx_codeobj__53 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__52, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_nw_ec_alignx_pyx, __pyx_n_s_create_global_arr, 636, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__53)) __PYX_ERR(0, 636, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":649 + * + * + * def _fill_mat(ind, seqs, mat, decs, localize, float thres): # <<<<<<<<<<<<<< + * """Fill shared global matrix + * + */ + __pyx_tuple__54 = PyTuple_Pack(10, __pyx_n_s_ind, __pyx_n_s_seqs, __pyx_n_s_mat, __pyx_n_s_decs, __pyx_n_s_localize, __pyx_n_s_thres, __pyx_n_s_j, __pyx_n_s_sco, __pyx_n_s_seq1, __pyx_n_s_seq2); if (unlikely(!__pyx_tuple__54)) __PYX_ERR(0, 649, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__54); + __Pyx_GIVEREF(__pyx_tuple__54); + __pyx_codeobj__55 = (PyObject*)__Pyx_PyCode_New(6, 0, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__54, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_nw_ec_alignx_pyx, __pyx_n_s_fill_mat, 649, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__55)) __PYX_ERR(0, 649, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":673 + * + * + * def store_dict(fname, rdict, indices=None, indices2=None): # <<<<<<<<<<<<<< + * """Stores the scores of the alignments in a tab separated text + * file. The first column corresponds to the first sequence index + */ + __pyx_tuple__56 = PyTuple_Pack(13, __pyx_n_s_fname, __pyx_n_s_rdict, __pyx_n_s_indices, __pyx_n_s_indices2, __pyx_n_s_outf, __pyx_n_s_testval, __pyx_n_s_i, __pyx_n_s_sco, __pyx_n_s_line, __pyx_n_s_dic, __pyx_n_s_j, __pyx_n_s_ind1, __pyx_n_s_ind2); if (unlikely(!__pyx_tuple__56)) __PYX_ERR(0, 673, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__56); + __Pyx_GIVEREF(__pyx_tuple__56); + __pyx_codeobj__57 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__56, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_nw_ec_alignx_pyx, __pyx_n_s_store_dict, 673, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__57)) __PYX_ERR(0, 673, __pyx_L1_error) + __pyx_tuple__58 = PyTuple_Pack(2, Py_None, Py_None); if (unlikely(!__pyx_tuple__58)) __PYX_ERR(0, 673, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__58); + __Pyx_GIVEREF(__pyx_tuple__58); + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} +/* #### Code section: init_constants ### */ + +static CYTHON_SMALL_CODE int __Pyx_InitConstants(void) { + __pyx_umethod_PyDict_Type_update.type = (PyObject*)&PyDict_Type; + __pyx_umethod_PyDict_Type_update.method_name = &__pyx_n_s_update; + if (__Pyx_CreateStringTabAndInitStrings() < 0) __PYX_ERR(0, 1, __pyx_L1_error); + __pyx_float_1_0 = PyFloat_FromDouble(1.0); if (unlikely(!__pyx_float_1_0)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_float_0_05 = PyFloat_FromDouble(0.05); if (unlikely(!__pyx_float_0_05)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_float_0_95 = PyFloat_FromDouble(0.95); if (unlikely(!__pyx_float_0_95)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_1000 = PyInt_FromLong(1000); if (unlikely(!__pyx_int_1000)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_neg_1 = PyInt_FromLong(-1); if (unlikely(!__pyx_int_neg_1)) __PYX_ERR(0, 1, __pyx_L1_error) + return 0; + __pyx_L1_error:; + return -1; +} +/* #### Code section: init_globals ### */ + +static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { + /* AssertionsEnabled.init */ + if (likely(__Pyx_init_assertions_enabled() == 0)); else + +if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1, __pyx_L1_error) + + /* NumpyImportArray.init */ + /* + * Cython has automatically inserted a call to _import_array since + * you didn't include one when you cimported numpy. To disable this + * add the line + * numpy._import_array + */ +#ifdef NPY_FEATURE_VERSION +#ifndef NO_IMPORT_ARRAY +if (unlikely(_import_array() == -1)) { + PyErr_SetString(PyExc_ImportError, "numpy.core.multiarray failed to import " + "(auto-generated because you didn't call 'numpy.import_array()' after cimporting numpy; " + "use 'numpy._import_array' to disable if you are certain you don't need it)."); +} +#endif +#endif + +if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1, __pyx_L1_error) + + return 0; + __pyx_L1_error:; + return -1; +} +/* #### Code section: init_module ### */ + +static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(void); /*proto*/ + +static int __Pyx_modinit_global_init_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0); + /*--- Global init code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_variable_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0); + /*--- Variable export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0); + /*--- Function export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_type_init_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0); + /*--- Type init code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_type_import_code(void) { + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0); + /*--- Type import code ---*/ + __pyx_t_1 = PyImport_ImportModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_ptype_7cpython_4type_type = __Pyx_ImportType_3_0_11(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "type", + #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000 + sizeof(PyTypeObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyTypeObject), + #elif CYTHON_COMPILING_IN_LIMITED_API + sizeof(PyTypeObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyTypeObject), + #else + sizeof(PyHeapTypeObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyHeapTypeObject), + #endif + __Pyx_ImportType_CheckSize_Warn_3_0_11); if (!__pyx_ptype_7cpython_4type_type) __PYX_ERR(3, 9, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyImport_ImportModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_ptype_7cpython_4bool_bool = __Pyx_ImportType_3_0_11(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "bool", sizeof(PyBoolObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyBoolObject),__Pyx_ImportType_CheckSize_Warn_3_0_11); if (!__pyx_ptype_7cpython_4bool_bool) __PYX_ERR(4, 8, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyImport_ImportModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_ptype_7cpython_7complex_complex = __Pyx_ImportType_3_0_11(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "complex", sizeof(PyComplexObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyComplexObject),__Pyx_ImportType_CheckSize_Warn_3_0_11); if (!__pyx_ptype_7cpython_7complex_complex) __PYX_ERR(5, 15, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyImport_ImportModule("numpy"); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 272, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_ptype_5numpy_dtype = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "dtype", sizeof(PyArray_Descr), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyArray_Descr),__Pyx_ImportType_CheckSize_Ignore_3_0_11); if (!__pyx_ptype_5numpy_dtype) __PYX_ERR(2, 272, __pyx_L1_error) + __pyx_ptype_5numpy_flatiter = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "flatiter", sizeof(PyArrayIterObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyArrayIterObject),__Pyx_ImportType_CheckSize_Ignore_3_0_11); if (!__pyx_ptype_5numpy_flatiter) __PYX_ERR(2, 317, __pyx_L1_error) + __pyx_ptype_5numpy_broadcast = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "broadcast", sizeof(PyArrayMultiIterObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyArrayMultiIterObject),__Pyx_ImportType_CheckSize_Ignore_3_0_11); if (!__pyx_ptype_5numpy_broadcast) __PYX_ERR(2, 321, __pyx_L1_error) + __pyx_ptype_5numpy_ndarray = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "ndarray", sizeof(PyArrayObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyArrayObject),__Pyx_ImportType_CheckSize_Ignore_3_0_11); if (!__pyx_ptype_5numpy_ndarray) __PYX_ERR(2, 360, __pyx_L1_error) + __pyx_ptype_5numpy_generic = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "generic", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_11); if (!__pyx_ptype_5numpy_generic) __PYX_ERR(2, 865, __pyx_L1_error) + __pyx_ptype_5numpy_number = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "number", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_11); if (!__pyx_ptype_5numpy_number) __PYX_ERR(2, 867, __pyx_L1_error) + __pyx_ptype_5numpy_integer = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "integer", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_11); if (!__pyx_ptype_5numpy_integer) __PYX_ERR(2, 869, __pyx_L1_error) + __pyx_ptype_5numpy_signedinteger = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "signedinteger", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_11); if (!__pyx_ptype_5numpy_signedinteger) __PYX_ERR(2, 871, __pyx_L1_error) + __pyx_ptype_5numpy_unsignedinteger = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "unsignedinteger", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_11); if (!__pyx_ptype_5numpy_unsignedinteger) __PYX_ERR(2, 873, __pyx_L1_error) + __pyx_ptype_5numpy_inexact = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "inexact", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_11); if (!__pyx_ptype_5numpy_inexact) __PYX_ERR(2, 875, __pyx_L1_error) + __pyx_ptype_5numpy_floating = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "floating", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_11); if (!__pyx_ptype_5numpy_floating) __PYX_ERR(2, 877, __pyx_L1_error) + __pyx_ptype_5numpy_complexfloating = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "complexfloating", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_11); if (!__pyx_ptype_5numpy_complexfloating) __PYX_ERR(2, 879, __pyx_L1_error) + __pyx_ptype_5numpy_flexible = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "flexible", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_11); if (!__pyx_ptype_5numpy_flexible) __PYX_ERR(2, 881, __pyx_L1_error) + __pyx_ptype_5numpy_character = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "character", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_11); if (!__pyx_ptype_5numpy_character) __PYX_ERR(2, 883, __pyx_L1_error) + __pyx_ptype_5numpy_ufunc = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "ufunc", sizeof(PyUFuncObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyUFuncObject),__Pyx_ImportType_CheckSize_Ignore_3_0_11); if (!__pyx_ptype_5numpy_ufunc) __PYX_ERR(2, 947, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_RefNannyFinishContext(); + return -1; +} + +static int __Pyx_modinit_variable_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_import_code", 0); + /*--- Variable import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0); + /*--- Function import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + + +#if PY_MAJOR_VERSION >= 3 +#if CYTHON_PEP489_MULTI_PHASE_INIT +static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/ +static int __pyx_pymod_exec_nw_ec_alignx(PyObject* module); /*proto*/ +static PyModuleDef_Slot __pyx_moduledef_slots[] = { + {Py_mod_create, (void*)__pyx_pymod_create}, + {Py_mod_exec, (void*)__pyx_pymod_exec_nw_ec_alignx}, + {0, NULL} +}; +#endif + +#ifdef __cplusplus +namespace { + struct PyModuleDef __pyx_moduledef = + #else + static struct PyModuleDef __pyx_moduledef = + #endif + { + PyModuleDef_HEAD_INIT, + "nw_ec_alignx", + __pyx_k_Needelman_Wunsh_algorithm_for_EC, /* m_doc */ + #if CYTHON_PEP489_MULTI_PHASE_INIT + 0, /* m_size */ + #elif CYTHON_USE_MODULE_STATE + sizeof(__pyx_mstate), /* m_size */ + #else + -1, /* m_size */ + #endif + __pyx_methods /* m_methods */, + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_moduledef_slots, /* m_slots */ + #else + NULL, /* m_reload */ + #endif + #if CYTHON_USE_MODULE_STATE + __pyx_m_traverse, /* m_traverse */ + __pyx_m_clear, /* m_clear */ + NULL /* m_free */ + #else + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL /* m_free */ + #endif + }; + #ifdef __cplusplus +} /* anonymous namespace */ +#endif +#endif + +#ifndef CYTHON_NO_PYINIT_EXPORT +#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC +#elif PY_MAJOR_VERSION < 3 +#ifdef __cplusplus +#define __Pyx_PyMODINIT_FUNC extern "C" void +#else +#define __Pyx_PyMODINIT_FUNC void +#endif +#else +#ifdef __cplusplus +#define __Pyx_PyMODINIT_FUNC extern "C" PyObject * +#else +#define __Pyx_PyMODINIT_FUNC PyObject * +#endif +#endif + + +#if PY_MAJOR_VERSION < 3 +__Pyx_PyMODINIT_FUNC initnw_ec_alignx(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC initnw_ec_alignx(void) +#else +__Pyx_PyMODINIT_FUNC PyInit_nw_ec_alignx(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC PyInit_nw_ec_alignx(void) +#if CYTHON_PEP489_MULTI_PHASE_INIT +{ + return PyModuleDef_Init(&__pyx_moduledef); +} +static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) { + #if PY_VERSION_HEX >= 0x030700A1 + static PY_INT64_T main_interpreter_id = -1; + PY_INT64_T current_id = PyInterpreterState_GetID(PyThreadState_Get()->interp); + if (main_interpreter_id == -1) { + main_interpreter_id = current_id; + return (unlikely(current_id == -1)) ? -1 : 0; + } else if (unlikely(main_interpreter_id != current_id)) + #else + static PyInterpreterState *main_interpreter = NULL; + PyInterpreterState *current_interpreter = PyThreadState_Get()->interp; + if (!main_interpreter) { + main_interpreter = current_interpreter; + } else if (unlikely(main_interpreter != current_interpreter)) + #endif + { + PyErr_SetString( + PyExc_ImportError, + "Interpreter change detected - this module can only be loaded into one interpreter per process."); + return -1; + } + return 0; +} +#if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *module, const char* from_name, const char* to_name, int allow_none) +#else +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) +#endif +{ + PyObject *value = PyObject_GetAttrString(spec, from_name); + int result = 0; + if (likely(value)) { + if (allow_none || value != Py_None) { +#if CYTHON_COMPILING_IN_LIMITED_API + result = PyModule_AddObject(module, to_name, value); +#else + result = PyDict_SetItemString(moddict, to_name, value); +#endif + } + Py_DECREF(value); + } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Clear(); + } else { + result = -1; + } + return result; +} +static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def) { + PyObject *module = NULL, *moddict, *modname; + CYTHON_UNUSED_VAR(def); + if (__Pyx_check_single_interpreter()) + return NULL; + if (__pyx_m) + return __Pyx_NewRef(__pyx_m); + modname = PyObject_GetAttrString(spec, "name"); + if (unlikely(!modname)) goto bad; + module = PyModule_NewObject(modname); + Py_DECREF(modname); + if (unlikely(!module)) goto bad; +#if CYTHON_COMPILING_IN_LIMITED_API + moddict = module; +#else + moddict = PyModule_GetDict(module); + if (unlikely(!moddict)) goto bad; +#endif + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "submodule_search_locations", "__path__", 0) < 0)) goto bad; + return module; +bad: + Py_XDECREF(module); + return NULL; +} + + +static CYTHON_SMALL_CODE int __pyx_pymod_exec_nw_ec_alignx(PyObject *__pyx_pyinit_module) +#endif +#endif +{ + int stringtab_initialized = 0; + #if CYTHON_USE_MODULE_STATE + int pystate_addmodule_run = 0; + #endif + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + #if CYTHON_PEP489_MULTI_PHASE_INIT + if (__pyx_m) { + if (__pyx_m == __pyx_pyinit_module) return 0; + PyErr_SetString(PyExc_RuntimeError, "Module 'nw_ec_alignx' has already been imported. Re-initialisation is not supported."); + return -1; + } + #elif PY_MAJOR_VERSION >= 3 + if (__pyx_m) return __Pyx_NewRef(__pyx_m); + #endif + /*--- Module creation code ---*/ + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_m = __pyx_pyinit_module; + Py_INCREF(__pyx_m); + #else + #if PY_MAJOR_VERSION < 3 + __pyx_m = Py_InitModule4("nw_ec_alignx", __pyx_methods, __pyx_k_Needelman_Wunsh_algorithm_for_EC, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #elif CYTHON_USE_MODULE_STATE + __pyx_t_1 = PyModule_Create(&__pyx_moduledef); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error) + { + int add_module_result = PyState_AddModule(__pyx_t_1, &__pyx_moduledef); + __pyx_t_1 = 0; /* transfer ownership from __pyx_t_1 to "nw_ec_alignx" pseudovariable */ + if (unlikely((add_module_result < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + pystate_addmodule_run = 1; + } + #else + __pyx_m = PyModule_Create(&__pyx_moduledef); + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #endif + CYTHON_UNUSED_VAR(__pyx_t_1); + __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_d); + __pyx_b = __Pyx_PyImport_AddModuleRef(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_cython_runtime = __Pyx_PyImport_AddModuleRef((const char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error) + if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #if CYTHON_REFNANNY +__Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); +if (!__Pyx_RefNanny) { + PyErr_Clear(); + __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); + if (!__Pyx_RefNanny) + Py_FatalError("failed to import 'refnanny' module"); +} +#endif + __Pyx_RefNannySetupContext("__Pyx_PyMODINIT_FUNC PyInit_nw_ec_alignx(void)", 0); + if (__Pyx_check_binary_version(__PYX_LIMITED_VERSION_HEX, __Pyx_get_runtime_version(), CYTHON_COMPILING_IN_LIMITED_API) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pxy_PyFrame_Initialize_Offsets + __Pxy_PyFrame_Initialize_Offsets(); + #endif + __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pyx_CyFunction_USED + if (__pyx_CyFunction_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_FusedFunction_USED + if (__pyx_FusedFunction_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Coroutine_USED + if (__pyx_Coroutine_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Generator_USED + if (__pyx_Generator_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_AsyncGen_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_StopAsyncIteration_USED + if (__pyx_StopAsyncIteration_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + /*--- Library function declarations ---*/ + /*--- Threads initialization code ---*/ + #if defined(WITH_THREAD) && PY_VERSION_HEX < 0x030700F0 && defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS + PyEval_InitThreads(); + #endif + /*--- Initialize various global constants etc. ---*/ + if (__Pyx_InitConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + stringtab_initialized = 1; + if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) + if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + if (__pyx_module_is_main_nw_ec_alignx) { + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name, __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + } + #if PY_MAJOR_VERSION >= 3 + { + PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error) + if (!PyDict_GetItemString(modules, "nw_ec_alignx")) { + if (unlikely((PyDict_SetItemString(modules, "nw_ec_alignx", __pyx_m) < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + } + } + #endif + /*--- Builtin init code ---*/ + if (__Pyx_InitCachedBuiltins() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Constants init code ---*/ + if (__Pyx_InitCachedConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Global type/function init code ---*/ + (void)__Pyx_modinit_global_init_code(); + (void)__Pyx_modinit_variable_export_code(); + (void)__Pyx_modinit_function_export_code(); + (void)__Pyx_modinit_type_init_code(); + if (unlikely((__Pyx_modinit_type_import_code() < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + (void)__Pyx_modinit_variable_import_code(); + (void)__Pyx_modinit_function_import_code(); + /*--- Execution code ---*/ + #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + + /* "nw_ec_alignx.pyx":18 + * implementation.""" + * + * import ctypes # <<<<<<<<<<<<<< + * import cython + * from multiprocessing import Pool, Array + */ + __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_n_s_ctypes, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 18, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ctypes, __pyx_t_2) < 0) __PYX_ERR(0, 18, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "nw_ec_alignx.pyx":20 + * import ctypes + * import cython + * from multiprocessing import Pool, Array # <<<<<<<<<<<<<< + * from functools import partial + * cimport cython + */ + __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 20, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_Pool); + __Pyx_GIVEREF(__pyx_n_s_Pool); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_Pool)) __PYX_ERR(0, 20, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_Array); + __Pyx_GIVEREF(__pyx_n_s_Array); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_Array)) __PYX_ERR(0, 20, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_multiprocessing, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 20, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_Pool); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 20, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_Pool, __pyx_t_2) < 0) __PYX_ERR(0, 20, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_Array); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 20, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_Array, __pyx_t_2) < 0) __PYX_ERR(0, 20, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "nw_ec_alignx.pyx":21 + * import cython + * from multiprocessing import Pool, Array + * from functools import partial # <<<<<<<<<<<<<< + * cimport cython + * from cpython cimport bool + */ + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 21, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_partial); + __Pyx_GIVEREF(__pyx_n_s_partial); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_partial)) __PYX_ERR(0, 21, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_functools, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 21, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_partial); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 21, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_partial, __pyx_t_3) < 0) __PYX_ERR(0, 21, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "nw_ec_alignx.pyx":24 + * cimport cython + * from cpython cimport bool + * import numpy as np # <<<<<<<<<<<<<< + * cimport numpy as np + * from numpy cimport int32_t, float64_t + */ + __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_n_s_numpy, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 24, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_2) < 0) __PYX_ERR(0, 24, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "nw_ec_alignx.pyx":32 + * int INT_MAX + * + * DTYPE = np.int32 # <<<<<<<<<<<<<< + * ctypedef np.int32_t DTYPE_t + * DTYPEF = np.float64 + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_int32); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_DTYPE, __pyx_t_3) < 0) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "nw_ec_alignx.pyx":34 + * DTYPE = np.int32 + * ctypedef np.int32_t DTYPE_t + * DTYPEF = np.float64 # <<<<<<<<<<<<<< + * ctypedef np.float64_t DTYPEF_t + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 34, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_float64); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 34, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_DTYPEF, __pyx_t_2) < 0) __PYX_ERR(0, 34, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "nw_ec_alignx.pyx":57 + * @cython.wraparound(False) + * def _FastNW(np.ndarray[DTYPEF_t, ndim=2] mat, dict ecs, list seq1, list seq2, + * float gap=0.9): # <<<<<<<<<<<<<< + * """Perform dynamic programing alignment of EC numbers sequences. Creates + * the scoring and arrow matrices using brute force loops. + */ + __pyx_t_2 = PyFloat_FromDouble(((double)0.9)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 57, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + + /* "nw_ec_alignx.pyx":54 + * + * # best performance + * @cython.boundscheck(False) # <<<<<<<<<<<<<< + * @cython.wraparound(False) + * def _FastNW(np.ndarray[DTYPEF_t, ndim=2] mat, dict ecs, list seq1, list seq2, + */ + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 54, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2)) __PYX_ERR(0, 54, __pyx_L1_error); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_12nw_ec_alignx_1_FastNW, 0, __pyx_n_s_FastNW, NULL, __pyx_n_s_nw_ec_alignx, __pyx_d, ((PyObject *)__pyx_codeobj__32)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 54, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_FastNW, __pyx_t_2) < 0) __PYX_ERR(0, 54, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "nw_ec_alignx.pyx":249 + * @cython.wraparound(False) + * def scoring(np.ndarray[DTYPEF_t, ndim=2] mat, dict ecs, seq1, seq2, + * float gap=1, float fhomo=0.95, float fpengap=0.05): # <<<<<<<<<<<<<< + * """ This function evaluates a pair of alignmed ESS and returns an entroy + * based similarity (distance) score. This value is in the range 0-1. 0 means + */ + __pyx_t_2 = PyFloat_FromDouble(((float)1.0)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyFloat_FromDouble(((double)0.95)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyFloat_FromDouble(((double)0.05)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + + /* "nw_ec_alignx.pyx":246 + * + * + * @cython.boundscheck(False) # <<<<<<<<<<<<<< + * @cython.wraparound(False) + * def scoring(np.ndarray[DTYPEF_t, ndim=2] mat, dict ecs, seq1, seq2, + */ + __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 246, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2)) __PYX_ERR(0, 246, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3)) __PYX_ERR(0, 246, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_4)) __PYX_ERR(0, 246, __pyx_L1_error); + __pyx_t_2 = 0; + __pyx_t_3 = 0; + __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_12nw_ec_alignx_3scoring, 0, __pyx_n_s_scoring, NULL, __pyx_n_s_nw_ec_alignx, __pyx_d, ((PyObject *)__pyx_codeobj__34)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 246, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_t_5); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_scoring, __pyx_t_4) < 0) __PYX_ERR(0, 246, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":302 + * + * + * def _backtrace(np.ndarray[DTYPE_t, ndim=2] arrow, list seq1, list seq2): # <<<<<<<<<<<<<< + * """Reads the arrow matrix of NW alignment and return two lists of + * with the aligned EC numbers. + */ + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_12nw_ec_alignx_5_backtrace, 0, __pyx_n_s_backtrace, NULL, __pyx_n_s_nw_ec_alignx, __pyx_d, ((PyObject *)__pyx_codeobj__36)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 302, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_backtrace, __pyx_t_4) < 0) __PYX_ERR(0, 302, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":340 + * + * def NW(np.ndarray[DTYPEF_t, ndim=2] mat, dict ecs, list seq1, list seq2, + * float gap=0.9, bool localize=False, bool nws=False, # <<<<<<<<<<<<<< + * bool strfmt=True, bool oscore=False): + * """ + */ + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 340, __pyx_L1_error) + __Pyx_INCREF(((PyObject *)Py_False)); + __pyx_k__7 = ((PyBoolObject *)((PyObject *)Py_False)); + __Pyx_GIVEREF((PyObject *)((PyObject *)Py_False)); + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 340, __pyx_L1_error) + __Pyx_INCREF(((PyObject *)Py_False)); + __pyx_k__8 = ((PyBoolObject *)((PyObject *)Py_False)); + __Pyx_GIVEREF((PyObject *)((PyObject *)Py_False)); + + /* "nw_ec_alignx.pyx":341 + * def NW(np.ndarray[DTYPEF_t, ndim=2] mat, dict ecs, list seq1, list seq2, + * float gap=0.9, bool localize=False, bool nws=False, + * bool strfmt=True, bool oscore=False): # <<<<<<<<<<<<<< + * """ + * NW alignment function. Creates a pairwise alignment of Enzymatic Step + */ + if (!(likely(((((PyObject *)Py_True)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_True), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 341, __pyx_L1_error) + __Pyx_INCREF(((PyObject *)Py_True)); + __pyx_k__9 = ((PyBoolObject *)((PyObject *)Py_True)); + __Pyx_GIVEREF((PyObject *)((PyObject *)Py_True)); + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 341, __pyx_L1_error) + __Pyx_INCREF(((PyObject *)Py_False)); + __pyx_k__10 = ((PyBoolObject *)((PyObject *)Py_False)); + __Pyx_GIVEREF((PyObject *)((PyObject *)Py_False)); + + /* "nw_ec_alignx.pyx":340 + * + * def NW(np.ndarray[DTYPEF_t, ndim=2] mat, dict ecs, list seq1, list seq2, + * float gap=0.9, bool localize=False, bool nws=False, # <<<<<<<<<<<<<< + * bool strfmt=True, bool oscore=False): + * """ + */ + __pyx_t_4 = PyFloat_FromDouble(((double)0.9)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 340, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 340, __pyx_L1_error) + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 340, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":341 + * def NW(np.ndarray[DTYPEF_t, ndim=2] mat, dict ecs, list seq1, list seq2, + * float gap=0.9, bool localize=False, bool nws=False, + * bool strfmt=True, bool oscore=False): # <<<<<<<<<<<<<< + * """ + * NW alignment function. Creates a pairwise alignment of Enzymatic Step + */ + if (!(likely(((((PyObject *)Py_True)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_True), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 341, __pyx_L1_error) + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 341, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":339 + * + * + * def NW(np.ndarray[DTYPEF_t, ndim=2] mat, dict ecs, list seq1, list seq2, # <<<<<<<<<<<<<< + * float gap=0.9, bool localize=False, bool nws=False, + * bool strfmt=True, bool oscore=False): + */ + __pyx_t_5 = PyTuple_New(5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 339, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4)) __PYX_ERR(0, 339, __pyx_L1_error); + __Pyx_INCREF(((PyObject *)Py_False)); + __Pyx_GIVEREF(((PyObject *)Py_False)); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, ((PyObject *)Py_False))) __PYX_ERR(0, 339, __pyx_L1_error); + __Pyx_INCREF(((PyObject *)Py_False)); + __Pyx_GIVEREF(((PyObject *)Py_False)); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, ((PyObject *)Py_False))) __PYX_ERR(0, 339, __pyx_L1_error); + __Pyx_INCREF(((PyObject *)Py_True)); + __Pyx_GIVEREF(((PyObject *)Py_True)); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 3, ((PyObject *)Py_True))) __PYX_ERR(0, 339, __pyx_L1_error); + __Pyx_INCREF(((PyObject *)Py_False)); + __Pyx_GIVEREF(((PyObject *)Py_False)); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 4, ((PyObject *)Py_False))) __PYX_ERR(0, 339, __pyx_L1_error); + __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_12nw_ec_alignx_7NW, 0, __pyx_n_s_NW, NULL, __pyx_n_s_nw_ec_alignx, __pyx_d, ((PyObject *)__pyx_codeobj__38)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 339, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_t_5); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_NW, __pyx_t_4) < 0) __PYX_ERR(0, 339, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":409 + * + * def ind_vs_alldb(int ind, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, + * dict decs, float thres=1.0, bool wholedb=False, # <<<<<<<<<<<<<< + * bool localize=False, bool oscore=True): + * """Align the ESSs in the specified index (ind) versus + */ + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 409, __pyx_L1_error) + __Pyx_INCREF(((PyObject *)Py_False)); + __pyx_k__12 = ((PyBoolObject *)((PyObject *)Py_False)); + __Pyx_GIVEREF((PyObject *)((PyObject *)Py_False)); + + /* "nw_ec_alignx.pyx":410 + * def ind_vs_alldb(int ind, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, + * dict decs, float thres=1.0, bool wholedb=False, + * bool localize=False, bool oscore=True): # <<<<<<<<<<<<<< + * """Align the ESSs in the specified index (ind) versus + * all the rest of sequences with index > ind. + */ + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 410, __pyx_L1_error) + __Pyx_INCREF(((PyObject *)Py_False)); + __pyx_k__13 = ((PyBoolObject *)((PyObject *)Py_False)); + __Pyx_GIVEREF((PyObject *)((PyObject *)Py_False)); + if (!(likely(((((PyObject *)Py_True)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_True), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 410, __pyx_L1_error) + __Pyx_INCREF(((PyObject *)Py_True)); + __pyx_k__14 = ((PyBoolObject *)((PyObject *)Py_True)); + __Pyx_GIVEREF((PyObject *)((PyObject *)Py_True)); + + /* "nw_ec_alignx.pyx":409 + * + * def ind_vs_alldb(int ind, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, + * dict decs, float thres=1.0, bool wholedb=False, # <<<<<<<<<<<<<< + * bool localize=False, bool oscore=True): + * """Align the ESSs in the specified index (ind) versus + */ + __pyx_t_4 = PyFloat_FromDouble(((double)1.0)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 409, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 409, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":410 + * def ind_vs_alldb(int ind, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, + * dict decs, float thres=1.0, bool wholedb=False, + * bool localize=False, bool oscore=True): # <<<<<<<<<<<<<< + * """Align the ESSs in the specified index (ind) versus + * all the rest of sequences with index > ind. + */ + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 410, __pyx_L1_error) + if (!(likely(((((PyObject *)Py_True)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_True), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 410, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":408 + * + * + * def ind_vs_alldb(int ind, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, # <<<<<<<<<<<<<< + * dict decs, float thres=1.0, bool wholedb=False, + * bool localize=False, bool oscore=True): + */ + __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 408, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4)) __PYX_ERR(0, 408, __pyx_L1_error); + __Pyx_INCREF(((PyObject *)Py_False)); + __Pyx_GIVEREF(((PyObject *)Py_False)); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, ((PyObject *)Py_False))) __PYX_ERR(0, 408, __pyx_L1_error); + __Pyx_INCREF(((PyObject *)Py_False)); + __Pyx_GIVEREF(((PyObject *)Py_False)); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, ((PyObject *)Py_False))) __PYX_ERR(0, 408, __pyx_L1_error); + __Pyx_INCREF(((PyObject *)Py_True)); + __Pyx_GIVEREF(((PyObject *)Py_True)); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 3, ((PyObject *)Py_True))) __PYX_ERR(0, 408, __pyx_L1_error); + __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_12nw_ec_alignx_9ind_vs_alldb, 0, __pyx_n_s_ind_vs_alldb, NULL, __pyx_n_s_nw_ec_alignx, __pyx_d, ((PyObject *)__pyx_codeobj__40)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 408, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_t_5); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ind_vs_alldb, __pyx_t_4) < 0) __PYX_ERR(0, 408, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":454 + * + * def seq_vs_db(list seq1, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, dict decs, + * float thres=1.0, bool localize=False, bool oscore=True): # <<<<<<<<<<<<<< + * """Align de specified ESSs vs all the ESS in the database seqs. + * Returns a dictionary with the scores. The keys are the index of + */ + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 454, __pyx_L1_error) + __Pyx_INCREF(((PyObject *)Py_False)); + __pyx_k__15 = ((PyBoolObject *)((PyObject *)Py_False)); + __Pyx_GIVEREF((PyObject *)((PyObject *)Py_False)); + if (!(likely(((((PyObject *)Py_True)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_True), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 454, __pyx_L1_error) + __Pyx_INCREF(((PyObject *)Py_True)); + __pyx_k__16 = ((PyBoolObject *)((PyObject *)Py_True)); + __Pyx_GIVEREF((PyObject *)((PyObject *)Py_True)); + + /* "nw_ec_alignx.pyx":453 + * + * + * def seq_vs_db(list seq1, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, dict decs, # <<<<<<<<<<<<<< + * float thres=1.0, bool localize=False, bool oscore=True): + * """Align de specified ESSs vs all the ESS in the database seqs. + */ + __pyx_t_4 = PyFloat_FromDouble(((double)1.0)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 454, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + + /* "nw_ec_alignx.pyx":454 + * + * def seq_vs_db(list seq1, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, dict decs, + * float thres=1.0, bool localize=False, bool oscore=True): # <<<<<<<<<<<<<< + * """Align de specified ESSs vs all the ESS in the database seqs. + * Returns a dictionary with the scores. The keys are the index of + */ + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 454, __pyx_L1_error) + if (!(likely(((((PyObject *)Py_True)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_True), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 454, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":453 + * + * + * def seq_vs_db(list seq1, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, dict decs, # <<<<<<<<<<<<<< + * float thres=1.0, bool localize=False, bool oscore=True): + * """Align de specified ESSs vs all the ESS in the database seqs. + */ + __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 453, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4)) __PYX_ERR(0, 453, __pyx_L1_error); + __Pyx_INCREF(((PyObject *)Py_False)); + __Pyx_GIVEREF(((PyObject *)Py_False)); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, ((PyObject *)Py_False))) __PYX_ERR(0, 453, __pyx_L1_error); + __Pyx_INCREF(((PyObject *)Py_True)); + __Pyx_GIVEREF(((PyObject *)Py_True)); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, ((PyObject *)Py_True))) __PYX_ERR(0, 453, __pyx_L1_error); + __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_12nw_ec_alignx_11seq_vs_db, 0, __pyx_n_s_seq_vs_db, NULL, __pyx_n_s_nw_ec_alignx, __pyx_d, ((PyObject *)__pyx_codeobj__42)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 453, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_t_5); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_seq_vs_db, __pyx_t_4) < 0) __PYX_ERR(0, 453, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":488 + * + * def db_vs_db(list seqs1, list seqs2, np.ndarray[DTYPEF_t, ndim=2] mat, + * dict decs, float thres=1.0, bool localize=False, # <<<<<<<<<<<<<< + * bool oscore=True, int nproc=2): + * """Align all the ESS in both databases (seqs1, seqs2). The result + */ + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 488, __pyx_L1_error) + __Pyx_INCREF(((PyObject *)Py_False)); + __pyx_k__17 = ((PyBoolObject *)((PyObject *)Py_False)); + __Pyx_GIVEREF((PyObject *)((PyObject *)Py_False)); + + /* "nw_ec_alignx.pyx":489 + * def db_vs_db(list seqs1, list seqs2, np.ndarray[DTYPEF_t, ndim=2] mat, + * dict decs, float thres=1.0, bool localize=False, + * bool oscore=True, int nproc=2): # <<<<<<<<<<<<<< + * """Align all the ESS in both databases (seqs1, seqs2). The result + * is a dictionary of dictionaries. The fist key representes the index + */ + if (!(likely(((((PyObject *)Py_True)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_True), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 489, __pyx_L1_error) + __Pyx_INCREF(((PyObject *)Py_True)); + __pyx_k__18 = ((PyBoolObject *)((PyObject *)Py_True)); + __Pyx_GIVEREF((PyObject *)((PyObject *)Py_True)); + + /* "nw_ec_alignx.pyx":488 + * + * def db_vs_db(list seqs1, list seqs2, np.ndarray[DTYPEF_t, ndim=2] mat, + * dict decs, float thres=1.0, bool localize=False, # <<<<<<<<<<<<<< + * bool oscore=True, int nproc=2): + * """Align all the ESS in both databases (seqs1, seqs2). The result + */ + __pyx_t_4 = PyFloat_FromDouble(((double)1.0)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 488, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 488, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":489 + * def db_vs_db(list seqs1, list seqs2, np.ndarray[DTYPEF_t, ndim=2] mat, + * dict decs, float thres=1.0, bool localize=False, + * bool oscore=True, int nproc=2): # <<<<<<<<<<<<<< + * """Align all the ESS in both databases (seqs1, seqs2). The result + * is a dictionary of dictionaries. The fist key representes the index + */ + if (!(likely(((((PyObject *)Py_True)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_True), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 489, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyInt_From_int(((int)2)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 489, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + + /* "nw_ec_alignx.pyx":487 + * + * + * def db_vs_db(list seqs1, list seqs2, np.ndarray[DTYPEF_t, ndim=2] mat, # <<<<<<<<<<<<<< + * dict decs, float thres=1.0, bool localize=False, + * bool oscore=True, int nproc=2): + */ + __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 487, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4)) __PYX_ERR(0, 487, __pyx_L1_error); + __Pyx_INCREF(((PyObject *)Py_False)); + __Pyx_GIVEREF(((PyObject *)Py_False)); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)Py_False))) __PYX_ERR(0, 487, __pyx_L1_error); + __Pyx_INCREF(((PyObject *)Py_True)); + __Pyx_GIVEREF(((PyObject *)Py_True)); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 2, ((PyObject *)Py_True))) __PYX_ERR(0, 487, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_5); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_t_5)) __PYX_ERR(0, 487, __pyx_L1_error); + __pyx_t_4 = 0; + __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_12nw_ec_alignx_13db_vs_db, 0, __pyx_n_s_db_vs_db, NULL, __pyx_n_s_nw_ec_alignx, __pyx_d, ((PyObject *)__pyx_codeobj__44)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 487, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_5, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_db_vs_db, __pyx_t_5) < 0) __PYX_ERR(0, 487, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "nw_ec_alignx.pyx":528 + * + * def alldb_comp(list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, dict decs, + * float thres=1.0, bool localize=False, bool oscore=True, # <<<<<<<<<<<<<< + * int nproc=2): + * """Align all the ESS in the database (seqs) and return the results in form + */ + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 528, __pyx_L1_error) + __Pyx_INCREF(((PyObject *)Py_False)); + __pyx_k__19 = ((PyBoolObject *)((PyObject *)Py_False)); + __Pyx_GIVEREF((PyObject *)((PyObject *)Py_False)); + if (!(likely(((((PyObject *)Py_True)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_True), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 528, __pyx_L1_error) + __Pyx_INCREF(((PyObject *)Py_True)); + __pyx_k__20 = ((PyBoolObject *)((PyObject *)Py_True)); + __Pyx_GIVEREF((PyObject *)((PyObject *)Py_True)); + + /* "nw_ec_alignx.pyx":527 + * + * + * def alldb_comp(list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, dict decs, # <<<<<<<<<<<<<< + * float thres=1.0, bool localize=False, bool oscore=True, + * int nproc=2): + */ + __pyx_t_5 = PyFloat_FromDouble(((double)1.0)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 528, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + + /* "nw_ec_alignx.pyx":528 + * + * def alldb_comp(list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, dict decs, + * float thres=1.0, bool localize=False, bool oscore=True, # <<<<<<<<<<<<<< + * int nproc=2): + * """Align all the ESS in the database (seqs) and return the results in form + */ + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 528, __pyx_L1_error) + if (!(likely(((((PyObject *)Py_True)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_True), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 528, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":529 + * def alldb_comp(list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, dict decs, + * float thres=1.0, bool localize=False, bool oscore=True, + * int nproc=2): # <<<<<<<<<<<<<< + * """Align all the ESS in the database (seqs) and return the results in form + * of dictionary. The result is equivalent to the upper part the all vs all + */ + __pyx_t_3 = __Pyx_PyInt_From_int(((int)2)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 529, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + + /* "nw_ec_alignx.pyx":527 + * + * + * def alldb_comp(list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, dict decs, # <<<<<<<<<<<<<< + * float thres=1.0, bool localize=False, bool oscore=True, + * int nproc=2): + */ + __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 527, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_5); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5)) __PYX_ERR(0, 527, __pyx_L1_error); + __Pyx_INCREF(((PyObject *)Py_False)); + __Pyx_GIVEREF(((PyObject *)Py_False)); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)Py_False))) __PYX_ERR(0, 527, __pyx_L1_error); + __Pyx_INCREF(((PyObject *)Py_True)); + __Pyx_GIVEREF(((PyObject *)Py_True)); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 2, ((PyObject *)Py_True))) __PYX_ERR(0, 527, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_t_3)) __PYX_ERR(0, 527, __pyx_L1_error); + __pyx_t_5 = 0; + __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_12nw_ec_alignx_15alldb_comp, 0, __pyx_n_s_alldb_comp, NULL, __pyx_n_s_nw_ec_alignx, __pyx_d, ((PyObject *)__pyx_codeobj__46)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 527, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_3, __pyx_t_4); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_alldb_comp, __pyx_t_3) < 0) __PYX_ERR(0, 527, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "nw_ec_alignx.pyx":566 + * + * def list_vs_alldb(list indices, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, + * dict decs, float thres=1.0, bool localize=False, # <<<<<<<<<<<<<< + * bool wholedb=False, bool oscore=False, int nproc=2): + * """Align all the ESS in the database (seqs) and return the results in form + */ + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 566, __pyx_L1_error) + __Pyx_INCREF(((PyObject *)Py_False)); + __pyx_k__21 = ((PyBoolObject *)((PyObject *)Py_False)); + __Pyx_GIVEREF((PyObject *)((PyObject *)Py_False)); + + /* "nw_ec_alignx.pyx":567 + * def list_vs_alldb(list indices, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, + * dict decs, float thres=1.0, bool localize=False, + * bool wholedb=False, bool oscore=False, int nproc=2): # <<<<<<<<<<<<<< + * """Align all the ESS in the database (seqs) and return the results in form + * of dictionary. The result is equivalent to the upper part the all vs all + */ + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 567, __pyx_L1_error) + __Pyx_INCREF(((PyObject *)Py_False)); + __pyx_k__22 = ((PyBoolObject *)((PyObject *)Py_False)); + __Pyx_GIVEREF((PyObject *)((PyObject *)Py_False)); + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 567, __pyx_L1_error) + __Pyx_INCREF(((PyObject *)Py_False)); + __pyx_k__23 = ((PyBoolObject *)((PyObject *)Py_False)); + __Pyx_GIVEREF((PyObject *)((PyObject *)Py_False)); + + /* "nw_ec_alignx.pyx":566 + * + * def list_vs_alldb(list indices, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, + * dict decs, float thres=1.0, bool localize=False, # <<<<<<<<<<<<<< + * bool wholedb=False, bool oscore=False, int nproc=2): + * """Align all the ESS in the database (seqs) and return the results in form + */ + __pyx_t_3 = PyFloat_FromDouble(((double)1.0)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 566, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 566, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":567 + * def list_vs_alldb(list indices, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, + * dict decs, float thres=1.0, bool localize=False, + * bool wholedb=False, bool oscore=False, int nproc=2): # <<<<<<<<<<<<<< + * """Align all the ESS in the database (seqs) and return the results in form + * of dictionary. The result is equivalent to the upper part the all vs all + */ + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 567, __pyx_L1_error) + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 567, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyInt_From_int(((int)2)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 567, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + + /* "nw_ec_alignx.pyx":565 + * + * + * def list_vs_alldb(list indices, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, # <<<<<<<<<<<<<< + * dict decs, float thres=1.0, bool localize=False, + * bool wholedb=False, bool oscore=False, int nproc=2): + */ + __pyx_t_5 = PyTuple_New(5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 565, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3)) __PYX_ERR(0, 565, __pyx_L1_error); + __Pyx_INCREF(((PyObject *)Py_False)); + __Pyx_GIVEREF(((PyObject *)Py_False)); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, ((PyObject *)Py_False))) __PYX_ERR(0, 565, __pyx_L1_error); + __Pyx_INCREF(((PyObject *)Py_False)); + __Pyx_GIVEREF(((PyObject *)Py_False)); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, ((PyObject *)Py_False))) __PYX_ERR(0, 565, __pyx_L1_error); + __Pyx_INCREF(((PyObject *)Py_False)); + __Pyx_GIVEREF(((PyObject *)Py_False)); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 3, ((PyObject *)Py_False))) __PYX_ERR(0, 565, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 4, __pyx_t_4)) __PYX_ERR(0, 565, __pyx_L1_error); + __pyx_t_3 = 0; + __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_12nw_ec_alignx_17list_vs_alldb, 0, __pyx_n_s_list_vs_alldb, NULL, __pyx_n_s_nw_ec_alignx, __pyx_d, ((PyObject *)__pyx_codeobj__48)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 565, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_t_5); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_list_vs_alldb, __pyx_t_4) < 0) __PYX_ERR(0, 565, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":606 + * + * + * def alldb_shared(seqs, mat, decs, thres=1.0, localize=False, # <<<<<<<<<<<<<< + * nproc=2): + * """Align all the ESS in the database (seqs) and return the results as a + */ + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_12nw_ec_alignx_19alldb_shared, 0, __pyx_n_s_alldb_shared, NULL, __pyx_n_s_nw_ec_alignx, __pyx_d, ((PyObject *)__pyx_codeobj__50)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 606, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_tuple__51); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_alldb_shared, __pyx_t_4) < 0) __PYX_ERR(0, 606, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":636 + * + * + * def _create_global_arr(total): # <<<<<<<<<<<<<< + * """Create shared global array for all vs all comparisson + * + */ + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_12nw_ec_alignx_21_create_global_arr, 0, __pyx_n_s_create_global_arr, NULL, __pyx_n_s_nw_ec_alignx, __pyx_d, ((PyObject *)__pyx_codeobj__53)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 636, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_create_global_arr, __pyx_t_4) < 0) __PYX_ERR(0, 636, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":649 + * + * + * def _fill_mat(ind, seqs, mat, decs, localize, float thres): # <<<<<<<<<<<<<< + * """Fill shared global matrix + * + */ + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_12nw_ec_alignx_23_fill_mat, 0, __pyx_n_s_fill_mat, NULL, __pyx_n_s_nw_ec_alignx, __pyx_d, ((PyObject *)__pyx_codeobj__55)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 649, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_fill_mat, __pyx_t_4) < 0) __PYX_ERR(0, 649, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":673 + * + * + * def store_dict(fname, rdict, indices=None, indices2=None): # <<<<<<<<<<<<<< + * """Stores the scores of the alignments in a tab separated text + * file. The first column corresponds to the first sequence index + */ + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_12nw_ec_alignx_25store_dict, 0, __pyx_n_s_store_dict, NULL, __pyx_n_s_nw_ec_alignx, __pyx_d, ((PyObject *)__pyx_codeobj__57)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 673, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_tuple__58); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_store_dict, __pyx_t_4) < 0) __PYX_ERR(0, 673, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":1 + * # -*- coding: utf-8 -*- # <<<<<<<<<<<<<< + * # + * #------------------------------ + */ + __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_4) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /*--- Wrapped vars code ---*/ + + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + if (__pyx_m) { + if (__pyx_d && stringtab_initialized) { + __Pyx_AddTraceback("init nw_ec_alignx", __pyx_clineno, __pyx_lineno, __pyx_filename); + } + #if !CYTHON_USE_MODULE_STATE + Py_CLEAR(__pyx_m); + #else + Py_DECREF(__pyx_m); + if (pystate_addmodule_run) { + PyObject *tp, *value, *tb; + PyErr_Fetch(&tp, &value, &tb); + PyState_RemoveModule(&__pyx_moduledef); + PyErr_Restore(tp, value, tb); + } + #endif + } else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_ImportError, "init nw_ec_alignx"); + } + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + #if CYTHON_PEP489_MULTI_PHASE_INIT + return (__pyx_m != NULL) ? 0 : -1; + #elif PY_MAJOR_VERSION >= 3 + return __pyx_m; + #else + return; + #endif +} +/* #### Code section: cleanup_globals ### */ +/* #### Code section: cleanup_module ### */ +/* #### Code section: main_method ### */ +/* #### Code section: utility_code_pragmas ### */ +#ifdef _MSC_VER +#pragma warning( push ) +/* Warning 4127: conditional expression is constant + * Cython uses constant conditional expressions to allow in inline functions to be optimized at + * compile-time, so this warning is not useful + */ +#pragma warning( disable : 4127 ) +#endif + + + +/* #### Code section: utility_code_def ### */ + +/* --- Runtime support code --- */ +/* Refnanny */ +#if CYTHON_REFNANNY +static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { + PyObject *m = NULL, *p = NULL; + void *r = NULL; + m = PyImport_ImportModule(modname); + if (!m) goto end; + p = PyObject_GetAttrString(m, "RefNannyAPI"); + if (!p) goto end; + r = PyLong_AsVoidPtr(p); +end: + Py_XDECREF(p); + Py_XDECREF(m); + return (__Pyx_RefNannyAPIStruct *)r; +} +#endif + +/* PyErrExceptionMatches */ +#if CYTHON_FAST_THREAD_STATE +static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; i= 0x030C00A6 + PyObject *current_exception = tstate->current_exception; + if (unlikely(!current_exception)) return 0; + exc_type = (PyObject*) Py_TYPE(current_exception); + if (exc_type == err) return 1; +#else + exc_type = tstate->curexc_type; + if (exc_type == err) return 1; + if (unlikely(!exc_type)) return 0; +#endif + #if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(exc_type); + #endif + if (unlikely(PyTuple_Check(err))) { + result = __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err); + } else { + result = __Pyx_PyErr_GivenExceptionMatches(exc_type, err); + } + #if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(exc_type); + #endif + return result; +} +#endif + +/* PyErrFetchRestore */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { +#if PY_VERSION_HEX >= 0x030C00A6 + PyObject *tmp_value; + assert(type == NULL || (value != NULL && type == (PyObject*) Py_TYPE(value))); + if (value) { + #if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(((PyBaseExceptionObject*) value)->traceback != tb)) + #endif + PyException_SetTraceback(value, tb); + } + tmp_value = tstate->current_exception; + tstate->current_exception = value; + Py_XDECREF(tmp_value); + Py_XDECREF(type); + Py_XDECREF(tb); +#else + PyObject *tmp_type, *tmp_value, *tmp_tb; + tmp_type = tstate->curexc_type; + tmp_value = tstate->curexc_value; + tmp_tb = tstate->curexc_traceback; + tstate->curexc_type = type; + tstate->curexc_value = value; + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +#endif +} +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { +#if PY_VERSION_HEX >= 0x030C00A6 + PyObject* exc_value; + exc_value = tstate->current_exception; + tstate->current_exception = 0; + *value = exc_value; + *type = NULL; + *tb = NULL; + if (exc_value) { + *type = (PyObject*) Py_TYPE(exc_value); + Py_INCREF(*type); + #if CYTHON_COMPILING_IN_CPYTHON + *tb = ((PyBaseExceptionObject*) exc_value)->traceback; + Py_XINCREF(*tb); + #else + *tb = PyException_GetTraceback(exc_value); + #endif + } +#else + *type = tstate->curexc_type; + *value = tstate->curexc_value; + *tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; +#endif +} +#endif + +/* PyObjectGetAttrStr */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro)) + return tp->tp_getattro(obj, attr_name); +#if PY_MAJOR_VERSION < 3 + if (likely(tp->tp_getattr)) + return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); +#endif + return PyObject_GetAttr(obj, attr_name); +} +#endif + +/* PyObjectGetAttrStrNoError */ +#if __PYX_LIMITED_VERSION_HEX < 0x030d00A1 +static void __Pyx_PyObject_GetAttrStr_ClearAttributeError(void) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (likely(__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) + __Pyx_PyErr_Clear(); +} +#endif +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name) { + PyObject *result; +#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1 + (void) PyObject_GetOptionalAttr(obj, attr_name, &result); + return result; +#else +#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_TYPE_SLOTS && PY_VERSION_HEX >= 0x030700B1 + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro == PyObject_GenericGetAttr)) { + return _PyObject_GenericGetAttrWithDict(obj, attr_name, NULL, 1); + } +#endif + result = __Pyx_PyObject_GetAttrStr(obj, attr_name); + if (unlikely(!result)) { + __Pyx_PyObject_GetAttrStr_ClearAttributeError(); + } + return result; +#endif +} + +/* GetBuiltinName */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name) { + PyObject* result = __Pyx_PyObject_GetAttrStrNoError(__pyx_b, name); + if (unlikely(!result) && !PyErr_Occurred()) { + PyErr_Format(PyExc_NameError, +#if PY_MAJOR_VERSION >= 3 + "name '%U' is not defined", name); +#else + "name '%.200s' is not defined", PyString_AS_STRING(name)); +#endif + } + return result; +} + +/* GetTopmostException */ +#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE +static _PyErr_StackItem * +__Pyx_PyErr_GetTopmostException(PyThreadState *tstate) +{ + _PyErr_StackItem *exc_info = tstate->exc_info; + while ((exc_info->exc_value == NULL || exc_info->exc_value == Py_None) && + exc_info->previous_item != NULL) + { + exc_info = exc_info->previous_item; + } + return exc_info; +} +#endif + +/* SaveResetException */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + PyObject *exc_value = exc_info->exc_value; + if (exc_value == NULL || exc_value == Py_None) { + *value = NULL; + *type = NULL; + *tb = NULL; + } else { + *value = exc_value; + Py_INCREF(*value); + *type = (PyObject*) Py_TYPE(exc_value); + Py_INCREF(*type); + *tb = PyException_GetTraceback(exc_value); + } + #elif CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + *type = exc_info->exc_type; + *value = exc_info->exc_value; + *tb = exc_info->exc_traceback; + Py_XINCREF(*type); + Py_XINCREF(*value); + Py_XINCREF(*tb); + #else + *type = tstate->exc_type; + *value = tstate->exc_value; + *tb = tstate->exc_traceback; + Py_XINCREF(*type); + Py_XINCREF(*value); + Py_XINCREF(*tb); + #endif +} +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = tstate->exc_info; + PyObject *tmp_value = exc_info->exc_value; + exc_info->exc_value = value; + Py_XDECREF(tmp_value); + Py_XDECREF(type); + Py_XDECREF(tb); + #else + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = type; + exc_info->exc_value = value; + exc_info->exc_traceback = tb; + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = type; + tstate->exc_value = value; + tstate->exc_traceback = tb; + #endif + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); + #endif +} +#endif + +/* GetException */ +#if CYTHON_FAST_THREAD_STATE +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) +#endif +{ + PyObject *local_type = NULL, *local_value, *local_tb = NULL; +#if CYTHON_FAST_THREAD_STATE + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if PY_VERSION_HEX >= 0x030C00A6 + local_value = tstate->current_exception; + tstate->current_exception = 0; + if (likely(local_value)) { + local_type = (PyObject*) Py_TYPE(local_value); + Py_INCREF(local_type); + local_tb = PyException_GetTraceback(local_value); + } + #else + local_type = tstate->curexc_type; + local_value = tstate->curexc_value; + local_tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; + #endif +#else + PyErr_Fetch(&local_type, &local_value, &local_tb); +#endif + PyErr_NormalizeException(&local_type, &local_value, &local_tb); +#if CYTHON_FAST_THREAD_STATE && PY_VERSION_HEX >= 0x030C00A6 + if (unlikely(tstate->current_exception)) +#elif CYTHON_FAST_THREAD_STATE + if (unlikely(tstate->curexc_type)) +#else + if (unlikely(PyErr_Occurred())) +#endif + goto bad; + #if PY_MAJOR_VERSION >= 3 + if (local_tb) { + if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0)) + goto bad; + } + #endif + Py_XINCREF(local_tb); + Py_XINCREF(local_type); + Py_XINCREF(local_value); + *type = local_type; + *value = local_value; + *tb = local_tb; +#if CYTHON_FAST_THREAD_STATE + #if CYTHON_USE_EXC_INFO_STACK + { + _PyErr_StackItem *exc_info = tstate->exc_info; + #if PY_VERSION_HEX >= 0x030B00a4 + tmp_value = exc_info->exc_value; + exc_info->exc_value = local_value; + tmp_type = NULL; + tmp_tb = NULL; + Py_XDECREF(local_type); + Py_XDECREF(local_tb); + #else + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = local_type; + exc_info->exc_value = local_value; + exc_info->exc_traceback = local_tb; + #endif + } + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = local_type; + tstate->exc_value = local_value; + tstate->exc_traceback = local_tb; + #endif + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +#else + PyErr_SetExcInfo(local_type, local_value, local_tb); +#endif + return 0; +bad: + *type = 0; + *value = 0; + *tb = 0; + Py_XDECREF(local_type); + Py_XDECREF(local_value); + Py_XDECREF(local_tb); + return -1; +} + +/* PyObjectCall */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *result; + ternaryfunc call = Py_TYPE(func)->tp_call; + if (unlikely(!call)) + return PyObject_Call(func, arg, kw); + #if PY_MAJOR_VERSION < 3 + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + #else + if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) + return NULL; + #endif + result = (*call)(func, arg, kw); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* RaiseException */ +#if PY_MAJOR_VERSION < 3 +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + __Pyx_PyThreadState_declare + CYTHON_UNUSED_VAR(cause); + Py_XINCREF(type); + if (!value || value == Py_None) + value = NULL; + else + Py_INCREF(value); + if (!tb || tb == Py_None) + tb = NULL; + else { + Py_INCREF(tb); + if (!PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto raise_error; + } + } + if (PyType_Check(type)) { +#if CYTHON_COMPILING_IN_PYPY + if (!value) { + Py_INCREF(Py_None); + value = Py_None; + } +#endif + PyErr_NormalizeException(&type, &value, &tb); + } else { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto raise_error; + } + value = type; + type = (PyObject*) Py_TYPE(type); + Py_INCREF(type); + if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto raise_error; + } + } + __Pyx_PyThreadState_assign + __Pyx_ErrRestore(type, value, tb); + return; +raise_error: + Py_XDECREF(value); + Py_XDECREF(type); + Py_XDECREF(tb); + return; +} +#else +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + PyObject* owned_instance = NULL; + if (tb == Py_None) { + tb = 0; + } else if (tb && !PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto bad; + } + if (value == Py_None) + value = 0; + if (PyExceptionInstance_Check(type)) { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto bad; + } + value = type; + type = (PyObject*) Py_TYPE(value); + } else if (PyExceptionClass_Check(type)) { + PyObject *instance_class = NULL; + if (value && PyExceptionInstance_Check(value)) { + instance_class = (PyObject*) Py_TYPE(value); + if (instance_class != type) { + int is_subclass = PyObject_IsSubclass(instance_class, type); + if (!is_subclass) { + instance_class = NULL; + } else if (unlikely(is_subclass == -1)) { + goto bad; + } else { + type = instance_class; + } + } + } + if (!instance_class) { + PyObject *args; + if (!value) + args = PyTuple_New(0); + else if (PyTuple_Check(value)) { + Py_INCREF(value); + args = value; + } else + args = PyTuple_Pack(1, value); + if (!args) + goto bad; + owned_instance = PyObject_Call(type, args, NULL); + Py_DECREF(args); + if (!owned_instance) + goto bad; + value = owned_instance; + if (!PyExceptionInstance_Check(value)) { + PyErr_Format(PyExc_TypeError, + "calling %R should have returned an instance of " + "BaseException, not %R", + type, Py_TYPE(value)); + goto bad; + } + } + } else { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto bad; + } + if (cause) { + PyObject *fixed_cause; + if (cause == Py_None) { + fixed_cause = NULL; + } else if (PyExceptionClass_Check(cause)) { + fixed_cause = PyObject_CallObject(cause, NULL); + if (fixed_cause == NULL) + goto bad; + } else if (PyExceptionInstance_Check(cause)) { + fixed_cause = cause; + Py_INCREF(fixed_cause); + } else { + PyErr_SetString(PyExc_TypeError, + "exception causes must derive from " + "BaseException"); + goto bad; + } + PyException_SetCause(value, fixed_cause); + } + PyErr_SetObject(type, value); + if (tb) { + #if PY_VERSION_HEX >= 0x030C00A6 + PyException_SetTraceback(value, tb); + #elif CYTHON_FAST_THREAD_STATE + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject* tmp_tb = tstate->curexc_traceback; + if (tb != tmp_tb) { + Py_INCREF(tb); + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_tb); + } +#else + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb); + Py_INCREF(tb); + PyErr_Restore(tmp_type, tmp_value, tb); + Py_XDECREF(tmp_tb); +#endif + } +bad: + Py_XDECREF(owned_instance); + return; +} +#endif + +/* TupleAndListFromArray */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE void __Pyx_copy_object_array(PyObject *const *CYTHON_RESTRICT src, PyObject** CYTHON_RESTRICT dest, Py_ssize_t length) { + PyObject *v; + Py_ssize_t i; + for (i = 0; i < length; i++) { + v = dest[i] = src[i]; + Py_INCREF(v); + } +} +static CYTHON_INLINE PyObject * +__Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n) +{ + PyObject *res; + if (n <= 0) { + Py_INCREF(__pyx_empty_tuple); + return __pyx_empty_tuple; + } + res = PyTuple_New(n); + if (unlikely(res == NULL)) return NULL; + __Pyx_copy_object_array(src, ((PyTupleObject*)res)->ob_item, n); + return res; +} +static CYTHON_INLINE PyObject * +__Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n) +{ + PyObject *res; + if (n <= 0) { + return PyList_New(0); + } + res = PyList_New(n); + if (unlikely(res == NULL)) return NULL; + __Pyx_copy_object_array(src, ((PyListObject*)res)->ob_item, n); + return res; +} +#endif + +/* BytesEquals */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API + return PyObject_RichCompareBool(s1, s2, equals); +#else + if (s1 == s2) { + return (equals == Py_EQ); + } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { + const char *ps1, *ps2; + Py_ssize_t length = PyBytes_GET_SIZE(s1); + if (length != PyBytes_GET_SIZE(s2)) + return (equals == Py_NE); + ps1 = PyBytes_AS_STRING(s1); + ps2 = PyBytes_AS_STRING(s2); + if (ps1[0] != ps2[0]) { + return (equals == Py_NE); + } else if (length == 1) { + return (equals == Py_EQ); + } else { + int result; +#if CYTHON_USE_UNICODE_INTERNALS && (PY_VERSION_HEX < 0x030B0000) + Py_hash_t hash1, hash2; + hash1 = ((PyBytesObject*)s1)->ob_shash; + hash2 = ((PyBytesObject*)s2)->ob_shash; + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + return (equals == Py_NE); + } +#endif + result = memcmp(ps1, ps2, (size_t)length); + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) { + return (equals == Py_NE); + } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) { + return (equals == Py_NE); + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; + } +#endif +} + +/* UnicodeEquals */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API + return PyObject_RichCompareBool(s1, s2, equals); +#else +#if PY_MAJOR_VERSION < 3 + PyObject* owned_ref = NULL; +#endif + int s1_is_unicode, s2_is_unicode; + if (s1 == s2) { + goto return_eq; + } + s1_is_unicode = PyUnicode_CheckExact(s1); + s2_is_unicode = PyUnicode_CheckExact(s2); +#if PY_MAJOR_VERSION < 3 + if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) { + owned_ref = PyUnicode_FromObject(s2); + if (unlikely(!owned_ref)) + return -1; + s2 = owned_ref; + s2_is_unicode = 1; + } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) { + owned_ref = PyUnicode_FromObject(s1); + if (unlikely(!owned_ref)) + return -1; + s1 = owned_ref; + s1_is_unicode = 1; + } else if (((!s2_is_unicode) & (!s1_is_unicode))) { + return __Pyx_PyBytes_Equals(s1, s2, equals); + } +#endif + if (s1_is_unicode & s2_is_unicode) { + Py_ssize_t length; + int kind; + void *data1, *data2; + if (unlikely(__Pyx_PyUnicode_READY(s1) < 0) || unlikely(__Pyx_PyUnicode_READY(s2) < 0)) + return -1; + length = __Pyx_PyUnicode_GET_LENGTH(s1); + if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) { + goto return_ne; + } +#if CYTHON_USE_UNICODE_INTERNALS + { + Py_hash_t hash1, hash2; + #if CYTHON_PEP393_ENABLED + hash1 = ((PyASCIIObject*)s1)->hash; + hash2 = ((PyASCIIObject*)s2)->hash; + #else + hash1 = ((PyUnicodeObject*)s1)->hash; + hash2 = ((PyUnicodeObject*)s2)->hash; + #endif + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + goto return_ne; + } + } +#endif + kind = __Pyx_PyUnicode_KIND(s1); + if (kind != __Pyx_PyUnicode_KIND(s2)) { + goto return_ne; + } + data1 = __Pyx_PyUnicode_DATA(s1); + data2 = __Pyx_PyUnicode_DATA(s2); + if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) { + goto return_ne; + } else if (length == 1) { + goto return_eq; + } else { + int result = memcmp(data1, data2, (size_t)(length * kind)); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & s2_is_unicode) { + goto return_ne; + } else if ((s2 == Py_None) & s1_is_unicode) { + goto return_ne; + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; + } +return_eq: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ); +return_ne: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_NE); +#endif +} + +/* fastcall */ +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s) +{ + Py_ssize_t i, n = PyTuple_GET_SIZE(kwnames); + for (i = 0; i < n; i++) + { + if (s == PyTuple_GET_ITEM(kwnames, i)) return kwvalues[i]; + } + for (i = 0; i < n; i++) + { + int eq = __Pyx_PyUnicode_Equals(s, PyTuple_GET_ITEM(kwnames, i), Py_EQ); + if (unlikely(eq != 0)) { + if (unlikely(eq < 0)) return NULL; + return kwvalues[i]; + } + } + return NULL; +} +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 +CYTHON_UNUSED static PyObject *__Pyx_KwargsAsDict_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues) { + Py_ssize_t i, nkwargs = PyTuple_GET_SIZE(kwnames); + PyObject *dict; + dict = PyDict_New(); + if (unlikely(!dict)) + return NULL; + for (i=0; i= 3 + "%s() got multiple values for keyword argument '%U'", func_name, kw_name); + #else + "%s() got multiple values for keyword argument '%s'", func_name, + PyString_AsString(kw_name)); + #endif +} + +/* ParseKeywords */ +static int __Pyx_ParseOptionalKeywords( + PyObject *kwds, + PyObject *const *kwvalues, + PyObject **argnames[], + PyObject *kwds2, + PyObject *values[], + Py_ssize_t num_pos_args, + const char* function_name) +{ + PyObject *key = 0, *value = 0; + Py_ssize_t pos = 0; + PyObject*** name; + PyObject*** first_kw_arg = argnames + num_pos_args; + int kwds_is_tuple = CYTHON_METH_FASTCALL && likely(PyTuple_Check(kwds)); + while (1) { + Py_XDECREF(key); key = NULL; + Py_XDECREF(value); value = NULL; + if (kwds_is_tuple) { + Py_ssize_t size; +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(kwds); +#else + size = PyTuple_Size(kwds); + if (size < 0) goto bad; +#endif + if (pos >= size) break; +#if CYTHON_AVOID_BORROWED_REFS + key = __Pyx_PySequence_ITEM(kwds, pos); + if (!key) goto bad; +#elif CYTHON_ASSUME_SAFE_MACROS + key = PyTuple_GET_ITEM(kwds, pos); +#else + key = PyTuple_GetItem(kwds, pos); + if (!key) goto bad; +#endif + value = kwvalues[pos]; + pos++; + } + else + { + if (!PyDict_Next(kwds, &pos, &key, &value)) break; +#if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(key); +#endif + } + name = first_kw_arg; + while (*name && (**name != key)) name++; + if (*name) { + values[name-argnames] = value; +#if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(value); + Py_DECREF(key); +#endif + key = NULL; + value = NULL; + continue; + } +#if !CYTHON_AVOID_BORROWED_REFS + Py_INCREF(key); +#endif + Py_INCREF(value); + name = first_kw_arg; + #if PY_MAJOR_VERSION < 3 + if (likely(PyString_Check(key))) { + while (*name) { + if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) + && _PyString_Eq(**name, key)) { + values[name-argnames] = value; +#if CYTHON_AVOID_BORROWED_REFS + value = NULL; +#endif + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + if ((**argname == key) || ( + (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) + && _PyString_Eq(**argname, key))) { + goto arg_passed_twice; + } + argname++; + } + } + } else + #endif + if (likely(PyUnicode_Check(key))) { + while (*name) { + int cmp = ( + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**name) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**name, key) + ); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) { + values[name-argnames] = value; +#if CYTHON_AVOID_BORROWED_REFS + value = NULL; +#endif + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + int cmp = (**argname == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**argname) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**argname, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) goto arg_passed_twice; + argname++; + } + } + } else + goto invalid_keyword_type; + if (kwds2) { + if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; + } else { + goto invalid_keyword; + } + } + Py_XDECREF(key); + Py_XDECREF(value); + return 0; +arg_passed_twice: + __Pyx_RaiseDoubleKeywordsError(function_name, key); + goto bad; +invalid_keyword_type: + PyErr_Format(PyExc_TypeError, + "%.200s() keywords must be strings", function_name); + goto bad; +invalid_keyword: + #if PY_MAJOR_VERSION < 3 + PyErr_Format(PyExc_TypeError, + "%.200s() got an unexpected keyword argument '%.200s'", + function_name, PyString_AsString(key)); + #else + PyErr_Format(PyExc_TypeError, + "%s() got an unexpected keyword argument '%U'", + function_name, key); + #endif +bad: + Py_XDECREF(key); + Py_XDECREF(value); + return -1; +} + +/* ArgTypeTest */ +static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact) +{ + __Pyx_TypeName type_name; + __Pyx_TypeName obj_type_name; + if (unlikely(!type)) { + PyErr_SetString(PyExc_SystemError, "Missing type object"); + return 0; + } + else if (exact) { + #if PY_MAJOR_VERSION == 2 + if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1; + #endif + } + else { + if (likely(__Pyx_TypeCheck(obj, type))) return 1; + } + type_name = __Pyx_PyType_GetName(type); + obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, + "Argument '%.200s' has incorrect type (expected " __Pyx_FMT_TYPENAME + ", got " __Pyx_FMT_TYPENAME ")", name, type_name, obj_type_name); + __Pyx_DECREF_TypeName(type_name); + __Pyx_DECREF_TypeName(obj_type_name); + return 0; +} + +/* IsLittleEndian */ +static CYTHON_INLINE int __Pyx_Is_Little_Endian(void) +{ + union { + uint32_t u32; + uint8_t u8[4]; + } S; + S.u32 = 0x01020304; + return S.u8[0] == 4; +} + +/* BufferFormatCheck */ +static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx, + __Pyx_BufFmt_StackElem* stack, + __Pyx_TypeInfo* type) { + stack[0].field = &ctx->root; + stack[0].parent_offset = 0; + ctx->root.type = type; + ctx->root.name = "buffer dtype"; + ctx->root.offset = 0; + ctx->head = stack; + ctx->head->field = &ctx->root; + ctx->fmt_offset = 0; + ctx->head->parent_offset = 0; + ctx->new_packmode = '@'; + ctx->enc_packmode = '@'; + ctx->new_count = 1; + ctx->enc_count = 0; + ctx->enc_type = 0; + ctx->is_complex = 0; + ctx->is_valid_array = 0; + ctx->struct_alignment = 0; + while (type->typegroup == 'S') { + ++ctx->head; + ctx->head->field = type->fields; + ctx->head->parent_offset = 0; + type = type->fields->type; + } +} +static int __Pyx_BufFmt_ParseNumber(const char** ts) { + int count; + const char* t = *ts; + if (*t < '0' || *t > '9') { + return -1; + } else { + count = *t++ - '0'; + while (*t >= '0' && *t <= '9') { + count *= 10; + count += *t++ - '0'; + } + } + *ts = t; + return count; +} +static int __Pyx_BufFmt_ExpectNumber(const char **ts) { + int number = __Pyx_BufFmt_ParseNumber(ts); + if (number == -1) + PyErr_Format(PyExc_ValueError,\ + "Does not understand character buffer dtype format string ('%c')", **ts); + return number; +} +static void __Pyx_BufFmt_RaiseUnexpectedChar(char ch) { + PyErr_Format(PyExc_ValueError, + "Unexpected format string character: '%c'", ch); +} +static const char* __Pyx_BufFmt_DescribeTypeChar(char ch, int is_complex) { + switch (ch) { + case '?': return "'bool'"; + case 'c': return "'char'"; + case 'b': return "'signed char'"; + case 'B': return "'unsigned char'"; + case 'h': return "'short'"; + case 'H': return "'unsigned short'"; + case 'i': return "'int'"; + case 'I': return "'unsigned int'"; + case 'l': return "'long'"; + case 'L': return "'unsigned long'"; + case 'q': return "'long long'"; + case 'Q': return "'unsigned long long'"; + case 'f': return (is_complex ? "'complex float'" : "'float'"); + case 'd': return (is_complex ? "'complex double'" : "'double'"); + case 'g': return (is_complex ? "'complex long double'" : "'long double'"); + case 'T': return "a struct"; + case 'O': return "Python object"; + case 'P': return "a pointer"; + case 's': case 'p': return "a string"; + case 0: return "end"; + default: return "unparsable format string"; + } +} +static size_t __Pyx_BufFmt_TypeCharToStandardSize(char ch, int is_complex) { + switch (ch) { + case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return 2; + case 'i': case 'I': case 'l': case 'L': return 4; + case 'q': case 'Q': return 8; + case 'f': return (is_complex ? 8 : 4); + case 'd': return (is_complex ? 16 : 8); + case 'g': { + PyErr_SetString(PyExc_ValueError, "Python does not define a standard format string size for long double ('g').."); + return 0; + } + case 'O': case 'P': return sizeof(void*); + default: + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } +} +static size_t __Pyx_BufFmt_TypeCharToNativeSize(char ch, int is_complex) { + switch (ch) { + case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return sizeof(short); + case 'i': case 'I': return sizeof(int); + case 'l': case 'L': return sizeof(long); + #ifdef HAVE_LONG_LONG + case 'q': case 'Q': return sizeof(PY_LONG_LONG); + #endif + case 'f': return sizeof(float) * (is_complex ? 2 : 1); + case 'd': return sizeof(double) * (is_complex ? 2 : 1); + case 'g': return sizeof(long double) * (is_complex ? 2 : 1); + case 'O': case 'P': return sizeof(void*); + default: { + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } + } +} +typedef struct { char c; short x; } __Pyx_st_short; +typedef struct { char c; int x; } __Pyx_st_int; +typedef struct { char c; long x; } __Pyx_st_long; +typedef struct { char c; float x; } __Pyx_st_float; +typedef struct { char c; double x; } __Pyx_st_double; +typedef struct { char c; long double x; } __Pyx_st_longdouble; +typedef struct { char c; void *x; } __Pyx_st_void_p; +#ifdef HAVE_LONG_LONG +typedef struct { char c; PY_LONG_LONG x; } __Pyx_st_longlong; +#endif +static size_t __Pyx_BufFmt_TypeCharToAlignment(char ch, int is_complex) { + CYTHON_UNUSED_VAR(is_complex); + switch (ch) { + case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return sizeof(__Pyx_st_short) - sizeof(short); + case 'i': case 'I': return sizeof(__Pyx_st_int) - sizeof(int); + case 'l': case 'L': return sizeof(__Pyx_st_long) - sizeof(long); +#ifdef HAVE_LONG_LONG + case 'q': case 'Q': return sizeof(__Pyx_st_longlong) - sizeof(PY_LONG_LONG); +#endif + case 'f': return sizeof(__Pyx_st_float) - sizeof(float); + case 'd': return sizeof(__Pyx_st_double) - sizeof(double); + case 'g': return sizeof(__Pyx_st_longdouble) - sizeof(long double); + case 'P': case 'O': return sizeof(__Pyx_st_void_p) - sizeof(void*); + default: + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } +} +/* These are for computing the padding at the end of the struct to align + on the first member of the struct. This will probably the same as above, + but we don't have any guarantees. + */ +typedef struct { short x; char c; } __Pyx_pad_short; +typedef struct { int x; char c; } __Pyx_pad_int; +typedef struct { long x; char c; } __Pyx_pad_long; +typedef struct { float x; char c; } __Pyx_pad_float; +typedef struct { double x; char c; } __Pyx_pad_double; +typedef struct { long double x; char c; } __Pyx_pad_longdouble; +typedef struct { void *x; char c; } __Pyx_pad_void_p; +#ifdef HAVE_LONG_LONG +typedef struct { PY_LONG_LONG x; char c; } __Pyx_pad_longlong; +#endif +static size_t __Pyx_BufFmt_TypeCharToPadding(char ch, int is_complex) { + CYTHON_UNUSED_VAR(is_complex); + switch (ch) { + case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return sizeof(__Pyx_pad_short) - sizeof(short); + case 'i': case 'I': return sizeof(__Pyx_pad_int) - sizeof(int); + case 'l': case 'L': return sizeof(__Pyx_pad_long) - sizeof(long); +#ifdef HAVE_LONG_LONG + case 'q': case 'Q': return sizeof(__Pyx_pad_longlong) - sizeof(PY_LONG_LONG); +#endif + case 'f': return sizeof(__Pyx_pad_float) - sizeof(float); + case 'd': return sizeof(__Pyx_pad_double) - sizeof(double); + case 'g': return sizeof(__Pyx_pad_longdouble) - sizeof(long double); + case 'P': case 'O': return sizeof(__Pyx_pad_void_p) - sizeof(void*); + default: + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } +} +static char __Pyx_BufFmt_TypeCharToGroup(char ch, int is_complex) { + switch (ch) { + case 'c': + return 'H'; + case 'b': case 'h': case 'i': + case 'l': case 'q': case 's': case 'p': + return 'I'; + case '?': case 'B': case 'H': case 'I': case 'L': case 'Q': + return 'U'; + case 'f': case 'd': case 'g': + return (is_complex ? 'C' : 'R'); + case 'O': + return 'O'; + case 'P': + return 'P'; + default: { + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } + } +} +static void __Pyx_BufFmt_RaiseExpected(__Pyx_BufFmt_Context* ctx) { + if (ctx->head == NULL || ctx->head->field == &ctx->root) { + const char* expected; + const char* quote; + if (ctx->head == NULL) { + expected = "end"; + quote = ""; + } else { + expected = ctx->head->field->type->name; + quote = "'"; + } + PyErr_Format(PyExc_ValueError, + "Buffer dtype mismatch, expected %s%s%s but got %s", + quote, expected, quote, + __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex)); + } else { + __Pyx_StructField* field = ctx->head->field; + __Pyx_StructField* parent = (ctx->head - 1)->field; + PyErr_Format(PyExc_ValueError, + "Buffer dtype mismatch, expected '%s' but got %s in '%s.%s'", + field->type->name, __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex), + parent->type->name, field->name); + } +} +static int __Pyx_BufFmt_ProcessTypeChunk(__Pyx_BufFmt_Context* ctx) { + char group; + size_t size, offset, arraysize = 1; + if (ctx->enc_type == 0) return 0; + if (ctx->head->field->type->arraysize[0]) { + int i, ndim = 0; + if (ctx->enc_type == 's' || ctx->enc_type == 'p') { + ctx->is_valid_array = ctx->head->field->type->ndim == 1; + ndim = 1; + if (ctx->enc_count != ctx->head->field->type->arraysize[0]) { + PyErr_Format(PyExc_ValueError, + "Expected a dimension of size %zu, got %zu", + ctx->head->field->type->arraysize[0], ctx->enc_count); + return -1; + } + } + if (!ctx->is_valid_array) { + PyErr_Format(PyExc_ValueError, "Expected %d dimensions, got %d", + ctx->head->field->type->ndim, ndim); + return -1; + } + for (i = 0; i < ctx->head->field->type->ndim; i++) { + arraysize *= ctx->head->field->type->arraysize[i]; + } + ctx->is_valid_array = 0; + ctx->enc_count = 1; + } + group = __Pyx_BufFmt_TypeCharToGroup(ctx->enc_type, ctx->is_complex); + do { + __Pyx_StructField* field = ctx->head->field; + __Pyx_TypeInfo* type = field->type; + if (ctx->enc_packmode == '@' || ctx->enc_packmode == '^') { + size = __Pyx_BufFmt_TypeCharToNativeSize(ctx->enc_type, ctx->is_complex); + } else { + size = __Pyx_BufFmt_TypeCharToStandardSize(ctx->enc_type, ctx->is_complex); + } + if (ctx->enc_packmode == '@') { + size_t align_at = __Pyx_BufFmt_TypeCharToAlignment(ctx->enc_type, ctx->is_complex); + size_t align_mod_offset; + if (align_at == 0) return -1; + align_mod_offset = ctx->fmt_offset % align_at; + if (align_mod_offset > 0) ctx->fmt_offset += align_at - align_mod_offset; + if (ctx->struct_alignment == 0) + ctx->struct_alignment = __Pyx_BufFmt_TypeCharToPadding(ctx->enc_type, + ctx->is_complex); + } + if (type->size != size || type->typegroup != group) { + if (type->typegroup == 'C' && type->fields != NULL) { + size_t parent_offset = ctx->head->parent_offset + field->offset; + ++ctx->head; + ctx->head->field = type->fields; + ctx->head->parent_offset = parent_offset; + continue; + } + if ((type->typegroup == 'H' || group == 'H') && type->size == size) { + } else { + __Pyx_BufFmt_RaiseExpected(ctx); + return -1; + } + } + offset = ctx->head->parent_offset + field->offset; + if (ctx->fmt_offset != offset) { + PyErr_Format(PyExc_ValueError, + "Buffer dtype mismatch; next field is at offset %" CYTHON_FORMAT_SSIZE_T "d but %" CYTHON_FORMAT_SSIZE_T "d expected", + (Py_ssize_t)ctx->fmt_offset, (Py_ssize_t)offset); + return -1; + } + ctx->fmt_offset += size; + if (arraysize) + ctx->fmt_offset += (arraysize - 1) * size; + --ctx->enc_count; + while (1) { + if (field == &ctx->root) { + ctx->head = NULL; + if (ctx->enc_count != 0) { + __Pyx_BufFmt_RaiseExpected(ctx); + return -1; + } + break; + } + ctx->head->field = ++field; + if (field->type == NULL) { + --ctx->head; + field = ctx->head->field; + continue; + } else if (field->type->typegroup == 'S') { + size_t parent_offset = ctx->head->parent_offset + field->offset; + if (field->type->fields->type == NULL) continue; + field = field->type->fields; + ++ctx->head; + ctx->head->field = field; + ctx->head->parent_offset = parent_offset; + break; + } else { + break; + } + } + } while (ctx->enc_count); + ctx->enc_type = 0; + ctx->is_complex = 0; + return 0; +} +static int +__pyx_buffmt_parse_array(__Pyx_BufFmt_Context* ctx, const char** tsp) +{ + const char *ts = *tsp; + int i = 0, number, ndim; + ++ts; + if (ctx->new_count != 1) { + PyErr_SetString(PyExc_ValueError, + "Cannot handle repeated arrays in format string"); + return -1; + } + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return -1; + ndim = ctx->head->field->type->ndim; + while (*ts && *ts != ')') { + switch (*ts) { + case ' ': case '\f': case '\r': case '\n': case '\t': case '\v': continue; + default: break; + } + number = __Pyx_BufFmt_ExpectNumber(&ts); + if (number == -1) return -1; + if (i < ndim && (size_t) number != ctx->head->field->type->arraysize[i]) { + PyErr_Format(PyExc_ValueError, + "Expected a dimension of size %zu, got %d", + ctx->head->field->type->arraysize[i], number); + return -1; + } + if (*ts != ',' && *ts != ')') { + PyErr_Format(PyExc_ValueError, + "Expected a comma in format string, got '%c'", *ts); + return -1; + } + if (*ts == ',') ts++; + i++; + } + if (i != ndim) { + PyErr_Format(PyExc_ValueError, "Expected %d dimension(s), got %d", + ctx->head->field->type->ndim, i); + return -1; + } + if (!*ts) { + PyErr_SetString(PyExc_ValueError, + "Unexpected end of format string, expected ')'"); + return -1; + } + ctx->is_valid_array = 1; + ctx->new_count = 1; + *tsp = ++ts; + return 0; +} +static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts) { + int got_Z = 0; + while (1) { + switch(*ts) { + case 0: + if (ctx->enc_type != 0 && ctx->head == NULL) { + __Pyx_BufFmt_RaiseExpected(ctx); + return NULL; + } + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + if (ctx->head != NULL) { + __Pyx_BufFmt_RaiseExpected(ctx); + return NULL; + } + return ts; + case ' ': + case '\r': + case '\n': + ++ts; + break; + case '<': + if (!__Pyx_Is_Little_Endian()) { + PyErr_SetString(PyExc_ValueError, "Little-endian buffer not supported on big-endian compiler"); + return NULL; + } + ctx->new_packmode = '='; + ++ts; + break; + case '>': + case '!': + if (__Pyx_Is_Little_Endian()) { + PyErr_SetString(PyExc_ValueError, "Big-endian buffer not supported on little-endian compiler"); + return NULL; + } + ctx->new_packmode = '='; + ++ts; + break; + case '=': + case '@': + case '^': + ctx->new_packmode = *ts++; + break; + case 'T': + { + const char* ts_after_sub; + size_t i, struct_count = ctx->new_count; + size_t struct_alignment = ctx->struct_alignment; + ctx->new_count = 1; + ++ts; + if (*ts != '{') { + PyErr_SetString(PyExc_ValueError, "Buffer acquisition: Expected '{' after 'T'"); + return NULL; + } + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->enc_type = 0; + ctx->enc_count = 0; + ctx->struct_alignment = 0; + ++ts; + ts_after_sub = ts; + for (i = 0; i != struct_count; ++i) { + ts_after_sub = __Pyx_BufFmt_CheckString(ctx, ts); + if (!ts_after_sub) return NULL; + } + ts = ts_after_sub; + if (struct_alignment) ctx->struct_alignment = struct_alignment; + } + break; + case '}': + { + size_t alignment = ctx->struct_alignment; + ++ts; + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->enc_type = 0; + if (alignment && ctx->fmt_offset % alignment) { + ctx->fmt_offset += alignment - (ctx->fmt_offset % alignment); + } + } + return ts; + case 'x': + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->fmt_offset += ctx->new_count; + ctx->new_count = 1; + ctx->enc_count = 0; + ctx->enc_type = 0; + ctx->enc_packmode = ctx->new_packmode; + ++ts; + break; + case 'Z': + got_Z = 1; + ++ts; + if (*ts != 'f' && *ts != 'd' && *ts != 'g') { + __Pyx_BufFmt_RaiseUnexpectedChar('Z'); + return NULL; + } + CYTHON_FALLTHROUGH; + case '?': case 'c': case 'b': case 'B': case 'h': case 'H': case 'i': case 'I': + case 'l': case 'L': case 'q': case 'Q': + case 'f': case 'd': case 'g': + case 'O': case 'p': + if ((ctx->enc_type == *ts) && (got_Z == ctx->is_complex) && + (ctx->enc_packmode == ctx->new_packmode) && (!ctx->is_valid_array)) { + ctx->enc_count += ctx->new_count; + ctx->new_count = 1; + got_Z = 0; + ++ts; + break; + } + CYTHON_FALLTHROUGH; + case 's': + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->enc_count = ctx->new_count; + ctx->enc_packmode = ctx->new_packmode; + ctx->enc_type = *ts; + ctx->is_complex = got_Z; + ++ts; + ctx->new_count = 1; + got_Z = 0; + break; + case ':': + ++ts; + while(*ts != ':') ++ts; + ++ts; + break; + case '(': + if (__pyx_buffmt_parse_array(ctx, &ts) < 0) return NULL; + break; + default: + { + int number = __Pyx_BufFmt_ExpectNumber(&ts); + if (number == -1) return NULL; + ctx->new_count = (size_t)number; + } + } + } +} + +/* BufferGetAndValidate */ + static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info) { + if (unlikely(info->buf == NULL)) return; + if (info->suboffsets == __Pyx_minusones) info->suboffsets = NULL; + __Pyx_ReleaseBuffer(info); +} +static void __Pyx_ZeroBuffer(Py_buffer* buf) { + buf->buf = NULL; + buf->obj = NULL; + buf->strides = __Pyx_zeros; + buf->shape = __Pyx_zeros; + buf->suboffsets = __Pyx_minusones; +} +static int __Pyx__GetBufferAndValidate( + Py_buffer* buf, PyObject* obj, __Pyx_TypeInfo* dtype, int flags, + int nd, int cast, __Pyx_BufFmt_StackElem* stack) +{ + buf->buf = NULL; + if (unlikely(__Pyx_GetBuffer(obj, buf, flags) == -1)) { + __Pyx_ZeroBuffer(buf); + return -1; + } + if (unlikely(buf->ndim != nd)) { + PyErr_Format(PyExc_ValueError, + "Buffer has wrong number of dimensions (expected %d, got %d)", + nd, buf->ndim); + goto fail; + } + if (!cast) { + __Pyx_BufFmt_Context ctx; + __Pyx_BufFmt_Init(&ctx, stack, dtype); + if (!__Pyx_BufFmt_CheckString(&ctx, buf->format)) goto fail; + } + if (unlikely((size_t)buf->itemsize != dtype->size)) { + PyErr_Format(PyExc_ValueError, + "Item size of buffer (%" CYTHON_FORMAT_SSIZE_T "d byte%s) does not match size of '%s' (%" CYTHON_FORMAT_SSIZE_T "d byte%s)", + buf->itemsize, (buf->itemsize > 1) ? "s" : "", + dtype->name, (Py_ssize_t)dtype->size, (dtype->size > 1) ? "s" : ""); + goto fail; + } + if (buf->suboffsets == NULL) buf->suboffsets = __Pyx_minusones; + return 0; +fail:; + __Pyx_SafeReleaseBuffer(buf); + return -1; +} + +/* PyDictVersioning */ + #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0; +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) { + PyObject **dictptr = NULL; + Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset; + if (offset) { +#if CYTHON_COMPILING_IN_CPYTHON + dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj); +#else + dictptr = _PyObject_GetDictPtr(obj); +#endif + } + return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0; +} +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict))) + return 0; + return obj_dict_version == __Pyx_get_object_dict_version(obj); +} +#endif + +/* GetModuleGlobalName */ + #if CYTHON_USE_DICT_VERSIONS +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value) +#else +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name) +#endif +{ + PyObject *result; +#if !CYTHON_AVOID_BORROWED_REFS +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && PY_VERSION_HEX < 0x030d0000 + result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } else if (unlikely(PyErr_Occurred())) { + return NULL; + } +#elif CYTHON_COMPILING_IN_LIMITED_API + if (unlikely(!__pyx_m)) { + return NULL; + } + result = PyObject_GetAttr(__pyx_m, name); + if (likely(result)) { + return result; + } +#else + result = PyDict_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } +#endif +#else + result = PyObject_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } + PyErr_Clear(); +#endif + return __Pyx_GetBuiltinName(name); +} + +/* PyFunctionFastCall */ + #if CYTHON_FAST_PYCALL && !CYTHON_VECTORCALL +static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na, + PyObject *globals) { + PyFrameObject *f; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject **fastlocals; + Py_ssize_t i; + PyObject *result; + assert(globals != NULL); + /* XXX Perhaps we should create a specialized + PyFrame_New() that doesn't take locals, but does + take builtins without sanity checking them. + */ + assert(tstate != NULL); + f = PyFrame_New(tstate, co, globals, NULL); + if (f == NULL) { + return NULL; + } + fastlocals = __Pyx_PyFrame_GetLocalsplus(f); + for (i = 0; i < na; i++) { + Py_INCREF(*args); + fastlocals[i] = *args++; + } + result = PyEval_EvalFrameEx(f,0); + ++tstate->recursion_depth; + Py_DECREF(f); + --tstate->recursion_depth; + return result; +} +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) { + PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); + PyObject *globals = PyFunction_GET_GLOBALS(func); + PyObject *argdefs = PyFunction_GET_DEFAULTS(func); + PyObject *closure; +#if PY_MAJOR_VERSION >= 3 + PyObject *kwdefs; +#endif + PyObject *kwtuple, **k; + PyObject **d; + Py_ssize_t nd; + Py_ssize_t nk; + PyObject *result; + assert(kwargs == NULL || PyDict_Check(kwargs)); + nk = kwargs ? PyDict_Size(kwargs) : 0; + #if PY_MAJOR_VERSION < 3 + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) { + return NULL; + } + #else + if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) { + return NULL; + } + #endif + if ( +#if PY_MAJOR_VERSION >= 3 + co->co_kwonlyargcount == 0 && +#endif + likely(kwargs == NULL || nk == 0) && + co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) { + if (argdefs == NULL && co->co_argcount == nargs) { + result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals); + goto done; + } + else if (nargs == 0 && argdefs != NULL + && co->co_argcount == Py_SIZE(argdefs)) { + /* function called with no arguments, but all parameters have + a default value: use default values as arguments .*/ + args = &PyTuple_GET_ITEM(argdefs, 0); + result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals); + goto done; + } + } + if (kwargs != NULL) { + Py_ssize_t pos, i; + kwtuple = PyTuple_New(2 * nk); + if (kwtuple == NULL) { + result = NULL; + goto done; + } + k = &PyTuple_GET_ITEM(kwtuple, 0); + pos = i = 0; + while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { + Py_INCREF(k[i]); + Py_INCREF(k[i+1]); + i += 2; + } + nk = i / 2; + } + else { + kwtuple = NULL; + k = NULL; + } + closure = PyFunction_GET_CLOSURE(func); +#if PY_MAJOR_VERSION >= 3 + kwdefs = PyFunction_GET_KW_DEFAULTS(func); +#endif + if (argdefs != NULL) { + d = &PyTuple_GET_ITEM(argdefs, 0); + nd = Py_SIZE(argdefs); + } + else { + d = NULL; + nd = 0; + } +#if PY_MAJOR_VERSION >= 3 + result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, kwdefs, closure); +#else + result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, closure); +#endif + Py_XDECREF(kwtuple); +done: + Py_LeaveRecursiveCall(); + return result; +} +#endif + +/* PyObjectCallMethO */ + #if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) { + PyObject *self, *result; + PyCFunction cfunc; + cfunc = __Pyx_CyOrPyCFunction_GET_FUNCTION(func); + self = __Pyx_CyOrPyCFunction_GET_SELF(func); + #if PY_MAJOR_VERSION < 3 + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + #else + if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) + return NULL; + #endif + result = cfunc(self, arg); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectFastCall */ + #if PY_VERSION_HEX < 0x03090000 || CYTHON_COMPILING_IN_LIMITED_API +static PyObject* __Pyx_PyObject_FastCall_fallback(PyObject *func, PyObject **args, size_t nargs, PyObject *kwargs) { + PyObject *argstuple; + PyObject *result = 0; + size_t i; + argstuple = PyTuple_New((Py_ssize_t)nargs); + if (unlikely(!argstuple)) return NULL; + for (i = 0; i < nargs; i++) { + Py_INCREF(args[i]); + if (__Pyx_PyTuple_SET_ITEM(argstuple, (Py_ssize_t)i, args[i]) < 0) goto bad; + } + result = __Pyx_PyObject_Call(func, argstuple, kwargs); + bad: + Py_DECREF(argstuple); + return result; +} +#endif +static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject **args, size_t _nargs, PyObject *kwargs) { + Py_ssize_t nargs = __Pyx_PyVectorcall_NARGS(_nargs); +#if CYTHON_COMPILING_IN_CPYTHON + if (nargs == 0 && kwargs == NULL) { + if (__Pyx_CyOrPyCFunction_Check(func) && likely( __Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_NOARGS)) + return __Pyx_PyObject_CallMethO(func, NULL); + } + else if (nargs == 1 && kwargs == NULL) { + if (__Pyx_CyOrPyCFunction_Check(func) && likely( __Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_O)) + return __Pyx_PyObject_CallMethO(func, args[0]); + } +#endif + #if PY_VERSION_HEX < 0x030800B1 + #if CYTHON_FAST_PYCCALL + if (PyCFunction_Check(func)) { + if (kwargs) { + return _PyCFunction_FastCallDict(func, args, nargs, kwargs); + } else { + return _PyCFunction_FastCallKeywords(func, args, nargs, NULL); + } + } + #if PY_VERSION_HEX >= 0x030700A1 + if (!kwargs && __Pyx_IS_TYPE(func, &PyMethodDescr_Type)) { + return _PyMethodDescr_FastCallKeywords(func, args, nargs, NULL); + } + #endif + #endif + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(func)) { + return __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs); + } + #endif + #endif + if (kwargs == NULL) { + #if CYTHON_VECTORCALL + #if PY_VERSION_HEX < 0x03090000 + vectorcallfunc f = _PyVectorcall_Function(func); + #else + vectorcallfunc f = PyVectorcall_Function(func); + #endif + if (f) { + return f(func, args, (size_t)nargs, NULL); + } + #elif defined(__Pyx_CyFunction_USED) && CYTHON_BACKPORT_VECTORCALL + if (__Pyx_CyFunction_CheckExact(func)) { + __pyx_vectorcallfunc f = __Pyx_CyFunction_func_vectorcall(func); + if (f) return f(func, args, (size_t)nargs, NULL); + } + #endif + } + if (nargs == 0) { + return __Pyx_PyObject_Call(func, __pyx_empty_tuple, kwargs); + } + #if PY_VERSION_HEX >= 0x03090000 && !CYTHON_COMPILING_IN_LIMITED_API + return PyObject_VectorcallDict(func, args, (size_t)nargs, kwargs); + #else + return __Pyx_PyObject_FastCall_fallback(func, args, (size_t)nargs, kwargs); + #endif +} + +/* ExtTypeTest */ + static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) { + __Pyx_TypeName obj_type_name; + __Pyx_TypeName type_name; + if (unlikely(!type)) { + PyErr_SetString(PyExc_SystemError, "Missing type object"); + return 0; + } + if (likely(__Pyx_TypeCheck(obj, type))) + return 1; + obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + type_name = __Pyx_PyType_GetName(type); + PyErr_Format(PyExc_TypeError, + "Cannot convert " __Pyx_FMT_TYPENAME " to " __Pyx_FMT_TYPENAME, + obj_type_name, type_name); + __Pyx_DECREF_TypeName(obj_type_name); + __Pyx_DECREF_TypeName(type_name); + return 0; +} + +/* DictGetItem */ + #if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY +static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) { + PyObject *value; + value = PyDict_GetItemWithError(d, key); + if (unlikely(!value)) { + if (!PyErr_Occurred()) { + if (unlikely(PyTuple_Check(key))) { + PyObject* args = PyTuple_Pack(1, key); + if (likely(args)) { + PyErr_SetObject(PyExc_KeyError, args); + Py_DECREF(args); + } + } else { + PyErr_SetObject(PyExc_KeyError, key); + } + } + return NULL; + } + Py_INCREF(value); + return value; +} +#endif + +/* RaiseTooManyValuesToUnpack */ + static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { + PyErr_Format(PyExc_ValueError, + "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected); +} + +/* RaiseNeedMoreValuesToUnpack */ + static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { + PyErr_Format(PyExc_ValueError, + "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack", + index, (index == 1) ? "" : "s"); +} + +/* IterFinish */ + static CYTHON_INLINE int __Pyx_IterFinish(void) { + PyObject* exc_type; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (unlikely(exc_type)) { + if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) + return -1; + __Pyx_PyErr_Clear(); + return 0; + } + return 0; +} + +/* UnpackItemEndCheck */ + static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) { + if (unlikely(retval)) { + Py_DECREF(retval); + __Pyx_RaiseTooManyValuesError(expected); + return -1; + } + return __Pyx_IterFinish(); +} + +/* GetItemInt */ + static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { + PyObject *r; + if (unlikely(!j)) return NULL; + r = PyObject_GetItem(o, j); + Py_DECREF(j); + return r; +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyList_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyList_GET_SIZE(o)))) { + PyObject *r = PyList_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyTuple_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS + if (is_list || PyList_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); + if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) { + PyObject *r = PyList_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } + else if (PyTuple_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); + if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } else { + PyMappingMethods *mm = Py_TYPE(o)->tp_as_mapping; + PySequenceMethods *sm = Py_TYPE(o)->tp_as_sequence; + if (mm && mm->mp_subscript) { + PyObject *r, *key = PyInt_FromSsize_t(i); + if (unlikely(!key)) return NULL; + r = mm->mp_subscript(o, key); + Py_DECREF(key); + return r; + } + if (likely(sm && sm->sq_item)) { + if (wraparound && unlikely(i < 0) && likely(sm->sq_length)) { + Py_ssize_t l = sm->sq_length(o); + if (likely(l >= 0)) { + i += l; + } else { + if (!PyErr_ExceptionMatches(PyExc_OverflowError)) + return NULL; + PyErr_Clear(); + } + } + return sm->sq_item(o, i); + } + } +#else + if (is_list || !PyMapping_Check(o)) { + return PySequence_GetItem(o, i); + } +#endif + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +} + +/* RaiseUnexpectedTypeError */ + static int +__Pyx_RaiseUnexpectedTypeError(const char *expected, PyObject *obj) +{ + __Pyx_TypeName obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, "Expected %s, got " __Pyx_FMT_TYPENAME, + expected, obj_type_name); + __Pyx_DECREF_TypeName(obj_type_name); + return 0; +} + +/* PyObjectCallOneArg */ + static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *args[2] = {NULL, arg}; + return __Pyx_PyObject_FastCall(func, args+1, 1 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); +} + +/* ObjectGetItem */ + #if CYTHON_USE_TYPE_SLOTS +static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject *index) { + PyObject *runerr = NULL; + Py_ssize_t key_value; + key_value = __Pyx_PyIndex_AsSsize_t(index); + if (likely(key_value != -1 || !(runerr = PyErr_Occurred()))) { + return __Pyx_GetItemInt_Fast(obj, key_value, 0, 1, 1); + } + if (PyErr_GivenExceptionMatches(runerr, PyExc_OverflowError)) { + __Pyx_TypeName index_type_name = __Pyx_PyType_GetName(Py_TYPE(index)); + PyErr_Clear(); + PyErr_Format(PyExc_IndexError, + "cannot fit '" __Pyx_FMT_TYPENAME "' into an index-sized integer", index_type_name); + __Pyx_DECREF_TypeName(index_type_name); + } + return NULL; +} +static PyObject *__Pyx_PyObject_GetItem_Slow(PyObject *obj, PyObject *key) { + __Pyx_TypeName obj_type_name; + if (likely(PyType_Check(obj))) { + PyObject *meth = __Pyx_PyObject_GetAttrStrNoError(obj, __pyx_n_s_class_getitem); + if (!meth) { + PyErr_Clear(); + } else { + PyObject *result = __Pyx_PyObject_CallOneArg(meth, key); + Py_DECREF(meth); + return result; + } + } + obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, + "'" __Pyx_FMT_TYPENAME "' object is not subscriptable", obj_type_name); + __Pyx_DECREF_TypeName(obj_type_name); + return NULL; +} +static PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject *key) { + PyTypeObject *tp = Py_TYPE(obj); + PyMappingMethods *mm = tp->tp_as_mapping; + PySequenceMethods *sm = tp->tp_as_sequence; + if (likely(mm && mm->mp_subscript)) { + return mm->mp_subscript(obj, key); + } + if (likely(sm && sm->sq_item)) { + return __Pyx_PyObject_GetIndex(obj, key); + } + return __Pyx_PyObject_GetItem_Slow(obj, key); +} +#endif + +/* SliceTupleAndList */ + #if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE void __Pyx_crop_slice(Py_ssize_t* _start, Py_ssize_t* _stop, Py_ssize_t* _length) { + Py_ssize_t start = *_start, stop = *_stop, length = *_length; + if (start < 0) { + start += length; + if (start < 0) + start = 0; + } + if (stop < 0) + stop += length; + else if (stop > length) + stop = length; + *_length = stop - start; + *_start = start; + *_stop = stop; +} +static CYTHON_INLINE PyObject* __Pyx_PyList_GetSlice( + PyObject* src, Py_ssize_t start, Py_ssize_t stop) { + Py_ssize_t length = PyList_GET_SIZE(src); + __Pyx_crop_slice(&start, &stop, &length); + if (length <= 0) { + return PyList_New(0); + } + return __Pyx_PyList_FromArray(((PyListObject*)src)->ob_item + start, length); +} +static CYTHON_INLINE PyObject* __Pyx_PyTuple_GetSlice( + PyObject* src, Py_ssize_t start, Py_ssize_t stop) { + Py_ssize_t length = PyTuple_GET_SIZE(src); + __Pyx_crop_slice(&start, &stop, &length); + return __Pyx_PyTuple_FromArray(((PyTupleObject*)src)->ob_item + start, length); +} +#endif + +/* SetItemInt */ + static int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v) { + int r; + if (unlikely(!j)) return -1; + r = PyObject_SetItem(o, j, v); + Py_DECREF(j); + return r; +} +static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v, int is_list, + CYTHON_NCP_UNUSED int wraparound, CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS + if (is_list || PyList_CheckExact(o)) { + Py_ssize_t n = (!wraparound) ? i : ((likely(i >= 0)) ? i : i + PyList_GET_SIZE(o)); + if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o)))) { + PyObject* old = PyList_GET_ITEM(o, n); + Py_INCREF(v); + PyList_SET_ITEM(o, n, v); + Py_DECREF(old); + return 1; + } + } else { + PyMappingMethods *mm = Py_TYPE(o)->tp_as_mapping; + PySequenceMethods *sm = Py_TYPE(o)->tp_as_sequence; + if (mm && mm->mp_ass_subscript) { + int r; + PyObject *key = PyInt_FromSsize_t(i); + if (unlikely(!key)) return -1; + r = mm->mp_ass_subscript(o, key, v); + Py_DECREF(key); + return r; + } + if (likely(sm && sm->sq_ass_item)) { + if (wraparound && unlikely(i < 0) && likely(sm->sq_length)) { + Py_ssize_t l = sm->sq_length(o); + if (likely(l >= 0)) { + i += l; + } else { + if (!PyErr_ExceptionMatches(PyExc_OverflowError)) + return -1; + PyErr_Clear(); + } + } + return sm->sq_ass_item(o, i, v); + } + } +#else + if (is_list || !PyMapping_Check(o)) + { + return PySequence_SetItem(o, i, v); + } +#endif + return __Pyx_SetItemInt_Generic(o, PyInt_FromSsize_t(i), v); +} + +/* UnpackUnboundCMethod */ + static PyObject *__Pyx_SelflessCall(PyObject *method, PyObject *args, PyObject *kwargs) { + PyObject *result; + PyObject *selfless_args = PyTuple_GetSlice(args, 1, PyTuple_Size(args)); + if (unlikely(!selfless_args)) return NULL; + result = PyObject_Call(method, selfless_args, kwargs); + Py_DECREF(selfless_args); + return result; +} +static PyMethodDef __Pyx_UnboundCMethod_Def = { + "CythonUnboundCMethod", + __PYX_REINTERPRET_FUNCION(PyCFunction, __Pyx_SelflessCall), + METH_VARARGS | METH_KEYWORDS, + NULL +}; +static int __Pyx_TryUnpackUnboundCMethod(__Pyx_CachedCFunction* target) { + PyObject *method; + method = __Pyx_PyObject_GetAttrStr(target->type, *target->method_name); + if (unlikely(!method)) + return -1; + target->method = method; +#if CYTHON_COMPILING_IN_CPYTHON + #if PY_MAJOR_VERSION >= 3 + if (likely(__Pyx_TypeCheck(method, &PyMethodDescr_Type))) + #else + if (likely(!__Pyx_CyOrPyCFunction_Check(method))) + #endif + { + PyMethodDescrObject *descr = (PyMethodDescrObject*) method; + target->func = descr->d_method->ml_meth; + target->flag = descr->d_method->ml_flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_STACKLESS); + } else +#endif +#if CYTHON_COMPILING_IN_PYPY +#else + if (PyCFunction_Check(method)) +#endif + { + PyObject *self; + int self_found; +#if CYTHON_COMPILING_IN_LIMITED_API || CYTHON_COMPILING_IN_PYPY + self = PyObject_GetAttrString(method, "__self__"); + if (!self) { + PyErr_Clear(); + } +#else + self = PyCFunction_GET_SELF(method); +#endif + self_found = (self && self != Py_None); +#if CYTHON_COMPILING_IN_LIMITED_API || CYTHON_COMPILING_IN_PYPY + Py_XDECREF(self); +#endif + if (self_found) { + PyObject *unbound_method = PyCFunction_New(&__Pyx_UnboundCMethod_Def, method); + if (unlikely(!unbound_method)) return -1; + Py_DECREF(method); + target->method = unbound_method; + } + } + return 0; +} + +/* CallUnboundCMethod1 */ + #if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg) { + if (likely(cfunc->func)) { + int flag = cfunc->flag; + if (flag == METH_O) { + return (*(cfunc->func))(self, arg); + } else if ((PY_VERSION_HEX >= 0x030600B1) && flag == METH_FASTCALL) { + #if PY_VERSION_HEX >= 0x030700A0 + return (*(__Pyx_PyCFunctionFast)(void*)(PyCFunction)cfunc->func)(self, &arg, 1); + #else + return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, &arg, 1, NULL); + #endif + } else if ((PY_VERSION_HEX >= 0x030700A0) && flag == (METH_FASTCALL | METH_KEYWORDS)) { + return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, &arg, 1, NULL); + } + } + return __Pyx__CallUnboundCMethod1(cfunc, self, arg); +} +#endif +static PyObject* __Pyx__CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg){ + PyObject *args, *result = NULL; + if (unlikely(!cfunc->func && !cfunc->method) && unlikely(__Pyx_TryUnpackUnboundCMethod(cfunc) < 0)) return NULL; +#if CYTHON_COMPILING_IN_CPYTHON + if (cfunc->func && (cfunc->flag & METH_VARARGS)) { + args = PyTuple_New(1); + if (unlikely(!args)) goto bad; + Py_INCREF(arg); + PyTuple_SET_ITEM(args, 0, arg); + if (cfunc->flag & METH_KEYWORDS) + result = (*(PyCFunctionWithKeywords)(void*)(PyCFunction)cfunc->func)(self, args, NULL); + else + result = (*cfunc->func)(self, args); + } else { + args = PyTuple_New(2); + if (unlikely(!args)) goto bad; + Py_INCREF(self); + PyTuple_SET_ITEM(args, 0, self); + Py_INCREF(arg); + PyTuple_SET_ITEM(args, 1, arg); + result = __Pyx_PyObject_Call(cfunc->method, args, NULL); + } +#else + args = PyTuple_Pack(2, self, arg); + if (unlikely(!args)) goto bad; + result = __Pyx_PyObject_Call(cfunc->method, args, NULL); +#endif +bad: + Py_XDECREF(args); + return result; +} + +/* PyIntBinop */ + #if !CYTHON_COMPILING_IN_PYPY +static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check) { + CYTHON_MAYBE_UNUSED_VAR(intval); + CYTHON_MAYBE_UNUSED_VAR(inplace); + CYTHON_UNUSED_VAR(zerodivision_check); + #if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(op1))) { + const long b = intval; + long x; + long a = PyInt_AS_LONG(op1); + + x = (long)((unsigned long)a + (unsigned long)b); + if (likely((x^a) >= 0 || (x^b) >= 0)) + return PyInt_FromLong(x); + return PyLong_Type.tp_as_number->nb_add(op1, op2); + } + #endif + #if CYTHON_USE_PYLONG_INTERNALS + if (likely(PyLong_CheckExact(op1))) { + const long b = intval; + long a, x; +#ifdef HAVE_LONG_LONG + const PY_LONG_LONG llb = intval; + PY_LONG_LONG lla, llx; +#endif + if (unlikely(__Pyx_PyLong_IsZero(op1))) { + return __Pyx_NewRef(op2); + } + if (likely(__Pyx_PyLong_IsCompact(op1))) { + a = __Pyx_PyLong_CompactValue(op1); + } else { + const digit* digits = __Pyx_PyLong_Digits(op1); + const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(op1); + switch (size) { + case -2: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + a = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { + lla = -(PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 2: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { + lla = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case -3: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + a = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { + lla = -(PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 3: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { + lla = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case -4: + if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + a = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { + lla = -(PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 4: + if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { + lla = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + default: return PyLong_Type.tp_as_number->nb_add(op1, op2); + } + } + x = a + b; + return PyLong_FromLong(x); +#ifdef HAVE_LONG_LONG + long_long: + llx = lla + llb; + return PyLong_FromLongLong(llx); +#endif + + + } + #endif + if (PyFloat_CheckExact(op1)) { + const long b = intval; +#if CYTHON_COMPILING_IN_LIMITED_API + double a = __pyx_PyFloat_AsDouble(op1); +#else + double a = PyFloat_AS_DOUBLE(op1); +#endif + double result; + + PyFPE_START_PROTECT("add", return NULL) + result = ((double)a) + (double)b; + PyFPE_END_PROTECT(result) + return PyFloat_FromDouble(result); + } + return (inplace ? PyNumber_InPlaceAdd : PyNumber_Add)(op1, op2); +} +#endif + +/* PyObjectCallNoArg */ + static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) { + PyObject *arg[2] = {NULL, NULL}; + return __Pyx_PyObject_FastCall(func, arg + 1, 0 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); +} + +/* PyObjectGetMethod */ + static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method) { + PyObject *attr; +#if CYTHON_UNPACK_METHODS && CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_PYTYPE_LOOKUP + __Pyx_TypeName type_name; + PyTypeObject *tp = Py_TYPE(obj); + PyObject *descr; + descrgetfunc f = NULL; + PyObject **dictptr, *dict; + int meth_found = 0; + assert (*method == NULL); + if (unlikely(tp->tp_getattro != PyObject_GenericGetAttr)) { + attr = __Pyx_PyObject_GetAttrStr(obj, name); + goto try_unpack; + } + if (unlikely(tp->tp_dict == NULL) && unlikely(PyType_Ready(tp) < 0)) { + return 0; + } + descr = _PyType_Lookup(tp, name); + if (likely(descr != NULL)) { + Py_INCREF(descr); +#if defined(Py_TPFLAGS_METHOD_DESCRIPTOR) && Py_TPFLAGS_METHOD_DESCRIPTOR + if (__Pyx_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR)) +#elif PY_MAJOR_VERSION >= 3 + #ifdef __Pyx_CyFunction_USED + if (likely(PyFunction_Check(descr) || __Pyx_IS_TYPE(descr, &PyMethodDescr_Type) || __Pyx_CyFunction_Check(descr))) + #else + if (likely(PyFunction_Check(descr) || __Pyx_IS_TYPE(descr, &PyMethodDescr_Type))) + #endif +#else + #ifdef __Pyx_CyFunction_USED + if (likely(PyFunction_Check(descr) || __Pyx_CyFunction_Check(descr))) + #else + if (likely(PyFunction_Check(descr))) + #endif +#endif + { + meth_found = 1; + } else { + f = Py_TYPE(descr)->tp_descr_get; + if (f != NULL && PyDescr_IsData(descr)) { + attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); + Py_DECREF(descr); + goto try_unpack; + } + } + } + dictptr = _PyObject_GetDictPtr(obj); + if (dictptr != NULL && (dict = *dictptr) != NULL) { + Py_INCREF(dict); + attr = __Pyx_PyDict_GetItemStr(dict, name); + if (attr != NULL) { + Py_INCREF(attr); + Py_DECREF(dict); + Py_XDECREF(descr); + goto try_unpack; + } + Py_DECREF(dict); + } + if (meth_found) { + *method = descr; + return 1; + } + if (f != NULL) { + attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); + Py_DECREF(descr); + goto try_unpack; + } + if (likely(descr != NULL)) { + *method = descr; + return 0; + } + type_name = __Pyx_PyType_GetName(tp); + PyErr_Format(PyExc_AttributeError, +#if PY_MAJOR_VERSION >= 3 + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%U'", + type_name, name); +#else + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%.400s'", + type_name, PyString_AS_STRING(name)); +#endif + __Pyx_DECREF_TypeName(type_name); + return 0; +#else + attr = __Pyx_PyObject_GetAttrStr(obj, name); + goto try_unpack; +#endif +try_unpack: +#if CYTHON_UNPACK_METHODS + if (likely(attr) && PyMethod_Check(attr) && likely(PyMethod_GET_SELF(attr) == obj)) { + PyObject *function = PyMethod_GET_FUNCTION(attr); + Py_INCREF(function); + Py_DECREF(attr); + *method = function; + return 1; + } +#endif + *method = attr; + return 0; +} + +/* PyObjectCallMethod0 */ + static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name) { + PyObject *method = NULL, *result = NULL; + int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method); + if (likely(is_method)) { + result = __Pyx_PyObject_CallOneArg(method, obj); + Py_DECREF(method); + return result; + } + if (unlikely(!method)) goto bad; + result = __Pyx_PyObject_CallNoArg(method); + Py_DECREF(method); +bad: + return result; +} + +/* RaiseNoneIterError */ + static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); +} + +/* UnpackTupleError */ + static void __Pyx_UnpackTupleError(PyObject *t, Py_ssize_t index) { + if (t == Py_None) { + __Pyx_RaiseNoneNotIterableError(); + } else if (PyTuple_GET_SIZE(t) < index) { + __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(t)); + } else { + __Pyx_RaiseTooManyValuesError(index); + } +} + +/* UnpackTuple2 */ + static CYTHON_INLINE int __Pyx_unpack_tuple2_exact( + PyObject* tuple, PyObject** pvalue1, PyObject** pvalue2, int decref_tuple) { + PyObject *value1 = NULL, *value2 = NULL; +#if CYTHON_COMPILING_IN_PYPY + value1 = PySequence_ITEM(tuple, 0); if (unlikely(!value1)) goto bad; + value2 = PySequence_ITEM(tuple, 1); if (unlikely(!value2)) goto bad; +#else + value1 = PyTuple_GET_ITEM(tuple, 0); Py_INCREF(value1); + value2 = PyTuple_GET_ITEM(tuple, 1); Py_INCREF(value2); +#endif + if (decref_tuple) { + Py_DECREF(tuple); + } + *pvalue1 = value1; + *pvalue2 = value2; + return 0; +#if CYTHON_COMPILING_IN_PYPY +bad: + Py_XDECREF(value1); + Py_XDECREF(value2); + if (decref_tuple) { Py_XDECREF(tuple); } + return -1; +#endif +} +static int __Pyx_unpack_tuple2_generic(PyObject* tuple, PyObject** pvalue1, PyObject** pvalue2, + int has_known_size, int decref_tuple) { + Py_ssize_t index; + PyObject *value1 = NULL, *value2 = NULL, *iter = NULL; + iternextfunc iternext; + iter = PyObject_GetIter(tuple); + if (unlikely(!iter)) goto bad; + if (decref_tuple) { Py_DECREF(tuple); tuple = NULL; } + iternext = __Pyx_PyObject_GetIterNextFunc(iter); + value1 = iternext(iter); if (unlikely(!value1)) { index = 0; goto unpacking_failed; } + value2 = iternext(iter); if (unlikely(!value2)) { index = 1; goto unpacking_failed; } + if (!has_known_size && unlikely(__Pyx_IternextUnpackEndCheck(iternext(iter), 2))) goto bad; + Py_DECREF(iter); + *pvalue1 = value1; + *pvalue2 = value2; + return 0; +unpacking_failed: + if (!has_known_size && __Pyx_IterFinish() == 0) + __Pyx_RaiseNeedMoreValuesError(index); +bad: + Py_XDECREF(iter); + Py_XDECREF(value1); + Py_XDECREF(value2); + if (decref_tuple) { Py_XDECREF(tuple); } + return -1; +} + +/* dict_iter */ + #if CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 +#include +#endif +static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* iterable, int is_dict, PyObject* method_name, + Py_ssize_t* p_orig_length, int* p_source_is_dict) { + is_dict = is_dict || likely(PyDict_CheckExact(iterable)); + *p_source_is_dict = is_dict; + if (is_dict) { +#if !CYTHON_COMPILING_IN_PYPY + *p_orig_length = PyDict_Size(iterable); + Py_INCREF(iterable); + return iterable; +#elif PY_MAJOR_VERSION >= 3 + static PyObject *py_items = NULL, *py_keys = NULL, *py_values = NULL; + PyObject **pp = NULL; + if (method_name) { + const char *name = PyUnicode_AsUTF8(method_name); + if (strcmp(name, "iteritems") == 0) pp = &py_items; + else if (strcmp(name, "iterkeys") == 0) pp = &py_keys; + else if (strcmp(name, "itervalues") == 0) pp = &py_values; + if (pp) { + if (!*pp) { + *pp = PyUnicode_FromString(name + 4); + if (!*pp) + return NULL; + } + method_name = *pp; + } + } +#endif + } + *p_orig_length = 0; + if (method_name) { + PyObject* iter; + iterable = __Pyx_PyObject_CallMethod0(iterable, method_name); + if (!iterable) + return NULL; +#if !CYTHON_COMPILING_IN_PYPY + if (PyTuple_CheckExact(iterable) || PyList_CheckExact(iterable)) + return iterable; +#endif + iter = PyObject_GetIter(iterable); + Py_DECREF(iterable); + return iter; + } + return PyObject_GetIter(iterable); +} +static CYTHON_INLINE int __Pyx_dict_iter_next( + PyObject* iter_obj, CYTHON_NCP_UNUSED Py_ssize_t orig_length, CYTHON_NCP_UNUSED Py_ssize_t* ppos, + PyObject** pkey, PyObject** pvalue, PyObject** pitem, int source_is_dict) { + PyObject* next_item; +#if !CYTHON_COMPILING_IN_PYPY + if (source_is_dict) { + PyObject *key, *value; + if (unlikely(orig_length != PyDict_Size(iter_obj))) { + PyErr_SetString(PyExc_RuntimeError, "dictionary changed size during iteration"); + return -1; + } + if (unlikely(!PyDict_Next(iter_obj, ppos, &key, &value))) { + return 0; + } + if (pitem) { + PyObject* tuple = PyTuple_New(2); + if (unlikely(!tuple)) { + return -1; + } + Py_INCREF(key); + Py_INCREF(value); + PyTuple_SET_ITEM(tuple, 0, key); + PyTuple_SET_ITEM(tuple, 1, value); + *pitem = tuple; + } else { + if (pkey) { + Py_INCREF(key); + *pkey = key; + } + if (pvalue) { + Py_INCREF(value); + *pvalue = value; + } + } + return 1; + } else if (PyTuple_CheckExact(iter_obj)) { + Py_ssize_t pos = *ppos; + if (unlikely(pos >= PyTuple_GET_SIZE(iter_obj))) return 0; + *ppos = pos + 1; + next_item = PyTuple_GET_ITEM(iter_obj, pos); + Py_INCREF(next_item); + } else if (PyList_CheckExact(iter_obj)) { + Py_ssize_t pos = *ppos; + if (unlikely(pos >= PyList_GET_SIZE(iter_obj))) return 0; + *ppos = pos + 1; + next_item = PyList_GET_ITEM(iter_obj, pos); + Py_INCREF(next_item); + } else +#endif + { + next_item = PyIter_Next(iter_obj); + if (unlikely(!next_item)) { + return __Pyx_IterFinish(); + } + } + if (pitem) { + *pitem = next_item; + } else if (pkey && pvalue) { + if (__Pyx_unpack_tuple2(next_item, pkey, pvalue, source_is_dict, source_is_dict, 1)) + return -1; + } else if (pkey) { + *pkey = next_item; + } else { + *pvalue = next_item; + } + return 1; +} + +/* JoinPyUnicode */ + static PyObject* __Pyx_PyUnicode_Join(PyObject* value_tuple, Py_ssize_t value_count, Py_ssize_t result_ulength, + Py_UCS4 max_char) { +#if CYTHON_USE_UNICODE_INTERNALS && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + PyObject *result_uval; + int result_ukind, kind_shift; + Py_ssize_t i, char_pos; + void *result_udata; + CYTHON_MAYBE_UNUSED_VAR(max_char); +#if CYTHON_PEP393_ENABLED + result_uval = PyUnicode_New(result_ulength, max_char); + if (unlikely(!result_uval)) return NULL; + result_ukind = (max_char <= 255) ? PyUnicode_1BYTE_KIND : (max_char <= 65535) ? PyUnicode_2BYTE_KIND : PyUnicode_4BYTE_KIND; + kind_shift = (result_ukind == PyUnicode_4BYTE_KIND) ? 2 : result_ukind - 1; + result_udata = PyUnicode_DATA(result_uval); +#else + result_uval = PyUnicode_FromUnicode(NULL, result_ulength); + if (unlikely(!result_uval)) return NULL; + result_ukind = sizeof(Py_UNICODE); + kind_shift = (result_ukind == 4) ? 2 : result_ukind - 1; + result_udata = PyUnicode_AS_UNICODE(result_uval); +#endif + assert(kind_shift == 2 || kind_shift == 1 || kind_shift == 0); + char_pos = 0; + for (i=0; i < value_count; i++) { + int ukind; + Py_ssize_t ulength; + void *udata; + PyObject *uval = PyTuple_GET_ITEM(value_tuple, i); + if (unlikely(__Pyx_PyUnicode_READY(uval))) + goto bad; + ulength = __Pyx_PyUnicode_GET_LENGTH(uval); + if (unlikely(!ulength)) + continue; + if (unlikely((PY_SSIZE_T_MAX >> kind_shift) - ulength < char_pos)) + goto overflow; + ukind = __Pyx_PyUnicode_KIND(uval); + udata = __Pyx_PyUnicode_DATA(uval); + if (!CYTHON_PEP393_ENABLED || ukind == result_ukind) { + memcpy((char *)result_udata + (char_pos << kind_shift), udata, (size_t) (ulength << kind_shift)); + } else { + #if PY_VERSION_HEX >= 0x030d0000 + if (unlikely(PyUnicode_CopyCharacters(result_uval, char_pos, uval, 0, ulength) < 0)) goto bad; + #elif CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030300F0 || defined(_PyUnicode_FastCopyCharacters) + _PyUnicode_FastCopyCharacters(result_uval, char_pos, uval, 0, ulength); + #else + Py_ssize_t j; + for (j=0; j < ulength; j++) { + Py_UCS4 uchar = __Pyx_PyUnicode_READ(ukind, udata, j); + __Pyx_PyUnicode_WRITE(result_ukind, result_udata, char_pos+j, uchar); + } + #endif + } + char_pos += ulength; + } + return result_uval; +overflow: + PyErr_SetString(PyExc_OverflowError, "join() result is too long for a Python string"); +bad: + Py_DECREF(result_uval); + return NULL; +#else + CYTHON_UNUSED_VAR(max_char); + CYTHON_UNUSED_VAR(result_ulength); + CYTHON_UNUSED_VAR(value_count); + return PyUnicode_Join(__pyx_empty_unicode, value_tuple); +#endif +} + +/* TypeImport */ + #ifndef __PYX_HAVE_RT_ImportType_3_0_11 +#define __PYX_HAVE_RT_ImportType_3_0_11 +static PyTypeObject *__Pyx_ImportType_3_0_11(PyObject *module, const char *module_name, const char *class_name, + size_t size, size_t alignment, enum __Pyx_ImportType_CheckSize_3_0_11 check_size) +{ + PyObject *result = 0; + char warning[200]; + Py_ssize_t basicsize; + Py_ssize_t itemsize; +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *py_basicsize; + PyObject *py_itemsize; +#endif + result = PyObject_GetAttrString(module, class_name); + if (!result) + goto bad; + if (!PyType_Check(result)) { + PyErr_Format(PyExc_TypeError, + "%.200s.%.200s is not a type object", + module_name, class_name); + goto bad; + } +#if !CYTHON_COMPILING_IN_LIMITED_API + basicsize = ((PyTypeObject *)result)->tp_basicsize; + itemsize = ((PyTypeObject *)result)->tp_itemsize; +#else + py_basicsize = PyObject_GetAttrString(result, "__basicsize__"); + if (!py_basicsize) + goto bad; + basicsize = PyLong_AsSsize_t(py_basicsize); + Py_DECREF(py_basicsize); + py_basicsize = 0; + if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred()) + goto bad; + py_itemsize = PyObject_GetAttrString(result, "__itemsize__"); + if (!py_itemsize) + goto bad; + itemsize = PyLong_AsSsize_t(py_itemsize); + Py_DECREF(py_itemsize); + py_itemsize = 0; + if (itemsize == (Py_ssize_t)-1 && PyErr_Occurred()) + goto bad; +#endif + if (itemsize) { + if (size % alignment) { + alignment = size % alignment; + } + if (itemsize < (Py_ssize_t)alignment) + itemsize = (Py_ssize_t)alignment; + } + if ((size_t)(basicsize + itemsize) < size) { + PyErr_Format(PyExc_ValueError, + "%.200s.%.200s size changed, may indicate binary incompatibility. " + "Expected %zd from C header, got %zd from PyObject", + module_name, class_name, size, basicsize+itemsize); + goto bad; + } + if (check_size == __Pyx_ImportType_CheckSize_Error_3_0_11 && + ((size_t)basicsize > size || (size_t)(basicsize + itemsize) < size)) { + PyErr_Format(PyExc_ValueError, + "%.200s.%.200s size changed, may indicate binary incompatibility. " + "Expected %zd from C header, got %zd-%zd from PyObject", + module_name, class_name, size, basicsize, basicsize+itemsize); + goto bad; + } + else if (check_size == __Pyx_ImportType_CheckSize_Warn_3_0_11 && (size_t)basicsize > size) { + PyOS_snprintf(warning, sizeof(warning), + "%s.%s size changed, may indicate binary incompatibility. " + "Expected %zd from C header, got %zd from PyObject", + module_name, class_name, size, basicsize); + if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad; + } + return (PyTypeObject *)result; +bad: + Py_XDECREF(result); + return NULL; +} +#endif + +/* Import */ + static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { + PyObject *module = 0; + PyObject *empty_dict = 0; + PyObject *empty_list = 0; + #if PY_MAJOR_VERSION < 3 + PyObject *py_import; + py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); + if (unlikely(!py_import)) + goto bad; + if (!from_list) { + empty_list = PyList_New(0); + if (unlikely(!empty_list)) + goto bad; + from_list = empty_list; + } + #endif + empty_dict = PyDict_New(); + if (unlikely(!empty_dict)) + goto bad; + { + #if PY_MAJOR_VERSION >= 3 + if (level == -1) { + if (strchr(__Pyx_MODULE_NAME, '.') != NULL) { + module = PyImport_ImportModuleLevelObject( + name, __pyx_d, empty_dict, from_list, 1); + if (unlikely(!module)) { + if (unlikely(!PyErr_ExceptionMatches(PyExc_ImportError))) + goto bad; + PyErr_Clear(); + } + } + level = 0; + } + #endif + if (!module) { + #if PY_MAJOR_VERSION < 3 + PyObject *py_level = PyInt_FromLong(level); + if (unlikely(!py_level)) + goto bad; + module = PyObject_CallFunctionObjArgs(py_import, + name, __pyx_d, empty_dict, from_list, py_level, (PyObject *)NULL); + Py_DECREF(py_level); + #else + module = PyImport_ImportModuleLevelObject( + name, __pyx_d, empty_dict, from_list, level); + #endif + } + } +bad: + Py_XDECREF(empty_dict); + Py_XDECREF(empty_list); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_import); + #endif + return module; +} + +/* ImportDottedModule */ + #if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx__ImportDottedModule_Error(PyObject *name, PyObject *parts_tuple, Py_ssize_t count) { + PyObject *partial_name = NULL, *slice = NULL, *sep = NULL; + if (unlikely(PyErr_Occurred())) { + PyErr_Clear(); + } + if (likely(PyTuple_GET_SIZE(parts_tuple) == count)) { + partial_name = name; + } else { + slice = PySequence_GetSlice(parts_tuple, 0, count); + if (unlikely(!slice)) + goto bad; + sep = PyUnicode_FromStringAndSize(".", 1); + if (unlikely(!sep)) + goto bad; + partial_name = PyUnicode_Join(sep, slice); + } + PyErr_Format( +#if PY_MAJOR_VERSION < 3 + PyExc_ImportError, + "No module named '%s'", PyString_AS_STRING(partial_name)); +#else +#if PY_VERSION_HEX >= 0x030600B1 + PyExc_ModuleNotFoundError, +#else + PyExc_ImportError, +#endif + "No module named '%U'", partial_name); +#endif +bad: + Py_XDECREF(sep); + Py_XDECREF(slice); + Py_XDECREF(partial_name); + return NULL; +} +#endif +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx__ImportDottedModule_Lookup(PyObject *name) { + PyObject *imported_module; +#if PY_VERSION_HEX < 0x030700A1 || (CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM < 0x07030400) + PyObject *modules = PyImport_GetModuleDict(); + if (unlikely(!modules)) + return NULL; + imported_module = __Pyx_PyDict_GetItemStr(modules, name); + Py_XINCREF(imported_module); +#else + imported_module = PyImport_GetModule(name); +#endif + return imported_module; +} +#endif +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_ImportDottedModule_WalkParts(PyObject *module, PyObject *name, PyObject *parts_tuple) { + Py_ssize_t i, nparts; + nparts = PyTuple_GET_SIZE(parts_tuple); + for (i=1; i < nparts && module; i++) { + PyObject *part, *submodule; +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + part = PyTuple_GET_ITEM(parts_tuple, i); +#else + part = PySequence_ITEM(parts_tuple, i); +#endif + submodule = __Pyx_PyObject_GetAttrStrNoError(module, part); +#if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) + Py_DECREF(part); +#endif + Py_DECREF(module); + module = submodule; + } + if (unlikely(!module)) { + return __Pyx__ImportDottedModule_Error(name, parts_tuple, i); + } + return module; +} +#endif +static PyObject *__Pyx__ImportDottedModule(PyObject *name, PyObject *parts_tuple) { +#if PY_MAJOR_VERSION < 3 + PyObject *module, *from_list, *star = __pyx_n_s__29; + CYTHON_UNUSED_VAR(parts_tuple); + from_list = PyList_New(1); + if (unlikely(!from_list)) + return NULL; + Py_INCREF(star); + PyList_SET_ITEM(from_list, 0, star); + module = __Pyx_Import(name, from_list, 0); + Py_DECREF(from_list); + return module; +#else + PyObject *imported_module; + PyObject *module = __Pyx_Import(name, NULL, 0); + if (!parts_tuple || unlikely(!module)) + return module; + imported_module = __Pyx__ImportDottedModule_Lookup(name); + if (likely(imported_module)) { + Py_DECREF(module); + return imported_module; + } + PyErr_Clear(); + return __Pyx_ImportDottedModule_WalkParts(module, name, parts_tuple); +#endif +} +static PyObject *__Pyx_ImportDottedModule(PyObject *name, PyObject *parts_tuple) { +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030400B1 + PyObject *module = __Pyx__ImportDottedModule_Lookup(name); + if (likely(module)) { + PyObject *spec = __Pyx_PyObject_GetAttrStrNoError(module, __pyx_n_s_spec); + if (likely(spec)) { + PyObject *unsafe = __Pyx_PyObject_GetAttrStrNoError(spec, __pyx_n_s_initializing); + if (likely(!unsafe || !__Pyx_PyObject_IsTrue(unsafe))) { + Py_DECREF(spec); + spec = NULL; + } + Py_XDECREF(unsafe); + } + if (likely(!spec)) { + PyErr_Clear(); + return module; + } + Py_DECREF(spec); + Py_DECREF(module); + } else if (PyErr_Occurred()) { + PyErr_Clear(); + } +#endif + return __Pyx__ImportDottedModule(name, parts_tuple); +} + +/* ImportFrom */ + static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { + PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); + if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { + const char* module_name_str = 0; + PyObject* module_name = 0; + PyObject* module_dot = 0; + PyObject* full_name = 0; + PyErr_Clear(); + module_name_str = PyModule_GetName(module); + if (unlikely(!module_name_str)) { goto modbad; } + module_name = PyUnicode_FromString(module_name_str); + if (unlikely(!module_name)) { goto modbad; } + module_dot = PyUnicode_Concat(module_name, __pyx_kp_u__30); + if (unlikely(!module_dot)) { goto modbad; } + full_name = PyUnicode_Concat(module_dot, name); + if (unlikely(!full_name)) { goto modbad; } + #if PY_VERSION_HEX < 0x030700A1 || (CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM < 0x07030400) + { + PyObject *modules = PyImport_GetModuleDict(); + if (unlikely(!modules)) + goto modbad; + value = PyObject_GetItem(modules, full_name); + } + #else + value = PyImport_GetModule(full_name); + #endif + modbad: + Py_XDECREF(full_name); + Py_XDECREF(module_dot); + Py_XDECREF(module_name); + } + if (unlikely(!value)) { + PyErr_Format(PyExc_ImportError, + #if PY_MAJOR_VERSION < 3 + "cannot import name %.230s", PyString_AS_STRING(name)); + #else + "cannot import name %S", name); + #endif + } + return value; +} + +/* FixUpExtensionType */ + #if CYTHON_USE_TYPE_SPECS +static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type) { +#if PY_VERSION_HEX > 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + CYTHON_UNUSED_VAR(spec); + CYTHON_UNUSED_VAR(type); +#else + const PyType_Slot *slot = spec->slots; + while (slot && slot->slot && slot->slot != Py_tp_members) + slot++; + if (slot && slot->slot == Py_tp_members) { + int changed = 0; +#if !(PY_VERSION_HEX <= 0x030900b1 && CYTHON_COMPILING_IN_CPYTHON) + const +#endif + PyMemberDef *memb = (PyMemberDef*) slot->pfunc; + while (memb && memb->name) { + if (memb->name[0] == '_' && memb->name[1] == '_') { +#if PY_VERSION_HEX < 0x030900b1 + if (strcmp(memb->name, "__weaklistoffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); + type->tp_weaklistoffset = memb->offset; + changed = 1; + } + else if (strcmp(memb->name, "__dictoffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); + type->tp_dictoffset = memb->offset; + changed = 1; + } +#if CYTHON_METH_FASTCALL + else if (strcmp(memb->name, "__vectorcalloffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); +#if PY_VERSION_HEX >= 0x030800b4 + type->tp_vectorcall_offset = memb->offset; +#else + type->tp_print = (printfunc) memb->offset; +#endif + changed = 1; + } +#endif +#else + if ((0)); +#endif +#if PY_VERSION_HEX <= 0x030900b1 && CYTHON_COMPILING_IN_CPYTHON + else if (strcmp(memb->name, "__module__") == 0) { + PyObject *descr; + assert(memb->type == T_OBJECT); + assert(memb->flags == 0 || memb->flags == READONLY); + descr = PyDescr_NewMember(type, memb); + if (unlikely(!descr)) + return -1; + if (unlikely(PyDict_SetItem(type->tp_dict, PyDescr_NAME(descr), descr) < 0)) { + Py_DECREF(descr); + return -1; + } + Py_DECREF(descr); + changed = 1; + } +#endif + } + memb++; + } + if (changed) + PyType_Modified(type); + } +#endif + return 0; +} +#endif + +/* FetchSharedCythonModule */ + static PyObject *__Pyx_FetchSharedCythonABIModule(void) { + return __Pyx_PyImport_AddModuleRef((char*) __PYX_ABI_MODULE_NAME); +} + +/* FetchCommonType */ + static int __Pyx_VerifyCachedType(PyObject *cached_type, + const char *name, + Py_ssize_t basicsize, + Py_ssize_t expected_basicsize) { + if (!PyType_Check(cached_type)) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s is not a type object", name); + return -1; + } + if (basicsize != expected_basicsize) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s has the wrong size, try recompiling", + name); + return -1; + } + return 0; +} +#if !CYTHON_USE_TYPE_SPECS +static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) { + PyObject* abi_module; + const char* object_name; + PyTypeObject *cached_type = NULL; + abi_module = __Pyx_FetchSharedCythonABIModule(); + if (!abi_module) return NULL; + object_name = strrchr(type->tp_name, '.'); + object_name = object_name ? object_name+1 : type->tp_name; + cached_type = (PyTypeObject*) PyObject_GetAttrString(abi_module, object_name); + if (cached_type) { + if (__Pyx_VerifyCachedType( + (PyObject *)cached_type, + object_name, + cached_type->tp_basicsize, + type->tp_basicsize) < 0) { + goto bad; + } + goto done; + } + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; + PyErr_Clear(); + if (PyType_Ready(type) < 0) goto bad; + if (PyObject_SetAttrString(abi_module, object_name, (PyObject *)type) < 0) + goto bad; + Py_INCREF(type); + cached_type = type; +done: + Py_DECREF(abi_module); + return cached_type; +bad: + Py_XDECREF(cached_type); + cached_type = NULL; + goto done; +} +#else +static PyTypeObject *__Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases) { + PyObject *abi_module, *cached_type = NULL; + const char* object_name = strrchr(spec->name, '.'); + object_name = object_name ? object_name+1 : spec->name; + abi_module = __Pyx_FetchSharedCythonABIModule(); + if (!abi_module) return NULL; + cached_type = PyObject_GetAttrString(abi_module, object_name); + if (cached_type) { + Py_ssize_t basicsize; +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *py_basicsize; + py_basicsize = PyObject_GetAttrString(cached_type, "__basicsize__"); + if (unlikely(!py_basicsize)) goto bad; + basicsize = PyLong_AsSsize_t(py_basicsize); + Py_DECREF(py_basicsize); + py_basicsize = 0; + if (unlikely(basicsize == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; +#else + basicsize = likely(PyType_Check(cached_type)) ? ((PyTypeObject*) cached_type)->tp_basicsize : -1; +#endif + if (__Pyx_VerifyCachedType( + cached_type, + object_name, + basicsize, + spec->basicsize) < 0) { + goto bad; + } + goto done; + } + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; + PyErr_Clear(); + CYTHON_UNUSED_VAR(module); + cached_type = __Pyx_PyType_FromModuleAndSpec(abi_module, spec, bases); + if (unlikely(!cached_type)) goto bad; + if (unlikely(__Pyx_fix_up_extension_type_from_spec(spec, (PyTypeObject *) cached_type) < 0)) goto bad; + if (PyObject_SetAttrString(abi_module, object_name, cached_type) < 0) goto bad; +done: + Py_DECREF(abi_module); + assert(cached_type == NULL || PyType_Check(cached_type)); + return (PyTypeObject *) cached_type; +bad: + Py_XDECREF(cached_type); + cached_type = NULL; + goto done; +} +#endif + +/* PyVectorcallFastCallDict */ + #if CYTHON_METH_FASTCALL +static PyObject *__Pyx_PyVectorcall_FastCallDict_kw(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw) +{ + PyObject *res = NULL; + PyObject *kwnames; + PyObject **newargs; + PyObject **kwvalues; + Py_ssize_t i, pos; + size_t j; + PyObject *key, *value; + unsigned long keys_are_strings; + Py_ssize_t nkw = PyDict_GET_SIZE(kw); + newargs = (PyObject **)PyMem_Malloc((nargs + (size_t)nkw) * sizeof(args[0])); + if (unlikely(newargs == NULL)) { + PyErr_NoMemory(); + return NULL; + } + for (j = 0; j < nargs; j++) newargs[j] = args[j]; + kwnames = PyTuple_New(nkw); + if (unlikely(kwnames == NULL)) { + PyMem_Free(newargs); + return NULL; + } + kwvalues = newargs + nargs; + pos = i = 0; + keys_are_strings = Py_TPFLAGS_UNICODE_SUBCLASS; + while (PyDict_Next(kw, &pos, &key, &value)) { + keys_are_strings &= Py_TYPE(key)->tp_flags; + Py_INCREF(key); + Py_INCREF(value); + PyTuple_SET_ITEM(kwnames, i, key); + kwvalues[i] = value; + i++; + } + if (unlikely(!keys_are_strings)) { + PyErr_SetString(PyExc_TypeError, "keywords must be strings"); + goto cleanup; + } + res = vc(func, newargs, nargs, kwnames); +cleanup: + Py_DECREF(kwnames); + for (i = 0; i < nkw; i++) + Py_DECREF(kwvalues[i]); + PyMem_Free(newargs); + return res; +} +static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw) +{ + if (likely(kw == NULL) || PyDict_GET_SIZE(kw) == 0) { + return vc(func, args, nargs, NULL); + } + return __Pyx_PyVectorcall_FastCallDict_kw(func, vc, args, nargs, kw); +} +#endif + +/* CythonFunctionShared */ + #if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc) { + if (__Pyx_CyFunction_Check(func)) { + return PyCFunction_GetFunction(((__pyx_CyFunctionObject*)func)->func) == (PyCFunction) cfunc; + } else if (PyCFunction_Check(func)) { + return PyCFunction_GetFunction(func) == (PyCFunction) cfunc; + } + return 0; +} +#else +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc) { + return __Pyx_CyOrPyCFunction_Check(func) && __Pyx_CyOrPyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc; +} +#endif +static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj) { +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + __Pyx_Py_XDECREF_SET( + __Pyx_CyFunction_GetClassObj(f), + ((classobj) ? __Pyx_NewRef(classobj) : NULL)); +#else + __Pyx_Py_XDECREF_SET( + ((PyCMethodObject *) (f))->mm_class, + (PyTypeObject*)((classobj) ? __Pyx_NewRef(classobj) : NULL)); +#endif +} +static PyObject * +__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, void *closure) +{ + CYTHON_UNUSED_VAR(closure); + if (unlikely(op->func_doc == NULL)) { +#if CYTHON_COMPILING_IN_LIMITED_API + op->func_doc = PyObject_GetAttrString(op->func, "__doc__"); + if (unlikely(!op->func_doc)) return NULL; +#else + if (((PyCFunctionObject*)op)->m_ml->ml_doc) { +#if PY_MAJOR_VERSION >= 3 + op->func_doc = PyUnicode_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc); +#else + op->func_doc = PyString_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc); +#endif + if (unlikely(op->func_doc == NULL)) + return NULL; + } else { + Py_INCREF(Py_None); + return Py_None; + } +#endif + } + Py_INCREF(op->func_doc); + return op->func_doc; +} +static int +__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (value == NULL) { + value = Py_None; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_doc, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(op->func_name == NULL)) { +#if CYTHON_COMPILING_IN_LIMITED_API + op->func_name = PyObject_GetAttrString(op->func, "__name__"); +#elif PY_MAJOR_VERSION >= 3 + op->func_name = PyUnicode_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name); +#else + op->func_name = PyString_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name); +#endif + if (unlikely(op->func_name == NULL)) + return NULL; + } + Py_INCREF(op->func_name); + return op->func_name; +} +static int +__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__name__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_name, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + Py_INCREF(op->func_qualname); + return op->func_qualname; +} +static int +__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__qualname__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_qualname, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(op->func_dict == NULL)) { + op->func_dict = PyDict_New(); + if (unlikely(op->func_dict == NULL)) + return NULL; + } + Py_INCREF(op->func_dict); + return op->func_dict; +} +static int +__Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(value == NULL)) { + PyErr_SetString(PyExc_TypeError, + "function's dictionary may not be deleted"); + return -1; + } + if (unlikely(!PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "setting function's dictionary to a non-dict"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_dict, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + Py_INCREF(op->func_globals); + return op->func_globals; +} +static PyObject * +__Pyx_CyFunction_get_closure(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(op); + CYTHON_UNUSED_VAR(context); + Py_INCREF(Py_None); + return Py_None; +} +static PyObject * +__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op, void *context) +{ + PyObject* result = (op->func_code) ? op->func_code : Py_None; + CYTHON_UNUSED_VAR(context); + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) { + int result = 0; + PyObject *res = op->defaults_getter((PyObject *) op); + if (unlikely(!res)) + return -1; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + op->defaults_tuple = PyTuple_GET_ITEM(res, 0); + Py_INCREF(op->defaults_tuple); + op->defaults_kwdict = PyTuple_GET_ITEM(res, 1); + Py_INCREF(op->defaults_kwdict); + #else + op->defaults_tuple = __Pyx_PySequence_ITEM(res, 0); + if (unlikely(!op->defaults_tuple)) result = -1; + else { + op->defaults_kwdict = __Pyx_PySequence_ITEM(res, 1); + if (unlikely(!op->defaults_kwdict)) result = -1; + } + #endif + Py_DECREF(res); + return result; +} +static int +__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value) { + value = Py_None; + } else if (unlikely(value != Py_None && !PyTuple_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__defaults__ must be set to a tuple object"); + return -1; + } + PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__defaults__ will not " + "currently affect the values used in function calls", 1); + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->defaults_tuple, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->defaults_tuple; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + if (op->defaults_getter) { + if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL; + result = op->defaults_tuple; + } else { + result = Py_None; + } + } + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value) { + value = Py_None; + } else if (unlikely(value != Py_None && !PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__kwdefaults__ must be set to a dict object"); + return -1; + } + PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__kwdefaults__ will not " + "currently affect the values used in function calls", 1); + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->defaults_kwdict, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->defaults_kwdict; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + if (op->defaults_getter) { + if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL; + result = op->defaults_kwdict; + } else { + result = Py_None; + } + } + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value || value == Py_None) { + value = NULL; + } else if (unlikely(!PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__annotations__ must be set to a dict object"); + return -1; + } + Py_XINCREF(value); + __Pyx_Py_XDECREF_SET(op->func_annotations, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->func_annotations; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + result = PyDict_New(); + if (unlikely(!result)) return NULL; + op->func_annotations = result; + } + Py_INCREF(result); + return result; +} +static PyObject * +__Pyx_CyFunction_get_is_coroutine(__pyx_CyFunctionObject *op, void *context) { + int is_coroutine; + CYTHON_UNUSED_VAR(context); + if (op->func_is_coroutine) { + return __Pyx_NewRef(op->func_is_coroutine); + } + is_coroutine = op->flags & __Pyx_CYFUNCTION_COROUTINE; +#if PY_VERSION_HEX >= 0x03050000 + if (is_coroutine) { + PyObject *module, *fromlist, *marker = __pyx_n_s_is_coroutine; + fromlist = PyList_New(1); + if (unlikely(!fromlist)) return NULL; + Py_INCREF(marker); +#if CYTHON_ASSUME_SAFE_MACROS + PyList_SET_ITEM(fromlist, 0, marker); +#else + if (unlikely(PyList_SetItem(fromlist, 0, marker) < 0)) { + Py_DECREF(marker); + Py_DECREF(fromlist); + return NULL; + } +#endif + module = PyImport_ImportModuleLevelObject(__pyx_n_s_asyncio_coroutines, NULL, NULL, fromlist, 0); + Py_DECREF(fromlist); + if (unlikely(!module)) goto ignore; + op->func_is_coroutine = __Pyx_PyObject_GetAttrStr(module, marker); + Py_DECREF(module); + if (likely(op->func_is_coroutine)) { + return __Pyx_NewRef(op->func_is_coroutine); + } +ignore: + PyErr_Clear(); + } +#endif + op->func_is_coroutine = __Pyx_PyBool_FromLong(is_coroutine); + return __Pyx_NewRef(op->func_is_coroutine); +} +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject * +__Pyx_CyFunction_get_module(__pyx_CyFunctionObject *op, void *context) { + CYTHON_UNUSED_VAR(context); + return PyObject_GetAttrString(op->func, "__module__"); +} +static int +__Pyx_CyFunction_set_module(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + return PyObject_SetAttrString(op->func, "__module__", value); +} +#endif +static PyGetSetDef __pyx_CyFunction_getsets[] = { + {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, + {(char *) "__doc__", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, + {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, + {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, + {(char *) "__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0}, + {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, + {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, + {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, + {(char *) "__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, + {(char *) "func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, + {(char *) "__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, + {(char *) "func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, + {(char *) "__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, + {(char *) "func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, + {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, + {(char *) "__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0}, + {(char *) "__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0}, + {(char *) "_is_coroutine", (getter)__Pyx_CyFunction_get_is_coroutine, 0, 0, 0}, +#if CYTHON_COMPILING_IN_LIMITED_API + {"__module__", (getter)__Pyx_CyFunction_get_module, (setter)__Pyx_CyFunction_set_module, 0, 0}, +#endif + {0, 0, 0, 0, 0} +}; +static PyMemberDef __pyx_CyFunction_members[] = { +#if !CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__module__", T_OBJECT, offsetof(PyCFunctionObject, m_module), 0, 0}, +#endif +#if CYTHON_USE_TYPE_SPECS + {(char *) "__dictoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_dict), READONLY, 0}, +#if CYTHON_METH_FASTCALL +#if CYTHON_BACKPORT_VECTORCALL + {(char *) "__vectorcalloffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_vectorcall), READONLY, 0}, +#else +#if !CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__vectorcalloffset__", T_PYSSIZET, offsetof(PyCFunctionObject, vectorcall), READONLY, 0}, +#endif +#endif +#endif +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_weakreflist), READONLY, 0}, +#else + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(PyCFunctionObject, m_weakreflist), READONLY, 0}, +#endif +#endif + {0, 0, 0, 0, 0} +}; +static PyObject * +__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, PyObject *args) +{ + CYTHON_UNUSED_VAR(args); +#if PY_MAJOR_VERSION >= 3 + Py_INCREF(m->func_qualname); + return m->func_qualname; +#else + return PyString_FromString(((PyCFunctionObject*)m)->m_ml->ml_name); +#endif +} +static PyMethodDef __pyx_CyFunction_methods[] = { + {"__reduce__", (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0}, + {0, 0, 0, 0} +}; +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API +#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func_weakreflist) +#else +#define __Pyx_CyFunction_weakreflist(cyfunc) (((PyCFunctionObject*)cyfunc)->m_weakreflist) +#endif +static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject *op, PyMethodDef *ml, int flags, PyObject* qualname, + PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { +#if !CYTHON_COMPILING_IN_LIMITED_API + PyCFunctionObject *cf = (PyCFunctionObject*) op; +#endif + if (unlikely(op == NULL)) + return NULL; +#if CYTHON_COMPILING_IN_LIMITED_API + op->func = PyCFunction_NewEx(ml, (PyObject*)op, module); + if (unlikely(!op->func)) return NULL; +#endif + op->flags = flags; + __Pyx_CyFunction_weakreflist(op) = NULL; +#if !CYTHON_COMPILING_IN_LIMITED_API + cf->m_ml = ml; + cf->m_self = (PyObject *) op; +#endif + Py_XINCREF(closure); + op->func_closure = closure; +#if !CYTHON_COMPILING_IN_LIMITED_API + Py_XINCREF(module); + cf->m_module = module; +#endif + op->func_dict = NULL; + op->func_name = NULL; + Py_INCREF(qualname); + op->func_qualname = qualname; + op->func_doc = NULL; +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + op->func_classobj = NULL; +#else + ((PyCMethodObject*)op)->mm_class = NULL; +#endif + op->func_globals = globals; + Py_INCREF(op->func_globals); + Py_XINCREF(code); + op->func_code = code; + op->defaults_pyobjects = 0; + op->defaults_size = 0; + op->defaults = NULL; + op->defaults_tuple = NULL; + op->defaults_kwdict = NULL; + op->defaults_getter = NULL; + op->func_annotations = NULL; + op->func_is_coroutine = NULL; +#if CYTHON_METH_FASTCALL + switch (ml->ml_flags & (METH_VARARGS | METH_FASTCALL | METH_NOARGS | METH_O | METH_KEYWORDS | METH_METHOD)) { + case METH_NOARGS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_NOARGS; + break; + case METH_O: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_O; + break; + case METH_METHOD | METH_FASTCALL | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD; + break; + case METH_FASTCALL | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS; + break; + case METH_VARARGS | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = NULL; + break; + default: + PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction"); + Py_DECREF(op); + return NULL; + } +#endif + return (PyObject *) op; +} +static int +__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m) +{ + Py_CLEAR(m->func_closure); +#if CYTHON_COMPILING_IN_LIMITED_API + Py_CLEAR(m->func); +#else + Py_CLEAR(((PyCFunctionObject*)m)->m_module); +#endif + Py_CLEAR(m->func_dict); + Py_CLEAR(m->func_name); + Py_CLEAR(m->func_qualname); + Py_CLEAR(m->func_doc); + Py_CLEAR(m->func_globals); + Py_CLEAR(m->func_code); +#if !CYTHON_COMPILING_IN_LIMITED_API +#if PY_VERSION_HEX < 0x030900B1 + Py_CLEAR(__Pyx_CyFunction_GetClassObj(m)); +#else + { + PyObject *cls = (PyObject*) ((PyCMethodObject *) (m))->mm_class; + ((PyCMethodObject *) (m))->mm_class = NULL; + Py_XDECREF(cls); + } +#endif +#endif + Py_CLEAR(m->defaults_tuple); + Py_CLEAR(m->defaults_kwdict); + Py_CLEAR(m->func_annotations); + Py_CLEAR(m->func_is_coroutine); + if (m->defaults) { + PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); + int i; + for (i = 0; i < m->defaults_pyobjects; i++) + Py_XDECREF(pydefaults[i]); + PyObject_Free(m->defaults); + m->defaults = NULL; + } + return 0; +} +static void __Pyx__CyFunction_dealloc(__pyx_CyFunctionObject *m) +{ + if (__Pyx_CyFunction_weakreflist(m) != NULL) + PyObject_ClearWeakRefs((PyObject *) m); + __Pyx_CyFunction_clear(m); + __Pyx_PyHeapTypeObject_GC_Del(m); +} +static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m) +{ + PyObject_GC_UnTrack(m); + __Pyx__CyFunction_dealloc(m); +} +static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg) +{ + Py_VISIT(m->func_closure); +#if CYTHON_COMPILING_IN_LIMITED_API + Py_VISIT(m->func); +#else + Py_VISIT(((PyCFunctionObject*)m)->m_module); +#endif + Py_VISIT(m->func_dict); + Py_VISIT(m->func_name); + Py_VISIT(m->func_qualname); + Py_VISIT(m->func_doc); + Py_VISIT(m->func_globals); + Py_VISIT(m->func_code); +#if !CYTHON_COMPILING_IN_LIMITED_API + Py_VISIT(__Pyx_CyFunction_GetClassObj(m)); +#endif + Py_VISIT(m->defaults_tuple); + Py_VISIT(m->defaults_kwdict); + Py_VISIT(m->func_is_coroutine); + if (m->defaults) { + PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); + int i; + for (i = 0; i < m->defaults_pyobjects; i++) + Py_VISIT(pydefaults[i]); + } + return 0; +} +static PyObject* +__Pyx_CyFunction_repr(__pyx_CyFunctionObject *op) +{ +#if PY_MAJOR_VERSION >= 3 + return PyUnicode_FromFormat("", + op->func_qualname, (void *)op); +#else + return PyString_FromFormat("", + PyString_AsString(op->func_qualname), (void *)op); +#endif +} +static PyObject * __Pyx_CyFunction_CallMethod(PyObject *func, PyObject *self, PyObject *arg, PyObject *kw) { +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *f = ((__pyx_CyFunctionObject*)func)->func; + PyObject *py_name = NULL; + PyCFunction meth; + int flags; + meth = PyCFunction_GetFunction(f); + if (unlikely(!meth)) return NULL; + flags = PyCFunction_GetFlags(f); + if (unlikely(flags < 0)) return NULL; +#else + PyCFunctionObject* f = (PyCFunctionObject*)func; + PyCFunction meth = f->m_ml->ml_meth; + int flags = f->m_ml->ml_flags; +#endif + Py_ssize_t size; + switch (flags & (METH_VARARGS | METH_KEYWORDS | METH_NOARGS | METH_O)) { + case METH_VARARGS: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) + return (*meth)(self, arg); + break; + case METH_VARARGS | METH_KEYWORDS: + return (*(PyCFunctionWithKeywords)(void*)meth)(self, arg, kw); + case METH_NOARGS: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) { +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(arg); +#else + size = PyTuple_Size(arg); + if (unlikely(size < 0)) return NULL; +#endif + if (likely(size == 0)) + return (*meth)(self, NULL); +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, + "%.200S() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + py_name, size); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, + "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + f->m_ml->ml_name, size); +#endif + return NULL; + } + break; + case METH_O: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) { +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(arg); +#else + size = PyTuple_Size(arg); + if (unlikely(size < 0)) return NULL; +#endif + if (likely(size == 1)) { + PyObject *result, *arg0; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + arg0 = PyTuple_GET_ITEM(arg, 0); + #else + arg0 = __Pyx_PySequence_ITEM(arg, 0); if (unlikely(!arg0)) return NULL; + #endif + result = (*meth)(self, arg0); + #if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) + Py_DECREF(arg0); + #endif + return result; + } +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, + "%.200S() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + py_name, size); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, + "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + f->m_ml->ml_name, size); +#endif + return NULL; + } + break; + default: + PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction"); + return NULL; + } +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, "%.200S() takes no keyword arguments", + py_name); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments", + f->m_ml->ml_name); +#endif + return NULL; +} +static CYTHON_INLINE PyObject *__Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *self, *result; +#if CYTHON_COMPILING_IN_LIMITED_API + self = PyCFunction_GetSelf(((__pyx_CyFunctionObject*)func)->func); + if (unlikely(!self) && PyErr_Occurred()) return NULL; +#else + self = ((PyCFunctionObject*)func)->m_self; +#endif + result = __Pyx_CyFunction_CallMethod(func, self, arg, kw); + return result; +} +static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, PyObject *kw) { + PyObject *result; + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *) func; +#if CYTHON_METH_FASTCALL + __pyx_vectorcallfunc vc = __Pyx_CyFunction_func_vectorcall(cyfunc); + if (vc) { +#if CYTHON_ASSUME_SAFE_MACROS + return __Pyx_PyVectorcall_FastCallDict(func, vc, &PyTuple_GET_ITEM(args, 0), (size_t)PyTuple_GET_SIZE(args), kw); +#else + (void) &__Pyx_PyVectorcall_FastCallDict; + return PyVectorcall_Call(func, args, kw); +#endif + } +#endif + if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { + Py_ssize_t argc; + PyObject *new_args; + PyObject *self; +#if CYTHON_ASSUME_SAFE_MACROS + argc = PyTuple_GET_SIZE(args); +#else + argc = PyTuple_Size(args); + if (unlikely(!argc) < 0) return NULL; +#endif + new_args = PyTuple_GetSlice(args, 1, argc); + if (unlikely(!new_args)) + return NULL; + self = PyTuple_GetItem(args, 0); + if (unlikely(!self)) { + Py_DECREF(new_args); +#if PY_MAJOR_VERSION > 2 + PyErr_Format(PyExc_TypeError, + "unbound method %.200S() needs an argument", + cyfunc->func_qualname); +#else + PyErr_SetString(PyExc_TypeError, + "unbound method needs an argument"); +#endif + return NULL; + } + result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw); + Py_DECREF(new_args); + } else { + result = __Pyx_CyFunction_Call(func, args, kw); + } + return result; +} +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE int __Pyx_CyFunction_Vectorcall_CheckArgs(__pyx_CyFunctionObject *cyfunc, Py_ssize_t nargs, PyObject *kwnames) +{ + int ret = 0; + if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { + if (unlikely(nargs < 1)) { + PyErr_Format(PyExc_TypeError, "%.200s() needs an argument", + ((PyCFunctionObject*)cyfunc)->m_ml->ml_name); + return -1; + } + ret = 1; + } + if (unlikely(kwnames) && unlikely(PyTuple_GET_SIZE(kwnames))) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes no keyword arguments", ((PyCFunctionObject*)cyfunc)->m_ml->ml_name); + return -1; + } + return ret; +} +static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + if (unlikely(nargs != 0)) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + def->ml_name, nargs); + return NULL; + } + return def->ml_meth(self, NULL); +} +static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + if (unlikely(nargs != 1)) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + def->ml_name, nargs); + return NULL; + } + return def->ml_meth(self, args[0]); +} +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + return ((__Pyx_PyCFunctionFastWithKeywords)(void(*)(void))def->ml_meth)(self, args, nargs, kwnames); +} +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; + PyTypeObject *cls = (PyTypeObject *) __Pyx_CyFunction_GetClassObj(cyfunc); +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + return ((__Pyx_PyCMethod)(void(*)(void))def->ml_meth)(self, cls, args, (size_t)nargs, kwnames); +} +#endif +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_CyFunctionType_slots[] = { + {Py_tp_dealloc, (void *)__Pyx_CyFunction_dealloc}, + {Py_tp_repr, (void *)__Pyx_CyFunction_repr}, + {Py_tp_call, (void *)__Pyx_CyFunction_CallAsMethod}, + {Py_tp_traverse, (void *)__Pyx_CyFunction_traverse}, + {Py_tp_clear, (void *)__Pyx_CyFunction_clear}, + {Py_tp_methods, (void *)__pyx_CyFunction_methods}, + {Py_tp_members, (void *)__pyx_CyFunction_members}, + {Py_tp_getset, (void *)__pyx_CyFunction_getsets}, + {Py_tp_descr_get, (void *)__Pyx_PyMethod_New}, + {0, 0}, +}; +static PyType_Spec __pyx_CyFunctionType_spec = { + __PYX_TYPE_MODULE_PREFIX "cython_function_or_method", + sizeof(__pyx_CyFunctionObject), + 0, +#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR + Py_TPFLAGS_METHOD_DESCRIPTOR | +#endif +#if (defined(_Py_TPFLAGS_HAVE_VECTORCALL) && CYTHON_METH_FASTCALL) + _Py_TPFLAGS_HAVE_VECTORCALL | +#endif + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, + __pyx_CyFunctionType_slots +}; +#else +static PyTypeObject __pyx_CyFunctionType_type = { + PyVarObject_HEAD_INIT(0, 0) + __PYX_TYPE_MODULE_PREFIX "cython_function_or_method", + sizeof(__pyx_CyFunctionObject), + 0, + (destructor) __Pyx_CyFunction_dealloc, +#if !CYTHON_METH_FASTCALL + 0, +#elif CYTHON_BACKPORT_VECTORCALL + (printfunc)offsetof(__pyx_CyFunctionObject, func_vectorcall), +#else + offsetof(PyCFunctionObject, vectorcall), +#endif + 0, + 0, +#if PY_MAJOR_VERSION < 3 + 0, +#else + 0, +#endif + (reprfunc) __Pyx_CyFunction_repr, + 0, + 0, + 0, + 0, + __Pyx_CyFunction_CallAsMethod, + 0, + 0, + 0, + 0, +#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR + Py_TPFLAGS_METHOD_DESCRIPTOR | +#endif +#if defined(_Py_TPFLAGS_HAVE_VECTORCALL) && CYTHON_METH_FASTCALL + _Py_TPFLAGS_HAVE_VECTORCALL | +#endif + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, + 0, + (traverseproc) __Pyx_CyFunction_traverse, + (inquiry) __Pyx_CyFunction_clear, + 0, +#if PY_VERSION_HEX < 0x030500A0 + offsetof(__pyx_CyFunctionObject, func_weakreflist), +#else + offsetof(PyCFunctionObject, m_weakreflist), +#endif + 0, + 0, + __pyx_CyFunction_methods, + __pyx_CyFunction_members, + __pyx_CyFunction_getsets, + 0, + 0, + __Pyx_PyMethod_New, + 0, + offsetof(__pyx_CyFunctionObject, func_dict), + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if PY_VERSION_HEX >= 0x030400a1 + 0, +#endif +#if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, +#endif +#if __PYX_NEED_TP_PRINT_SLOT + 0, +#endif +#if PY_VERSION_HEX >= 0x030C0000 + 0, +#endif +#if PY_VERSION_HEX >= 0x030d00A4 + 0, +#endif +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, +#endif +}; +#endif +static int __pyx_CyFunction_init(PyObject *module) { +#if CYTHON_USE_TYPE_SPECS + __pyx_CyFunctionType = __Pyx_FetchCommonTypeFromSpec(module, &__pyx_CyFunctionType_spec, NULL); +#else + CYTHON_UNUSED_VAR(module); + __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type); +#endif + if (unlikely(__pyx_CyFunctionType == NULL)) { + return -1; + } + return 0; +} +static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *func, size_t size, int pyobjects) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults = PyObject_Malloc(size); + if (unlikely(!m->defaults)) + return PyErr_NoMemory(); + memset(m->defaults, 0, size); + m->defaults_pyobjects = pyobjects; + m->defaults_size = size; + return m->defaults; +} +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *func, PyObject *tuple) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults_tuple = tuple; + Py_INCREF(tuple); +} +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *func, PyObject *dict) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults_kwdict = dict; + Py_INCREF(dict); +} +static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *func, PyObject *dict) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->func_annotations = dict; + Py_INCREF(dict); +} + +/* CythonFunction */ + static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, int flags, PyObject* qualname, + PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { + PyObject *op = __Pyx_CyFunction_Init( + PyObject_GC_New(__pyx_CyFunctionObject, __pyx_CyFunctionType), + ml, flags, qualname, closure, module, globals, code + ); + if (likely(op)) { + PyObject_GC_Track(op); + } + return op; +} + +/* CLineInTraceback */ + #ifndef CYTHON_CLINE_IN_TRACEBACK +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line) { + PyObject *use_cline; + PyObject *ptype, *pvalue, *ptraceback; +#if CYTHON_COMPILING_IN_CPYTHON + PyObject **cython_runtime_dict; +#endif + CYTHON_MAYBE_UNUSED_VAR(tstate); + if (unlikely(!__pyx_cython_runtime)) { + return c_line; + } + __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); +#if CYTHON_COMPILING_IN_CPYTHON + cython_runtime_dict = _PyObject_GetDictPtr(__pyx_cython_runtime); + if (likely(cython_runtime_dict)) { + __PYX_PY_DICT_LOOKUP_IF_MODIFIED( + use_cline, *cython_runtime_dict, + __Pyx_PyDict_GetItemStr(*cython_runtime_dict, __pyx_n_s_cline_in_traceback)) + } else +#endif + { + PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStrNoError(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback); + if (use_cline_obj) { + use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True; + Py_DECREF(use_cline_obj); + } else { + PyErr_Clear(); + use_cline = NULL; + } + } + if (!use_cline) { + c_line = 0; + (void) PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False); + } + else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) { + c_line = 0; + } + __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); + return c_line; +} +#endif + +/* CodeObjectCache */ + #if !CYTHON_COMPILING_IN_LIMITED_API +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { + int start = 0, mid = 0, end = count - 1; + if (end >= 0 && code_line > entries[end].code_line) { + return count; + } + while (start < end) { + mid = start + (end - start) / 2; + if (code_line < entries[mid].code_line) { + end = mid; + } else if (code_line > entries[mid].code_line) { + start = mid + 1; + } else { + return mid; + } + } + if (code_line <= entries[mid].code_line) { + return mid; + } else { + return mid + 1; + } +} +static PyCodeObject *__pyx_find_code_object(int code_line) { + PyCodeObject* code_object; + int pos; + if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { + return NULL; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { + return NULL; + } + code_object = __pyx_code_cache.entries[pos].code_object; + Py_INCREF(code_object); + return code_object; +} +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { + int pos, i; + __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; + if (unlikely(!code_line)) { + return; + } + if (unlikely(!entries)) { + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); + if (likely(entries)) { + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = 64; + __pyx_code_cache.count = 1; + entries[0].code_line = code_line; + entries[0].code_object = code_object; + Py_INCREF(code_object); + } + return; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { + PyCodeObject* tmp = entries[pos].code_object; + entries[pos].code_object = code_object; + Py_DECREF(tmp); + return; + } + if (__pyx_code_cache.count == __pyx_code_cache.max_count) { + int new_max = __pyx_code_cache.max_count + 64; + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( + __pyx_code_cache.entries, ((size_t)new_max) * sizeof(__Pyx_CodeObjectCacheEntry)); + if (unlikely(!entries)) { + return; + } + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = new_max; + } + for (i=__pyx_code_cache.count; i>pos; i--) { + entries[i] = entries[i-1]; + } + entries[pos].code_line = code_line; + entries[pos].code_object = code_object; + __pyx_code_cache.count++; + Py_INCREF(code_object); +} +#endif + +/* AddTraceback */ + #include "compile.h" +#include "frameobject.h" +#include "traceback.h" +#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API + #ifndef Py_BUILD_CORE + #define Py_BUILD_CORE 1 + #endif + #include "internal/pycore_frame.h" +#endif +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject *__Pyx_PyCode_Replace_For_AddTraceback(PyObject *code, PyObject *scratch_dict, + PyObject *firstlineno, PyObject *name) { + PyObject *replace = NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "co_firstlineno", firstlineno))) return NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "co_name", name))) return NULL; + replace = PyObject_GetAttrString(code, "replace"); + if (likely(replace)) { + PyObject *result; + result = PyObject_Call(replace, __pyx_empty_tuple, scratch_dict); + Py_DECREF(replace); + return result; + } + PyErr_Clear(); + #if __PYX_LIMITED_VERSION_HEX < 0x030780000 + { + PyObject *compiled = NULL, *result = NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "code", code))) return NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "type", (PyObject*)(&PyType_Type)))) return NULL; + compiled = Py_CompileString( + "out = type(code)(\n" + " code.co_argcount, code.co_kwonlyargcount, code.co_nlocals, code.co_stacksize,\n" + " code.co_flags, code.co_code, code.co_consts, code.co_names,\n" + " code.co_varnames, code.co_filename, co_name, co_firstlineno,\n" + " code.co_lnotab)\n", "", Py_file_input); + if (!compiled) return NULL; + result = PyEval_EvalCode(compiled, scratch_dict, scratch_dict); + Py_DECREF(compiled); + if (!result) PyErr_Print(); + Py_DECREF(result); + result = PyDict_GetItemString(scratch_dict, "out"); + if (result) Py_INCREF(result); + return result; + } + #else + return NULL; + #endif +} +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyObject *code_object = NULL, *py_py_line = NULL, *py_funcname = NULL, *dict = NULL; + PyObject *replace = NULL, *getframe = NULL, *frame = NULL; + PyObject *exc_type, *exc_value, *exc_traceback; + int success = 0; + if (c_line) { + (void) __pyx_cfilenm; + (void) __Pyx_CLineForTraceback(__Pyx_PyThreadState_Current, c_line); + } + PyErr_Fetch(&exc_type, &exc_value, &exc_traceback); + code_object = Py_CompileString("_getframe()", filename, Py_eval_input); + if (unlikely(!code_object)) goto bad; + py_py_line = PyLong_FromLong(py_line); + if (unlikely(!py_py_line)) goto bad; + py_funcname = PyUnicode_FromString(funcname); + if (unlikely(!py_funcname)) goto bad; + dict = PyDict_New(); + if (unlikely(!dict)) goto bad; + { + PyObject *old_code_object = code_object; + code_object = __Pyx_PyCode_Replace_For_AddTraceback(code_object, dict, py_py_line, py_funcname); + Py_DECREF(old_code_object); + } + if (unlikely(!code_object)) goto bad; + getframe = PySys_GetObject("_getframe"); + if (unlikely(!getframe)) goto bad; + if (unlikely(PyDict_SetItemString(dict, "_getframe", getframe))) goto bad; + frame = PyEval_EvalCode(code_object, dict, dict); + if (unlikely(!frame) || frame == Py_None) goto bad; + success = 1; + bad: + PyErr_Restore(exc_type, exc_value, exc_traceback); + Py_XDECREF(code_object); + Py_XDECREF(py_py_line); + Py_XDECREF(py_funcname); + Py_XDECREF(dict); + Py_XDECREF(replace); + if (success) { + PyTraceBack_Here( + (struct _frame*)frame); + } + Py_XDECREF(frame); +} +#else +static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( + const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = NULL; + PyObject *py_funcname = NULL; + #if PY_MAJOR_VERSION < 3 + PyObject *py_srcfile = NULL; + py_srcfile = PyString_FromString(filename); + if (!py_srcfile) goto bad; + #endif + if (c_line) { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + if (!py_funcname) goto bad; + #else + py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + if (!py_funcname) goto bad; + funcname = PyUnicode_AsUTF8(py_funcname); + if (!funcname) goto bad; + #endif + } + else { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromString(funcname); + if (!py_funcname) goto bad; + #endif + } + #if PY_MAJOR_VERSION < 3 + py_code = __Pyx_PyCode_New( + 0, + 0, + 0, + 0, + 0, + 0, + __pyx_empty_bytes, /*PyObject *code,*/ + __pyx_empty_tuple, /*PyObject *consts,*/ + __pyx_empty_tuple, /*PyObject *names,*/ + __pyx_empty_tuple, /*PyObject *varnames,*/ + __pyx_empty_tuple, /*PyObject *freevars,*/ + __pyx_empty_tuple, /*PyObject *cellvars,*/ + py_srcfile, /*PyObject *filename,*/ + py_funcname, /*PyObject *name,*/ + py_line, + __pyx_empty_bytes /*PyObject *lnotab*/ + ); + Py_DECREF(py_srcfile); + #else + py_code = PyCode_NewEmpty(filename, funcname, py_line); + #endif + Py_XDECREF(py_funcname); + return py_code; +bad: + Py_XDECREF(py_funcname); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_srcfile); + #endif + return NULL; +} +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = 0; + PyFrameObject *py_frame = 0; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject *ptype, *pvalue, *ptraceback; + if (c_line) { + c_line = __Pyx_CLineForTraceback(tstate, c_line); + } + py_code = __pyx_find_code_object(c_line ? -c_line : py_line); + if (!py_code) { + __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); + py_code = __Pyx_CreateCodeObjectForTraceback( + funcname, c_line, py_line, filename); + if (!py_code) { + /* If the code object creation fails, then we should clear the + fetched exception references and propagate the new exception */ + Py_XDECREF(ptype); + Py_XDECREF(pvalue); + Py_XDECREF(ptraceback); + goto bad; + } + __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); + __pyx_insert_code_object(c_line ? -c_line : py_line, py_code); + } + py_frame = PyFrame_New( + tstate, /*PyThreadState *tstate,*/ + py_code, /*PyCodeObject *code,*/ + __pyx_d, /*PyObject *globals,*/ + 0 /*PyObject *locals*/ + ); + if (!py_frame) goto bad; + __Pyx_PyFrame_SetLineNumber(py_frame, py_line); + PyTraceBack_Here(py_frame); +bad: + Py_XDECREF(py_code); + Py_XDECREF(py_frame); +} +#endif + +#if PY_MAJOR_VERSION < 3 +static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags) { + __Pyx_TypeName obj_type_name; + if (PyObject_CheckBuffer(obj)) return PyObject_GetBuffer(obj, view, flags); + obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, + "'" __Pyx_FMT_TYPENAME "' does not have the buffer interface", + obj_type_name); + __Pyx_DECREF_TypeName(obj_type_name); + return -1; +} +static void __Pyx_ReleaseBuffer(Py_buffer *view) { + PyObject *obj = view->obj; + if (!obj) return; + if (PyObject_CheckBuffer(obj)) { + PyBuffer_Release(view); + return; + } + if ((0)) {} + view->obj = NULL; + Py_DECREF(obj); +} +#endif + + + /* CIntFromPyVerify */ + #define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0) +#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1) +#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\ + {\ + func_type value = func_value;\ + if (sizeof(target_type) < sizeof(func_type)) {\ + if (unlikely(value != (func_type) (target_type) value)) {\ + func_type zero = 0;\ + if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\ + return (target_type) -1;\ + if (is_unsigned && unlikely(value < zero))\ + goto raise_neg_overflow;\ + else\ + goto raise_overflow;\ + }\ + }\ + return (target_type) value;\ + } + +/* Declarations */ + #if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) + #ifdef __cplusplus + static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { + return ::std::complex< float >(x, y); + } + #else + static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { + return x + y*(__pyx_t_float_complex)_Complex_I; + } + #endif +#else + static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { + __pyx_t_float_complex z; + z.real = x; + z.imag = y; + return z; + } +#endif + +/* Arithmetic */ + #if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) +#else + static CYTHON_INLINE int __Pyx_c_eq_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + return (a.real == b.real) && (a.imag == b.imag); + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sum_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + __pyx_t_float_complex z; + z.real = a.real + b.real; + z.imag = a.imag + b.imag; + return z; + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_diff_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + __pyx_t_float_complex z; + z.real = a.real - b.real; + z.imag = a.imag - b.imag; + return z; + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prod_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + __pyx_t_float_complex z; + z.real = a.real * b.real - a.imag * b.imag; + z.imag = a.real * b.imag + a.imag * b.real; + return z; + } + #if 1 + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quot_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + if (b.imag == 0) { + return __pyx_t_float_complex_from_parts(a.real / b.real, a.imag / b.real); + } else if (fabsf(b.real) >= fabsf(b.imag)) { + if (b.real == 0 && b.imag == 0) { + return __pyx_t_float_complex_from_parts(a.real / b.real, a.imag / b.imag); + } else { + float r = b.imag / b.real; + float s = (float)(1.0) / (b.real + b.imag * r); + return __pyx_t_float_complex_from_parts( + (a.real + a.imag * r) * s, (a.imag - a.real * r) * s); + } + } else { + float r = b.real / b.imag; + float s = (float)(1.0) / (b.imag + b.real * r); + return __pyx_t_float_complex_from_parts( + (a.real * r + a.imag) * s, (a.imag * r - a.real) * s); + } + } + #else + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quot_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + if (b.imag == 0) { + return __pyx_t_float_complex_from_parts(a.real / b.real, a.imag / b.real); + } else { + float denom = b.real * b.real + b.imag * b.imag; + return __pyx_t_float_complex_from_parts( + (a.real * b.real + a.imag * b.imag) / denom, + (a.imag * b.real - a.real * b.imag) / denom); + } + } + #endif + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_neg_float(__pyx_t_float_complex a) { + __pyx_t_float_complex z; + z.real = -a.real; + z.imag = -a.imag; + return z; + } + static CYTHON_INLINE int __Pyx_c_is_zero_float(__pyx_t_float_complex a) { + return (a.real == 0) && (a.imag == 0); + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conj_float(__pyx_t_float_complex a) { + __pyx_t_float_complex z; + z.real = a.real; + z.imag = -a.imag; + return z; + } + #if 1 + static CYTHON_INLINE float __Pyx_c_abs_float(__pyx_t_float_complex z) { + #if !defined(HAVE_HYPOT) || defined(_MSC_VER) + return sqrtf(z.real*z.real + z.imag*z.imag); + #else + return hypotf(z.real, z.imag); + #endif + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_pow_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + __pyx_t_float_complex z; + float r, lnr, theta, z_r, z_theta; + if (b.imag == 0 && b.real == (int)b.real) { + if (b.real < 0) { + float denom = a.real * a.real + a.imag * a.imag; + a.real = a.real / denom; + a.imag = -a.imag / denom; + b.real = -b.real; + } + switch ((int)b.real) { + case 0: + z.real = 1; + z.imag = 0; + return z; + case 1: + return a; + case 2: + return __Pyx_c_prod_float(a, a); + case 3: + z = __Pyx_c_prod_float(a, a); + return __Pyx_c_prod_float(z, a); + case 4: + z = __Pyx_c_prod_float(a, a); + return __Pyx_c_prod_float(z, z); + } + } + if (a.imag == 0) { + if (a.real == 0) { + return a; + } else if ((b.imag == 0) && (a.real >= 0)) { + z.real = powf(a.real, b.real); + z.imag = 0; + return z; + } else if (a.real > 0) { + r = a.real; + theta = 0; + } else { + r = -a.real; + theta = atan2f(0.0, -1.0); + } + } else { + r = __Pyx_c_abs_float(a); + theta = atan2f(a.imag, a.real); + } + lnr = logf(r); + z_r = expf(lnr * b.real - theta * b.imag); + z_theta = theta * b.real + lnr * b.imag; + z.real = z_r * cosf(z_theta); + z.imag = z_r * sinf(z_theta); + return z; + } + #endif +#endif + +/* Declarations */ + #if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) + #ifdef __cplusplus + static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { + return ::std::complex< double >(x, y); + } + #else + static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { + return x + y*(__pyx_t_double_complex)_Complex_I; + } + #endif +#else + static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { + __pyx_t_double_complex z; + z.real = x; + z.imag = y; + return z; + } +#endif + +/* Arithmetic */ + #if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) +#else + static CYTHON_INLINE int __Pyx_c_eq_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { + return (a.real == b.real) && (a.imag == b.imag); + } + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { + __pyx_t_double_complex z; + z.real = a.real + b.real; + z.imag = a.imag + b.imag; + return z; + } + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { + __pyx_t_double_complex z; + z.real = a.real - b.real; + z.imag = a.imag - b.imag; + return z; + } + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { + __pyx_t_double_complex z; + z.real = a.real * b.real - a.imag * b.imag; + z.imag = a.real * b.imag + a.imag * b.real; + return z; + } + #if 1 + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { + if (b.imag == 0) { + return __pyx_t_double_complex_from_parts(a.real / b.real, a.imag / b.real); + } else if (fabs(b.real) >= fabs(b.imag)) { + if (b.real == 0 && b.imag == 0) { + return __pyx_t_double_complex_from_parts(a.real / b.real, a.imag / b.imag); + } else { + double r = b.imag / b.real; + double s = (double)(1.0) / (b.real + b.imag * r); + return __pyx_t_double_complex_from_parts( + (a.real + a.imag * r) * s, (a.imag - a.real * r) * s); + } + } else { + double r = b.real / b.imag; + double s = (double)(1.0) / (b.imag + b.real * r); + return __pyx_t_double_complex_from_parts( + (a.real * r + a.imag) * s, (a.imag * r - a.real) * s); + } + } + #else + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { + if (b.imag == 0) { + return __pyx_t_double_complex_from_parts(a.real / b.real, a.imag / b.real); + } else { + double denom = b.real * b.real + b.imag * b.imag; + return __pyx_t_double_complex_from_parts( + (a.real * b.real + a.imag * b.imag) / denom, + (a.imag * b.real - a.real * b.imag) / denom); + } + } + #endif + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg_double(__pyx_t_double_complex a) { + __pyx_t_double_complex z; + z.real = -a.real; + z.imag = -a.imag; + return z; + } + static CYTHON_INLINE int __Pyx_c_is_zero_double(__pyx_t_double_complex a) { + return (a.real == 0) && (a.imag == 0); + } + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj_double(__pyx_t_double_complex a) { + __pyx_t_double_complex z; + z.real = a.real; + z.imag = -a.imag; + return z; + } + #if 1 + static CYTHON_INLINE double __Pyx_c_abs_double(__pyx_t_double_complex z) { + #if !defined(HAVE_HYPOT) || defined(_MSC_VER) + return sqrt(z.real*z.real + z.imag*z.imag); + #else + return hypot(z.real, z.imag); + #endif + } + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { + __pyx_t_double_complex z; + double r, lnr, theta, z_r, z_theta; + if (b.imag == 0 && b.real == (int)b.real) { + if (b.real < 0) { + double denom = a.real * a.real + a.imag * a.imag; + a.real = a.real / denom; + a.imag = -a.imag / denom; + b.real = -b.real; + } + switch ((int)b.real) { + case 0: + z.real = 1; + z.imag = 0; + return z; + case 1: + return a; + case 2: + return __Pyx_c_prod_double(a, a); + case 3: + z = __Pyx_c_prod_double(a, a); + return __Pyx_c_prod_double(z, a); + case 4: + z = __Pyx_c_prod_double(a, a); + return __Pyx_c_prod_double(z, z); + } + } + if (a.imag == 0) { + if (a.real == 0) { + return a; + } else if ((b.imag == 0) && (a.real >= 0)) { + z.real = pow(a.real, b.real); + z.imag = 0; + return z; + } else if (a.real > 0) { + r = a.real; + theta = 0; + } else { + r = -a.real; + theta = atan2(0.0, -1.0); + } + } else { + r = __Pyx_c_abs_double(a); + theta = atan2(a.imag, a.real); + } + lnr = log(r); + z_r = exp(lnr * b.real - theta * b.imag); + z_theta = theta * b.real + lnr * b.imag; + z.real = z_r * cos(z_theta); + z.imag = z_r * sin(z_theta); + return z; + } + #endif +#endif + +/* Declarations */ + #if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) + #ifdef __cplusplus + static CYTHON_INLINE __pyx_t_long_double_complex __pyx_t_long_double_complex_from_parts(long double x, long double y) { + return ::std::complex< long double >(x, y); + } + #else + static CYTHON_INLINE __pyx_t_long_double_complex __pyx_t_long_double_complex_from_parts(long double x, long double y) { + return x + y*(__pyx_t_long_double_complex)_Complex_I; + } + #endif +#else + static CYTHON_INLINE __pyx_t_long_double_complex __pyx_t_long_double_complex_from_parts(long double x, long double y) { + __pyx_t_long_double_complex z; + z.real = x; + z.imag = y; + return z; + } +#endif + +/* Arithmetic */ + #if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) +#else + static CYTHON_INLINE int __Pyx_c_eq_long__double(__pyx_t_long_double_complex a, __pyx_t_long_double_complex b) { + return (a.real == b.real) && (a.imag == b.imag); + } + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_sum_long__double(__pyx_t_long_double_complex a, __pyx_t_long_double_complex b) { + __pyx_t_long_double_complex z; + z.real = a.real + b.real; + z.imag = a.imag + b.imag; + return z; + } + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_diff_long__double(__pyx_t_long_double_complex a, __pyx_t_long_double_complex b) { + __pyx_t_long_double_complex z; + z.real = a.real - b.real; + z.imag = a.imag - b.imag; + return z; + } + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_prod_long__double(__pyx_t_long_double_complex a, __pyx_t_long_double_complex b) { + __pyx_t_long_double_complex z; + z.real = a.real * b.real - a.imag * b.imag; + z.imag = a.real * b.imag + a.imag * b.real; + return z; + } + #if 1 + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_quot_long__double(__pyx_t_long_double_complex a, __pyx_t_long_double_complex b) { + if (b.imag == 0) { + return __pyx_t_long_double_complex_from_parts(a.real / b.real, a.imag / b.real); + } else if (fabsl(b.real) >= fabsl(b.imag)) { + if (b.real == 0 && b.imag == 0) { + return __pyx_t_long_double_complex_from_parts(a.real / b.real, a.imag / b.imag); + } else { + long double r = b.imag / b.real; + long double s = (long double)(1.0) / (b.real + b.imag * r); + return __pyx_t_long_double_complex_from_parts( + (a.real + a.imag * r) * s, (a.imag - a.real * r) * s); + } + } else { + long double r = b.real / b.imag; + long double s = (long double)(1.0) / (b.imag + b.real * r); + return __pyx_t_long_double_complex_from_parts( + (a.real * r + a.imag) * s, (a.imag * r - a.real) * s); + } + } + #else + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_quot_long__double(__pyx_t_long_double_complex a, __pyx_t_long_double_complex b) { + if (b.imag == 0) { + return __pyx_t_long_double_complex_from_parts(a.real / b.real, a.imag / b.real); + } else { + long double denom = b.real * b.real + b.imag * b.imag; + return __pyx_t_long_double_complex_from_parts( + (a.real * b.real + a.imag * b.imag) / denom, + (a.imag * b.real - a.real * b.imag) / denom); + } + } + #endif + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_neg_long__double(__pyx_t_long_double_complex a) { + __pyx_t_long_double_complex z; + z.real = -a.real; + z.imag = -a.imag; + return z; + } + static CYTHON_INLINE int __Pyx_c_is_zero_long__double(__pyx_t_long_double_complex a) { + return (a.real == 0) && (a.imag == 0); + } + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_conj_long__double(__pyx_t_long_double_complex a) { + __pyx_t_long_double_complex z; + z.real = a.real; + z.imag = -a.imag; + return z; + } + #if 1 + static CYTHON_INLINE long double __Pyx_c_abs_long__double(__pyx_t_long_double_complex z) { + #if !defined(HAVE_HYPOT) || defined(_MSC_VER) + return sqrtl(z.real*z.real + z.imag*z.imag); + #else + return hypotl(z.real, z.imag); + #endif + } + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_pow_long__double(__pyx_t_long_double_complex a, __pyx_t_long_double_complex b) { + __pyx_t_long_double_complex z; + long double r, lnr, theta, z_r, z_theta; + if (b.imag == 0 && b.real == (int)b.real) { + if (b.real < 0) { + long double denom = a.real * a.real + a.imag * a.imag; + a.real = a.real / denom; + a.imag = -a.imag / denom; + b.real = -b.real; + } + switch ((int)b.real) { + case 0: + z.real = 1; + z.imag = 0; + return z; + case 1: + return a; + case 2: + return __Pyx_c_prod_long__double(a, a); + case 3: + z = __Pyx_c_prod_long__double(a, a); + return __Pyx_c_prod_long__double(z, a); + case 4: + z = __Pyx_c_prod_long__double(a, a); + return __Pyx_c_prod_long__double(z, z); + } + } + if (a.imag == 0) { + if (a.real == 0) { + return a; + } else if ((b.imag == 0) && (a.real >= 0)) { + z.real = powl(a.real, b.real); + z.imag = 0; + return z; + } else if (a.real > 0) { + r = a.real; + theta = 0; + } else { + r = -a.real; + theta = atan2l(0.0, -1.0); + } + } else { + r = __Pyx_c_abs_long__double(a); + theta = atan2l(a.imag, a.real); + } + lnr = logl(r); + z_r = expl(lnr * b.real - theta * b.imag); + z_theta = theta * b.real + lnr * b.imag; + z.real = z_r * cosl(z_theta); + z.imag = z_r * sinl(z_theta); + return z; + } + #endif +#endif + +/* CIntFromPy */ + static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const int neg_one = (int) -1, const_zero = (int) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if ((sizeof(int) < sizeof(long))) { + __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (int) val; + } + } +#endif + if (unlikely(!PyLong_Check(x))) { + int val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (int) -1; + val = __Pyx_PyInt_As_int(tmp); + Py_DECREF(tmp); + return val; + } + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + case 2: + if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 2 * PyLong_SHIFT)) { + return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 3: + if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 3 * PyLong_SHIFT)) { + return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 4: + if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 4 * PyLong_SHIFT)) { + return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + } + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (int) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if ((sizeof(int) <= sizeof(unsigned long))) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(int) <= sizeof(unsigned PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + case -2: + if ((8 * sizeof(int) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 2: + if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -3: + if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 3: + if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -4: + if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 4: + if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) { + return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + } + } +#endif + if ((sizeof(int) <= sizeof(long))) { + __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(int) <= sizeof(PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { + int val; + int ret = -1; +#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API + Py_ssize_t bytes_copied = PyLong_AsNativeBytes( + x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0)); + if (unlikely(bytes_copied == -1)) { + } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) { + goto raise_overflow; + } else { + ret = 0; + } +#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + ret = _PyLong_AsByteArray((PyLongObject *)x, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *v; + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (likely(PyLong_CheckExact(x))) { + v = __Pyx_NewRef(x); + } else { + v = PyNumber_Long(x); + if (unlikely(!v)) return (int) -1; + assert(PyLong_CheckExact(v)); + } + { + int result = PyObject_RichCompareBool(v, Py_False, Py_LT); + if (unlikely(result < 0)) { + Py_DECREF(v); + return (int) -1; + } + is_negative = result == 1; + } + if (is_unsigned && unlikely(is_negative)) { + Py_DECREF(v); + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + Py_DECREF(v); + if (unlikely(!stepval)) + return (int) -1; + } else { + stepval = v; + } + v = NULL; + val = (int) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(int) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + long idigit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + val |= ((int) idigit) << bits; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + } + Py_DECREF(shift); shift = NULL; + Py_DECREF(mask); mask = NULL; + { + long idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(int) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((int) idigit) << bits; + } + if (!is_unsigned) { + if (unlikely(val & (((int) 1) << (sizeof(int) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif + if (unlikely(ret)) + return (int) -1; + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to int"); + return (int) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to int"); + return (int) -1; +} + +/* CIntToPy */ + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const int neg_one = (int) -1, const_zero = (int) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(int) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(int) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(int) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + unsigned char *bytes = (unsigned char *)&value; +#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4 + if (is_unsigned) { + return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1); + } else { + return PyLong_FromNativeBytes(bytes, sizeof(value), -1); + } +#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 + int one = 1; int little = (int)*(unsigned char *)&one; + return _PyLong_FromByteArray(bytes, sizeof(int), + little, !is_unsigned); +#else + int one = 1; int little = (int)*(unsigned char *)&one; + PyObject *from_bytes, *result = NULL; + PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; + from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); + if (!from_bytes) return NULL; + py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(int)); + if (!py_bytes) goto limited_bad; + order_str = PyUnicode_FromString(little ? "little" : "big"); + if (!order_str) goto limited_bad; + arg_tuple = PyTuple_Pack(2, py_bytes, order_str); + if (!arg_tuple) goto limited_bad; + if (!is_unsigned) { + kwds = PyDict_New(); + if (!kwds) goto limited_bad; + if (PyDict_SetItemString(kwds, "signed", __Pyx_NewRef(Py_True))) goto limited_bad; + } + result = PyObject_Call(from_bytes, arg_tuple, kwds); + limited_bad: + Py_XDECREF(kwds); + Py_XDECREF(arg_tuple); + Py_XDECREF(order_str); + Py_XDECREF(py_bytes); + Py_XDECREF(from_bytes); + return result; +#endif + } +} + +/* CIntToPy */ + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const long neg_one = (long) -1, const_zero = (long) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(long) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(long) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(long) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + unsigned char *bytes = (unsigned char *)&value; +#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4 + if (is_unsigned) { + return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1); + } else { + return PyLong_FromNativeBytes(bytes, sizeof(value), -1); + } +#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 + int one = 1; int little = (int)*(unsigned char *)&one; + return _PyLong_FromByteArray(bytes, sizeof(long), + little, !is_unsigned); +#else + int one = 1; int little = (int)*(unsigned char *)&one; + PyObject *from_bytes, *result = NULL; + PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; + from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); + if (!from_bytes) return NULL; + py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(long)); + if (!py_bytes) goto limited_bad; + order_str = PyUnicode_FromString(little ? "little" : "big"); + if (!order_str) goto limited_bad; + arg_tuple = PyTuple_Pack(2, py_bytes, order_str); + if (!arg_tuple) goto limited_bad; + if (!is_unsigned) { + kwds = PyDict_New(); + if (!kwds) goto limited_bad; + if (PyDict_SetItemString(kwds, "signed", __Pyx_NewRef(Py_True))) goto limited_bad; + } + result = PyObject_Call(from_bytes, arg_tuple, kwds); + limited_bad: + Py_XDECREF(kwds); + Py_XDECREF(arg_tuple); + Py_XDECREF(order_str); + Py_XDECREF(py_bytes); + Py_XDECREF(from_bytes); + return result; +#endif + } +} + +/* CIntToPy */ + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_int(unsigned int value) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const unsigned int neg_one = (unsigned int) -1, const_zero = (unsigned int) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(unsigned int) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(unsigned int) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(unsigned int) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(unsigned int) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(unsigned int) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + unsigned char *bytes = (unsigned char *)&value; +#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4 + if (is_unsigned) { + return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1); + } else { + return PyLong_FromNativeBytes(bytes, sizeof(value), -1); + } +#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 + int one = 1; int little = (int)*(unsigned char *)&one; + return _PyLong_FromByteArray(bytes, sizeof(unsigned int), + little, !is_unsigned); +#else + int one = 1; int little = (int)*(unsigned char *)&one; + PyObject *from_bytes, *result = NULL; + PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; + from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); + if (!from_bytes) return NULL; + py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(unsigned int)); + if (!py_bytes) goto limited_bad; + order_str = PyUnicode_FromString(little ? "little" : "big"); + if (!order_str) goto limited_bad; + arg_tuple = PyTuple_Pack(2, py_bytes, order_str); + if (!arg_tuple) goto limited_bad; + if (!is_unsigned) { + kwds = PyDict_New(); + if (!kwds) goto limited_bad; + if (PyDict_SetItemString(kwds, "signed", __Pyx_NewRef(Py_True))) goto limited_bad; + } + result = PyObject_Call(from_bytes, arg_tuple, kwds); + limited_bad: + Py_XDECREF(kwds); + Py_XDECREF(arg_tuple); + Py_XDECREF(order_str); + Py_XDECREF(py_bytes); + Py_XDECREF(from_bytes); + return result; +#endif + } +} + +/* CIntFromPy */ + static CYTHON_INLINE unsigned int __Pyx_PyInt_As_unsigned_int(PyObject *x) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const unsigned int neg_one = (unsigned int) -1, const_zero = (unsigned int) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if ((sizeof(unsigned int) < sizeof(long))) { + __PYX_VERIFY_RETURN_INT(unsigned int, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (unsigned int) val; + } + } +#endif + if (unlikely(!PyLong_Check(x))) { + unsigned int val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (unsigned int) -1; + val = __Pyx_PyInt_As_unsigned_int(tmp); + Py_DECREF(tmp); + return val; + } + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(unsigned int, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + case 2: + if ((8 * sizeof(unsigned int) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned int) >= 2 * PyLong_SHIFT)) { + return (unsigned int) (((((unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0])); + } + } + break; + case 3: + if ((8 * sizeof(unsigned int) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned int) >= 3 * PyLong_SHIFT)) { + return (unsigned int) (((((((unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0])); + } + } + break; + case 4: + if ((8 * sizeof(unsigned int) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned int) >= 4 * PyLong_SHIFT)) { + return (unsigned int) (((((((((unsigned int)digits[3]) << PyLong_SHIFT) | (unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0])); + } + } + break; + } + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (unsigned int) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if ((sizeof(unsigned int) <= sizeof(unsigned long))) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned int, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(unsigned int) <= sizeof(unsigned PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(unsigned int, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + case -2: + if ((8 * sizeof(unsigned int) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned int) - 1 > 2 * PyLong_SHIFT)) { + return (unsigned int) (((unsigned int)-1)*(((((unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0]))); + } + } + break; + case 2: + if ((8 * sizeof(unsigned int) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned int) - 1 > 2 * PyLong_SHIFT)) { + return (unsigned int) ((((((unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0]))); + } + } + break; + case -3: + if ((8 * sizeof(unsigned int) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned int) - 1 > 3 * PyLong_SHIFT)) { + return (unsigned int) (((unsigned int)-1)*(((((((unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0]))); + } + } + break; + case 3: + if ((8 * sizeof(unsigned int) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned int) - 1 > 3 * PyLong_SHIFT)) { + return (unsigned int) ((((((((unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0]))); + } + } + break; + case -4: + if ((8 * sizeof(unsigned int) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned int) - 1 > 4 * PyLong_SHIFT)) { + return (unsigned int) (((unsigned int)-1)*(((((((((unsigned int)digits[3]) << PyLong_SHIFT) | (unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0]))); + } + } + break; + case 4: + if ((8 * sizeof(unsigned int) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned int) - 1 > 4 * PyLong_SHIFT)) { + return (unsigned int) ((((((((((unsigned int)digits[3]) << PyLong_SHIFT) | (unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0]))); + } + } + break; + } + } +#endif + if ((sizeof(unsigned int) <= sizeof(long))) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned int, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(unsigned int) <= sizeof(PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned int, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { + unsigned int val; + int ret = -1; +#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API + Py_ssize_t bytes_copied = PyLong_AsNativeBytes( + x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0)); + if (unlikely(bytes_copied == -1)) { + } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) { + goto raise_overflow; + } else { + ret = 0; + } +#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + ret = _PyLong_AsByteArray((PyLongObject *)x, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *v; + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (likely(PyLong_CheckExact(x))) { + v = __Pyx_NewRef(x); + } else { + v = PyNumber_Long(x); + if (unlikely(!v)) return (unsigned int) -1; + assert(PyLong_CheckExact(v)); + } + { + int result = PyObject_RichCompareBool(v, Py_False, Py_LT); + if (unlikely(result < 0)) { + Py_DECREF(v); + return (unsigned int) -1; + } + is_negative = result == 1; + } + if (is_unsigned && unlikely(is_negative)) { + Py_DECREF(v); + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + Py_DECREF(v); + if (unlikely(!stepval)) + return (unsigned int) -1; + } else { + stepval = v; + } + v = NULL; + val = (unsigned int) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(unsigned int) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + long idigit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + val |= ((unsigned int) idigit) << bits; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + } + Py_DECREF(shift); shift = NULL; + Py_DECREF(mask); mask = NULL; + { + long idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(unsigned int) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((unsigned int) idigit) << bits; + } + if (!is_unsigned) { + if (unlikely(val & (((unsigned int) 1) << (sizeof(unsigned int) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif + if (unlikely(ret)) + return (unsigned int) -1; + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to unsigned int"); + return (unsigned int) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to unsigned int"); + return (unsigned int) -1; +} + +/* CIntToPy */ + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_char(char value) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const char neg_one = (char) -1, const_zero = (char) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(char) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(char) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(char) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(char) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(char) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + unsigned char *bytes = (unsigned char *)&value; +#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4 + if (is_unsigned) { + return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1); + } else { + return PyLong_FromNativeBytes(bytes, sizeof(value), -1); + } +#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 + int one = 1; int little = (int)*(unsigned char *)&one; + return _PyLong_FromByteArray(bytes, sizeof(char), + little, !is_unsigned); +#else + int one = 1; int little = (int)*(unsigned char *)&one; + PyObject *from_bytes, *result = NULL; + PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; + from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); + if (!from_bytes) return NULL; + py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(char)); + if (!py_bytes) goto limited_bad; + order_str = PyUnicode_FromString(little ? "little" : "big"); + if (!order_str) goto limited_bad; + arg_tuple = PyTuple_Pack(2, py_bytes, order_str); + if (!arg_tuple) goto limited_bad; + if (!is_unsigned) { + kwds = PyDict_New(); + if (!kwds) goto limited_bad; + if (PyDict_SetItemString(kwds, "signed", __Pyx_NewRef(Py_True))) goto limited_bad; + } + result = PyObject_Call(from_bytes, arg_tuple, kwds); + limited_bad: + Py_XDECREF(kwds); + Py_XDECREF(arg_tuple); + Py_XDECREF(order_str); + Py_XDECREF(py_bytes); + Py_XDECREF(from_bytes); + return result; +#endif + } +} + +/* CIntFromPy */ + static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const long neg_one = (long) -1, const_zero = (long) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if ((sizeof(long) < sizeof(long))) { + __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (long) val; + } + } +#endif + if (unlikely(!PyLong_Check(x))) { + long val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (long) -1; + val = __Pyx_PyInt_As_long(tmp); + Py_DECREF(tmp); + return val; + } + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + case 2: + if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 2 * PyLong_SHIFT)) { + return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 3: + if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 3 * PyLong_SHIFT)) { + return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 4: + if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 4 * PyLong_SHIFT)) { + return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + } + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (long) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if ((sizeof(long) <= sizeof(unsigned long))) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(long) <= sizeof(unsigned PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + case -2: + if ((8 * sizeof(long) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 2: + if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -3: + if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 3: + if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -4: + if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 4: + if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) { + return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + } + } +#endif + if ((sizeof(long) <= sizeof(long))) { + __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(long) <= sizeof(PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { + long val; + int ret = -1; +#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API + Py_ssize_t bytes_copied = PyLong_AsNativeBytes( + x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0)); + if (unlikely(bytes_copied == -1)) { + } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) { + goto raise_overflow; + } else { + ret = 0; + } +#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + ret = _PyLong_AsByteArray((PyLongObject *)x, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *v; + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (likely(PyLong_CheckExact(x))) { + v = __Pyx_NewRef(x); + } else { + v = PyNumber_Long(x); + if (unlikely(!v)) return (long) -1; + assert(PyLong_CheckExact(v)); + } + { + int result = PyObject_RichCompareBool(v, Py_False, Py_LT); + if (unlikely(result < 0)) { + Py_DECREF(v); + return (long) -1; + } + is_negative = result == 1; + } + if (is_unsigned && unlikely(is_negative)) { + Py_DECREF(v); + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + Py_DECREF(v); + if (unlikely(!stepval)) + return (long) -1; + } else { + stepval = v; + } + v = NULL; + val = (long) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(long) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + long idigit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + val |= ((long) idigit) << bits; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + } + Py_DECREF(shift); shift = NULL; + Py_DECREF(mask); mask = NULL; + { + long idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(long) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((long) idigit) << bits; + } + if (!is_unsigned) { + if (unlikely(val & (((long) 1) << (sizeof(long) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif + if (unlikely(ret)) + return (long) -1; + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to long"); + return (long) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to long"); + return (long) -1; +} + +/* FormatTypeName */ + #if CYTHON_COMPILING_IN_LIMITED_API +static __Pyx_TypeName +__Pyx_PyType_GetName(PyTypeObject* tp) +{ + PyObject *name = __Pyx_PyObject_GetAttrStr((PyObject *)tp, + __pyx_n_s_name); + if (unlikely(name == NULL) || unlikely(!PyUnicode_Check(name))) { + PyErr_Clear(); + Py_XDECREF(name); + name = __Pyx_NewRef(__pyx_n_s__59); + } + return name; +} +#endif + +/* FastTypeChecks */ + #if CYTHON_COMPILING_IN_CPYTHON +static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { + while (a) { + a = __Pyx_PyType_GetSlot(a, tp_base, PyTypeObject*); + if (a == b) + return 1; + } + return b == &PyBaseObject_Type; +} +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (a == b) return 1; + mro = a->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b) + return 1; + } + return 0; + } + return __Pyx_InBases(a, b); +} +static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (cls == a || cls == b) return 1; + mro = cls->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + PyObject *base = PyTuple_GET_ITEM(mro, i); + if (base == (PyObject *)a || base == (PyObject *)b) + return 1; + } + return 0; + } + return __Pyx_InBases(cls, a) || __Pyx_InBases(cls, b); +} +#if PY_MAJOR_VERSION == 2 +static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) { + PyObject *exception, *value, *tb; + int res; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&exception, &value, &tb); + res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0; + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + if (!res) { + res = PyObject_IsSubclass(err, exc_type2); + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + } + __Pyx_ErrRestore(exception, value, tb); + return res; +} +#else +static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) { + if (exc_type1) { + return __Pyx_IsAnySubtype2((PyTypeObject*)err, (PyTypeObject*)exc_type1, (PyTypeObject*)exc_type2); + } else { + return __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); + } +} +#endif +static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + assert(PyExceptionClass_Check(exc_type)); + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; i= 0x030B00A4 + return Py_Version & ~0xFFUL; +#else + const char* rt_version = Py_GetVersion(); + unsigned long version = 0; + unsigned long factor = 0x01000000UL; + unsigned int digit = 0; + int i = 0; + while (factor) { + while ('0' <= rt_version[i] && rt_version[i] <= '9') { + digit = digit * 10 + (unsigned int) (rt_version[i] - '0'); + ++i; + } + version += factor * digit; + if (rt_version[i] != '.') + break; + digit = 0; + factor >>= 8; + ++i; + } + return version; +#endif +} +static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer) { + const unsigned long MAJOR_MINOR = 0xFFFF0000UL; + if ((rt_version & MAJOR_MINOR) == (ct_version & MAJOR_MINOR)) + return 0; + if (likely(allow_newer && (rt_version & MAJOR_MINOR) > (ct_version & MAJOR_MINOR))) + return 1; + { + char message[200]; + PyOS_snprintf(message, sizeof(message), + "compile time Python version %d.%d " + "of module '%.100s' " + "%s " + "runtime version %d.%d", + (int) (ct_version >> 24), (int) ((ct_version >> 16) & 0xFF), + __Pyx_MODULE_NAME, + (allow_newer) ? "was newer than" : "does not match", + (int) (rt_version >> 24), (int) ((rt_version >> 16) & 0xFF) + ); + return PyErr_WarnEx(NULL, message, 1); + } +} + +/* InitStrings */ + #if PY_MAJOR_VERSION >= 3 +static int __Pyx_InitString(__Pyx_StringTabEntry t, PyObject **str) { + if (t.is_unicode | t.is_str) { + if (t.intern) { + *str = PyUnicode_InternFromString(t.s); + } else if (t.encoding) { + *str = PyUnicode_Decode(t.s, t.n - 1, t.encoding, NULL); + } else { + *str = PyUnicode_FromStringAndSize(t.s, t.n - 1); + } + } else { + *str = PyBytes_FromStringAndSize(t.s, t.n - 1); + } + if (!*str) + return -1; + if (PyObject_Hash(*str) == -1) + return -1; + return 0; +} +#endif +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { + while (t->p) { + #if PY_MAJOR_VERSION >= 3 + __Pyx_InitString(*t, t->p); + #else + if (t->is_unicode) { + *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); + } else if (t->intern) { + *t->p = PyString_InternFromString(t->s); + } else { + *t->p = PyString_FromStringAndSize(t->s, t->n - 1); + } + if (!*t->p) + return -1; + if (PyObject_Hash(*t->p) == -1) + return -1; + #endif + ++t; + } + return 0; +} + +#include +static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s) { + size_t len = strlen(s); + if (unlikely(len > (size_t) PY_SSIZE_T_MAX)) { + PyErr_SetString(PyExc_OverflowError, "byte string is too long"); + return -1; + } + return (Py_ssize_t) len; +} +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { + Py_ssize_t len = __Pyx_ssize_strlen(c_str); + if (unlikely(len < 0)) return NULL; + return __Pyx_PyUnicode_FromStringAndSize(c_str, len); +} +static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char* c_str) { + Py_ssize_t len = __Pyx_ssize_strlen(c_str); + if (unlikely(len < 0)) return NULL; + return PyByteArray_FromStringAndSize(c_str, len); +} +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) { + Py_ssize_t ignore; + return __Pyx_PyObject_AsStringAndSize(o, &ignore); +} +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +#if !CYTHON_PEP393_ENABLED +static const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + char* defenc_c; + PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); + if (!defenc) return NULL; + defenc_c = PyBytes_AS_STRING(defenc); +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + { + char* end = defenc_c + PyBytes_GET_SIZE(defenc); + char* c; + for (c = defenc_c; c < end; c++) { + if ((unsigned char) (*c) >= 128) { + PyUnicode_AsASCIIString(o); + return NULL; + } + } + } +#endif + *length = PyBytes_GET_SIZE(defenc); + return defenc_c; +} +#else +static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL; +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + if (likely(PyUnicode_IS_ASCII(o))) { + *length = PyUnicode_GET_LENGTH(o); + return PyUnicode_AsUTF8(o); + } else { + PyUnicode_AsASCIIString(o); + return NULL; + } +#else + return PyUnicode_AsUTF8AndSize(o, length); +#endif +} +#endif +#endif +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT + if ( +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + __Pyx_sys_getdefaultencoding_not_ascii && +#endif + PyUnicode_Check(o)) { + return __Pyx_PyUnicode_AsStringAndSize(o, length); + } else +#endif +#if (!CYTHON_COMPILING_IN_PYPY && !CYTHON_COMPILING_IN_LIMITED_API) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) + if (PyByteArray_Check(o)) { + *length = PyByteArray_GET_SIZE(o); + return PyByteArray_AS_STRING(o); + } else +#endif + { + char* result; + int r = PyBytes_AsStringAndSize(o, &result, length); + if (unlikely(r < 0)) { + return NULL; + } else { + return result; + } + } +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { + int is_true = x == Py_True; + if (is_true | (x == Py_False) | (x == Py_None)) return is_true; + else return PyObject_IsTrue(x); +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) { + int retval; + if (unlikely(!x)) return -1; + retval = __Pyx_PyObject_IsTrue(x); + Py_DECREF(x); + return retval; +} +static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) { + __Pyx_TypeName result_type_name = __Pyx_PyType_GetName(Py_TYPE(result)); +#if PY_MAJOR_VERSION >= 3 + if (PyLong_Check(result)) { + if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, + "__int__ returned non-int (type " __Pyx_FMT_TYPENAME "). " + "The ability to return an instance of a strict subclass of int is deprecated, " + "and may be removed in a future version of Python.", + result_type_name)) { + __Pyx_DECREF_TypeName(result_type_name); + Py_DECREF(result); + return NULL; + } + __Pyx_DECREF_TypeName(result_type_name); + return result; + } +#endif + PyErr_Format(PyExc_TypeError, + "__%.4s__ returned non-%.4s (type " __Pyx_FMT_TYPENAME ")", + type_name, type_name, result_type_name); + __Pyx_DECREF_TypeName(result_type_name); + Py_DECREF(result); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) { +#if CYTHON_USE_TYPE_SLOTS + PyNumberMethods *m; +#endif + const char *name = NULL; + PyObject *res = NULL; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x) || PyLong_Check(x))) +#else + if (likely(PyLong_Check(x))) +#endif + return __Pyx_NewRef(x); +#if CYTHON_USE_TYPE_SLOTS + m = Py_TYPE(x)->tp_as_number; + #if PY_MAJOR_VERSION < 3 + if (m && m->nb_int) { + name = "int"; + res = m->nb_int(x); + } + else if (m && m->nb_long) { + name = "long"; + res = m->nb_long(x); + } + #else + if (likely(m && m->nb_int)) { + name = "int"; + res = m->nb_int(x); + } + #endif +#else + if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) { + res = PyNumber_Int(x); + } +#endif + if (likely(res)) { +#if PY_MAJOR_VERSION < 3 + if (unlikely(!PyInt_Check(res) && !PyLong_Check(res))) { +#else + if (unlikely(!PyLong_CheckExact(res))) { +#endif + return __Pyx_PyNumber_IntOrLongWrongResultType(res, name); + } + } + else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_TypeError, + "an integer is required"); + } + return res; +} +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { + Py_ssize_t ival; + PyObject *x; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(b))) { + if (sizeof(Py_ssize_t) >= sizeof(long)) + return PyInt_AS_LONG(b); + else + return PyInt_AsSsize_t(b); + } +#endif + if (likely(PyLong_CheckExact(b))) { + #if CYTHON_USE_PYLONG_INTERNALS + if (likely(__Pyx_PyLong_IsCompact(b))) { + return __Pyx_PyLong_CompactValue(b); + } else { + const digit* digits = __Pyx_PyLong_Digits(b); + const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(b); + switch (size) { + case 2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + } + } + #endif + return PyLong_AsSsize_t(b); + } + x = PyNumber_Index(b); + if (!x) return -1; + ival = PyInt_AsSsize_t(x); + Py_DECREF(x); + return ival; +} +static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject* o) { + if (sizeof(Py_hash_t) == sizeof(Py_ssize_t)) { + return (Py_hash_t) __Pyx_PyIndex_AsSsize_t(o); +#if PY_MAJOR_VERSION < 3 + } else if (likely(PyInt_CheckExact(o))) { + return PyInt_AS_LONG(o); +#endif + } else { + Py_ssize_t ival; + PyObject *x; + x = PyNumber_Index(o); + if (!x) return -1; + ival = PyInt_AsLong(x); + Py_DECREF(x); + return ival; + } +} +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) { + return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False); +} +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { + return PyInt_FromSize_t(ival); +} + + +/* #### Code section: utility_code_pragmas_end ### */ +#ifdef _MSC_VER +#pragma warning( pop ) +#endif + + + +/* #### Code section: end ### */ +#endif /* Py_PYTHON_H */ diff --git a/nw_ec_alignx.cpython-310-darwin.so b/nw_ec_alignx.cpython-310-darwin.so new file mode 100755 index 0000000..a889c66 Binary files /dev/null and b/nw_ec_alignx.cpython-310-darwin.so differ diff --git a/nw_ec_alignx.pyx b/nw_ec_alignx.pyx index cb17426..a1a1e3b 100644 --- a/nw_ec_alignx.pyx +++ b/nw_ec_alignx.pyx @@ -23,15 +23,16 @@ cimport cython from cpython cimport bool import numpy as np cimport numpy as np +from numpy cimport int32_t, float64_t from libc.stdlib cimport rand from libc.math cimport copysignf cdef extern from "limits.h": int INT_MAX -DTYPE = np.int -ctypedef np.int_t DTYPE_t -DTYPEF = np.float -ctypedef np.float_t DTYPEF_t +DTYPE = np.int32 +ctypedef np.int32_t DTYPE_t +DTYPEF = np.float64 +ctypedef np.float64_t DTYPEF_t cdef minarg(float f[3]): diff --git a/output.txt b/output.txt new file mode 100644 index 0000000..a961bd4 --- /dev/null +++ b/output.txt @@ -0,0 +1,2775 @@ +02dc3392bbd45d671126d2e428e44aaf 06d08190476d4cc80d11c337aafbab11 0.15259653329849243 +02dc3392bbd45d671126d2e428e44aaf 06f2c2918a786f90eb7f3a527c2c8f39 0.15613166987895966 +02dc3392bbd45d671126d2e428e44aaf 108b663854e719ad9815683df54886ac 0.08653846383094788 +02dc3392bbd45d671126d2e428e44aaf 115601c3c552e86c3ef594bf3c83ddb2 0.15259653329849243 +02dc3392bbd45d671126d2e428e44aaf 116e48c1ba1b6c86601c402022615156 0.1550511121749878 +02dc3392bbd45d671126d2e428e44aaf 124fd5acf900552fc3baaabcdd7f5244 0.17025338113307953 +02dc3392bbd45d671126d2e428e44aaf 14a77e7ca65232bb55745938eec7985d 0.3667844235897064 +02dc3392bbd45d671126d2e428e44aaf 15b29aacd690aae3b3090a490c8cdc19 0.24544353783130646 +02dc3392bbd45d671126d2e428e44aaf 179c66c2fe46ba14dab5bc400006a4eb 0.13445210456848145 +02dc3392bbd45d671126d2e428e44aaf 206baa3e0dd353fafdf2c44a56a8f979 0.1855701059103012 +02dc3392bbd45d671126d2e428e44aaf 22caa464d134048a0ce7feadcfbaf985 0.17180734872817993 +02dc3392bbd45d671126d2e428e44aaf 2594c18153258d768d72ca37db992969 0.15657344460487366 +02dc3392bbd45d671126d2e428e44aaf 308c12f2c65e3b38fab8d3e6623dc423 0.2276715636253357 +02dc3392bbd45d671126d2e428e44aaf 34db7b31435da7851e6e1ff442a302f3 0.18693384528160095 +02dc3392bbd45d671126d2e428e44aaf 369db8943bdb18f238aa1561a6e1de9f 0.18835145235061646 +02dc3392bbd45d671126d2e428e44aaf 3c062536401ebeab239c2490e6d3efea 0.2496812343597412 +02dc3392bbd45d671126d2e428e44aaf 3fd08461a5678f97083d0ab80980d24e 0.22981683909893036 +02dc3392bbd45d671126d2e428e44aaf 44e35311e08456d21bf5f156f7a1b960 0.0 +02dc3392bbd45d671126d2e428e44aaf 45cd7ce66538ba76795c7cd8a97cd55d 0.18796296417713165 +02dc3392bbd45d671126d2e428e44aaf 482b7596f48574470f00a5e161ed8eb3 0.21408730745315552 +02dc3392bbd45d671126d2e428e44aaf 4862f7aa77b183b09b99933c37a6d238 0.1855701059103012 +02dc3392bbd45d671126d2e428e44aaf 4b2c76d6e1325bba41014003df684a1d 0.15259653329849243 +02dc3392bbd45d671126d2e428e44aaf 4e4c5ae156d9bb517532c7d1aa8099f6 0.17180734872817993 +02dc3392bbd45d671126d2e428e44aaf 4e4e18c588fc35b5f1a99bc147e77020 0.1502920538187027 +02dc3392bbd45d671126d2e428e44aaf 51de8a0c2b635cb654a2d81d4d0147ad 0.1550511121749878 +02dc3392bbd45d671126d2e428e44aaf 521a975b888d41a0eb82a0d67464979b 0.17964527010917664 +02dc3392bbd45d671126d2e428e44aaf 554ec45b177292cd26daed0902a89a24 0.09980769455432892 +02dc3392bbd45d671126d2e428e44aaf 57e5a176ff73dde428390003172fdffb 0.21074682474136353 +02dc3392bbd45d671126d2e428e44aaf 590e8de05fd1cecc79347f1257a7c14c 0.18267706036567688 +02dc3392bbd45d671126d2e428e44aaf 61114735a84894739ff1a386694d9287 0.18103894591331482 +02dc3392bbd45d671126d2e428e44aaf 66b3fd3631119304322f51a077d216a8 0.1607804298400879 +02dc3392bbd45d671126d2e428e44aaf 66eabd96e837bc63970b8b43dc3e7d59 0.1501103937625885 +02dc3392bbd45d671126d2e428e44aaf 677563d77f33dde9a437e9769cd97350 0.1502920538187027 +02dc3392bbd45d671126d2e428e44aaf 6c194f239694aec7cf630c1ad0e43db7 0.1501103937625885 +02dc3392bbd45d671126d2e428e44aaf 6c1ed97536601e49cd993c2c3dc0e628 0.1654205620288849 +02dc3392bbd45d671126d2e428e44aaf 6d3e5d85b2aa35d58347bb4b9b203e43 0.3667844235897064 +02dc3392bbd45d671126d2e428e44aaf 6dd32e33c78a21fef169e6423c91dfcd 0.2054545283317566 +02dc3392bbd45d671126d2e428e44aaf 712ceab0f39ef3518910c2244af3d58f 0.15657344460487366 +02dc3392bbd45d671126d2e428e44aaf 8423cb55f94b74aff6335ffc08e1ffa0 0.07740384340286255 +02dc3392bbd45d671126d2e428e44aaf 857b927ef6cfe28868c7f0b4beb0f9c5 0.1502920538187027 +02dc3392bbd45d671126d2e428e44aaf 88aa65483a9d0d188a09ae32f835fbd5 0.20509906113147736 +02dc3392bbd45d671126d2e428e44aaf 8ec183a3479d0541d4b13cff95940cee 0.21408730745315552 +02dc3392bbd45d671126d2e428e44aaf 8f3fb318e9afc95f071ac38522976b1b 0.17180734872817993 +02dc3392bbd45d671126d2e428e44aaf 9374803bb59357889b692ca61dd87b48 0.18201327323913574 +02dc3392bbd45d671126d2e428e44aaf 946b5f1cf84bc4409e87cbd1ee0ef26a 0.13445210456848145 +02dc3392bbd45d671126d2e428e44aaf 955c2ad95941c2cab740e78216da597c 0.1855701059103012 +02dc3392bbd45d671126d2e428e44aaf 9620df9ac2a3839d04df86692d43528f 0.18689115345478058 +02dc3392bbd45d671126d2e428e44aaf a04dff74cc5e783025a349d32f5ce915 0.1855701059103012 +02dc3392bbd45d671126d2e428e44aaf a2c496dfec8a1bf1f2a450e699b829ad 0.1872519850730896 +02dc3392bbd45d671126d2e428e44aaf ad8a15dd4bde7a1d96e95da04e910853 0.18796296417713165 +02dc3392bbd45d671126d2e428e44aaf af2135763c26212ed95a8a891c7dfca3 0.1607804298400879 +02dc3392bbd45d671126d2e428e44aaf b4c9b3e8f6e5852ee29efa686ffcdca0 0.21408730745315552 +02dc3392bbd45d671126d2e428e44aaf b521d9b8e55a26909e3ac0292b42d8f3 0.0 +02dc3392bbd45d671126d2e428e44aaf b8783f557b3ed4a9b4269539b1583419 0.20741499960422516 +02dc3392bbd45d671126d2e428e44aaf bd2031065307a5b5b38ea208e314d340 0.18796296417713165 +02dc3392bbd45d671126d2e428e44aaf bf4312f7e11603ff2ae87587fcebbc9c 0.13445210456848145 +02dc3392bbd45d671126d2e428e44aaf c13e1b0a3d3829bf266d9a2162207b28 0.15259653329849243 +02dc3392bbd45d671126d2e428e44aaf c6fe12ce4cddb1b8423b63e6dfad808b 0.26070019602775574 +02dc3392bbd45d671126d2e428e44aaf cb8d96ae1287284021e9038a79bf3131 0.2054545283317566 +02dc3392bbd45d671126d2e428e44aaf ccda3b30480708f505105d95da0bfb62 0.1626991182565689 +02dc3392bbd45d671126d2e428e44aaf d8e6b7b0368832247dbc5acab0fa4971 0.23704902827739716 +02dc3392bbd45d671126d2e428e44aaf dfa3146f46afd34506e6a71e0ec8b111 0.18696226179599762 +02dc3392bbd45d671126d2e428e44aaf e238a64ed05a08249266e0e5839548e5 0.23677034676074982 +02dc3392bbd45d671126d2e428e44aaf e396578f1078dd14484f24e821e31f7b 0.1971607655286789 +02dc3392bbd45d671126d2e428e44aaf e5f50fc1871b817d772009a19b1a639a 0.30490967631340027 +02dc3392bbd45d671126d2e428e44aaf e645222fbec3f59af2ffb3b22123ac56 0.2276715636253357 +02dc3392bbd45d671126d2e428e44aaf e956cc2ce89bd8b63426fbab21f2f2e6 0.09980769455432892 +02dc3392bbd45d671126d2e428e44aaf ecbbb5fea0464f857d513de5c23423f1 0.17180734872817993 +02dc3392bbd45d671126d2e428e44aaf f41879b82690dbbd64eba913bb60b084 0.1502920538187027 +02dc3392bbd45d671126d2e428e44aaf f4b3941d7d57b2f17e1f22ec3077cc57 0.24544353783130646 +02dc3392bbd45d671126d2e428e44aaf f64340086bf5617b5b73684e79e6851c 0.1855701059103012 +02dc3392bbd45d671126d2e428e44aaf f67c4609c1e7a5fa403de7e22c501457 0.18201327323913574 +02dc3392bbd45d671126d2e428e44aaf fd032fad609be92a9a9d2a36e2e03faa 0.1855701059103012 +02dc3392bbd45d671126d2e428e44aaf fe888f4b12c0b05171796bd6d1b4f590 0.13445210456848145 +06d08190476d4cc80d11c337aafbab11 06f2c2918a786f90eb7f3a527c2c8f39 0.19083702564239502 +06d08190476d4cc80d11c337aafbab11 108b663854e719ad9815683df54886ac 0.1527027040719986 +06d08190476d4cc80d11c337aafbab11 115601c3c552e86c3ef594bf3c83ddb2 0.0 +06d08190476d4cc80d11c337aafbab11 116e48c1ba1b6c86601c402022615156 0.1764553040266037 +06d08190476d4cc80d11c337aafbab11 124fd5acf900552fc3baaabcdd7f5244 0.17113526165485382 +06d08190476d4cc80d11c337aafbab11 14a77e7ca65232bb55745938eec7985d 0.3163369596004486 +06d08190476d4cc80d11c337aafbab11 15b29aacd690aae3b3090a490c8cdc19 0.2078142762184143 +06d08190476d4cc80d11c337aafbab11 179c66c2fe46ba14dab5bc400006a4eb 0.172338604927063 +06d08190476d4cc80d11c337aafbab11 206baa3e0dd353fafdf2c44a56a8f979 0.16565217077732086 +06d08190476d4cc80d11c337aafbab11 22caa464d134048a0ce7feadcfbaf985 0.18816205859184265 +06d08190476d4cc80d11c337aafbab11 2594c18153258d768d72ca37db992969 0.1805555522441864 +06d08190476d4cc80d11c337aafbab11 308c12f2c65e3b38fab8d3e6623dc423 0.16624999046325684 +06d08190476d4cc80d11c337aafbab11 34db7b31435da7851e6e1ff442a302f3 0.2149251103401184 +06d08190476d4cc80d11c337aafbab11 369db8943bdb18f238aa1561a6e1de9f 0.17076271772384644 +06d08190476d4cc80d11c337aafbab11 3c062536401ebeab239c2490e6d3efea 0.21629519760608673 +06d08190476d4cc80d11c337aafbab11 3fd08461a5678f97083d0ab80980d24e 0.25520962476730347 +06d08190476d4cc80d11c337aafbab11 44e35311e08456d21bf5f156f7a1b960 0.15259653329849243 +06d08190476d4cc80d11c337aafbab11 45cd7ce66538ba76795c7cd8a97cd55d 0.20825892686843872 +06d08190476d4cc80d11c337aafbab11 482b7596f48574470f00a5e161ed8eb3 0.20360226929187775 +06d08190476d4cc80d11c337aafbab11 4862f7aa77b183b09b99933c37a6d238 0.16565217077732086 +06d08190476d4cc80d11c337aafbab11 4b2c76d6e1325bba41014003df684a1d 0.0 +06d08190476d4cc80d11c337aafbab11 4e4c5ae156d9bb517532c7d1aa8099f6 0.18816205859184265 +06d08190476d4cc80d11c337aafbab11 4e4e18c588fc35b5f1a99bc147e77020 0.1795157790184021 +06d08190476d4cc80d11c337aafbab11 51de8a0c2b635cb654a2d81d4d0147ad 0.1764553040266037 +06d08190476d4cc80d11c337aafbab11 521a975b888d41a0eb82a0d67464979b 0.19514106214046478 +06d08190476d4cc80d11c337aafbab11 554ec45b177292cd26daed0902a89a24 0.15917792916297913 +06d08190476d4cc80d11c337aafbab11 57e5a176ff73dde428390003172fdffb 0.20021428167819977 +06d08190476d4cc80d11c337aafbab11 590e8de05fd1cecc79347f1257a7c14c 0.1623644381761551 +06d08190476d4cc80d11c337aafbab11 61114735a84894739ff1a386694d9287 0.18744173645973206 +06d08190476d4cc80d11c337aafbab11 66b3fd3631119304322f51a077d216a8 0.2031242847442627 +06d08190476d4cc80d11c337aafbab11 66eabd96e837bc63970b8b43dc3e7d59 0.1738334596157074 +06d08190476d4cc80d11c337aafbab11 677563d77f33dde9a437e9769cd97350 0.1795157790184021 +06d08190476d4cc80d11c337aafbab11 6c194f239694aec7cf630c1ad0e43db7 0.1738334596157074 +06d08190476d4cc80d11c337aafbab11 6c1ed97536601e49cd993c2c3dc0e628 0.21185897290706635 +06d08190476d4cc80d11c337aafbab11 6d3e5d85b2aa35d58347bb4b9b203e43 0.3163369596004486 +06d08190476d4cc80d11c337aafbab11 6dd32e33c78a21fef169e6423c91dfcd 0.2336372584104538 +06d08190476d4cc80d11c337aafbab11 712ceab0f39ef3518910c2244af3d58f 0.1805555522441864 +06d08190476d4cc80d11c337aafbab11 8423cb55f94b74aff6335ffc08e1ffa0 0.14464005827903748 +06d08190476d4cc80d11c337aafbab11 857b927ef6cfe28868c7f0b4beb0f9c5 0.1795157790184021 +06d08190476d4cc80d11c337aafbab11 88aa65483a9d0d188a09ae32f835fbd5 0.17630967497825623 +06d08190476d4cc80d11c337aafbab11 8ec183a3479d0541d4b13cff95940cee 0.20360226929187775 +06d08190476d4cc80d11c337aafbab11 8f3fb318e9afc95f071ac38522976b1b 0.18816205859184265 +06d08190476d4cc80d11c337aafbab11 9374803bb59357889b692ca61dd87b48 0.20324721932411194 +06d08190476d4cc80d11c337aafbab11 946b5f1cf84bc4409e87cbd1ee0ef26a 0.172338604927063 +06d08190476d4cc80d11c337aafbab11 955c2ad95941c2cab740e78216da597c 0.16565217077732086 +06d08190476d4cc80d11c337aafbab11 9620df9ac2a3839d04df86692d43528f 0.16711045801639557 +06d08190476d4cc80d11c337aafbab11 a04dff74cc5e783025a349d32f5ce915 0.16565217077732086 +06d08190476d4cc80d11c337aafbab11 a2c496dfec8a1bf1f2a450e699b829ad 0.17113526165485382 +06d08190476d4cc80d11c337aafbab11 ad8a15dd4bde7a1d96e95da04e910853 0.20825892686843872 +06d08190476d4cc80d11c337aafbab11 af2135763c26212ed95a8a891c7dfca3 0.2031242847442627 +06d08190476d4cc80d11c337aafbab11 b4c9b3e8f6e5852ee29efa686ffcdca0 0.20360226929187775 +06d08190476d4cc80d11c337aafbab11 b521d9b8e55a26909e3ac0292b42d8f3 0.15259653329849243 +06d08190476d4cc80d11c337aafbab11 b8783f557b3ed4a9b4269539b1583419 0.20376601815223694 +06d08190476d4cc80d11c337aafbab11 bd2031065307a5b5b38ea208e314d340 0.20825892686843872 +06d08190476d4cc80d11c337aafbab11 bf4312f7e11603ff2ae87587fcebbc9c 0.172338604927063 +06d08190476d4cc80d11c337aafbab11 c13e1b0a3d3829bf266d9a2162207b28 0.0 +06d08190476d4cc80d11c337aafbab11 c6fe12ce4cddb1b8423b63e6dfad808b 0.22618980705738068 +06d08190476d4cc80d11c337aafbab11 cb8d96ae1287284021e9038a79bf3131 0.2336372584104538 +06d08190476d4cc80d11c337aafbab11 ccda3b30480708f505105d95da0bfb62 0.15576370060443878 +06d08190476d4cc80d11c337aafbab11 d8e6b7b0368832247dbc5acab0fa4971 0.26001477241516113 +06d08190476d4cc80d11c337aafbab11 dfa3146f46afd34506e6a71e0ec8b111 0.1996607631444931 +06d08190476d4cc80d11c337aafbab11 e238a64ed05a08249266e0e5839548e5 0.20831280946731567 +06d08190476d4cc80d11c337aafbab11 e396578f1078dd14484f24e821e31f7b 0.2251555621623993 +06d08190476d4cc80d11c337aafbab11 e5f50fc1871b817d772009a19b1a639a 0.3215883672237396 +06d08190476d4cc80d11c337aafbab11 e645222fbec3f59af2ffb3b22123ac56 0.16624999046325684 +06d08190476d4cc80d11c337aafbab11 e956cc2ce89bd8b63426fbab21f2f2e6 0.15917792916297913 +06d08190476d4cc80d11c337aafbab11 ecbbb5fea0464f857d513de5c23423f1 0.18816205859184265 +06d08190476d4cc80d11c337aafbab11 f41879b82690dbbd64eba913bb60b084 0.1795157790184021 +06d08190476d4cc80d11c337aafbab11 f4b3941d7d57b2f17e1f22ec3077cc57 0.2078142762184143 +06d08190476d4cc80d11c337aafbab11 f64340086bf5617b5b73684e79e6851c 0.16565217077732086 +06d08190476d4cc80d11c337aafbab11 f67c4609c1e7a5fa403de7e22c501457 0.20324721932411194 +06d08190476d4cc80d11c337aafbab11 fd032fad609be92a9a9d2a36e2e03faa 0.16565217077732086 +06d08190476d4cc80d11c337aafbab11 fe888f4b12c0b05171796bd6d1b4f590 0.172338604927063 +06f2c2918a786f90eb7f3a527c2c8f39 108b663854e719ad9815683df54886ac 0.1314285695552826 +06f2c2918a786f90eb7f3a527c2c8f39 115601c3c552e86c3ef594bf3c83ddb2 0.19083702564239502 +06f2c2918a786f90eb7f3a527c2c8f39 116e48c1ba1b6c86601c402022615156 0.16761904954910278 +06f2c2918a786f90eb7f3a527c2c8f39 124fd5acf900552fc3baaabcdd7f5244 0.15555556118488312 +06f2c2918a786f90eb7f3a527c2c8f39 14a77e7ca65232bb55745938eec7985d 0.37338632345199585 +06f2c2918a786f90eb7f3a527c2c8f39 15b29aacd690aae3b3090a490c8cdc19 0.2768675684928894 +06f2c2918a786f90eb7f3a527c2c8f39 179c66c2fe46ba14dab5bc400006a4eb 0.13467085361480713 +06f2c2918a786f90eb7f3a527c2c8f39 206baa3e0dd353fafdf2c44a56a8f979 0.1684090793132782 +06f2c2918a786f90eb7f3a527c2c8f39 22caa464d134048a0ce7feadcfbaf985 0.15654204785823822 +06f2c2918a786f90eb7f3a527c2c8f39 2594c18153258d768d72ca37db992969 0.061538465321063995 +06f2c2918a786f90eb7f3a527c2c8f39 308c12f2c65e3b38fab8d3e6623dc423 0.255733460187912 +06f2c2918a786f90eb7f3a527c2c8f39 34db7b31435da7851e6e1ff442a302f3 0.17144687473773956 +06f2c2918a786f90eb7f3a527c2c8f39 369db8943bdb18f238aa1561a6e1de9f 0.1666666716337204 +06f2c2918a786f90eb7f3a527c2c8f39 3c062536401ebeab239c2490e6d3efea 0.23257918655872345 +06f2c2918a786f90eb7f3a527c2c8f39 3fd08461a5678f97083d0ab80980d24e 0.2221708446741104 +06f2c2918a786f90eb7f3a527c2c8f39 44e35311e08456d21bf5f156f7a1b960 0.15613166987895966 +06f2c2918a786f90eb7f3a527c2c8f39 45cd7ce66538ba76795c7cd8a97cd55d 0.1792634278535843 +06f2c2918a786f90eb7f3a527c2c8f39 482b7596f48574470f00a5e161ed8eb3 0.1654205620288849 +06f2c2918a786f90eb7f3a527c2c8f39 4862f7aa77b183b09b99933c37a6d238 0.1684090793132782 +06f2c2918a786f90eb7f3a527c2c8f39 4b2c76d6e1325bba41014003df684a1d 0.19083702564239502 +06f2c2918a786f90eb7f3a527c2c8f39 4e4c5ae156d9bb517532c7d1aa8099f6 0.15654204785823822 +06f2c2918a786f90eb7f3a527c2c8f39 4e4e18c588fc35b5f1a99bc147e77020 0.14430402219295502 +06f2c2918a786f90eb7f3a527c2c8f39 51de8a0c2b635cb654a2d81d4d0147ad 0.16761904954910278 +06f2c2918a786f90eb7f3a527c2c8f39 521a975b888d41a0eb82a0d67464979b 0.18073394894599915 +06f2c2918a786f90eb7f3a527c2c8f39 554ec45b177292cd26daed0902a89a24 0.11456310749053955 +06f2c2918a786f90eb7f3a527c2c8f39 57e5a176ff73dde428390003172fdffb 0.23967212438583374 +06f2c2918a786f90eb7f3a527c2c8f39 590e8de05fd1cecc79347f1257a7c14c 0.19074712693691254 +06f2c2918a786f90eb7f3a527c2c8f39 61114735a84894739ff1a386694d9287 0.1654205620288849 +06f2c2918a786f90eb7f3a527c2c8f39 66b3fd3631119304322f51a077d216a8 0.1654205620288849 +06f2c2918a786f90eb7f3a527c2c8f39 66eabd96e837bc63970b8b43dc3e7d59 0.13525640964508057 +06f2c2918a786f90eb7f3a527c2c8f39 677563d77f33dde9a437e9769cd97350 0.14430402219295502 +06f2c2918a786f90eb7f3a527c2c8f39 6c194f239694aec7cf630c1ad0e43db7 0.13525640964508057 +06f2c2918a786f90eb7f3a527c2c8f39 6c1ed97536601e49cd993c2c3dc0e628 0.175471693277359 +06f2c2918a786f90eb7f3a527c2c8f39 6d3e5d85b2aa35d58347bb4b9b203e43 0.37338632345199585 +06f2c2918a786f90eb7f3a527c2c8f39 6dd32e33c78a21fef169e6423c91dfcd 0.19738663733005524 +06f2c2918a786f90eb7f3a527c2c8f39 712ceab0f39ef3518910c2244af3d58f 0.061538465321063995 +06f2c2918a786f90eb7f3a527c2c8f39 8423cb55f94b74aff6335ffc08e1ffa0 0.15297062695026398 +06f2c2918a786f90eb7f3a527c2c8f39 857b927ef6cfe28868c7f0b4beb0f9c5 0.14430402219295502 +06f2c2918a786f90eb7f3a527c2c8f39 88aa65483a9d0d188a09ae32f835fbd5 0.12858152389526367 +06f2c2918a786f90eb7f3a527c2c8f39 8ec183a3479d0541d4b13cff95940cee 0.1654205620288849 +06f2c2918a786f90eb7f3a527c2c8f39 8f3fb318e9afc95f071ac38522976b1b 0.15654204785823822 +06f2c2918a786f90eb7f3a527c2c8f39 9374803bb59357889b692ca61dd87b48 0.1726612150669098 +06f2c2918a786f90eb7f3a527c2c8f39 946b5f1cf84bc4409e87cbd1ee0ef26a 0.13467085361480713 +06f2c2918a786f90eb7f3a527c2c8f39 955c2ad95941c2cab740e78216da597c 0.1684090793132782 +06f2c2918a786f90eb7f3a527c2c8f39 9620df9ac2a3839d04df86692d43528f 0.18440933525562286 +06f2c2918a786f90eb7f3a527c2c8f39 a04dff74cc5e783025a349d32f5ce915 0.1684090793132782 +06f2c2918a786f90eb7f3a527c2c8f39 a2c496dfec8a1bf1f2a450e699b829ad 0.17201834917068481 +06f2c2918a786f90eb7f3a527c2c8f39 ad8a15dd4bde7a1d96e95da04e910853 0.1792634278535843 +06f2c2918a786f90eb7f3a527c2c8f39 af2135763c26212ed95a8a891c7dfca3 0.1654205620288849 +06f2c2918a786f90eb7f3a527c2c8f39 b4c9b3e8f6e5852ee29efa686ffcdca0 0.1654205620288849 +06f2c2918a786f90eb7f3a527c2c8f39 b521d9b8e55a26909e3ac0292b42d8f3 0.15613166987895966 +06f2c2918a786f90eb7f3a527c2c8f39 b8783f557b3ed4a9b4269539b1583419 0.2290002405643463 +06f2c2918a786f90eb7f3a527c2c8f39 bd2031065307a5b5b38ea208e314d340 0.1792634278535843 +06f2c2918a786f90eb7f3a527c2c8f39 bf4312f7e11603ff2ae87587fcebbc9c 0.13467085361480713 +06f2c2918a786f90eb7f3a527c2c8f39 c13e1b0a3d3829bf266d9a2162207b28 0.19083702564239502 +06f2c2918a786f90eb7f3a527c2c8f39 c6fe12ce4cddb1b8423b63e6dfad808b 0.23078909516334534 +06f2c2918a786f90eb7f3a527c2c8f39 cb8d96ae1287284021e9038a79bf3131 0.19738663733005524 +06f2c2918a786f90eb7f3a527c2c8f39 ccda3b30480708f505105d95da0bfb62 0.17889611423015594 +06f2c2918a786f90eb7f3a527c2c8f39 d8e6b7b0368832247dbc5acab0fa4971 0.22624541819095612 +06f2c2918a786f90eb7f3a527c2c8f39 dfa3146f46afd34506e6a71e0ec8b111 0.15857142210006714 +06f2c2918a786f90eb7f3a527c2c8f39 e238a64ed05a08249266e0e5839548e5 0.2514200508594513 +06f2c2918a786f90eb7f3a527c2c8f39 e396578f1078dd14484f24e821e31f7b 0.1709090918302536 +06f2c2918a786f90eb7f3a527c2c8f39 e5f50fc1871b817d772009a19b1a639a 0.28428760170936584 +06f2c2918a786f90eb7f3a527c2c8f39 e645222fbec3f59af2ffb3b22123ac56 0.255733460187912 +06f2c2918a786f90eb7f3a527c2c8f39 e956cc2ce89bd8b63426fbab21f2f2e6 0.11456310749053955 +06f2c2918a786f90eb7f3a527c2c8f39 ecbbb5fea0464f857d513de5c23423f1 0.15654204785823822 +06f2c2918a786f90eb7f3a527c2c8f39 f41879b82690dbbd64eba913bb60b084 0.14430402219295502 +06f2c2918a786f90eb7f3a527c2c8f39 f4b3941d7d57b2f17e1f22ec3077cc57 0.2768675684928894 +06f2c2918a786f90eb7f3a527c2c8f39 f64340086bf5617b5b73684e79e6851c 0.1684090793132782 +06f2c2918a786f90eb7f3a527c2c8f39 f67c4609c1e7a5fa403de7e22c501457 0.1726612150669098 +06f2c2918a786f90eb7f3a527c2c8f39 fd032fad609be92a9a9d2a36e2e03faa 0.1684090793132782 +06f2c2918a786f90eb7f3a527c2c8f39 fe888f4b12c0b05171796bd6d1b4f590 0.13467085361480713 +108b663854e719ad9815683df54886ac 115601c3c552e86c3ef594bf3c83ddb2 0.1527027040719986 +108b663854e719ad9815683df54886ac 116e48c1ba1b6c86601c402022615156 0.13300971686840057 +108b663854e719ad9815683df54886ac 124fd5acf900552fc3baaabcdd7f5244 0.1467592567205429 +108b663854e719ad9815683df54886ac 14a77e7ca65232bb55745938eec7985d 0.3337605595588684 +108b663854e719ad9815683df54886ac 15b29aacd690aae3b3090a490c8cdc19 0.26110702753067017 +108b663854e719ad9815683df54886ac 179c66c2fe46ba14dab5bc400006a4eb 0.13080620765686035 +108b663854e719ad9815683df54886ac 206baa3e0dd353fafdf2c44a56a8f979 0.16227272152900696 +108b663854e719ad9815683df54886ac 22caa464d134048a0ce7feadcfbaf985 0.14766354858875275 +108b663854e719ad9815683df54886ac 2594c18153258d768d72ca37db992969 0.13878504931926727 +108b663854e719ad9815683df54886ac 308c12f2c65e3b38fab8d3e6623dc423 0.22944678366184235 +108b663854e719ad9815683df54886ac 34db7b31435da7851e6e1ff442a302f3 0.15434540808200836 +108b663854e719ad9815683df54886ac 369db8943bdb18f238aa1561a6e1de9f 0.17610618472099304 +108b663854e719ad9815683df54886ac 3c062536401ebeab239c2490e6d3efea 0.25281643867492676 +108b663854e719ad9815683df54886ac 3fd08461a5678f97083d0ab80980d24e 0.2071959674358368 +108b663854e719ad9815683df54886ac 44e35311e08456d21bf5f156f7a1b960 0.08653846383094788 +108b663854e719ad9815683df54886ac 45cd7ce66538ba76795c7cd8a97cd55d 0.18465425074100494 +108b663854e719ad9815683df54886ac 482b7596f48574470f00a5e161ed8eb3 0.18944953382015228 +108b663854e719ad9815683df54886ac 4862f7aa77b183b09b99933c37a6d238 0.16227272152900696 +108b663854e719ad9815683df54886ac 4b2c76d6e1325bba41014003df684a1d 0.1527027040719986 +108b663854e719ad9815683df54886ac 4e4c5ae156d9bb517532c7d1aa8099f6 0.14766354858875275 +108b663854e719ad9815683df54886ac 4e4e18c588fc35b5f1a99bc147e77020 0.1495238095521927 +108b663854e719ad9815683df54886ac 51de8a0c2b635cb654a2d81d4d0147ad 0.13300971686840057 +108b663854e719ad9815683df54886ac 521a975b888d41a0eb82a0d67464979b 0.17201834917068481 +108b663854e719ad9815683df54886ac 554ec45b177292cd26daed0902a89a24 0.04381188005208969 +108b663854e719ad9815683df54886ac 57e5a176ff73dde428390003172fdffb 0.2265983521938324 +108b663854e719ad9815683df54886ac 590e8de05fd1cecc79347f1257a7c14c 0.1858908087015152 +108b663854e719ad9815683df54886ac 61114735a84894739ff1a386694d9287 0.1502920538187027 +108b663854e719ad9815683df54886ac 66b3fd3631119304322f51a077d216a8 0.1314285695552826 +108b663854e719ad9815683df54886ac 66eabd96e837bc63970b8b43dc3e7d59 0.12620878219604492 +108b663854e719ad9815683df54886ac 677563d77f33dde9a437e9769cd97350 0.1495238095521927 +108b663854e719ad9815683df54886ac 6c194f239694aec7cf630c1ad0e43db7 0.12620878219604492 +108b663854e719ad9815683df54886ac 6c1ed97536601e49cd993c2c3dc0e628 0.14134615659713745 +108b663854e719ad9815683df54886ac 6d3e5d85b2aa35d58347bb4b9b203e43 0.3337605595588684 +108b663854e719ad9815683df54886ac 6dd32e33c78a21fef169e6423c91dfcd 0.21056810021400452 +108b663854e719ad9815683df54886ac 712ceab0f39ef3518910c2244af3d58f 0.13878504931926727 +108b663854e719ad9815683df54886ac 8423cb55f94b74aff6335ffc08e1ffa0 0.1133333295583725 +108b663854e719ad9815683df54886ac 857b927ef6cfe28868c7f0b4beb0f9c5 0.1495238095521927 +108b663854e719ad9815683df54886ac 88aa65483a9d0d188a09ae32f835fbd5 0.2016998529434204 +108b663854e719ad9815683df54886ac 8ec183a3479d0541d4b13cff95940cee 0.18944953382015228 +108b663854e719ad9815683df54886ac 8f3fb318e9afc95f071ac38522976b1b 0.14766354858875275 +108b663854e719ad9815683df54886ac 9374803bb59357889b692ca61dd87b48 0.1794992983341217 +108b663854e719ad9815683df54886ac 946b5f1cf84bc4409e87cbd1ee0ef26a 0.13080620765686035 +108b663854e719ad9815683df54886ac 955c2ad95941c2cab740e78216da597c 0.16227272152900696 +108b663854e719ad9815683df54886ac 9620df9ac2a3839d04df86692d43528f 0.1796630322933197 +108b663854e719ad9815683df54886ac a04dff74cc5e783025a349d32f5ce915 0.16227272152900696 +108b663854e719ad9815683df54886ac a2c496dfec8a1bf1f2a450e699b829ad 0.16330274939537048 +108b663854e719ad9815683df54886ac ad8a15dd4bde7a1d96e95da04e910853 0.18465425074100494 +108b663854e719ad9815683df54886ac af2135763c26212ed95a8a891c7dfca3 0.1314285695552826 +108b663854e719ad9815683df54886ac b4c9b3e8f6e5852ee29efa686ffcdca0 0.18944953382015228 +108b663854e719ad9815683df54886ac b521d9b8e55a26909e3ac0292b42d8f3 0.08653846383094788 +108b663854e719ad9815683df54886ac b8783f557b3ed4a9b4269539b1583419 0.2003573775291443 +108b663854e719ad9815683df54886ac bd2031065307a5b5b38ea208e314d340 0.18465425074100494 +108b663854e719ad9815683df54886ac bf4312f7e11603ff2ae87587fcebbc9c 0.13080620765686035 +108b663854e719ad9815683df54886ac c13e1b0a3d3829bf266d9a2162207b28 0.1527027040719986 +108b663854e719ad9815683df54886ac c6fe12ce4cddb1b8423b63e6dfad808b 0.23749999701976776 +108b663854e719ad9815683df54886ac cb8d96ae1287284021e9038a79bf3131 0.21056810021400452 +108b663854e719ad9815683df54886ac ccda3b30480708f505105d95da0bfb62 0.1664772778749466 +108b663854e719ad9815683df54886ac d8e6b7b0368832247dbc5acab0fa4971 0.22393366694450378 +108b663854e719ad9815683df54886ac dfa3146f46afd34506e6a71e0ec8b111 0.16650943458080292 +108b663854e719ad9815683df54886ac e238a64ed05a08249266e0e5839548e5 0.25359398126602173 +108b663854e719ad9815683df54886ac e396578f1078dd14484f24e821e31f7b 0.1709090918302536 +108b663854e719ad9815683df54886ac e5f50fc1871b817d772009a19b1a639a 0.2919854521751404 +108b663854e719ad9815683df54886ac e645222fbec3f59af2ffb3b22123ac56 0.22944678366184235 +108b663854e719ad9815683df54886ac e956cc2ce89bd8b63426fbab21f2f2e6 0.04381188005208969 +108b663854e719ad9815683df54886ac ecbbb5fea0464f857d513de5c23423f1 0.14766354858875275 +108b663854e719ad9815683df54886ac f41879b82690dbbd64eba913bb60b084 0.1495238095521927 +108b663854e719ad9815683df54886ac f4b3941d7d57b2f17e1f22ec3077cc57 0.26110702753067017 +108b663854e719ad9815683df54886ac f64340086bf5617b5b73684e79e6851c 0.16227272152900696 +108b663854e719ad9815683df54886ac f67c4609c1e7a5fa403de7e22c501457 0.1794992983341217 +108b663854e719ad9815683df54886ac fd032fad609be92a9a9d2a36e2e03faa 0.16227272152900696 +108b663854e719ad9815683df54886ac fe888f4b12c0b05171796bd6d1b4f590 0.13080620765686035 +115601c3c552e86c3ef594bf3c83ddb2 116e48c1ba1b6c86601c402022615156 0.1764553040266037 +115601c3c552e86c3ef594bf3c83ddb2 124fd5acf900552fc3baaabcdd7f5244 0.17113526165485382 +115601c3c552e86c3ef594bf3c83ddb2 14a77e7ca65232bb55745938eec7985d 0.3163369596004486 +115601c3c552e86c3ef594bf3c83ddb2 15b29aacd690aae3b3090a490c8cdc19 0.2078142762184143 +115601c3c552e86c3ef594bf3c83ddb2 179c66c2fe46ba14dab5bc400006a4eb 0.172338604927063 +115601c3c552e86c3ef594bf3c83ddb2 206baa3e0dd353fafdf2c44a56a8f979 0.16565217077732086 +115601c3c552e86c3ef594bf3c83ddb2 22caa464d134048a0ce7feadcfbaf985 0.18816205859184265 +115601c3c552e86c3ef594bf3c83ddb2 2594c18153258d768d72ca37db992969 0.1805555522441864 +115601c3c552e86c3ef594bf3c83ddb2 308c12f2c65e3b38fab8d3e6623dc423 0.16624999046325684 +115601c3c552e86c3ef594bf3c83ddb2 34db7b31435da7851e6e1ff442a302f3 0.2149251103401184 +115601c3c552e86c3ef594bf3c83ddb2 369db8943bdb18f238aa1561a6e1de9f 0.17076271772384644 +115601c3c552e86c3ef594bf3c83ddb2 3c062536401ebeab239c2490e6d3efea 0.21629519760608673 +115601c3c552e86c3ef594bf3c83ddb2 3fd08461a5678f97083d0ab80980d24e 0.25520962476730347 +115601c3c552e86c3ef594bf3c83ddb2 44e35311e08456d21bf5f156f7a1b960 0.15259653329849243 +115601c3c552e86c3ef594bf3c83ddb2 45cd7ce66538ba76795c7cd8a97cd55d 0.20825892686843872 +115601c3c552e86c3ef594bf3c83ddb2 482b7596f48574470f00a5e161ed8eb3 0.20360226929187775 +115601c3c552e86c3ef594bf3c83ddb2 4862f7aa77b183b09b99933c37a6d238 0.16565217077732086 +115601c3c552e86c3ef594bf3c83ddb2 4b2c76d6e1325bba41014003df684a1d 0.0 +115601c3c552e86c3ef594bf3c83ddb2 4e4c5ae156d9bb517532c7d1aa8099f6 0.18816205859184265 +115601c3c552e86c3ef594bf3c83ddb2 4e4e18c588fc35b5f1a99bc147e77020 0.1795157790184021 +115601c3c552e86c3ef594bf3c83ddb2 51de8a0c2b635cb654a2d81d4d0147ad 0.1764553040266037 +115601c3c552e86c3ef594bf3c83ddb2 521a975b888d41a0eb82a0d67464979b 0.19514106214046478 +115601c3c552e86c3ef594bf3c83ddb2 554ec45b177292cd26daed0902a89a24 0.15917792916297913 +115601c3c552e86c3ef594bf3c83ddb2 57e5a176ff73dde428390003172fdffb 0.20021428167819977 +115601c3c552e86c3ef594bf3c83ddb2 590e8de05fd1cecc79347f1257a7c14c 0.1623644381761551 +115601c3c552e86c3ef594bf3c83ddb2 61114735a84894739ff1a386694d9287 0.18744173645973206 +115601c3c552e86c3ef594bf3c83ddb2 66b3fd3631119304322f51a077d216a8 0.2031242847442627 +115601c3c552e86c3ef594bf3c83ddb2 66eabd96e837bc63970b8b43dc3e7d59 0.1738334596157074 +115601c3c552e86c3ef594bf3c83ddb2 677563d77f33dde9a437e9769cd97350 0.1795157790184021 +115601c3c552e86c3ef594bf3c83ddb2 6c194f239694aec7cf630c1ad0e43db7 0.1738334596157074 +115601c3c552e86c3ef594bf3c83ddb2 6c1ed97536601e49cd993c2c3dc0e628 0.21185897290706635 +115601c3c552e86c3ef594bf3c83ddb2 6d3e5d85b2aa35d58347bb4b9b203e43 0.3163369596004486 +115601c3c552e86c3ef594bf3c83ddb2 6dd32e33c78a21fef169e6423c91dfcd 0.2336372584104538 +115601c3c552e86c3ef594bf3c83ddb2 712ceab0f39ef3518910c2244af3d58f 0.1805555522441864 +115601c3c552e86c3ef594bf3c83ddb2 8423cb55f94b74aff6335ffc08e1ffa0 0.14464005827903748 +115601c3c552e86c3ef594bf3c83ddb2 857b927ef6cfe28868c7f0b4beb0f9c5 0.1795157790184021 +115601c3c552e86c3ef594bf3c83ddb2 88aa65483a9d0d188a09ae32f835fbd5 0.17630967497825623 +115601c3c552e86c3ef594bf3c83ddb2 8ec183a3479d0541d4b13cff95940cee 0.20360226929187775 +115601c3c552e86c3ef594bf3c83ddb2 8f3fb318e9afc95f071ac38522976b1b 0.18816205859184265 +115601c3c552e86c3ef594bf3c83ddb2 9374803bb59357889b692ca61dd87b48 0.20324721932411194 +115601c3c552e86c3ef594bf3c83ddb2 946b5f1cf84bc4409e87cbd1ee0ef26a 0.172338604927063 +115601c3c552e86c3ef594bf3c83ddb2 955c2ad95941c2cab740e78216da597c 0.16565217077732086 +115601c3c552e86c3ef594bf3c83ddb2 9620df9ac2a3839d04df86692d43528f 0.16711045801639557 +115601c3c552e86c3ef594bf3c83ddb2 a04dff74cc5e783025a349d32f5ce915 0.16565217077732086 +115601c3c552e86c3ef594bf3c83ddb2 a2c496dfec8a1bf1f2a450e699b829ad 0.17113526165485382 +115601c3c552e86c3ef594bf3c83ddb2 ad8a15dd4bde7a1d96e95da04e910853 0.20825892686843872 +115601c3c552e86c3ef594bf3c83ddb2 af2135763c26212ed95a8a891c7dfca3 0.2031242847442627 +115601c3c552e86c3ef594bf3c83ddb2 b4c9b3e8f6e5852ee29efa686ffcdca0 0.20360226929187775 +115601c3c552e86c3ef594bf3c83ddb2 b521d9b8e55a26909e3ac0292b42d8f3 0.15259653329849243 +115601c3c552e86c3ef594bf3c83ddb2 b8783f557b3ed4a9b4269539b1583419 0.20376601815223694 +115601c3c552e86c3ef594bf3c83ddb2 bd2031065307a5b5b38ea208e314d340 0.20825892686843872 +115601c3c552e86c3ef594bf3c83ddb2 bf4312f7e11603ff2ae87587fcebbc9c 0.172338604927063 +115601c3c552e86c3ef594bf3c83ddb2 c13e1b0a3d3829bf266d9a2162207b28 0.0 +115601c3c552e86c3ef594bf3c83ddb2 c6fe12ce4cddb1b8423b63e6dfad808b 0.22618980705738068 +115601c3c552e86c3ef594bf3c83ddb2 cb8d96ae1287284021e9038a79bf3131 0.2336372584104538 +115601c3c552e86c3ef594bf3c83ddb2 ccda3b30480708f505105d95da0bfb62 0.15576370060443878 +115601c3c552e86c3ef594bf3c83ddb2 d8e6b7b0368832247dbc5acab0fa4971 0.26001477241516113 +115601c3c552e86c3ef594bf3c83ddb2 dfa3146f46afd34506e6a71e0ec8b111 0.1996607631444931 +115601c3c552e86c3ef594bf3c83ddb2 e238a64ed05a08249266e0e5839548e5 0.20831280946731567 +115601c3c552e86c3ef594bf3c83ddb2 e396578f1078dd14484f24e821e31f7b 0.2251555621623993 +115601c3c552e86c3ef594bf3c83ddb2 e5f50fc1871b817d772009a19b1a639a 0.3215883672237396 +115601c3c552e86c3ef594bf3c83ddb2 e645222fbec3f59af2ffb3b22123ac56 0.16624999046325684 +115601c3c552e86c3ef594bf3c83ddb2 e956cc2ce89bd8b63426fbab21f2f2e6 0.15917792916297913 +115601c3c552e86c3ef594bf3c83ddb2 ecbbb5fea0464f857d513de5c23423f1 0.18816205859184265 +115601c3c552e86c3ef594bf3c83ddb2 f41879b82690dbbd64eba913bb60b084 0.1795157790184021 +115601c3c552e86c3ef594bf3c83ddb2 f4b3941d7d57b2f17e1f22ec3077cc57 0.2078142762184143 +115601c3c552e86c3ef594bf3c83ddb2 f64340086bf5617b5b73684e79e6851c 0.16565217077732086 +115601c3c552e86c3ef594bf3c83ddb2 f67c4609c1e7a5fa403de7e22c501457 0.20324721932411194 +115601c3c552e86c3ef594bf3c83ddb2 fd032fad609be92a9a9d2a36e2e03faa 0.16565217077732086 +115601c3c552e86c3ef594bf3c83ddb2 fe888f4b12c0b05171796bd6d1b4f590 0.172338604927063 +116e48c1ba1b6c86601c402022615156 124fd5acf900552fc3baaabcdd7f5244 0.09738095104694366 +116e48c1ba1b6c86601c402022615156 14a77e7ca65232bb55745938eec7985d 0.381498247385025 +116e48c1ba1b6c86601c402022615156 15b29aacd690aae3b3090a490c8cdc19 0.29116126894950867 +116e48c1ba1b6c86601c402022615156 179c66c2fe46ba14dab5bc400006a4eb 0.1623992621898651 +116e48c1ba1b6c86601c402022615156 206baa3e0dd353fafdf2c44a56a8f979 0.18073394894599915 +116e48c1ba1b6c86601c402022615156 22caa464d134048a0ce7feadcfbaf985 0.08033980429172516 +116e48c1ba1b6c86601c402022615156 2594c18153258d768d72ca37db992969 0.15754717588424683 +116e48c1ba1b6c86601c402022615156 308c12f2c65e3b38fab8d3e6623dc423 0.2528011202812195 +116e48c1ba1b6c86601c402022615156 34db7b31435da7851e6e1ff442a302f3 0.1642722338438034 +116e48c1ba1b6c86601c402022615156 369db8943bdb18f238aa1561a6e1de9f 0.14481982588768005 +116e48c1ba1b6c86601c402022615156 3c062536401ebeab239c2490e6d3efea 0.26642560958862305 +116e48c1ba1b6c86601c402022615156 3fd08461a5678f97083d0ab80980d24e 0.21391277015209198 +116e48c1ba1b6c86601c402022615156 44e35311e08456d21bf5f156f7a1b960 0.1550511121749878 +116e48c1ba1b6c86601c402022615156 45cd7ce66538ba76795c7cd8a97cd55d 0.16915981471538544 +116e48c1ba1b6c86601c402022615156 482b7596f48574470f00a5e161ed8eb3 0.13994082808494568 +116e48c1ba1b6c86601c402022615156 4862f7aa77b183b09b99933c37a6d238 0.18073394894599915 +116e48c1ba1b6c86601c402022615156 4b2c76d6e1325bba41014003df684a1d 0.1764553040266037 +116e48c1ba1b6c86601c402022615156 4e4c5ae156d9bb517532c7d1aa8099f6 0.08033980429172516 +116e48c1ba1b6c86601c402022615156 4e4e18c588fc35b5f1a99bc147e77020 0.16265566647052765 +116e48c1ba1b6c86601c402022615156 51de8a0c2b635cb654a2d81d4d0147ad 0.0 +116e48c1ba1b6c86601c402022615156 521a975b888d41a0eb82a0d67464979b 0.1314285695552826 +116e48c1ba1b6c86601c402022615156 554ec45b177292cd26daed0902a89a24 0.12450981140136719 +116e48c1ba1b6c86601c402022615156 57e5a176ff73dde428390003172fdffb 0.24287189543247223 +116e48c1ba1b6c86601c402022615156 590e8de05fd1cecc79347f1257a7c14c 0.20254474878311157 +116e48c1ba1b6c86601c402022615156 61114735a84894739ff1a386694d9287 0.1416974812746048 +116e48c1ba1b6c86601c402022615156 66b3fd3631119304322f51a077d216a8 0.13812217116355896 +116e48c1ba1b6c86601c402022615156 66eabd96e837bc63970b8b43dc3e7d59 0.12352190911769867 +116e48c1ba1b6c86601c402022615156 677563d77f33dde9a437e9769cd97350 0.16265566647052765 +116e48c1ba1b6c86601c402022615156 6c194f239694aec7cf630c1ad0e43db7 0.12352190911769867 +116e48c1ba1b6c86601c402022615156 6c1ed97536601e49cd993c2c3dc0e628 0.10643564164638519 +116e48c1ba1b6c86601c402022615156 6d3e5d85b2aa35d58347bb4b9b203e43 0.381498247385025 +116e48c1ba1b6c86601c402022615156 6dd32e33c78a21fef169e6423c91dfcd 0.2094256728887558 +116e48c1ba1b6c86601c402022615156 712ceab0f39ef3518910c2244af3d58f 0.15754717588424683 +116e48c1ba1b6c86601c402022615156 8423cb55f94b74aff6335ffc08e1ffa0 0.14711309969425201 +116e48c1ba1b6c86601c402022615156 857b927ef6cfe28868c7f0b4beb0f9c5 0.16265566647052765 +116e48c1ba1b6c86601c402022615156 88aa65483a9d0d188a09ae32f835fbd5 0.21116070449352264 +116e48c1ba1b6c86601c402022615156 8ec183a3479d0541d4b13cff95940cee 0.13994082808494568 +116e48c1ba1b6c86601c402022615156 8f3fb318e9afc95f071ac38522976b1b 0.08033980429172516 +116e48c1ba1b6c86601c402022615156 9374803bb59357889b692ca61dd87b48 0.20937499403953552 +116e48c1ba1b6c86601c402022615156 946b5f1cf84bc4409e87cbd1ee0ef26a 0.1623992621898651 +116e48c1ba1b6c86601c402022615156 955c2ad95941c2cab740e78216da597c 0.18073394894599915 +116e48c1ba1b6c86601c402022615156 9620df9ac2a3839d04df86692d43528f 0.21162468194961548 +116e48c1ba1b6c86601c402022615156 a04dff74cc5e783025a349d32f5ce915 0.18073394894599915 +116e48c1ba1b6c86601c402022615156 a2c496dfec8a1bf1f2a450e699b829ad 0.09738095104694366 +116e48c1ba1b6c86601c402022615156 ad8a15dd4bde7a1d96e95da04e910853 0.16915981471538544 +116e48c1ba1b6c86601c402022615156 af2135763c26212ed95a8a891c7dfca3 0.13812217116355896 +116e48c1ba1b6c86601c402022615156 b4c9b3e8f6e5852ee29efa686ffcdca0 0.13994082808494568 +116e48c1ba1b6c86601c402022615156 b521d9b8e55a26909e3ac0292b42d8f3 0.1550511121749878 +116e48c1ba1b6c86601c402022615156 b8783f557b3ed4a9b4269539b1583419 0.18930287659168243 +116e48c1ba1b6c86601c402022615156 bd2031065307a5b5b38ea208e314d340 0.16915981471538544 +116e48c1ba1b6c86601c402022615156 bf4312f7e11603ff2ae87587fcebbc9c 0.1623992621898651 +116e48c1ba1b6c86601c402022615156 c13e1b0a3d3829bf266d9a2162207b28 0.1764553040266037 +116e48c1ba1b6c86601c402022615156 c6fe12ce4cddb1b8423b63e6dfad808b 0.24557635188102722 +116e48c1ba1b6c86601c402022615156 cb8d96ae1287284021e9038a79bf3131 0.2094256728887558 +116e48c1ba1b6c86601c402022615156 ccda3b30480708f505105d95da0bfb62 0.12504170835018158 +116e48c1ba1b6c86601c402022615156 d8e6b7b0368832247dbc5acab0fa4971 0.23467648029327393 +116e48c1ba1b6c86601c402022615156 dfa3146f46afd34506e6a71e0ec8b111 0.1514563113451004 +116e48c1ba1b6c86601c402022615156 e238a64ed05a08249266e0e5839548e5 0.25488123297691345 +116e48c1ba1b6c86601c402022615156 e396578f1078dd14484f24e821e31f7b 0.1657620370388031 +116e48c1ba1b6c86601c402022615156 e5f50fc1871b817d772009a19b1a639a 0.28778132796287537 +116e48c1ba1b6c86601c402022615156 e645222fbec3f59af2ffb3b22123ac56 0.2528011202812195 +116e48c1ba1b6c86601c402022615156 e956cc2ce89bd8b63426fbab21f2f2e6 0.12450981140136719 +116e48c1ba1b6c86601c402022615156 ecbbb5fea0464f857d513de5c23423f1 0.08033980429172516 +116e48c1ba1b6c86601c402022615156 f41879b82690dbbd64eba913bb60b084 0.16265566647052765 +116e48c1ba1b6c86601c402022615156 f4b3941d7d57b2f17e1f22ec3077cc57 0.29116126894950867 +116e48c1ba1b6c86601c402022615156 f64340086bf5617b5b73684e79e6851c 0.18073394894599915 +116e48c1ba1b6c86601c402022615156 f67c4609c1e7a5fa403de7e22c501457 0.20937499403953552 +116e48c1ba1b6c86601c402022615156 fd032fad609be92a9a9d2a36e2e03faa 0.18073394894599915 +116e48c1ba1b6c86601c402022615156 fe888f4b12c0b05171796bd6d1b4f590 0.1623992621898651 +124fd5acf900552fc3baaabcdd7f5244 14a77e7ca65232bb55745938eec7985d 0.3288426697254181 +124fd5acf900552fc3baaabcdd7f5244 15b29aacd690aae3b3090a490c8cdc19 0.23270052671432495 +124fd5acf900552fc3baaabcdd7f5244 179c66c2fe46ba14dab5bc400006a4eb 0.1709090918302536 +124fd5acf900552fc3baaabcdd7f5244 206baa3e0dd353fafdf2c44a56a8f979 0.14414414763450623 +124fd5acf900552fc3baaabcdd7f5244 22caa464d134048a0ce7feadcfbaf985 0.043095238506793976 +124fd5acf900552fc3baaabcdd7f5244 2594c18153258d768d72ca37db992969 0.12916666269302368 +124fd5acf900552fc3baaabcdd7f5244 308c12f2c65e3b38fab8d3e6623dc423 0.23219776153564453 +124fd5acf900552fc3baaabcdd7f5244 34db7b31435da7851e6e1ff442a302f3 0.18566595017910004 +124fd5acf900552fc3baaabcdd7f5244 369db8943bdb18f238aa1561a6e1de9f 0.15000000596046448 +124fd5acf900552fc3baaabcdd7f5244 3c062536401ebeab239c2490e6d3efea 0.22905947268009186 +124fd5acf900552fc3baaabcdd7f5244 3fd08461a5678f97083d0ab80980d24e 0.2554633617401123 +124fd5acf900552fc3baaabcdd7f5244 44e35311e08456d21bf5f156f7a1b960 0.17025338113307953 +124fd5acf900552fc3baaabcdd7f5244 45cd7ce66538ba76795c7cd8a97cd55d 0.1947348415851593 +124fd5acf900552fc3baaabcdd7f5244 482b7596f48574470f00a5e161ed8eb3 0.12916666269302368 +124fd5acf900552fc3baaabcdd7f5244 4862f7aa77b183b09b99933c37a6d238 0.14414414763450623 +124fd5acf900552fc3baaabcdd7f5244 4b2c76d6e1325bba41014003df684a1d 0.17113526165485382 +124fd5acf900552fc3baaabcdd7f5244 4e4c5ae156d9bb517532c7d1aa8099f6 0.043095238506793976 +124fd5acf900552fc3baaabcdd7f5244 4e4e18c588fc35b5f1a99bc147e77020 0.16465908288955688 +124fd5acf900552fc3baaabcdd7f5244 51de8a0c2b635cb654a2d81d4d0147ad 0.09738095104694366 +124fd5acf900552fc3baaabcdd7f5244 521a975b888d41a0eb82a0d67464979b 0.09439252316951752 +124fd5acf900552fc3baaabcdd7f5244 554ec45b177292cd26daed0902a89a24 0.13878504931926727 +124fd5acf900552fc3baaabcdd7f5244 57e5a176ff73dde428390003172fdffb 0.221797913312912 +124fd5acf900552fc3baaabcdd7f5244 590e8de05fd1cecc79347f1257a7c14c 0.18269774317741394 +124fd5acf900552fc3baaabcdd7f5244 61114735a84894739ff1a386694d9287 0.14587154984474182 +124fd5acf900552fc3baaabcdd7f5244 66b3fd3631119304322f51a077d216a8 0.1592770665884018 +124fd5acf900552fc3baaabcdd7f5244 66eabd96e837bc63970b8b43dc3e7d59 0.1085280328989029 +124fd5acf900552fc3baaabcdd7f5244 677563d77f33dde9a437e9769cd97350 0.16465908288955688 +124fd5acf900552fc3baaabcdd7f5244 6c194f239694aec7cf630c1ad0e43db7 0.1085280328989029 +124fd5acf900552fc3baaabcdd7f5244 6c1ed97536601e49cd993c2c3dc0e628 0.13878504931926727 +124fd5acf900552fc3baaabcdd7f5244 6d3e5d85b2aa35d58347bb4b9b203e43 0.3288426697254181 +124fd5acf900552fc3baaabcdd7f5244 6dd32e33c78a21fef169e6423c91dfcd 0.19279971718788147 +124fd5acf900552fc3baaabcdd7f5244 712ceab0f39ef3518910c2244af3d58f 0.12916666269302368 +124fd5acf900552fc3baaabcdd7f5244 8423cb55f94b74aff6335ffc08e1ffa0 0.17999249696731567 +124fd5acf900552fc3baaabcdd7f5244 857b927ef6cfe28868c7f0b4beb0f9c5 0.16465908288955688 +124fd5acf900552fc3baaabcdd7f5244 88aa65483a9d0d188a09ae32f835fbd5 0.16317223012447357 +124fd5acf900552fc3baaabcdd7f5244 8ec183a3479d0541d4b13cff95940cee 0.12916666269302368 +124fd5acf900552fc3baaabcdd7f5244 8f3fb318e9afc95f071ac38522976b1b 0.043095238506793976 +124fd5acf900552fc3baaabcdd7f5244 9374803bb59357889b692ca61dd87b48 0.171875 +124fd5acf900552fc3baaabcdd7f5244 946b5f1cf84bc4409e87cbd1ee0ef26a 0.1709090918302536 +124fd5acf900552fc3baaabcdd7f5244 955c2ad95941c2cab740e78216da597c 0.14414414763450623 +124fd5acf900552fc3baaabcdd7f5244 9620df9ac2a3839d04df86692d43528f 0.15873396396636963 +124fd5acf900552fc3baaabcdd7f5244 a04dff74cc5e783025a349d32f5ce915 0.14414414763450623 +124fd5acf900552fc3baaabcdd7f5244 a2c496dfec8a1bf1f2a450e699b829ad 0.13636364042758942 +124fd5acf900552fc3baaabcdd7f5244 ad8a15dd4bde7a1d96e95da04e910853 0.1947348415851593 +124fd5acf900552fc3baaabcdd7f5244 af2135763c26212ed95a8a891c7dfca3 0.1592770665884018 +124fd5acf900552fc3baaabcdd7f5244 b4c9b3e8f6e5852ee29efa686ffcdca0 0.12916666269302368 +124fd5acf900552fc3baaabcdd7f5244 b521d9b8e55a26909e3ac0292b42d8f3 0.17025338113307953 +124fd5acf900552fc3baaabcdd7f5244 b8783f557b3ed4a9b4269539b1583419 0.16914714872837067 +124fd5acf900552fc3baaabcdd7f5244 bd2031065307a5b5b38ea208e314d340 0.1947348415851593 +124fd5acf900552fc3baaabcdd7f5244 bf4312f7e11603ff2ae87587fcebbc9c 0.1709090918302536 +124fd5acf900552fc3baaabcdd7f5244 c13e1b0a3d3829bf266d9a2162207b28 0.17113526165485382 +124fd5acf900552fc3baaabcdd7f5244 c6fe12ce4cddb1b8423b63e6dfad808b 0.20799146592617035 +124fd5acf900552fc3baaabcdd7f5244 cb8d96ae1287284021e9038a79bf3131 0.19279971718788147 +124fd5acf900552fc3baaabcdd7f5244 ccda3b30480708f505105d95da0bfb62 0.14374209940433502 +124fd5acf900552fc3baaabcdd7f5244 d8e6b7b0368832247dbc5acab0fa4971 0.25857964158058167 +124fd5acf900552fc3baaabcdd7f5244 dfa3146f46afd34506e6a71e0ec8b111 0.18073394894599915 +124fd5acf900552fc3baaabcdd7f5244 e238a64ed05a08249266e0e5839548e5 0.2284526377916336 +124fd5acf900552fc3baaabcdd7f5244 e396578f1078dd14484f24e821e31f7b 0.1527027040719986 +124fd5acf900552fc3baaabcdd7f5244 e5f50fc1871b817d772009a19b1a639a 0.30983197689056396 +124fd5acf900552fc3baaabcdd7f5244 e645222fbec3f59af2ffb3b22123ac56 0.23219776153564453 +124fd5acf900552fc3baaabcdd7f5244 e956cc2ce89bd8b63426fbab21f2f2e6 0.13878504931926727 +124fd5acf900552fc3baaabcdd7f5244 ecbbb5fea0464f857d513de5c23423f1 0.043095238506793976 +124fd5acf900552fc3baaabcdd7f5244 f41879b82690dbbd64eba913bb60b084 0.16465908288955688 +124fd5acf900552fc3baaabcdd7f5244 f4b3941d7d57b2f17e1f22ec3077cc57 0.23270052671432495 +124fd5acf900552fc3baaabcdd7f5244 f64340086bf5617b5b73684e79e6851c 0.14414414763450623 +124fd5acf900552fc3baaabcdd7f5244 f67c4609c1e7a5fa403de7e22c501457 0.171875 +124fd5acf900552fc3baaabcdd7f5244 fd032fad609be92a9a9d2a36e2e03faa 0.14414414763450623 +124fd5acf900552fc3baaabcdd7f5244 fe888f4b12c0b05171796bd6d1b4f590 0.1709090918302536 +14a77e7ca65232bb55745938eec7985d 15b29aacd690aae3b3090a490c8cdc19 0.2722063362598419 +14a77e7ca65232bb55745938eec7985d 179c66c2fe46ba14dab5bc400006a4eb 0.36117860674858093 +14a77e7ca65232bb55745938eec7985d 206baa3e0dd353fafdf2c44a56a8f979 0.31670618057250977 +14a77e7ca65232bb55745938eec7985d 22caa464d134048a0ce7feadcfbaf985 0.3423168957233429 +14a77e7ca65232bb55745938eec7985d 2594c18153258d768d72ca37db992969 0.3503205180168152 +14a77e7ca65232bb55745938eec7985d 308c12f2c65e3b38fab8d3e6623dc423 0.3218255341053009 +14a77e7ca65232bb55745938eec7985d 34db7b31435da7851e6e1ff442a302f3 0.35817545652389526 +14a77e7ca65232bb55745938eec7985d 369db8943bdb18f238aa1561a6e1de9f 0.3354527950286865 +14a77e7ca65232bb55745938eec7985d 3c062536401ebeab239c2490e6d3efea 0.3284958600997925 +14a77e7ca65232bb55745938eec7985d 3fd08461a5678f97083d0ab80980d24e 0.4373415410518646 +14a77e7ca65232bb55745938eec7985d 44e35311e08456d21bf5f156f7a1b960 0.3667844235897064 +14a77e7ca65232bb55745938eec7985d 45cd7ce66538ba76795c7cd8a97cd55d 0.38020244240760803 +14a77e7ca65232bb55745938eec7985d 482b7596f48574470f00a5e161ed8eb3 0.34070104360580444 +14a77e7ca65232bb55745938eec7985d 4862f7aa77b183b09b99933c37a6d238 0.31670618057250977 +14a77e7ca65232bb55745938eec7985d 4b2c76d6e1325bba41014003df684a1d 0.3163369596004486 +14a77e7ca65232bb55745938eec7985d 4e4c5ae156d9bb517532c7d1aa8099f6 0.3423168957233429 +14a77e7ca65232bb55745938eec7985d 4e4e18c588fc35b5f1a99bc147e77020 0.36449968814849854 +14a77e7ca65232bb55745938eec7985d 51de8a0c2b635cb654a2d81d4d0147ad 0.381498247385025 +14a77e7ca65232bb55745938eec7985d 521a975b888d41a0eb82a0d67464979b 0.3461064398288727 +14a77e7ca65232bb55745938eec7985d 554ec45b177292cd26daed0902a89a24 0.3389595150947571 +14a77e7ca65232bb55745938eec7985d 57e5a176ff73dde428390003172fdffb 0.3029741644859314 +14a77e7ca65232bb55745938eec7985d 590e8de05fd1cecc79347f1257a7c14c 0.31330397725105286 +14a77e7ca65232bb55745938eec7985d 61114735a84894739ff1a386694d9287 0.35853612422943115 +14a77e7ca65232bb55745938eec7985d 66b3fd3631119304322f51a077d216a8 0.37454909086227417 +14a77e7ca65232bb55745938eec7985d 66eabd96e837bc63970b8b43dc3e7d59 0.331742525100708 +14a77e7ca65232bb55745938eec7985d 677563d77f33dde9a437e9769cd97350 0.36449968814849854 +14a77e7ca65232bb55745938eec7985d 6c194f239694aec7cf630c1ad0e43db7 0.331742525100708 +14a77e7ca65232bb55745938eec7985d 6c1ed97536601e49cd993c2c3dc0e628 0.366955041885376 +14a77e7ca65232bb55745938eec7985d 6d3e5d85b2aa35d58347bb4b9b203e43 0.0 +14a77e7ca65232bb55745938eec7985d 6dd32e33c78a21fef169e6423c91dfcd 0.38400015234947205 +14a77e7ca65232bb55745938eec7985d 712ceab0f39ef3518910c2244af3d58f 0.3503205180168152 +14a77e7ca65232bb55745938eec7985d 8423cb55f94b74aff6335ffc08e1ffa0 0.3836320638656616 +14a77e7ca65232bb55745938eec7985d 857b927ef6cfe28868c7f0b4beb0f9c5 0.36449968814849854 +14a77e7ca65232bb55745938eec7985d 88aa65483a9d0d188a09ae32f835fbd5 0.34532371163368225 +14a77e7ca65232bb55745938eec7985d 8ec183a3479d0541d4b13cff95940cee 0.34070104360580444 +14a77e7ca65232bb55745938eec7985d 8f3fb318e9afc95f071ac38522976b1b 0.3423168957233429 +14a77e7ca65232bb55745938eec7985d 9374803bb59357889b692ca61dd87b48 0.3444429934024811 +14a77e7ca65232bb55745938eec7985d 946b5f1cf84bc4409e87cbd1ee0ef26a 0.36117860674858093 +14a77e7ca65232bb55745938eec7985d 955c2ad95941c2cab740e78216da597c 0.31670618057250977 +14a77e7ca65232bb55745938eec7985d 9620df9ac2a3839d04df86692d43528f 0.31067946553230286 +14a77e7ca65232bb55745938eec7985d a04dff74cc5e783025a349d32f5ce915 0.31670618057250977 +14a77e7ca65232bb55745938eec7985d a2c496dfec8a1bf1f2a450e699b829ad 0.3407624363899231 +14a77e7ca65232bb55745938eec7985d ad8a15dd4bde7a1d96e95da04e910853 0.38020244240760803 +14a77e7ca65232bb55745938eec7985d af2135763c26212ed95a8a891c7dfca3 0.3751305043697357 +14a77e7ca65232bb55745938eec7985d b4c9b3e8f6e5852ee29efa686ffcdca0 0.34070104360580444 +14a77e7ca65232bb55745938eec7985d b521d9b8e55a26909e3ac0292b42d8f3 0.36737966537475586 +14a77e7ca65232bb55745938eec7985d b8783f557b3ed4a9b4269539b1583419 0.32232698798179626 +14a77e7ca65232bb55745938eec7985d bd2031065307a5b5b38ea208e314d340 0.38020244240760803 +14a77e7ca65232bb55745938eec7985d bf4312f7e11603ff2ae87587fcebbc9c 0.36117860674858093 +14a77e7ca65232bb55745938eec7985d c13e1b0a3d3829bf266d9a2162207b28 0.3163369596004486 +14a77e7ca65232bb55745938eec7985d c6fe12ce4cddb1b8423b63e6dfad808b 0.309504896402359 +14a77e7ca65232bb55745938eec7985d cb8d96ae1287284021e9038a79bf3131 0.38400015234947205 +14a77e7ca65232bb55745938eec7985d ccda3b30480708f505105d95da0bfb62 0.3385784924030304 +14a77e7ca65232bb55745938eec7985d d8e6b7b0368832247dbc5acab0fa4971 0.42893967032432556 +14a77e7ca65232bb55745938eec7985d dfa3146f46afd34506e6a71e0ec8b111 0.38713330030441284 +14a77e7ca65232bb55745938eec7985d e238a64ed05a08249266e0e5839548e5 0.3166505992412567 +14a77e7ca65232bb55745938eec7985d e396578f1078dd14484f24e821e31f7b 0.3492536246776581 +14a77e7ca65232bb55745938eec7985d e5f50fc1871b817d772009a19b1a639a 0.38788533210754395 +14a77e7ca65232bb55745938eec7985d e645222fbec3f59af2ffb3b22123ac56 0.3218255341053009 +14a77e7ca65232bb55745938eec7985d e956cc2ce89bd8b63426fbab21f2f2e6 0.3389595150947571 +14a77e7ca65232bb55745938eec7985d ecbbb5fea0464f857d513de5c23423f1 0.3423168957233429 +14a77e7ca65232bb55745938eec7985d f41879b82690dbbd64eba913bb60b084 0.36449968814849854 +14a77e7ca65232bb55745938eec7985d f4b3941d7d57b2f17e1f22ec3077cc57 0.2722063362598419 +14a77e7ca65232bb55745938eec7985d f64340086bf5617b5b73684e79e6851c 0.31670618057250977 +14a77e7ca65232bb55745938eec7985d f67c4609c1e7a5fa403de7e22c501457 0.345084011554718 +14a77e7ca65232bb55745938eec7985d fd032fad609be92a9a9d2a36e2e03faa 0.31670618057250977 +14a77e7ca65232bb55745938eec7985d fe888f4b12c0b05171796bd6d1b4f590 0.36117860674858093 +15b29aacd690aae3b3090a490c8cdc19 179c66c2fe46ba14dab5bc400006a4eb 0.26727497577667236 +15b29aacd690aae3b3090a490c8cdc19 206baa3e0dd353fafdf2c44a56a8f979 0.23240000009536743 +15b29aacd690aae3b3090a490c8cdc19 22caa464d134048a0ce7feadcfbaf985 0.24848750233650208 +15b29aacd690aae3b3090a490c8cdc19 2594c18153258d768d72ca37db992969 0.2557837963104248 +15b29aacd690aae3b3090a490c8cdc19 308c12f2c65e3b38fab8d3e6623dc423 0.2022879421710968 +15b29aacd690aae3b3090a490c8cdc19 34db7b31435da7851e6e1ff442a302f3 0.2836070656776428 +15b29aacd690aae3b3090a490c8cdc19 369db8943bdb18f238aa1561a6e1de9f 0.24130207300186157 +15b29aacd690aae3b3090a490c8cdc19 3c062536401ebeab239c2490e6d3efea 0.22980231046676636 +15b29aacd690aae3b3090a490c8cdc19 3fd08461a5678f97083d0ab80980d24e 0.360309362411499 +15b29aacd690aae3b3090a490c8cdc19 44e35311e08456d21bf5f156f7a1b960 0.24544353783130646 +15b29aacd690aae3b3090a490c8cdc19 45cd7ce66538ba76795c7cd8a97cd55d 0.2746303677558899 +15b29aacd690aae3b3090a490c8cdc19 482b7596f48574470f00a5e161ed8eb3 0.25922858715057373 +15b29aacd690aae3b3090a490c8cdc19 4862f7aa77b183b09b99933c37a6d238 0.23240000009536743 +15b29aacd690aae3b3090a490c8cdc19 4b2c76d6e1325bba41014003df684a1d 0.2078142762184143 +15b29aacd690aae3b3090a490c8cdc19 4e4c5ae156d9bb517532c7d1aa8099f6 0.24848750233650208 +15b29aacd690aae3b3090a490c8cdc19 4e4e18c588fc35b5f1a99bc147e77020 0.25238335132598877 +15b29aacd690aae3b3090a490c8cdc19 51de8a0c2b635cb654a2d81d4d0147ad 0.29116126894950867 +15b29aacd690aae3b3090a490c8cdc19 521a975b888d41a0eb82a0d67464979b 0.24686801433563232 +15b29aacd690aae3b3090a490c8cdc19 554ec45b177292cd26daed0902a89a24 0.2746303677558899 +15b29aacd690aae3b3090a490c8cdc19 57e5a176ff73dde428390003172fdffb 0.17617186903953552 +15b29aacd690aae3b3090a490c8cdc19 590e8de05fd1cecc79347f1257a7c14c 0.19325396418571472 +15b29aacd690aae3b3090a490c8cdc19 61114735a84894739ff1a386694d9287 0.29141560196876526 +15b29aacd690aae3b3090a490c8cdc19 66b3fd3631119304322f51a077d216a8 0.28446754813194275 +15b29aacd690aae3b3090a490c8cdc19 66eabd96e837bc63970b8b43dc3e7d59 0.26720452308654785 +15b29aacd690aae3b3090a490c8cdc19 677563d77f33dde9a437e9769cd97350 0.25238335132598877 +15b29aacd690aae3b3090a490c8cdc19 6c194f239694aec7cf630c1ad0e43db7 0.26720452308654785 +15b29aacd690aae3b3090a490c8cdc19 6c1ed97536601e49cd993c2c3dc0e628 0.293290376663208 +15b29aacd690aae3b3090a490c8cdc19 6d3e5d85b2aa35d58347bb4b9b203e43 0.2731678783893585 +15b29aacd690aae3b3090a490c8cdc19 6dd32e33c78a21fef169e6423c91dfcd 0.2335408627986908 +15b29aacd690aae3b3090a490c8cdc19 712ceab0f39ef3518910c2244af3d58f 0.2557837963104248 +15b29aacd690aae3b3090a490c8cdc19 8423cb55f94b74aff6335ffc08e1ffa0 0.2668285667896271 +15b29aacd690aae3b3090a490c8cdc19 857b927ef6cfe28868c7f0b4beb0f9c5 0.25238335132598877 +15b29aacd690aae3b3090a490c8cdc19 88aa65483a9d0d188a09ae32f835fbd5 0.24376264214515686 +15b29aacd690aae3b3090a490c8cdc19 8ec183a3479d0541d4b13cff95940cee 0.25922858715057373 +15b29aacd690aae3b3090a490c8cdc19 8f3fb318e9afc95f071ac38522976b1b 0.24848750233650208 +15b29aacd690aae3b3090a490c8cdc19 9374803bb59357889b692ca61dd87b48 0.21894480288028717 +15b29aacd690aae3b3090a490c8cdc19 946b5f1cf84bc4409e87cbd1ee0ef26a 0.26727497577667236 +15b29aacd690aae3b3090a490c8cdc19 955c2ad95941c2cab740e78216da597c 0.23240000009536743 +15b29aacd690aae3b3090a490c8cdc19 9620df9ac2a3839d04df86692d43528f 0.23880207538604736 +15b29aacd690aae3b3090a490c8cdc19 a04dff74cc5e783025a349d32f5ce915 0.23240000009536743 +15b29aacd690aae3b3090a490c8cdc19 a2c496dfec8a1bf1f2a450e699b829ad 0.25716373324394226 +15b29aacd690aae3b3090a490c8cdc19 ad8a15dd4bde7a1d96e95da04e910853 0.2746303677558899 +15b29aacd690aae3b3090a490c8cdc19 af2135763c26212ed95a8a891c7dfca3 0.28446754813194275 +15b29aacd690aae3b3090a490c8cdc19 b4c9b3e8f6e5852ee29efa686ffcdca0 0.25922858715057373 +15b29aacd690aae3b3090a490c8cdc19 b521d9b8e55a26909e3ac0292b42d8f3 0.24544353783130646 +15b29aacd690aae3b3090a490c8cdc19 b8783f557b3ed4a9b4269539b1583419 0.22046701610088348 +15b29aacd690aae3b3090a490c8cdc19 bd2031065307a5b5b38ea208e314d340 0.2746303677558899 +15b29aacd690aae3b3090a490c8cdc19 bf4312f7e11603ff2ae87587fcebbc9c 0.26727497577667236 +15b29aacd690aae3b3090a490c8cdc19 c13e1b0a3d3829bf266d9a2162207b28 0.2078142762184143 +15b29aacd690aae3b3090a490c8cdc19 c6fe12ce4cddb1b8423b63e6dfad808b 0.27783286571502686 +15b29aacd690aae3b3090a490c8cdc19 cb8d96ae1287284021e9038a79bf3131 0.2335408627986908 +15b29aacd690aae3b3090a490c8cdc19 ccda3b30480708f505105d95da0bfb62 0.23095238208770752 +15b29aacd690aae3b3090a490c8cdc19 d8e6b7b0368832247dbc5acab0fa4971 0.33249685168266296 +15b29aacd690aae3b3090a490c8cdc19 dfa3146f46afd34506e6a71e0ec8b111 0.29160767793655396 +15b29aacd690aae3b3090a490c8cdc19 e238a64ed05a08249266e0e5839548e5 0.1919378638267517 +15b29aacd690aae3b3090a490c8cdc19 e396578f1078dd14484f24e821e31f7b 0.26667967438697815 +15b29aacd690aae3b3090a490c8cdc19 e5f50fc1871b817d772009a19b1a639a 0.3420008420944214 +15b29aacd690aae3b3090a490c8cdc19 e645222fbec3f59af2ffb3b22123ac56 0.2022879421710968 +15b29aacd690aae3b3090a490c8cdc19 e956cc2ce89bd8b63426fbab21f2f2e6 0.2746303677558899 +15b29aacd690aae3b3090a490c8cdc19 ecbbb5fea0464f857d513de5c23423f1 0.24848750233650208 +15b29aacd690aae3b3090a490c8cdc19 f41879b82690dbbd64eba913bb60b084 0.25238335132598877 +15b29aacd690aae3b3090a490c8cdc19 f4b3941d7d57b2f17e1f22ec3077cc57 0.0 +15b29aacd690aae3b3090a490c8cdc19 f64340086bf5617b5b73684e79e6851c 0.23240000009536743 +15b29aacd690aae3b3090a490c8cdc19 f67c4609c1e7a5fa403de7e22c501457 0.21894480288028717 +15b29aacd690aae3b3090a490c8cdc19 fd032fad609be92a9a9d2a36e2e03faa 0.23240000009536743 +15b29aacd690aae3b3090a490c8cdc19 fe888f4b12c0b05171796bd6d1b4f590 0.26727497577667236 +179c66c2fe46ba14dab5bc400006a4eb 206baa3e0dd353fafdf2c44a56a8f979 0.17456166446208954 +179c66c2fe46ba14dab5bc400006a4eb 22caa464d134048a0ce7feadcfbaf985 0.1881818026304245 +179c66c2fe46ba14dab5bc400006a4eb 2594c18153258d768d72ca37db992969 0.1462976336479187 +179c66c2fe46ba14dab5bc400006a4eb 308c12f2c65e3b38fab8d3e6623dc423 0.2426535040140152 +179c66c2fe46ba14dab5bc400006a4eb 34db7b31435da7851e6e1ff442a302f3 0.1791025549173355 +179c66c2fe46ba14dab5bc400006a4eb 369db8943bdb18f238aa1561a6e1de9f 0.1796630322933197 +179c66c2fe46ba14dab5bc400006a4eb 3c062536401ebeab239c2490e6d3efea 0.22277778387069702 +179c66c2fe46ba14dab5bc400006a4eb 3fd08461a5678f97083d0ab80980d24e 0.2573534846305847 +179c66c2fe46ba14dab5bc400006a4eb 44e35311e08456d21bf5f156f7a1b960 0.13445210456848145 +179c66c2fe46ba14dab5bc400006a4eb 45cd7ce66538ba76795c7cd8a97cd55d 0.1623992621898651 +179c66c2fe46ba14dab5bc400006a4eb 482b7596f48574470f00a5e161ed8eb3 0.18442131578922272 +179c66c2fe46ba14dab5bc400006a4eb 4862f7aa77b183b09b99933c37a6d238 0.17456166446208954 +179c66c2fe46ba14dab5bc400006a4eb 4b2c76d6e1325bba41014003df684a1d 0.172338604927063 +179c66c2fe46ba14dab5bc400006a4eb 4e4c5ae156d9bb517532c7d1aa8099f6 0.1881818026304245 +179c66c2fe46ba14dab5bc400006a4eb 4e4e18c588fc35b5f1a99bc147e77020 0.13962264358997345 +179c66c2fe46ba14dab5bc400006a4eb 51de8a0c2b635cb654a2d81d4d0147ad 0.1623992621898651 +179c66c2fe46ba14dab5bc400006a4eb 521a975b888d41a0eb82a0d67464979b 0.16699011623859406 +179c66c2fe46ba14dab5bc400006a4eb 554ec45b177292cd26daed0902a89a24 0.12236744165420532 +179c66c2fe46ba14dab5bc400006a4eb 57e5a176ff73dde428390003172fdffb 0.23001185059547424 +179c66c2fe46ba14dab5bc400006a4eb 590e8de05fd1cecc79347f1257a7c14c 0.19587865471839905 +179c66c2fe46ba14dab5bc400006a4eb 61114735a84894739ff1a386694d9287 0.18025465309619904 +179c66c2fe46ba14dab5bc400006a4eb 66b3fd3631119304322f51a077d216a8 0.159960076212883 +179c66c2fe46ba14dab5bc400006a4eb 66eabd96e837bc63970b8b43dc3e7d59 0.12238095700740814 +179c66c2fe46ba14dab5bc400006a4eb 677563d77f33dde9a437e9769cd97350 0.13962264358997345 +179c66c2fe46ba14dab5bc400006a4eb 6c194f239694aec7cf630c1ad0e43db7 0.12238095700740814 +179c66c2fe46ba14dab5bc400006a4eb 6c1ed97536601e49cd993c2c3dc0e628 0.15717947483062744 +179c66c2fe46ba14dab5bc400006a4eb 6d3e5d85b2aa35d58347bb4b9b203e43 0.36117860674858093 +179c66c2fe46ba14dab5bc400006a4eb 6dd32e33c78a21fef169e6423c91dfcd 0.19074073433876038 +179c66c2fe46ba14dab5bc400006a4eb 712ceab0f39ef3518910c2244af3d58f 0.1462976336479187 +179c66c2fe46ba14dab5bc400006a4eb 8423cb55f94b74aff6335ffc08e1ffa0 0.15141983330249786 +179c66c2fe46ba14dab5bc400006a4eb 857b927ef6cfe28868c7f0b4beb0f9c5 0.13962264358997345 +179c66c2fe46ba14dab5bc400006a4eb 88aa65483a9d0d188a09ae32f835fbd5 0.14898601174354553 +179c66c2fe46ba14dab5bc400006a4eb 8ec183a3479d0541d4b13cff95940cee 0.18442131578922272 +179c66c2fe46ba14dab5bc400006a4eb 8f3fb318e9afc95f071ac38522976b1b 0.1881818026304245 +179c66c2fe46ba14dab5bc400006a4eb 9374803bb59357889b692ca61dd87b48 0.14222222566604614 +179c66c2fe46ba14dab5bc400006a4eb 946b5f1cf84bc4409e87cbd1ee0ef26a 0.0 +179c66c2fe46ba14dab5bc400006a4eb 955c2ad95941c2cab740e78216da597c 0.17456166446208954 +179c66c2fe46ba14dab5bc400006a4eb 9620df9ac2a3839d04df86692d43528f 0.171255961060524 +179c66c2fe46ba14dab5bc400006a4eb a04dff74cc5e783025a349d32f5ce915 0.17456166446208954 +179c66c2fe46ba14dab5bc400006a4eb a2c496dfec8a1bf1f2a450e699b829ad 0.17456293106079102 +179c66c2fe46ba14dab5bc400006a4eb ad8a15dd4bde7a1d96e95da04e910853 0.1623992621898651 +179c66c2fe46ba14dab5bc400006a4eb af2135763c26212ed95a8a891c7dfca3 0.159960076212883 +179c66c2fe46ba14dab5bc400006a4eb b4c9b3e8f6e5852ee29efa686ffcdca0 0.18442131578922272 +179c66c2fe46ba14dab5bc400006a4eb b521d9b8e55a26909e3ac0292b42d8f3 0.13445210456848145 +179c66c2fe46ba14dab5bc400006a4eb b8783f557b3ed4a9b4269539b1583419 0.22772933542728424 +179c66c2fe46ba14dab5bc400006a4eb bd2031065307a5b5b38ea208e314d340 0.1623992621898651 +179c66c2fe46ba14dab5bc400006a4eb bf4312f7e11603ff2ae87587fcebbc9c 0.0 +179c66c2fe46ba14dab5bc400006a4eb c13e1b0a3d3829bf266d9a2162207b28 0.172338604927063 +179c66c2fe46ba14dab5bc400006a4eb c6fe12ce4cddb1b8423b63e6dfad808b 0.2362179458141327 +179c66c2fe46ba14dab5bc400006a4eb cb8d96ae1287284021e9038a79bf3131 0.19074073433876038 +179c66c2fe46ba14dab5bc400006a4eb ccda3b30480708f505105d95da0bfb62 0.17854800820350647 +179c66c2fe46ba14dab5bc400006a4eb d8e6b7b0368832247dbc5acab0fa4971 0.264342725276947 +179c66c2fe46ba14dab5bc400006a4eb dfa3146f46afd34506e6a71e0ec8b111 0.1791025549173355 +179c66c2fe46ba14dab5bc400006a4eb e238a64ed05a08249266e0e5839548e5 0.23408806324005127 +179c66c2fe46ba14dab5bc400006a4eb e396578f1078dd14484f24e821e31f7b 0.15693365037441254 +179c66c2fe46ba14dab5bc400006a4eb e5f50fc1871b817d772009a19b1a639a 0.3002731502056122 +179c66c2fe46ba14dab5bc400006a4eb e645222fbec3f59af2ffb3b22123ac56 0.2426535040140152 +179c66c2fe46ba14dab5bc400006a4eb e956cc2ce89bd8b63426fbab21f2f2e6 0.12236744165420532 +179c66c2fe46ba14dab5bc400006a4eb ecbbb5fea0464f857d513de5c23423f1 0.1881818026304245 +179c66c2fe46ba14dab5bc400006a4eb f41879b82690dbbd64eba913bb60b084 0.13962264358997345 +179c66c2fe46ba14dab5bc400006a4eb f4b3941d7d57b2f17e1f22ec3077cc57 0.26727497577667236 +179c66c2fe46ba14dab5bc400006a4eb f64340086bf5617b5b73684e79e6851c 0.17456166446208954 +179c66c2fe46ba14dab5bc400006a4eb f67c4609c1e7a5fa403de7e22c501457 0.14222222566604614 +179c66c2fe46ba14dab5bc400006a4eb fd032fad609be92a9a9d2a36e2e03faa 0.17456166446208954 +179c66c2fe46ba14dab5bc400006a4eb fe888f4b12c0b05171796bd6d1b4f590 0.0 +206baa3e0dd353fafdf2c44a56a8f979 22caa464d134048a0ce7feadcfbaf985 0.16126126050949097 +206baa3e0dd353fafdf2c44a56a8f979 2594c18153258d768d72ca37db992969 0.13636364042758942 +206baa3e0dd353fafdf2c44a56a8f979 308c12f2c65e3b38fab8d3e6623dc423 0.20510171353816986 +206baa3e0dd353fafdf2c44a56a8f979 34db7b31435da7851e6e1ff442a302f3 0.19063690304756165 +206baa3e0dd353fafdf2c44a56a8f979 369db8943bdb18f238aa1561a6e1de9f 0.14166666567325592 +206baa3e0dd353fafdf2c44a56a8f979 3c062536401ebeab239c2490e6d3efea 0.21626733243465424 +206baa3e0dd353fafdf2c44a56a8f979 3fd08461a5678f97083d0ab80980d24e 0.26228100061416626 +206baa3e0dd353fafdf2c44a56a8f979 44e35311e08456d21bf5f156f7a1b960 0.1855701059103012 +206baa3e0dd353fafdf2c44a56a8f979 45cd7ce66538ba76795c7cd8a97cd55d 0.19527027010917664 +206baa3e0dd353fafdf2c44a56a8f979 482b7596f48574470f00a5e161ed8eb3 0.1536363661289215 +206baa3e0dd353fafdf2c44a56a8f979 4862f7aa77b183b09b99933c37a6d238 0.0 +206baa3e0dd353fafdf2c44a56a8f979 4b2c76d6e1325bba41014003df684a1d 0.16565217077732086 +206baa3e0dd353fafdf2c44a56a8f979 4e4c5ae156d9bb517532c7d1aa8099f6 0.16126126050949097 +206baa3e0dd353fafdf2c44a56a8f979 4e4e18c588fc35b5f1a99bc147e77020 0.1794992983341217 +206baa3e0dd353fafdf2c44a56a8f979 51de8a0c2b635cb654a2d81d4d0147ad 0.18073394894599915 +206baa3e0dd353fafdf2c44a56a8f979 521a975b888d41a0eb82a0d67464979b 0.18451327085494995 +206baa3e0dd353fafdf2c44a56a8f979 554ec45b177292cd26daed0902a89a24 0.16863636672496796 +206baa3e0dd353fafdf2c44a56a8f979 57e5a176ff73dde428390003172fdffb 0.19674795866012573 +206baa3e0dd353fafdf2c44a56a8f979 590e8de05fd1cecc79347f1257a7c14c 0.17416884005069733 +206baa3e0dd353fafdf2c44a56a8f979 61114735a84894739ff1a386694d9287 0.13358452916145325 +206baa3e0dd353fafdf2c44a56a8f979 66b3fd3631119304322f51a077d216a8 0.19192370772361755 +206baa3e0dd353fafdf2c44a56a8f979 66eabd96e837bc63970b8b43dc3e7d59 0.1545124351978302 +206baa3e0dd353fafdf2c44a56a8f979 677563d77f33dde9a437e9769cd97350 0.1794992983341217 +206baa3e0dd353fafdf2c44a56a8f979 6c194f239694aec7cf630c1ad0e43db7 0.1545124351978302 +206baa3e0dd353fafdf2c44a56a8f979 6c1ed97536601e49cd993c2c3dc0e628 0.2147493064403534 +206baa3e0dd353fafdf2c44a56a8f979 6d3e5d85b2aa35d58347bb4b9b203e43 0.31670618057250977 +206baa3e0dd353fafdf2c44a56a8f979 6dd32e33c78a21fef169e6423c91dfcd 0.25820624828338623 +206baa3e0dd353fafdf2c44a56a8f979 712ceab0f39ef3518910c2244af3d58f 0.13636364042758942 +206baa3e0dd353fafdf2c44a56a8f979 8423cb55f94b74aff6335ffc08e1ffa0 0.1783207356929779 +206baa3e0dd353fafdf2c44a56a8f979 857b927ef6cfe28868c7f0b4beb0f9c5 0.1794992983341217 +206baa3e0dd353fafdf2c44a56a8f979 88aa65483a9d0d188a09ae32f835fbd5 0.14788462221622467 +206baa3e0dd353fafdf2c44a56a8f979 8ec183a3479d0541d4b13cff95940cee 0.1536363661289215 +206baa3e0dd353fafdf2c44a56a8f979 8f3fb318e9afc95f071ac38522976b1b 0.16126126050949097 +206baa3e0dd353fafdf2c44a56a8f979 9374803bb59357889b692ca61dd87b48 0.16185897588729858 +206baa3e0dd353fafdf2c44a56a8f979 946b5f1cf84bc4409e87cbd1ee0ef26a 0.17456166446208954 +206baa3e0dd353fafdf2c44a56a8f979 955c2ad95941c2cab740e78216da597c 0.0 +206baa3e0dd353fafdf2c44a56a8f979 9620df9ac2a3839d04df86692d43528f 0.1368589699268341 +206baa3e0dd353fafdf2c44a56a8f979 a04dff74cc5e783025a349d32f5ce915 0.0 +206baa3e0dd353fafdf2c44a56a8f979 a2c496dfec8a1bf1f2a450e699b829ad 0.14414414763450623 +206baa3e0dd353fafdf2c44a56a8f979 ad8a15dd4bde7a1d96e95da04e910853 0.19527027010917664 +206baa3e0dd353fafdf2c44a56a8f979 af2135763c26212ed95a8a891c7dfca3 0.19192370772361755 +206baa3e0dd353fafdf2c44a56a8f979 b4c9b3e8f6e5852ee29efa686ffcdca0 0.1536363661289215 +206baa3e0dd353fafdf2c44a56a8f979 b521d9b8e55a26909e3ac0292b42d8f3 0.1855701059103012 +206baa3e0dd353fafdf2c44a56a8f979 b8783f557b3ed4a9b4269539b1583419 0.18803419172763824 +206baa3e0dd353fafdf2c44a56a8f979 bd2031065307a5b5b38ea208e314d340 0.19527027010917664 +206baa3e0dd353fafdf2c44a56a8f979 bf4312f7e11603ff2ae87587fcebbc9c 0.17456166446208954 +206baa3e0dd353fafdf2c44a56a8f979 c13e1b0a3d3829bf266d9a2162207b28 0.16565217077732086 +206baa3e0dd353fafdf2c44a56a8f979 c6fe12ce4cddb1b8423b63e6dfad808b 0.15817221999168396 +206baa3e0dd353fafdf2c44a56a8f979 cb8d96ae1287284021e9038a79bf3131 0.25820624828338623 +206baa3e0dd353fafdf2c44a56a8f979 ccda3b30480708f505105d95da0bfb62 0.15352563560009003 +206baa3e0dd353fafdf2c44a56a8f979 d8e6b7b0368832247dbc5acab0fa4971 0.25854116678237915 +206baa3e0dd353fafdf2c44a56a8f979 dfa3146f46afd34506e6a71e0ec8b111 0.1774621158838272 +206baa3e0dd353fafdf2c44a56a8f979 e238a64ed05a08249266e0e5839548e5 0.20490463078022003 +206baa3e0dd353fafdf2c44a56a8f979 e396578f1078dd14484f24e821e31f7b 0.18020832538604736 +206baa3e0dd353fafdf2c44a56a8f979 e5f50fc1871b817d772009a19b1a639a 0.31838491559028625 +206baa3e0dd353fafdf2c44a56a8f979 e645222fbec3f59af2ffb3b22123ac56 0.20510171353816986 +206baa3e0dd353fafdf2c44a56a8f979 e956cc2ce89bd8b63426fbab21f2f2e6 0.16863636672496796 +206baa3e0dd353fafdf2c44a56a8f979 ecbbb5fea0464f857d513de5c23423f1 0.16126126050949097 +206baa3e0dd353fafdf2c44a56a8f979 f41879b82690dbbd64eba913bb60b084 0.1794992983341217 +206baa3e0dd353fafdf2c44a56a8f979 f4b3941d7d57b2f17e1f22ec3077cc57 0.23240000009536743 +206baa3e0dd353fafdf2c44a56a8f979 f64340086bf5617b5b73684e79e6851c 0.0 +206baa3e0dd353fafdf2c44a56a8f979 f67c4609c1e7a5fa403de7e22c501457 0.16185897588729858 +206baa3e0dd353fafdf2c44a56a8f979 fd032fad609be92a9a9d2a36e2e03faa 0.0 +206baa3e0dd353fafdf2c44a56a8f979 fe888f4b12c0b05171796bd6d1b4f590 0.17456166446208954 +22caa464d134048a0ce7feadcfbaf985 2594c18153258d768d72ca37db992969 0.1299065500497818 +22caa464d134048a0ce7feadcfbaf985 308c12f2c65e3b38fab8d3e6623dc423 0.24829234182834625 +22caa464d134048a0ce7feadcfbaf985 34db7b31435da7851e6e1ff442a302f3 0.18693384528160095 +22caa464d134048a0ce7feadcfbaf985 369db8943bdb18f238aa1561a6e1de9f 0.1508849561214447 +22caa464d134048a0ce7feadcfbaf985 3c062536401ebeab239c2490e6d3efea 0.2450253963470459 +22caa464d134048a0ce7feadcfbaf985 3fd08461a5678f97083d0ab80980d24e 0.24107883870601654 +22caa464d134048a0ce7feadcfbaf985 44e35311e08456d21bf5f156f7a1b960 0.17180734872817993 +22caa464d134048a0ce7feadcfbaf985 45cd7ce66538ba76795c7cd8a97cd55d 0.19589240849018097 +22caa464d134048a0ce7feadcfbaf985 482b7596f48574470f00a5e161ed8eb3 0.1299065500497818 +22caa464d134048a0ce7feadcfbaf985 4862f7aa77b183b09b99933c37a6d238 0.16126126050949097 +22caa464d134048a0ce7feadcfbaf985 4b2c76d6e1325bba41014003df684a1d 0.18816205859184265 +22caa464d134048a0ce7feadcfbaf985 4e4c5ae156d9bb517532c7d1aa8099f6 0.0 +22caa464d134048a0ce7feadcfbaf985 4e4e18c588fc35b5f1a99bc147e77020 0.1670183390378952 +22caa464d134048a0ce7feadcfbaf985 51de8a0c2b635cb654a2d81d4d0147ad 0.08033980429172516 +22caa464d134048a0ce7feadcfbaf985 521a975b888d41a0eb82a0d67464979b 0.11214953660964966 +22caa464d134048a0ce7feadcfbaf985 554ec45b177292cd26daed0902a89a24 0.13962264358997345 +22caa464d134048a0ce7feadcfbaf985 57e5a176ff73dde428390003172fdffb 0.2234756052494049 +22caa464d134048a0ce7feadcfbaf985 590e8de05fd1cecc79347f1257a7c14c 0.18418803811073303 +22caa464d134048a0ce7feadcfbaf985 61114735a84894739ff1a386694d9287 0.1467592567205429 +22caa464d134048a0ce7feadcfbaf985 66b3fd3631119304322f51a077d216a8 0.16029834747314453 +22caa464d134048a0ce7feadcfbaf985 66eabd96e837bc63970b8b43dc3e7d59 0.13253504037857056 +22caa464d134048a0ce7feadcfbaf985 677563d77f33dde9a437e9769cd97350 0.1670183390378952 +22caa464d134048a0ce7feadcfbaf985 6c194f239694aec7cf630c1ad0e43db7 0.13253504037857056 +22caa464d134048a0ce7feadcfbaf985 6c1ed97536601e49cd993c2c3dc0e628 0.12238095700740814 +22caa464d134048a0ce7feadcfbaf985 6d3e5d85b2aa35d58347bb4b9b203e43 0.3423168957233429 +22caa464d134048a0ce7feadcfbaf985 6dd32e33c78a21fef169e6423c91dfcd 0.19497668743133545 +22caa464d134048a0ce7feadcfbaf985 712ceab0f39ef3518910c2244af3d58f 0.1299065500497818 +22caa464d134048a0ce7feadcfbaf985 8423cb55f94b74aff6335ffc08e1ffa0 0.1814853847026825 +22caa464d134048a0ce7feadcfbaf985 857b927ef6cfe28868c7f0b4beb0f9c5 0.1670183390378952 +22caa464d134048a0ce7feadcfbaf985 88aa65483a9d0d188a09ae32f835fbd5 0.179986372590065 +22caa464d134048a0ce7feadcfbaf985 8ec183a3479d0541d4b13cff95940cee 0.1299065500497818 +22caa464d134048a0ce7feadcfbaf985 8f3fb318e9afc95f071ac38522976b1b 0.0 +22caa464d134048a0ce7feadcfbaf985 9374803bb59357889b692ca61dd87b48 0.18916666507720947 +22caa464d134048a0ce7feadcfbaf985 946b5f1cf84bc4409e87cbd1ee0ef26a 0.1881818026304245 +22caa464d134048a0ce7feadcfbaf985 955c2ad95941c2cab740e78216da597c 0.16126126050949097 +22caa464d134048a0ce7feadcfbaf985 9620df9ac2a3839d04df86692d43528f 0.1760256290435791 +22caa464d134048a0ce7feadcfbaf985 a04dff74cc5e783025a349d32f5ce915 0.16126126050949097 +22caa464d134048a0ce7feadcfbaf985 a2c496dfec8a1bf1f2a450e699b829ad 0.13715596497058868 +22caa464d134048a0ce7feadcfbaf985 ad8a15dd4bde7a1d96e95da04e910853 0.19589240849018097 +22caa464d134048a0ce7feadcfbaf985 af2135763c26212ed95a8a891c7dfca3 0.16029834747314453 +22caa464d134048a0ce7feadcfbaf985 b4c9b3e8f6e5852ee29efa686ffcdca0 0.1299065500497818 +22caa464d134048a0ce7feadcfbaf985 b521d9b8e55a26909e3ac0292b42d8f3 0.17180734872817993 +22caa464d134048a0ce7feadcfbaf985 b8783f557b3ed4a9b4269539b1583419 0.17019230127334595 +22caa464d134048a0ce7feadcfbaf985 bd2031065307a5b5b38ea208e314d340 0.19589240849018097 +22caa464d134048a0ce7feadcfbaf985 bf4312f7e11603ff2ae87587fcebbc9c 0.1881818026304245 +22caa464d134048a0ce7feadcfbaf985 c13e1b0a3d3829bf266d9a2162207b28 0.18816205859184265 +22caa464d134048a0ce7feadcfbaf985 c6fe12ce4cddb1b8423b63e6dfad808b 0.2250182330608368 +22caa464d134048a0ce7feadcfbaf985 cb8d96ae1287284021e9038a79bf3131 0.19497668743133545 +22caa464d134048a0ce7feadcfbaf985 ccda3b30480708f505105d95da0bfb62 0.14553570747375488 +22caa464d134048a0ce7feadcfbaf985 d8e6b7b0368832247dbc5acab0fa4971 0.24438412487506866 +22caa464d134048a0ce7feadcfbaf985 dfa3146f46afd34506e6a71e0ec8b111 0.18194444477558136 +22caa464d134048a0ce7feadcfbaf985 e238a64ed05a08249266e0e5839548e5 0.24402858316898346 +22caa464d134048a0ce7feadcfbaf985 e396578f1078dd14484f24e821e31f7b 0.16981981694698334 +22caa464d134048a0ce7feadcfbaf985 e5f50fc1871b817d772009a19b1a639a 0.2973637580871582 +22caa464d134048a0ce7feadcfbaf985 e645222fbec3f59af2ffb3b22123ac56 0.24829234182834625 +22caa464d134048a0ce7feadcfbaf985 e956cc2ce89bd8b63426fbab21f2f2e6 0.13962264358997345 +22caa464d134048a0ce7feadcfbaf985 ecbbb5fea0464f857d513de5c23423f1 0.0 +22caa464d134048a0ce7feadcfbaf985 f41879b82690dbbd64eba913bb60b084 0.1670183390378952 +22caa464d134048a0ce7feadcfbaf985 f4b3941d7d57b2f17e1f22ec3077cc57 0.24848750233650208 +22caa464d134048a0ce7feadcfbaf985 f64340086bf5617b5b73684e79e6851c 0.16126126050949097 +22caa464d134048a0ce7feadcfbaf985 f67c4609c1e7a5fa403de7e22c501457 0.18916666507720947 +22caa464d134048a0ce7feadcfbaf985 fd032fad609be92a9a9d2a36e2e03faa 0.16126126050949097 +22caa464d134048a0ce7feadcfbaf985 fe888f4b12c0b05171796bd6d1b4f590 0.1881818026304245 +2594c18153258d768d72ca37db992969 308c12f2c65e3b38fab8d3e6623dc423 0.22432850301265717 +2594c18153258d768d72ca37db992969 34db7b31435da7851e6e1ff442a302f3 0.18566595017910004 +2594c18153258d768d72ca37db992969 369db8943bdb18f238aa1561a6e1de9f 0.13482142984867096 +2594c18153258d768d72ca37db992969 3c062536401ebeab239c2490e6d3efea 0.21602793037891388 +2594c18153258d768d72ca37db992969 3fd08461a5678f97083d0ab80980d24e 0.23571395874023438 +2594c18153258d768d72ca37db992969 44e35311e08456d21bf5f156f7a1b960 0.15657344460487366 +2594c18153258d768d72ca37db992969 45cd7ce66538ba76795c7cd8a97cd55d 0.17064814269542694 +2594c18153258d768d72ca37db992969 482b7596f48574470f00a5e161ed8eb3 0.13878504931926727 +2594c18153258d768d72ca37db992969 4862f7aa77b183b09b99933c37a6d238 0.13636364042758942 +2594c18153258d768d72ca37db992969 4b2c76d6e1325bba41014003df684a1d 0.1805555522441864 +2594c18153258d768d72ca37db992969 4e4c5ae156d9bb517532c7d1aa8099f6 0.1299065500497818 +2594c18153258d768d72ca37db992969 4e4e18c588fc35b5f1a99bc147e77020 0.15141983330249786 +2594c18153258d768d72ca37db992969 51de8a0c2b635cb654a2d81d4d0147ad 0.15754717588424683 +2594c18153258d768d72ca37db992969 521a975b888d41a0eb82a0d67464979b 0.15458716452121735 +2594c18153258d768d72ca37db992969 554ec45b177292cd26daed0902a89a24 0.13066038489341736 +2594c18153258d768d72ca37db992969 57e5a176ff73dde428390003172fdffb 0.2103995978832245 +2594c18153258d768d72ca37db992969 590e8de05fd1cecc79347f1257a7c14c 0.1601097136735916 +2594c18153258d768d72ca37db992969 61114735a84894739ff1a386694d9287 0.15555556118488312 +2594c18153258d768d72ca37db992969 66b3fd3631119304322f51a077d216a8 0.16330274939537048 +2594c18153258d768d72ca37db992969 66eabd96e837bc63970b8b43dc3e7d59 0.13366283476352692 +2594c18153258d768d72ca37db992969 677563d77f33dde9a437e9769cd97350 0.15141983330249786 +2594c18153258d768d72ca37db992969 6c194f239694aec7cf630c1ad0e43db7 0.13366283476352692 +2594c18153258d768d72ca37db992969 6c1ed97536601e49cd993c2c3dc0e628 0.18194444477558136 +2594c18153258d768d72ca37db992969 6d3e5d85b2aa35d58347bb4b9b203e43 0.3503205180168152 +2594c18153258d768d72ca37db992969 6dd32e33c78a21fef169e6423c91dfcd 0.20712924003601074 +2594c18153258d768d72ca37db992969 712ceab0f39ef3518910c2244af3d58f 0.0 +2594c18153258d768d72ca37db992969 8423cb55f94b74aff6335ffc08e1ffa0 0.15473133325576782 +2594c18153258d768d72ca37db992969 857b927ef6cfe28868c7f0b4beb0f9c5 0.15141983330249786 +2594c18153258d768d72ca37db992969 88aa65483a9d0d188a09ae32f835fbd5 0.15171517431735992 +2594c18153258d768d72ca37db992969 8ec183a3479d0541d4b13cff95940cee 0.13878504931926727 +2594c18153258d768d72ca37db992969 8f3fb318e9afc95f071ac38522976b1b 0.1299065500497818 +2594c18153258d768d72ca37db992969 9374803bb59357889b692ca61dd87b48 0.172338604927063 +2594c18153258d768d72ca37db992969 946b5f1cf84bc4409e87cbd1ee0ef26a 0.1462976336479187 +2594c18153258d768d72ca37db992969 955c2ad95941c2cab740e78216da597c 0.13636364042758942 +2594c18153258d768d72ca37db992969 9620df9ac2a3839d04df86692d43528f 0.1589629054069519 +2594c18153258d768d72ca37db992969 a04dff74cc5e783025a349d32f5ce915 0.13636364042758942 +2594c18153258d768d72ca37db992969 a2c496dfec8a1bf1f2a450e699b829ad 0.14587154984474182 +2594c18153258d768d72ca37db992969 ad8a15dd4bde7a1d96e95da04e910853 0.17064814269542694 +2594c18153258d768d72ca37db992969 af2135763c26212ed95a8a891c7dfca3 0.16330274939537048 +2594c18153258d768d72ca37db992969 b4c9b3e8f6e5852ee29efa686ffcdca0 0.13878504931926727 +2594c18153258d768d72ca37db992969 b521d9b8e55a26909e3ac0292b42d8f3 0.15657344460487366 +2594c18153258d768d72ca37db992969 b8783f557b3ed4a9b4269539b1583419 0.2035033404827118 +2594c18153258d768d72ca37db992969 bd2031065307a5b5b38ea208e314d340 0.17064814269542694 +2594c18153258d768d72ca37db992969 bf4312f7e11603ff2ae87587fcebbc9c 0.1462976336479187 +2594c18153258d768d72ca37db992969 c13e1b0a3d3829bf266d9a2162207b28 0.1805555522441864 +2594c18153258d768d72ca37db992969 c6fe12ce4cddb1b8423b63e6dfad808b 0.2094017118215561 +2594c18153258d768d72ca37db992969 cb8d96ae1287284021e9038a79bf3131 0.20712924003601074 +2594c18153258d768d72ca37db992969 ccda3b30480708f505105d95da0bfb62 0.14821428060531616 +2594c18153258d768d72ca37db992969 d8e6b7b0368832247dbc5acab0fa4971 0.23924945294857025 +2594c18153258d768d72ca37db992969 dfa3146f46afd34506e6a71e0ec8b111 0.15654204785823822 +2594c18153258d768d72ca37db992969 e238a64ed05a08249266e0e5839548e5 0.22226230800151825 +2594c18153258d768d72ca37db992969 e396578f1078dd14484f24e821e31f7b 0.16875000298023224 +2594c18153258d768d72ca37db992969 e5f50fc1871b817d772009a19b1a639a 0.28114843368530273 +2594c18153258d768d72ca37db992969 e645222fbec3f59af2ffb3b22123ac56 0.22432850301265717 +2594c18153258d768d72ca37db992969 e956cc2ce89bd8b63426fbab21f2f2e6 0.13066038489341736 +2594c18153258d768d72ca37db992969 ecbbb5fea0464f857d513de5c23423f1 0.1299065500497818 +2594c18153258d768d72ca37db992969 f41879b82690dbbd64eba913bb60b084 0.15141983330249786 +2594c18153258d768d72ca37db992969 f4b3941d7d57b2f17e1f22ec3077cc57 0.2557837963104248 +2594c18153258d768d72ca37db992969 f64340086bf5617b5b73684e79e6851c 0.13636364042758942 +2594c18153258d768d72ca37db992969 f67c4609c1e7a5fa403de7e22c501457 0.172338604927063 +2594c18153258d768d72ca37db992969 fd032fad609be92a9a9d2a36e2e03faa 0.13636364042758942 +2594c18153258d768d72ca37db992969 fe888f4b12c0b05171796bd6d1b4f590 0.1462976336479187 +308c12f2c65e3b38fab8d3e6623dc423 34db7b31435da7851e6e1ff442a302f3 0.26084935665130615 +308c12f2c65e3b38fab8d3e6623dc423 369db8943bdb18f238aa1561a6e1de9f 0.2021988034248352 +308c12f2c65e3b38fab8d3e6623dc423 3c062536401ebeab239c2490e6d3efea 0.20027777552604675 +308c12f2c65e3b38fab8d3e6623dc423 3fd08461a5678f97083d0ab80980d24e 0.2915680408477783 +308c12f2c65e3b38fab8d3e6623dc423 44e35311e08456d21bf5f156f7a1b960 0.2276715636253357 +308c12f2c65e3b38fab8d3e6623dc423 45cd7ce66538ba76795c7cd8a97cd55d 0.25006303191185 +308c12f2c65e3b38fab8d3e6623dc423 482b7596f48574470f00a5e161ed8eb3 0.24072542786598206 +308c12f2c65e3b38fab8d3e6623dc423 4862f7aa77b183b09b99933c37a6d238 0.20510171353816986 +308c12f2c65e3b38fab8d3e6623dc423 4b2c76d6e1325bba41014003df684a1d 0.16624999046325684 +308c12f2c65e3b38fab8d3e6623dc423 4e4c5ae156d9bb517532c7d1aa8099f6 0.24829234182834625 +308c12f2c65e3b38fab8d3e6623dc423 4e4e18c588fc35b5f1a99bc147e77020 0.24133771657943726 +308c12f2c65e3b38fab8d3e6623dc423 51de8a0c2b635cb654a2d81d4d0147ad 0.2528011202812195 +308c12f2c65e3b38fab8d3e6623dc423 521a975b888d41a0eb82a0d67464979b 0.252981036901474 +308c12f2c65e3b38fab8d3e6623dc423 554ec45b177292cd26daed0902a89a24 0.23534664511680603 +308c12f2c65e3b38fab8d3e6623dc423 57e5a176ff73dde428390003172fdffb 0.19212597608566284 +308c12f2c65e3b38fab8d3e6623dc423 590e8de05fd1cecc79347f1257a7c14c 0.20072579383850098 +308c12f2c65e3b38fab8d3e6623dc423 61114735a84894739ff1a386694d9287 0.21295955777168274 +308c12f2c65e3b38fab8d3e6623dc423 66b3fd3631119304322f51a077d216a8 0.2539195120334625 +308c12f2c65e3b38fab8d3e6623dc423 66eabd96e837bc63970b8b43dc3e7d59 0.24886907637119293 +308c12f2c65e3b38fab8d3e6623dc423 677563d77f33dde9a437e9769cd97350 0.24133771657943726 +308c12f2c65e3b38fab8d3e6623dc423 6c194f239694aec7cf630c1ad0e43db7 0.24886907637119293 +308c12f2c65e3b38fab8d3e6623dc423 6c1ed97536601e49cd993c2c3dc0e628 0.27906110882759094 +308c12f2c65e3b38fab8d3e6623dc423 6d3e5d85b2aa35d58347bb4b9b203e43 0.3218255341053009 +308c12f2c65e3b38fab8d3e6623dc423 6dd32e33c78a21fef169e6423c91dfcd 0.28122496604919434 +308c12f2c65e3b38fab8d3e6623dc423 712ceab0f39ef3518910c2244af3d58f 0.22432850301265717 +308c12f2c65e3b38fab8d3e6623dc423 8423cb55f94b74aff6335ffc08e1ffa0 0.22094276547431946 +308c12f2c65e3b38fab8d3e6623dc423 857b927ef6cfe28868c7f0b4beb0f9c5 0.24133771657943726 +308c12f2c65e3b38fab8d3e6623dc423 88aa65483a9d0d188a09ae32f835fbd5 0.22094585001468658 +308c12f2c65e3b38fab8d3e6623dc423 8ec183a3479d0541d4b13cff95940cee 0.24072542786598206 +308c12f2c65e3b38fab8d3e6623dc423 8f3fb318e9afc95f071ac38522976b1b 0.24829234182834625 +308c12f2c65e3b38fab8d3e6623dc423 9374803bb59357889b692ca61dd87b48 0.23363351821899414 +308c12f2c65e3b38fab8d3e6623dc423 946b5f1cf84bc4409e87cbd1ee0ef26a 0.2426535040140152 +308c12f2c65e3b38fab8d3e6623dc423 955c2ad95941c2cab740e78216da597c 0.20510171353816986 +308c12f2c65e3b38fab8d3e6623dc423 9620df9ac2a3839d04df86692d43528f 0.22412633895874023 +308c12f2c65e3b38fab8d3e6623dc423 a04dff74cc5e783025a349d32f5ce915 0.20510171353816986 +308c12f2c65e3b38fab8d3e6623dc423 a2c496dfec8a1bf1f2a450e699b829ad 0.21772727370262146 +308c12f2c65e3b38fab8d3e6623dc423 ad8a15dd4bde7a1d96e95da04e910853 0.25006303191185 +308c12f2c65e3b38fab8d3e6623dc423 af2135763c26212ed95a8a891c7dfca3 0.2539195120334625 +308c12f2c65e3b38fab8d3e6623dc423 b4c9b3e8f6e5852ee29efa686ffcdca0 0.24072542786598206 +308c12f2c65e3b38fab8d3e6623dc423 b521d9b8e55a26909e3ac0292b42d8f3 0.2276715636253357 +308c12f2c65e3b38fab8d3e6623dc423 b8783f557b3ed4a9b4269539b1583419 0.2387251853942871 +308c12f2c65e3b38fab8d3e6623dc423 bd2031065307a5b5b38ea208e314d340 0.25006303191185 +308c12f2c65e3b38fab8d3e6623dc423 bf4312f7e11603ff2ae87587fcebbc9c 0.2426535040140152 +308c12f2c65e3b38fab8d3e6623dc423 c13e1b0a3d3829bf266d9a2162207b28 0.16624999046325684 +308c12f2c65e3b38fab8d3e6623dc423 c6fe12ce4cddb1b8423b63e6dfad808b 0.2680049240589142 +308c12f2c65e3b38fab8d3e6623dc423 cb8d96ae1287284021e9038a79bf3131 0.28122496604919434 +308c12f2c65e3b38fab8d3e6623dc423 ccda3b30480708f505105d95da0bfb62 0.20381462574005127 +308c12f2c65e3b38fab8d3e6623dc423 d8e6b7b0368832247dbc5acab0fa4971 0.28865283727645874 +308c12f2c65e3b38fab8d3e6623dc423 dfa3146f46afd34506e6a71e0ec8b111 0.22766949236392975 +308c12f2c65e3b38fab8d3e6623dc423 e238a64ed05a08249266e0e5839548e5 0.16721537709236145 +308c12f2c65e3b38fab8d3e6623dc423 e396578f1078dd14484f24e821e31f7b 0.260404497385025 +308c12f2c65e3b38fab8d3e6623dc423 e5f50fc1871b817d772009a19b1a639a 0.36929190158843994 +308c12f2c65e3b38fab8d3e6623dc423 e645222fbec3f59af2ffb3b22123ac56 0.0 +308c12f2c65e3b38fab8d3e6623dc423 e956cc2ce89bd8b63426fbab21f2f2e6 0.23534664511680603 +308c12f2c65e3b38fab8d3e6623dc423 ecbbb5fea0464f857d513de5c23423f1 0.24829234182834625 +308c12f2c65e3b38fab8d3e6623dc423 f41879b82690dbbd64eba913bb60b084 0.24133771657943726 +308c12f2c65e3b38fab8d3e6623dc423 f4b3941d7d57b2f17e1f22ec3077cc57 0.2022879421710968 +308c12f2c65e3b38fab8d3e6623dc423 f64340086bf5617b5b73684e79e6851c 0.20510171353816986 +308c12f2c65e3b38fab8d3e6623dc423 f67c4609c1e7a5fa403de7e22c501457 0.23363351821899414 +308c12f2c65e3b38fab8d3e6623dc423 fd032fad609be92a9a9d2a36e2e03faa 0.20510171353816986 +308c12f2c65e3b38fab8d3e6623dc423 fe888f4b12c0b05171796bd6d1b4f590 0.2426535040140152 +34db7b31435da7851e6e1ff442a302f3 369db8943bdb18f238aa1561a6e1de9f 0.19586195051670074 +34db7b31435da7851e6e1ff442a302f3 3c062536401ebeab239c2490e6d3efea 0.2569834589958191 +34db7b31435da7851e6e1ff442a302f3 3fd08461a5678f97083d0ab80980d24e 0.2370394468307495 +34db7b31435da7851e6e1ff442a302f3 44e35311e08456d21bf5f156f7a1b960 0.18693384528160095 +34db7b31435da7851e6e1ff442a302f3 45cd7ce66538ba76795c7cd8a97cd55d 0.20247778296470642 +34db7b31435da7851e6e1ff442a302f3 482b7596f48574470f00a5e161ed8eb3 0.170301154255867 +34db7b31435da7851e6e1ff442a302f3 4862f7aa77b183b09b99933c37a6d238 0.19063690304756165 +34db7b31435da7851e6e1ff442a302f3 4b2c76d6e1325bba41014003df684a1d 0.2149251103401184 +34db7b31435da7851e6e1ff442a302f3 4e4c5ae156d9bb517532c7d1aa8099f6 0.18693384528160095 +34db7b31435da7851e6e1ff442a302f3 4e4e18c588fc35b5f1a99bc147e77020 0.19681301712989807 +34db7b31435da7851e6e1ff442a302f3 51de8a0c2b635cb654a2d81d4d0147ad 0.1642722338438034 +34db7b31435da7851e6e1ff442a302f3 521a975b888d41a0eb82a0d67464979b 0.20185250043869019 +34db7b31435da7851e6e1ff442a302f3 554ec45b177292cd26daed0902a89a24 0.1553584784269333 +34db7b31435da7851e6e1ff442a302f3 57e5a176ff73dde428390003172fdffb 0.25667446851730347 +34db7b31435da7851e6e1ff442a302f3 590e8de05fd1cecc79347f1257a7c14c 0.23234038054943085 +34db7b31435da7851e6e1ff442a302f3 61114735a84894739ff1a386694d9287 0.1450183093547821 +34db7b31435da7851e6e1ff442a302f3 66b3fd3631119304322f51a077d216a8 0.15434540808200836 +34db7b31435da7851e6e1ff442a302f3 66eabd96e837bc63970b8b43dc3e7d59 0.18844598531723022 +34db7b31435da7851e6e1ff442a302f3 677563d77f33dde9a437e9769cd97350 0.19681301712989807 +34db7b31435da7851e6e1ff442a302f3 6c194f239694aec7cf630c1ad0e43db7 0.18844598531723022 +34db7b31435da7851e6e1ff442a302f3 6c1ed97536601e49cd993c2c3dc0e628 0.18174925446510315 +34db7b31435da7851e6e1ff442a302f3 6d3e5d85b2aa35d58347bb4b9b203e43 0.35817545652389526 +34db7b31435da7851e6e1ff442a302f3 6dd32e33c78a21fef169e6423c91dfcd 0.2142554521560669 +34db7b31435da7851e6e1ff442a302f3 712ceab0f39ef3518910c2244af3d58f 0.18566595017910004 +34db7b31435da7851e6e1ff442a302f3 8423cb55f94b74aff6335ffc08e1ffa0 0.18684686720371246 +34db7b31435da7851e6e1ff442a302f3 857b927ef6cfe28868c7f0b4beb0f9c5 0.19681301712989807 +34db7b31435da7851e6e1ff442a302f3 88aa65483a9d0d188a09ae32f835fbd5 0.2222527265548706 +34db7b31435da7851e6e1ff442a302f3 8ec183a3479d0541d4b13cff95940cee 0.170301154255867 +34db7b31435da7851e6e1ff442a302f3 8f3fb318e9afc95f071ac38522976b1b 0.18693384528160095 +34db7b31435da7851e6e1ff442a302f3 9374803bb59357889b692ca61dd87b48 0.1904895007610321 +34db7b31435da7851e6e1ff442a302f3 946b5f1cf84bc4409e87cbd1ee0ef26a 0.1791025549173355 +34db7b31435da7851e6e1ff442a302f3 955c2ad95941c2cab740e78216da597c 0.19063690304756165 +34db7b31435da7851e6e1ff442a302f3 9620df9ac2a3839d04df86692d43528f 0.22673991322517395 +34db7b31435da7851e6e1ff442a302f3 a04dff74cc5e783025a349d32f5ce915 0.19063690304756165 +34db7b31435da7851e6e1ff442a302f3 a2c496dfec8a1bf1f2a450e699b829ad 0.16405463218688965 +34db7b31435da7851e6e1ff442a302f3 ad8a15dd4bde7a1d96e95da04e910853 0.20247778296470642 +34db7b31435da7851e6e1ff442a302f3 af2135763c26212ed95a8a891c7dfca3 0.15434540808200836 +34db7b31435da7851e6e1ff442a302f3 b4c9b3e8f6e5852ee29efa686ffcdca0 0.170301154255867 +34db7b31435da7851e6e1ff442a302f3 b521d9b8e55a26909e3ac0292b42d8f3 0.18693384528160095 +34db7b31435da7851e6e1ff442a302f3 b8783f557b3ed4a9b4269539b1583419 0.2097344994544983 +34db7b31435da7851e6e1ff442a302f3 bd2031065307a5b5b38ea208e314d340 0.20247778296470642 +34db7b31435da7851e6e1ff442a302f3 bf4312f7e11603ff2ae87587fcebbc9c 0.1791025549173355 +34db7b31435da7851e6e1ff442a302f3 c13e1b0a3d3829bf266d9a2162207b28 0.2149251103401184 +34db7b31435da7851e6e1ff442a302f3 c6fe12ce4cddb1b8423b63e6dfad808b 0.23951667547225952 +34db7b31435da7851e6e1ff442a302f3 cb8d96ae1287284021e9038a79bf3131 0.2142554521560669 +34db7b31435da7851e6e1ff442a302f3 ccda3b30480708f505105d95da0bfb62 0.20181281864643097 +34db7b31435da7851e6e1ff442a302f3 d8e6b7b0368832247dbc5acab0fa4971 0.24960550665855408 +34db7b31435da7851e6e1ff442a302f3 dfa3146f46afd34506e6a71e0ec8b111 0.17261464893817902 +34db7b31435da7851e6e1ff442a302f3 e238a64ed05a08249266e0e5839548e5 0.2563694715499878 +34db7b31435da7851e6e1ff442a302f3 e396578f1078dd14484f24e821e31f7b 0.17686964571475983 +34db7b31435da7851e6e1ff442a302f3 e5f50fc1871b817d772009a19b1a639a 0.307221382856369 +34db7b31435da7851e6e1ff442a302f3 e645222fbec3f59af2ffb3b22123ac56 0.26084935665130615 +34db7b31435da7851e6e1ff442a302f3 e956cc2ce89bd8b63426fbab21f2f2e6 0.1553584784269333 +34db7b31435da7851e6e1ff442a302f3 ecbbb5fea0464f857d513de5c23423f1 0.18693384528160095 +34db7b31435da7851e6e1ff442a302f3 f41879b82690dbbd64eba913bb60b084 0.19681301712989807 +34db7b31435da7851e6e1ff442a302f3 f4b3941d7d57b2f17e1f22ec3077cc57 0.2836070656776428 +34db7b31435da7851e6e1ff442a302f3 f64340086bf5617b5b73684e79e6851c 0.19063690304756165 +34db7b31435da7851e6e1ff442a302f3 f67c4609c1e7a5fa403de7e22c501457 0.1904895007610321 +34db7b31435da7851e6e1ff442a302f3 fd032fad609be92a9a9d2a36e2e03faa 0.19063690304756165 +34db7b31435da7851e6e1ff442a302f3 fe888f4b12c0b05171796bd6d1b4f590 0.1791025549173355 +369db8943bdb18f238aa1561a6e1de9f 3c062536401ebeab239c2490e6d3efea 0.1710902750492096 +369db8943bdb18f238aa1561a6e1de9f 3fd08461a5678f97083d0ab80980d24e 0.28122907876968384 +369db8943bdb18f238aa1561a6e1de9f 44e35311e08456d21bf5f156f7a1b960 0.18835145235061646 +369db8943bdb18f238aa1561a6e1de9f 45cd7ce66538ba76795c7cd8a97cd55d 0.18214286863803864 +369db8943bdb18f238aa1561a6e1de9f 482b7596f48574470f00a5e161ed8eb3 0.14330357313156128 +369db8943bdb18f238aa1561a6e1de9f 4862f7aa77b183b09b99933c37a6d238 0.14166666567325592 +369db8943bdb18f238aa1561a6e1de9f 4b2c76d6e1325bba41014003df684a1d 0.17076271772384644 +369db8943bdb18f238aa1561a6e1de9f 4e4c5ae156d9bb517532c7d1aa8099f6 0.1508849561214447 +369db8943bdb18f238aa1561a6e1de9f 4e4e18c588fc35b5f1a99bc147e77020 0.18974359333515167 +369db8943bdb18f238aa1561a6e1de9f 51de8a0c2b635cb654a2d81d4d0147ad 0.14481982588768005 +369db8943bdb18f238aa1561a6e1de9f 521a975b888d41a0eb82a0d67464979b 0.17391304671764374 +369db8943bdb18f238aa1561a6e1de9f 554ec45b177292cd26daed0902a89a24 0.18272756040096283 +369db8943bdb18f238aa1561a6e1de9f 57e5a176ff73dde428390003172fdffb 0.13323864340782166 +369db8943bdb18f238aa1561a6e1de9f 590e8de05fd1cecc79347f1257a7c14c 0.13855932652950287 +369db8943bdb18f238aa1561a6e1de9f 61114735a84894739ff1a386694d9287 0.14080357551574707 +369db8943bdb18f238aa1561a6e1de9f 66b3fd3631119304322f51a077d216a8 0.1473385989665985 +369db8943bdb18f238aa1561a6e1de9f 66eabd96e837bc63970b8b43dc3e7d59 0.171255961060524 +369db8943bdb18f238aa1561a6e1de9f 677563d77f33dde9a437e9769cd97350 0.18974359333515167 +369db8943bdb18f238aa1561a6e1de9f 6c194f239694aec7cf630c1ad0e43db7 0.171255961060524 +369db8943bdb18f238aa1561a6e1de9f 6c1ed97536601e49cd993c2c3dc0e628 0.19292035698890686 +369db8943bdb18f238aa1561a6e1de9f 6d3e5d85b2aa35d58347bb4b9b203e43 0.3354527950286865 +369db8943bdb18f238aa1561a6e1de9f 6dd32e33c78a21fef169e6423c91dfcd 0.21725794672966003 +369db8943bdb18f238aa1561a6e1de9f 712ceab0f39ef3518910c2244af3d58f 0.13482142984867096 +369db8943bdb18f238aa1561a6e1de9f 8423cb55f94b74aff6335ffc08e1ffa0 0.18124999105930328 +369db8943bdb18f238aa1561a6e1de9f 857b927ef6cfe28868c7f0b4beb0f9c5 0.18974359333515167 +369db8943bdb18f238aa1561a6e1de9f 88aa65483a9d0d188a09ae32f835fbd5 0.1288461536169052 +369db8943bdb18f238aa1561a6e1de9f 8ec183a3479d0541d4b13cff95940cee 0.14330357313156128 +369db8943bdb18f238aa1561a6e1de9f 8f3fb318e9afc95f071ac38522976b1b 0.1508849561214447 +369db8943bdb18f238aa1561a6e1de9f 9374803bb59357889b692ca61dd87b48 0.17991453409194946 +369db8943bdb18f238aa1561a6e1de9f 946b5f1cf84bc4409e87cbd1ee0ef26a 0.1796630322933197 +369db8943bdb18f238aa1561a6e1de9f 955c2ad95941c2cab740e78216da597c 0.14166666567325592 +369db8943bdb18f238aa1561a6e1de9f 9620df9ac2a3839d04df86692d43528f 0.1636752188205719 +369db8943bdb18f238aa1561a6e1de9f a04dff74cc5e783025a349d32f5ce915 0.14166666567325592 +369db8943bdb18f238aa1561a6e1de9f a2c496dfec8a1bf1f2a450e699b829ad 0.13407079875469208 +369db8943bdb18f238aa1561a6e1de9f ad8a15dd4bde7a1d96e95da04e910853 0.18214286863803864 +369db8943bdb18f238aa1561a6e1de9f af2135763c26212ed95a8a891c7dfca3 0.1473385989665985 +369db8943bdb18f238aa1561a6e1de9f b4c9b3e8f6e5852ee29efa686ffcdca0 0.14330357313156128 +369db8943bdb18f238aa1561a6e1de9f b521d9b8e55a26909e3ac0292b42d8f3 0.18835145235061646 +369db8943bdb18f238aa1561a6e1de9f b8783f557b3ed4a9b4269539b1583419 0.17416884005069733 +369db8943bdb18f238aa1561a6e1de9f bd2031065307a5b5b38ea208e314d340 0.18214286863803864 +369db8943bdb18f238aa1561a6e1de9f bf4312f7e11603ff2ae87587fcebbc9c 0.1796630322933197 +369db8943bdb18f238aa1561a6e1de9f c13e1b0a3d3829bf266d9a2162207b28 0.17076271772384644 +369db8943bdb18f238aa1561a6e1de9f c6fe12ce4cddb1b8423b63e6dfad808b 0.22347065806388855 +369db8943bdb18f238aa1561a6e1de9f cb8d96ae1287284021e9038a79bf3131 0.21725794672966003 +369db8943bdb18f238aa1561a6e1de9f ccda3b30480708f505105d95da0bfb62 0.11666665971279144 +369db8943bdb18f238aa1561a6e1de9f d8e6b7b0368832247dbc5acab0fa4971 0.28216782212257385 +369db8943bdb18f238aa1561a6e1de9f dfa3146f46afd34506e6a71e0ec8b111 0.15044641494750977 +369db8943bdb18f238aa1561a6e1de9f e238a64ed05a08249266e0e5839548e5 0.17049731314182281 +369db8943bdb18f238aa1561a6e1de9f e396578f1078dd14484f24e821e31f7b 0.17853447794914246 +369db8943bdb18f238aa1561a6e1de9f e5f50fc1871b817d772009a19b1a639a 0.3103604316711426 +369db8943bdb18f238aa1561a6e1de9f e645222fbec3f59af2ffb3b22123ac56 0.2021988034248352 +369db8943bdb18f238aa1561a6e1de9f e956cc2ce89bd8b63426fbab21f2f2e6 0.18272756040096283 +369db8943bdb18f238aa1561a6e1de9f ecbbb5fea0464f857d513de5c23423f1 0.1508849561214447 +369db8943bdb18f238aa1561a6e1de9f f41879b82690dbbd64eba913bb60b084 0.18974359333515167 +369db8943bdb18f238aa1561a6e1de9f f4b3941d7d57b2f17e1f22ec3077cc57 0.24130207300186157 +369db8943bdb18f238aa1561a6e1de9f f64340086bf5617b5b73684e79e6851c 0.14166666567325592 +369db8943bdb18f238aa1561a6e1de9f f67c4609c1e7a5fa403de7e22c501457 0.17991453409194946 +369db8943bdb18f238aa1561a6e1de9f fd032fad609be92a9a9d2a36e2e03faa 0.14166666567325592 +369db8943bdb18f238aa1561a6e1de9f fe888f4b12c0b05171796bd6d1b4f590 0.1796630322933197 +3c062536401ebeab239c2490e6d3efea 3fd08461a5678f97083d0ab80980d24e 0.31348440051078796 +3c062536401ebeab239c2490e6d3efea 44e35311e08456d21bf5f156f7a1b960 0.2496812343597412 +3c062536401ebeab239c2490e6d3efea 45cd7ce66538ba76795c7cd8a97cd55d 0.25083333253860474 +3c062536401ebeab239c2490e6d3efea 482b7596f48574470f00a5e161ed8eb3 0.23108965158462524 +3c062536401ebeab239c2490e6d3efea 4862f7aa77b183b09b99933c37a6d238 0.21626733243465424 +3c062536401ebeab239c2490e6d3efea 4b2c76d6e1325bba41014003df684a1d 0.21629519760608673 +3c062536401ebeab239c2490e6d3efea 4e4c5ae156d9bb517532c7d1aa8099f6 0.2450253963470459 +3c062536401ebeab239c2490e6d3efea 4e4e18c588fc35b5f1a99bc147e77020 0.2199999988079071 +3c062536401ebeab239c2490e6d3efea 51de8a0c2b635cb654a2d81d4d0147ad 0.26642560958862305 +3c062536401ebeab239c2490e6d3efea 521a975b888d41a0eb82a0d67464979b 0.23867766559123993 +3c062536401ebeab239c2490e6d3efea 554ec45b177292cd26daed0902a89a24 0.25841203331947327 +3c062536401ebeab239c2490e6d3efea 57e5a176ff73dde428390003172fdffb 0.18781040608882904 +3c062536401ebeab239c2490e6d3efea 590e8de05fd1cecc79347f1257a7c14c 0.2215520739555359 +3c062536401ebeab239c2490e6d3efea 61114735a84894739ff1a386694d9287 0.2261667400598526 +3c062536401ebeab239c2490e6d3efea 66b3fd3631119304322f51a077d216a8 0.254822313785553 +3c062536401ebeab239c2490e6d3efea 66eabd96e837bc63970b8b43dc3e7d59 0.24982742965221405 +3c062536401ebeab239c2490e6d3efea 677563d77f33dde9a437e9769cd97350 0.2199999988079071 +3c062536401ebeab239c2490e6d3efea 6c194f239694aec7cf630c1ad0e43db7 0.24982742965221405 +3c062536401ebeab239c2490e6d3efea 6c1ed97536601e49cd993c2c3dc0e628 0.2734387218952179 +3c062536401ebeab239c2490e6d3efea 6d3e5d85b2aa35d58347bb4b9b203e43 0.3284958600997925 +3c062536401ebeab239c2490e6d3efea 6dd32e33c78a21fef169e6423c91dfcd 0.23575128614902496 +3c062536401ebeab239c2490e6d3efea 712ceab0f39ef3518910c2244af3d58f 0.21602793037891388 +3c062536401ebeab239c2490e6d3efea 8423cb55f94b74aff6335ffc08e1ffa0 0.2496812343597412 +3c062536401ebeab239c2490e6d3efea 857b927ef6cfe28868c7f0b4beb0f9c5 0.2199999988079071 +3c062536401ebeab239c2490e6d3efea 88aa65483a9d0d188a09ae32f835fbd5 0.1571590155363083 +3c062536401ebeab239c2490e6d3efea 8ec183a3479d0541d4b13cff95940cee 0.23108965158462524 +3c062536401ebeab239c2490e6d3efea 8f3fb318e9afc95f071ac38522976b1b 0.2450253963470459 +3c062536401ebeab239c2490e6d3efea 9374803bb59357889b692ca61dd87b48 0.21040353178977966 +3c062536401ebeab239c2490e6d3efea 946b5f1cf84bc4409e87cbd1ee0ef26a 0.22277778387069702 +3c062536401ebeab239c2490e6d3efea 955c2ad95941c2cab740e78216da597c 0.21626733243465424 +3c062536401ebeab239c2490e6d3efea 9620df9ac2a3839d04df86692d43528f 0.2120450735092163 +3c062536401ebeab239c2490e6d3efea a04dff74cc5e783025a349d32f5ce915 0.21626733243465424 +3c062536401ebeab239c2490e6d3efea a2c496dfec8a1bf1f2a450e699b829ad 0.23224084079265594 +3c062536401ebeab239c2490e6d3efea ad8a15dd4bde7a1d96e95da04e910853 0.25083333253860474 +3c062536401ebeab239c2490e6d3efea af2135763c26212ed95a8a891c7dfca3 0.254822313785553 +3c062536401ebeab239c2490e6d3efea b4c9b3e8f6e5852ee29efa686ffcdca0 0.23108965158462524 +3c062536401ebeab239c2490e6d3efea b521d9b8e55a26909e3ac0292b42d8f3 0.2496812343597412 +3c062536401ebeab239c2490e6d3efea b8783f557b3ed4a9b4269539b1583419 0.2510378360748291 +3c062536401ebeab239c2490e6d3efea bd2031065307a5b5b38ea208e314d340 0.25083333253860474 +3c062536401ebeab239c2490e6d3efea bf4312f7e11603ff2ae87587fcebbc9c 0.22277778387069702 +3c062536401ebeab239c2490e6d3efea c13e1b0a3d3829bf266d9a2162207b28 0.21629519760608673 +3c062536401ebeab239c2490e6d3efea c6fe12ce4cddb1b8423b63e6dfad808b 0.2465105652809143 +3c062536401ebeab239c2490e6d3efea cb8d96ae1287284021e9038a79bf3131 0.23575128614902496 +3c062536401ebeab239c2490e6d3efea ccda3b30480708f505105d95da0bfb62 0.20694881677627563 +3c062536401ebeab239c2490e6d3efea d8e6b7b0368832247dbc5acab0fa4971 0.3212357461452484 +3c062536401ebeab239c2490e6d3efea dfa3146f46afd34506e6a71e0ec8b111 0.23659664392471313 +3c062536401ebeab239c2490e6d3efea e238a64ed05a08249266e0e5839548e5 0.19794541597366333 +3c062536401ebeab239c2490e6d3efea e396578f1078dd14484f24e821e31f7b 0.24008607864379883 +3c062536401ebeab239c2490e6d3efea e5f50fc1871b817d772009a19b1a639a 0.34800398349761963 +3c062536401ebeab239c2490e6d3efea e645222fbec3f59af2ffb3b22123ac56 0.20027777552604675 +3c062536401ebeab239c2490e6d3efea e956cc2ce89bd8b63426fbab21f2f2e6 0.25841203331947327 +3c062536401ebeab239c2490e6d3efea ecbbb5fea0464f857d513de5c23423f1 0.2450253963470459 +3c062536401ebeab239c2490e6d3efea f41879b82690dbbd64eba913bb60b084 0.2199999988079071 +3c062536401ebeab239c2490e6d3efea f4b3941d7d57b2f17e1f22ec3077cc57 0.22980231046676636 +3c062536401ebeab239c2490e6d3efea f64340086bf5617b5b73684e79e6851c 0.21626733243465424 +3c062536401ebeab239c2490e6d3efea f67c4609c1e7a5fa403de7e22c501457 0.21040353178977966 +3c062536401ebeab239c2490e6d3efea fd032fad609be92a9a9d2a36e2e03faa 0.21626733243465424 +3c062536401ebeab239c2490e6d3efea fe888f4b12c0b05171796bd6d1b4f590 0.22277778387069702 +3fd08461a5678f97083d0ab80980d24e 44e35311e08456d21bf5f156f7a1b960 0.22981683909893036 +3fd08461a5678f97083d0ab80980d24e 45cd7ce66538ba76795c7cd8a97cd55d 0.2584065794944763 +3fd08461a5678f97083d0ab80980d24e 482b7596f48574470f00a5e161ed8eb3 0.26488474011421204 +3fd08461a5678f97083d0ab80980d24e 4862f7aa77b183b09b99933c37a6d238 0.26228100061416626 +3fd08461a5678f97083d0ab80980d24e 4b2c76d6e1325bba41014003df684a1d 0.25520962476730347 +3fd08461a5678f97083d0ab80980d24e 4e4c5ae156d9bb517532c7d1aa8099f6 0.24107883870601654 +3fd08461a5678f97083d0ab80980d24e 4e4e18c588fc35b5f1a99bc147e77020 0.22067616879940033 +3fd08461a5678f97083d0ab80980d24e 51de8a0c2b635cb654a2d81d4d0147ad 0.21391277015209198 +3fd08461a5678f97083d0ab80980d24e 521a975b888d41a0eb82a0d67464979b 0.27986159920692444 +3fd08461a5678f97083d0ab80980d24e 554ec45b177292cd26daed0902a89a24 0.19925440847873688 +3fd08461a5678f97083d0ab80980d24e 57e5a176ff73dde428390003172fdffb 0.33301305770874023 +3fd08461a5678f97083d0ab80980d24e 590e8de05fd1cecc79347f1257a7c14c 0.29016974568367004 +3fd08461a5678f97083d0ab80980d24e 61114735a84894739ff1a386694d9287 0.2517646253108978 +3fd08461a5678f97083d0ab80980d24e 66b3fd3631119304322f51a077d216a8 0.23707875609397888 +3fd08461a5678f97083d0ab80980d24e 66eabd96e837bc63970b8b43dc3e7d59 0.24107883870601654 +3fd08461a5678f97083d0ab80980d24e 677563d77f33dde9a437e9769cd97350 0.22067616879940033 +3fd08461a5678f97083d0ab80980d24e 6c194f239694aec7cf630c1ad0e43db7 0.24107883870601654 +3fd08461a5678f97083d0ab80980d24e 6c1ed97536601e49cd993c2c3dc0e628 0.24044007062911987 +3fd08461a5678f97083d0ab80980d24e 6d3e5d85b2aa35d58347bb4b9b203e43 0.4378044903278351 +3fd08461a5678f97083d0ab80980d24e 6dd32e33c78a21fef169e6423c91dfcd 0.27205583453178406 +3fd08461a5678f97083d0ab80980d24e 712ceab0f39ef3518910c2244af3d58f 0.23571395874023438 +3fd08461a5678f97083d0ab80980d24e 8423cb55f94b74aff6335ffc08e1ffa0 0.2277747094631195 +3fd08461a5678f97083d0ab80980d24e 857b927ef6cfe28868c7f0b4beb0f9c5 0.22067616879940033 +3fd08461a5678f97083d0ab80980d24e 88aa65483a9d0d188a09ae32f835fbd5 0.27892056107521057 +3fd08461a5678f97083d0ab80980d24e 8ec183a3479d0541d4b13cff95940cee 0.26488474011421204 +3fd08461a5678f97083d0ab80980d24e 8f3fb318e9afc95f071ac38522976b1b 0.24107883870601654 +3fd08461a5678f97083d0ab80980d24e 9374803bb59357889b692ca61dd87b48 0.27291035652160645 +3fd08461a5678f97083d0ab80980d24e 946b5f1cf84bc4409e87cbd1ee0ef26a 0.2573534846305847 +3fd08461a5678f97083d0ab80980d24e 955c2ad95941c2cab740e78216da597c 0.26228100061416626 +3fd08461a5678f97083d0ab80980d24e 9620df9ac2a3839d04df86692d43528f 0.2986887991428375 +3fd08461a5678f97083d0ab80980d24e a04dff74cc5e783025a349d32f5ce915 0.26228100061416626 +3fd08461a5678f97083d0ab80980d24e a2c496dfec8a1bf1f2a450e699b829ad 0.26745861768722534 +3fd08461a5678f97083d0ab80980d24e ad8a15dd4bde7a1d96e95da04e910853 0.2584065794944763 +3fd08461a5678f97083d0ab80980d24e af2135763c26212ed95a8a891c7dfca3 0.23707875609397888 +3fd08461a5678f97083d0ab80980d24e b4c9b3e8f6e5852ee29efa686ffcdca0 0.26488474011421204 +3fd08461a5678f97083d0ab80980d24e b521d9b8e55a26909e3ac0292b42d8f3 0.22981683909893036 +3fd08461a5678f97083d0ab80980d24e b8783f557b3ed4a9b4269539b1583419 0.2906493842601776 +3fd08461a5678f97083d0ab80980d24e bd2031065307a5b5b38ea208e314d340 0.2584065794944763 +3fd08461a5678f97083d0ab80980d24e bf4312f7e11603ff2ae87587fcebbc9c 0.2573534846305847 +3fd08461a5678f97083d0ab80980d24e c13e1b0a3d3829bf266d9a2162207b28 0.25520962476730347 +3fd08461a5678f97083d0ab80980d24e c6fe12ce4cddb1b8423b63e6dfad808b 0.2742891311645508 +3fd08461a5678f97083d0ab80980d24e cb8d96ae1287284021e9038a79bf3131 0.27205583453178406 +3fd08461a5678f97083d0ab80980d24e ccda3b30480708f505105d95da0bfb62 0.25883054733276367 +3fd08461a5678f97083d0ab80980d24e d8e6b7b0368832247dbc5acab0fa4971 0.11491407454013824 +3fd08461a5678f97083d0ab80980d24e dfa3146f46afd34506e6a71e0ec8b111 0.2120269387960434 +3fd08461a5678f97083d0ab80980d24e e238a64ed05a08249266e0e5839548e5 0.3450869917869568 +3fd08461a5678f97083d0ab80980d24e e396578f1078dd14484f24e821e31f7b 0.28819385170936584 +3fd08461a5678f97083d0ab80980d24e e5f50fc1871b817d772009a19b1a639a 0.2793523073196411 +3fd08461a5678f97083d0ab80980d24e e645222fbec3f59af2ffb3b22123ac56 0.2915680408477783 +3fd08461a5678f97083d0ab80980d24e e956cc2ce89bd8b63426fbab21f2f2e6 0.19925440847873688 +3fd08461a5678f97083d0ab80980d24e ecbbb5fea0464f857d513de5c23423f1 0.24107883870601654 +3fd08461a5678f97083d0ab80980d24e f41879b82690dbbd64eba913bb60b084 0.22067616879940033 +3fd08461a5678f97083d0ab80980d24e f4b3941d7d57b2f17e1f22ec3077cc57 0.360309362411499 +3fd08461a5678f97083d0ab80980d24e f64340086bf5617b5b73684e79e6851c 0.26228100061416626 +3fd08461a5678f97083d0ab80980d24e f67c4609c1e7a5fa403de7e22c501457 0.27291035652160645 +3fd08461a5678f97083d0ab80980d24e fd032fad609be92a9a9d2a36e2e03faa 0.26228100061416626 +3fd08461a5678f97083d0ab80980d24e fe888f4b12c0b05171796bd6d1b4f590 0.2573534846305847 +44e35311e08456d21bf5f156f7a1b960 45cd7ce66538ba76795c7cd8a97cd55d 0.18796296417713165 +44e35311e08456d21bf5f156f7a1b960 482b7596f48574470f00a5e161ed8eb3 0.21408730745315552 +44e35311e08456d21bf5f156f7a1b960 4862f7aa77b183b09b99933c37a6d238 0.1855701059103012 +44e35311e08456d21bf5f156f7a1b960 4b2c76d6e1325bba41014003df684a1d 0.15259653329849243 +44e35311e08456d21bf5f156f7a1b960 4e4c5ae156d9bb517532c7d1aa8099f6 0.17180734872817993 +44e35311e08456d21bf5f156f7a1b960 4e4e18c588fc35b5f1a99bc147e77020 0.1502920538187027 +44e35311e08456d21bf5f156f7a1b960 51de8a0c2b635cb654a2d81d4d0147ad 0.1550511121749878 +44e35311e08456d21bf5f156f7a1b960 521a975b888d41a0eb82a0d67464979b 0.17964527010917664 +44e35311e08456d21bf5f156f7a1b960 554ec45b177292cd26daed0902a89a24 0.09980769455432892 +44e35311e08456d21bf5f156f7a1b960 57e5a176ff73dde428390003172fdffb 0.21074682474136353 +44e35311e08456d21bf5f156f7a1b960 590e8de05fd1cecc79347f1257a7c14c 0.18267706036567688 +44e35311e08456d21bf5f156f7a1b960 61114735a84894739ff1a386694d9287 0.18103894591331482 +44e35311e08456d21bf5f156f7a1b960 66b3fd3631119304322f51a077d216a8 0.1607804298400879 +44e35311e08456d21bf5f156f7a1b960 66eabd96e837bc63970b8b43dc3e7d59 0.1501103937625885 +44e35311e08456d21bf5f156f7a1b960 677563d77f33dde9a437e9769cd97350 0.1502920538187027 +44e35311e08456d21bf5f156f7a1b960 6c194f239694aec7cf630c1ad0e43db7 0.1501103937625885 +44e35311e08456d21bf5f156f7a1b960 6c1ed97536601e49cd993c2c3dc0e628 0.1654205620288849 +44e35311e08456d21bf5f156f7a1b960 6d3e5d85b2aa35d58347bb4b9b203e43 0.36737966537475586 +44e35311e08456d21bf5f156f7a1b960 6dd32e33c78a21fef169e6423c91dfcd 0.2054545283317566 +44e35311e08456d21bf5f156f7a1b960 712ceab0f39ef3518910c2244af3d58f 0.15657344460487366 +44e35311e08456d21bf5f156f7a1b960 8423cb55f94b74aff6335ffc08e1ffa0 0.07740384340286255 +44e35311e08456d21bf5f156f7a1b960 857b927ef6cfe28868c7f0b4beb0f9c5 0.1502920538187027 +44e35311e08456d21bf5f156f7a1b960 88aa65483a9d0d188a09ae32f835fbd5 0.20509906113147736 +44e35311e08456d21bf5f156f7a1b960 8ec183a3479d0541d4b13cff95940cee 0.21408730745315552 +44e35311e08456d21bf5f156f7a1b960 8f3fb318e9afc95f071ac38522976b1b 0.17180734872817993 +44e35311e08456d21bf5f156f7a1b960 9374803bb59357889b692ca61dd87b48 0.18201327323913574 +44e35311e08456d21bf5f156f7a1b960 946b5f1cf84bc4409e87cbd1ee0ef26a 0.13445210456848145 +44e35311e08456d21bf5f156f7a1b960 955c2ad95941c2cab740e78216da597c 0.1855701059103012 +44e35311e08456d21bf5f156f7a1b960 9620df9ac2a3839d04df86692d43528f 0.18689115345478058 +44e35311e08456d21bf5f156f7a1b960 a04dff74cc5e783025a349d32f5ce915 0.1855701059103012 +44e35311e08456d21bf5f156f7a1b960 a2c496dfec8a1bf1f2a450e699b829ad 0.1872519850730896 +44e35311e08456d21bf5f156f7a1b960 ad8a15dd4bde7a1d96e95da04e910853 0.18796296417713165 +44e35311e08456d21bf5f156f7a1b960 af2135763c26212ed95a8a891c7dfca3 0.1607804298400879 +44e35311e08456d21bf5f156f7a1b960 b4c9b3e8f6e5852ee29efa686ffcdca0 0.21408730745315552 +44e35311e08456d21bf5f156f7a1b960 b521d9b8e55a26909e3ac0292b42d8f3 0.0 +44e35311e08456d21bf5f156f7a1b960 b8783f557b3ed4a9b4269539b1583419 0.20741499960422516 +44e35311e08456d21bf5f156f7a1b960 bd2031065307a5b5b38ea208e314d340 0.18796296417713165 +44e35311e08456d21bf5f156f7a1b960 bf4312f7e11603ff2ae87587fcebbc9c 0.13445210456848145 +44e35311e08456d21bf5f156f7a1b960 c13e1b0a3d3829bf266d9a2162207b28 0.15259653329849243 +44e35311e08456d21bf5f156f7a1b960 c6fe12ce4cddb1b8423b63e6dfad808b 0.26070019602775574 +44e35311e08456d21bf5f156f7a1b960 cb8d96ae1287284021e9038a79bf3131 0.2054545283317566 +44e35311e08456d21bf5f156f7a1b960 ccda3b30480708f505105d95da0bfb62 0.1626991182565689 +44e35311e08456d21bf5f156f7a1b960 d8e6b7b0368832247dbc5acab0fa4971 0.23704902827739716 +44e35311e08456d21bf5f156f7a1b960 dfa3146f46afd34506e6a71e0ec8b111 0.18696226179599762 +44e35311e08456d21bf5f156f7a1b960 e238a64ed05a08249266e0e5839548e5 0.23677034676074982 +44e35311e08456d21bf5f156f7a1b960 e396578f1078dd14484f24e821e31f7b 0.1971607655286789 +44e35311e08456d21bf5f156f7a1b960 e5f50fc1871b817d772009a19b1a639a 0.30490967631340027 +44e35311e08456d21bf5f156f7a1b960 e645222fbec3f59af2ffb3b22123ac56 0.2276715636253357 +44e35311e08456d21bf5f156f7a1b960 e956cc2ce89bd8b63426fbab21f2f2e6 0.09980769455432892 +44e35311e08456d21bf5f156f7a1b960 ecbbb5fea0464f857d513de5c23423f1 0.17180734872817993 +44e35311e08456d21bf5f156f7a1b960 f41879b82690dbbd64eba913bb60b084 0.1502920538187027 +44e35311e08456d21bf5f156f7a1b960 f4b3941d7d57b2f17e1f22ec3077cc57 0.24544353783130646 +44e35311e08456d21bf5f156f7a1b960 f64340086bf5617b5b73684e79e6851c 0.1855701059103012 +44e35311e08456d21bf5f156f7a1b960 f67c4609c1e7a5fa403de7e22c501457 0.18201327323913574 +44e35311e08456d21bf5f156f7a1b960 fd032fad609be92a9a9d2a36e2e03faa 0.1855701059103012 +44e35311e08456d21bf5f156f7a1b960 fe888f4b12c0b05171796bd6d1b4f590 0.13445210456848145 +45cd7ce66538ba76795c7cd8a97cd55d 482b7596f48574470f00a5e161ed8eb3 0.17903386056423187 +45cd7ce66538ba76795c7cd8a97cd55d 4862f7aa77b183b09b99933c37a6d238 0.19527027010917664 +45cd7ce66538ba76795c7cd8a97cd55d 4b2c76d6e1325bba41014003df684a1d 0.20825892686843872 +45cd7ce66538ba76795c7cd8a97cd55d 4e4c5ae156d9bb517532c7d1aa8099f6 0.19589240849018097 +45cd7ce66538ba76795c7cd8a97cd55d 4e4e18c588fc35b5f1a99bc147e77020 0.17504872381687164 +45cd7ce66538ba76795c7cd8a97cd55d 51de8a0c2b635cb654a2d81d4d0147ad 0.16915981471538544 +45cd7ce66538ba76795c7cd8a97cd55d 521a975b888d41a0eb82a0d67464979b 0.19589240849018097 +45cd7ce66538ba76795c7cd8a97cd55d 554ec45b177292cd26daed0902a89a24 0.180494487285614 +45cd7ce66538ba76795c7cd8a97cd55d 57e5a176ff73dde428390003172fdffb 0.24791355431079865 +45cd7ce66538ba76795c7cd8a97cd55d 590e8de05fd1cecc79347f1257a7c14c 0.20644016563892365 +45cd7ce66538ba76795c7cd8a97cd55d 61114735a84894739ff1a386694d9287 0.19659188389778137 +45cd7ce66538ba76795c7cd8a97cd55d 66b3fd3631119304322f51a077d216a8 0.17569200694561005 +45cd7ce66538ba76795c7cd8a97cd55d 66eabd96e837bc63970b8b43dc3e7d59 0.1802748590707779 +45cd7ce66538ba76795c7cd8a97cd55d 677563d77f33dde9a437e9769cd97350 0.17504872381687164 +45cd7ce66538ba76795c7cd8a97cd55d 6c194f239694aec7cf630c1ad0e43db7 0.1802748590707779 +45cd7ce66538ba76795c7cd8a97cd55d 6c1ed97536601e49cd993c2c3dc0e628 0.18597069382667542 +45cd7ce66538ba76795c7cd8a97cd55d 6d3e5d85b2aa35d58347bb4b9b203e43 0.38020244240760803 +45cd7ce66538ba76795c7cd8a97cd55d 6dd32e33c78a21fef169e6423c91dfcd 0.18005257844924927 +45cd7ce66538ba76795c7cd8a97cd55d 712ceab0f39ef3518910c2244af3d58f 0.17064814269542694 +45cd7ce66538ba76795c7cd8a97cd55d 8423cb55f94b74aff6335ffc08e1ffa0 0.16338443756103516 +45cd7ce66538ba76795c7cd8a97cd55d 857b927ef6cfe28868c7f0b4beb0f9c5 0.17504872381687164 +45cd7ce66538ba76795c7cd8a97cd55d 88aa65483a9d0d188a09ae32f835fbd5 0.1941964328289032 +45cd7ce66538ba76795c7cd8a97cd55d 8ec183a3479d0541d4b13cff95940cee 0.17903386056423187 +45cd7ce66538ba76795c7cd8a97cd55d 8f3fb318e9afc95f071ac38522976b1b 0.19589240849018097 +45cd7ce66538ba76795c7cd8a97cd55d 9374803bb59357889b692ca61dd87b48 0.1969093382358551 +45cd7ce66538ba76795c7cd8a97cd55d 946b5f1cf84bc4409e87cbd1ee0ef26a 0.1623992621898651 +45cd7ce66538ba76795c7cd8a97cd55d 955c2ad95941c2cab740e78216da597c 0.19527027010917664 +45cd7ce66538ba76795c7cd8a97cd55d 9620df9ac2a3839d04df86692d43528f 0.22384823858737946 +45cd7ce66538ba76795c7cd8a97cd55d a04dff74cc5e783025a349d32f5ce915 0.19527027010917664 +45cd7ce66538ba76795c7cd8a97cd55d a2c496dfec8a1bf1f2a450e699b829ad 0.18717680871486664 +45cd7ce66538ba76795c7cd8a97cd55d ad8a15dd4bde7a1d96e95da04e910853 0.0 +45cd7ce66538ba76795c7cd8a97cd55d af2135763c26212ed95a8a891c7dfca3 0.17569200694561005 +45cd7ce66538ba76795c7cd8a97cd55d b4c9b3e8f6e5852ee29efa686ffcdca0 0.17903386056423187 +45cd7ce66538ba76795c7cd8a97cd55d b521d9b8e55a26909e3ac0292b42d8f3 0.18796296417713165 +45cd7ce66538ba76795c7cd8a97cd55d b8783f557b3ed4a9b4269539b1583419 0.22734321653842926 +45cd7ce66538ba76795c7cd8a97cd55d bd2031065307a5b5b38ea208e314d340 0.0 +45cd7ce66538ba76795c7cd8a97cd55d bf4312f7e11603ff2ae87587fcebbc9c 0.1623992621898651 +45cd7ce66538ba76795c7cd8a97cd55d c13e1b0a3d3829bf266d9a2162207b28 0.20825892686843872 +45cd7ce66538ba76795c7cd8a97cd55d c6fe12ce4cddb1b8423b63e6dfad808b 0.24705126881599426 +45cd7ce66538ba76795c7cd8a97cd55d cb8d96ae1287284021e9038a79bf3131 0.18005257844924927 +45cd7ce66538ba76795c7cd8a97cd55d ccda3b30480708f505105d95da0bfb62 0.17212837934494019 +45cd7ce66538ba76795c7cd8a97cd55d d8e6b7b0368832247dbc5acab0fa4971 0.2531878352165222 +45cd7ce66538ba76795c7cd8a97cd55d dfa3146f46afd34506e6a71e0ec8b111 0.16875000298023224 +45cd7ce66538ba76795c7cd8a97cd55d e238a64ed05a08249266e0e5839548e5 0.25882190465927124 +45cd7ce66538ba76795c7cd8a97cd55d e396578f1078dd14484f24e821e31f7b 0.20047202706336975 +45cd7ce66538ba76795c7cd8a97cd55d e5f50fc1871b817d772009a19b1a639a 0.2950034439563751 +45cd7ce66538ba76795c7cd8a97cd55d e645222fbec3f59af2ffb3b22123ac56 0.25006303191185 +45cd7ce66538ba76795c7cd8a97cd55d e956cc2ce89bd8b63426fbab21f2f2e6 0.180494487285614 +45cd7ce66538ba76795c7cd8a97cd55d ecbbb5fea0464f857d513de5c23423f1 0.19589240849018097 +45cd7ce66538ba76795c7cd8a97cd55d f41879b82690dbbd64eba913bb60b084 0.17504872381687164 +45cd7ce66538ba76795c7cd8a97cd55d f4b3941d7d57b2f17e1f22ec3077cc57 0.2746303677558899 +45cd7ce66538ba76795c7cd8a97cd55d f64340086bf5617b5b73684e79e6851c 0.19527027010917664 +45cd7ce66538ba76795c7cd8a97cd55d f67c4609c1e7a5fa403de7e22c501457 0.1969093382358551 +45cd7ce66538ba76795c7cd8a97cd55d fd032fad609be92a9a9d2a36e2e03faa 0.19527027010917664 +45cd7ce66538ba76795c7cd8a97cd55d fe888f4b12c0b05171796bd6d1b4f590 0.1623992621898651 +482b7596f48574470f00a5e161ed8eb3 4862f7aa77b183b09b99933c37a6d238 0.1536363661289215 +482b7596f48574470f00a5e161ed8eb3 4b2c76d6e1325bba41014003df684a1d 0.20360226929187775 +482b7596f48574470f00a5e161ed8eb3 4e4c5ae156d9bb517532c7d1aa8099f6 0.1299065500497818 +482b7596f48574470f00a5e161ed8eb3 4e4e18c588fc35b5f1a99bc147e77020 0.1734422892332077 +482b7596f48574470f00a5e161ed8eb3 51de8a0c2b635cb654a2d81d4d0147ad 0.13994082808494568 +482b7596f48574470f00a5e161ed8eb3 521a975b888d41a0eb82a0d67464979b 0.1379629671573639 +482b7596f48574470f00a5e161ed8eb3 554ec45b177292cd26daed0902a89a24 0.18194444477558136 +482b7596f48574470f00a5e161ed8eb3 57e5a176ff73dde428390003172fdffb 0.21714480221271515 +482b7596f48574470f00a5e161ed8eb3 590e8de05fd1cecc79347f1257a7c14c 0.19079670310020447 +482b7596f48574470f00a5e161ed8eb3 61114735a84894739ff1a386694d9287 0.13878504931926727 +482b7596f48574470f00a5e161ed8eb3 66b3fd3631119304322f51a077d216a8 0.16029834747314453 +482b7596f48574470f00a5e161ed8eb3 66eabd96e837bc63970b8b43dc3e7d59 0.16390669345855713 +482b7596f48574470f00a5e161ed8eb3 677563d77f33dde9a437e9769cd97350 0.1734422892332077 +482b7596f48574470f00a5e161ed8eb3 6c194f239694aec7cf630c1ad0e43db7 0.16390669345855713 +482b7596f48574470f00a5e161ed8eb3 6c1ed97536601e49cd993c2c3dc0e628 0.17429906129837036 +482b7596f48574470f00a5e161ed8eb3 6d3e5d85b2aa35d58347bb4b9b203e43 0.34070104360580444 +482b7596f48574470f00a5e161ed8eb3 6dd32e33c78a21fef169e6423c91dfcd 0.22035038471221924 +482b7596f48574470f00a5e161ed8eb3 712ceab0f39ef3518910c2244af3d58f 0.13878504931926727 +482b7596f48574470f00a5e161ed8eb3 8423cb55f94b74aff6335ffc08e1ffa0 0.21429890394210815 +482b7596f48574470f00a5e161ed8eb3 857b927ef6cfe28868c7f0b4beb0f9c5 0.1734422892332077 +482b7596f48574470f00a5e161ed8eb3 88aa65483a9d0d188a09ae32f835fbd5 0.179986372590065 +482b7596f48574470f00a5e161ed8eb3 8ec183a3479d0541d4b13cff95940cee 0.0 +482b7596f48574470f00a5e161ed8eb3 8f3fb318e9afc95f071ac38522976b1b 0.1299065500497818 +482b7596f48574470f00a5e161ed8eb3 9374803bb59357889b692ca61dd87b48 0.18201327323913574 +482b7596f48574470f00a5e161ed8eb3 946b5f1cf84bc4409e87cbd1ee0ef26a 0.18442131578922272 +482b7596f48574470f00a5e161ed8eb3 955c2ad95941c2cab740e78216da597c 0.1536363661289215 +482b7596f48574470f00a5e161ed8eb3 9620df9ac2a3839d04df86692d43528f 0.20010730624198914 +482b7596f48574470f00a5e161ed8eb3 a04dff74cc5e783025a349d32f5ce915 0.1536363661289215 +482b7596f48574470f00a5e161ed8eb3 a2c496dfec8a1bf1f2a450e699b829ad 0.11966212093830109 +482b7596f48574470f00a5e161ed8eb3 ad8a15dd4bde7a1d96e95da04e910853 0.17903386056423187 +482b7596f48574470f00a5e161ed8eb3 af2135763c26212ed95a8a891c7dfca3 0.16029834747314453 +482b7596f48574470f00a5e161ed8eb3 b4c9b3e8f6e5852ee29efa686ffcdca0 0.0 +482b7596f48574470f00a5e161ed8eb3 b521d9b8e55a26909e3ac0292b42d8f3 0.21408730745315552 +482b7596f48574470f00a5e161ed8eb3 b8783f557b3ed4a9b4269539b1583419 0.17272727191448212 +482b7596f48574470f00a5e161ed8eb3 bd2031065307a5b5b38ea208e314d340 0.17903386056423187 +482b7596f48574470f00a5e161ed8eb3 bf4312f7e11603ff2ae87587fcebbc9c 0.18442131578922272 +482b7596f48574470f00a5e161ed8eb3 c13e1b0a3d3829bf266d9a2162207b28 0.20360226929187775 +482b7596f48574470f00a5e161ed8eb3 c6fe12ce4cddb1b8423b63e6dfad808b 0.20990675687789917 +482b7596f48574470f00a5e161ed8eb3 cb8d96ae1287284021e9038a79bf3131 0.22035038471221924 +482b7596f48574470f00a5e161ed8eb3 ccda3b30480708f505105d95da0bfb62 0.1451359987258911 +482b7596f48574470f00a5e161ed8eb3 d8e6b7b0368832247dbc5acab0fa4971 0.28359106183052063 +482b7596f48574470f00a5e161ed8eb3 dfa3146f46afd34506e6a71e0ec8b111 0.15754717588424683 +482b7596f48574470f00a5e161ed8eb3 e238a64ed05a08249266e0e5839548e5 0.20826144516468048 +482b7596f48574470f00a5e161ed8eb3 e396578f1078dd14484f24e821e31f7b 0.16981981694698334 +482b7596f48574470f00a5e161ed8eb3 e5f50fc1871b817d772009a19b1a639a 0.3057619631290436 +482b7596f48574470f00a5e161ed8eb3 e645222fbec3f59af2ffb3b22123ac56 0.24072542786598206 +482b7596f48574470f00a5e161ed8eb3 e956cc2ce89bd8b63426fbab21f2f2e6 0.18194444477558136 +482b7596f48574470f00a5e161ed8eb3 ecbbb5fea0464f857d513de5c23423f1 0.1299065500497818 +482b7596f48574470f00a5e161ed8eb3 f41879b82690dbbd64eba913bb60b084 0.1734422892332077 +482b7596f48574470f00a5e161ed8eb3 f4b3941d7d57b2f17e1f22ec3077cc57 0.25922858715057373 +482b7596f48574470f00a5e161ed8eb3 f64340086bf5617b5b73684e79e6851c 0.1536363661289215 +482b7596f48574470f00a5e161ed8eb3 f67c4609c1e7a5fa403de7e22c501457 0.18201327323913574 +482b7596f48574470f00a5e161ed8eb3 fd032fad609be92a9a9d2a36e2e03faa 0.1536363661289215 +482b7596f48574470f00a5e161ed8eb3 fe888f4b12c0b05171796bd6d1b4f590 0.18442131578922272 +4862f7aa77b183b09b99933c37a6d238 4b2c76d6e1325bba41014003df684a1d 0.16565217077732086 +4862f7aa77b183b09b99933c37a6d238 4e4c5ae156d9bb517532c7d1aa8099f6 0.16126126050949097 +4862f7aa77b183b09b99933c37a6d238 4e4e18c588fc35b5f1a99bc147e77020 0.1794992983341217 +4862f7aa77b183b09b99933c37a6d238 51de8a0c2b635cb654a2d81d4d0147ad 0.18073394894599915 +4862f7aa77b183b09b99933c37a6d238 521a975b888d41a0eb82a0d67464979b 0.18451327085494995 +4862f7aa77b183b09b99933c37a6d238 554ec45b177292cd26daed0902a89a24 0.16863636672496796 +4862f7aa77b183b09b99933c37a6d238 57e5a176ff73dde428390003172fdffb 0.19674795866012573 +4862f7aa77b183b09b99933c37a6d238 590e8de05fd1cecc79347f1257a7c14c 0.17416884005069733 +4862f7aa77b183b09b99933c37a6d238 61114735a84894739ff1a386694d9287 0.13358452916145325 +4862f7aa77b183b09b99933c37a6d238 66b3fd3631119304322f51a077d216a8 0.19192370772361755 +4862f7aa77b183b09b99933c37a6d238 66eabd96e837bc63970b8b43dc3e7d59 0.1545124351978302 +4862f7aa77b183b09b99933c37a6d238 677563d77f33dde9a437e9769cd97350 0.1794992983341217 +4862f7aa77b183b09b99933c37a6d238 6c194f239694aec7cf630c1ad0e43db7 0.1545124351978302 +4862f7aa77b183b09b99933c37a6d238 6c1ed97536601e49cd993c2c3dc0e628 0.2147493064403534 +4862f7aa77b183b09b99933c37a6d238 6d3e5d85b2aa35d58347bb4b9b203e43 0.31670618057250977 +4862f7aa77b183b09b99933c37a6d238 6dd32e33c78a21fef169e6423c91dfcd 0.25820624828338623 +4862f7aa77b183b09b99933c37a6d238 712ceab0f39ef3518910c2244af3d58f 0.13636364042758942 +4862f7aa77b183b09b99933c37a6d238 8423cb55f94b74aff6335ffc08e1ffa0 0.1783207356929779 +4862f7aa77b183b09b99933c37a6d238 857b927ef6cfe28868c7f0b4beb0f9c5 0.1794992983341217 +4862f7aa77b183b09b99933c37a6d238 88aa65483a9d0d188a09ae32f835fbd5 0.14788462221622467 +4862f7aa77b183b09b99933c37a6d238 8ec183a3479d0541d4b13cff95940cee 0.1536363661289215 +4862f7aa77b183b09b99933c37a6d238 8f3fb318e9afc95f071ac38522976b1b 0.16126126050949097 +4862f7aa77b183b09b99933c37a6d238 9374803bb59357889b692ca61dd87b48 0.16185897588729858 +4862f7aa77b183b09b99933c37a6d238 946b5f1cf84bc4409e87cbd1ee0ef26a 0.17456166446208954 +4862f7aa77b183b09b99933c37a6d238 955c2ad95941c2cab740e78216da597c 0.0 +4862f7aa77b183b09b99933c37a6d238 9620df9ac2a3839d04df86692d43528f 0.1368589699268341 +4862f7aa77b183b09b99933c37a6d238 a04dff74cc5e783025a349d32f5ce915 0.0 +4862f7aa77b183b09b99933c37a6d238 a2c496dfec8a1bf1f2a450e699b829ad 0.14414414763450623 +4862f7aa77b183b09b99933c37a6d238 ad8a15dd4bde7a1d96e95da04e910853 0.19527027010917664 +4862f7aa77b183b09b99933c37a6d238 af2135763c26212ed95a8a891c7dfca3 0.19192370772361755 +4862f7aa77b183b09b99933c37a6d238 b4c9b3e8f6e5852ee29efa686ffcdca0 0.1536363661289215 +4862f7aa77b183b09b99933c37a6d238 b521d9b8e55a26909e3ac0292b42d8f3 0.1855701059103012 +4862f7aa77b183b09b99933c37a6d238 b8783f557b3ed4a9b4269539b1583419 0.18803419172763824 +4862f7aa77b183b09b99933c37a6d238 bd2031065307a5b5b38ea208e314d340 0.19527027010917664 +4862f7aa77b183b09b99933c37a6d238 bf4312f7e11603ff2ae87587fcebbc9c 0.17456166446208954 +4862f7aa77b183b09b99933c37a6d238 c13e1b0a3d3829bf266d9a2162207b28 0.16565217077732086 +4862f7aa77b183b09b99933c37a6d238 c6fe12ce4cddb1b8423b63e6dfad808b 0.15817221999168396 +4862f7aa77b183b09b99933c37a6d238 cb8d96ae1287284021e9038a79bf3131 0.25820624828338623 +4862f7aa77b183b09b99933c37a6d238 ccda3b30480708f505105d95da0bfb62 0.15352563560009003 +4862f7aa77b183b09b99933c37a6d238 d8e6b7b0368832247dbc5acab0fa4971 0.25854116678237915 +4862f7aa77b183b09b99933c37a6d238 dfa3146f46afd34506e6a71e0ec8b111 0.1774621158838272 +4862f7aa77b183b09b99933c37a6d238 e238a64ed05a08249266e0e5839548e5 0.20490463078022003 +4862f7aa77b183b09b99933c37a6d238 e396578f1078dd14484f24e821e31f7b 0.18020832538604736 +4862f7aa77b183b09b99933c37a6d238 e5f50fc1871b817d772009a19b1a639a 0.31838491559028625 +4862f7aa77b183b09b99933c37a6d238 e645222fbec3f59af2ffb3b22123ac56 0.20510171353816986 +4862f7aa77b183b09b99933c37a6d238 e956cc2ce89bd8b63426fbab21f2f2e6 0.16863636672496796 +4862f7aa77b183b09b99933c37a6d238 ecbbb5fea0464f857d513de5c23423f1 0.16126126050949097 +4862f7aa77b183b09b99933c37a6d238 f41879b82690dbbd64eba913bb60b084 0.1794992983341217 +4862f7aa77b183b09b99933c37a6d238 f4b3941d7d57b2f17e1f22ec3077cc57 0.23240000009536743 +4862f7aa77b183b09b99933c37a6d238 f64340086bf5617b5b73684e79e6851c 0.0 +4862f7aa77b183b09b99933c37a6d238 f67c4609c1e7a5fa403de7e22c501457 0.16185897588729858 +4862f7aa77b183b09b99933c37a6d238 fd032fad609be92a9a9d2a36e2e03faa 0.0 +4862f7aa77b183b09b99933c37a6d238 fe888f4b12c0b05171796bd6d1b4f590 0.17456166446208954 +4b2c76d6e1325bba41014003df684a1d 4e4c5ae156d9bb517532c7d1aa8099f6 0.18816205859184265 +4b2c76d6e1325bba41014003df684a1d 4e4e18c588fc35b5f1a99bc147e77020 0.1795157790184021 +4b2c76d6e1325bba41014003df684a1d 51de8a0c2b635cb654a2d81d4d0147ad 0.1764553040266037 +4b2c76d6e1325bba41014003df684a1d 521a975b888d41a0eb82a0d67464979b 0.19514106214046478 +4b2c76d6e1325bba41014003df684a1d 554ec45b177292cd26daed0902a89a24 0.15917792916297913 +4b2c76d6e1325bba41014003df684a1d 57e5a176ff73dde428390003172fdffb 0.20021428167819977 +4b2c76d6e1325bba41014003df684a1d 590e8de05fd1cecc79347f1257a7c14c 0.1623644381761551 +4b2c76d6e1325bba41014003df684a1d 61114735a84894739ff1a386694d9287 0.18744173645973206 +4b2c76d6e1325bba41014003df684a1d 66b3fd3631119304322f51a077d216a8 0.2031242847442627 +4b2c76d6e1325bba41014003df684a1d 66eabd96e837bc63970b8b43dc3e7d59 0.1738334596157074 +4b2c76d6e1325bba41014003df684a1d 677563d77f33dde9a437e9769cd97350 0.1795157790184021 +4b2c76d6e1325bba41014003df684a1d 6c194f239694aec7cf630c1ad0e43db7 0.1738334596157074 +4b2c76d6e1325bba41014003df684a1d 6c1ed97536601e49cd993c2c3dc0e628 0.21185897290706635 +4b2c76d6e1325bba41014003df684a1d 6d3e5d85b2aa35d58347bb4b9b203e43 0.3163369596004486 +4b2c76d6e1325bba41014003df684a1d 6dd32e33c78a21fef169e6423c91dfcd 0.2336372584104538 +4b2c76d6e1325bba41014003df684a1d 712ceab0f39ef3518910c2244af3d58f 0.1805555522441864 +4b2c76d6e1325bba41014003df684a1d 8423cb55f94b74aff6335ffc08e1ffa0 0.14464005827903748 +4b2c76d6e1325bba41014003df684a1d 857b927ef6cfe28868c7f0b4beb0f9c5 0.1795157790184021 +4b2c76d6e1325bba41014003df684a1d 88aa65483a9d0d188a09ae32f835fbd5 0.17630967497825623 +4b2c76d6e1325bba41014003df684a1d 8ec183a3479d0541d4b13cff95940cee 0.20360226929187775 +4b2c76d6e1325bba41014003df684a1d 8f3fb318e9afc95f071ac38522976b1b 0.18816205859184265 +4b2c76d6e1325bba41014003df684a1d 9374803bb59357889b692ca61dd87b48 0.20324721932411194 +4b2c76d6e1325bba41014003df684a1d 946b5f1cf84bc4409e87cbd1ee0ef26a 0.172338604927063 +4b2c76d6e1325bba41014003df684a1d 955c2ad95941c2cab740e78216da597c 0.16565217077732086 +4b2c76d6e1325bba41014003df684a1d 9620df9ac2a3839d04df86692d43528f 0.16711045801639557 +4b2c76d6e1325bba41014003df684a1d a04dff74cc5e783025a349d32f5ce915 0.16565217077732086 +4b2c76d6e1325bba41014003df684a1d a2c496dfec8a1bf1f2a450e699b829ad 0.17113526165485382 +4b2c76d6e1325bba41014003df684a1d ad8a15dd4bde7a1d96e95da04e910853 0.20825892686843872 +4b2c76d6e1325bba41014003df684a1d af2135763c26212ed95a8a891c7dfca3 0.2031242847442627 +4b2c76d6e1325bba41014003df684a1d b4c9b3e8f6e5852ee29efa686ffcdca0 0.20360226929187775 +4b2c76d6e1325bba41014003df684a1d b521d9b8e55a26909e3ac0292b42d8f3 0.15259653329849243 +4b2c76d6e1325bba41014003df684a1d b8783f557b3ed4a9b4269539b1583419 0.20376601815223694 +4b2c76d6e1325bba41014003df684a1d bd2031065307a5b5b38ea208e314d340 0.20825892686843872 +4b2c76d6e1325bba41014003df684a1d bf4312f7e11603ff2ae87587fcebbc9c 0.172338604927063 +4b2c76d6e1325bba41014003df684a1d c13e1b0a3d3829bf266d9a2162207b28 0.0 +4b2c76d6e1325bba41014003df684a1d c6fe12ce4cddb1b8423b63e6dfad808b 0.22618980705738068 +4b2c76d6e1325bba41014003df684a1d cb8d96ae1287284021e9038a79bf3131 0.2336372584104538 +4b2c76d6e1325bba41014003df684a1d ccda3b30480708f505105d95da0bfb62 0.15576370060443878 +4b2c76d6e1325bba41014003df684a1d d8e6b7b0368832247dbc5acab0fa4971 0.26001477241516113 +4b2c76d6e1325bba41014003df684a1d dfa3146f46afd34506e6a71e0ec8b111 0.1996607631444931 +4b2c76d6e1325bba41014003df684a1d e238a64ed05a08249266e0e5839548e5 0.20831280946731567 +4b2c76d6e1325bba41014003df684a1d e396578f1078dd14484f24e821e31f7b 0.2251555621623993 +4b2c76d6e1325bba41014003df684a1d e5f50fc1871b817d772009a19b1a639a 0.3215883672237396 +4b2c76d6e1325bba41014003df684a1d e645222fbec3f59af2ffb3b22123ac56 0.16624999046325684 +4b2c76d6e1325bba41014003df684a1d e956cc2ce89bd8b63426fbab21f2f2e6 0.15917792916297913 +4b2c76d6e1325bba41014003df684a1d ecbbb5fea0464f857d513de5c23423f1 0.18816205859184265 +4b2c76d6e1325bba41014003df684a1d f41879b82690dbbd64eba913bb60b084 0.1795157790184021 +4b2c76d6e1325bba41014003df684a1d f4b3941d7d57b2f17e1f22ec3077cc57 0.2078142762184143 +4b2c76d6e1325bba41014003df684a1d f64340086bf5617b5b73684e79e6851c 0.16565217077732086 +4b2c76d6e1325bba41014003df684a1d f67c4609c1e7a5fa403de7e22c501457 0.20324721932411194 +4b2c76d6e1325bba41014003df684a1d fd032fad609be92a9a9d2a36e2e03faa 0.16565217077732086 +4b2c76d6e1325bba41014003df684a1d fe888f4b12c0b05171796bd6d1b4f590 0.172338604927063 +4e4c5ae156d9bb517532c7d1aa8099f6 4e4e18c588fc35b5f1a99bc147e77020 0.1670183390378952 +4e4c5ae156d9bb517532c7d1aa8099f6 51de8a0c2b635cb654a2d81d4d0147ad 0.08033980429172516 +4e4c5ae156d9bb517532c7d1aa8099f6 521a975b888d41a0eb82a0d67464979b 0.11214953660964966 +4e4c5ae156d9bb517532c7d1aa8099f6 554ec45b177292cd26daed0902a89a24 0.13962264358997345 +4e4c5ae156d9bb517532c7d1aa8099f6 57e5a176ff73dde428390003172fdffb 0.2234756052494049 +4e4c5ae156d9bb517532c7d1aa8099f6 590e8de05fd1cecc79347f1257a7c14c 0.18418803811073303 +4e4c5ae156d9bb517532c7d1aa8099f6 61114735a84894739ff1a386694d9287 0.1467592567205429 +4e4c5ae156d9bb517532c7d1aa8099f6 66b3fd3631119304322f51a077d216a8 0.16029834747314453 +4e4c5ae156d9bb517532c7d1aa8099f6 66eabd96e837bc63970b8b43dc3e7d59 0.13253504037857056 +4e4c5ae156d9bb517532c7d1aa8099f6 677563d77f33dde9a437e9769cd97350 0.1670183390378952 +4e4c5ae156d9bb517532c7d1aa8099f6 6c194f239694aec7cf630c1ad0e43db7 0.13253504037857056 +4e4c5ae156d9bb517532c7d1aa8099f6 6c1ed97536601e49cd993c2c3dc0e628 0.12238095700740814 +4e4c5ae156d9bb517532c7d1aa8099f6 6d3e5d85b2aa35d58347bb4b9b203e43 0.3423168957233429 +4e4c5ae156d9bb517532c7d1aa8099f6 6dd32e33c78a21fef169e6423c91dfcd 0.19497668743133545 +4e4c5ae156d9bb517532c7d1aa8099f6 712ceab0f39ef3518910c2244af3d58f 0.1299065500497818 +4e4c5ae156d9bb517532c7d1aa8099f6 8423cb55f94b74aff6335ffc08e1ffa0 0.1814853847026825 +4e4c5ae156d9bb517532c7d1aa8099f6 857b927ef6cfe28868c7f0b4beb0f9c5 0.1670183390378952 +4e4c5ae156d9bb517532c7d1aa8099f6 88aa65483a9d0d188a09ae32f835fbd5 0.179986372590065 +4e4c5ae156d9bb517532c7d1aa8099f6 8ec183a3479d0541d4b13cff95940cee 0.1299065500497818 +4e4c5ae156d9bb517532c7d1aa8099f6 8f3fb318e9afc95f071ac38522976b1b 0.0 +4e4c5ae156d9bb517532c7d1aa8099f6 9374803bb59357889b692ca61dd87b48 0.18916666507720947 +4e4c5ae156d9bb517532c7d1aa8099f6 946b5f1cf84bc4409e87cbd1ee0ef26a 0.1881818026304245 +4e4c5ae156d9bb517532c7d1aa8099f6 955c2ad95941c2cab740e78216da597c 0.16126126050949097 +4e4c5ae156d9bb517532c7d1aa8099f6 9620df9ac2a3839d04df86692d43528f 0.1760256290435791 +4e4c5ae156d9bb517532c7d1aa8099f6 a04dff74cc5e783025a349d32f5ce915 0.16126126050949097 +4e4c5ae156d9bb517532c7d1aa8099f6 a2c496dfec8a1bf1f2a450e699b829ad 0.13715596497058868 +4e4c5ae156d9bb517532c7d1aa8099f6 ad8a15dd4bde7a1d96e95da04e910853 0.19589240849018097 +4e4c5ae156d9bb517532c7d1aa8099f6 af2135763c26212ed95a8a891c7dfca3 0.16029834747314453 +4e4c5ae156d9bb517532c7d1aa8099f6 b4c9b3e8f6e5852ee29efa686ffcdca0 0.1299065500497818 +4e4c5ae156d9bb517532c7d1aa8099f6 b521d9b8e55a26909e3ac0292b42d8f3 0.17180734872817993 +4e4c5ae156d9bb517532c7d1aa8099f6 b8783f557b3ed4a9b4269539b1583419 0.17019230127334595 +4e4c5ae156d9bb517532c7d1aa8099f6 bd2031065307a5b5b38ea208e314d340 0.19589240849018097 +4e4c5ae156d9bb517532c7d1aa8099f6 bf4312f7e11603ff2ae87587fcebbc9c 0.1881818026304245 +4e4c5ae156d9bb517532c7d1aa8099f6 c13e1b0a3d3829bf266d9a2162207b28 0.18816205859184265 +4e4c5ae156d9bb517532c7d1aa8099f6 c6fe12ce4cddb1b8423b63e6dfad808b 0.2250182330608368 +4e4c5ae156d9bb517532c7d1aa8099f6 cb8d96ae1287284021e9038a79bf3131 0.19497668743133545 +4e4c5ae156d9bb517532c7d1aa8099f6 ccda3b30480708f505105d95da0bfb62 0.14553570747375488 +4e4c5ae156d9bb517532c7d1aa8099f6 d8e6b7b0368832247dbc5acab0fa4971 0.24438412487506866 +4e4c5ae156d9bb517532c7d1aa8099f6 dfa3146f46afd34506e6a71e0ec8b111 0.18194444477558136 +4e4c5ae156d9bb517532c7d1aa8099f6 e238a64ed05a08249266e0e5839548e5 0.24402858316898346 +4e4c5ae156d9bb517532c7d1aa8099f6 e396578f1078dd14484f24e821e31f7b 0.16981981694698334 +4e4c5ae156d9bb517532c7d1aa8099f6 e5f50fc1871b817d772009a19b1a639a 0.2973637580871582 +4e4c5ae156d9bb517532c7d1aa8099f6 e645222fbec3f59af2ffb3b22123ac56 0.24829234182834625 +4e4c5ae156d9bb517532c7d1aa8099f6 e956cc2ce89bd8b63426fbab21f2f2e6 0.13962264358997345 +4e4c5ae156d9bb517532c7d1aa8099f6 ecbbb5fea0464f857d513de5c23423f1 0.0 +4e4c5ae156d9bb517532c7d1aa8099f6 f41879b82690dbbd64eba913bb60b084 0.1670183390378952 +4e4c5ae156d9bb517532c7d1aa8099f6 f4b3941d7d57b2f17e1f22ec3077cc57 0.24848750233650208 +4e4c5ae156d9bb517532c7d1aa8099f6 f64340086bf5617b5b73684e79e6851c 0.16126126050949097 +4e4c5ae156d9bb517532c7d1aa8099f6 f67c4609c1e7a5fa403de7e22c501457 0.18916666507720947 +4e4c5ae156d9bb517532c7d1aa8099f6 fd032fad609be92a9a9d2a36e2e03faa 0.16126126050949097 +4e4c5ae156d9bb517532c7d1aa8099f6 fe888f4b12c0b05171796bd6d1b4f590 0.1881818026304245 +4e4e18c588fc35b5f1a99bc147e77020 51de8a0c2b635cb654a2d81d4d0147ad 0.16265566647052765 +4e4e18c588fc35b5f1a99bc147e77020 521a975b888d41a0eb82a0d67464979b 0.19132882356643677 +4e4e18c588fc35b5f1a99bc147e77020 554ec45b177292cd26daed0902a89a24 0.1495238095521927 +4e4e18c588fc35b5f1a99bc147e77020 57e5a176ff73dde428390003172fdffb 0.23968033492565155 +4e4e18c588fc35b5f1a99bc147e77020 590e8de05fd1cecc79347f1257a7c14c 0.199372336268425 +4e4e18c588fc35b5f1a99bc147e77020 61114735a84894739ff1a386694d9287 0.18249309062957764 +4e4e18c588fc35b5f1a99bc147e77020 66b3fd3631119304322f51a077d216a8 0.18339985609054565 +4e4e18c588fc35b5f1a99bc147e77020 66eabd96e837bc63970b8b43dc3e7d59 0.13962264358997345 +4e4e18c588fc35b5f1a99bc147e77020 677563d77f33dde9a437e9769cd97350 0.0 +4e4e18c588fc35b5f1a99bc147e77020 6c194f239694aec7cf630c1ad0e43db7 0.13962264358997345 +4e4e18c588fc35b5f1a99bc147e77020 6c1ed97536601e49cd993c2c3dc0e628 0.17960615456104279 +4e4e18c588fc35b5f1a99bc147e77020 6d3e5d85b2aa35d58347bb4b9b203e43 0.36449968814849854 +4e4e18c588fc35b5f1a99bc147e77020 6dd32e33c78a21fef169e6423c91dfcd 0.17656728625297546 +4e4e18c588fc35b5f1a99bc147e77020 712ceab0f39ef3518910c2244af3d58f 0.15141983330249786 +4e4e18c588fc35b5f1a99bc147e77020 8423cb55f94b74aff6335ffc08e1ffa0 0.15780463814735413 +4e4e18c588fc35b5f1a99bc147e77020 857b927ef6cfe28868c7f0b4beb0f9c5 0.0 +4e4e18c588fc35b5f1a99bc147e77020 88aa65483a9d0d188a09ae32f835fbd5 0.1566528081893921 +4e4e18c588fc35b5f1a99bc147e77020 8ec183a3479d0541d4b13cff95940cee 0.1734422892332077 +4e4e18c588fc35b5f1a99bc147e77020 8f3fb318e9afc95f071ac38522976b1b 0.1670183390378952 +4e4e18c588fc35b5f1a99bc147e77020 9374803bb59357889b692ca61dd87b48 0.16260741651058197 +4e4e18c588fc35b5f1a99bc147e77020 946b5f1cf84bc4409e87cbd1ee0ef26a 0.13962264358997345 +4e4e18c588fc35b5f1a99bc147e77020 955c2ad95941c2cab740e78216da597c 0.1794992983341217 +4e4e18c588fc35b5f1a99bc147e77020 9620df9ac2a3839d04df86692d43528f 0.18321986496448517 +4e4e18c588fc35b5f1a99bc147e77020 a04dff74cc5e783025a349d32f5ce915 0.1794992983341217 +4e4e18c588fc35b5f1a99bc147e77020 a2c496dfec8a1bf1f2a450e699b829ad 0.19167879223823547 +4e4e18c588fc35b5f1a99bc147e77020 ad8a15dd4bde7a1d96e95da04e910853 0.17504872381687164 +4e4e18c588fc35b5f1a99bc147e77020 af2135763c26212ed95a8a891c7dfca3 0.18339985609054565 +4e4e18c588fc35b5f1a99bc147e77020 b4c9b3e8f6e5852ee29efa686ffcdca0 0.1734422892332077 +4e4e18c588fc35b5f1a99bc147e77020 b521d9b8e55a26909e3ac0292b42d8f3 0.1502920538187027 +4e4e18c588fc35b5f1a99bc147e77020 b8783f557b3ed4a9b4269539b1583419 0.21023796498775482 +4e4e18c588fc35b5f1a99bc147e77020 bd2031065307a5b5b38ea208e314d340 0.17504872381687164 +4e4e18c588fc35b5f1a99bc147e77020 bf4312f7e11603ff2ae87587fcebbc9c 0.13962264358997345 +4e4e18c588fc35b5f1a99bc147e77020 c13e1b0a3d3829bf266d9a2162207b28 0.1795157790184021 +4e4e18c588fc35b5f1a99bc147e77020 c6fe12ce4cddb1b8423b63e6dfad808b 0.24538461863994598 +4e4e18c588fc35b5f1a99bc147e77020 cb8d96ae1287284021e9038a79bf3131 0.17656728625297546 +4e4e18c588fc35b5f1a99bc147e77020 ccda3b30480708f505105d95da0bfb62 0.17380328476428986 +4e4e18c588fc35b5f1a99bc147e77020 d8e6b7b0368832247dbc5acab0fa4971 0.2281496524810791 +4e4e18c588fc35b5f1a99bc147e77020 dfa3146f46afd34506e6a71e0ec8b111 0.16734465956687927 +4e4e18c588fc35b5f1a99bc147e77020 e238a64ed05a08249266e0e5839548e5 0.24267180263996124 +4e4e18c588fc35b5f1a99bc147e77020 e396578f1078dd14484f24e821e31f7b 0.21638160943984985 +4e4e18c588fc35b5f1a99bc147e77020 e5f50fc1871b817d772009a19b1a639a 0.3117869198322296 +4e4e18c588fc35b5f1a99bc147e77020 e645222fbec3f59af2ffb3b22123ac56 0.24133771657943726 +4e4e18c588fc35b5f1a99bc147e77020 e956cc2ce89bd8b63426fbab21f2f2e6 0.1495238095521927 +4e4e18c588fc35b5f1a99bc147e77020 ecbbb5fea0464f857d513de5c23423f1 0.1670183390378952 +4e4e18c588fc35b5f1a99bc147e77020 f41879b82690dbbd64eba913bb60b084 0.0 +4e4e18c588fc35b5f1a99bc147e77020 f4b3941d7d57b2f17e1f22ec3077cc57 0.25238335132598877 +4e4e18c588fc35b5f1a99bc147e77020 f64340086bf5617b5b73684e79e6851c 0.1794992983341217 +4e4e18c588fc35b5f1a99bc147e77020 f67c4609c1e7a5fa403de7e22c501457 0.16260741651058197 +4e4e18c588fc35b5f1a99bc147e77020 fd032fad609be92a9a9d2a36e2e03faa 0.1794992983341217 +4e4e18c588fc35b5f1a99bc147e77020 fe888f4b12c0b05171796bd6d1b4f590 0.13962264358997345 +51de8a0c2b635cb654a2d81d4d0147ad 521a975b888d41a0eb82a0d67464979b 0.1314285695552826 +51de8a0c2b635cb654a2d81d4d0147ad 554ec45b177292cd26daed0902a89a24 0.12450981140136719 +51de8a0c2b635cb654a2d81d4d0147ad 57e5a176ff73dde428390003172fdffb 0.24287189543247223 +51de8a0c2b635cb654a2d81d4d0147ad 590e8de05fd1cecc79347f1257a7c14c 0.20254474878311157 +51de8a0c2b635cb654a2d81d4d0147ad 61114735a84894739ff1a386694d9287 0.1416974812746048 +51de8a0c2b635cb654a2d81d4d0147ad 66b3fd3631119304322f51a077d216a8 0.13812217116355896 +51de8a0c2b635cb654a2d81d4d0147ad 66eabd96e837bc63970b8b43dc3e7d59 0.12352190911769867 +51de8a0c2b635cb654a2d81d4d0147ad 677563d77f33dde9a437e9769cd97350 0.16265566647052765 +51de8a0c2b635cb654a2d81d4d0147ad 6c194f239694aec7cf630c1ad0e43db7 0.12352190911769867 +51de8a0c2b635cb654a2d81d4d0147ad 6c1ed97536601e49cd993c2c3dc0e628 0.10643564164638519 +51de8a0c2b635cb654a2d81d4d0147ad 6d3e5d85b2aa35d58347bb4b9b203e43 0.381498247385025 +51de8a0c2b635cb654a2d81d4d0147ad 6dd32e33c78a21fef169e6423c91dfcd 0.2094256728887558 +51de8a0c2b635cb654a2d81d4d0147ad 712ceab0f39ef3518910c2244af3d58f 0.15754717588424683 +51de8a0c2b635cb654a2d81d4d0147ad 8423cb55f94b74aff6335ffc08e1ffa0 0.14711309969425201 +51de8a0c2b635cb654a2d81d4d0147ad 857b927ef6cfe28868c7f0b4beb0f9c5 0.16265566647052765 +51de8a0c2b635cb654a2d81d4d0147ad 88aa65483a9d0d188a09ae32f835fbd5 0.21116070449352264 +51de8a0c2b635cb654a2d81d4d0147ad 8ec183a3479d0541d4b13cff95940cee 0.13994082808494568 +51de8a0c2b635cb654a2d81d4d0147ad 8f3fb318e9afc95f071ac38522976b1b 0.08033980429172516 +51de8a0c2b635cb654a2d81d4d0147ad 9374803bb59357889b692ca61dd87b48 0.20937499403953552 +51de8a0c2b635cb654a2d81d4d0147ad 946b5f1cf84bc4409e87cbd1ee0ef26a 0.1623992621898651 +51de8a0c2b635cb654a2d81d4d0147ad 955c2ad95941c2cab740e78216da597c 0.18073394894599915 +51de8a0c2b635cb654a2d81d4d0147ad 9620df9ac2a3839d04df86692d43528f 0.21162468194961548 +51de8a0c2b635cb654a2d81d4d0147ad a04dff74cc5e783025a349d32f5ce915 0.18073394894599915 +51de8a0c2b635cb654a2d81d4d0147ad a2c496dfec8a1bf1f2a450e699b829ad 0.09738095104694366 +51de8a0c2b635cb654a2d81d4d0147ad ad8a15dd4bde7a1d96e95da04e910853 0.16915981471538544 +51de8a0c2b635cb654a2d81d4d0147ad af2135763c26212ed95a8a891c7dfca3 0.13812217116355896 +51de8a0c2b635cb654a2d81d4d0147ad b4c9b3e8f6e5852ee29efa686ffcdca0 0.13994082808494568 +51de8a0c2b635cb654a2d81d4d0147ad b521d9b8e55a26909e3ac0292b42d8f3 0.1550511121749878 +51de8a0c2b635cb654a2d81d4d0147ad b8783f557b3ed4a9b4269539b1583419 0.18930287659168243 +51de8a0c2b635cb654a2d81d4d0147ad bd2031065307a5b5b38ea208e314d340 0.16915981471538544 +51de8a0c2b635cb654a2d81d4d0147ad bf4312f7e11603ff2ae87587fcebbc9c 0.1623992621898651 +51de8a0c2b635cb654a2d81d4d0147ad c13e1b0a3d3829bf266d9a2162207b28 0.1764553040266037 +51de8a0c2b635cb654a2d81d4d0147ad c6fe12ce4cddb1b8423b63e6dfad808b 0.24557635188102722 +51de8a0c2b635cb654a2d81d4d0147ad cb8d96ae1287284021e9038a79bf3131 0.2094256728887558 +51de8a0c2b635cb654a2d81d4d0147ad ccda3b30480708f505105d95da0bfb62 0.12504170835018158 +51de8a0c2b635cb654a2d81d4d0147ad d8e6b7b0368832247dbc5acab0fa4971 0.23467648029327393 +51de8a0c2b635cb654a2d81d4d0147ad dfa3146f46afd34506e6a71e0ec8b111 0.1514563113451004 +51de8a0c2b635cb654a2d81d4d0147ad e238a64ed05a08249266e0e5839548e5 0.25488123297691345 +51de8a0c2b635cb654a2d81d4d0147ad e396578f1078dd14484f24e821e31f7b 0.1657620370388031 +51de8a0c2b635cb654a2d81d4d0147ad e5f50fc1871b817d772009a19b1a639a 0.28778132796287537 +51de8a0c2b635cb654a2d81d4d0147ad e645222fbec3f59af2ffb3b22123ac56 0.2528011202812195 +51de8a0c2b635cb654a2d81d4d0147ad e956cc2ce89bd8b63426fbab21f2f2e6 0.12450981140136719 +51de8a0c2b635cb654a2d81d4d0147ad ecbbb5fea0464f857d513de5c23423f1 0.08033980429172516 +51de8a0c2b635cb654a2d81d4d0147ad f41879b82690dbbd64eba913bb60b084 0.16265566647052765 +51de8a0c2b635cb654a2d81d4d0147ad f4b3941d7d57b2f17e1f22ec3077cc57 0.29116126894950867 +51de8a0c2b635cb654a2d81d4d0147ad f64340086bf5617b5b73684e79e6851c 0.18073394894599915 +51de8a0c2b635cb654a2d81d4d0147ad f67c4609c1e7a5fa403de7e22c501457 0.20937499403953552 +51de8a0c2b635cb654a2d81d4d0147ad fd032fad609be92a9a9d2a36e2e03faa 0.18073394894599915 +51de8a0c2b635cb654a2d81d4d0147ad fe888f4b12c0b05171796bd6d1b4f590 0.1623992621898651 +521a975b888d41a0eb82a0d67464979b 554ec45b177292cd26daed0902a89a24 0.16435185074806213 +521a975b888d41a0eb82a0d67464979b 57e5a176ff73dde428390003172fdffb 0.22970429062843323 +521a975b888d41a0eb82a0d67464979b 590e8de05fd1cecc79347f1257a7c14c 0.2043067216873169 +521a975b888d41a0eb82a0d67464979b 61114735a84894739ff1a386694d9287 0.1709090918302536 +521a975b888d41a0eb82a0d67464979b 66b3fd3631119304322f51a077d216a8 0.1592770665884018 +521a975b888d41a0eb82a0d67464979b 66eabd96e837bc63970b8b43dc3e7d59 0.14423076808452606 +521a975b888d41a0eb82a0d67464979b 677563d77f33dde9a437e9769cd97350 0.19132882356643677 +521a975b888d41a0eb82a0d67464979b 6c194f239694aec7cf630c1ad0e43db7 0.14423076808452606 +521a975b888d41a0eb82a0d67464979b 6c1ed97536601e49cd993c2c3dc0e628 0.12238095700740814 +521a975b888d41a0eb82a0d67464979b 6d3e5d85b2aa35d58347bb4b9b203e43 0.3461064398288727 +521a975b888d41a0eb82a0d67464979b 6dd32e33c78a21fef169e6423c91dfcd 0.21437110006809235 +521a975b888d41a0eb82a0d67464979b 712ceab0f39ef3518910c2244af3d58f 0.15458716452121735 +521a975b888d41a0eb82a0d67464979b 8423cb55f94b74aff6335ffc08e1ffa0 0.1891462802886963 +521a975b888d41a0eb82a0d67464979b 857b927ef6cfe28868c7f0b4beb0f9c5 0.19132882356643677 +521a975b888d41a0eb82a0d67464979b 88aa65483a9d0d188a09ae32f835fbd5 0.18717949092388153 +521a975b888d41a0eb82a0d67464979b 8ec183a3479d0541d4b13cff95940cee 0.1379629671573639 +521a975b888d41a0eb82a0d67464979b 8f3fb318e9afc95f071ac38522976b1b 0.11214953660964966 +521a975b888d41a0eb82a0d67464979b 9374803bb59357889b692ca61dd87b48 0.19619564712047577 +521a975b888d41a0eb82a0d67464979b 946b5f1cf84bc4409e87cbd1ee0ef26a 0.16699011623859406 +521a975b888d41a0eb82a0d67464979b 955c2ad95941c2cab740e78216da597c 0.18451327085494995 +521a975b888d41a0eb82a0d67464979b 9620df9ac2a3839d04df86692d43528f 0.19860592484474182 +521a975b888d41a0eb82a0d67464979b a04dff74cc5e783025a349d32f5ce915 0.18451327085494995 +521a975b888d41a0eb82a0d67464979b a2c496dfec8a1bf1f2a450e699b829ad 0.14499999582767487 +521a975b888d41a0eb82a0d67464979b ad8a15dd4bde7a1d96e95da04e910853 0.19589240849018097 +521a975b888d41a0eb82a0d67464979b af2135763c26212ed95a8a891c7dfca3 0.1592770665884018 +521a975b888d41a0eb82a0d67464979b b4c9b3e8f6e5852ee29efa686ffcdca0 0.1379629671573639 +521a975b888d41a0eb82a0d67464979b b521d9b8e55a26909e3ac0292b42d8f3 0.17964527010917664 +521a975b888d41a0eb82a0d67464979b b8783f557b3ed4a9b4269539b1583419 0.17490802705287933 +521a975b888d41a0eb82a0d67464979b bd2031065307a5b5b38ea208e314d340 0.19589240849018097 +521a975b888d41a0eb82a0d67464979b bf4312f7e11603ff2ae87587fcebbc9c 0.16699011623859406 +521a975b888d41a0eb82a0d67464979b c13e1b0a3d3829bf266d9a2162207b28 0.19514106214046478 +521a975b888d41a0eb82a0d67464979b c6fe12ce4cddb1b8423b63e6dfad808b 0.2316795140504837 +521a975b888d41a0eb82a0d67464979b cb8d96ae1287284021e9038a79bf3131 0.21437110006809235 +521a975b888d41a0eb82a0d67464979b ccda3b30480708f505105d95da0bfb62 0.16944444179534912 +521a975b888d41a0eb82a0d67464979b d8e6b7b0368832247dbc5acab0fa4971 0.28997665643692017 +521a975b888d41a0eb82a0d67464979b dfa3146f46afd34506e6a71e0ec8b111 0.17314814031124115 +521a975b888d41a0eb82a0d67464979b e238a64ed05a08249266e0e5839548e5 0.23499999940395355 +521a975b888d41a0eb82a0d67464979b e396578f1078dd14484f24e821e31f7b 0.13636364042758942 +521a975b888d41a0eb82a0d67464979b e5f50fc1871b817d772009a19b1a639a 0.3108966052532196 +521a975b888d41a0eb82a0d67464979b e645222fbec3f59af2ffb3b22123ac56 0.252981036901474 +521a975b888d41a0eb82a0d67464979b e956cc2ce89bd8b63426fbab21f2f2e6 0.16435185074806213 +521a975b888d41a0eb82a0d67464979b ecbbb5fea0464f857d513de5c23423f1 0.11214953660964966 +521a975b888d41a0eb82a0d67464979b f41879b82690dbbd64eba913bb60b084 0.19132882356643677 +521a975b888d41a0eb82a0d67464979b f4b3941d7d57b2f17e1f22ec3077cc57 0.24686801433563232 +521a975b888d41a0eb82a0d67464979b f64340086bf5617b5b73684e79e6851c 0.18451327085494995 +521a975b888d41a0eb82a0d67464979b f67c4609c1e7a5fa403de7e22c501457 0.19619564712047577 +521a975b888d41a0eb82a0d67464979b fd032fad609be92a9a9d2a36e2e03faa 0.18451327085494995 +521a975b888d41a0eb82a0d67464979b fe888f4b12c0b05171796bd6d1b4f590 0.16699011623859406 +554ec45b177292cd26daed0902a89a24 57e5a176ff73dde428390003172fdffb 0.24012666940689087 +554ec45b177292cd26daed0902a89a24 590e8de05fd1cecc79347f1257a7c14c 0.1997210830450058 +554ec45b177292cd26daed0902a89a24 61114735a84894739ff1a386694d9287 0.14858490228652954 +554ec45b177292cd26daed0902a89a24 66b3fd3631119304322f51a077d216a8 0.11456310749053955 +554ec45b177292cd26daed0902a89a24 66eabd96e837bc63970b8b43dc3e7d59 0.10924196988344193 +554ec45b177292cd26daed0902a89a24 677563d77f33dde9a437e9769cd97350 0.1495238095521927 +554ec45b177292cd26daed0902a89a24 6c194f239694aec7cf630c1ad0e43db7 0.10924196988344193 +554ec45b177292cd26daed0902a89a24 6c1ed97536601e49cd993c2c3dc0e628 0.14134615659713745 +554ec45b177292cd26daed0902a89a24 6d3e5d85b2aa35d58347bb4b9b203e43 0.3389595150947571 +554ec45b177292cd26daed0902a89a24 6dd32e33c78a21fef169e6423c91dfcd 0.2079237848520279 +554ec45b177292cd26daed0902a89a24 712ceab0f39ef3518910c2244af3d58f 0.13066038489341736 +554ec45b177292cd26daed0902a89a24 8423cb55f94b74aff6335ffc08e1ffa0 0.1272619068622589 +554ec45b177292cd26daed0902a89a24 857b927ef6cfe28868c7f0b4beb0f9c5 0.1495238095521927 +554ec45b177292cd26daed0902a89a24 88aa65483a9d0d188a09ae32f835fbd5 0.19450795650482178 +554ec45b177292cd26daed0902a89a24 8ec183a3479d0541d4b13cff95940cee 0.18194444477558136 +554ec45b177292cd26daed0902a89a24 8f3fb318e9afc95f071ac38522976b1b 0.13962264358997345 +554ec45b177292cd26daed0902a89a24 9374803bb59357889b692ca61dd87b48 0.1863911896944046 +554ec45b177292cd26daed0902a89a24 946b5f1cf84bc4409e87cbd1ee0ef26a 0.12236744165420532 +554ec45b177292cd26daed0902a89a24 955c2ad95941c2cab740e78216da597c 0.16863636672496796 +554ec45b177292cd26daed0902a89a24 9620df9ac2a3839d04df86692d43528f 0.18807010352611542 +554ec45b177292cd26daed0902a89a24 a04dff74cc5e783025a349d32f5ce915 0.16863636672496796 +554ec45b177292cd26daed0902a89a24 a2c496dfec8a1bf1f2a450e699b829ad 0.15555556118488312 +554ec45b177292cd26daed0902a89a24 ad8a15dd4bde7a1d96e95da04e910853 0.180494487285614 +554ec45b177292cd26daed0902a89a24 af2135763c26212ed95a8a891c7dfca3 0.11456310749053955 +554ec45b177292cd26daed0902a89a24 b4c9b3e8f6e5852ee29efa686ffcdca0 0.18194444477558136 +554ec45b177292cd26daed0902a89a24 b521d9b8e55a26909e3ac0292b42d8f3 0.09980769455432892 +554ec45b177292cd26daed0902a89a24 b8783f557b3ed4a9b4269539b1583419 0.2003573775291443 +554ec45b177292cd26daed0902a89a24 bd2031065307a5b5b38ea208e314d340 0.180494487285614 +554ec45b177292cd26daed0902a89a24 bf4312f7e11603ff2ae87587fcebbc9c 0.12236744165420532 +554ec45b177292cd26daed0902a89a24 c13e1b0a3d3829bf266d9a2162207b28 0.15917792916297913 +554ec45b177292cd26daed0902a89a24 c6fe12ce4cddb1b8423b63e6dfad808b 0.2311096042394638 +554ec45b177292cd26daed0902a89a24 cb8d96ae1287284021e9038a79bf3131 0.2079237848520279 +554ec45b177292cd26daed0902a89a24 ccda3b30480708f505105d95da0bfb62 0.17994506657123566 +554ec45b177292cd26daed0902a89a24 d8e6b7b0368832247dbc5acab0fa4971 0.22393366694450378 +554ec45b177292cd26daed0902a89a24 dfa3146f46afd34506e6a71e0ec8b111 0.15048077702522278 +554ec45b177292cd26daed0902a89a24 e238a64ed05a08249266e0e5839548e5 0.26717740297317505 +554ec45b177292cd26daed0902a89a24 e396578f1078dd14484f24e821e31f7b 0.15555556118488312 +554ec45b177292cd26daed0902a89a24 e5f50fc1871b817d772009a19b1a639a 0.2940675616264343 +554ec45b177292cd26daed0902a89a24 e645222fbec3f59af2ffb3b22123ac56 0.23534664511680603 +554ec45b177292cd26daed0902a89a24 e956cc2ce89bd8b63426fbab21f2f2e6 0.0 +554ec45b177292cd26daed0902a89a24 ecbbb5fea0464f857d513de5c23423f1 0.13962264358997345 +554ec45b177292cd26daed0902a89a24 f41879b82690dbbd64eba913bb60b084 0.1495238095521927 +554ec45b177292cd26daed0902a89a24 f4b3941d7d57b2f17e1f22ec3077cc57 0.2746303677558899 +554ec45b177292cd26daed0902a89a24 f64340086bf5617b5b73684e79e6851c 0.16863636672496796 +554ec45b177292cd26daed0902a89a24 f67c4609c1e7a5fa403de7e22c501457 0.1863911896944046 +554ec45b177292cd26daed0902a89a24 fd032fad609be92a9a9d2a36e2e03faa 0.16863636672496796 +554ec45b177292cd26daed0902a89a24 fe888f4b12c0b05171796bd6d1b4f590 0.12236744165420532 +57e5a176ff73dde428390003172fdffb 590e8de05fd1cecc79347f1257a7c14c 0.14268292486667633 +57e5a176ff73dde428390003172fdffb 61114735a84894739ff1a386694d9287 0.2157559096813202 +57e5a176ff73dde428390003172fdffb 66b3fd3631119304322f51a077d216a8 0.2299528270959854 +57e5a176ff73dde428390003172fdffb 66eabd96e837bc63970b8b43dc3e7d59 0.24260710179805756 +57e5a176ff73dde428390003172fdffb 677563d77f33dde9a437e9769cd97350 0.23968033492565155 +57e5a176ff73dde428390003172fdffb 6c194f239694aec7cf630c1ad0e43db7 0.24260710179805756 +57e5a176ff73dde428390003172fdffb 6c1ed97536601e49cd993c2c3dc0e628 0.2562638521194458 +57e5a176ff73dde428390003172fdffb 6d3e5d85b2aa35d58347bb4b9b203e43 0.3029741644859314 +57e5a176ff73dde428390003172fdffb 6dd32e33c78a21fef169e6423c91dfcd 0.24837476015090942 +57e5a176ff73dde428390003172fdffb 712ceab0f39ef3518910c2244af3d58f 0.2103995978832245 +57e5a176ff73dde428390003172fdffb 8423cb55f94b74aff6335ffc08e1ffa0 0.2185336947441101 +57e5a176ff73dde428390003172fdffb 857b927ef6cfe28868c7f0b4beb0f9c5 0.23968033492565155 +57e5a176ff73dde428390003172fdffb 88aa65483a9d0d188a09ae32f835fbd5 0.18129411339759827 +57e5a176ff73dde428390003172fdffb 8ec183a3479d0541d4b13cff95940cee 0.21714480221271515 +57e5a176ff73dde428390003172fdffb 8f3fb318e9afc95f071ac38522976b1b 0.2234756052494049 +57e5a176ff73dde428390003172fdffb 9374803bb59357889b692ca61dd87b48 0.20490463078022003 +57e5a176ff73dde428390003172fdffb 946b5f1cf84bc4409e87cbd1ee0ef26a 0.23001185059547424 +57e5a176ff73dde428390003172fdffb 955c2ad95941c2cab740e78216da597c 0.19674795866012573 +57e5a176ff73dde428390003172fdffb 9620df9ac2a3839d04df86692d43528f 0.2083333283662796 +57e5a176ff73dde428390003172fdffb a04dff74cc5e783025a349d32f5ce915 0.19674795866012573 +57e5a176ff73dde428390003172fdffb a2c496dfec8a1bf1f2a450e699b829ad 0.1781139373779297 +57e5a176ff73dde428390003172fdffb ad8a15dd4bde7a1d96e95da04e910853 0.24791355431079865 +57e5a176ff73dde428390003172fdffb af2135763c26212ed95a8a891c7dfca3 0.2299528270959854 +57e5a176ff73dde428390003172fdffb b4c9b3e8f6e5852ee29efa686ffcdca0 0.21714480221271515 +57e5a176ff73dde428390003172fdffb b521d9b8e55a26909e3ac0292b42d8f3 0.21074682474136353 +57e5a176ff73dde428390003172fdffb b8783f557b3ed4a9b4269539b1583419 0.17011626064777374 +57e5a176ff73dde428390003172fdffb bd2031065307a5b5b38ea208e314d340 0.24791355431079865 +57e5a176ff73dde428390003172fdffb bf4312f7e11603ff2ae87587fcebbc9c 0.23001185059547424 +57e5a176ff73dde428390003172fdffb c13e1b0a3d3829bf266d9a2162207b28 0.20021428167819977 +57e5a176ff73dde428390003172fdffb c6fe12ce4cddb1b8423b63e6dfad808b 0.27207574248313904 +57e5a176ff73dde428390003172fdffb cb8d96ae1287284021e9038a79bf3131 0.24837476015090942 +57e5a176ff73dde428390003172fdffb ccda3b30480708f505105d95da0bfb62 0.15206611156463623 +57e5a176ff73dde428390003172fdffb d8e6b7b0368832247dbc5acab0fa4971 0.32596150040626526 +57e5a176ff73dde428390003172fdffb dfa3146f46afd34506e6a71e0ec8b111 0.2338842898607254 +57e5a176ff73dde428390003172fdffb e238a64ed05a08249266e0e5839548e5 0.12876984477043152 +57e5a176ff73dde428390003172fdffb e396578f1078dd14484f24e821e31f7b 0.2232009917497635 +57e5a176ff73dde428390003172fdffb e5f50fc1871b817d772009a19b1a639a 0.35055285692214966 +57e5a176ff73dde428390003172fdffb e645222fbec3f59af2ffb3b22123ac56 0.19212597608566284 +57e5a176ff73dde428390003172fdffb e956cc2ce89bd8b63426fbab21f2f2e6 0.24012666940689087 +57e5a176ff73dde428390003172fdffb ecbbb5fea0464f857d513de5c23423f1 0.2234756052494049 +57e5a176ff73dde428390003172fdffb f41879b82690dbbd64eba913bb60b084 0.23968033492565155 +57e5a176ff73dde428390003172fdffb f4b3941d7d57b2f17e1f22ec3077cc57 0.17617186903953552 +57e5a176ff73dde428390003172fdffb f64340086bf5617b5b73684e79e6851c 0.19674795866012573 +57e5a176ff73dde428390003172fdffb f67c4609c1e7a5fa403de7e22c501457 0.20490463078022003 +57e5a176ff73dde428390003172fdffb fd032fad609be92a9a9d2a36e2e03faa 0.19674795866012573 +57e5a176ff73dde428390003172fdffb fe888f4b12c0b05171796bd6d1b4f590 0.23001185059547424 +590e8de05fd1cecc79347f1257a7c14c 61114735a84894739ff1a386694d9287 0.22094276547431946 +590e8de05fd1cecc79347f1257a7c14c 66b3fd3631119304322f51a077d216a8 0.2192605435848236 +590e8de05fd1cecc79347f1257a7c14c 66eabd96e837bc63970b8b43dc3e7d59 0.1943753957748413 +590e8de05fd1cecc79347f1257a7c14c 677563d77f33dde9a437e9769cd97350 0.199372336268425 +590e8de05fd1cecc79347f1257a7c14c 6c194f239694aec7cf630c1ad0e43db7 0.1943753957748413 +590e8de05fd1cecc79347f1257a7c14c 6c1ed97536601e49cd993c2c3dc0e628 0.21610106527805328 +590e8de05fd1cecc79347f1257a7c14c 6d3e5d85b2aa35d58347bb4b9b203e43 0.31330397725105286 +590e8de05fd1cecc79347f1257a7c14c 6dd32e33c78a21fef169e6423c91dfcd 0.23357561230659485 +590e8de05fd1cecc79347f1257a7c14c 712ceab0f39ef3518910c2244af3d58f 0.1601097136735916 +590e8de05fd1cecc79347f1257a7c14c 8423cb55f94b74aff6335ffc08e1ffa0 0.19079670310020447 +590e8de05fd1cecc79347f1257a7c14c 857b927ef6cfe28868c7f0b4beb0f9c5 0.199372336268425 +590e8de05fd1cecc79347f1257a7c14c 88aa65483a9d0d188a09ae32f835fbd5 0.1843988448381424 +590e8de05fd1cecc79347f1257a7c14c 8ec183a3479d0541d4b13cff95940cee 0.19079670310020447 +590e8de05fd1cecc79347f1257a7c14c 8f3fb318e9afc95f071ac38522976b1b 0.18418803811073303 +590e8de05fd1cecc79347f1257a7c14c 9374803bb59357889b692ca61dd87b48 0.18344156444072723 +590e8de05fd1cecc79347f1257a7c14c 946b5f1cf84bc4409e87cbd1ee0ef26a 0.19587865471839905 +590e8de05fd1cecc79347f1257a7c14c 955c2ad95941c2cab740e78216da597c 0.17416884005069733 +590e8de05fd1cecc79347f1257a7c14c 9620df9ac2a3839d04df86692d43528f 0.16709935665130615 +590e8de05fd1cecc79347f1257a7c14c a04dff74cc5e783025a349d32f5ce915 0.17416884005069733 +590e8de05fd1cecc79347f1257a7c14c a2c496dfec8a1bf1f2a450e699b829ad 0.1672494262456894 +590e8de05fd1cecc79347f1257a7c14c ad8a15dd4bde7a1d96e95da04e910853 0.20644016563892365 +590e8de05fd1cecc79347f1257a7c14c af2135763c26212ed95a8a891c7dfca3 0.2192605435848236 +590e8de05fd1cecc79347f1257a7c14c b4c9b3e8f6e5852ee29efa686ffcdca0 0.19079670310020447 +590e8de05fd1cecc79347f1257a7c14c b521d9b8e55a26909e3ac0292b42d8f3 0.18267706036567688 +590e8de05fd1cecc79347f1257a7c14c b8783f557b3ed4a9b4269539b1583419 0.15741151571273804 +590e8de05fd1cecc79347f1257a7c14c bd2031065307a5b5b38ea208e314d340 0.20644016563892365 +590e8de05fd1cecc79347f1257a7c14c bf4312f7e11603ff2ae87587fcebbc9c 0.19587865471839905 +590e8de05fd1cecc79347f1257a7c14c c13e1b0a3d3829bf266d9a2162207b28 0.1623644381761551 +590e8de05fd1cecc79347f1257a7c14c c6fe12ce4cddb1b8423b63e6dfad808b 0.23735812306404114 +590e8de05fd1cecc79347f1257a7c14c cb8d96ae1287284021e9038a79bf3131 0.23357561230659485 +590e8de05fd1cecc79347f1257a7c14c ccda3b30480708f505105d95da0bfb62 0.10782608389854431 +590e8de05fd1cecc79347f1257a7c14c d8e6b7b0368832247dbc5acab0fa4971 0.2757487893104553 +590e8de05fd1cecc79347f1257a7c14c dfa3146f46afd34506e6a71e0ec8b111 0.22205354273319244 +590e8de05fd1cecc79347f1257a7c14c e238a64ed05a08249266e0e5839548e5 0.16491934657096863 +590e8de05fd1cecc79347f1257a7c14c e396578f1078dd14484f24e821e31f7b 0.223435640335083 +590e8de05fd1cecc79347f1257a7c14c e5f50fc1871b817d772009a19b1a639a 0.3013612926006317 +590e8de05fd1cecc79347f1257a7c14c e645222fbec3f59af2ffb3b22123ac56 0.20072579383850098 +590e8de05fd1cecc79347f1257a7c14c e956cc2ce89bd8b63426fbab21f2f2e6 0.1997210830450058 +590e8de05fd1cecc79347f1257a7c14c ecbbb5fea0464f857d513de5c23423f1 0.18418803811073303 +590e8de05fd1cecc79347f1257a7c14c f41879b82690dbbd64eba913bb60b084 0.199372336268425 +590e8de05fd1cecc79347f1257a7c14c f4b3941d7d57b2f17e1f22ec3077cc57 0.19325396418571472 +590e8de05fd1cecc79347f1257a7c14c f64340086bf5617b5b73684e79e6851c 0.17416884005069733 +590e8de05fd1cecc79347f1257a7c14c f67c4609c1e7a5fa403de7e22c501457 0.18344156444072723 +590e8de05fd1cecc79347f1257a7c14c fd032fad609be92a9a9d2a36e2e03faa 0.17416884005069733 +590e8de05fd1cecc79347f1257a7c14c fe888f4b12c0b05171796bd6d1b4f590 0.19587865471839905 +61114735a84894739ff1a386694d9287 66b3fd3631119304322f51a077d216a8 0.15237663686275482 +61114735a84894739ff1a386694d9287 66eabd96e837bc63970b8b43dc3e7d59 0.17348645627498627 +61114735a84894739ff1a386694d9287 677563d77f33dde9a437e9769cd97350 0.18249309062957764 +61114735a84894739ff1a386694d9287 6c194f239694aec7cf630c1ad0e43db7 0.17348645627498627 +61114735a84894739ff1a386694d9287 6c1ed97536601e49cd993c2c3dc0e628 0.17777778208255768 +61114735a84894739ff1a386694d9287 6d3e5d85b2aa35d58347bb4b9b203e43 0.35853612422943115 +61114735a84894739ff1a386694d9287 6dd32e33c78a21fef169e6423c91dfcd 0.23601259291172028 +61114735a84894739ff1a386694d9287 712ceab0f39ef3518910c2244af3d58f 0.15555556118488312 +61114735a84894739ff1a386694d9287 8423cb55f94b74aff6335ffc08e1ffa0 0.17359109222888947 +61114735a84894739ff1a386694d9287 857b927ef6cfe28868c7f0b4beb0f9c5 0.18249309062957764 +61114735a84894739ff1a386694d9287 88aa65483a9d0d188a09ae32f835fbd5 0.17110618948936462 +61114735a84894739ff1a386694d9287 8ec183a3479d0541d4b13cff95940cee 0.13878504931926727 +61114735a84894739ff1a386694d9287 8f3fb318e9afc95f071ac38522976b1b 0.1467592567205429 +61114735a84894739ff1a386694d9287 9374803bb59357889b692ca61dd87b48 0.1989801824092865 +61114735a84894739ff1a386694d9287 946b5f1cf84bc4409e87cbd1ee0ef26a 0.18025465309619904 +61114735a84894739ff1a386694d9287 955c2ad95941c2cab740e78216da597c 0.13358452916145325 +61114735a84894739ff1a386694d9287 9620df9ac2a3839d04df86692d43528f 0.20010730624198914 +61114735a84894739ff1a386694d9287 a04dff74cc5e783025a349d32f5ce915 0.13358452916145325 +61114735a84894739ff1a386694d9287 a2c496dfec8a1bf1f2a450e699b829ad 0.11214953660964966 +61114735a84894739ff1a386694d9287 ad8a15dd4bde7a1d96e95da04e910853 0.19659188389778137 +61114735a84894739ff1a386694d9287 af2135763c26212ed95a8a891c7dfca3 0.15237663686275482 +61114735a84894739ff1a386694d9287 b4c9b3e8f6e5852ee29efa686ffcdca0 0.13878504931926727 +61114735a84894739ff1a386694d9287 b521d9b8e55a26909e3ac0292b42d8f3 0.18103894591331482 +61114735a84894739ff1a386694d9287 b8783f557b3ed4a9b4269539b1583419 0.20042501389980316 +61114735a84894739ff1a386694d9287 bd2031065307a5b5b38ea208e314d340 0.19659188389778137 +61114735a84894739ff1a386694d9287 bf4312f7e11603ff2ae87587fcebbc9c 0.18025465309619904 +61114735a84894739ff1a386694d9287 c13e1b0a3d3829bf266d9a2162207b28 0.18744173645973206 +61114735a84894739ff1a386694d9287 c6fe12ce4cddb1b8423b63e6dfad808b 0.22045454382896423 +61114735a84894739ff1a386694d9287 cb8d96ae1287284021e9038a79bf3131 0.23601259291172028 +61114735a84894739ff1a386694d9287 ccda3b30480708f505105d95da0bfb62 0.16860619187355042 +61114735a84894739ff1a386694d9287 d8e6b7b0368832247dbc5acab0fa4971 0.26135483384132385 +61114735a84894739ff1a386694d9287 dfa3146f46afd34506e6a71e0ec8b111 0.15754717588424683 +61114735a84894739ff1a386694d9287 e238a64ed05a08249266e0e5839548e5 0.22264227271080017 +61114735a84894739ff1a386694d9287 e396578f1078dd14484f24e821e31f7b 0.16227272152900696 +61114735a84894739ff1a386694d9287 e5f50fc1871b817d772009a19b1a639a 0.3125218451023102 +61114735a84894739ff1a386694d9287 e645222fbec3f59af2ffb3b22123ac56 0.21295955777168274 +61114735a84894739ff1a386694d9287 e956cc2ce89bd8b63426fbab21f2f2e6 0.14858490228652954 +61114735a84894739ff1a386694d9287 ecbbb5fea0464f857d513de5c23423f1 0.1467592567205429 +61114735a84894739ff1a386694d9287 f41879b82690dbbd64eba913bb60b084 0.18249309062957764 +61114735a84894739ff1a386694d9287 f4b3941d7d57b2f17e1f22ec3077cc57 0.29141560196876526 +61114735a84894739ff1a386694d9287 f64340086bf5617b5b73684e79e6851c 0.13358452916145325 +61114735a84894739ff1a386694d9287 f67c4609c1e7a5fa403de7e22c501457 0.1989801824092865 +61114735a84894739ff1a386694d9287 fd032fad609be92a9a9d2a36e2e03faa 0.13358452916145325 +61114735a84894739ff1a386694d9287 fe888f4b12c0b05171796bd6d1b4f590 0.18025465309619904 +66b3fd3631119304322f51a077d216a8 66eabd96e837bc63970b8b43dc3e7d59 0.14847984910011292 +66b3fd3631119304322f51a077d216a8 677563d77f33dde9a437e9769cd97350 0.18339985609054565 +66b3fd3631119304322f51a077d216a8 6c194f239694aec7cf630c1ad0e43db7 0.14847984910011292 +66b3fd3631119304322f51a077d216a8 6c1ed97536601e49cd993c2c3dc0e628 0.1623992621898651 +66b3fd3631119304322f51a077d216a8 6d3e5d85b2aa35d58347bb4b9b203e43 0.3751305043697357 +66b3fd3631119304322f51a077d216a8 6dd32e33c78a21fef169e6423c91dfcd 0.2057768553495407 +66b3fd3631119304322f51a077d216a8 712ceab0f39ef3518910c2244af3d58f 0.16330274939537048 +66b3fd3631119304322f51a077d216a8 8423cb55f94b74aff6335ffc08e1ffa0 0.18632453680038452 +66b3fd3631119304322f51a077d216a8 857b927ef6cfe28868c7f0b4beb0f9c5 0.18339985609054565 +66b3fd3631119304322f51a077d216a8 88aa65483a9d0d188a09ae32f835fbd5 0.2003573775291443 +66b3fd3631119304322f51a077d216a8 8ec183a3479d0541d4b13cff95940cee 0.16029834747314453 +66b3fd3631119304322f51a077d216a8 8f3fb318e9afc95f071ac38522976b1b 0.16029834747314453 +66b3fd3631119304322f51a077d216a8 9374803bb59357889b692ca61dd87b48 0.19910088181495667 +66b3fd3631119304322f51a077d216a8 946b5f1cf84bc4409e87cbd1ee0ef26a 0.159960076212883 +66b3fd3631119304322f51a077d216a8 955c2ad95941c2cab740e78216da597c 0.19192370772361755 +66b3fd3631119304322f51a077d216a8 9620df9ac2a3839d04df86692d43528f 0.2234782576560974 +66b3fd3631119304322f51a077d216a8 a04dff74cc5e783025a349d32f5ce915 0.19192370772361755 +66b3fd3631119304322f51a077d216a8 a2c496dfec8a1bf1f2a450e699b829ad 0.1425413340330124 +66b3fd3631119304322f51a077d216a8 ad8a15dd4bde7a1d96e95da04e910853 0.17569200694561005 +66b3fd3631119304322f51a077d216a8 af2135763c26212ed95a8a891c7dfca3 0.0 +66b3fd3631119304322f51a077d216a8 b4c9b3e8f6e5852ee29efa686ffcdca0 0.16029834747314453 +66b3fd3631119304322f51a077d216a8 b521d9b8e55a26909e3ac0292b42d8f3 0.1607804298400879 +66b3fd3631119304322f51a077d216a8 b8783f557b3ed4a9b4269539b1583419 0.1474532186985016 +66b3fd3631119304322f51a077d216a8 bd2031065307a5b5b38ea208e314d340 0.17569200694561005 +66b3fd3631119304322f51a077d216a8 bf4312f7e11603ff2ae87587fcebbc9c 0.159960076212883 +66b3fd3631119304322f51a077d216a8 c13e1b0a3d3829bf266d9a2162207b28 0.2031242847442627 +66b3fd3631119304322f51a077d216a8 c6fe12ce4cddb1b8423b63e6dfad808b 0.2545986473560333 +66b3fd3631119304322f51a077d216a8 cb8d96ae1287284021e9038a79bf3131 0.2057768553495407 +66b3fd3631119304322f51a077d216a8 ccda3b30480708f505105d95da0bfb62 0.18475742638111115 +66b3fd3631119304322f51a077d216a8 d8e6b7b0368832247dbc5acab0fa4971 0.26047447323799133 +66b3fd3631119304322f51a077d216a8 dfa3146f46afd34506e6a71e0ec8b111 0.11456310749053955 +66b3fd3631119304322f51a077d216a8 e238a64ed05a08249266e0e5839548e5 0.257258802652359 +66b3fd3631119304322f51a077d216a8 e396578f1078dd14484f24e821e31f7b 0.12916666269302368 +66b3fd3631119304322f51a077d216a8 e5f50fc1871b817d772009a19b1a639a 0.30531030893325806 +66b3fd3631119304322f51a077d216a8 e645222fbec3f59af2ffb3b22123ac56 0.2539195120334625 +66b3fd3631119304322f51a077d216a8 e956cc2ce89bd8b63426fbab21f2f2e6 0.11456310749053955 +66b3fd3631119304322f51a077d216a8 ecbbb5fea0464f857d513de5c23423f1 0.16029834747314453 +66b3fd3631119304322f51a077d216a8 f41879b82690dbbd64eba913bb60b084 0.18339985609054565 +66b3fd3631119304322f51a077d216a8 f4b3941d7d57b2f17e1f22ec3077cc57 0.28446754813194275 +66b3fd3631119304322f51a077d216a8 f64340086bf5617b5b73684e79e6851c 0.19192370772361755 +66b3fd3631119304322f51a077d216a8 f67c4609c1e7a5fa403de7e22c501457 0.19910088181495667 +66b3fd3631119304322f51a077d216a8 fd032fad609be92a9a9d2a36e2e03faa 0.19192370772361755 +66b3fd3631119304322f51a077d216a8 fe888f4b12c0b05171796bd6d1b4f590 0.159960076212883 +66eabd96e837bc63970b8b43dc3e7d59 677563d77f33dde9a437e9769cd97350 0.13962264358997345 +66eabd96e837bc63970b8b43dc3e7d59 6c194f239694aec7cf630c1ad0e43db7 0.0 +66eabd96e837bc63970b8b43dc3e7d59 6c1ed97536601e49cd993c2c3dc0e628 0.15776747465133667 +66eabd96e837bc63970b8b43dc3e7d59 6d3e5d85b2aa35d58347bb4b9b203e43 0.331742525100708 +66eabd96e837bc63970b8b43dc3e7d59 6dd32e33c78a21fef169e6423c91dfcd 0.21470217406749725 +66eabd96e837bc63970b8b43dc3e7d59 712ceab0f39ef3518910c2244af3d58f 0.13366283476352692 +66eabd96e837bc63970b8b43dc3e7d59 8423cb55f94b74aff6335ffc08e1ffa0 0.16033527255058289 +66eabd96e837bc63970b8b43dc3e7d59 857b927ef6cfe28868c7f0b4beb0f9c5 0.13962264358997345 +66eabd96e837bc63970b8b43dc3e7d59 88aa65483a9d0d188a09ae32f835fbd5 0.18114697933197021 +66eabd96e837bc63970b8b43dc3e7d59 8ec183a3479d0541d4b13cff95940cee 0.16390669345855713 +66eabd96e837bc63970b8b43dc3e7d59 8f3fb318e9afc95f071ac38522976b1b 0.13253504037857056 +66eabd96e837bc63970b8b43dc3e7d59 9374803bb59357889b692ca61dd87b48 0.1856476366519928 +66eabd96e837bc63970b8b43dc3e7d59 946b5f1cf84bc4409e87cbd1ee0ef26a 0.12238095700740814 +66eabd96e837bc63970b8b43dc3e7d59 955c2ad95941c2cab740e78216da597c 0.1545124351978302 +66eabd96e837bc63970b8b43dc3e7d59 9620df9ac2a3839d04df86692d43528f 0.1517857164144516 +66eabd96e837bc63970b8b43dc3e7d59 a04dff74cc5e783025a349d32f5ce915 0.1545124351978302 +66eabd96e837bc63970b8b43dc3e7d59 a2c496dfec8a1bf1f2a450e699b829ad 0.15827451646327972 +66eabd96e837bc63970b8b43dc3e7d59 ad8a15dd4bde7a1d96e95da04e910853 0.1802748590707779 +66eabd96e837bc63970b8b43dc3e7d59 af2135763c26212ed95a8a891c7dfca3 0.14847984910011292 +66eabd96e837bc63970b8b43dc3e7d59 b4c9b3e8f6e5852ee29efa686ffcdca0 0.16390669345855713 +66eabd96e837bc63970b8b43dc3e7d59 b521d9b8e55a26909e3ac0292b42d8f3 0.1501103937625885 +66eabd96e837bc63970b8b43dc3e7d59 b8783f557b3ed4a9b4269539b1583419 0.19550713896751404 +66eabd96e837bc63970b8b43dc3e7d59 bd2031065307a5b5b38ea208e314d340 0.1802748590707779 +66eabd96e837bc63970b8b43dc3e7d59 bf4312f7e11603ff2ae87587fcebbc9c 0.12238095700740814 +66eabd96e837bc63970b8b43dc3e7d59 c13e1b0a3d3829bf266d9a2162207b28 0.1738334596157074 +66eabd96e837bc63970b8b43dc3e7d59 c6fe12ce4cddb1b8423b63e6dfad808b 0.2113419622182846 +66eabd96e837bc63970b8b43dc3e7d59 cb8d96ae1287284021e9038a79bf3131 0.21470217406749725 +66eabd96e837bc63970b8b43dc3e7d59 ccda3b30480708f505105d95da0bfb62 0.1772746443748474 +66eabd96e837bc63970b8b43dc3e7d59 d8e6b7b0368832247dbc5acab0fa4971 0.2640758454799652 +66eabd96e837bc63970b8b43dc3e7d59 dfa3146f46afd34506e6a71e0ec8b111 0.1740928739309311 +66eabd96e837bc63970b8b43dc3e7d59 e238a64ed05a08249266e0e5839548e5 0.2478894144296646 +66eabd96e837bc63970b8b43dc3e7d59 e396578f1078dd14484f24e821e31f7b 0.15454059839248657 +66eabd96e837bc63970b8b43dc3e7d59 e5f50fc1871b817d772009a19b1a639a 0.30888429284095764 +66eabd96e837bc63970b8b43dc3e7d59 e645222fbec3f59af2ffb3b22123ac56 0.24886907637119293 +66eabd96e837bc63970b8b43dc3e7d59 e956cc2ce89bd8b63426fbab21f2f2e6 0.10924196988344193 +66eabd96e837bc63970b8b43dc3e7d59 ecbbb5fea0464f857d513de5c23423f1 0.13253504037857056 +66eabd96e837bc63970b8b43dc3e7d59 f41879b82690dbbd64eba913bb60b084 0.13962264358997345 +66eabd96e837bc63970b8b43dc3e7d59 f4b3941d7d57b2f17e1f22ec3077cc57 0.26720452308654785 +66eabd96e837bc63970b8b43dc3e7d59 f64340086bf5617b5b73684e79e6851c 0.1545124351978302 +66eabd96e837bc63970b8b43dc3e7d59 f67c4609c1e7a5fa403de7e22c501457 0.1856476366519928 +66eabd96e837bc63970b8b43dc3e7d59 fd032fad609be92a9a9d2a36e2e03faa 0.1545124351978302 +66eabd96e837bc63970b8b43dc3e7d59 fe888f4b12c0b05171796bd6d1b4f590 0.12238095700740814 +677563d77f33dde9a437e9769cd97350 6c194f239694aec7cf630c1ad0e43db7 0.13962264358997345 +677563d77f33dde9a437e9769cd97350 6c1ed97536601e49cd993c2c3dc0e628 0.17960615456104279 +677563d77f33dde9a437e9769cd97350 6d3e5d85b2aa35d58347bb4b9b203e43 0.36449968814849854 +677563d77f33dde9a437e9769cd97350 6dd32e33c78a21fef169e6423c91dfcd 0.17656728625297546 +677563d77f33dde9a437e9769cd97350 712ceab0f39ef3518910c2244af3d58f 0.15141983330249786 +677563d77f33dde9a437e9769cd97350 8423cb55f94b74aff6335ffc08e1ffa0 0.15780463814735413 +677563d77f33dde9a437e9769cd97350 857b927ef6cfe28868c7f0b4beb0f9c5 0.0 +677563d77f33dde9a437e9769cd97350 88aa65483a9d0d188a09ae32f835fbd5 0.1566528081893921 +677563d77f33dde9a437e9769cd97350 8ec183a3479d0541d4b13cff95940cee 0.1734422892332077 +677563d77f33dde9a437e9769cd97350 8f3fb318e9afc95f071ac38522976b1b 0.1670183390378952 +677563d77f33dde9a437e9769cd97350 9374803bb59357889b692ca61dd87b48 0.16260741651058197 +677563d77f33dde9a437e9769cd97350 946b5f1cf84bc4409e87cbd1ee0ef26a 0.13962264358997345 +677563d77f33dde9a437e9769cd97350 955c2ad95941c2cab740e78216da597c 0.1794992983341217 +677563d77f33dde9a437e9769cd97350 9620df9ac2a3839d04df86692d43528f 0.18321986496448517 +677563d77f33dde9a437e9769cd97350 a04dff74cc5e783025a349d32f5ce915 0.1794992983341217 +677563d77f33dde9a437e9769cd97350 a2c496dfec8a1bf1f2a450e699b829ad 0.19167879223823547 +677563d77f33dde9a437e9769cd97350 ad8a15dd4bde7a1d96e95da04e910853 0.17504872381687164 +677563d77f33dde9a437e9769cd97350 af2135763c26212ed95a8a891c7dfca3 0.18339985609054565 +677563d77f33dde9a437e9769cd97350 b4c9b3e8f6e5852ee29efa686ffcdca0 0.1734422892332077 +677563d77f33dde9a437e9769cd97350 b521d9b8e55a26909e3ac0292b42d8f3 0.1502920538187027 +677563d77f33dde9a437e9769cd97350 b8783f557b3ed4a9b4269539b1583419 0.21023796498775482 +677563d77f33dde9a437e9769cd97350 bd2031065307a5b5b38ea208e314d340 0.17504872381687164 +677563d77f33dde9a437e9769cd97350 bf4312f7e11603ff2ae87587fcebbc9c 0.13962264358997345 +677563d77f33dde9a437e9769cd97350 c13e1b0a3d3829bf266d9a2162207b28 0.1795157790184021 +677563d77f33dde9a437e9769cd97350 c6fe12ce4cddb1b8423b63e6dfad808b 0.24538461863994598 +677563d77f33dde9a437e9769cd97350 cb8d96ae1287284021e9038a79bf3131 0.17656728625297546 +677563d77f33dde9a437e9769cd97350 ccda3b30480708f505105d95da0bfb62 0.17380328476428986 +677563d77f33dde9a437e9769cd97350 d8e6b7b0368832247dbc5acab0fa4971 0.2281496524810791 +677563d77f33dde9a437e9769cd97350 dfa3146f46afd34506e6a71e0ec8b111 0.16734465956687927 +677563d77f33dde9a437e9769cd97350 e238a64ed05a08249266e0e5839548e5 0.24267180263996124 +677563d77f33dde9a437e9769cd97350 e396578f1078dd14484f24e821e31f7b 0.21638160943984985 +677563d77f33dde9a437e9769cd97350 e5f50fc1871b817d772009a19b1a639a 0.3117869198322296 +677563d77f33dde9a437e9769cd97350 e645222fbec3f59af2ffb3b22123ac56 0.24133771657943726 +677563d77f33dde9a437e9769cd97350 e956cc2ce89bd8b63426fbab21f2f2e6 0.1495238095521927 +677563d77f33dde9a437e9769cd97350 ecbbb5fea0464f857d513de5c23423f1 0.1670183390378952 +677563d77f33dde9a437e9769cd97350 f41879b82690dbbd64eba913bb60b084 0.0 +677563d77f33dde9a437e9769cd97350 f4b3941d7d57b2f17e1f22ec3077cc57 0.25238335132598877 +677563d77f33dde9a437e9769cd97350 f64340086bf5617b5b73684e79e6851c 0.1794992983341217 +677563d77f33dde9a437e9769cd97350 f67c4609c1e7a5fa403de7e22c501457 0.16260741651058197 +677563d77f33dde9a437e9769cd97350 fd032fad609be92a9a9d2a36e2e03faa 0.1794992983341217 +677563d77f33dde9a437e9769cd97350 fe888f4b12c0b05171796bd6d1b4f590 0.13962264358997345 +6c194f239694aec7cf630c1ad0e43db7 6c1ed97536601e49cd993c2c3dc0e628 0.15776747465133667 +6c194f239694aec7cf630c1ad0e43db7 6d3e5d85b2aa35d58347bb4b9b203e43 0.331742525100708 +6c194f239694aec7cf630c1ad0e43db7 6dd32e33c78a21fef169e6423c91dfcd 0.21470217406749725 +6c194f239694aec7cf630c1ad0e43db7 712ceab0f39ef3518910c2244af3d58f 0.13366283476352692 +6c194f239694aec7cf630c1ad0e43db7 8423cb55f94b74aff6335ffc08e1ffa0 0.16033527255058289 +6c194f239694aec7cf630c1ad0e43db7 857b927ef6cfe28868c7f0b4beb0f9c5 0.13962264358997345 +6c194f239694aec7cf630c1ad0e43db7 88aa65483a9d0d188a09ae32f835fbd5 0.18114697933197021 +6c194f239694aec7cf630c1ad0e43db7 8ec183a3479d0541d4b13cff95940cee 0.16390669345855713 +6c194f239694aec7cf630c1ad0e43db7 8f3fb318e9afc95f071ac38522976b1b 0.13253504037857056 +6c194f239694aec7cf630c1ad0e43db7 9374803bb59357889b692ca61dd87b48 0.1856476366519928 +6c194f239694aec7cf630c1ad0e43db7 946b5f1cf84bc4409e87cbd1ee0ef26a 0.12238095700740814 +6c194f239694aec7cf630c1ad0e43db7 955c2ad95941c2cab740e78216da597c 0.1545124351978302 +6c194f239694aec7cf630c1ad0e43db7 9620df9ac2a3839d04df86692d43528f 0.1517857164144516 +6c194f239694aec7cf630c1ad0e43db7 a04dff74cc5e783025a349d32f5ce915 0.1545124351978302 +6c194f239694aec7cf630c1ad0e43db7 a2c496dfec8a1bf1f2a450e699b829ad 0.15827451646327972 +6c194f239694aec7cf630c1ad0e43db7 ad8a15dd4bde7a1d96e95da04e910853 0.1802748590707779 +6c194f239694aec7cf630c1ad0e43db7 af2135763c26212ed95a8a891c7dfca3 0.14847984910011292 +6c194f239694aec7cf630c1ad0e43db7 b4c9b3e8f6e5852ee29efa686ffcdca0 0.16390669345855713 +6c194f239694aec7cf630c1ad0e43db7 b521d9b8e55a26909e3ac0292b42d8f3 0.1501103937625885 +6c194f239694aec7cf630c1ad0e43db7 b8783f557b3ed4a9b4269539b1583419 0.19550713896751404 +6c194f239694aec7cf630c1ad0e43db7 bd2031065307a5b5b38ea208e314d340 0.1802748590707779 +6c194f239694aec7cf630c1ad0e43db7 bf4312f7e11603ff2ae87587fcebbc9c 0.12238095700740814 +6c194f239694aec7cf630c1ad0e43db7 c13e1b0a3d3829bf266d9a2162207b28 0.1738334596157074 +6c194f239694aec7cf630c1ad0e43db7 c6fe12ce4cddb1b8423b63e6dfad808b 0.2113419622182846 +6c194f239694aec7cf630c1ad0e43db7 cb8d96ae1287284021e9038a79bf3131 0.21470217406749725 +6c194f239694aec7cf630c1ad0e43db7 ccda3b30480708f505105d95da0bfb62 0.1772746443748474 +6c194f239694aec7cf630c1ad0e43db7 d8e6b7b0368832247dbc5acab0fa4971 0.2640758454799652 +6c194f239694aec7cf630c1ad0e43db7 dfa3146f46afd34506e6a71e0ec8b111 0.1740928739309311 +6c194f239694aec7cf630c1ad0e43db7 e238a64ed05a08249266e0e5839548e5 0.2478894144296646 +6c194f239694aec7cf630c1ad0e43db7 e396578f1078dd14484f24e821e31f7b 0.15454059839248657 +6c194f239694aec7cf630c1ad0e43db7 e5f50fc1871b817d772009a19b1a639a 0.30888429284095764 +6c194f239694aec7cf630c1ad0e43db7 e645222fbec3f59af2ffb3b22123ac56 0.24886907637119293 +6c194f239694aec7cf630c1ad0e43db7 e956cc2ce89bd8b63426fbab21f2f2e6 0.10924196988344193 +6c194f239694aec7cf630c1ad0e43db7 ecbbb5fea0464f857d513de5c23423f1 0.13253504037857056 +6c194f239694aec7cf630c1ad0e43db7 f41879b82690dbbd64eba913bb60b084 0.13962264358997345 +6c194f239694aec7cf630c1ad0e43db7 f4b3941d7d57b2f17e1f22ec3077cc57 0.26720452308654785 +6c194f239694aec7cf630c1ad0e43db7 f64340086bf5617b5b73684e79e6851c 0.1545124351978302 +6c194f239694aec7cf630c1ad0e43db7 f67c4609c1e7a5fa403de7e22c501457 0.1856476366519928 +6c194f239694aec7cf630c1ad0e43db7 fd032fad609be92a9a9d2a36e2e03faa 0.1545124351978302 +6c194f239694aec7cf630c1ad0e43db7 fe888f4b12c0b05171796bd6d1b4f590 0.12238095700740814 +6c1ed97536601e49cd993c2c3dc0e628 6d3e5d85b2aa35d58347bb4b9b203e43 0.366955041885376 +6c1ed97536601e49cd993c2c3dc0e628 6dd32e33c78a21fef169e6423c91dfcd 0.19580912590026855 +6c1ed97536601e49cd993c2c3dc0e628 712ceab0f39ef3518910c2244af3d58f 0.18194444477558136 +6c1ed97536601e49cd993c2c3dc0e628 8423cb55f94b74aff6335ffc08e1ffa0 0.17429906129837036 +6c1ed97536601e49cd993c2c3dc0e628 857b927ef6cfe28868c7f0b4beb0f9c5 0.17960615456104279 +6c1ed97536601e49cd993c2c3dc0e628 88aa65483a9d0d188a09ae32f835fbd5 0.22202177345752716 +6c1ed97536601e49cd993c2c3dc0e628 8ec183a3479d0541d4b13cff95940cee 0.17429906129837036 +6c1ed97536601e49cd993c2c3dc0e628 8f3fb318e9afc95f071ac38522976b1b 0.12238095700740814 +6c1ed97536601e49cd993c2c3dc0e628 9374803bb59357889b692ca61dd87b48 0.20418383181095123 +6c1ed97536601e49cd993c2c3dc0e628 946b5f1cf84bc4409e87cbd1ee0ef26a 0.15717947483062744 +6c1ed97536601e49cd993c2c3dc0e628 955c2ad95941c2cab740e78216da597c 0.2147493064403534 +6c1ed97536601e49cd993c2c3dc0e628 9620df9ac2a3839d04df86692d43528f 0.22880154848098755 +6c1ed97536601e49cd993c2c3dc0e628 a04dff74cc5e783025a349d32f5ce915 0.2147493064403534 +6c1ed97536601e49cd993c2c3dc0e628 a2c496dfec8a1bf1f2a450e699b829ad 0.17201834917068481 +6c1ed97536601e49cd993c2c3dc0e628 ad8a15dd4bde7a1d96e95da04e910853 0.18597069382667542 +6c1ed97536601e49cd993c2c3dc0e628 af2135763c26212ed95a8a891c7dfca3 0.1623992621898651 +6c1ed97536601e49cd993c2c3dc0e628 b4c9b3e8f6e5852ee29efa686ffcdca0 0.17429906129837036 +6c1ed97536601e49cd993c2c3dc0e628 b521d9b8e55a26909e3ac0292b42d8f3 0.1654205620288849 +6c1ed97536601e49cd993c2c3dc0e628 b8783f557b3ed4a9b4269539b1583419 0.2052655667066574 +6c1ed97536601e49cd993c2c3dc0e628 bd2031065307a5b5b38ea208e314d340 0.18597069382667542 +6c1ed97536601e49cd993c2c3dc0e628 bf4312f7e11603ff2ae87587fcebbc9c 0.15717947483062744 +6c1ed97536601e49cd993c2c3dc0e628 c13e1b0a3d3829bf266d9a2162207b28 0.21185897290706635 +6c1ed97536601e49cd993c2c3dc0e628 c6fe12ce4cddb1b8423b63e6dfad808b 0.2566833794116974 +6c1ed97536601e49cd993c2c3dc0e628 cb8d96ae1287284021e9038a79bf3131 0.19580912590026855 +6c1ed97536601e49cd993c2c3dc0e628 ccda3b30480708f505105d95da0bfb62 0.18363095819950104 +6c1ed97536601e49cd993c2c3dc0e628 d8e6b7b0368832247dbc5acab0fa4971 0.2438095062971115 +6c1ed97536601e49cd993c2c3dc0e628 dfa3146f46afd34506e6a71e0ec8b111 0.19339622557163239 +6c1ed97536601e49cd993c2c3dc0e628 e238a64ed05a08249266e0e5839548e5 0.27399998903274536 +6c1ed97536601e49cd993c2c3dc0e628 e396578f1078dd14484f24e821e31f7b 0.15555556118488312 +6c1ed97536601e49cd993c2c3dc0e628 e5f50fc1871b817d772009a19b1a639a 0.29319635033607483 +6c1ed97536601e49cd993c2c3dc0e628 e645222fbec3f59af2ffb3b22123ac56 0.27906110882759094 +6c1ed97536601e49cd993c2c3dc0e628 e956cc2ce89bd8b63426fbab21f2f2e6 0.14134615659713745 +6c1ed97536601e49cd993c2c3dc0e628 ecbbb5fea0464f857d513de5c23423f1 0.12238095700740814 +6c1ed97536601e49cd993c2c3dc0e628 f41879b82690dbbd64eba913bb60b084 0.17960615456104279 +6c1ed97536601e49cd993c2c3dc0e628 f4b3941d7d57b2f17e1f22ec3077cc57 0.293290376663208 +6c1ed97536601e49cd993c2c3dc0e628 f64340086bf5617b5b73684e79e6851c 0.2147493064403534 +6c1ed97536601e49cd993c2c3dc0e628 f67c4609c1e7a5fa403de7e22c501457 0.20418383181095123 +6c1ed97536601e49cd993c2c3dc0e628 fd032fad609be92a9a9d2a36e2e03faa 0.2147493064403534 +6c1ed97536601e49cd993c2c3dc0e628 fe888f4b12c0b05171796bd6d1b4f590 0.15717947483062744 +6d3e5d85b2aa35d58347bb4b9b203e43 6dd32e33c78a21fef169e6423c91dfcd 0.38400015234947205 +6d3e5d85b2aa35d58347bb4b9b203e43 712ceab0f39ef3518910c2244af3d58f 0.3503205180168152 +6d3e5d85b2aa35d58347bb4b9b203e43 8423cb55f94b74aff6335ffc08e1ffa0 0.3836320638656616 +6d3e5d85b2aa35d58347bb4b9b203e43 857b927ef6cfe28868c7f0b4beb0f9c5 0.36449968814849854 +6d3e5d85b2aa35d58347bb4b9b203e43 88aa65483a9d0d188a09ae32f835fbd5 0.34532371163368225 +6d3e5d85b2aa35d58347bb4b9b203e43 8ec183a3479d0541d4b13cff95940cee 0.34070104360580444 +6d3e5d85b2aa35d58347bb4b9b203e43 8f3fb318e9afc95f071ac38522976b1b 0.3423168957233429 +6d3e5d85b2aa35d58347bb4b9b203e43 9374803bb59357889b692ca61dd87b48 0.3444429934024811 +6d3e5d85b2aa35d58347bb4b9b203e43 946b5f1cf84bc4409e87cbd1ee0ef26a 0.36117860674858093 +6d3e5d85b2aa35d58347bb4b9b203e43 955c2ad95941c2cab740e78216da597c 0.31670618057250977 +6d3e5d85b2aa35d58347bb4b9b203e43 9620df9ac2a3839d04df86692d43528f 0.31067946553230286 +6d3e5d85b2aa35d58347bb4b9b203e43 a04dff74cc5e783025a349d32f5ce915 0.31670618057250977 +6d3e5d85b2aa35d58347bb4b9b203e43 a2c496dfec8a1bf1f2a450e699b829ad 0.3407624363899231 +6d3e5d85b2aa35d58347bb4b9b203e43 ad8a15dd4bde7a1d96e95da04e910853 0.38020244240760803 +6d3e5d85b2aa35d58347bb4b9b203e43 af2135763c26212ed95a8a891c7dfca3 0.37454909086227417 +6d3e5d85b2aa35d58347bb4b9b203e43 b4c9b3e8f6e5852ee29efa686ffcdca0 0.34070104360580444 +6d3e5d85b2aa35d58347bb4b9b203e43 b521d9b8e55a26909e3ac0292b42d8f3 0.366189181804657 +6d3e5d85b2aa35d58347bb4b9b203e43 b8783f557b3ed4a9b4269539b1583419 0.32232698798179626 +6d3e5d85b2aa35d58347bb4b9b203e43 bd2031065307a5b5b38ea208e314d340 0.38020244240760803 +6d3e5d85b2aa35d58347bb4b9b203e43 bf4312f7e11603ff2ae87587fcebbc9c 0.36117860674858093 +6d3e5d85b2aa35d58347bb4b9b203e43 c13e1b0a3d3829bf266d9a2162207b28 0.3163369596004486 +6d3e5d85b2aa35d58347bb4b9b203e43 c6fe12ce4cddb1b8423b63e6dfad808b 0.309504896402359 +6d3e5d85b2aa35d58347bb4b9b203e43 cb8d96ae1287284021e9038a79bf3131 0.38400015234947205 +6d3e5d85b2aa35d58347bb4b9b203e43 ccda3b30480708f505105d95da0bfb62 0.3385784924030304 +6d3e5d85b2aa35d58347bb4b9b203e43 d8e6b7b0368832247dbc5acab0fa4971 0.42893967032432556 +6d3e5d85b2aa35d58347bb4b9b203e43 dfa3146f46afd34506e6a71e0ec8b111 0.38713330030441284 +6d3e5d85b2aa35d58347bb4b9b203e43 e238a64ed05a08249266e0e5839548e5 0.3166505992412567 +6d3e5d85b2aa35d58347bb4b9b203e43 e396578f1078dd14484f24e821e31f7b 0.3485957086086273 +6d3e5d85b2aa35d58347bb4b9b203e43 e5f50fc1871b817d772009a19b1a639a 0.38788533210754395 +6d3e5d85b2aa35d58347bb4b9b203e43 e645222fbec3f59af2ffb3b22123ac56 0.3218255341053009 +6d3e5d85b2aa35d58347bb4b9b203e43 e956cc2ce89bd8b63426fbab21f2f2e6 0.3389595150947571 +6d3e5d85b2aa35d58347bb4b9b203e43 ecbbb5fea0464f857d513de5c23423f1 0.3423168957233429 +6d3e5d85b2aa35d58347bb4b9b203e43 f41879b82690dbbd64eba913bb60b084 0.36449968814849854 +6d3e5d85b2aa35d58347bb4b9b203e43 f4b3941d7d57b2f17e1f22ec3077cc57 0.2722063362598419 +6d3e5d85b2aa35d58347bb4b9b203e43 f64340086bf5617b5b73684e79e6851c 0.31670618057250977 +6d3e5d85b2aa35d58347bb4b9b203e43 f67c4609c1e7a5fa403de7e22c501457 0.3444429934024811 +6d3e5d85b2aa35d58347bb4b9b203e43 fd032fad609be92a9a9d2a36e2e03faa 0.31670618057250977 +6d3e5d85b2aa35d58347bb4b9b203e43 fe888f4b12c0b05171796bd6d1b4f590 0.36117860674858093 +6dd32e33c78a21fef169e6423c91dfcd 712ceab0f39ef3518910c2244af3d58f 0.20712924003601074 +6dd32e33c78a21fef169e6423c91dfcd 8423cb55f94b74aff6335ffc08e1ffa0 0.2054545283317566 +6dd32e33c78a21fef169e6423c91dfcd 857b927ef6cfe28868c7f0b4beb0f9c5 0.17656728625297546 +6dd32e33c78a21fef169e6423c91dfcd 88aa65483a9d0d188a09ae32f835fbd5 0.1955128163099289 +6dd32e33c78a21fef169e6423c91dfcd 8ec183a3479d0541d4b13cff95940cee 0.22035038471221924 +6dd32e33c78a21fef169e6423c91dfcd 8f3fb318e9afc95f071ac38522976b1b 0.19497668743133545 +6dd32e33c78a21fef169e6423c91dfcd 9374803bb59357889b692ca61dd87b48 0.17445436120033264 +6dd32e33c78a21fef169e6423c91dfcd 946b5f1cf84bc4409e87cbd1ee0ef26a 0.19074073433876038 +6dd32e33c78a21fef169e6423c91dfcd 955c2ad95941c2cab740e78216da597c 0.25820624828338623 +6dd32e33c78a21fef169e6423c91dfcd 9620df9ac2a3839d04df86692d43528f 0.264348566532135 +6dd32e33c78a21fef169e6423c91dfcd a04dff74cc5e783025a349d32f5ce915 0.25820624828338623 +6dd32e33c78a21fef169e6423c91dfcd a2c496dfec8a1bf1f2a450e699b829ad 0.24078524112701416 +6dd32e33c78a21fef169e6423c91dfcd ad8a15dd4bde7a1d96e95da04e910853 0.18005257844924927 +6dd32e33c78a21fef169e6423c91dfcd af2135763c26212ed95a8a891c7dfca3 0.2057768553495407 +6dd32e33c78a21fef169e6423c91dfcd b4c9b3e8f6e5852ee29efa686ffcdca0 0.22035038471221924 +6dd32e33c78a21fef169e6423c91dfcd b521d9b8e55a26909e3ac0292b42d8f3 0.2054545283317566 +6dd32e33c78a21fef169e6423c91dfcd b8783f557b3ed4a9b4269539b1583419 0.2236189991235733 +6dd32e33c78a21fef169e6423c91dfcd bd2031065307a5b5b38ea208e314d340 0.18005257844924927 +6dd32e33c78a21fef169e6423c91dfcd bf4312f7e11603ff2ae87587fcebbc9c 0.19074073433876038 +6dd32e33c78a21fef169e6423c91dfcd c13e1b0a3d3829bf266d9a2162207b28 0.2336372584104538 +6dd32e33c78a21fef169e6423c91dfcd c6fe12ce4cddb1b8423b63e6dfad808b 0.28849440813064575 +6dd32e33c78a21fef169e6423c91dfcd cb8d96ae1287284021e9038a79bf3131 0.0 +6dd32e33c78a21fef169e6423c91dfcd ccda3b30480708f505105d95da0bfb62 0.20238427817821503 +6dd32e33c78a21fef169e6423c91dfcd d8e6b7b0368832247dbc5acab0fa4971 0.25326263904571533 +6dd32e33c78a21fef169e6423c91dfcd dfa3146f46afd34506e6a71e0ec8b111 0.2082015573978424 +6dd32e33c78a21fef169e6423c91dfcd e238a64ed05a08249266e0e5839548e5 0.26354894042015076 +6dd32e33c78a21fef169e6423c91dfcd e396578f1078dd14484f24e821e31f7b 0.22335204482078552 +6dd32e33c78a21fef169e6423c91dfcd e5f50fc1871b817d772009a19b1a639a 0.29918932914733887 +6dd32e33c78a21fef169e6423c91dfcd e645222fbec3f59af2ffb3b22123ac56 0.28122496604919434 +6dd32e33c78a21fef169e6423c91dfcd e956cc2ce89bd8b63426fbab21f2f2e6 0.2079237848520279 +6dd32e33c78a21fef169e6423c91dfcd ecbbb5fea0464f857d513de5c23423f1 0.19497668743133545 +6dd32e33c78a21fef169e6423c91dfcd f41879b82690dbbd64eba913bb60b084 0.17656728625297546 +6dd32e33c78a21fef169e6423c91dfcd f4b3941d7d57b2f17e1f22ec3077cc57 0.2335408627986908 +6dd32e33c78a21fef169e6423c91dfcd f64340086bf5617b5b73684e79e6851c 0.25820624828338623 +6dd32e33c78a21fef169e6423c91dfcd f67c4609c1e7a5fa403de7e22c501457 0.17445436120033264 +6dd32e33c78a21fef169e6423c91dfcd fd032fad609be92a9a9d2a36e2e03faa 0.25820624828338623 +6dd32e33c78a21fef169e6423c91dfcd fe888f4b12c0b05171796bd6d1b4f590 0.19074073433876038 +712ceab0f39ef3518910c2244af3d58f 8423cb55f94b74aff6335ffc08e1ffa0 0.15473133325576782 +712ceab0f39ef3518910c2244af3d58f 857b927ef6cfe28868c7f0b4beb0f9c5 0.15141983330249786 +712ceab0f39ef3518910c2244af3d58f 88aa65483a9d0d188a09ae32f835fbd5 0.15171517431735992 +712ceab0f39ef3518910c2244af3d58f 8ec183a3479d0541d4b13cff95940cee 0.13878504931926727 +712ceab0f39ef3518910c2244af3d58f 8f3fb318e9afc95f071ac38522976b1b 0.1299065500497818 +712ceab0f39ef3518910c2244af3d58f 9374803bb59357889b692ca61dd87b48 0.172338604927063 +712ceab0f39ef3518910c2244af3d58f 946b5f1cf84bc4409e87cbd1ee0ef26a 0.1462976336479187 +712ceab0f39ef3518910c2244af3d58f 955c2ad95941c2cab740e78216da597c 0.13636364042758942 +712ceab0f39ef3518910c2244af3d58f 9620df9ac2a3839d04df86692d43528f 0.1589629054069519 +712ceab0f39ef3518910c2244af3d58f a04dff74cc5e783025a349d32f5ce915 0.13636364042758942 +712ceab0f39ef3518910c2244af3d58f a2c496dfec8a1bf1f2a450e699b829ad 0.14587154984474182 +712ceab0f39ef3518910c2244af3d58f ad8a15dd4bde7a1d96e95da04e910853 0.17064814269542694 +712ceab0f39ef3518910c2244af3d58f af2135763c26212ed95a8a891c7dfca3 0.16330274939537048 +712ceab0f39ef3518910c2244af3d58f b4c9b3e8f6e5852ee29efa686ffcdca0 0.13878504931926727 +712ceab0f39ef3518910c2244af3d58f b521d9b8e55a26909e3ac0292b42d8f3 0.15657344460487366 +712ceab0f39ef3518910c2244af3d58f b8783f557b3ed4a9b4269539b1583419 0.2035033404827118 +712ceab0f39ef3518910c2244af3d58f bd2031065307a5b5b38ea208e314d340 0.17064814269542694 +712ceab0f39ef3518910c2244af3d58f bf4312f7e11603ff2ae87587fcebbc9c 0.1462976336479187 +712ceab0f39ef3518910c2244af3d58f c13e1b0a3d3829bf266d9a2162207b28 0.1805555522441864 +712ceab0f39ef3518910c2244af3d58f c6fe12ce4cddb1b8423b63e6dfad808b 0.2094017118215561 +712ceab0f39ef3518910c2244af3d58f cb8d96ae1287284021e9038a79bf3131 0.20712924003601074 +712ceab0f39ef3518910c2244af3d58f ccda3b30480708f505105d95da0bfb62 0.14821428060531616 +712ceab0f39ef3518910c2244af3d58f d8e6b7b0368832247dbc5acab0fa4971 0.23924945294857025 +712ceab0f39ef3518910c2244af3d58f dfa3146f46afd34506e6a71e0ec8b111 0.15654204785823822 +712ceab0f39ef3518910c2244af3d58f e238a64ed05a08249266e0e5839548e5 0.22226230800151825 +712ceab0f39ef3518910c2244af3d58f e396578f1078dd14484f24e821e31f7b 0.16875000298023224 +712ceab0f39ef3518910c2244af3d58f e5f50fc1871b817d772009a19b1a639a 0.28114843368530273 +712ceab0f39ef3518910c2244af3d58f e645222fbec3f59af2ffb3b22123ac56 0.22432850301265717 +712ceab0f39ef3518910c2244af3d58f e956cc2ce89bd8b63426fbab21f2f2e6 0.13066038489341736 +712ceab0f39ef3518910c2244af3d58f ecbbb5fea0464f857d513de5c23423f1 0.1299065500497818 +712ceab0f39ef3518910c2244af3d58f f41879b82690dbbd64eba913bb60b084 0.15141983330249786 +712ceab0f39ef3518910c2244af3d58f f4b3941d7d57b2f17e1f22ec3077cc57 0.2557837963104248 +712ceab0f39ef3518910c2244af3d58f f64340086bf5617b5b73684e79e6851c 0.13636364042758942 +712ceab0f39ef3518910c2244af3d58f f67c4609c1e7a5fa403de7e22c501457 0.172338604927063 +712ceab0f39ef3518910c2244af3d58f fd032fad609be92a9a9d2a36e2e03faa 0.13636364042758942 +712ceab0f39ef3518910c2244af3d58f fe888f4b12c0b05171796bd6d1b4f590 0.1462976336479187 +8423cb55f94b74aff6335ffc08e1ffa0 857b927ef6cfe28868c7f0b4beb0f9c5 0.15780463814735413 +8423cb55f94b74aff6335ffc08e1ffa0 88aa65483a9d0d188a09ae32f835fbd5 0.20125290751457214 +8423cb55f94b74aff6335ffc08e1ffa0 8ec183a3479d0541d4b13cff95940cee 0.21429890394210815 +8423cb55f94b74aff6335ffc08e1ffa0 8f3fb318e9afc95f071ac38522976b1b 0.1814853847026825 +8423cb55f94b74aff6335ffc08e1ffa0 9374803bb59357889b692ca61dd87b48 0.1977272629737854 +8423cb55f94b74aff6335ffc08e1ffa0 946b5f1cf84bc4409e87cbd1ee0ef26a 0.15141983330249786 +8423cb55f94b74aff6335ffc08e1ffa0 955c2ad95941c2cab740e78216da597c 0.1783207356929779 +8423cb55f94b74aff6335ffc08e1ffa0 9620df9ac2a3839d04df86692d43528f 0.19534140825271606 +8423cb55f94b74aff6335ffc08e1ffa0 a04dff74cc5e783025a349d32f5ce915 0.1783207356929779 +8423cb55f94b74aff6335ffc08e1ffa0 a2c496dfec8a1bf1f2a450e699b829ad 0.17999249696731567 +8423cb55f94b74aff6335ffc08e1ffa0 ad8a15dd4bde7a1d96e95da04e910853 0.16338443756103516 +8423cb55f94b74aff6335ffc08e1ffa0 af2135763c26212ed95a8a891c7dfca3 0.18632453680038452 +8423cb55f94b74aff6335ffc08e1ffa0 b4c9b3e8f6e5852ee29efa686ffcdca0 0.21429890394210815 +8423cb55f94b74aff6335ffc08e1ffa0 b521d9b8e55a26909e3ac0292b42d8f3 0.07740384340286255 +8423cb55f94b74aff6335ffc08e1ffa0 b8783f557b3ed4a9b4269539b1583419 0.23076921701431274 +8423cb55f94b74aff6335ffc08e1ffa0 bd2031065307a5b5b38ea208e314d340 0.16338443756103516 +8423cb55f94b74aff6335ffc08e1ffa0 bf4312f7e11603ff2ae87587fcebbc9c 0.15141983330249786 +8423cb55f94b74aff6335ffc08e1ffa0 c13e1b0a3d3829bf266d9a2162207b28 0.14464005827903748 +8423cb55f94b74aff6335ffc08e1ffa0 c6fe12ce4cddb1b8423b63e6dfad808b 0.2543600797653198 +8423cb55f94b74aff6335ffc08e1ffa0 cb8d96ae1287284021e9038a79bf3131 0.2054545283317566 +8423cb55f94b74aff6335ffc08e1ffa0 ccda3b30480708f505105d95da0bfb62 0.15471230447292328 +8423cb55f94b74aff6335ffc08e1ffa0 d8e6b7b0368832247dbc5acab0fa4971 0.2350430190563202 +8423cb55f94b74aff6335ffc08e1ffa0 dfa3146f46afd34506e6a71e0ec8b111 0.18324074149131775 +8423cb55f94b74aff6335ffc08e1ffa0 e238a64ed05a08249266e0e5839548e5 0.22917760908603668 +8423cb55f94b74aff6335ffc08e1ffa0 e396578f1078dd14484f24e821e31f7b 0.20616307854652405 +8423cb55f94b74aff6335ffc08e1ffa0 e5f50fc1871b817d772009a19b1a639a 0.30783432722091675 +8423cb55f94b74aff6335ffc08e1ffa0 e645222fbec3f59af2ffb3b22123ac56 0.22094276547431946 +8423cb55f94b74aff6335ffc08e1ffa0 e956cc2ce89bd8b63426fbab21f2f2e6 0.1272619068622589 +8423cb55f94b74aff6335ffc08e1ffa0 ecbbb5fea0464f857d513de5c23423f1 0.1814853847026825 +8423cb55f94b74aff6335ffc08e1ffa0 f41879b82690dbbd64eba913bb60b084 0.15780463814735413 +8423cb55f94b74aff6335ffc08e1ffa0 f4b3941d7d57b2f17e1f22ec3077cc57 0.2668285667896271 +8423cb55f94b74aff6335ffc08e1ffa0 f64340086bf5617b5b73684e79e6851c 0.1783207356929779 +8423cb55f94b74aff6335ffc08e1ffa0 f67c4609c1e7a5fa403de7e22c501457 0.1977272629737854 +8423cb55f94b74aff6335ffc08e1ffa0 fd032fad609be92a9a9d2a36e2e03faa 0.1783207356929779 +8423cb55f94b74aff6335ffc08e1ffa0 fe888f4b12c0b05171796bd6d1b4f590 0.15141983330249786 +857b927ef6cfe28868c7f0b4beb0f9c5 88aa65483a9d0d188a09ae32f835fbd5 0.1566528081893921 +857b927ef6cfe28868c7f0b4beb0f9c5 8ec183a3479d0541d4b13cff95940cee 0.1734422892332077 +857b927ef6cfe28868c7f0b4beb0f9c5 8f3fb318e9afc95f071ac38522976b1b 0.1670183390378952 +857b927ef6cfe28868c7f0b4beb0f9c5 9374803bb59357889b692ca61dd87b48 0.16260741651058197 +857b927ef6cfe28868c7f0b4beb0f9c5 946b5f1cf84bc4409e87cbd1ee0ef26a 0.13962264358997345 +857b927ef6cfe28868c7f0b4beb0f9c5 955c2ad95941c2cab740e78216da597c 0.1794992983341217 +857b927ef6cfe28868c7f0b4beb0f9c5 9620df9ac2a3839d04df86692d43528f 0.18321986496448517 +857b927ef6cfe28868c7f0b4beb0f9c5 a04dff74cc5e783025a349d32f5ce915 0.1794992983341217 +857b927ef6cfe28868c7f0b4beb0f9c5 a2c496dfec8a1bf1f2a450e699b829ad 0.19167879223823547 +857b927ef6cfe28868c7f0b4beb0f9c5 ad8a15dd4bde7a1d96e95da04e910853 0.17504872381687164 +857b927ef6cfe28868c7f0b4beb0f9c5 af2135763c26212ed95a8a891c7dfca3 0.18339985609054565 +857b927ef6cfe28868c7f0b4beb0f9c5 b4c9b3e8f6e5852ee29efa686ffcdca0 0.1734422892332077 +857b927ef6cfe28868c7f0b4beb0f9c5 b521d9b8e55a26909e3ac0292b42d8f3 0.1502920538187027 +857b927ef6cfe28868c7f0b4beb0f9c5 b8783f557b3ed4a9b4269539b1583419 0.21023796498775482 +857b927ef6cfe28868c7f0b4beb0f9c5 bd2031065307a5b5b38ea208e314d340 0.17504872381687164 +857b927ef6cfe28868c7f0b4beb0f9c5 bf4312f7e11603ff2ae87587fcebbc9c 0.13962264358997345 +857b927ef6cfe28868c7f0b4beb0f9c5 c13e1b0a3d3829bf266d9a2162207b28 0.1795157790184021 +857b927ef6cfe28868c7f0b4beb0f9c5 c6fe12ce4cddb1b8423b63e6dfad808b 0.24538461863994598 +857b927ef6cfe28868c7f0b4beb0f9c5 cb8d96ae1287284021e9038a79bf3131 0.17656728625297546 +857b927ef6cfe28868c7f0b4beb0f9c5 ccda3b30480708f505105d95da0bfb62 0.17380328476428986 +857b927ef6cfe28868c7f0b4beb0f9c5 d8e6b7b0368832247dbc5acab0fa4971 0.2281496524810791 +857b927ef6cfe28868c7f0b4beb0f9c5 dfa3146f46afd34506e6a71e0ec8b111 0.16734465956687927 +857b927ef6cfe28868c7f0b4beb0f9c5 e238a64ed05a08249266e0e5839548e5 0.24267180263996124 +857b927ef6cfe28868c7f0b4beb0f9c5 e396578f1078dd14484f24e821e31f7b 0.21638160943984985 +857b927ef6cfe28868c7f0b4beb0f9c5 e5f50fc1871b817d772009a19b1a639a 0.3117869198322296 +857b927ef6cfe28868c7f0b4beb0f9c5 e645222fbec3f59af2ffb3b22123ac56 0.24133771657943726 +857b927ef6cfe28868c7f0b4beb0f9c5 e956cc2ce89bd8b63426fbab21f2f2e6 0.1495238095521927 +857b927ef6cfe28868c7f0b4beb0f9c5 ecbbb5fea0464f857d513de5c23423f1 0.1670183390378952 +857b927ef6cfe28868c7f0b4beb0f9c5 f41879b82690dbbd64eba913bb60b084 0.0 +857b927ef6cfe28868c7f0b4beb0f9c5 f4b3941d7d57b2f17e1f22ec3077cc57 0.25238335132598877 +857b927ef6cfe28868c7f0b4beb0f9c5 f64340086bf5617b5b73684e79e6851c 0.1794992983341217 +857b927ef6cfe28868c7f0b4beb0f9c5 f67c4609c1e7a5fa403de7e22c501457 0.16260741651058197 +857b927ef6cfe28868c7f0b4beb0f9c5 fd032fad609be92a9a9d2a36e2e03faa 0.1794992983341217 +857b927ef6cfe28868c7f0b4beb0f9c5 fe888f4b12c0b05171796bd6d1b4f590 0.13962264358997345 +88aa65483a9d0d188a09ae32f835fbd5 8ec183a3479d0541d4b13cff95940cee 0.179986372590065 +88aa65483a9d0d188a09ae32f835fbd5 8f3fb318e9afc95f071ac38522976b1b 0.179986372590065 +88aa65483a9d0d188a09ae32f835fbd5 9374803bb59357889b692ca61dd87b48 0.17305324971675873 +88aa65483a9d0d188a09ae32f835fbd5 946b5f1cf84bc4409e87cbd1ee0ef26a 0.14898601174354553 +88aa65483a9d0d188a09ae32f835fbd5 955c2ad95941c2cab740e78216da597c 0.14788462221622467 +88aa65483a9d0d188a09ae32f835fbd5 9620df9ac2a3839d04df86692d43528f 0.16371020674705505 +88aa65483a9d0d188a09ae32f835fbd5 a04dff74cc5e783025a349d32f5ce915 0.14788462221622467 +88aa65483a9d0d188a09ae32f835fbd5 a2c496dfec8a1bf1f2a450e699b829ad 0.18217390775680542 +88aa65483a9d0d188a09ae32f835fbd5 ad8a15dd4bde7a1d96e95da04e910853 0.1941964328289032 +88aa65483a9d0d188a09ae32f835fbd5 af2135763c26212ed95a8a891c7dfca3 0.2003573775291443 +88aa65483a9d0d188a09ae32f835fbd5 b4c9b3e8f6e5852ee29efa686ffcdca0 0.179986372590065 +88aa65483a9d0d188a09ae32f835fbd5 b521d9b8e55a26909e3ac0292b42d8f3 0.20509906113147736 +88aa65483a9d0d188a09ae32f835fbd5 b8783f557b3ed4a9b4269539b1583419 0.20962022244930267 +88aa65483a9d0d188a09ae32f835fbd5 bd2031065307a5b5b38ea208e314d340 0.1941964328289032 +88aa65483a9d0d188a09ae32f835fbd5 bf4312f7e11603ff2ae87587fcebbc9c 0.14898601174354553 +88aa65483a9d0d188a09ae32f835fbd5 c13e1b0a3d3829bf266d9a2162207b28 0.17630967497825623 +88aa65483a9d0d188a09ae32f835fbd5 c6fe12ce4cddb1b8423b63e6dfad808b 0.22099916636943817 +88aa65483a9d0d188a09ae32f835fbd5 cb8d96ae1287284021e9038a79bf3131 0.1955128163099289 +88aa65483a9d0d188a09ae32f835fbd5 ccda3b30480708f505105d95da0bfb62 0.161485493183136 +88aa65483a9d0d188a09ae32f835fbd5 d8e6b7b0368832247dbc5acab0fa4971 0.2715693712234497 +88aa65483a9d0d188a09ae32f835fbd5 dfa3146f46afd34506e6a71e0ec8b111 0.17247959971427917 +88aa65483a9d0d188a09ae32f835fbd5 e238a64ed05a08249266e0e5839548e5 0.19925770163536072 +88aa65483a9d0d188a09ae32f835fbd5 e396578f1078dd14484f24e821e31f7b 0.19646881520748138 +88aa65483a9d0d188a09ae32f835fbd5 e5f50fc1871b817d772009a19b1a639a 0.32036855816841125 +88aa65483a9d0d188a09ae32f835fbd5 e645222fbec3f59af2ffb3b22123ac56 0.22094585001468658 +88aa65483a9d0d188a09ae32f835fbd5 e956cc2ce89bd8b63426fbab21f2f2e6 0.19450795650482178 +88aa65483a9d0d188a09ae32f835fbd5 ecbbb5fea0464f857d513de5c23423f1 0.179986372590065 +88aa65483a9d0d188a09ae32f835fbd5 f41879b82690dbbd64eba913bb60b084 0.1566528081893921 +88aa65483a9d0d188a09ae32f835fbd5 f4b3941d7d57b2f17e1f22ec3077cc57 0.24376264214515686 +88aa65483a9d0d188a09ae32f835fbd5 f64340086bf5617b5b73684e79e6851c 0.14788462221622467 +88aa65483a9d0d188a09ae32f835fbd5 f67c4609c1e7a5fa403de7e22c501457 0.17305324971675873 +88aa65483a9d0d188a09ae32f835fbd5 fd032fad609be92a9a9d2a36e2e03faa 0.14788462221622467 +88aa65483a9d0d188a09ae32f835fbd5 fe888f4b12c0b05171796bd6d1b4f590 0.14898601174354553 +8ec183a3479d0541d4b13cff95940cee 8f3fb318e9afc95f071ac38522976b1b 0.1299065500497818 +8ec183a3479d0541d4b13cff95940cee 9374803bb59357889b692ca61dd87b48 0.18201327323913574 +8ec183a3479d0541d4b13cff95940cee 946b5f1cf84bc4409e87cbd1ee0ef26a 0.18442131578922272 +8ec183a3479d0541d4b13cff95940cee 955c2ad95941c2cab740e78216da597c 0.1536363661289215 +8ec183a3479d0541d4b13cff95940cee 9620df9ac2a3839d04df86692d43528f 0.20010730624198914 +8ec183a3479d0541d4b13cff95940cee a04dff74cc5e783025a349d32f5ce915 0.1536363661289215 +8ec183a3479d0541d4b13cff95940cee a2c496dfec8a1bf1f2a450e699b829ad 0.11966212093830109 +8ec183a3479d0541d4b13cff95940cee ad8a15dd4bde7a1d96e95da04e910853 0.17903386056423187 +8ec183a3479d0541d4b13cff95940cee af2135763c26212ed95a8a891c7dfca3 0.16029834747314453 +8ec183a3479d0541d4b13cff95940cee b4c9b3e8f6e5852ee29efa686ffcdca0 0.0 +8ec183a3479d0541d4b13cff95940cee b521d9b8e55a26909e3ac0292b42d8f3 0.21408730745315552 +8ec183a3479d0541d4b13cff95940cee b8783f557b3ed4a9b4269539b1583419 0.17272727191448212 +8ec183a3479d0541d4b13cff95940cee bd2031065307a5b5b38ea208e314d340 0.17903386056423187 +8ec183a3479d0541d4b13cff95940cee bf4312f7e11603ff2ae87587fcebbc9c 0.18442131578922272 +8ec183a3479d0541d4b13cff95940cee c13e1b0a3d3829bf266d9a2162207b28 0.20360226929187775 +8ec183a3479d0541d4b13cff95940cee c6fe12ce4cddb1b8423b63e6dfad808b 0.20990675687789917 +8ec183a3479d0541d4b13cff95940cee cb8d96ae1287284021e9038a79bf3131 0.22035038471221924 +8ec183a3479d0541d4b13cff95940cee ccda3b30480708f505105d95da0bfb62 0.1451359987258911 +8ec183a3479d0541d4b13cff95940cee d8e6b7b0368832247dbc5acab0fa4971 0.28359106183052063 +8ec183a3479d0541d4b13cff95940cee dfa3146f46afd34506e6a71e0ec8b111 0.15754717588424683 +8ec183a3479d0541d4b13cff95940cee e238a64ed05a08249266e0e5839548e5 0.20826144516468048 +8ec183a3479d0541d4b13cff95940cee e396578f1078dd14484f24e821e31f7b 0.16981981694698334 +8ec183a3479d0541d4b13cff95940cee e5f50fc1871b817d772009a19b1a639a 0.3057619631290436 +8ec183a3479d0541d4b13cff95940cee e645222fbec3f59af2ffb3b22123ac56 0.24072542786598206 +8ec183a3479d0541d4b13cff95940cee e956cc2ce89bd8b63426fbab21f2f2e6 0.18194444477558136 +8ec183a3479d0541d4b13cff95940cee ecbbb5fea0464f857d513de5c23423f1 0.1299065500497818 +8ec183a3479d0541d4b13cff95940cee f41879b82690dbbd64eba913bb60b084 0.1734422892332077 +8ec183a3479d0541d4b13cff95940cee f4b3941d7d57b2f17e1f22ec3077cc57 0.25922858715057373 +8ec183a3479d0541d4b13cff95940cee f64340086bf5617b5b73684e79e6851c 0.1536363661289215 +8ec183a3479d0541d4b13cff95940cee f67c4609c1e7a5fa403de7e22c501457 0.18201327323913574 +8ec183a3479d0541d4b13cff95940cee fd032fad609be92a9a9d2a36e2e03faa 0.1536363661289215 +8ec183a3479d0541d4b13cff95940cee fe888f4b12c0b05171796bd6d1b4f590 0.18442131578922272 +8f3fb318e9afc95f071ac38522976b1b 9374803bb59357889b692ca61dd87b48 0.18916666507720947 +8f3fb318e9afc95f071ac38522976b1b 946b5f1cf84bc4409e87cbd1ee0ef26a 0.1881818026304245 +8f3fb318e9afc95f071ac38522976b1b 955c2ad95941c2cab740e78216da597c 0.16126126050949097 +8f3fb318e9afc95f071ac38522976b1b 9620df9ac2a3839d04df86692d43528f 0.1760256290435791 +8f3fb318e9afc95f071ac38522976b1b a04dff74cc5e783025a349d32f5ce915 0.16126126050949097 +8f3fb318e9afc95f071ac38522976b1b a2c496dfec8a1bf1f2a450e699b829ad 0.13715596497058868 +8f3fb318e9afc95f071ac38522976b1b ad8a15dd4bde7a1d96e95da04e910853 0.19589240849018097 +8f3fb318e9afc95f071ac38522976b1b af2135763c26212ed95a8a891c7dfca3 0.16029834747314453 +8f3fb318e9afc95f071ac38522976b1b b4c9b3e8f6e5852ee29efa686ffcdca0 0.1299065500497818 +8f3fb318e9afc95f071ac38522976b1b b521d9b8e55a26909e3ac0292b42d8f3 0.17180734872817993 +8f3fb318e9afc95f071ac38522976b1b b8783f557b3ed4a9b4269539b1583419 0.17019230127334595 +8f3fb318e9afc95f071ac38522976b1b bd2031065307a5b5b38ea208e314d340 0.19589240849018097 +8f3fb318e9afc95f071ac38522976b1b bf4312f7e11603ff2ae87587fcebbc9c 0.1881818026304245 +8f3fb318e9afc95f071ac38522976b1b c13e1b0a3d3829bf266d9a2162207b28 0.18816205859184265 +8f3fb318e9afc95f071ac38522976b1b c6fe12ce4cddb1b8423b63e6dfad808b 0.2250182330608368 +8f3fb318e9afc95f071ac38522976b1b cb8d96ae1287284021e9038a79bf3131 0.19497668743133545 +8f3fb318e9afc95f071ac38522976b1b ccda3b30480708f505105d95da0bfb62 0.14553570747375488 +8f3fb318e9afc95f071ac38522976b1b d8e6b7b0368832247dbc5acab0fa4971 0.24438412487506866 +8f3fb318e9afc95f071ac38522976b1b dfa3146f46afd34506e6a71e0ec8b111 0.18194444477558136 +8f3fb318e9afc95f071ac38522976b1b e238a64ed05a08249266e0e5839548e5 0.24402858316898346 +8f3fb318e9afc95f071ac38522976b1b e396578f1078dd14484f24e821e31f7b 0.16981981694698334 +8f3fb318e9afc95f071ac38522976b1b e5f50fc1871b817d772009a19b1a639a 0.2973637580871582 +8f3fb318e9afc95f071ac38522976b1b e645222fbec3f59af2ffb3b22123ac56 0.24829234182834625 +8f3fb318e9afc95f071ac38522976b1b e956cc2ce89bd8b63426fbab21f2f2e6 0.13962264358997345 +8f3fb318e9afc95f071ac38522976b1b ecbbb5fea0464f857d513de5c23423f1 0.0 +8f3fb318e9afc95f071ac38522976b1b f41879b82690dbbd64eba913bb60b084 0.1670183390378952 +8f3fb318e9afc95f071ac38522976b1b f4b3941d7d57b2f17e1f22ec3077cc57 0.24848750233650208 +8f3fb318e9afc95f071ac38522976b1b f64340086bf5617b5b73684e79e6851c 0.16126126050949097 +8f3fb318e9afc95f071ac38522976b1b f67c4609c1e7a5fa403de7e22c501457 0.18916666507720947 +8f3fb318e9afc95f071ac38522976b1b fd032fad609be92a9a9d2a36e2e03faa 0.16126126050949097 +8f3fb318e9afc95f071ac38522976b1b fe888f4b12c0b05171796bd6d1b4f590 0.1881818026304245 +9374803bb59357889b692ca61dd87b48 946b5f1cf84bc4409e87cbd1ee0ef26a 0.14222222566604614 +9374803bb59357889b692ca61dd87b48 955c2ad95941c2cab740e78216da597c 0.16185897588729858 +9374803bb59357889b692ca61dd87b48 9620df9ac2a3839d04df86692d43528f 0.1874927580356598 +9374803bb59357889b692ca61dd87b48 a04dff74cc5e783025a349d32f5ce915 0.16185897588729858 +9374803bb59357889b692ca61dd87b48 a2c496dfec8a1bf1f2a450e699b829ad 0.2031034380197525 +9374803bb59357889b692ca61dd87b48 ad8a15dd4bde7a1d96e95da04e910853 0.1969093382358551 +9374803bb59357889b692ca61dd87b48 af2135763c26212ed95a8a891c7dfca3 0.19910088181495667 +9374803bb59357889b692ca61dd87b48 b4c9b3e8f6e5852ee29efa686ffcdca0 0.18201327323913574 +9374803bb59357889b692ca61dd87b48 b521d9b8e55a26909e3ac0292b42d8f3 0.18201327323913574 +9374803bb59357889b692ca61dd87b48 b8783f557b3ed4a9b4269539b1583419 0.19565606117248535 +9374803bb59357889b692ca61dd87b48 bd2031065307a5b5b38ea208e314d340 0.1969093382358551 +9374803bb59357889b692ca61dd87b48 bf4312f7e11603ff2ae87587fcebbc9c 0.14222222566604614 +9374803bb59357889b692ca61dd87b48 c13e1b0a3d3829bf266d9a2162207b28 0.20324721932411194 +9374803bb59357889b692ca61dd87b48 c6fe12ce4cddb1b8423b63e6dfad808b 0.2255975753068924 +9374803bb59357889b692ca61dd87b48 cb8d96ae1287284021e9038a79bf3131 0.17445436120033264 +9374803bb59357889b692ca61dd87b48 ccda3b30480708f505105d95da0bfb62 0.16565217077732086 +9374803bb59357889b692ca61dd87b48 d8e6b7b0368832247dbc5acab0fa4971 0.26047396659851074 +9374803bb59357889b692ca61dd87b48 dfa3146f46afd34506e6a71e0ec8b111 0.21966002881526947 +9374803bb59357889b692ca61dd87b48 e238a64ed05a08249266e0e5839548e5 0.2098742127418518 +9374803bb59357889b692ca61dd87b48 e396578f1078dd14484f24e821e31f7b 0.19532309472560883 +9374803bb59357889b692ca61dd87b48 e5f50fc1871b817d772009a19b1a639a 0.3102998435497284 +9374803bb59357889b692ca61dd87b48 e645222fbec3f59af2ffb3b22123ac56 0.23363351821899414 +9374803bb59357889b692ca61dd87b48 e956cc2ce89bd8b63426fbab21f2f2e6 0.1863911896944046 +9374803bb59357889b692ca61dd87b48 ecbbb5fea0464f857d513de5c23423f1 0.18916666507720947 +9374803bb59357889b692ca61dd87b48 f41879b82690dbbd64eba913bb60b084 0.16260741651058197 +9374803bb59357889b692ca61dd87b48 f4b3941d7d57b2f17e1f22ec3077cc57 0.21894480288028717 +9374803bb59357889b692ca61dd87b48 f64340086bf5617b5b73684e79e6851c 0.16185897588729858 +9374803bb59357889b692ca61dd87b48 f67c4609c1e7a5fa403de7e22c501457 0.0 +9374803bb59357889b692ca61dd87b48 fd032fad609be92a9a9d2a36e2e03faa 0.16185897588729858 +9374803bb59357889b692ca61dd87b48 fe888f4b12c0b05171796bd6d1b4f590 0.14222222566604614 +946b5f1cf84bc4409e87cbd1ee0ef26a 955c2ad95941c2cab740e78216da597c 0.17456166446208954 +946b5f1cf84bc4409e87cbd1ee0ef26a 9620df9ac2a3839d04df86692d43528f 0.171255961060524 +946b5f1cf84bc4409e87cbd1ee0ef26a a04dff74cc5e783025a349d32f5ce915 0.17456166446208954 +946b5f1cf84bc4409e87cbd1ee0ef26a a2c496dfec8a1bf1f2a450e699b829ad 0.17456293106079102 +946b5f1cf84bc4409e87cbd1ee0ef26a ad8a15dd4bde7a1d96e95da04e910853 0.1623992621898651 +946b5f1cf84bc4409e87cbd1ee0ef26a af2135763c26212ed95a8a891c7dfca3 0.159960076212883 +946b5f1cf84bc4409e87cbd1ee0ef26a b4c9b3e8f6e5852ee29efa686ffcdca0 0.18442131578922272 +946b5f1cf84bc4409e87cbd1ee0ef26a b521d9b8e55a26909e3ac0292b42d8f3 0.13445210456848145 +946b5f1cf84bc4409e87cbd1ee0ef26a b8783f557b3ed4a9b4269539b1583419 0.22772933542728424 +946b5f1cf84bc4409e87cbd1ee0ef26a bd2031065307a5b5b38ea208e314d340 0.1623992621898651 +946b5f1cf84bc4409e87cbd1ee0ef26a bf4312f7e11603ff2ae87587fcebbc9c 0.0 +946b5f1cf84bc4409e87cbd1ee0ef26a c13e1b0a3d3829bf266d9a2162207b28 0.172338604927063 +946b5f1cf84bc4409e87cbd1ee0ef26a c6fe12ce4cddb1b8423b63e6dfad808b 0.2362179458141327 +946b5f1cf84bc4409e87cbd1ee0ef26a cb8d96ae1287284021e9038a79bf3131 0.19074073433876038 +946b5f1cf84bc4409e87cbd1ee0ef26a ccda3b30480708f505105d95da0bfb62 0.17854800820350647 +946b5f1cf84bc4409e87cbd1ee0ef26a d8e6b7b0368832247dbc5acab0fa4971 0.264342725276947 +946b5f1cf84bc4409e87cbd1ee0ef26a dfa3146f46afd34506e6a71e0ec8b111 0.1791025549173355 +946b5f1cf84bc4409e87cbd1ee0ef26a e238a64ed05a08249266e0e5839548e5 0.23408806324005127 +946b5f1cf84bc4409e87cbd1ee0ef26a e396578f1078dd14484f24e821e31f7b 0.15693365037441254 +946b5f1cf84bc4409e87cbd1ee0ef26a e5f50fc1871b817d772009a19b1a639a 0.3002731502056122 +946b5f1cf84bc4409e87cbd1ee0ef26a e645222fbec3f59af2ffb3b22123ac56 0.2426535040140152 +946b5f1cf84bc4409e87cbd1ee0ef26a e956cc2ce89bd8b63426fbab21f2f2e6 0.12236744165420532 +946b5f1cf84bc4409e87cbd1ee0ef26a ecbbb5fea0464f857d513de5c23423f1 0.1881818026304245 +946b5f1cf84bc4409e87cbd1ee0ef26a f41879b82690dbbd64eba913bb60b084 0.13962264358997345 +946b5f1cf84bc4409e87cbd1ee0ef26a f4b3941d7d57b2f17e1f22ec3077cc57 0.26727497577667236 +946b5f1cf84bc4409e87cbd1ee0ef26a f64340086bf5617b5b73684e79e6851c 0.17456166446208954 +946b5f1cf84bc4409e87cbd1ee0ef26a f67c4609c1e7a5fa403de7e22c501457 0.14222222566604614 +946b5f1cf84bc4409e87cbd1ee0ef26a fd032fad609be92a9a9d2a36e2e03faa 0.17456166446208954 +946b5f1cf84bc4409e87cbd1ee0ef26a fe888f4b12c0b05171796bd6d1b4f590 0.0 +955c2ad95941c2cab740e78216da597c 9620df9ac2a3839d04df86692d43528f 0.1368589699268341 +955c2ad95941c2cab740e78216da597c a04dff74cc5e783025a349d32f5ce915 0.0 +955c2ad95941c2cab740e78216da597c a2c496dfec8a1bf1f2a450e699b829ad 0.14414414763450623 +955c2ad95941c2cab740e78216da597c ad8a15dd4bde7a1d96e95da04e910853 0.19527027010917664 +955c2ad95941c2cab740e78216da597c af2135763c26212ed95a8a891c7dfca3 0.19192370772361755 +955c2ad95941c2cab740e78216da597c b4c9b3e8f6e5852ee29efa686ffcdca0 0.1536363661289215 +955c2ad95941c2cab740e78216da597c b521d9b8e55a26909e3ac0292b42d8f3 0.1855701059103012 +955c2ad95941c2cab740e78216da597c b8783f557b3ed4a9b4269539b1583419 0.18803419172763824 +955c2ad95941c2cab740e78216da597c bd2031065307a5b5b38ea208e314d340 0.19527027010917664 +955c2ad95941c2cab740e78216da597c bf4312f7e11603ff2ae87587fcebbc9c 0.17456166446208954 +955c2ad95941c2cab740e78216da597c c13e1b0a3d3829bf266d9a2162207b28 0.16565217077732086 +955c2ad95941c2cab740e78216da597c c6fe12ce4cddb1b8423b63e6dfad808b 0.15817221999168396 +955c2ad95941c2cab740e78216da597c cb8d96ae1287284021e9038a79bf3131 0.25820624828338623 +955c2ad95941c2cab740e78216da597c ccda3b30480708f505105d95da0bfb62 0.15352563560009003 +955c2ad95941c2cab740e78216da597c d8e6b7b0368832247dbc5acab0fa4971 0.25854116678237915 +955c2ad95941c2cab740e78216da597c dfa3146f46afd34506e6a71e0ec8b111 0.1774621158838272 +955c2ad95941c2cab740e78216da597c e238a64ed05a08249266e0e5839548e5 0.20490463078022003 +955c2ad95941c2cab740e78216da597c e396578f1078dd14484f24e821e31f7b 0.18020832538604736 +955c2ad95941c2cab740e78216da597c e5f50fc1871b817d772009a19b1a639a 0.31838491559028625 +955c2ad95941c2cab740e78216da597c e645222fbec3f59af2ffb3b22123ac56 0.20510171353816986 +955c2ad95941c2cab740e78216da597c e956cc2ce89bd8b63426fbab21f2f2e6 0.16863636672496796 +955c2ad95941c2cab740e78216da597c ecbbb5fea0464f857d513de5c23423f1 0.16126126050949097 +955c2ad95941c2cab740e78216da597c f41879b82690dbbd64eba913bb60b084 0.1794992983341217 +955c2ad95941c2cab740e78216da597c f4b3941d7d57b2f17e1f22ec3077cc57 0.23240000009536743 +955c2ad95941c2cab740e78216da597c f64340086bf5617b5b73684e79e6851c 0.0 +955c2ad95941c2cab740e78216da597c f67c4609c1e7a5fa403de7e22c501457 0.16185897588729858 +955c2ad95941c2cab740e78216da597c fd032fad609be92a9a9d2a36e2e03faa 0.0 +955c2ad95941c2cab740e78216da597c fe888f4b12c0b05171796bd6d1b4f590 0.17456166446208954 +9620df9ac2a3839d04df86692d43528f a04dff74cc5e783025a349d32f5ce915 0.1368589699268341 +9620df9ac2a3839d04df86692d43528f a2c496dfec8a1bf1f2a450e699b829ad 0.17740802466869354 +9620df9ac2a3839d04df86692d43528f ad8a15dd4bde7a1d96e95da04e910853 0.22384823858737946 +9620df9ac2a3839d04df86692d43528f af2135763c26212ed95a8a891c7dfca3 0.2234782576560974 +9620df9ac2a3839d04df86692d43528f b4c9b3e8f6e5852ee29efa686ffcdca0 0.20010730624198914 +9620df9ac2a3839d04df86692d43528f b521d9b8e55a26909e3ac0292b42d8f3 0.18689115345478058 +9620df9ac2a3839d04df86692d43528f b8783f557b3ed4a9b4269539b1583419 0.20382997393608093 +9620df9ac2a3839d04df86692d43528f bd2031065307a5b5b38ea208e314d340 0.22384823858737946 +9620df9ac2a3839d04df86692d43528f bf4312f7e11603ff2ae87587fcebbc9c 0.171255961060524 +9620df9ac2a3839d04df86692d43528f c13e1b0a3d3829bf266d9a2162207b28 0.16711045801639557 +9620df9ac2a3839d04df86692d43528f c6fe12ce4cddb1b8423b63e6dfad808b 0.1876150518655777 +9620df9ac2a3839d04df86692d43528f cb8d96ae1287284021e9038a79bf3131 0.264348566532135 +9620df9ac2a3839d04df86692d43528f ccda3b30480708f505105d95da0bfb62 0.17909468710422516 +9620df9ac2a3839d04df86692d43528f d8e6b7b0368832247dbc5acab0fa4971 0.30210620164871216 +9620df9ac2a3839d04df86692d43528f dfa3146f46afd34506e6a71e0ec8b111 0.2387290894985199 +9620df9ac2a3839d04df86692d43528f e238a64ed05a08249266e0e5839548e5 0.22970253229141235 +9620df9ac2a3839d04df86692d43528f e396578f1078dd14484f24e821e31f7b 0.2144230753183365 +9620df9ac2a3839d04df86692d43528f e5f50fc1871b817d772009a19b1a639a 0.33137229084968567 +9620df9ac2a3839d04df86692d43528f e645222fbec3f59af2ffb3b22123ac56 0.22412633895874023 +9620df9ac2a3839d04df86692d43528f e956cc2ce89bd8b63426fbab21f2f2e6 0.18807010352611542 +9620df9ac2a3839d04df86692d43528f ecbbb5fea0464f857d513de5c23423f1 0.1760256290435791 +9620df9ac2a3839d04df86692d43528f f41879b82690dbbd64eba913bb60b084 0.18321986496448517 +9620df9ac2a3839d04df86692d43528f f4b3941d7d57b2f17e1f22ec3077cc57 0.23880207538604736 +9620df9ac2a3839d04df86692d43528f f64340086bf5617b5b73684e79e6851c 0.1368589699268341 +9620df9ac2a3839d04df86692d43528f f67c4609c1e7a5fa403de7e22c501457 0.1874927580356598 +9620df9ac2a3839d04df86692d43528f fd032fad609be92a9a9d2a36e2e03faa 0.1368589699268341 +9620df9ac2a3839d04df86692d43528f fe888f4b12c0b05171796bd6d1b4f590 0.171255961060524 +a04dff74cc5e783025a349d32f5ce915 a2c496dfec8a1bf1f2a450e699b829ad 0.14414414763450623 +a04dff74cc5e783025a349d32f5ce915 ad8a15dd4bde7a1d96e95da04e910853 0.19527027010917664 +a04dff74cc5e783025a349d32f5ce915 af2135763c26212ed95a8a891c7dfca3 0.19192370772361755 +a04dff74cc5e783025a349d32f5ce915 b4c9b3e8f6e5852ee29efa686ffcdca0 0.1536363661289215 +a04dff74cc5e783025a349d32f5ce915 b521d9b8e55a26909e3ac0292b42d8f3 0.1855701059103012 +a04dff74cc5e783025a349d32f5ce915 b8783f557b3ed4a9b4269539b1583419 0.18803419172763824 +a04dff74cc5e783025a349d32f5ce915 bd2031065307a5b5b38ea208e314d340 0.19527027010917664 +a04dff74cc5e783025a349d32f5ce915 bf4312f7e11603ff2ae87587fcebbc9c 0.17456166446208954 +a04dff74cc5e783025a349d32f5ce915 c13e1b0a3d3829bf266d9a2162207b28 0.16565217077732086 +a04dff74cc5e783025a349d32f5ce915 c6fe12ce4cddb1b8423b63e6dfad808b 0.15817221999168396 +a04dff74cc5e783025a349d32f5ce915 cb8d96ae1287284021e9038a79bf3131 0.25820624828338623 +a04dff74cc5e783025a349d32f5ce915 ccda3b30480708f505105d95da0bfb62 0.15352563560009003 +a04dff74cc5e783025a349d32f5ce915 d8e6b7b0368832247dbc5acab0fa4971 0.25854116678237915 +a04dff74cc5e783025a349d32f5ce915 dfa3146f46afd34506e6a71e0ec8b111 0.1774621158838272 +a04dff74cc5e783025a349d32f5ce915 e238a64ed05a08249266e0e5839548e5 0.20490463078022003 +a04dff74cc5e783025a349d32f5ce915 e396578f1078dd14484f24e821e31f7b 0.18020832538604736 +a04dff74cc5e783025a349d32f5ce915 e5f50fc1871b817d772009a19b1a639a 0.31838491559028625 +a04dff74cc5e783025a349d32f5ce915 e645222fbec3f59af2ffb3b22123ac56 0.20510171353816986 +a04dff74cc5e783025a349d32f5ce915 e956cc2ce89bd8b63426fbab21f2f2e6 0.16863636672496796 +a04dff74cc5e783025a349d32f5ce915 ecbbb5fea0464f857d513de5c23423f1 0.16126126050949097 +a04dff74cc5e783025a349d32f5ce915 f41879b82690dbbd64eba913bb60b084 0.1794992983341217 +a04dff74cc5e783025a349d32f5ce915 f4b3941d7d57b2f17e1f22ec3077cc57 0.23240000009536743 +a04dff74cc5e783025a349d32f5ce915 f64340086bf5617b5b73684e79e6851c 0.0 +a04dff74cc5e783025a349d32f5ce915 f67c4609c1e7a5fa403de7e22c501457 0.16185897588729858 +a04dff74cc5e783025a349d32f5ce915 fd032fad609be92a9a9d2a36e2e03faa 0.0 +a04dff74cc5e783025a349d32f5ce915 fe888f4b12c0b05171796bd6d1b4f590 0.17456166446208954 +a2c496dfec8a1bf1f2a450e699b829ad ad8a15dd4bde7a1d96e95da04e910853 0.18717680871486664 +a2c496dfec8a1bf1f2a450e699b829ad af2135763c26212ed95a8a891c7dfca3 0.1425413340330124 +a2c496dfec8a1bf1f2a450e699b829ad b4c9b3e8f6e5852ee29efa686ffcdca0 0.11966212093830109 +a2c496dfec8a1bf1f2a450e699b829ad b521d9b8e55a26909e3ac0292b42d8f3 0.1872519850730896 +a2c496dfec8a1bf1f2a450e699b829ad b8783f557b3ed4a9b4269539b1583419 0.1499149054288864 +a2c496dfec8a1bf1f2a450e699b829ad bd2031065307a5b5b38ea208e314d340 0.18717680871486664 +a2c496dfec8a1bf1f2a450e699b829ad bf4312f7e11603ff2ae87587fcebbc9c 0.17456293106079102 +a2c496dfec8a1bf1f2a450e699b829ad c13e1b0a3d3829bf266d9a2162207b28 0.17113526165485382 +a2c496dfec8a1bf1f2a450e699b829ad c6fe12ce4cddb1b8423b63e6dfad808b 0.22252507507801056 +a2c496dfec8a1bf1f2a450e699b829ad cb8d96ae1287284021e9038a79bf3131 0.24078524112701416 +a2c496dfec8a1bf1f2a450e699b829ad ccda3b30480708f505105d95da0bfb62 0.14374209940433502 +a2c496dfec8a1bf1f2a450e699b829ad d8e6b7b0368832247dbc5acab0fa4971 0.28272920846939087 +a2c496dfec8a1bf1f2a450e699b829ad dfa3146f46afd34506e6a71e0ec8b111 0.14766354858875275 +a2c496dfec8a1bf1f2a450e699b829ad e238a64ed05a08249266e0e5839548e5 0.19206532835960388 +a2c496dfec8a1bf1f2a450e699b829ad e396578f1078dd14484f24e821e31f7b 0.13636364042758942 +a2c496dfec8a1bf1f2a450e699b829ad e5f50fc1871b817d772009a19b1a639a 0.3043268918991089 +a2c496dfec8a1bf1f2a450e699b829ad e645222fbec3f59af2ffb3b22123ac56 0.21772727370262146 +a2c496dfec8a1bf1f2a450e699b829ad e956cc2ce89bd8b63426fbab21f2f2e6 0.15555556118488312 +a2c496dfec8a1bf1f2a450e699b829ad ecbbb5fea0464f857d513de5c23423f1 0.13715596497058868 +a2c496dfec8a1bf1f2a450e699b829ad f41879b82690dbbd64eba913bb60b084 0.19167879223823547 +a2c496dfec8a1bf1f2a450e699b829ad f4b3941d7d57b2f17e1f22ec3077cc57 0.25716373324394226 +a2c496dfec8a1bf1f2a450e699b829ad f64340086bf5617b5b73684e79e6851c 0.14414414763450623 +a2c496dfec8a1bf1f2a450e699b829ad f67c4609c1e7a5fa403de7e22c501457 0.2031034380197525 +a2c496dfec8a1bf1f2a450e699b829ad fd032fad609be92a9a9d2a36e2e03faa 0.14414414763450623 +a2c496dfec8a1bf1f2a450e699b829ad fe888f4b12c0b05171796bd6d1b4f590 0.17456293106079102 +ad8a15dd4bde7a1d96e95da04e910853 af2135763c26212ed95a8a891c7dfca3 0.17569200694561005 +ad8a15dd4bde7a1d96e95da04e910853 b4c9b3e8f6e5852ee29efa686ffcdca0 0.17903386056423187 +ad8a15dd4bde7a1d96e95da04e910853 b521d9b8e55a26909e3ac0292b42d8f3 0.18796296417713165 +ad8a15dd4bde7a1d96e95da04e910853 b8783f557b3ed4a9b4269539b1583419 0.22734321653842926 +ad8a15dd4bde7a1d96e95da04e910853 bd2031065307a5b5b38ea208e314d340 0.0 +ad8a15dd4bde7a1d96e95da04e910853 bf4312f7e11603ff2ae87587fcebbc9c 0.1623992621898651 +ad8a15dd4bde7a1d96e95da04e910853 c13e1b0a3d3829bf266d9a2162207b28 0.20825892686843872 +ad8a15dd4bde7a1d96e95da04e910853 c6fe12ce4cddb1b8423b63e6dfad808b 0.24705126881599426 +ad8a15dd4bde7a1d96e95da04e910853 cb8d96ae1287284021e9038a79bf3131 0.18005257844924927 +ad8a15dd4bde7a1d96e95da04e910853 ccda3b30480708f505105d95da0bfb62 0.17212837934494019 +ad8a15dd4bde7a1d96e95da04e910853 d8e6b7b0368832247dbc5acab0fa4971 0.2531878352165222 +ad8a15dd4bde7a1d96e95da04e910853 dfa3146f46afd34506e6a71e0ec8b111 0.16875000298023224 +ad8a15dd4bde7a1d96e95da04e910853 e238a64ed05a08249266e0e5839548e5 0.25882190465927124 +ad8a15dd4bde7a1d96e95da04e910853 e396578f1078dd14484f24e821e31f7b 0.20047202706336975 +ad8a15dd4bde7a1d96e95da04e910853 e5f50fc1871b817d772009a19b1a639a 0.2950034439563751 +ad8a15dd4bde7a1d96e95da04e910853 e645222fbec3f59af2ffb3b22123ac56 0.25006303191185 +ad8a15dd4bde7a1d96e95da04e910853 e956cc2ce89bd8b63426fbab21f2f2e6 0.180494487285614 +ad8a15dd4bde7a1d96e95da04e910853 ecbbb5fea0464f857d513de5c23423f1 0.19589240849018097 +ad8a15dd4bde7a1d96e95da04e910853 f41879b82690dbbd64eba913bb60b084 0.17504872381687164 +ad8a15dd4bde7a1d96e95da04e910853 f4b3941d7d57b2f17e1f22ec3077cc57 0.2746303677558899 +ad8a15dd4bde7a1d96e95da04e910853 f64340086bf5617b5b73684e79e6851c 0.19527027010917664 +ad8a15dd4bde7a1d96e95da04e910853 f67c4609c1e7a5fa403de7e22c501457 0.1969093382358551 +ad8a15dd4bde7a1d96e95da04e910853 fd032fad609be92a9a9d2a36e2e03faa 0.19527027010917664 +ad8a15dd4bde7a1d96e95da04e910853 fe888f4b12c0b05171796bd6d1b4f590 0.1623992621898651 +af2135763c26212ed95a8a891c7dfca3 b4c9b3e8f6e5852ee29efa686ffcdca0 0.16029834747314453 +af2135763c26212ed95a8a891c7dfca3 b521d9b8e55a26909e3ac0292b42d8f3 0.1607804298400879 +af2135763c26212ed95a8a891c7dfca3 b8783f557b3ed4a9b4269539b1583419 0.1474532186985016 +af2135763c26212ed95a8a891c7dfca3 bd2031065307a5b5b38ea208e314d340 0.17569200694561005 +af2135763c26212ed95a8a891c7dfca3 bf4312f7e11603ff2ae87587fcebbc9c 0.159960076212883 +af2135763c26212ed95a8a891c7dfca3 c13e1b0a3d3829bf266d9a2162207b28 0.2031242847442627 +af2135763c26212ed95a8a891c7dfca3 c6fe12ce4cddb1b8423b63e6dfad808b 0.2545986473560333 +af2135763c26212ed95a8a891c7dfca3 cb8d96ae1287284021e9038a79bf3131 0.2057768553495407 +af2135763c26212ed95a8a891c7dfca3 ccda3b30480708f505105d95da0bfb62 0.18475742638111115 +af2135763c26212ed95a8a891c7dfca3 d8e6b7b0368832247dbc5acab0fa4971 0.26047447323799133 +af2135763c26212ed95a8a891c7dfca3 dfa3146f46afd34506e6a71e0ec8b111 0.11456310749053955 +af2135763c26212ed95a8a891c7dfca3 e238a64ed05a08249266e0e5839548e5 0.25839516520500183 +af2135763c26212ed95a8a891c7dfca3 e396578f1078dd14484f24e821e31f7b 0.12916666269302368 +af2135763c26212ed95a8a891c7dfca3 e5f50fc1871b817d772009a19b1a639a 0.3075830340385437 +af2135763c26212ed95a8a891c7dfca3 e645222fbec3f59af2ffb3b22123ac56 0.2539195120334625 +af2135763c26212ed95a8a891c7dfca3 e956cc2ce89bd8b63426fbab21f2f2e6 0.11456310749053955 +af2135763c26212ed95a8a891c7dfca3 ecbbb5fea0464f857d513de5c23423f1 0.16029834747314453 +af2135763c26212ed95a8a891c7dfca3 f41879b82690dbbd64eba913bb60b084 0.18339985609054565 +af2135763c26212ed95a8a891c7dfca3 f4b3941d7d57b2f17e1f22ec3077cc57 0.28446754813194275 +af2135763c26212ed95a8a891c7dfca3 f64340086bf5617b5b73684e79e6851c 0.19192370772361755 +af2135763c26212ed95a8a891c7dfca3 f67c4609c1e7a5fa403de7e22c501457 0.19910088181495667 +af2135763c26212ed95a8a891c7dfca3 fd032fad609be92a9a9d2a36e2e03faa 0.19192370772361755 +af2135763c26212ed95a8a891c7dfca3 fe888f4b12c0b05171796bd6d1b4f590 0.159960076212883 +b4c9b3e8f6e5852ee29efa686ffcdca0 b521d9b8e55a26909e3ac0292b42d8f3 0.21408730745315552 +b4c9b3e8f6e5852ee29efa686ffcdca0 b8783f557b3ed4a9b4269539b1583419 0.17272727191448212 +b4c9b3e8f6e5852ee29efa686ffcdca0 bd2031065307a5b5b38ea208e314d340 0.17903386056423187 +b4c9b3e8f6e5852ee29efa686ffcdca0 bf4312f7e11603ff2ae87587fcebbc9c 0.18442131578922272 +b4c9b3e8f6e5852ee29efa686ffcdca0 c13e1b0a3d3829bf266d9a2162207b28 0.20360226929187775 +b4c9b3e8f6e5852ee29efa686ffcdca0 c6fe12ce4cddb1b8423b63e6dfad808b 0.20990675687789917 +b4c9b3e8f6e5852ee29efa686ffcdca0 cb8d96ae1287284021e9038a79bf3131 0.22035038471221924 +b4c9b3e8f6e5852ee29efa686ffcdca0 ccda3b30480708f505105d95da0bfb62 0.1451359987258911 +b4c9b3e8f6e5852ee29efa686ffcdca0 d8e6b7b0368832247dbc5acab0fa4971 0.28359106183052063 +b4c9b3e8f6e5852ee29efa686ffcdca0 dfa3146f46afd34506e6a71e0ec8b111 0.15754717588424683 +b4c9b3e8f6e5852ee29efa686ffcdca0 e238a64ed05a08249266e0e5839548e5 0.20826144516468048 +b4c9b3e8f6e5852ee29efa686ffcdca0 e396578f1078dd14484f24e821e31f7b 0.16981981694698334 +b4c9b3e8f6e5852ee29efa686ffcdca0 e5f50fc1871b817d772009a19b1a639a 0.3057619631290436 +b4c9b3e8f6e5852ee29efa686ffcdca0 e645222fbec3f59af2ffb3b22123ac56 0.24072542786598206 +b4c9b3e8f6e5852ee29efa686ffcdca0 e956cc2ce89bd8b63426fbab21f2f2e6 0.18194444477558136 +b4c9b3e8f6e5852ee29efa686ffcdca0 ecbbb5fea0464f857d513de5c23423f1 0.1299065500497818 +b4c9b3e8f6e5852ee29efa686ffcdca0 f41879b82690dbbd64eba913bb60b084 0.1734422892332077 +b4c9b3e8f6e5852ee29efa686ffcdca0 f4b3941d7d57b2f17e1f22ec3077cc57 0.25922858715057373 +b4c9b3e8f6e5852ee29efa686ffcdca0 f64340086bf5617b5b73684e79e6851c 0.1536363661289215 +b4c9b3e8f6e5852ee29efa686ffcdca0 f67c4609c1e7a5fa403de7e22c501457 0.18201327323913574 +b4c9b3e8f6e5852ee29efa686ffcdca0 fd032fad609be92a9a9d2a36e2e03faa 0.1536363661289215 +b4c9b3e8f6e5852ee29efa686ffcdca0 fe888f4b12c0b05171796bd6d1b4f590 0.18442131578922272 +b521d9b8e55a26909e3ac0292b42d8f3 b8783f557b3ed4a9b4269539b1583419 0.20741499960422516 +b521d9b8e55a26909e3ac0292b42d8f3 bd2031065307a5b5b38ea208e314d340 0.18796296417713165 +b521d9b8e55a26909e3ac0292b42d8f3 bf4312f7e11603ff2ae87587fcebbc9c 0.13445210456848145 +b521d9b8e55a26909e3ac0292b42d8f3 c13e1b0a3d3829bf266d9a2162207b28 0.15259653329849243 +b521d9b8e55a26909e3ac0292b42d8f3 c6fe12ce4cddb1b8423b63e6dfad808b 0.26070019602775574 +b521d9b8e55a26909e3ac0292b42d8f3 cb8d96ae1287284021e9038a79bf3131 0.2054545283317566 +b521d9b8e55a26909e3ac0292b42d8f3 ccda3b30480708f505105d95da0bfb62 0.1626991182565689 +b521d9b8e55a26909e3ac0292b42d8f3 d8e6b7b0368832247dbc5acab0fa4971 0.23704902827739716 +b521d9b8e55a26909e3ac0292b42d8f3 dfa3146f46afd34506e6a71e0ec8b111 0.18696226179599762 +b521d9b8e55a26909e3ac0292b42d8f3 e238a64ed05a08249266e0e5839548e5 0.23677034676074982 +b521d9b8e55a26909e3ac0292b42d8f3 e396578f1078dd14484f24e821e31f7b 0.1971607655286789 +b521d9b8e55a26909e3ac0292b42d8f3 e5f50fc1871b817d772009a19b1a639a 0.30490967631340027 +b521d9b8e55a26909e3ac0292b42d8f3 e645222fbec3f59af2ffb3b22123ac56 0.2276715636253357 +b521d9b8e55a26909e3ac0292b42d8f3 e956cc2ce89bd8b63426fbab21f2f2e6 0.09980769455432892 +b521d9b8e55a26909e3ac0292b42d8f3 ecbbb5fea0464f857d513de5c23423f1 0.17180734872817993 +b521d9b8e55a26909e3ac0292b42d8f3 f41879b82690dbbd64eba913bb60b084 0.1502920538187027 +b521d9b8e55a26909e3ac0292b42d8f3 f4b3941d7d57b2f17e1f22ec3077cc57 0.24544353783130646 +b521d9b8e55a26909e3ac0292b42d8f3 f64340086bf5617b5b73684e79e6851c 0.1855701059103012 +b521d9b8e55a26909e3ac0292b42d8f3 f67c4609c1e7a5fa403de7e22c501457 0.18201327323913574 +b521d9b8e55a26909e3ac0292b42d8f3 fd032fad609be92a9a9d2a36e2e03faa 0.1855701059103012 +b521d9b8e55a26909e3ac0292b42d8f3 fe888f4b12c0b05171796bd6d1b4f590 0.13445210456848145 +b8783f557b3ed4a9b4269539b1583419 bd2031065307a5b5b38ea208e314d340 0.22734321653842926 +b8783f557b3ed4a9b4269539b1583419 bf4312f7e11603ff2ae87587fcebbc9c 0.22772933542728424 +b8783f557b3ed4a9b4269539b1583419 c13e1b0a3d3829bf266d9a2162207b28 0.20376601815223694 +b8783f557b3ed4a9b4269539b1583419 c6fe12ce4cddb1b8423b63e6dfad808b 0.23269230127334595 +b8783f557b3ed4a9b4269539b1583419 cb8d96ae1287284021e9038a79bf3131 0.2236189991235733 +b8783f557b3ed4a9b4269539b1583419 ccda3b30480708f505105d95da0bfb62 0.18205438554286957 +b8783f557b3ed4a9b4269539b1583419 d8e6b7b0368832247dbc5acab0fa4971 0.28103145956993103 +b8783f557b3ed4a9b4269539b1583419 dfa3146f46afd34506e6a71e0ec8b111 0.18784339725971222 +b8783f557b3ed4a9b4269539b1583419 e238a64ed05a08249266e0e5839548e5 0.2036600410938263 +b8783f557b3ed4a9b4269539b1583419 e396578f1078dd14484f24e821e31f7b 0.19646881520748138 +b8783f557b3ed4a9b4269539b1583419 e5f50fc1871b817d772009a19b1a639a 0.31781941652297974 +b8783f557b3ed4a9b4269539b1583419 e645222fbec3f59af2ffb3b22123ac56 0.2387251853942871 +b8783f557b3ed4a9b4269539b1583419 e956cc2ce89bd8b63426fbab21f2f2e6 0.2003573775291443 +b8783f557b3ed4a9b4269539b1583419 ecbbb5fea0464f857d513de5c23423f1 0.17019230127334595 +b8783f557b3ed4a9b4269539b1583419 f41879b82690dbbd64eba913bb60b084 0.21023796498775482 +b8783f557b3ed4a9b4269539b1583419 f4b3941d7d57b2f17e1f22ec3077cc57 0.22046701610088348 +b8783f557b3ed4a9b4269539b1583419 f64340086bf5617b5b73684e79e6851c 0.18803419172763824 +b8783f557b3ed4a9b4269539b1583419 f67c4609c1e7a5fa403de7e22c501457 0.19565606117248535 +b8783f557b3ed4a9b4269539b1583419 fd032fad609be92a9a9d2a36e2e03faa 0.18803419172763824 +b8783f557b3ed4a9b4269539b1583419 fe888f4b12c0b05171796bd6d1b4f590 0.22772933542728424 +bd2031065307a5b5b38ea208e314d340 bf4312f7e11603ff2ae87587fcebbc9c 0.1623992621898651 +bd2031065307a5b5b38ea208e314d340 c13e1b0a3d3829bf266d9a2162207b28 0.20825892686843872 +bd2031065307a5b5b38ea208e314d340 c6fe12ce4cddb1b8423b63e6dfad808b 0.24705126881599426 +bd2031065307a5b5b38ea208e314d340 cb8d96ae1287284021e9038a79bf3131 0.18005257844924927 +bd2031065307a5b5b38ea208e314d340 ccda3b30480708f505105d95da0bfb62 0.17212837934494019 +bd2031065307a5b5b38ea208e314d340 d8e6b7b0368832247dbc5acab0fa4971 0.2531878352165222 +bd2031065307a5b5b38ea208e314d340 dfa3146f46afd34506e6a71e0ec8b111 0.16875000298023224 +bd2031065307a5b5b38ea208e314d340 e238a64ed05a08249266e0e5839548e5 0.25882190465927124 +bd2031065307a5b5b38ea208e314d340 e396578f1078dd14484f24e821e31f7b 0.20047202706336975 +bd2031065307a5b5b38ea208e314d340 e5f50fc1871b817d772009a19b1a639a 0.2950034439563751 +bd2031065307a5b5b38ea208e314d340 e645222fbec3f59af2ffb3b22123ac56 0.25006303191185 +bd2031065307a5b5b38ea208e314d340 e956cc2ce89bd8b63426fbab21f2f2e6 0.180494487285614 +bd2031065307a5b5b38ea208e314d340 ecbbb5fea0464f857d513de5c23423f1 0.19589240849018097 +bd2031065307a5b5b38ea208e314d340 f41879b82690dbbd64eba913bb60b084 0.17504872381687164 +bd2031065307a5b5b38ea208e314d340 f4b3941d7d57b2f17e1f22ec3077cc57 0.2746303677558899 +bd2031065307a5b5b38ea208e314d340 f64340086bf5617b5b73684e79e6851c 0.19527027010917664 +bd2031065307a5b5b38ea208e314d340 f67c4609c1e7a5fa403de7e22c501457 0.1969093382358551 +bd2031065307a5b5b38ea208e314d340 fd032fad609be92a9a9d2a36e2e03faa 0.19527027010917664 +bd2031065307a5b5b38ea208e314d340 fe888f4b12c0b05171796bd6d1b4f590 0.1623992621898651 +bf4312f7e11603ff2ae87587fcebbc9c c13e1b0a3d3829bf266d9a2162207b28 0.172338604927063 +bf4312f7e11603ff2ae87587fcebbc9c c6fe12ce4cddb1b8423b63e6dfad808b 0.2362179458141327 +bf4312f7e11603ff2ae87587fcebbc9c cb8d96ae1287284021e9038a79bf3131 0.19074073433876038 +bf4312f7e11603ff2ae87587fcebbc9c ccda3b30480708f505105d95da0bfb62 0.17854800820350647 +bf4312f7e11603ff2ae87587fcebbc9c d8e6b7b0368832247dbc5acab0fa4971 0.264342725276947 +bf4312f7e11603ff2ae87587fcebbc9c dfa3146f46afd34506e6a71e0ec8b111 0.1791025549173355 +bf4312f7e11603ff2ae87587fcebbc9c e238a64ed05a08249266e0e5839548e5 0.23408806324005127 +bf4312f7e11603ff2ae87587fcebbc9c e396578f1078dd14484f24e821e31f7b 0.15693365037441254 +bf4312f7e11603ff2ae87587fcebbc9c e5f50fc1871b817d772009a19b1a639a 0.3002731502056122 +bf4312f7e11603ff2ae87587fcebbc9c e645222fbec3f59af2ffb3b22123ac56 0.2426535040140152 +bf4312f7e11603ff2ae87587fcebbc9c e956cc2ce89bd8b63426fbab21f2f2e6 0.12236744165420532 +bf4312f7e11603ff2ae87587fcebbc9c ecbbb5fea0464f857d513de5c23423f1 0.1881818026304245 +bf4312f7e11603ff2ae87587fcebbc9c f41879b82690dbbd64eba913bb60b084 0.13962264358997345 +bf4312f7e11603ff2ae87587fcebbc9c f4b3941d7d57b2f17e1f22ec3077cc57 0.26727497577667236 +bf4312f7e11603ff2ae87587fcebbc9c f64340086bf5617b5b73684e79e6851c 0.17456166446208954 +bf4312f7e11603ff2ae87587fcebbc9c f67c4609c1e7a5fa403de7e22c501457 0.14222222566604614 +bf4312f7e11603ff2ae87587fcebbc9c fd032fad609be92a9a9d2a36e2e03faa 0.17456166446208954 +bf4312f7e11603ff2ae87587fcebbc9c fe888f4b12c0b05171796bd6d1b4f590 0.0 +c13e1b0a3d3829bf266d9a2162207b28 c6fe12ce4cddb1b8423b63e6dfad808b 0.22618980705738068 +c13e1b0a3d3829bf266d9a2162207b28 cb8d96ae1287284021e9038a79bf3131 0.2336372584104538 +c13e1b0a3d3829bf266d9a2162207b28 ccda3b30480708f505105d95da0bfb62 0.15576370060443878 +c13e1b0a3d3829bf266d9a2162207b28 d8e6b7b0368832247dbc5acab0fa4971 0.26001477241516113 +c13e1b0a3d3829bf266d9a2162207b28 dfa3146f46afd34506e6a71e0ec8b111 0.1996607631444931 +c13e1b0a3d3829bf266d9a2162207b28 e238a64ed05a08249266e0e5839548e5 0.20831280946731567 +c13e1b0a3d3829bf266d9a2162207b28 e396578f1078dd14484f24e821e31f7b 0.2251555621623993 +c13e1b0a3d3829bf266d9a2162207b28 e5f50fc1871b817d772009a19b1a639a 0.3215883672237396 +c13e1b0a3d3829bf266d9a2162207b28 e645222fbec3f59af2ffb3b22123ac56 0.16624999046325684 +c13e1b0a3d3829bf266d9a2162207b28 e956cc2ce89bd8b63426fbab21f2f2e6 0.15917792916297913 +c13e1b0a3d3829bf266d9a2162207b28 ecbbb5fea0464f857d513de5c23423f1 0.18816205859184265 +c13e1b0a3d3829bf266d9a2162207b28 f41879b82690dbbd64eba913bb60b084 0.1795157790184021 +c13e1b0a3d3829bf266d9a2162207b28 f4b3941d7d57b2f17e1f22ec3077cc57 0.2078142762184143 +c13e1b0a3d3829bf266d9a2162207b28 f64340086bf5617b5b73684e79e6851c 0.16565217077732086 +c13e1b0a3d3829bf266d9a2162207b28 f67c4609c1e7a5fa403de7e22c501457 0.20324721932411194 +c13e1b0a3d3829bf266d9a2162207b28 fd032fad609be92a9a9d2a36e2e03faa 0.16565217077732086 +c13e1b0a3d3829bf266d9a2162207b28 fe888f4b12c0b05171796bd6d1b4f590 0.172338604927063 +c6fe12ce4cddb1b8423b63e6dfad808b cb8d96ae1287284021e9038a79bf3131 0.28849440813064575 +c6fe12ce4cddb1b8423b63e6dfad808b ccda3b30480708f505105d95da0bfb62 0.22741453349590302 +c6fe12ce4cddb1b8423b63e6dfad808b d8e6b7b0368832247dbc5acab0fa4971 0.2938920855522156 +c6fe12ce4cddb1b8423b63e6dfad808b dfa3146f46afd34506e6a71e0ec8b111 0.24545730650424957 +c6fe12ce4cddb1b8423b63e6dfad808b e238a64ed05a08249266e0e5839548e5 0.2723083198070526 +c6fe12ce4cddb1b8423b63e6dfad808b e396578f1078dd14484f24e821e31f7b 0.22697323560714722 +c6fe12ce4cddb1b8423b63e6dfad808b e5f50fc1871b817d772009a19b1a639a 0.2911221981048584 +c6fe12ce4cddb1b8423b63e6dfad808b e645222fbec3f59af2ffb3b22123ac56 0.2680049240589142 +c6fe12ce4cddb1b8423b63e6dfad808b e956cc2ce89bd8b63426fbab21f2f2e6 0.2311096042394638 +c6fe12ce4cddb1b8423b63e6dfad808b ecbbb5fea0464f857d513de5c23423f1 0.2250182330608368 +c6fe12ce4cddb1b8423b63e6dfad808b f41879b82690dbbd64eba913bb60b084 0.24538461863994598 +c6fe12ce4cddb1b8423b63e6dfad808b f4b3941d7d57b2f17e1f22ec3077cc57 0.27783286571502686 +c6fe12ce4cddb1b8423b63e6dfad808b f64340086bf5617b5b73684e79e6851c 0.15817221999168396 +c6fe12ce4cddb1b8423b63e6dfad808b f67c4609c1e7a5fa403de7e22c501457 0.2255975753068924 +c6fe12ce4cddb1b8423b63e6dfad808b fd032fad609be92a9a9d2a36e2e03faa 0.15817221999168396 +c6fe12ce4cddb1b8423b63e6dfad808b fe888f4b12c0b05171796bd6d1b4f590 0.2362179458141327 +cb8d96ae1287284021e9038a79bf3131 ccda3b30480708f505105d95da0bfb62 0.20238427817821503 +cb8d96ae1287284021e9038a79bf3131 d8e6b7b0368832247dbc5acab0fa4971 0.25326263904571533 +cb8d96ae1287284021e9038a79bf3131 dfa3146f46afd34506e6a71e0ec8b111 0.2082015573978424 +cb8d96ae1287284021e9038a79bf3131 e238a64ed05a08249266e0e5839548e5 0.26354894042015076 +cb8d96ae1287284021e9038a79bf3131 e396578f1078dd14484f24e821e31f7b 0.22335204482078552 +cb8d96ae1287284021e9038a79bf3131 e5f50fc1871b817d772009a19b1a639a 0.29918932914733887 +cb8d96ae1287284021e9038a79bf3131 e645222fbec3f59af2ffb3b22123ac56 0.28122496604919434 +cb8d96ae1287284021e9038a79bf3131 e956cc2ce89bd8b63426fbab21f2f2e6 0.2079237848520279 +cb8d96ae1287284021e9038a79bf3131 ecbbb5fea0464f857d513de5c23423f1 0.19497668743133545 +cb8d96ae1287284021e9038a79bf3131 f41879b82690dbbd64eba913bb60b084 0.17656728625297546 +cb8d96ae1287284021e9038a79bf3131 f4b3941d7d57b2f17e1f22ec3077cc57 0.2335408627986908 +cb8d96ae1287284021e9038a79bf3131 f64340086bf5617b5b73684e79e6851c 0.25820624828338623 +cb8d96ae1287284021e9038a79bf3131 f67c4609c1e7a5fa403de7e22c501457 0.17445436120033264 +cb8d96ae1287284021e9038a79bf3131 fd032fad609be92a9a9d2a36e2e03faa 0.25820624828338623 +cb8d96ae1287284021e9038a79bf3131 fe888f4b12c0b05171796bd6d1b4f590 0.19074073433876038 +ccda3b30480708f505105d95da0bfb62 d8e6b7b0368832247dbc5acab0fa4971 0.24783526360988617 +ccda3b30480708f505105d95da0bfb62 dfa3146f46afd34506e6a71e0ec8b111 0.1726091504096985 +ccda3b30480708f505105d95da0bfb62 e238a64ed05a08249266e0e5839548e5 0.17146910727024078 +ccda3b30480708f505105d95da0bfb62 e396578f1078dd14484f24e821e31f7b 0.20489317178726196 +ccda3b30480708f505105d95da0bfb62 e5f50fc1871b817d772009a19b1a639a 0.29922768473625183 +ccda3b30480708f505105d95da0bfb62 e645222fbec3f59af2ffb3b22123ac56 0.20381462574005127 +ccda3b30480708f505105d95da0bfb62 e956cc2ce89bd8b63426fbab21f2f2e6 0.17994506657123566 +ccda3b30480708f505105d95da0bfb62 ecbbb5fea0464f857d513de5c23423f1 0.14553570747375488 +ccda3b30480708f505105d95da0bfb62 f41879b82690dbbd64eba913bb60b084 0.17380328476428986 +ccda3b30480708f505105d95da0bfb62 f4b3941d7d57b2f17e1f22ec3077cc57 0.23095238208770752 +ccda3b30480708f505105d95da0bfb62 f64340086bf5617b5b73684e79e6851c 0.15352563560009003 +ccda3b30480708f505105d95da0bfb62 f67c4609c1e7a5fa403de7e22c501457 0.16565217077732086 +ccda3b30480708f505105d95da0bfb62 fd032fad609be92a9a9d2a36e2e03faa 0.15352563560009003 +ccda3b30480708f505105d95da0bfb62 fe888f4b12c0b05171796bd6d1b4f590 0.17854800820350647 +d8e6b7b0368832247dbc5acab0fa4971 dfa3146f46afd34506e6a71e0ec8b111 0.23660625517368317 +d8e6b7b0368832247dbc5acab0fa4971 e238a64ed05a08249266e0e5839548e5 0.33516010642051697 +d8e6b7b0368832247dbc5acab0fa4971 e396578f1078dd14484f24e821e31f7b 0.30931147933006287 +d8e6b7b0368832247dbc5acab0fa4971 e5f50fc1871b817d772009a19b1a639a 0.2740418314933777 +d8e6b7b0368832247dbc5acab0fa4971 e645222fbec3f59af2ffb3b22123ac56 0.28865283727645874 +d8e6b7b0368832247dbc5acab0fa4971 e956cc2ce89bd8b63426fbab21f2f2e6 0.22393366694450378 +d8e6b7b0368832247dbc5acab0fa4971 ecbbb5fea0464f857d513de5c23423f1 0.24438412487506866 +d8e6b7b0368832247dbc5acab0fa4971 f41879b82690dbbd64eba913bb60b084 0.2281496524810791 +d8e6b7b0368832247dbc5acab0fa4971 f4b3941d7d57b2f17e1f22ec3077cc57 0.33249685168266296 +d8e6b7b0368832247dbc5acab0fa4971 f64340086bf5617b5b73684e79e6851c 0.25854116678237915 +d8e6b7b0368832247dbc5acab0fa4971 f67c4609c1e7a5fa403de7e22c501457 0.26047396659851074 +d8e6b7b0368832247dbc5acab0fa4971 fd032fad609be92a9a9d2a36e2e03faa 0.25854116678237915 +d8e6b7b0368832247dbc5acab0fa4971 fe888f4b12c0b05171796bd6d1b4f590 0.264342725276947 +dfa3146f46afd34506e6a71e0ec8b111 e238a64ed05a08249266e0e5839548e5 0.2462090104818344 +dfa3146f46afd34506e6a71e0ec8b111 e396578f1078dd14484f24e821e31f7b 0.17201834917068481 +dfa3146f46afd34506e6a71e0ec8b111 e5f50fc1871b817d772009a19b1a639a 0.2971413731575012 +dfa3146f46afd34506e6a71e0ec8b111 e645222fbec3f59af2ffb3b22123ac56 0.22766949236392975 +dfa3146f46afd34506e6a71e0ec8b111 e956cc2ce89bd8b63426fbab21f2f2e6 0.15048077702522278 +dfa3146f46afd34506e6a71e0ec8b111 ecbbb5fea0464f857d513de5c23423f1 0.18194444477558136 +dfa3146f46afd34506e6a71e0ec8b111 f41879b82690dbbd64eba913bb60b084 0.16734465956687927 +dfa3146f46afd34506e6a71e0ec8b111 f4b3941d7d57b2f17e1f22ec3077cc57 0.29160767793655396 +dfa3146f46afd34506e6a71e0ec8b111 f64340086bf5617b5b73684e79e6851c 0.1774621158838272 +dfa3146f46afd34506e6a71e0ec8b111 f67c4609c1e7a5fa403de7e22c501457 0.21966002881526947 +dfa3146f46afd34506e6a71e0ec8b111 fd032fad609be92a9a9d2a36e2e03faa 0.1774621158838272 +dfa3146f46afd34506e6a71e0ec8b111 fe888f4b12c0b05171796bd6d1b4f590 0.1791025549173355 +e238a64ed05a08249266e0e5839548e5 e396578f1078dd14484f24e821e31f7b 0.23005981743335724 +e238a64ed05a08249266e0e5839548e5 e5f50fc1871b817d772009a19b1a639a 0.33454594016075134 +e238a64ed05a08249266e0e5839548e5 e645222fbec3f59af2ffb3b22123ac56 0.16721537709236145 +e238a64ed05a08249266e0e5839548e5 e956cc2ce89bd8b63426fbab21f2f2e6 0.26717740297317505 +e238a64ed05a08249266e0e5839548e5 ecbbb5fea0464f857d513de5c23423f1 0.24402858316898346 +e238a64ed05a08249266e0e5839548e5 f41879b82690dbbd64eba913bb60b084 0.24267180263996124 +e238a64ed05a08249266e0e5839548e5 f4b3941d7d57b2f17e1f22ec3077cc57 0.18916009366512299 +e238a64ed05a08249266e0e5839548e5 f64340086bf5617b5b73684e79e6851c 0.20490463078022003 +e238a64ed05a08249266e0e5839548e5 f67c4609c1e7a5fa403de7e22c501457 0.2098742127418518 +e238a64ed05a08249266e0e5839548e5 fd032fad609be92a9a9d2a36e2e03faa 0.20490463078022003 +e238a64ed05a08249266e0e5839548e5 fe888f4b12c0b05171796bd6d1b4f590 0.23408806324005127 +e396578f1078dd14484f24e821e31f7b e5f50fc1871b817d772009a19b1a639a 0.3068404495716095 +e396578f1078dd14484f24e821e31f7b e645222fbec3f59af2ffb3b22123ac56 0.260404497385025 +e396578f1078dd14484f24e821e31f7b e956cc2ce89bd8b63426fbab21f2f2e6 0.15555556118488312 +e396578f1078dd14484f24e821e31f7b ecbbb5fea0464f857d513de5c23423f1 0.16981981694698334 +e396578f1078dd14484f24e821e31f7b f41879b82690dbbd64eba913bb60b084 0.21638160943984985 +e396578f1078dd14484f24e821e31f7b f4b3941d7d57b2f17e1f22ec3077cc57 0.26667967438697815 +e396578f1078dd14484f24e821e31f7b f64340086bf5617b5b73684e79e6851c 0.18020832538604736 +e396578f1078dd14484f24e821e31f7b f67c4609c1e7a5fa403de7e22c501457 0.19532309472560883 +e396578f1078dd14484f24e821e31f7b fd032fad609be92a9a9d2a36e2e03faa 0.18020832538604736 +e396578f1078dd14484f24e821e31f7b fe888f4b12c0b05171796bd6d1b4f590 0.15693365037441254 +e5f50fc1871b817d772009a19b1a639a e645222fbec3f59af2ffb3b22123ac56 0.36929190158843994 +e5f50fc1871b817d772009a19b1a639a e956cc2ce89bd8b63426fbab21f2f2e6 0.2940675616264343 +e5f50fc1871b817d772009a19b1a639a ecbbb5fea0464f857d513de5c23423f1 0.2973637580871582 +e5f50fc1871b817d772009a19b1a639a f41879b82690dbbd64eba913bb60b084 0.3117869198322296 +e5f50fc1871b817d772009a19b1a639a f4b3941d7d57b2f17e1f22ec3077cc57 0.3420008420944214 +e5f50fc1871b817d772009a19b1a639a f64340086bf5617b5b73684e79e6851c 0.31838491559028625 +e5f50fc1871b817d772009a19b1a639a f67c4609c1e7a5fa403de7e22c501457 0.3102998435497284 +e5f50fc1871b817d772009a19b1a639a fd032fad609be92a9a9d2a36e2e03faa 0.31838491559028625 +e5f50fc1871b817d772009a19b1a639a fe888f4b12c0b05171796bd6d1b4f590 0.3002731502056122 +e645222fbec3f59af2ffb3b22123ac56 e956cc2ce89bd8b63426fbab21f2f2e6 0.23534664511680603 +e645222fbec3f59af2ffb3b22123ac56 ecbbb5fea0464f857d513de5c23423f1 0.24829234182834625 +e645222fbec3f59af2ffb3b22123ac56 f41879b82690dbbd64eba913bb60b084 0.24133771657943726 +e645222fbec3f59af2ffb3b22123ac56 f4b3941d7d57b2f17e1f22ec3077cc57 0.2022879421710968 +e645222fbec3f59af2ffb3b22123ac56 f64340086bf5617b5b73684e79e6851c 0.20510171353816986 +e645222fbec3f59af2ffb3b22123ac56 f67c4609c1e7a5fa403de7e22c501457 0.23363351821899414 +e645222fbec3f59af2ffb3b22123ac56 fd032fad609be92a9a9d2a36e2e03faa 0.20510171353816986 +e645222fbec3f59af2ffb3b22123ac56 fe888f4b12c0b05171796bd6d1b4f590 0.2426535040140152 +e956cc2ce89bd8b63426fbab21f2f2e6 ecbbb5fea0464f857d513de5c23423f1 0.13962264358997345 +e956cc2ce89bd8b63426fbab21f2f2e6 f41879b82690dbbd64eba913bb60b084 0.1495238095521927 +e956cc2ce89bd8b63426fbab21f2f2e6 f4b3941d7d57b2f17e1f22ec3077cc57 0.2746303677558899 +e956cc2ce89bd8b63426fbab21f2f2e6 f64340086bf5617b5b73684e79e6851c 0.16863636672496796 +e956cc2ce89bd8b63426fbab21f2f2e6 f67c4609c1e7a5fa403de7e22c501457 0.1863911896944046 +e956cc2ce89bd8b63426fbab21f2f2e6 fd032fad609be92a9a9d2a36e2e03faa 0.16863636672496796 +e956cc2ce89bd8b63426fbab21f2f2e6 fe888f4b12c0b05171796bd6d1b4f590 0.12236744165420532 +ecbbb5fea0464f857d513de5c23423f1 f41879b82690dbbd64eba913bb60b084 0.1670183390378952 +ecbbb5fea0464f857d513de5c23423f1 f4b3941d7d57b2f17e1f22ec3077cc57 0.24848750233650208 +ecbbb5fea0464f857d513de5c23423f1 f64340086bf5617b5b73684e79e6851c 0.16126126050949097 +ecbbb5fea0464f857d513de5c23423f1 f67c4609c1e7a5fa403de7e22c501457 0.18916666507720947 +ecbbb5fea0464f857d513de5c23423f1 fd032fad609be92a9a9d2a36e2e03faa 0.16126126050949097 +ecbbb5fea0464f857d513de5c23423f1 fe888f4b12c0b05171796bd6d1b4f590 0.1881818026304245 +f41879b82690dbbd64eba913bb60b084 f4b3941d7d57b2f17e1f22ec3077cc57 0.25238335132598877 +f41879b82690dbbd64eba913bb60b084 f64340086bf5617b5b73684e79e6851c 0.1794992983341217 +f41879b82690dbbd64eba913bb60b084 f67c4609c1e7a5fa403de7e22c501457 0.16260741651058197 +f41879b82690dbbd64eba913bb60b084 fd032fad609be92a9a9d2a36e2e03faa 0.1794992983341217 +f41879b82690dbbd64eba913bb60b084 fe888f4b12c0b05171796bd6d1b4f590 0.13962264358997345 +f4b3941d7d57b2f17e1f22ec3077cc57 f64340086bf5617b5b73684e79e6851c 0.23240000009536743 +f4b3941d7d57b2f17e1f22ec3077cc57 f67c4609c1e7a5fa403de7e22c501457 0.21894480288028717 +f4b3941d7d57b2f17e1f22ec3077cc57 fd032fad609be92a9a9d2a36e2e03faa 0.23240000009536743 +f4b3941d7d57b2f17e1f22ec3077cc57 fe888f4b12c0b05171796bd6d1b4f590 0.26727497577667236 +f64340086bf5617b5b73684e79e6851c f67c4609c1e7a5fa403de7e22c501457 0.16185897588729858 +f64340086bf5617b5b73684e79e6851c fd032fad609be92a9a9d2a36e2e03faa 0.0 +f64340086bf5617b5b73684e79e6851c fe888f4b12c0b05171796bd6d1b4f590 0.17456166446208954 +f67c4609c1e7a5fa403de7e22c501457 fd032fad609be92a9a9d2a36e2e03faa 0.16185897588729858 +f67c4609c1e7a5fa403de7e22c501457 fe888f4b12c0b05171796bd6d1b4f590 0.14222222566604614 +fd032fad609be92a9a9d2a36e2e03faa fe888f4b12c0b05171796bd6d1b4f590 0.17456166446208954 diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..1accf6e --- /dev/null +++ b/setup.py @@ -0,0 +1,25 @@ +from setuptools import setup, Extension +from Cython.Build import cythonize +import numpy + +extensions = [ + Extension( + "nw_ec_alignx", + ["nw_ec_alignx.pyx"], + include_dirs=[numpy.get_include()], + define_macros=[("NPY_NO_DEPRECATED_API", "NPY_1_7_API_VERSION")], + extra_compile_args=['-Wno-unreachable-code', '-Wno-unreachable-code-fallthrough'] + ) +] + +setup( + name="nw_ec_alignx", + ext_modules=cythonize( + extensions, + compiler_directives={ + 'language_level': "3", + 'boundscheck': False, + 'wraparound': False + } + ) +) diff --git a/utilities/LICENSE b/utilities/LICENSE new file mode 100644 index 0000000..f288702 --- /dev/null +++ b/utilities/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/utilities/README.md b/utilities/README.md new file mode 100644 index 0000000..51daaa2 --- /dev/null +++ b/utilities/README.md @@ -0,0 +1,276 @@ +# alignESS + +A program for Enzymatic Step Sequence (ESS) alignment using the Dynamic Programming (DP) Needleman–Wunsch algorithm. + +The program can perform the following alignments: + + pair ESS command line pairwise comparisson using DP + dbalign ESSs database(s) alignment using DP + multi ESSs multiple alignment using GA + +The pairwise alignments are generated with the DP algorithm, and the multiple ESS alignement is generated using a Genetic Algorithm (GA). + +## Dependencies + +The program runs in Python 3. It runs properly in an Anaconda base installation! (that includes numpy, sqlite, matplotlib, cython and pytest). + +* Pair-wise alignment (simple pairwise or database alignment): + - cython + - numpy + - sqlite3 + - matplotlib [optional] only for ecs_entropy.py script + - pytest [optional] for running test suite + +* Multiple alignment: + - C boost library: only for compiling the alignment algorithm* + +(*) This repo contains a compiled (linux 64 bit) copy of the multiple alignment algorithm that may work fine in + the majority of linux systems. The source code of this part of the program is not yet included. + +For convenience a conda environment can be build to fullfill all dependencies with the conda .yml file in this repo + +``` Bash +$ conda create env -f conda_env.yml +``` + +## Installing + +For now, clone this git repository and use the alginESS.py script. + + +## Usage. + +### Enzimatic Step Sequences (ESS) + +The ESSs represent lineal consecutive steps of enzymatic activities. These steps are represented using the +Enzyme Commission (EC) numbers that describe catalytic function. Thus, the ESS are a form of functional representation +of a metabolic processes. In this case, only the first 3 numbers are considered, because in general seems to be +more informative and tends to be less prone to annotation issues. + +The ESS can be obtained in any way, but must have the following form: + + 1. Each enzime is represented by a 3 digit EC number: 3.1.4. + Invalid numbers (i.e. inexistent in KEGG database) will rise error. + 2. The sequence (ESS) is constructed joining the enzimes using colons (:). + In this form (a 3 step ESS): 3.2.4:1.6.12:4.4.1 + 3. An undetermined enzymatic setp must be specified in this form: 9.9.9 + +The program accepts ESS written on the terminal, in a text file or in a Sqlite database. Examples of each +type of file can be found in the test folder in this repo. + + + +### Pair-wise alignment. + + usage: alignESS.py pair [-h] [-l] ess1 ess2 + positional arguments: + ess1 ESS (3 levels EC numbers). Colon separated. + (1.2.3:3.5.-:...:9.9.9) + ess2 ESS (3 levels EC numbers). Colon separated. + (1.2.3:3.5.-:...:9.9.9) + + optional arguments: + -h, --help show this help message and exit + -l, --localize The alignment is trimmed to the coverage of the shortest ESS + and the score is then calculated to the trimmed alignment. + This method allows to find 'local-like' alignments between + ESS of different size + +ess1 and ess2 must be ESS written in the command line. + +#### Example + +``` Bash +(ess-env) $ python3 alignESS.py pair 2.7.1:5.3.1:5.3.1:2.7.1:4.1.2:1.2.1 5.3.1:5.3.1:4.2.1 +``` +Output +``` Bash +ess1: 2.7.1:5.3.1:5.3.1:2.7.1:4.1.2:1.2.1 +ess2: -.-.-:5.3.1:5.3.1:-.-.-:4.2.1:-.-.- +score = 0.566987156867981 +>>> Done!!! <<< +:D, see you soon. +``` + +### Pair-wise database alginment. + + usage: alignESS.py dbalign [-h] [-db2 ESSDB2] [-o OUTFILE] [-t THRESHOLD] + [-nproc NPROC] [-l] [-align] + essdb1 + + positional arguments: + essdb1 ESSs database 1. Sqlite3 file with nrseqs table or + text file with one ESS in each line. If the essdb2 + argument is not specified, the program performs the + all-vs-all alignment in essdb1. This argument also can + be a single ESS, in this case the -db2 argument is + necessary + + optional arguments: + -h, --help show this help message and exit + -db2 ESSDB2, --essdb2 ESSDB2 + ESSs databse 2. Sqlite3 file with nrseqs table or text + file with one ESS in each line + -o OUTFILE, --outfile OUTFILE + Outfile name to report scores. By default the file + only contains the id of the ESSs and the score of the + alignment. If argument '-align' is set, then the file + contains the alignmed ESSs + -t THRESHOLD, --threshold THRESHOLD + Threshold score to filter results in the range 0-1 + [0.3]. If the threshold is high (>0.6) and the + databases are large, results may saturate the RAM + memmory, beware! + -nproc NPROC Number of processes to execute analysis [2]. It can be + created more processes than cores in the the + processor, so the speedup of the analysis depends on + the number of cores available + -l, --localize The alignment is trimmed to the coverage of the + shortest ESS and the score is then calculated to the + trimmed alignment. This method allows to find 'local- + like' alignments between ESS of different size + -align If set, the outputfile contains the alignment of each + ESS pair bellow the threshold. Beware, if the + databases are large and the threshold high, the file + may be huge or the RAM memmory colapse. + +essdb1, essdb2 can be text files or sqlite databases (with specific format --coming soon--). Examples +can be found in test folder + +#### Example + +``` Bash +(ess-env) $ python3 alignESS.py dbalign tests/nr_part.db + +``` +Output +``` Bash +------ Opening databases: +tests/nr_part.db ( sqlite ) +------ Aligning the database with itself (all vs all)... +Number of processes: 2 +------ Storing data: output.txt +>>> Done!!! <<< +:D, see you soon. +``` + +An __output.txt__ file will be created and should look like this + +``` Bash +(ess-env) $ head output.txt +3 4 0.23749999701976776 +3 5 0.23749999701976776 +3 11 0.23749999701976776 +3 13 0.23749999701976776 +3 14 0.23749999701976776 +3 15 0.23749999701976776 +3 16 0.23749999701976776 +3 20 0.012179487384855747 +``` + + +### Multiple alignment + + usage: alignESS.py multi [-h] [-o OUTPUTFILE] [-p FILENAME] FILENAME + + positional arguments: + FILENAME ESSs file. Each line must contain an ESS name and the + ESS separeated by a TAB. Accepts commentaries with '#' + + optional arguments: + -h, --help show this help message and exit + -o OUTPUTFILE, --multiout OUTPUTFILE + Multiple alignment outputfile + -p FILENAME, --pcomp FILENAME + If spificied, stores the pairwise comparisson of the + ESSs in the ESSs file + +File name must be a text file. An example can be found in test folder. + + +#### Example + +``` Bash +(ess-env) $ python3 alignESS.py multi tests/multi.txt + +``` +Output +``` Bash +------ Loading file +tests/multi.txt +------ Making pairwise comparissons +------ Building multiple alignment +- Genetic algorithm parameters: +Population: 100 +Max generations: 200 +Crossover prob: 0.7 +Mutation prob: 0.1 +- Objetive function parameters (must sum 1): +Gap penalization: 0.05 +Homogeneity: 0.9 +Column increment penalization:0.05 + +------ Creating file +multiout.txt +>>> Done!!! <<< +:D, see you soon. +``` + +A __multioutput.txt__ file will be created and should look like this + +``` Bash +(ess-env) $ head multiout.txt +006 Glycolysis / Gluconeogenesis 2.7.1:5.3.1:5.3.1:2.7.1:4.1.2:1.2.1 +016 Glycolysis / Gluconeogenesis 3.1.3:2.7.1:5.3.1:5.3.1:2.7.1:4.1.2:1.2.1 +019 Glycolysis / Gluconeogenesis -.-.-:2.7.1:3.2.1:5.3.1:2.7.1:4.1.2:1.2.1 +010 Glycolysis / Gluconeogenesis -.-.-:5.4.2:5.3.1:5.3.1:2.7.1:4.1.2:1.2.1 +004 Glycolysis / Gluconeogenesis -.-.-:2.7.1:-.-.-:5.3.1:2.7.1:4.1.2:1.2.1 +008 Glycolysis / Gluconeogenesis -.-.-:-.-.-:5.4.2:5.3.1:2.7.1:4.1.2:1.2.1 +225 Phenylalanine, tyrosine and tryptophan biosynthesis -.-.-:-.-.-:-.-.-:5.3.1:5.3.1:4.2.1:4.2.1 +224 Phenylalanine, tyrosine and tryptophan biosynthesis -.-.-:-.-.-:-.-.-:5.3.1:5.3.1:4.2.1:-.-.- +\# Fitness: 0.269401 +``` + + +### Updating the EC scoring matrix for pairwise alignment. + +The scoring (dissimilarity) matrix used by the pairwise alignment program can be updated +using the script ecs_entropy.py. This script creates the matrix on a python binary file, +however, the program can also store the matrix in text format and plot it in a *png* file. + +In order to create the matrix, first is necessary to download the KEGG EC number list from +this URL: [http://rest.kegg.jp/list/ec](http://rest.kegg.jp/list/ec) + + usage: ecs_entropy.py [-h] [-s npz|txt] [-p] ecfile + + Create an entropy based similarity (distance) matrix for EC alignment. The similarity is + calculated for the first 3 levels of EC classification + + positional arguments: + ecfile KEGG EC numbers list. This file can be downloaded with this link: + http://rest.kegg.jp/list/ec + + options: + -h, --help show this help message and exit + -s npz|txt, --store-format npz|txt + Output file format. The default (npz) format is as numpy binary file + that can be used by the ESS alignment program. txt option gets a + tabular separated text file + -p, --plot Plot the matrix in ent_matrix.png file + + + +## Papers. +The programs presented here were used all or in parts in the following papers. + +1. Comparison of Metabolic Pathways in Escherichia coli by Using Genetic Algorithms +P Ortegon, AC Poot-Hernández, E Perez-Rueda, K Rodriguez-Vazquez +Computational and structural biotechnology journal 13, 277-285. 2015. + +2. The alignment of enzymatic steps reveals similar metabolic pathways and probable recruitment events in Gammaproteobacteria +AC Poot-Hernandez, K Rodriguez-Vazquez, E Perez-Rueda +BMC genomics 16 (1), 957. 2015. + +3. Identification of functional signatures in the metabolism of the three cellular domains of life +P Escobar-Turriza, R Hernandez-Guerrero, AC Poot-Hernández, ... +PloS one 14 (5). 2019. diff --git a/utilities/alignESS.py b/utilities/alignESS.py new file mode 100755 index 0000000..3815fd9 --- /dev/null +++ b/utilities/alignESS.py @@ -0,0 +1,480 @@ +#!python +# -*- coding: utf-8 -*- +# +# ------------------------------ +# Name: nw_ec_align.px +# Purpose: Program to align Enzimatic Step Sequences (ESS) using dynamic +# programming +# +# @uthor: acph - dragopoot@gmail.com +# +# Created: Sep, 2017 +# Copyright: (c) acph 2017 +# Licence: GNU GENERAL PUBLIC LICENSE, Version 3, 29 June 2007 +# ------------------------------ +"""Program to align Enzimatic Step Sequences (ESS) using Dynamic Programming (DP) +and Genetic Algorithms (GA)""" + +import os +import sys +import argparse +import numpy as np +import sqlite3 as s3 +import pyximport +pyximport.install(setup_args={"include_dirs": np.get_include()}, + reload_support=True) +import nw_ec_alignx as nwx + +# load similarity matrix +matfile = 'h_ent_mat.npz' # ecs_entropy.py generated file +# exedir = os.path.dirname(argv[0]) +# exepath = os.path.join(exedir, matfile) +exedir = os.path.realpath(__file__) +exedir = os.path.dirname(exedir) +exepath = os.path.join(exedir, matfile) + +hmat = np.load(exepath) +ecs = hmat['ecs'] +hmat = hmat['matrix'] +lecs = [str(ec) for ec in ecs] +decs = {} +for i, v in enumerate(lecs): + decs[v] = i + +# -- End load matrices + +################## +# Load databases # +################## + + +def load_txt(fname, index=False, sep='\t'): + """Loads a database of ESS stored in a text file. Unless index = True, each + line correspond to one ESSs. + + Returns a list of ESS or a dictionary. Each ESS is a list of EC numbers + + Keyword Arguments: + fname -- String, File name + index -- If True, each line is splited according to sep (default False). + The first element is trated as index and the second as the ESS. + If the line contains more elements, will be ignored. + sep -- String that separates fields (default TAB) + """ + if not index: + with open(fname) as inf: + esss = inf.read() + esss = esss.split('\n') + assert len(esss[0].split()) == 1, 'Lines must contain only the ESS' + esss = [es.split(':') for es in esss if es != ''] + return esss + else: + with open(fname) as inf: + esss = inf.read() + esss = esss.split('\n') + assert len(esss[0].split(sep)) >= 2, 'Lines must contain index and ESS' + esslist = [] + indexlist = [] + for es in esss: + if es == '': + continue + es = es.split(sep) + esslist.append(es[1].split(':')) + indexlist.append(es[0]) + return esslist, indexlist + + +def load_sqlite(dbf, table='nrseqs', length=1): + """Loads a database of ESS sotored in a sqlite3 database. + + Returns a list of ESSs where each ESS is a list of EC numbers + and a list of indices. + + Keyword Arguments: + dbile -- String, sqlite3 database filename + table -- String, database table name (default 'nrseqs')[seqs|nrseqs] + length -- Int, minimum longitude of the ESS to retrive (default 1) + """ + assert table in ['nrseqs', 'seqs'], "Table name not known [nrseqs|seqs]" + if table == 'nrseqs': + idname = 'nrid' + else: + idname = 'id' + ids = [] + esss = [] + with s3.connect(dbf) as db: + s3state = "SELECT {}, ec3 from {}".format(idname, table) + cursor = db.execute(s3state) + for entry in cursor: + ess = entry[1].split(':') + if len(ess) >= length: + ids.append(entry[0]) + esss.append(ess) + return esss, ids + +###################### +# Alignment wrappers # +###################### + + +def alignESS(seq1, seq2, gap=0.9, localize=False): + """Wrapper for nwx.NW function for ESS alignment + + Keyword Arguments: + seq1 -- ESS 1. str, colon separated EC numbers. + seq2 -- ESS 1. str, colon separated EC numbers. + gap -- Gap penalization. + localize -- if localize = True, the funtion returns only + the fragment of the alignment covered by the + shortest sequence and the score is calculated + accordingly + """ + seq1 = seq1.split(':') + seq2 = seq2.split(':') + seq1, seq2, score = nwx.NW( + hmat, decs, seq1, seq2, gap=gap, localize=localize) + return seq1, seq2, score + +########## +# Parser # +########## + + +def arg_parser(get_parser=False): + """If parser == True, the program retunr parser obhect""" + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('-m', '--matrix', default='h_ent_mat.npz', + help='''EC number similarity matrix + (TO DO)[h_ent_mat.npz]''') + parser.add_argument('--gap', type=float, default=0.9, + help='Gap penalization (from 0 to 1) [0.9]') + # TO DO parser -c, --create-matrix, + # 'create matrix given a list of ec numbers' + ############## + # Subparsers # + ############## + subparsers = parser.add_subparsers(help='ESSs alignment subcommands', + dest='command') + # Pair alignment + pairp = subparsers.add_parser('pair', + help='''ESS command line pairwise + comparisson using DP''') + pairp.add_argument('ess1', type=str, + help='''ESS (3 levels EC numbers). Colon separated. + (1.2.3:3.5.-:...:9.9.9)''') + pairp.add_argument('ess2', type=str, + help='''ESS (3 levels EC numbers). Colon separated. + (1.2.3:3.5.-:...:9.9.9)''') + pairp.add_argument('-l', '--localize', action='store_true', default=False, + help='''The alignment is trimmed to the coverage of the + shortest ESS and the score is then calculated to the + trimmed alignment. This method allows to find + 'local-like' alignments between ESS of different + size''') + # DB alignment + dbp = subparsers.add_parser('dbalign', + help='ESSs database(s) alignment using DP') + dbp.add_argument('essdb1', type=str, + help='''ESSs database 1. Sqlite3 file with nrseqs table + or text file with one ESS in each line. If the essdb2 + argument is not specified, the program performs the + all-vs-all alignment in essdb1. This argument + also can be a single ESS, in this case the -db2 argument + is necessary''') + dbp.add_argument('-db2', '--essdb2', type=str, + help='''ESSs databse 2. Sqlite3 file with nrseqs table + or text file with one ESS in each line''') + dbp.add_argument('-o', '--outfile', type=str, default='output.txt', + help="""Outfile name to report scores. By default the + file only contains the id of the ESSs and the score + of the alignment. If argument '-align' is set, + then the file contains the alignmed ESSs""") + dbp.add_argument('-t', '--threshold', type=float, default=0.3, + help='''Threshold score to filter results in the + range 0-1 [0.3]. If the threshold is high (>0.6) and + the databases are large, results may saturate the + RAM memmory, beware!''') + dbp.add_argument('-nproc', type=int, default=2, + help='''Number of processes to execute analysis [2]. + It can be created more processes than cores in the + the processor, so the speedup of the analysis + depends on the number of cores available''') + dbp.add_argument('-l', '--localize', action='store_true', default=False, + help='''The alignment is trimmed to the coverage of the + shortest ESS and the score is then calculated to the + trimmed alignment. This method allows to find + 'local-like' alignments between ESS of different + size''') + dbp.add_argument('-align', action='store_true', default=False, + help='''If set, the outputfile contains the alignment + of each ESS pair bellow the threshold. Beware, if the + databases are large and the threshold high, + the file may be huge or the RAM memmory colapse.''') + # Multiple Alignment + multip = subparsers.add_parser('multi', + help='ESSs multiple alignment using GA') + multip.add_argument('multifile', type=str, metavar='FILENAME', + help='''ESSs file. Each line must contain an ESS name + and the ESS separeated by a TAB. + Accepts commentaries with '#' ''') + multip.add_argument('-o', '--multiout', type=str, metavar='OUTPUTFILE', + default='multiout.txt', + help='''Multiple alignment outputfile''') + multip.add_argument('-p', '--pcomp', type=str, metavar='FILENAME', + help='''If spificied, stores the pairwise comparisson + of the ESSs in the ESSs file''') + # - + if get_parser: + return parser + args = parser.parse_args() + return args + +################ +# Main helpers # +################ + + +def _ess_type(input_str): + """Returns the type of ESSs recived by command line + ['ess', 'sqdb', 'textdb'] + + Keyword Arguments: + input_str -- string from command line + """ + if os.path.exists(input_str): # is it a file? + if '.db' in input_str: + answer = 'sqlite' + elif '.txt' in input_str: + with open(input_str) as inf: + line = inf.readline() + line = line.split('\t') + if len(line) == 1: + answer = 'text_noind' + elif len(line) >= 2: + answer = 'text_ind' + else: + answer = 'file' + else: # is it a ESS? + # asuming the count of : and . + # for each : you need 2(.) + 2 + colons = input_str.count(':') + points = input_str.count('.') + if (colons >= 1 + and points == colons * 2 + 2): + answer = 'ess' + else: + print('File not found or ESS in wrong format') + print('Exiting') + raise FileNotFoundError('''"{}" file not found or wrong ESS +format.'''.format(input_str)) + return answer + + +def _loaddb(fname): + """Load a database according to type + + Keyword Arguments: + fname -- filename + """ + _type = _ess_type(fname) + if _type == 'sqlite': + return load_sqlite(fname) + elif _type == 'text_ind': + return load_txt(fname, index=True, sep='\t') + elif _type == 'text_noind': + return load_txt(fname), None + elif _type == 'file': + return load_txt(fname) + else: + print('Something is really wierd') + + +def _load_multi(fname): + """Loads a multiple alignment filename. + 2 columns tabular format: + Col 1 = ESS name + Col 2 = ESS + + accept commentaries with # + + Keyword Arguments: + fname -- filename + """ + names = [] + esss = [] + with open(fname) as inf: + for line in inf: + line = line.strip() + if not line: + continue + if line[0] == '#' or line[0] == '>': + continue + name, ess = line.split('\t') + ess = ess.split(':') + names.append(name) + esss.append(ess) + return esss, names + + +################## +# Main functions # +################## + + +def main_pair(args): + """Main function for pair subcommand + """ + from sys import stdout + seq1, seq2, score = alignESS(args.ess1, args.ess2, gap=args.gap, + localize=args.localize) + stdout.write('ess1:\t{}\n'.format(seq1)) + stdout.write('ess2:\t{}\n'.format(seq2)) + stdout.write('score = {}\n'.format(score)) + + +def main_db(args): + """Main function for dbalign subcomand + """ + print('------ Opening databases:') + typ1 = _ess_type(args.essdb1) + print(args.essdb1, '(', typ1, ')') + if args.essdb2: + typ2 = _ess_type(args.essdb2) + assert typ2 != 'ess', '-db2 must be a database, not an ESS' + print(args.essdb2, '(', typ2, ')') + if args.align is True: + oscore = False + else: + oscore = True + # Checking types + if not args.essdb2: + if typ1 == 'ess': + print('#' * 20) + print('Warning!!! ---------') + print('When using an ESS as input, you need to spicify ' + + 'an ESS database in -db2 argument.') + print('Exit program!!! :D try again!!!') + exit() + db1, indices = _loaddb(args.essdb1) + print('------ Aligning the database with itself (all vs all)...') + print('Number of processes: {}'.format(args.nproc)) + scores = nwx.alldb_comp(db1, hmat, decs, thres=args.threshold, + nproc=args.nproc, + localize=args.localize, + oscore=oscore + ) + print('------ Storing data:', args.outfile) + nwx.store_dict(args.outfile, scores, indices=indices, indices2=indices) + return + if typ1 == 'ess': + db2, ind2 = _loaddb(args.essdb2) + print('------ Aligning ESS vs DB ------') + print('Number of processes: 1 (fixed)') + ess = args.essdb1.split(':') + scores = nwx.seq_vs_db(ess, db2, hmat, decs, thres=args.threshold, + localize=args.localize, + oscore=oscore + ) + print('------ Storing data:', args.outfile) + print('Number of hits: ', len(scores)) + if not scores: + print('WARNING: 0 hits, file {} not created'.format(args.outfile)) + else: + nwx.store_dict(args.outfile, scores, indices=ind2) + else: + # if two databases were speficied + db1, ind1 = _loaddb(args.essdb1) + db2, ind2 = _loaddb(args.essdb2) + print('------ Aligning both databases ------') + print('Number of processes: {}'.format(args.nproc)) + scores = nwx.db_vs_db(db1, db2, hmat, decs, thres=args.threshold, + nproc=args.nproc, + localize=args.localize, + oscore=oscore + ) + print('------ Storing data:', args.outfile) + nwx.store_dict(args.outfile, scores, indices=ind1, indices2=ind2) + + +def main_multi(args): + """Main function for multiple alignment + """ + # pcomp + import tempfile + from subprocess import run, PIPE + print('------ Loading file') + print(args.multifile) + esss, names = _load_multi(args.multifile) + print('------ Making pairwise comparissons') + pairs = nwx.alldb_comp(esss, hmat, decs) # pair align + if args.pcomp: + nwx.store_dict('args.pcomp', pairs) + # create temp files + tempsco = tempfile.NamedTemporaryFile(mode='w+t', dir='.') + templist = tempfile.NamedTemporaryFile(mode='w+t', dir='.') + # fill files + for i, nam in enumerate(names): + ess = ':'.join(esss[i]) + line = "{}\t{}\t{}\n".format(i, nam, ess) + templist.write(line) + for i, dic_ in pairs.items(): + for j, sco in dic_.items(): + line = "{}\t{}\t{}\n".format(i, j, sco) + tempsco.write(line) + # rewind files + tempsco.seek(0) + templist.seek(0) + # Run multiple alignment + binf = 'bin/AlineaMultiple' + binpath = os.path.join(exedir, binf) + npob, ngen, cross, mut = '100', '200', '0.7', '0.1' + pengap, homo, peninc = '0.05', '0.9', '0.05' + cmd = [binpath, templist.name, tempsco.name, + npob, ngen, cross, mut, pengap, homo, peninc, '1'] + print('------ Building multiple alignment') + print("""- Genetic algorithm parameters: +Population: {} +Max generations: {} +Crossover prob: {} +Mutation prob: {} +- Objetive function parameters (must sum 1): +Gap penalization: {} +Homogeneity: {} +Column increment penalization:{} +""".format(npob, ngen, cross, mut, pengap, homo, peninc)) + malign = run(cmd, stdout=PIPE) + malign = malign.stdout.decode('utf8') + # End temp files + tempsco.close() + templist.close() + print('------ Creating file') + print(args.multiout) + with open(args.multiout, 'w') as outf: + for line in malign.split('\n'): + if line == '': + continue + elif line[0] == 'F': + newl = '# ' + line + '\n' + else: + line = line.split('\t') + newl = '{}\t{}\n'.format(line[1], line[2]) + outf.write(newl) + + +def main(): + args = arg_parser() + if args.command == 'pair': + main_pair(args) + elif args.command == 'dbalign': + main_db(args) + elif args.command == 'multi': + main_multi(args) + elif args.command is None: + parser = arg_parser(True) + parser.print_help() + print('>>> Done!!! <<<') + print(':D, see you soon.') + + +if __name__ == '__main__': + main() diff --git a/utilities/bin/AlineaMultiple b/utilities/bin/AlineaMultiple new file mode 100755 index 0000000..22b32b2 Binary files /dev/null and b/utilities/bin/AlineaMultiple differ diff --git a/utilities/build/lib.macosx-10.13-x86_64-cpython-310/nw_ec_alignx.cpython-310-darwin.so b/utilities/build/lib.macosx-10.13-x86_64-cpython-310/nw_ec_alignx.cpython-310-darwin.so new file mode 100755 index 0000000..a889c66 Binary files /dev/null and b/utilities/build/lib.macosx-10.13-x86_64-cpython-310/nw_ec_alignx.cpython-310-darwin.so differ diff --git a/utilities/build/temp.macosx-10.13-x86_64-cpython-310/nw_ec_alignx.o b/utilities/build/temp.macosx-10.13-x86_64-cpython-310/nw_ec_alignx.o new file mode 100644 index 0000000..5f09514 Binary files /dev/null and b/utilities/build/temp.macosx-10.13-x86_64-cpython-310/nw_ec_alignx.o differ diff --git a/utilities/conda_env.yml b/utilities/conda_env.yml new file mode 100644 index 0000000..f41e91e --- /dev/null +++ b/utilities/conda_env.yml @@ -0,0 +1,139 @@ +name: ess-env +channels: + - conda-forge +dependencies: + - _libgcc_mutex=0.1=conda_forge + - _openmp_mutex=4.5=2_gnu + - alsa-lib=1.2.6.1=h7f98852_0 + - attr=2.5.1=h166bdaf_1 + - attrs=22.1.0=pyh71513ae_1 + - brotli=1.0.9=h166bdaf_7 + - brotli-bin=1.0.9=h166bdaf_7 + - bzip2=1.0.8=h7f98852_4 + - ca-certificates=2022.6.15=ha878542_0 + - certifi=2022.6.15=py310hff52083_0 + - cycler=0.11.0=pyhd8ed1ab_0 + - cython=0.29.32=py310hd8f1fbe_0 + - dbus=1.13.6=h5008d03_3 + - expat=2.4.8=h27087fc_0 + - fftw=3.3.10=nompi_ha7695d1_103 + - font-ttf-dejavu-sans-mono=2.37=hab24e00_0 + - font-ttf-inconsolata=3.000=h77eed37_0 + - font-ttf-source-code-pro=2.038=h77eed37_0 + - font-ttf-ubuntu=0.83=hab24e00_0 + - fontconfig=2.14.0=h8e229c2_0 + - fonts-conda-ecosystem=1=0 + - fonts-conda-forge=1=0 + - fonttools=4.34.4=py310h5764c6d_0 + - freetype=2.10.4=hca18f0e_2 + - gettext=0.19.8.1=h73d1719_1008 + - giflib=5.2.1=h36c2ea0_2 + - glib=2.72.1=h6239696_0 + - glib-tools=2.72.1=h6239696_0 + - gst-plugins-base=1.20.3=hf6a322e_0 + - gstreamer=1.20.3=hd4edc92_0 + - icu=70.1=h27087fc_0 + - iniconfig=1.1.1=pyh9f0ad1d_0 + - jack=1.9.18=h8c3723f_1002 + - jpeg=9e=h166bdaf_2 + - keyutils=1.6.1=h166bdaf_0 + - kiwisolver=1.4.4=py310hbf28c38_0 + - krb5=1.19.3=h3790be6_0 + - lcms2=2.12=hddcbb42_0 + - ld_impl_linux-64=2.36.1=hea4e1c9_2 + - lerc=4.0.0=h27087fc_0 + - libblas=3.9.0=16_linux64_openblas + - libbrotlicommon=1.0.9=h166bdaf_7 + - libbrotlidec=1.0.9=h166bdaf_7 + - libbrotlienc=1.0.9=h166bdaf_7 + - libcap=2.64=ha37c62d_0 + - libcblas=3.9.0=16_linux64_openblas + - libclang=14.0.6=default_h2e3cab8_0 + - libclang13=14.0.6=default_h3a83d3e_0 + - libcups=2.3.3=hf5a7f15_1 + - libdb=6.2.32=h9c3ff4c_0 + - libdeflate=1.13=h166bdaf_0 + - libedit=3.1.20191231=he28a2e2_2 + - libevent=2.1.10=h9b69904_4 + - libffi=3.4.2=h7f98852_5 + - libflac=1.3.4=h27087fc_0 + - libgcc-ng=12.1.0=h8d9b700_16 + - libgfortran-ng=12.1.0=h69a702a_16 + - libgfortran5=12.1.0=hdcd56e2_16 + - libglib=2.72.1=h2d90d5f_0 + - libgomp=12.1.0=h8d9b700_16 + - libiconv=1.16=h516909a_0 + - liblapack=3.9.0=16_linux64_openblas + - libllvm14=14.0.6=he0ac6c6_0 + - libnsl=2.0.0=h7f98852_0 + - libogg=1.3.4=h7f98852_1 + - libopenblas=0.3.21=pthreads_h78a6416_0 + - libopus=1.3.1=h7f98852_1 + - libpng=1.6.37=h753d276_3 + - libpq=14.4=hd77ab85_0 + - libsndfile=1.0.31=h9c3ff4c_1 + - libstdcxx-ng=12.1.0=ha89aaad_16 + - libtiff=4.4.0=h0e0dad5_3 + - libtool=2.4.6=h9c3ff4c_1008 + - libudev1=249=h166bdaf_4 + - libuuid=2.32.1=h7f98852_1000 + - libvorbis=1.3.7=h9c3ff4c_0 + - libwebp=1.2.3=h522a892_1 + - libwebp-base=1.2.3=h166bdaf_2 + - libxcb=1.13=h7f98852_1004 + - libxkbcommon=1.0.3=he3ba5ed_0 + - libxml2=2.9.14=h22db469_3 + - libzlib=1.2.12=h166bdaf_2 + - lz4-c=1.9.3=h9c3ff4c_1 + - matplotlib=3.5.2=py310hff52083_1 + - matplotlib-base=3.5.2=py310h5701ce4_1 + - munkres=1.1.4=pyh9f0ad1d_0 + - mysql-common=8.0.30=haf5c9bc_0 + - mysql-libs=8.0.30=h28c427c_0 + - ncurses=6.3=h27087fc_1 + - nspr=4.32=h9c3ff4c_1 + - nss=3.78=h2350873_0 + - numpy=1.23.1=py310h53a5b5f_0 + - openjpeg=2.4.0=hb52868f_1 + - openssl=1.1.1q=h166bdaf_0 + - packaging=21.3=pyhd8ed1ab_0 + - pcre=8.45=h9c3ff4c_0 + - pillow=9.2.0=py310he619898_0 + - pip=22.2.2=pyhd8ed1ab_0 + - pluggy=1.0.0=py310hff52083_3 + - ply=3.11=py_1 + - portaudio=19.6.0=h57a0ea0_5 + - pthread-stubs=0.4=h36c2ea0_1001 + - pulseaudio=14.0=h7f54b18_8 + - py=1.11.0=pyh6c4a22f_0 + - pyparsing=3.0.9=pyhd8ed1ab_0 + - pyqt=5.15.7=py310h29803b5_0 + - pyqt5-sip=12.11.0=py310hd8f1fbe_0 + - pytest=7.1.2=py310hff52083_0 + - python=3.10.5=h582c2e5_0_cpython + - python-dateutil=2.8.2=pyhd8ed1ab_0 + - python_abi=3.10=2_cp310 + - qt-main=5.15.4=ha5833f6_2 + - readline=8.1.2=h0f457ee_0 + - setuptools=63.4.2=py310hff52083_0 + - sip=6.6.2=py310hd8f1fbe_0 + - six=1.16.0=pyh6c4a22f_0 + - sqlite=3.39.2=h4ff8645_0 + - tk=8.6.12=h27826a3_0 + - toml=0.10.2=pyhd8ed1ab_0 + - tomli=2.0.1=pyhd8ed1ab_0 + - tornado=6.2=py310h5764c6d_0 + - tzdata=2022a=h191b570_0 + - unicodedata2=14.0.0=py310h5764c6d_1 + - wheel=0.37.1=pyhd8ed1ab_0 + - xcb-util=0.4.0=h166bdaf_0 + - xcb-util-image=0.4.0=h166bdaf_0 + - xcb-util-keysyms=0.4.0=h166bdaf_0 + - xcb-util-renderutil=0.3.9=h166bdaf_0 + - xcb-util-wm=0.4.1=h166bdaf_0 + - xorg-libxau=1.0.9=h7f98852_0 + - xorg-libxdmcp=1.1.3=h7f98852_0 + - xz=5.2.5=h516909a_1 + - zlib=1.2.12=h166bdaf_2 + - zstd=1.5.2=h8a70e8d_3 + diff --git a/utilities/conda_env_simple.yml b/utilities/conda_env_simple.yml new file mode 100644 index 0000000..436c5b1 --- /dev/null +++ b/utilities/conda_env_simple.yml @@ -0,0 +1,17 @@ +name: ess-env +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - python=3.10 + - pip + - numpy + - pandas + - matplotlib + - seaborn + - scipy + - biopython + - scikit-learn + + diff --git a/utilities/ec b/utilities/ec new file mode 100644 index 0000000..2eccb3d --- /dev/null +++ b/utilities/ec @@ -0,0 +1,8005 @@ +ec:1.1.1.1 alcohol dehydrogenase; aldehyde reductase; ADH; alcohol dehydrogenase (NAD); aliphatic alcohol dehydrogenase; ethanol dehydrogenase; NAD-dependent alcohol dehydrogenase; NAD-specific aromatic alcohol dehydrogenase; NADH-alcohol dehydrogenase; NADH-aldehyde dehydrogenase; primary alcohol dehydrogenase; yeast alcohol dehydrogenase +ec:1.1.1.2 alcohol dehydrogenase (NADP+); aldehyde reductase (NADPH2); NADP-alcohol dehydrogenase; NADP+-aldehyde reductase; NADP+-dependent aldehyde reductase; NADPH-aldehyde reductase; NADPH-dependent aldehyde reductase; nonspecific succinic semialdehyde reductase; ALR 1; low-Km aldehyde reductase; high-Km aldehyde reductase; alcohol dehydrogenase (NADP) +ec:1.1.1.3 homoserine dehydrogenase; HSDH; HSD +ec:1.1.1.4 (R,R)-butanediol dehydrogenase; butyleneglycol dehydrogenase; D-butanediol dehydrogenase; D-(-)-butanediol dehydrogenase; butylene glycol dehydrogenase; diacetyl (acetoin) reductase; D-aminopropanol dehydrogenase; 1-amino-2-propanol dehydrogenase; 2,3-butanediol dehydrogenase; D-1-amino-2-propanol dehydrogenase; (R)-diacetyl reductase; (R)-2,3-butanediol dehydrogenase; D-1-amino-2-propanol:NAD+ oxidoreductase; 1-amino-2-propanol oxidoreductase; aminopropanol oxidoreductase +ec:1.1.1.5 Transferred to 1.1.1.303 and 1.1.1.304 +ec:1.1.1.6 glycerol dehydrogenase; glycerin dehydrogenase; NAD+-linked glycerol dehydrogenase +ec:1.1.1.7 propanediol-phosphate dehydrogenase; PDP dehydrogenase; 1,2-propanediol-1-phosphate:NAD+ oxidoreductase; propanediol phosphate dehydrogenase +ec:1.1.1.8 glycerol-3-phosphate dehydrogenase (NAD+); alpha-glycerol phosphate dehydrogenase (NAD+); alpha-glycerophosphate dehydrogenase (NAD+); glycerol 1-phosphate dehydrogenase; glycerol phosphate dehydrogenase (NAD+); glycerophosphate dehydrogenase (NAD+); hydroglycerophosphate dehydrogenase; L-alpha-glycerol phosphate dehydrogenase; L-alpha-glycerophosphate dehydrogenase; L-glycerol phosphate dehydrogenase; L-glycerophosphate dehydrogenase (ambiguous); NAD+-alpha-glycerophosphate dehydrogenase; NAD+-dependent glycerol phosphate dehydrogenase; NAD+-dependent glycerol-3-phosphate dehydrogenase; NAD+-L-glycerol-3-phosphate dehydrogenase; NAD+-linked glycerol 3-phosphate dehydrogenase; NADH-dihydroxyacetone phosphate reductase; glycerol-3-phosphate dehydrogenase (NAD+); L-glycerol-3-phosphate dehydrogenase (ambiguous) +ec:1.1.1.9 D-xylulose reductase; NAD+-dependent xylitol dehydrogenase; xylitol dehydrogenase (ambiguous); erythritol dehydrogenase; 2,3-cis-polyol(DPN) dehydrogenase (C3-5); pentitol-DPN dehydrogenase (ambiguous); xylitol-2-dehydrogenase +ec:1.1.1.10 L-xylulose reductase; xylitol dehydrogenase (ambiguous) +ec:1.1.1.11 D-arabinitol 4-dehydrogenase; D-arabitol dehydrogenase; arabitol dehydrogenase +ec:1.1.1.12 L-arabinitol 4-dehydrogenase; pentitol-DPN dehydrogenase (ambiguous); L-arabitol dehydrogenase +ec:1.1.1.13 L-arabinitol 2-dehydrogenase; L-arabinitol dehydrogenase (ribulose-forming); L-arabinitol (ribulose-forming) dehydrogenase +ec:1.1.1.14 L-iditol 2-dehydrogenase; polyol dehydrogenase; sorbitol dehydrogenase; L-iditol:NAD+ 5-oxidoreductase; L-iditol (sorbitol) dehydrogenase; glucitol dehydrogenase; L-iditol:NAD+ oxidoreductase; NAD+-dependent sorbitol dehydrogenase; NAD+-sorbitol dehydrogenase +ec:1.1.1.15 D-iditol 2-dehydrogenase; D-sorbitol dehydrogenase +ec:1.1.1.16 galactitol 2-dehydrogenase; dulcitol dehydrogenase; AtuSorbD (gene name); galactitol:NAD+ 2-oxidoreductase +ec:1.1.1.17 mannitol-1-phosphate 5-dehydrogenase; hexose reductase; mannitol 1-phosphate dehydrogenase; D-mannitol-1-phosphate dehydrogenase; fructose 6-phosphate reductase +ec:1.1.1.18 inositol 2-dehydrogenase; myo-inositol 2-dehydrogenase; myo-inositol:NAD+ oxidoreductase; inositol dehydrogenase; myo-inositol dehydrogenase +ec:1.1.1.19 glucuronate reductase; L-hexonate:NADP dehydrogenase; TPN-L-gulonate dehydrogenase; NADP-L-gulonate dehydrogenase; D-glucuronate dehydrogenase; D-glucuronate reductase; L-glucuronate reductase (incorrect) +ec:1.1.1.20 glucuronolactone reductase; GRase; gulonolactone dehydrogenase +ec:1.1.1.21 aldose reductase; polyol dehydrogenase (NADP+); ALR2; alditol:NADP+ oxidoreductase; alditol:NADP+ 1-oxidoreductase; NADPH-aldopentose reductase; NADPH-aldose reductase; aldehyde reductase (misleading) +ec:1.1.1.22 UDP-glucose 6-dehydrogenase; UDP-glucose dehydrogenase; uridine diphosphoglucose dehydrogenase; UDPG dehydrogenase; UDPG:NAD oxidoreductase; UDP-alpha-D-glucose:NAD oxidoreductase; UDP-glucose:NAD+ oxidoreductase; uridine diphosphate glucose dehydrogenase; UDP-D-glucose dehydrogenase; uridine diphosphate D-glucose dehydrogenase +ec:1.1.1.23 histidinol dehydrogenase; L-histidinol dehydrogenase +ec:1.1.1.24 quinate/shikimate dehydrogenase (NAD+); quinate dehydrogenase (ambiguous); quinic dehydrogenase (ambiguous); quinate:NAD oxidoreductase; quinate 5-dehydrogenase (ambiguous); quinate:NAD+ 5-oxidoreductase +ec:1.1.1.25 shikimate dehydrogenase (NADP+); shikimate dehydrogenase; dehydroshikimic reductase; shikimate oxidoreductase; shikimate:NADP+ oxidoreductase; 5-dehydroshikimate reductase; shikimate 5-dehydrogenase; 5-dehydroshikimic reductase; DHS reductase; shikimate:NADP+ 5-oxidoreductase; AroE +ec:1.1.1.26 glyoxylate reductase; NADH-glyoxylate reductase; glyoxylic acid reductase; NADH-dependent glyoxylate reductase +ec:1.1.1.27 L-lactate dehydrogenase; lactic acid dehydrogenase; L(+)-nLDH; L-(+)-lactate dehydrogenase; L-lactic dehydrogenase; L-lactic acid dehydrogenase; lactate dehydrogenase; lactate dehydrogenase NAD+-dependent; lactic dehydrogenase; NAD+-lactate dehydrogenase +ec:1.1.1.28 D-lactate dehydrogenase; lactic acid dehydrogenase; lactic acid dehydrogenase; D-specific lactic dehydrogenase; D-(-)-lactate dehydrogenase (NAD+); D-lactic acid dehydrogenase; D-lactic dehydrogenase +ec:1.1.1.29 glycerate dehydrogenase; D-glycerate dehydrogenase; hydroxypyruvate reductase; (R)-glycerate:NAD+ oxidoreductase +ec:1.1.1.30 3-hydroxybutyrate dehydrogenase; NAD-beta-hydroxybutyrate dehydrogenase; hydroxybutyrate oxidoreductase; beta-hydroxybutyrate dehydrogenase; D-beta-hydroxybutyrate dehydrogenase; D-3-hydroxybutyrate dehydrogenase; D-(-)-3-hydroxybutyrate dehydrogenase; beta-hydroxybutyric acid dehydrogenase; 3-D-hydroxybutyrate dehydrogenase; beta-hydroxybutyric dehydrogenase +ec:1.1.1.31 3-hydroxyisobutyrate dehydrogenase; beta-hydroxyisobutyrate dehydrogenase +ec:1.1.1.32 mevaldate reductase; mevalonic dehydrogenase +ec:1.1.1.33 mevaldate reductase (NADPH); mevaldate (reduced nicotinamide adenine dinucleotide phosphate) reductase; mevaldate reductase (NADPH) +ec:1.1.1.34 hydroxymethylglutaryl-CoA reductase (NADPH); hydroxymethylglutaryl coenzyme A reductase (reduced nicotinamide adenine dinucleotide phosphate); 3-hydroxy-3-methylglutaryl-CoA reductase (ambiguous); beta-hydroxy-beta-methylglutaryl coenzyme A reductase (ambiguous); hydroxymethylglutaryl CoA reductase (NADPH); S-3-hydroxy-3-methylglutaryl-CoA reductase (ambiguous); NADPH-hydroxymethylglutaryl-CoA reductase; HMGCoA reductase-mevalonate:NADP-oxidoreductase (acetylating-CoA); 3-hydroxy-3-methylglutaryl CoA reductase (NADPH); hydroxymethylglutaryl-CoA reductase (NADPH2) +ec:1.1.1.35 3-hydroxyacyl-CoA dehydrogenase; beta-hydroxyacyl dehydrogenase; beta-keto-reductase; 3-keto reductase; 3-hydroxyacyl coenzyme A dehydrogenase; beta-hydroxyacyl-coenzyme A synthetase; beta-hydroxyacylcoenzyme A dehydrogenase; beta-hydroxybutyrylcoenzyme A dehydrogenase; 3-hydroxyacetyl-coenzyme A dehydrogenase; L-3-hydroxyacyl coenzyme A dehydrogenase; L-3-hydroxyacyl CoA dehydrogenase; beta-hydroxyacyl CoA dehydrogenase; 3beta-hydroxyacyl coenzyme A dehydrogenase; 3-hydroxybutyryl-CoA dehydrogenase; beta-ketoacyl-CoA reductase; beta-hydroxy acid dehydrogenase; 3-L-hydroxyacyl-CoA dehydrogenase; 3-hydroxyisobutyryl-CoA dehydrogenase; 1-specific DPN-linked beta-hydroxybutyric dehydrogenase +ec:1.1.1.36 acetoacetyl-CoA reductase; acetoacetyl coenzyme A reductase; hydroxyacyl coenzyme-A dehydrogenase; NADP-linked acetoacetyl CoA reductase; NADPH:acetoacetyl-CoA reductase; D(-)-beta-hydroxybutyryl CoA-NADP oxidoreductase; short chain beta-ketoacetyl(acetoacetyl)-CoA reductase; beta-ketoacyl-CoA reductase; D-3-hydroxyacyl-CoA reductase; (R)-3-hydroxyacyl-CoA dehydrogenase +ec:1.1.1.37 malate dehydrogenase; malic dehydrogenase; L-malate dehydrogenase; NAD-L-malate dehydrogenase; malic acid dehydrogenase; NAD-dependent malic dehydrogenase; NAD-malate dehydrogenase; NAD-malic dehydrogenase; malate (NAD) dehydrogenase; NAD-dependent malate dehydrogenase; NAD-specific malate dehydrogenase; NAD-linked malate dehydrogenase; MDH (ambiguous); L-malate-NAD+ oxidoreductase +ec:1.1.1.38 malate dehydrogenase (oxaloacetate-decarboxylating); 'malic' enzyme (ambiguous); pyruvic-malic carboxylase (ambiguous); NAD+-specific malic enzyme; NAD+-malic enzyme; NAD+-linked malic enzyme +ec:1.1.1.39 malate dehydrogenase (decarboxylating); 'malic' enzyme (ambiguous); pyruvic-malic carboxylase (ambiguous); NAD-specific malic enzyme (ambiguous); NAD-malic enzyme (ambiguous); malate dehydrogenase (decarboxylating) (ambiguous) +ec:1.1.1.40 malate dehydrogenase (oxaloacetate-decarboxylating) (NADP+); 'malic' enzyme (ambiguous); pyruvic-malic carboxylase (ambiguous); malate dehydrogenase (decarboxylating, NADP+); NADP+-linked decarboxylating malic enzyme; NADP+-malic enzyme; NADP+-specific malic enzyme; NADP+-specific malate dehydrogenase; malate dehydrogenase (NADP+, decarboxylating); L-malate:NADP+ oxidoreductase +ec:1.1.1.41 isocitrate dehydrogenase (NAD+); isocitric dehydrogenase; beta-ketoglutaric-isocitric carboxylase; isocitric acid dehydrogenase; NAD dependent isocitrate dehydrogenase; NAD isocitrate dehydrogenase; NAD-linked isocitrate dehydrogenase; NAD-specific isocitrate dehydrogenase; NAD isocitric dehydrogenase; isocitrate dehydrogenase (NAD); IDH (ambiguous); nicotinamide adenine dinucleotide isocitrate dehydrogenase +ec:1.1.1.42 isocitrate dehydrogenase (NADP+); oxalosuccinate decarboxylase; oxalsuccinic decarboxylase; isocitrate (NADP) dehydrogenase; isocitrate (nicotinamide adenine dinucleotide phosphate) dehydrogenase; NADP-specific isocitrate dehydrogenase; NADP-linked isocitrate dehydrogenase; NADP-dependent isocitrate dehydrogenase; NADP isocitric dehydrogenase; isocitrate dehydrogenase (NADP-dependent); NADP-dependent isocitric dehydrogenase; triphosphopyridine nucleotide-linked isocitrate dehydrogenase-oxalosuccinate carboxylase; NADP+-linked isocitrate dehydrogenase; IDH (ambiguous); dual-cofactor-specific isocitrate dehydrogenase; NADP+-ICDH; NADP+-IDH; IDP; IDP1; IDP2; IDP3 +ec:1.1.1.43 phosphogluconate 2-dehydrogenase; 6-phosphogluconic dehydrogenase; phosphogluconate dehydrogenase; gluconate 6-phosphate dehydrogenase; 6-phosphogluconate dehydrogenase (NAD+); 2-keto-6-phosphogluconate reductase +ec:1.1.1.44 phosphogluconate dehydrogenase (NADP+-dependent, decarboxylating); phosphogluconic acid dehydrogenase; 6-phosphogluconic dehydrogenase; 6-phosphogluconic carboxylase; 6-phosphogluconate dehydrogenase (decarboxylating); 6-phospho-D-gluconate dehydrogenase +ec:1.1.1.45 L-gulonate 3-dehydrogenase; L-3-aldonate dehydrogenase; L-3-aldonic dehydrogenase; L-gulonic acid dehydrogenase; L-beta-hydroxyacid dehydrogenase; L-beta-hydroxy-acid-NAD+-oxidoreductase; L-3-hydroxyacid dehydrogenase +ec:1.1.1.46 L-arabinose 1-dehydrogenase +ec:1.1.1.47 glucose 1-dehydrogenase [NAD(P)+]; D-glucose dehydrogenase (NAD(P)+); hexose phosphate dehydrogenase; beta-D-glucose:NAD(P)+ 1-oxidoreductase; glucose 1-dehydrogenase +ec:1.1.1.48 D-galactose 1-dehydrogenase; D-galactose dehydrogenase; beta-galactose dehydrogenase (ambiguous); NAD+-dependent D-galactose dehydrogenase +ec:1.1.1.49 glucose-6-phosphate dehydrogenase (NADP+); NADP-glucose-6-phosphate dehydrogenase; Zwischenferment; D-glucose 6-phosphate dehydrogenase; glucose 6-phosphate dehydrogenase (NADP); NADP-dependent glucose 6-phosphate dehydrogenase; 6-phosphoglucose dehydrogenase; Entner-Doudoroff enzyme; glucose-6-phosphate 1-dehydrogenase; G6PDH; GPD; glucose-6-phosphate dehydrogenase +ec:1.1.1.50 3alpha-hydroxysteroid 3-dehydrogenase (Si-specific); hydroxyprostaglandin dehydrogenase; 3alpha-hydroxysteroid oxidoreductase; sterognost 3alpha; 3alpha-hydroxysteroid dehydrogenase (B-specific); 3alpha-hydroxysteroid 3-dehydrogenase (B-specific); 3alpha-hydroxysteroid:NAD(P)+ 3-oxidoreductase (B-specific) +ec:1.1.1.51 3(or 17)beta-hydroxysteroid dehydrogenase; beta-hydroxy steroid dehydrogenase; 17-ketoreductase; 17beta-hydroxy steroid dehydrogenase; 3beta-hydroxysteroid dehydrogenase; 3beta-hydroxy steroid dehydrogenase +ec:1.1.1.52 3alpha-hydroxycholanate dehydrogenase (NAD+); alpha-hydroxy-cholanate dehydrogenase; lithocholate:NAD+ oxidoreductase; 3alpha-hydroxycholanate dehydrogenase +ec:1.1.1.53 3alpha(or 20beta)-hydroxysteroid dehydrogenase; cortisone reductase; (R)-20-hydroxysteroid dehydrogenase; 20beta-hydroxy steroid dehydrogenase; Delta4-3-ketosteroid hydrogenase; 20beta-hydroxysteroid dehydrogenase; 3alpha,20beta-hydroxysteroid:NAD+-oxidoreductase; NADH-20beta-hydroxysteroid dehydrogenase; 20beta-HSD +ec:1.1.1.54 allyl-alcohol dehydrogenase +ec:1.1.1.55 lactaldehyde reductase (NADPH); lactaldehyde (reduced nicotinamide adenine dinucleotide phosphate) reductase; NADP+-1,2-propanediol dehydrogenase; propanediol dehydrogenase; 1,2-propanediol:NADP+ oxidoreductase; lactaldehyde reductase (NADPH) +ec:1.1.1.56 ribitol 2-dehydrogenase; adonitol dehydrogenase; ribitol dehydrogenase A (wild type); ribitol dehydrogenase B (mutant enzyme with different properties); ribitol dehydrogenase D (mutant enzyme with different properties) +ec:1.1.1.57 fructuronate reductase; mannonate oxidoreductase; mannonic dehydrogenase; D-mannonate dehydrogenase; D-mannonate:NAD+ oxidoreductase +ec:1.1.1.58 tagaturonate reductase; altronic oxidoreductase; altronate oxidoreductase; TagUAR; altronate dehydrogenase; D-tagaturonate reductase +ec:1.1.1.59 3-hydroxypropionate dehydrogenase +ec:1.1.1.60 2-hydroxy-3-oxopropionate reductase; tartronate semialdehyde reductase; (R)-glycerate:NAD(P)+ oxidoreductase +ec:1.1.1.61 4-hydroxybutyrate dehydrogenase; gamma-hydroxybutyrate dehydrogenase +ec:1.1.1.62 17beta-estradiol 17-dehydrogenase; 20alpha-hydroxysteroid dehydrogenase; 17beta,20alpha-hydroxysteroid dehydrogenase; 17beta-estradiol dehydrogenase; estradiol dehydrogenase; estrogen 17-oxidoreductase; 17beta-HSD; HSD17B7 +ec:1.1.1.63 Transferred to 1.1.1.239 +ec:1.1.1.64 testosterone 17beta-dehydrogenase (NADP+); 17-ketoreductase; NADP-dependent testosterone-17beta-oxidoreductase; testosterone 17beta-dehydrogenase (NADP) +ec:1.1.1.65 pyridoxine 4-dehydrogenase; pyridoxin dehydrogenase; pyridoxol dehydrogenase; pyridoxine dehydrogenase +ec:1.1.1.66 omega-hydroxydecanoate dehydrogenase +ec:1.1.1.67 mannitol 2-dehydrogenase; D-mannitol dehydrogenase; mannitol dehydrogenase +ec:1.1.1.68 Transferred to 1.5.1.20 +ec:1.1.1.69 gluconate 5-dehydrogenase; 5-keto-D-gluconate 5-reductase; 5-keto-D-gluconate 5-reductase; 5-ketogluconate 5-reductase; 5-ketogluconate reductase; 5-keto-D-gluconate reductase +ec:1.1.1.70 Deleted entry +ec:1.1.1.71 alcohol dehydrogenase [NAD(P)+]; retinal reductase (ambiguous); aldehyde reductase (NADPH/NADH); alcohol dehydrogenase [NAD(P)] +ec:1.1.1.72 glycerol dehydrogenase (NADP+); glycerol dehydrogenase (NADP) +ec:1.1.1.73 octanol dehydrogenase; 1-octanol dehydrogenase; octanol:NAD+ oxidoreductase +ec:1.1.1.74 Deleted entry +ec:1.1.1.75 (R)-aminopropanol dehydrogenase; L-aminopropanol dehydrogenase; 1-aminopropan-2-ol-NAD+ dehydrogenase; L(+)-1-aminopropan-2-ol:NAD+ oxidoreductase; 1-aminopropan-2-ol-dehydrogenase; DL-1-aminopropan-2-ol: NAD+ dehydrogenase; L(+)-1-aminopropan-2-ol-NAD+/NADP+ oxidoreductase +ec:1.1.1.76 (S,S)-butanediol dehydrogenase; L-butanediol dehydrogenase; L-BDH; L(+)-2,3-butanediol dehydrogenase (L-acetoin forming); (S)-acetoin reductase [(S,S)-butane-2,3-diol forming] +ec:1.1.1.77 lactaldehyde reductase; propanediol:nicotinamide adenine dinucleotide (NAD) oxidoreductase; L-lactaldehyde:propanediol oxidoreductase +ec:1.1.1.78 methylglyoxal reductase (NADH); methylglyoxal reductase; D-lactaldehyde dehydrogenase; methylglyoxal reductase (NADH-dependent) +ec:1.1.1.79 glyoxylate reductase (NADP+); NADPH-glyoxylate reductase; glyoxylate reductase (NADP) +ec:1.1.1.80 isopropanol dehydrogenase (NADP+); isopropanol dehydrogenase (NADP+) +ec:1.1.1.81 hydroxypyruvate reductase; beta-hydroxypyruvate reductase; NADH:hydroxypyruvate reductase; D-glycerate dehydrogenase +ec:1.1.1.82 malate dehydrogenase (NADP+); NADP+-malic enzyme; NADP+-malate dehydrogenase; malic dehydrogenase (nicotinamide adenine dinucleotide phosphate); malate NADP+ dehydrogenase; NADP+ malate dehydrogenase; NADP+-linked malate dehydrogenase; malate dehydrogenase (NADP+) +ec:1.1.1.83 D-malate dehydrogenase (decarboxylating); D-malate dehydrogenase; D-malic enzyme; bifunctional L(+)-tartrate dehydrogenase-D(+)-malate (decarboxylating) +ec:1.1.1.84 dimethylmalate dehydrogenase; beta,beta-dimethylmalate dehydrogenase +ec:1.1.1.85 3-isopropylmalate dehydrogenase; beta-isopropylmalic enzyme; beta-isopropylmalate dehydrogenase; threo-Ds-3-isopropylmalate dehydrogenase; 3-carboxy-2-hydroxy-4-methylpentanoate:NAD+ oxidoreductase +ec:1.1.1.86 ketol-acid reductoisomerase (NADP+); dihydroxyisovalerate dehydrogenase (isomerizing); acetohydroxy acid isomeroreductase; ketol acid reductoisomerase; alpha-keto-beta-hydroxylacyl reductoisomerase; 2-hydroxy-3-keto acid reductoisomerase; acetohydroxy acid reductoisomerase; acetolactate reductoisomerase; dihydroxyisovalerate (isomerizing) dehydrogenase; isomeroreductase; reductoisomerase; ketol-acid reductoisomerase; (R)-2,3-dihydroxy-3-methylbutanoate:NADP+ oxidoreductase (isomerizing) +ec:1.1.1.87 homoisocitrate dehydrogenase; 2-hydroxy-3-carboxyadipate dehydrogenase; 3-carboxy-2-hydroxyadipate dehydrogenase; homoisocitric dehydrogenase; (-)-1-hydroxy-1,2,4-butanetricarboxylate:NAD+ oxidoreductase (decarboxylating); 3-carboxy-2-hydroxyadipate:NAD+ oxidoreductase (decarboxylating); HICDH +ec:1.1.1.88 hydroxymethylglutaryl-CoA reductase; beta-hydroxy-beta-methylglutaryl coenzyme A reductase (ambiguous); beta-hydroxy-beta-methylglutaryl CoA-reductase (ambiguous); 3-hydroxy-3-methylglutaryl coenzyme A reductase (ambiguous); hydroxymethylglutaryl coenzyme A reductase (ambiguous) +ec:1.1.1.89 Deleted entry +ec:1.1.1.90 aryl-alcohol dehydrogenase; p-hydroxybenzyl alcohol dehydrogenase; benzyl alcohol dehydrogenase; coniferyl alcohol dehydrogenase +ec:1.1.1.91 aryl-alcohol dehydrogenase (NADP+); aryl alcohol dehydrogenase (nicotinamide adenine dinucleotide phosphate); coniferyl alcohol dehydrogenase; NADPH-linked benzaldehyde reductase; aryl-alcohol dehydrogenase (NADP+) +ec:1.1.1.92 oxaloglycolate reductase (decarboxylating) +ec:1.1.1.93 tartrate dehydrogenase; mesotartrate dehydrogenase +ec:1.1.1.94 glycerol-3-phosphate dehydrogenase [NAD(P)+]; L-glycerol-3-phosphate:NAD(P) oxidoreductase; glycerol phosphate dehydrogenase (nicotinamide adenine dinucleotide (phosphate)); glycerol 3-phosphate dehydrogenase (NADP); glycerol-3-phosphate dehydrogenase [NAD(P)] +ec:1.1.1.95 phosphoglycerate dehydrogenase; PHGDH (gene name); D-3-phosphoglycerate:NAD+ oxidoreductase; alpha-phosphoglycerate dehydrogenase; 3-phosphoglycerate dehydrogenase; 3-phosphoglyceric acid dehydrogenase; D-3-phosphoglycerate dehydrogenase; glycerate 3-phosphate dehydrogenase; glycerate-1,3-phosphate dehydrogenase; phosphoglycerate oxidoreductase; phosphoglyceric acid dehydrogenase; SerA; 3-phosphoglycerate:NAD+ 2-oxidoreductase; SerA 3PG dehydrogenase; 3PHP reductase +ec:1.1.1.96 diiodophenylpyruvate reductase; aromatic alpha-keto acid; KAR; 2-oxo acid reductase +ec:1.1.1.97 3-hydroxybenzyl-alcohol dehydrogenase; m-hydroxybenzyl alcohol dehydrogenase; m-hydroxybenzyl alcohol (NADP+) dehydrogenase; m-hydroxybenzylalcohol dehydrogenase +ec:1.1.1.98 (R)-2-hydroxy-fatty-acid dehydrogenase; D-2-hydroxy fatty acid dehydrogenase; 2-hydroxy fatty acid oxidase +ec:1.1.1.99 (S)-2-hydroxy-fatty-acid dehydrogenase; dehydrogenase, L-2-hydroxy fatty acid; L-2-hydroxy fatty acid dehydrogenase; 2-hydroxy fatty acid oxidase +ec:1.1.1.100 3-oxoacyl-[acyl-carrier-protein] reductase; beta-ketoacyl-[acyl-carrier protein](ACP) reductase; beta-ketoacyl acyl carrier protein (ACP) reductase; beta-ketoacyl reductase; beta-ketoacyl thioester reductase; beta-ketoacyl-ACP reductase; beta-ketoacyl-acyl carrier protein reductase; 3-ketoacyl acyl carrier protein reductase; NADPH-specific 3-oxoacyl-[acylcarrier protein]reductase; 3-oxoacyl-[ACP]reductase; (3R)-3-hydroxyacyl-[acyl-carrier-protein]:NADP+ oxidoreductase +ec:1.1.1.101 acylglycerone-phosphate reductase; palmitoyldihydroxyacetone-phosphate reductase; palmitoyl dihydroxyacetone phosphate reductase; palmitoyl-dihydroxyacetone-phosphate reductase; acyldihydroxyacetone phosphate reductase; palmitoyl dihydroxyacetone phosphate reductase +ec:1.1.1.102 3-dehydrosphinganine reductase; D-3-dehydrosphinganine reductase; D-3-oxosphinganine reductase; DSR; 3-oxosphinganine reductase; 3-oxosphinganine:NADPH oxidoreductase; D-3-oxosphinganine:B-NADPH oxidoreductase +ec:1.1.1.103 L-threonine 3-dehydrogenase; L-threonine dehydrogenase; threonine 3-dehydrogenase; threonine dehydrogenase; TDH +ec:1.1.1.104 4-oxoproline reductase; cis-hydroxy-L-proline oxidase +ec:1.1.1.105 all-trans-retinol dehydrogenase (NAD+); retinol (vitamin A1) dehydrogenase; MDR; microsomal retinol dehydrogenase; retinol dehydrogenase (misleading); retinal reductase (ambiguous); retinene reductase; epidermal retinol dehydrogenase 2; SDR16C5 (gene name); RDH16 (gene name) +ec:1.1.1.106 pantoate 4-dehydrogenase; pantoate dehydrogenase; pantothenase; D-pantoate:NAD+ 4-oxidoreductase +ec:1.1.1.107 pyridoxal 4-dehydrogenase; pyridoxal dehydrogenase +ec:1.1.1.108 carnitine 3-dehydrogenase +ec:1.1.1.109 Transferred to 1.3.1.28 +ec:1.1.1.110 aromatic 2-oxoacid reductase; (R)-aromatic lactate dehydrogenase; (R)-4-hydroxyphenyllactate dehydrogenase; indolelactate:NAD+ oxidoreductase; indolelactate dehydrogenase; fldH (gene name); (indol-3-yl)lactate:NAD+ oxidoreductase +ec:1.1.1.111 3-(imidazol-5-yl)lactate dehydrogenase; imidazol-5-yl lactate dehydrogenase +ec:1.1.1.112 indanol dehydrogenase +ec:1.1.1.113 L-xylose 1-dehydrogenase; L-xylose dehydrogenase; NADPH-xylose reductase +ec:1.1.1.114 apiose 1-reductase; D-apiose reductase; D-apiitol reductase +ec:1.1.1.115 ribose 1-dehydrogenase (NADP+); D-ribose dehydrogenase (NADP+); NADP+-pentose-dehydrogenase; ribose 1-dehydrogenase (NADP+) +ec:1.1.1.116 D-arabinose 1-dehydrogenase (NAD+); NAD+-pentose-dehydrogenase; arabinose(fucose)dehydrogenase +ec:1.1.1.117 D-arabinose 1-dehydrogenase [NAD(P)+]; D-arabinose 1-dehydrogenase [NAD(P)] +ec:1.1.1.118 glucose 1-dehydrogenase (NAD+); D-glucose:NAD oxidoreductase; D-aldohexose dehydrogenase; glucose 1-dehydrogenase (NAD) +ec:1.1.1.119 glucose 1-dehydrogenase (NADP+); nicotinamide adenine dinucleotide phosphate-linked aldohexose dehydrogenase; NADP+-linked aldohexose dehydrogenase; NADP+-dependent glucose dehydrogenase; glucose 1-dehydrogenase (NADP+) +ec:1.1.1.120 galactose 1-dehydrogenase (NADP+); D-galactose dehydrogenase (NADP+); galactose 1-dehydrogenase (NADP) +ec:1.1.1.121 aldose 1-dehydrogenase (NAD+); aldose dehydrogenase; D-aldohexose dehydrogenase; aldose 1-dehydrogenase +ec:1.1.1.122 D-threo-aldose 1-dehydrogenase; L-fucose dehydrogenase; (2S,3R)-aldose dehydrogenase; dehydrogenase, L-fucose; L-fucose (D-arabinose) dehydrogenase +ec:1.1.1.123 sorbose 5-dehydrogenase (NADP+); 5-ketofructose reductase; 5-keto-D-fructose reductase; sorbose (nicotinamide adenine dinucleotide phosphate) dehydrogenase; reduced nicotinamide adenine dinucleotide phosphate-linked reductase; sorbose 5-dehydrogenase (NADP+) +ec:1.1.1.124 fructose 5-dehydrogenase (NADP+); 5-ketofructose reductase (NADP+); 5-keto-D-fructose reductase (NADP+); fructose 5-(nicotinamide adenine dinucleotide phosphate) dehydrogenase; D-(-)fructose:(NADP+) 5-oxidoreductase; fructose 5-dehydrogenase (NADP+) +ec:1.1.1.125 2-deoxy-D-gluconate 3-dehydrogenase; 2-deoxygluconate dehydrogenase +ec:1.1.1.126 2-dehydro-3-deoxy-D-gluconate 6-dehydrogenase; 2-keto-3-deoxy-D-gluconate dehydrogenase (ambiguous); 2-keto-3-deoxygluconate dehydrogenase (ambiguous) +ec:1.1.1.127 2-dehydro-3-deoxy-D-gluconate 5-dehydrogenase; 2-keto-3-deoxygluconate 5-dehydrogenase; 2-keto-3-deoxy-D-gluconate dehydrogenase (ambiguous); 2-keto-3-deoxygluconate (nicotinamide adenine dinucleotide (phosphate)) dehydrogenase; 2-keto-3-deoxy-D-gluconate (3-deoxy-D-glycero-2,5-hexodiulosonic acid) dehydrogenase (ambiguous) +ec:1.1.1.128 Deleted entry +ec:1.1.1.129 L-threonate 3-dehydrogenase; threonate dehydrogenase; L-threonic acid dehydrogenase +ec:1.1.1.130 3-dehydro-L-gulonate 2-dehydrogenase; 3-keto-L-gulonate dehydrogenase; 3-ketogulonate dehydrogenase; 3-keto-L-gulonate dehydrogenase; 3-ketogulonate dehydrogenase +ec:1.1.1.131 mannuronate reductase; mannonate dehydrogenase; mannonate (nicotinamide adenine dinucleotide (phosphate))dehydrogenase; mannonate dehydrogenase; mannuronate reductase; mannonate dehydrogenase (NAD(P)+); D-mannonate:nicotinamide adenine dinucleotide (phosphate oxidoreductase (D-mannuronate-forming)) +ec:1.1.1.132 GDP-mannose 6-dehydrogenase; guanosine diphosphomannose dehydrogenase; GDP-mannose dehydrogenase; guanosine diphosphomannose dehydrogenase; guanosine diphospho-D-mannose dehydrogenase +ec:1.1.1.133 dTDP-4-dehydrorhamnose reductase; dTDP-4-keto-L-rhamnose reductase; dTDP-4-ketorhamnose reductase; TDP-4-keto-rhamnose reductase; thymidine diphospho-4-ketorhamnose reductase; dTDP-6-deoxy-L-mannose:NADP+ 4-oxidoreductase; dTDP-6-deoxy-beta-L-mannose:NADP+ 4-oxidoreductase +ec:1.1.1.134 dTDP-6-deoxy-L-talose 4-dehydrogenase (NADP+); thymidine diphospho-6-deoxy-L-talose dehydrogenase; TDP-6-deoxy-L-talose dehydrogenase; dTDP-6-deoxy-L-talose dehydrogenase (4-reductase); dTDP-6-deoxy-L-talose:NADP+ 4-oxidoreductase +ec:1.1.1.135 GDP-6-deoxy-D-talose 4-dehydrogenase; guanosine diphospho-6-deoxy-D-talose dehydrogenase; GDP-6-deoxy-D-talose:NAD(P)+ 4-oxidoreductase +ec:1.1.1.136 UDP-N-acetylglucosamine 6-dehydrogenase; uridine diphosphoacetylglucosamine dehydrogenase; UDP-acetylglucosamine dehydrogenase; UDP-2-acetamido-2-deoxy-D-glucose:NAD oxidoreductase; UDP-GlcNAc dehydrogenase; WbpA; WbpO +ec:1.1.1.137 ribitol-5-phosphate 2-dehydrogenase; ribitol 5-phosphate dehydrogenase +ec:1.1.1.138 mannitol 2-dehydrogenase (NADP+); mannitol 2-dehydrogenase (NADP+) +ec:1.1.1.139 Deleted entry +ec:1.1.1.140 sorbitol-6-phosphate 2-dehydrogenase; ketosephosphate reductase; ketosephosphate reductase; D-sorbitol 6-phosphate dehydrogenase; D-sorbitol-6-phosphate dehydrogenase; sorbitol-6-P-dehydrogenase; D-glucitol-6-phosphate dehydrogenase +ec:1.1.1.141 15-hydroxyprostaglandin dehydrogenase (NAD+); NAD+-dependent 15-hydroxyprostaglandin dehydrogenase (type I); PGDH; 11alpha,15-dihydroxy-9-oxoprost-13-enoate:NAD+ 15-oxidoreductase; 15-OH-PGDH; 15-hydroxyprostaglandin dehydrogenase; 15-hydroxyprostanoic dehydrogenase; NAD+-specific 15-hydroxyprostaglandin dehydrogenase; prostaglandin dehydrogenase; 15-hydroxyprostaglandin dehydrogenase (NAD+); (5Z,13E)-(15S)-11alpha,15-dihydroxy-9-oxoprost-13-enoate:NAD+ 15-oxidoreductase +ec:1.1.1.142 D-pinitol dehydrogenase; 5D-5-O-methyl-chiro-inositol:NADP+ oxidoreductase +ec:1.1.1.143 sequoyitol dehydrogenase; D-pinitol dehydrogenase +ec:1.1.1.144 perillyl-alcohol dehydrogenase; perillyl alcohol dehydrogenase +ec:1.1.1.145 3beta-hydroxy-Delta5-steroid dehydrogenase; progesterone reductase; Delta5-3beta-hydroxysteroid dehydrogenase; 3beta-hydroxy-5-ene steroid dehydrogenase; 3beta-hydroxy steroid dehydrogenase/isomerase; 3beta-hydroxy-Delta5-C27-steroid dehydrogenase/isomerase; 3beta-hydroxy-Delta5-C27-steroid oxidoreductase; 3beta-hydroxy-5-ene-steroid oxidoreductase; steroid-Delta5-3beta-ol dehydrogenase; 3beta-HSDH; 5-ene-3-beta-hydroxysteroid dehydrogenase; 3beta-hydroxy-5-ene-steroid dehydrogenase +ec:1.1.1.146 11beta-hydroxysteroid dehydrogenase; corticosteroid 11beta-dehydrogenase; beta-hydroxysteroid dehydrogenase; 11beta-hydroxy steroid dehydrogenase; corticosteroid 11-reductase; dehydrogenase, 11beta-hydroxy steroid +ec:1.1.1.147 16alpha-hydroxysteroid dehydrogenase; 16alpha-hydroxy steroid dehydrogenase +ec:1.1.1.148 estradiol 17alpha-dehydrogenase; 17alpha-estradiol dehydrogenase; 17alpha-hydroxy steroid dehydrogenase; 17alpha-hydroxy steroid oxidoreductase; 17alpha-hydroxysteroid oxidoreductase; estradiol 17alpha-oxidoreductase +ec:1.1.1.149 20alpha-hydroxysteroid dehydrogenase; 20alpha-hydroxy steroid dehydrogenase; 20alpha-HSD; 20alpha-HSDH +ec:1.1.1.150 21-hydroxysteroid dehydrogenase (NAD+); 21-hydroxysteroid dehydrogenase (NAD+) +ec:1.1.1.151 21-hydroxysteroid dehydrogenase (NADP+); 21-hydroxy steroid dehydrogenase; 21-hydroxy steroid (nicotinamide adenine dinucleotide phosphate) dehydrogenase; 21-hydroxy steroid dehydrogenase (nicotinamide adenine dinucleotide phosphate); NADP+-21-hydroxysteroid dehydrogenase; 21-hydroxysteroid dehydrogenase (NADP+) +ec:1.1.1.152 3alpha-hydroxy-5beta-androstane-17-one 3alpha-dehydrogenase; etiocholanolone 3alpha-dehydrogenase; etiocholanolone 3alpha-dehydrogenase; 3alpha-hydroxy-5beta-steroid dehydrogenase +ec:1.1.1.153 sepiapterin reductase (L-erythro-7,8-dihydrobiopterin forming); SR +ec:1.1.1.154 ureidoglycolate dehydrogenase +ec:1.1.1.155 Deleted entry +ec:1.1.1.156 glycerol 2-dehydrogenase (NADP+); dihydroxyacetone reductase; dihydroxyacetone (reduced nicotinamide adenine dinucleotide phosphate) reductase; dihydroxyacetone reductase (NADPH); DHA oxidoreductase; glycerol 2-dehydrogenase (NADP+) +ec:1.1.1.157 3-hydroxybutyryl-CoA dehydrogenase; beta-hydroxybutyryl coenzyme A dehydrogenase; L(+)-3-hydroxybutyryl-CoA dehydrogenase; BHBD; dehydrogenase, L-3-hydroxybutyryl coenzyme A (nicotinamide adenine dinucleotide phosphate); L-(+)-3-hydroxybutyryl-CoA dehydrogenase; beta-hydroxybutyryl-CoA dehydrogenase +ec:1.1.1.158 Transferred to 1.3.1.98 +ec:1.1.1.159 7alpha-hydroxysteroid dehydrogenase; 7alpha-hydroxy steroid dehydrogenase; 7alpha-HSDH +ec:1.1.1.160 dihydrobunolol dehydrogenase; bunolol reductase +ec:1.1.1.161 Deleted entry +ec:1.1.1.162 erythrulose reductase; D-erythrulose reductase; erythritol:NADP+ oxidoreductase +ec:1.1.1.163 cyclopentanol dehydrogenase +ec:1.1.1.164 hexadecanol dehydrogenase +ec:1.1.1.165 2-alkyn-1-ol dehydrogenase +ec:1.1.1.166 hydroxycyclohexanecarboxylate dehydrogenase; dihydroxycyclohexanecarboxylate dehydrogenase; (-)t-3,t-4-dihydroxycyclohexane-c-1-carboxylate-NAD+ oxidoreductase +ec:1.1.1.167 hydroxymalonate dehydrogenase +ec:1.1.1.168 2-dehydropantolactone reductase (Re-specific); 2-oxopantoyl lactone reductase; ketopantoyl lactone reductase; 2-ketopantoyl lactone reductase; 2-dehydropantoyl-lactone reductase (A-specific); (R)-pantolactone:NADP+ oxidoreductase (A-specific); 2-dehydropantolactone reductase (A-specific) +ec:1.1.1.169 2-dehydropantoate 2-reductase; 2-oxopantoate reductase; 2-ketopantoate reductase; 2-ketopantoic acid reductase; ketopantoate reductase; ketopantoic acid reductase +ec:1.1.1.170 3beta-hydroxysteroid-4alpha-carboxylate 3-dehydrogenase (decarboxylating); 3beta-hydroxy-4beta-methylcholestenecarboxylate 3-dehydrogenase (decarboxylating); 3beta-hydroxy-4beta-methylcholestenoate dehydrogenase; sterol 4alpha-carboxylic decarboxylase; sterol-4alpha-carboxylate 3-dehydrogenase (decarboxylating) (ambiguous); ERG26 (gene name); NSDHL (gene name) +ec:1.1.1.171 Transferred to 1.5.1.20 +ec:1.1.1.172 2-oxoadipate reductase; 2-ketoadipate reductase; alpha-ketoadipate reductase; 2-ketoadipate reductase +ec:1.1.1.173 L-rhamnose 1-dehydrogenase +ec:1.1.1.174 cyclohexane-1,2-diol dehydrogenase +ec:1.1.1.175 D-xylose 1-dehydrogenase; NAD+-D-xylose dehydrogenase; D-xylose dehydrogenase; (NAD+)-linked D-xylose dehydrogenase +ec:1.1.1.176 12alpha-hydroxysteroid dehydrogenase; 12alpha-hydroxy steroid dehydrogenase; NAD+-dependent 12alpha-hydroxysteroid dehydrogenase; NADP+-12alpha-hydroxysteroid dehydrogenase +ec:1.1.1.177 glycerol-3-phosphate 1-dehydrogenase (NADP+); glycerol phosphate (nicotinamide adenine dinucleotide phosphate) dehydrogenase; L-glycerol 3-phosphate:NADP+ oxidoreductase; glycerin-3-phosphate dehydrogenase; NADPH-dependent glycerin-3-phosphate dehydrogenase; NADP-specific glycerol 3-phosphate 1-dehydrogenase +ec:1.1.1.178 3-hydroxy-2-methylbutyryl-CoA dehydrogenase; 2-methyl-3-hydroxybutyryl coenzyme A dehydrogenase; 2-methyl-3-hydroxybutyryl coenzyme A dehydrogenase; 2-methyl-3-hydroxy-butyryl CoA dehydrogenase +ec:1.1.1.179 D-xylose 1-dehydrogenase (NADP+, D-xylono-1,5-lactone-forming); D-xylose (nicotinamide adenine dinucleotide phosphate) dehydrogenase (ambiguous); D-xylose-NADP dehydrogenase (ambiguous); D-xylose:NADP+ oxidoreductase (ambiguous); D-xylose 1-dehydrogenase (NADP) (ambiguous) +ec:1.1.1.180 Deleted entry +ec:1.1.1.181 cholest-5-ene-3beta,7alpha-diol 3beta-dehydrogenase; 3beta-hydroxy-Delta5-C27-steroid oxidoreductase (ambiguous) +ec:1.1.1.182 Deleted entry +ec:1.1.1.183 geraniol dehydrogenase (NADP+) +ec:1.1.1.184 carbonyl reductase (NADPH); aldehyde reductase 1; prostaglandin 9-ketoreductase; xenobiotic ketone reductase; NADPH-dependent carbonyl reductase; ALR3; carbonyl reductase; nonspecific NADPH-dependent carbonyl reductase; carbonyl reductase (NADPH2) +ec:1.1.1.185 L-glycol dehydrogenase; glycol (nicotinamide adenine dinucleotide (phosphate)) dehydrogenase; L-(+)-glycol:NAD(P)+ oxidoreductase; L-glycol:NAD(P)+ dehydrogenase +ec:1.1.1.186 dTDP-galactose 6-dehydrogenase; thymidine-diphosphate-galactose dehydrogenase +ec:1.1.1.187 GDP-4-dehydro-D-rhamnose reductase; GDP-4-keto-6-deoxy-D-mannose reductase; GDP-4-keto-D-rhamnose reductase; guanosine diphosphate-4-keto-D-rhamnose reductase; GDP-6-deoxy-D-mannose:NAD(P)+ 4-oxidoreductase; GDP-6-deoxy-alpha-D-mannose:NAD(P)+ 4-oxidoreductase +ec:1.1.1.188 prostaglandin-F synthase; prostaglandin-D2 11-reductase; reductase, 15-hydroxy-11-oxoprostaglandin; PGD2 11-ketoreductase; PGF2alpha synthetase; prostaglandin 11-ketoreductase; prostaglandin D2-ketoreductase; prostaglandin F synthase; prostaglandin F synthetase; synthetase, prostaglandin F2alpha; PGF synthetase; NADPH-dependent prostaglandin D2 11-keto reductase; prostaglandin 11-keto reductase +ec:1.1.1.189 prostaglandin-E2 9-reductase; PGE2-9-OR; reductase, 15-hydroxy-9-oxoprostaglandin; 9-keto-prostaglandin E2 reductase; 9-ketoprostaglandin reductase; PGE-9-ketoreductase; PGE2 9-oxoreductase; PGE2-9-ketoreductase; prostaglandin 9-ketoreductase; prostaglandin E 9-ketoreductase; prostaglandin E2-9-oxoreductase +ec:1.1.1.190 indole-3-acetaldehyde reductase (NADH); indoleacetaldehyde reductase; indole-3-acetaldehyde reductase (NADH); indole-3-ethanol:NAD+ oxidoreductase +ec:1.1.1.191 indole-3-acetaldehyde reductase (NADPH); indoleacetaldehyde (reduced nicotinamide adenine dinucleotide phosphate) reductase; indole-3-acetaldehyde reductase (NADPH); indole-3-ethanol:NADP+ oxidoreductase +ec:1.1.1.192 long-chain-alcohol dehydrogenase; long-chain alcohol dehydrogenase; fatty alcohol oxidoreductase +ec:1.1.1.193 5-amino-6-(5-phosphoribosylamino)uracil reductase; aminodioxyphosphoribosylaminopyrimidine reductase +ec:1.1.1.194 coniferyl-alcohol dehydrogenase; CAD (ambiguous) +ec:1.1.1.195 cinnamyl-alcohol dehydrogenase; cinnamyl alcohol dehydrogenase; CAD (ambiguous) +ec:1.1.1.196 15-hydroxyprostaglandin-D dehydrogenase (NADP+); prostaglandin-D 15-dehydrogenase (NADP+); dehydrogenase, prostaglandin D2; NADP+-PGD2 dehydrogenase; dehydrogenase, 15-hydroxyprostaglandin (nicotinamide adenine dinucleotide phosphate); 15-hydroxy PGD2 dehydrogenase; 15-hydroxyprostaglandin dehydrogenase (NADP+); NADP+-dependent 15-hydroxyprostaglandin dehydrogenase; prostaglandin D2 dehydrogenase; NADP+-linked 15-hydroxyprostaglandin dehydrogenase; NADP+-specific 15-hydroxyprostaglandin dehydrogenase; NADP+-linked prostaglandin D2 dehydrogenase; 15-hydroxyprostaglandin-D dehydrogenase (NADP+) +ec:1.1.1.197 15-hydroxyprostaglandin dehydrogenase (NADP+); NADP-dependent 15-hydroxyprostaglandin dehydrogenase; NADP-linked 15-hydroxyprostaglandin dehydrogenase; NADP-specific 15-hydroxyprostaglandin dehydrogenase; type II 15-hydroxyprostaglandin dehydrogenase; 15-hydroxyprostaglandin dehydrogenase (NADP) +ec:1.1.1.198 (+)-borneol dehydrogenase; bicyclic monoterpenol dehydrogenase +ec:1.1.1.199 (S)-usnate reductase; L-usnic acid dehydrogenase +ec:1.1.1.200 aldose-6-phosphate reductase (NADPH); aldose 6-phosphate reductase; NADP+-dependent aldose 6-phosphate reductase; A6PR; aldose-6-P reductase; aldose-6-phosphate reductase; alditol 6-phosphate:NADP+ 1-oxidoreductase; aldose-6-phosphate reductase (NADPH) +ec:1.1.1.201 7beta-hydroxysteroid dehydrogenase (NADP+); NADP+-dependent 7beta-hydroxysteroid dehydrogenase; 7beta-hydroxysteroid dehydrogenase (NADP+) +ec:1.1.1.202 1,3-propanediol dehydrogenase; 3-hydroxypropionaldehyde reductase; 1,3-PD:NAD+ oxidoreductase; 1,3-propanediol:NAD+ oxidoreductase; 1,3-propanediol dehydrogenase +ec:1.1.1.203 uronate dehydrogenase; uronate:NAD-oxidoreductase; uronic acid dehydrogenase +ec:1.1.1.204 Transferred to 1.17.1.4 +ec:1.1.1.205 IMP dehydrogenase; inosine-5'-phosphate dehydrogenase; inosinic acid dehydrogenase; inosinate dehydrogenase; inosine 5'-monophosphate dehydrogenase; inosine monophosphate dehydrogenase; IMP oxidoreductase; inosine monophosphate oxidoreductase +ec:1.1.1.206 tropinone reductase I; tropine dehydrogenase; tropinone reductase (ambiguous); TR-I +ec:1.1.1.207 (-)-menthol dehydrogenase; monoterpenoid dehydrogenase +ec:1.1.1.208 (+)-neomenthol dehydrogenase; monoterpenoid dehydrogenase +ec:1.1.1.209 3(or 17)alpha-hydroxysteroid dehydrogenase; 3(17)alpha-hydroxysteroid dehydrogenase +ec:1.1.1.210 3beta(or 20alpha)-hydroxysteroid dehydrogenase; progesterone reductase; dehydrogenase, 3beta,20alpha-hydroxy steroid; 3beta,20alpha-hydroxysteroid oxidoreductase +ec:1.1.1.211 long-chain-3-hydroxyacyl-CoA dehydrogenase; beta-hydroxyacyl-CoA dehydrogenase; long-chain 3-hydroxyacyl coenzyme A dehydrogenase; 3-hydroxyacyl-CoA dehydrogenase; LCHAD +ec:1.1.1.212 3-oxoacyl-[acyl-carrier-protein] reductase (NADH); 3-oxoacyl-[acyl carrier protein] (reduced nicotinamide adenine dinucleotide) reductase; 3-oxoacyl-[acyl-carrier-protein] reductase (NADH); (3R)-3-hydroxyacyl-[acyl-carrier-protein]:NAD+ oxidoreductase +ec:1.1.1.213 3alpha-hydroxysteroid 3-dehydrogenase (Re-specific); 3alpha-hydroxysteroid dehydrogenase; 3alpha-hydroxysteroid:NAD(P)+ 3-oxidoreductase (A-specific); 3alpha-hydroxysteroid 3-dehydrogenase (A-specific) +ec:1.1.1.214 2-dehydropantolactone reductase (Si-specific); 2-oxopantoyl lactone reductase; 2-ketopantoyl lactone reductase; ketopantoyl lactone reductase; 2-dehydropantoyl-lactone reductase (B-specific); (R)-pantolactone:NADP+ oxidoreductase (B-specific); 2-dehydropantolactone reductase (B-specific) +ec:1.1.1.215 gluconate 2-dehydrogenase; 2-keto-D-gluconate reductase; 2-ketogluconate reductase +ec:1.1.1.216 farnesol dehydrogenase (NADP+); NADP+-farnesol dehydrogenase; farnesol (nicotinamide adenine dinucleotide phosphate) dehydrogenase +ec:1.1.1.217 benzyl-2-methyl-hydroxybutyrate dehydrogenase; benzyl 2-methyl-3-hydroxybutyrate dehydrogenase +ec:1.1.1.218 morphine 6-dehydrogenase; naloxone reductase +ec:1.1.1.219 dihydroflavonol 4-reductase; dihydrokaempferol 4-reductase; dihydromyricetin reductase; NADPH-dihydromyricetin reductase; dihydroquercetin reductase; DFR (gene name); cis-3,4-leucopelargonidin:NADP+ 4-oxidoreductase; dihydroflavanol 4-reductase (incorrect) +ec:1.1.1.220 6-pyruvoyltetrahydropterin 2'-reductase; 6-pyruvoyltetrahydropterin reductase; 6PPH4(2'-oxo) reductase; 6-pyruvoyl tetrahydropterin (2'-oxo)reductase; 6-pyruvoyl-tetrahydropterin 2'-reductase; pyruvoyl-tetrahydropterin reductase +ec:1.1.1.221 vomifoliol dehydrogenase; vomifoliol 4'-dehydrogenase; vomifoliol:NAD+ 4'-oxidoreductase +ec:1.1.1.222 Transferred to 1.1.1.110 +ec:1.1.1.223 isopiperitenol dehydrogenase +ec:1.1.1.224 mannose-6-phosphate 6-reductase; NADPH-dependent mannose 6-phosphate reductase; mannose-6-phosphate reductase; 6-phosphomannose reductase; NADP+-dependent mannose-6-P:mannitol-1-P oxidoreductase; NADPH-dependent M6P reductase; NADPH-mannose-6-P reductase +ec:1.1.1.225 chlordecone reductase; CDR +ec:1.1.1.226 4-hydroxycyclohexanecarboxylate dehydrogenase; trans-4-hydroxycyclohexanecarboxylate dehydrogenase +ec:1.1.1.227 (-)-borneol dehydrogenase +ec:1.1.1.228 (+)-sabinol dehydrogenase; (+)-cis-sabinol dehydrogenase +ec:1.1.1.229 diethyl 2-methyl-3-oxosuccinate reductase +ec:1.1.1.230 3alpha-hydroxyglycyrrhetinate dehydrogenase +ec:1.1.1.231 15-hydroxyprostaglandin-I dehydrogenase (NADP+); prostacyclin dehydrogenase; PG I2 dehydrogenase; prostacyclin dehydrogenase; NADP+-linked 15-hydroxyprostaglandin (prostacyclin) dehydrogenase; NADP+-dependent PGI2-specific 15-hydroxyprostaglandin dehydrogenase; 15-hydroxyprostaglandin-I dehydrogenase (NADP+) +ec:1.1.1.232 15-hydroxyicosatetraenoate dehydrogenase; 15-hydroxyeicosatetraenoate dehydrogenase +ec:1.1.1.233 N-acylmannosamine 1-dehydrogenase; N-acylmannosamine dehydrogenase; N-acetyl-D-mannosamine dehydrogenase; N-acyl-D-mannosamine dehydrogenase; N-acylmannosamine dehydrogenase +ec:1.1.1.234 flavanone 4-reductase +ec:1.1.1.235 8-oxocoformycin reductase; 8-ketodeoxycoformycin reductase +ec:1.1.1.236 tropinone reductase II; tropinone (psi-tropine-forming) reductase; pseudotropine forming tropinone reductase; tropinone reductase (ambiguous); TR-II +ec:1.1.1.237 hydroxyphenylpyruvate reductase; HPPR +ec:1.1.1.238 12beta-hydroxysteroid dehydrogenase; 12beta-hydroxy steroid (nicotinamide adenine dinucleotide phosphate) dehydrogenase +ec:1.1.1.239 3alpha(17beta)-hydroxysteroid dehydrogenase (NAD+); 3alpha,17beta-hydroxy steroid dehydrogenase; 3alpha(17beta)-HSD; 17-ketoreductase (ambiguous); 17beta-HSD (ambiguous); HSD17B6 (gene name); HSD17B8 (gene name) +ec:1.1.1.240 N-acetylhexosamine 1-dehydrogenase; N-acetylhexosamine dehydrogenase; N-acetyl-D-hexosamine dehydrogenase +ec:1.1.1.241 6-endo-hydroxycineole dehydrogenase +ec:1.1.1.242 Transferred to 1.3.1.69 +ec:1.1.1.243 carveol dehydrogenase; (-)-trans-carveol dehydrogenase +ec:1.1.1.244 methanol dehydrogenase +ec:1.1.1.245 cyclohexanol dehydrogenase +ec:1.1.1.246 Transferred to 1.1.1.348 and 4.2.1.139 +ec:1.1.1.247 codeinone reductase (NADPH) +ec:1.1.1.248 salutaridine reductase (NADPH) +ec:1.1.1.249 Deleted entry +ec:1.1.1.250 D-arabinitol 2-dehydrogenase; D-arabinitol 2-dehydrogenase (ribulose-forming) +ec:1.1.1.251 galactitol-1-phosphate 5-dehydrogenase; gatD (gene name) +ec:1.1.1.252 tetrahydroxynaphthalene reductase +ec:1.1.1.253 Transferred to 1.5.1.33 +ec:1.1.1.254 (S)-carnitine 3-dehydrogenase +ec:1.1.1.255 mannitol dehydrogenase; MTD; NAD+-dependent mannitol dehydrogenase +ec:1.1.1.256 fluoren-9-ol dehydrogenase +ec:1.1.1.257 4-(hydroxymethyl)benzenesulfonate dehydrogenase +ec:1.1.1.258 6-hydroxyhexanoate dehydrogenase +ec:1.1.1.259 3-hydroxypimeloyl-CoA dehydrogenase +ec:1.1.1.260 sulcatone reductase +ec:1.1.1.261 sn-glycerol-1-phosphate dehydrogenase; glycerol-1-phosphate dehydrogenase [NAD(P)+]; sn-glycerol-1-phosphate:NAD+ oxidoreductase; G-1-P dehydrogenase; Gro1PDH; AraM +ec:1.1.1.262 4-hydroxythreonine-4-phosphate dehydrogenase; NAD+-dependent threonine 4-phosphate dehydrogenase; L-threonine 4-phosphate dehydrogenase; 4-(phosphohydroxy)-L-threonine dehydrogenase; PdxA; 4-(phosphonooxy)-L-threonine:NAD+ oxidoreductase; 4-phosphooxy-L-threonine:NAD+ oxidoreductase +ec:1.1.1.263 1,5-anhydro-D-fructose reductase +ec:1.1.1.264 L-idonate 5-dehydrogenase +ec:1.1.1.265 3-methylbutanal reductase +ec:1.1.1.266 dTDP-4-dehydro-6-deoxyglucose reductase; dTDP-4-keto-6-deoxyglucose reductase; dTDP-D-fucose:NADP+ oxidoreductase; Fcf1; dTDP-6-deoxy-D-xylo-hex-4-ulopyranose reductase +ec:1.1.1.267 1-deoxy-D-xylulose-5-phosphate reductoisomerase; DXP-reductoisomerase; 1-deoxy-D-xylulose-5-phosphate isomeroreductase; 2-C-methyl-D-erythritol 4-phosphate (MEP) synthase +ec:1.1.1.268 2-(R)-hydroxypropyl-CoM dehydrogenase; 2-(2-(R)-hydroxypropylthio)ethanesulfonate dehydrogenase; 2-[2-(R)-hydroxypropylthio]ethanesulfonate:NAD+ oxidoreductase +ec:1.1.1.269 2-(S)-hydroxypropyl-CoM dehydrogenase; 2-(2-(S)-hydroxypropylthio)ethanesulfonate dehydrogenase; 2-[2-(S)-hydroxypropylthio]ethanesulfonate:NAD+ oxidoreductase +ec:1.1.1.270 3beta-hydroxysteroid 3-dehydrogenase; 3-keto-steroid reductase; 3-KSR; HSD17B7 (gene name); ERG27 (gene name) +ec:1.1.1.271 GDP-L-fucose synthase; GDP-4-keto-6-deoxy-D-mannose-3,5-epimerase-4-reductase; GDP-L-fucose:NADP+ 4-oxidoreductase (3,5-epimerizing) +ec:1.1.1.272 D-2-hydroxyacid dehydrogenase (NADP+); ddh (gene name) +ec:1.1.1.273 vellosimine dehydrogenase +ec:1.1.1.274 2,5-didehydrogluconate reductase (2-dehydro-D-gluconate-forming); 2,5-diketo-D-gluconate reductase (ambiguous) +ec:1.1.1.275 (+)-trans-carveol dehydrogenase; carveol dehydrogenase +ec:1.1.1.276 serine 3-dehydrogenase (NADP+); serine 3-dehydrogenase +ec:1.1.1.277 3beta-hydroxy-5beta-steroid dehydrogenase; 3beta-hydroxysteroid 5beta-oxidoreductase; 3beta-hydroxysteroid 5beta-progesterone oxidoreductase +ec:1.1.1.278 3beta-hydroxy-5alpha-steroid dehydrogenase +ec:1.1.1.279 (R)-3-hydroxyacid-ester dehydrogenase; 3-oxo ester (R)-reductase +ec:1.1.1.280 (S)-3-hydroxyacid-ester dehydrogenase; 3-oxo ester (S)-reductase +ec:1.1.1.281 GDP-4-dehydro-6-deoxy-D-mannose reductase; GDP-4-keto-6-deoxy-D-mannose reductase [ambiguous]; GDP-6-deoxy-D-lyxo-4-hexulose reductase; Rmd; GDP-6-deoxy-D-mannose:NAD(P)+ 4-oxidoreductase (D-rhamnose-forming); GDP-6-deoxy-alpha-D-mannose:NAD(P)+ 4-oxidoreductase (D-rhamnose-forming) +ec:1.1.1.282 quinate/shikimate dehydrogenase [NAD(P)+]; YdiB; quinate/shikimate dehydrogenase (ambiguous) +ec:1.1.1.283 methylglyoxal reductase (NADPH); lactaldehyde dehydrogenase (NADP+); GRE2 (gene name); methylglyoxal reductase (NADPH-dependent); lactaldehyde:NADP+ oxidoreductase +ec:1.1.1.284 S-(hydroxymethyl)glutathione dehydrogenase; NAD-linked formaldehyde dehydrogenase (incorrect); formaldehyde dehydrogenase (incorrect); formic dehydrogenase (incorrect); class III alcohol dehydrogenase; ADH3; chi-ADH; FDH (incorrect); formaldehyde dehydrogenase (glutathione) (incorrect); GS-FDH (incorrect); glutathione-dependent formaldehyde dehydrogenase (incorrect); GD-FALDH; NAD- and glutathione-dependent formaldehyde dehydrogenase; NAD-dependent formaldehyde dehydrogenase (incorrect) +ec:1.1.1.285 3''-deamino-3''-oxonicotianamine reductase +ec:1.1.1.286 isocitrate---homoisocitrate dehydrogenase; homoisocitrate---isocitrate dehydrogenase; PH1722 +ec:1.1.1.287 D-arabinitol dehydrogenase (NADP+); NADP+-dependent D-arabitol dehydrogenase; ARD1p; D-arabitol dehydrogenase 1 +ec:1.1.1.288 xanthoxin dehydrogenase; xanthoxin oxidase; ABA2 +ec:1.1.1.289 sorbose reductase; Sou1p +ec:1.1.1.290 4-phosphoerythronate dehydrogenase; PdxB; PdxB 4PE dehydrogenase; 4-O-phosphoerythronate dehydrogenase; 4PE dehydrogenase; erythronate-4-phosphate dehydrogenase +ec:1.1.1.291 2-hydroxymethylglutarate dehydrogenase; HgD +ec:1.1.1.292 1,5-anhydro-D-fructose reductase (1,5-anhydro-D-mannitol-forming); 1,5-anhydro-D-fructose reductase (ambiguous); AFR (ambiguous) +ec:1.1.1.293 Deleted entry +ec:1.1.1.294 chlorophyll(ide) b reductase; chlorophyll b reductase; Chl b reductase +ec:1.1.1.295 momilactone-A synthase; momilactone A synthase; OsMAS +ec:1.1.1.296 dihydrocarveol dehydrogenase; carveol dehydrogenase (ambiguous) +ec:1.1.1.297 limonene-1,2-diol dehydrogenase; NAD+-dependent limonene-1,2-diol dehydrogenase +ec:1.1.1.298 3-hydroxypropionate dehydrogenase (NADP+); 3-hydroxypropanoate dehydrogenase (NADP+); 3-hydroxypropionate:NADP+ oxidoreductase +ec:1.1.1.299 malate dehydrogenase [NAD(P)+]; MdH II, NAD(P)+-dependent malate dehyrogenase +ec:1.1.1.300 NADP-retinol dehydrogenase; all-trans retinal reductase (ambiguous); all-trans-retinol dehydrogenase; NADP(H)-dependent retinol dehydrogenase/reductase; RDH11; RDH12; RDH13; RDH14; retinol dehydrogenase 12; retinol dehydrogenase 14; retinol dehydrogenase [NADP+]; RalR1; PSDR1 +ec:1.1.1.301 D-arabitol-phosphate dehydrogenase; APDH; D-arabitol 1-phosphate dehydrogenase; D-arabitol 5-phosphate dehydrogenase; D-arabinitol 1-phosphate dehydrogenase; D-arabinitol 5-phosphate dehydrogenase +ec:1.1.1.302 2,5-diamino-6-(ribosylamino)-4(3H)-pyrimidinone 5'-phosphate reductase; 2,5-diamino-6-ribosylamino-4(3H)-pyrimidinone 5'-phosphate reductase; MjaRED; MJ0671 (gene name) +ec:1.1.1.303 diacetyl reductase [(R)-acetoin forming]; (R)-acetoin dehydrogenase +ec:1.1.1.304 diacetyl reductase [(S)-acetoin forming]; (S)-acetoin dehydrogenase +ec:1.1.1.305 UDP-glucuronic acid dehydrogenase (UDP-4-keto-hexauronic acid decarboxylating); UDP-GlcUA decarboxylase; ArnADH; UDP-glucuronate:NAD+ oxidoreductase (decarboxylating) +ec:1.1.1.306 S-(hydroxymethyl)mycothiol dehydrogenase; NAD/factor-dependent formaldehyde dehydrogenase; mycothiol-dependent formaldehyde dehydrogenase +ec:1.1.1.307 D-xylose reductase [NAD(P)H]; XylR; msXR; dsXR; dual specific xylose reductase; NAD(P)H-dependent xylose reductase; xylose reductase (ambiguous); D-xylose reductase (ambiguous) +ec:1.1.1.308 sulfopropanediol 3-dehydrogenase; DHPS 3-dehydrogenase (sulfolactate forming); 2,3-dihydroxypropane-1-sulfonate 3-dehydrogenase (sulfolactate forming); dihydroxypropanesulfonate 3-dehydrogenase; hpsN (gene name) +ec:1.1.1.309 phosphonoacetaldehyde reductase (NADH); PhpC +ec:1.1.1.310 (S)-sulfolactate dehydrogenase; (2S)-3-sulfolactate dehydrogenase; SlcC +ec:1.1.1.311 (S)-1-phenylethanol dehydrogenase; PED +ec:1.1.1.312 2-hydroxy-4-carboxymuconate semialdehyde hemiacetal dehydrogenase; 2-hydroxy-4-carboxymuconate 6-semialdehyde dehydrogenase; 4-carboxy-2-hydroxy-cis,cis-muconate-6-semialdehyde:NADP+ oxidoreductase; alpha-hydroxy-gamma-carboxymuconic epsilon-semialdehyde dehydrogenase; 4-carboxy-2-hydroxymuconate-6-semialdehyde dehydrogenase; LigC; ProD +ec:1.1.1.313 sulfoacetaldehyde reductase (NADPH); isfD (gene name) +ec:1.1.1.314 Deleted entry +ec:1.1.1.315 11-cis-retinol dehydrogenase; RDH5 (gene name) +ec:1.1.1.316 L-galactose 1-dehydrogenase; L-GalDH; L-galactose dehydrogenase +ec:1.1.1.317 perakine reductase +ec:1.1.1.318 eugenol synthase; LtCES1; EGS1; EGS2 +ec:1.1.1.319 isoeugenol synthase; IGS1; t-anol/isoeugenol synthase 1 +ec:1.1.1.320 benzil reductase [(S)-benzoin forming]; YueD +ec:1.1.1.321 benzil reductase [(R)-benzoin forming] +ec:1.1.1.322 (-)-endo-fenchol dehydrogenase; l-endo-fenchol dehydrogenase; FDH +ec:1.1.1.323 (+)-thujan-3-ol dehydrogenase; d-3-thujanol dehydrogenase; TDH +ec:1.1.1.324 8-hydroxygeraniol dehydrogenase; 8-hydroxygeraniol oxidoreductase; CYP76B10; G10H; CrG10H; SmG10H; acyclic monoterpene primary alcohol:NADP+ oxidoreductase +ec:1.1.1.325 sepiapterin reductase (L-threo-7,8-dihydrobiopterin forming) +ec:1.1.1.326 zerumbone synthase; ZSD1 +ec:1.1.1.327 5-exo-hydroxycamphor dehydrogenase; F-dehydrogenase; FdeH +ec:1.1.1.328 nicotine blue oxidoreductase; nboR (gene name) +ec:1.1.1.329 2-deoxy-scyllo-inosamine dehydrogenase; neoA (gene name); kanK (gene name, ambiguous); kanE (gene name, ambiguous) +ec:1.1.1.330 very-long-chain 3-oxoacyl-CoA reductase; very-long-chain 3-ketoacyl-CoA reductase; very-long-chain beta-ketoacyl-CoA reductase; KCR (gene name); IFA38 (gene name) +ec:1.1.1.331 secoisolariciresinol dehydrogenase +ec:1.1.1.332 chanoclavine-I dehydrogenase; easD (gene name); fgaDH (gene name) +ec:1.1.1.333 decaprenylphospho-beta-D-erythro-pentofuranosid-2-ulose 2-reductase; decaprenylphospho-beta-D-ribofuranose 2'-epimerase; Rv3791; DprE2 +ec:1.1.1.334 methylecgonone reductase; MecgoR (gene name) +ec:1.1.1.335 UDP-N-acetyl-2-amino-2-deoxyglucuronate dehydrogenase; WlbA; WbpB +ec:1.1.1.336 UDP-N-acetyl-D-mannosamine dehydrogenase; UDP-ManNAc 6-dehydrogenase; wecC (gene name) +ec:1.1.1.337 L-2-hydroxycarboxylate dehydrogenase (NAD+); (R)-sulfolactate:NAD+ oxidoreductase; L-sulfolactate dehydrogenase; (R)-sulfolactate dehydrogenase; L-2-hydroxyacid dehydrogenase (NAD+); ComC +ec:1.1.1.338 (2R)-3-sulfolactate dehydrogenase (NADP+); (R)-sulfolactate:NADP+ oxidoreductase; L-sulfolactate dehydrogenase; (R)-sulfolactate dehydrogenase; ComC +ec:1.1.1.339 dTDP-6-deoxy-L-talose 4-dehydrogenase (NAD+); tll (gene name) +ec:1.1.1.340 1-deoxy-11beta-hydroxypentalenate dehydrogenase; 1-deoxy-11beta-hydroxypentalenic acid dehydrogenase; ptlF (gene name); penF (gene name) +ec:1.1.1.341 CDP-abequose synthase; rfbJ (gene name) +ec:1.1.1.342 CDP-paratose synthase; rfbS (gene name) +ec:1.1.1.343 phosphogluconate dehydrogenase (NAD+-dependent, decarboxylating); 6-PGDH (ambiguous); gntZ (gene name); GNDl +ec:1.1.1.344 dTDP-6-deoxy-L-talose 4-dehydrogenase [NAD(P)+]; tal (gene name) +ec:1.1.1.345 D-2-hydroxyacid dehydrogenase (NAD+); LdhA; HdhD; D-2-hydroxyisocaproate dehydrogenase; R-HicDH; D-HicDH; (R)-2-hydroxy-4-methylpentanoate:NAD+ oxidoreductase; (R)-2-hydroxyisocaproate dehydrogenase; D-mandelate dehydrogenase (ambiguous) +ec:1.1.1.346 2,5-didehydrogluconate reductase (2-dehydro-L-gulonate-forming); 2,5-diketo-D-gluconate-reductase (ambiguous); YqhE reductase; dkgA (gene name); dkgB (gene name) +ec:1.1.1.347 geraniol dehydrogenase (NAD+); GeDH; geoA (gene name) +ec:1.1.1.348 (3R)-2'-hydroxyisoflavanone reductase; vestitone reductase; pterocarpin synthase (incorrect); pterocarpan synthase (incorrect) +ec:1.1.1.349 norsolorinic acid ketoreductase; aflD (gene name); nor-1 (gene name) +ec:1.1.1.350 ureidoglycolate dehydrogenase (NAD+) +ec:1.1.1.351 phosphogluconate dehydrogenase [NAD(P)+-dependent, decarboxylating] +ec:1.1.1.352 5'-hydroxyaverantin dehydrogenase; HAVN dehydrogenase; adhA (gene name) +ec:1.1.1.353 versiconal hemiacetal acetate reductase; VHA reductase; VHA reductase I; VHA reductase II; vrdA (gene name) +ec:1.1.1.354 farnesol dehydrogenase (NAD+); NAD+-farnesol dehydrogenase +ec:1.1.1.355 2'-dehydrokanamycin reductase; kanK (gene name, ambiguous) +ec:1.1.1.356 GDP-L-colitose synthase; ColC +ec:1.1.1.357 3alpha-hydroxysteroid 3-dehydrogenase; 3alpha-hydroxysteroid dehydrogenase; AKR1C4 (gene name); AKR1C2 (gene name); hsdA (gene name) +ec:1.1.1.358 2-dehydropantolactone reductase; 2-oxopantoyl lactone reductase; 2-ketopantoyl lactone reductase; ketopantoyl lactone reductase; 2-dehydropantoyl-lactone reductase +ec:1.1.1.359 aldose 1-dehydrogenase [NAD(P)+] +ec:1.1.1.360 glucose/galactose 1-dehydrogenase; GdhA; dual-specific glucose/galactose dehydrogenase; glucose (galactose) dehydrogenase; glucose/galactose dehydrogenase +ec:1.1.1.361 glucose-6-phosphate 3-dehydrogenase; ntdC (gene name) +ec:1.1.1.362 aklaviketone reductase; dauE (gene name); aknU (gene name) +ec:1.1.1.363 glucose-6-phosphate dehydrogenase [NAD(P)+]; G6PDH; G6PD; Glc6PD +ec:1.1.1.364 dTDP-4-dehydro-6-deoxy-alpha-D-gulose 4-ketoreductase; dTDP-4-dehydro-6-deoxygulose reductase; tylD (gene name); gerKI (gene name); chmD (gene name); mydI (gene name) +ec:1.1.1.365 D-galacturonate reductase; GalUR; gar1 (gene name) +ec:1.1.1.366 L-idonate 5-dehydrogenase (NAD+) +ec:1.1.1.367 UDP-2-acetamido-2,6-beta-L-arabino-hexul-4-ose reductase; WbjC; Cap5F +ec:1.1.1.368 6-hydroxycyclohex-1-ene-1-carbonyl-CoA dehydrogenase +ec:1.1.1.369 D-chiro-inositol 1-dehydrogenase; DCI 1-dehydrogenase; IolG +ec:1.1.1.370 scyllo-inositol 2-dehydrogenase (NAD+); iolX (gene name) +ec:1.1.1.371 scyllo-inositol 2-dehydrogenase (NADP+); iolW (gene name) +ec:1.1.1.372 D/L-glyceraldehyde reductase; gld1 (gene name); gaaD (gene name) +ec:1.1.1.373 sulfolactaldehyde 3-reductase; yihU (gene name) +ec:1.1.1.374 UDP-N-acetylglucosamine 3-dehydrogenase +ec:1.1.1.375 L-2-hydroxycarboxylate dehydrogenase [NAD(P)+]; MdhII; lactate/malate dehydrogenase +ec:1.1.1.376 L-arabinose 1-dehydrogenase [NAD(P)+]; L-arabino-aldose dehydrogenase +ec:1.1.1.377 L-rhamnose 1-dehydrogenase (NADP+) +ec:1.1.1.378 L-rhamnose 1-dehydrogenase [NAD(P)+] +ec:1.1.1.379 (R)-mandelate dehydrogenase; ManDH2; D-ManDH2; D-mandelate dehydrogenase (ambiguous) +ec:1.1.1.380 L-gulonate 5-dehydrogenase +ec:1.1.1.381 3-hydroxy acid dehydrogenase; ydfG (gene name); YMR226c (gene name) +ec:1.1.1.382 ketol-acid reductoisomerase (NAD+) +ec:1.1.1.383 ketol-acid reductoisomerase [NAD(P)+] +ec:1.1.1.384 dTDP-3,4-didehydro-2,6-dideoxy-alpha-D-glucose 3-reductase; KijD10; dTDP-4-keto-2,6-dideoxy-D-glucose 3-oxidoreductase; dTDP-4-dehydro-2,6-dideoxy-alpha-D-glucose 3-oxidoreductase +ec:1.1.1.385 dihydroanticapsin dehydrogenase; BacC; ywfD (gene name) +ec:1.1.1.386 ipsdienol dehydrogenase; IDOLDH +ec:1.1.1.387 L-serine 3-dehydrogenase (NAD+); NAD+-dependent L-serine dehydrogenase +ec:1.1.1.388 glucose-6-phosphate dehydrogenase (NAD+); Glc6PDH; azf (gene name); archaeal zwischenferment +ec:1.1.1.389 2-dehydro-3-deoxy-L-galactonate 5-dehydrogenase +ec:1.1.1.390 sulfoquinovose 1-dehydrogenase +ec:1.1.1.391 3beta-hydroxycholanate 3-dehydrogenase (NAD+); 3beta-hydroxysteroid dehydrogenase +ec:1.1.1.392 3alpha-hydroxycholanate dehydrogenase (NADP+); alpha-hydroxy-cholanate dehydrogenase (ambiguous) +ec:1.1.1.393 3beta-hydroxycholanate 3-dehydrogenase (NADP+); 3beta-hydroxysteroid dehydrogenase (ambiguous) +ec:1.1.1.394 aurachin B dehydrogenase; AuaH +ec:1.1.1.395 3alpha-hydroxy bile acid-CoA-ester 3-dehydrogenase; baiA1 (gene name); baiA2 (gene name); baiA3 (gene name) +ec:1.1.1.396 bacteriochlorophyllide a dehydrogenase; bchC (gene name) +ec:1.1.1.397 beta-methylindole-3-pyruvate reductase; ind2 (gene name) +ec:1.1.1.398 2-glutathionyl-2-methylbut-3-en-1-ol dehydrogenase; isoH (gene name); 4-hydroxy-3-glutathionyl-3-methylbut-1-ene dehydrogenase +ec:1.1.1.399 2-oxoglutarate reductase; serA (gene name) +ec:1.1.1.400 2-methyl-1,2-propanediol dehydrogenase; mpdB (gene name) +ec:1.1.1.401 2-dehydro-3-deoxy-L-rhamnonate dehydrogenase (NAD+); 2-keto-3-deoxy-L-rhamnonate dehydrogenase +ec:1.1.1.402 D-erythritol 1-phosphate dehydrogenase; eryB (gene name) +ec:1.1.1.403 D-threitol dehydrogenase (NAD+); dthD (gene name) +ec:1.1.1.404 tetrachlorobenzoquinone reductase; pcpD (gene name); TCBQ reductase +ec:1.1.1.405 ribitol-5-phosphate 2-dehydrogenase (NADP+); acs1 (gene name); bcs1 (gene name); tarJ (gene name); ribulose-5-phosphate reductase; ribulose-5-P reductase; D-ribulose 5-phosphate reductase +ec:1.1.1.406 galactitol 2-dehydrogenase (L-tagatose-forming); GatDH +ec:1.1.1.407 D-altritol 5-dehydrogenase +ec:1.1.1.408 4-phospho-D-threonate 3-dehydrogenase; pdxA2 (gene name) (ambiguous) +ec:1.1.1.409 4-phospho-D-erythronate 3-dehydrogenase; pdxA2 (gene name) (ambiguous) +ec:1.1.1.410 D-erythronate 2-dehydrogenase; denD (gene name) +ec:1.1.1.411 L-threonate 2-dehydrogenase; ltnD (gene name) +ec:1.1.1.412 2-alkyl-3-oxoalkanoate reductase; oleD (gene name) +ec:1.1.1.413 A-factor type gamma-butyrolactone 1'-reductase (1S-forming); barS1 (gene name) +ec:1.1.1.414 L-galactonate 5-dehydrogenase; lgoD (gene name); lgaC (gene name) +ec:1.1.1.415 noscapine synthase; NOS (gene name) +ec:1.1.1.416 isopyridoxal dehydrogenase (5-pyridoxolactone-forming) +ec:1.1.1.417 3beta-hydroxysteroid-4beta-carboxylate 3-dehydrogenase (decarboxylating); sdmB (gene name) +ec:1.1.1.418 plant 3beta-hydroxysteroid-4alpha-carboxylate 3-dehydrogenase (decarboxylating); 3beta-HSD/D1 (gene name); 3beta-HSD/D2 (gene name); 3beta-hydroxysteroid dehydrogenases/C-4 decarboxylase (ambiguous) +ec:1.1.1.419 nepetalactol dehydrogenase; NEPS1 (gene name) +ec:1.1.1.420 D-apiose dehydrogenase; apsD (gene name) +ec:1.1.1.421 D-apionate oxidoisomerase; apnO (gene name) +ec:1.1.1.422 pseudoephedrine dehydrogenase; PseDH +ec:1.1.1.423 (1R,2S)-ephedrine 1-dehydrogenase; EDH; ephedrine dehydrogenase +ec:1.1.1.424 D-xylose 1-dehydrogenase (NADP+, D-xylono-1,4-lactone-forming); xacA (gene name); xdh (gene name) +ec:1.1.1.425 levoglucosan dehydrogenase; 1,6-anhydro-beta-D-glucose dehydrogenase +ec:1.1.1.426 UDP-N-acetyl-alpha-D-quinovosamine dehydrogenase; wbpV (gene name); wreQ (gene name) +ec:1.1.1.427 D-arabinose 1-dehydrogenase (NADP+); AraDH; adh-4 (gene name) +ec:1.1.1.428 4-methylthio 2-oxobutanoate reductase (NADH); CTBP1 (gene name); C-terminal-binding protein 1; MTOB reductase; 4-methylthio 2-oxobutyrate reductase; 4-methylthio 2-oxobutyric acid reductase +ec:1.1.1.429 (2S)-[(R)-hydroxy(phenyl)methyl]succinyl-CoA dehydrogenase; bbsCD (gene name) +ec:1.1.1.430 D-xylose reductase (NADH); XYL1 (gene name) (ambiguous) +ec:1.1.1.431 D-xylose reductase (NADPH); XYL1 (gene name, ambiguous); xyl1 (gene name, ambiguous); xyrA (gene name); xyrB (gene name) +ec:1.1.1.432 6-dehydroglucose reductase; D-glucose 6-dehydrogenase; smoB (gene name); squF (gene name) +ec:1.1.1.433 sulfoacetaldehyde reductase (NADH); sarD (gene name); tauF (gene name); sqwF (gene name); BkTauF +ec:1.1.2.1 Transferred to 1.1.5.3 +ec:1.1.2.2 mannitol dehydrogenase (cytochrome); polyol dehydrogenase +ec:1.1.2.3 L-lactate dehydrogenase (cytochrome); lactic acid dehydrogenase; cytochrome b2 (flavin-free derivative of flavocytochrome b2); flavocytochrome b2; L-lactate cytochrome c reductase; L(+)-lactate:cytochrome c oxidoreductase; dehydrogenase, lactate (cytochrome); L-lactate cytochrome c oxidoreductase; lactate dehydrogenase (cytochrome); lactic cytochrome c reductase +ec:1.1.2.4 D-lactate dehydrogenase (cytochrome); lactic acid dehydrogenase; D-lactate (cytochrome) dehydrogenase; cytochrome-dependent D-(-)-lactate dehydrogenase; D-lactate-cytochrome c reductase; D-(-)-lactic cytochrome c reductase +ec:1.1.2.5 D-lactate dehydrogenase (cytochrome c-553) +ec:1.1.2.6 polyvinyl alcohol dehydrogenase (cytochrome); PVA dehydrogenase; PVADH +ec:1.1.2.7 methanol dehydrogenase (cytochrome c); methanol dehydrogenase; MDH (ambiguous) +ec:1.1.2.8 alcohol dehydrogenase (cytochrome c); type I quinoprotein alcohol dehydrogenase; quinoprotein ethanol dehydrogenase +ec:1.1.2.9 1-butanol dehydrogenase (cytochrome c); BDH +ec:1.1.2.10 lanthanide-dependent methanol dehydrogenase; XoxF; XoxF-MDH; Ce-MDH; La3+-dependent MDH; Ce3+-induced methanol dehydrogenase; cerium dependent MDH +ec:1.1.2.11 glucoside 3-dehydrogenase (cytochrome c); D-glucoside 3-dehydrogenase (ambiguous); D-aldohexopyranoside dehydrogenase (ambiguous); D-aldohexoside:cytochrome c oxidoreductase; hexopyranoside-cytochrome c oxidoreductase +ec:1.1.3.1 Deleted entry +ec:1.1.3.2 L-lactate oxidase; lctO (gene name); LOX +ec:1.1.3.3 Deleted entry +ec:1.1.3.4 glucose oxidase; glucose oxyhydrase; corylophyline; penatin; glucose aerodehydrogenase; microcid; beta-D-glucose oxidase; D-glucose oxidase; D-glucose-1-oxidase; beta-D-glucose:quinone oxidoreductase; glucose oxyhydrase; deoxin-1; GOD +ec:1.1.3.5 hexose oxidase +ec:1.1.3.6 cholesterol oxidase; cholesterol- O2 oxidoreductase; 3beta-hydroxy steroid oxidoreductase; 3beta-hydroxysteroid:oxygen oxidoreductase +ec:1.1.3.7 aryl-alcohol oxidase; aryl alcohol oxidase; veratryl alcohol oxidase; arom. alcohol oxidase +ec:1.1.3.8 L-gulonolactone oxidase; L-gulono-gamma-lactone: O2 oxidoreductase; L-gulono-gamma-lactone oxidase; L-gulono-gamma-lactone:oxidoreductase; GLO +ec:1.1.3.9 galactose oxidase; D-galactose oxidase; beta-galactose oxidase +ec:1.1.3.10 pyranose oxidase; glucose 2-oxidase; pyranose-2-oxidase +ec:1.1.3.11 L-sorbose oxidase +ec:1.1.3.12 pyridoxine 4-oxidase; pyridoxin 4-oxidase; pyridoxol 4-oxidase +ec:1.1.3.13 alcohol oxidase; ethanol oxidase; alcohol:oxygen oxidoreductase +ec:1.1.3.14 catechol oxidase (dimerizing) +ec:1.1.3.15 (S)-2-hydroxy-acid oxidase; hydroxy-acid oxidase A; hydroxy-acid oxidase B; glycolate oxidase; L-2-hydroxy acid oxidase; hydroxyacid oxidase A; L-alpha-hydroxy acid oxidase +ec:1.1.3.16 ecdysone oxidase; beta-ecdysone oxidase +ec:1.1.3.17 choline oxidase +ec:1.1.3.18 secondary-alcohol oxidase; polyvinyl alcohol oxidase; secondary alcohol oxidase +ec:1.1.3.19 4-hydroxymandelate oxidase (decarboxylating); L-4-hydroxymandelate oxidase (decarboxylating); (S)-2-hydroxy-2-(4-hydroxyphenyl)acetate:oxygen 1-oxidoreductase; (S)-4-hydroxymandelate:oxygen 1-oxidoreductase; 4-hydroxymandelate oxidase +ec:1.1.3.20 long-chain-alcohol oxidase; long-chain fatty alcohol oxidase; fatty alcohol oxidase; fatty alcohol:oxygen oxidoreductase; long-chain fatty acid oxidase +ec:1.1.3.21 glycerol-3-phosphate oxidase; glycerol phosphate oxidase; glycerol-1-phosphate oxidase; glycerol phosphate oxidase; L-alpha-glycerophosphate oxidase; alpha-glycerophosphate oxidase; L-alpha-glycerol-3-phosphate oxidase +ec:1.1.3.22 Transferred to 1.17.3.2 +ec:1.1.3.23 thiamine oxidase; thiamin dehydrogenase; thiamine dehydrogenase; thiamin:oxygen 5-oxidoreductase +ec:1.1.3.24 Transferred to 1.3.3.12 +ec:1.1.3.25 Transferred to 1.1.99.18 +ec:1.1.3.26 Transferred to 1.21.3.2 +ec:1.1.3.27 hydroxyphytanate oxidase; L-2-hydroxyphytanate:oxygen 2-oxidoreductase +ec:1.1.3.28 nucleoside oxidase +ec:1.1.3.29 N-acylhexosamine oxidase; N-acyl-D-hexosamine oxidase; N-acyl-beta-D-hexosamine:oxygen 1-oxidoreductase +ec:1.1.3.30 polyvinyl-alcohol oxidase; dehydrogenase, polyvinyl alcohol; PVA oxidase +ec:1.1.3.31 Deleted entry +ec:1.1.3.32 Transferred to 1.14.21.1 +ec:1.1.3.33 Transferred to 1.14.21.2 +ec:1.1.3.34 Transferred to 1.14.21.3 +ec:1.1.3.35 Transferred to 1.14.21.4 +ec:1.1.3.36 Transferred to 1.14.21.5 +ec:1.1.3.37 D-arabinono-1,4-lactone oxidase; D-arabinono-gamma-lactone oxidase; ALO +ec:1.1.3.38 vanillyl-alcohol oxidase; 4-hydroxy-2-methoxybenzyl alcohol oxidase +ec:1.1.3.39 nucleoside oxidase (H2O2-forming) +ec:1.1.3.40 D-mannitol oxidase; mannitol oxidase; D-arabitol oxidase +ec:1.1.3.41 alditol oxidase; xylitol oxidase; xylitol:oxygen oxidoreductase; AldO +ec:1.1.3.42 prosolanapyrone-II oxidase; Sol5 (ambiguous); SPS (ambiguous); solanapyrone synthase (bifunctional enzyme: prosolanapyrone II oxidase/prosolanapyrone III cycloisomerase); prosolanapyrone II oxidase +ec:1.1.3.43 paromamine 6'-oxidase; btrQ (gene name); neoG (gene name); kanI (gene name); tacB (gene name); neoQ (obsolete gene name) +ec:1.1.3.44 6'''-hydroxyneomycin C oxidase; neoG (gene name); neoQ (obsolete gene name) +ec:1.1.3.45 aclacinomycin-N oxidase; AknOx (ambiguous); aclacinomycin oxidoreductase (ambiguous) +ec:1.1.3.46 4-hydroxymandelate oxidase; 4HmO; HmO +ec:1.1.3.47 5-(hydroxymethyl)furfural oxidase +ec:1.1.3.48 3-deoxy-alpha-D-manno-octulosonate 8-oxidase; kdnB (gene name) +ec:1.1.3.49 (R)-mandelonitrile oxidase; ChuaMOX (gene name) +ec:1.1.4.1 Transferred to 1.17.4.4 +ec:1.1.4.2 Transferred to 1.17.4.5 +ec:1.1.5.1 Deleted entry +ec:1.1.5.2 glucose 1-dehydrogenase (PQQ, quinone); quinoprotein glucose dehydrogenase; membrane-bound glucose dehydrogenase; mGDH; glucose dehydrogenase (PQQ-dependent); glucose dehydrogenase (pyrroloquinoline-quinone); quinoprotein D-glucose dehydrogenase +ec:1.1.5.3 glycerol-3-phosphate dehydrogenase; alpha-glycerophosphate dehydrogenase; alpha-glycerophosphate dehydrogenase (acceptor); anaerobic glycerol-3-phosphate dehydrogenase; DL-glycerol 3-phosphate oxidase (misleading); FAD-dependent glycerol-3-phosphate dehydrogenase; FAD-dependent sn-glycerol-3-phosphate dehydrogenase; FAD-GPDH; FAD-linked glycerol 3-phosphate dehydrogenase; FAD-linked L-glycerol-3-phosphate dehydrogenase; flavin-linked glycerol-3-phosphate dehydrogenase; flavoprotein-linked L-glycerol 3-phosphate dehydrogenase; glycerol 3-phosphate cytochrome c reductase (misleading); glycerol phosphate dehydrogenase; glycerol phosphate dehydrogenase (acceptor); glycerol phosphate dehydrogenase (FAD); glycerol-3-phosphate CoQ reductase; glycerol-3-phosphate dehydrogenase (flavin-linked); glycerol-3-phosphate:CoQ reductase; glycerophosphate dehydrogenase; L-3-glycerophosphate-ubiquinone oxidoreductase; L-glycerol-3-phosphate dehydrogenase (ambiguous); L-glycerophosphate dehydrogenase; mGPD; mitochondrial glycerol phosphate dehydrogenase; NAD+-independent glycerol phosphate dehydrogenase; pyridine nucleotide-independent L-glycerol 3-phosphate dehydrogenase; sn-glycerol 3-phosphate oxidase (misleading); sn-glycerol-3-phosphate dehydrogenase; sn-glycerol-3-phosphate:(acceptor) 2-oxidoreductase; sn-glycerol-3-phosphate:acceptor 2-oxidoreductase +ec:1.1.5.4 malate dehydrogenase (quinone); FAD-dependent malate-vitamin K reductase; malate-vitamin K reductase; (S)-malate:(acceptor) oxidoreductase; L-malate-quinone oxidoreductase; malate:quinone oxidoreductase; malate quinone oxidoreductase; MQO; malate:quinone reductase; malate dehydrogenase (acceptor); FAD-dependent malate dehydrogenase +ec:1.1.5.5 alcohol dehydrogenase (quinone); type III ADH; membrane associated quinohaemoprotein alcohol dehydrogenase +ec:1.1.5.6 Transferred to 1.17.5.3 +ec:1.1.5.7 cyclic alcohol dehydrogenase (quinone); cyclic alcohol dehydrogenase; MCAD +ec:1.1.5.8 quinate/shikimate dehydrogenase (quinone); NAD(P)+-independent quinate dehydrogenase; quinate:pyrroloquinoline-quinone 5-oxidoreductase; quinate dehydrogenase (quinone) +ec:1.1.5.9 glucose 1-dehydrogenase (FAD, quinone); glucose dehydrogenase (Aspergillus); FAD-dependent glucose dehydrogenase; D-glucose:(acceptor) 1-oxidoreductase; glucose dehydrogenase (acceptor); gdh (gene name) +ec:1.1.5.10 D-2-hydroxyacid dehydrogenase (quinone); (R)-2-hydroxy acid dehydrogenase; (R)-2-hydroxy-acid:(acceptor) 2-oxidoreductase; D-lactate dehydrogenase (ambiguous) +ec:1.1.5.11 1-butanol dehydrogenase (quinone); BOH +ec:1.1.5.12 D-lactate dehydrogenase (quinone); dld (gene name) +ec:1.1.5.13 (S)-2-hydroxyglutarate dehydrogenase; L-2-hydroxyglutarate dehydrogenase; lhgO (gene name); ygaF (gene name) +ec:1.1.5.14 fructose 5-dehydrogenase; fructose 5-dehydrogenase (acceptor); D-fructose dehydrogenase; D-fructose:(acceptor) 5-oxidoreductase +ec:1.1.7.1 4-hydroxybenzoyl-CoA reductase; 4-hydroxybenzoyl-CoA reductase (dehydroxylating); 4-hydroxybenzoyl-CoA:(acceptor) oxidoreductase; benzoyl-CoA:acceptor oxidoreductase +ec:1.1.9.1 alcohol dehydrogenase (azurin); type II quinoprotein alcohol dehydrogenase; quinohaemoprotein ethanol dehydrogenase; QHEDH; ADHIIB +ec:1.1.98.1 Transferred to 1.1.9.1 +ec:1.1.98.2 glucose-6-phosphate dehydrogenase (coenzyme-F420); coenzyme F420-dependent glucose-6-phosphate dehydrogenase; F420-dependent glucose-6-phosphate dehydrogenase; FGD1; Rv0407; F420-dependent glucose-6-phosphate dehydrogenase 1 +ec:1.1.98.3 decaprenylphospho-beta-D-ribofuranose 2-dehydrogenase; decaprenylphosphoryl-beta-D-ribofuranose 2'-epimerase; Rv3790; DprE1; decaprenylphospho-beta-D-ribofuranose 2-oxidase +ec:1.1.98.4 F420H2:quinone oxidoreductase; FqoF protein +ec:1.1.98.5 secondary-alcohol dehydrogenase (coenzyme-F420); F420-dependent alcohol dehydrogenase; secondary alcohol:F420 oxidoreductase; F420-dependent secondary alcohol dehydrogenase +ec:1.1.98.6 ribonucleoside-triphosphate reductase (formate); nrdD (gene name); class III ribonucleoside-triphosphate reductase; anaerobic ribonucleotide reductase; anaerobic ribonucleoside-triphosphate reductase +ec:1.1.98.7 serine-type anaerobic sulfatase-maturating enzyme; atsB (gene name) +ec:1.1.99.1 choline dehydrogenase; choline oxidase; choline-cytochrome c reductase; choline:(acceptor) oxidoreductase; choline:(acceptor) 1-oxidoreductase +ec:1.1.99.2 L-2-hydroxyglutarate dehydrogenase; alpha-ketoglutarate reductase; alpha-hydroxyglutarate dehydrogenase; L-alpha-hydroxyglutarate dehydrogenase; hydroxyglutaric dehydrogenase; alpha-hydroxyglutarate oxidoreductase; L-alpha-hydroxyglutarate:NAD+ 2-oxidoreductase; alpha-hydroxyglutarate dehydrogenase (NAD+ specific); (S)-2-hydroxyglutarate:(acceptor) 2-oxidoreductase +ec:1.1.99.3 gluconate 2-dehydrogenase (acceptor); gluconate oxidase; gluconate dehydrogenase; gluconic dehydrogenase; D-gluconate dehydrogenase; gluconic acid dehydrogenase; 2-ketogluconate reductase; D-gluconate dehydrogenase, 2-keto-D-gluconate-yielding; D-gluconate:(acceptor) 2-oxidoreductase +ec:1.1.99.4 dehydrogluconate dehydrogenase; ketogluconate dehydrogenase; alpha-ketogluconate dehydrogenase; 2-keto-D-gluconate dehydrogenase; 2-oxogluconate dehydrogenase +ec:1.1.99.5 Transferred to 1.1.5.3 +ec:1.1.99.6 D-lactate dehydrogenase (acceptor); D-2-hydroxy acid dehydrogenase; D-2-hydroxy-acid dehydrogenase; (R)-2-hydroxy-acid:acceptor 2-oxidoreductase +ec:1.1.99.7 lactate---malate transhydrogenase; malate-lactate transhydrogenase +ec:1.1.99.8 Transferred to 1.1.2.7 and 1.1.2.8 +ec:1.1.99.9 pyridoxine 5-dehydrogenase; pyridoxal-5-dehydrogenase; pyridoxol 5-dehydrogenase; pyridoxin 5-dehydrogenase; pyridoxine dehydrogenase; pyridoxine 5'-dehydrogenase; pyridoxine:(acceptor) 5-oxidoreductase +ec:1.1.99.10 Transferred to 1.1.5.9 +ec:1.1.99.11 Transferred to 1.1.5.14 +ec:1.1.99.12 sorbose dehydrogenase; L-sorbose:(acceptor) 5-oxidoreductase +ec:1.1.99.13 glucoside 3-dehydrogenase (acceptor); D-glucoside 3-dehydrogenase (ambiguous); D-aldohexopyranoside dehydrogenase (ambiguous); D-aldohexoside:(acceptor) 3-oxidoreductase; thuA (gene name); thuB (gene name); glucoside 3-dehydrogenase +ec:1.1.99.14 glycolate dehydrogenase; glycolate oxidoreductase; glycolic acid dehydrogenase; glycolate:(acceptor) 2-oxidoreductase +ec:1.1.99.15 Transferred to 1.5.1.20 +ec:1.1.99.16 Transferred to 1.1.5.4 +ec:1.1.99.17 Transferred to 1.1.5.2 +ec:1.1.99.18 cellobiose dehydrogenase (acceptor); cellobiose dehydrogenase; cellobiose oxidoreductase; Phanerochaete chrysosporium cellobiose oxidoreductase; CBOR; cellobiose oxidase; cellobiose:oxygen 1-oxidoreductase; CDH; cellobiose:(acceptor) 1-oxidoreductase +ec:1.1.99.19 Transferred to 1.17.99.4 +ec:1.1.99.20 alkan-1-ol dehydrogenase (acceptor); polyethylene glycol dehydrogenase; alkan-1-ol:(acceptor) oxidoreductase +ec:1.1.99.21 D-sorbitol dehydrogenase (acceptor); D-sorbitol:(acceptor) 1-oxidoreductase +ec:1.1.99.22 glycerol dehydrogenase (acceptor); glycerol:(acceptor) 1-oxidoreductase +ec:1.1.99.23 Transferred to 1.1.2.6 +ec:1.1.99.24 hydroxyacid-oxoacid transhydrogenase; transhydrogenase, hydroxy acid-oxo acid +ec:1.1.99.25 Transferred to 1.1.5.8 +ec:1.1.99.26 3-hydroxycyclohexanone dehydrogenase +ec:1.1.99.27 (R)-pantolactone dehydrogenase (flavin); 2-dehydropantolactone reductase (flavin); 2-dehydropantoyl-lactone reductase (flavin); (R)-pantoyllactone dehydrogenase (flavin) +ec:1.1.99.28 glucose-fructose oxidoreductase +ec:1.1.99.29 pyranose dehydrogenase (acceptor); pyranose dehydrogenase; pyranose-quinone oxidoreductase; quinone-dependent pyranose dehydrogenase; PDH +ec:1.1.99.30 2-oxo-acid reductase; (2R)-hydroxycarboxylate-viologen-oxidoreductase; HVOR; 2-oxoacid reductase +ec:1.1.99.31 (S)-mandelate dehydrogenase; MDH (ambiguous) +ec:1.1.99.32 L-sorbose 1-dehydrogenase; SDH (ambiguous) +ec:1.1.99.33 Transferred to 1.17.99.7 +ec:1.1.99.34 Transferred to 1.1.98.2 +ec:1.1.99.35 soluble quinoprotein glucose dehydrogenase; soluble glucose dehydrogenase; sGDH; glucose dehydrogenase (PQQ-dependent) +ec:1.1.99.36 alcohol dehydrogenase (nicotinoprotein); NDMA-dependent alcohol dehydrogenase; nicotinoprotein alcohol dehydrogenase; np-ADH; ethanol:N,N-dimethyl-4-nitrosoaniline oxidoreductase +ec:1.1.99.37 methanol dehydrogenase (nicotinoprotein); NDMA-dependent methanol dehydrogenase; nicotinoprotein methanol dehydrogenase; methanol:N,N-dimethyl-4-nitrosoaniline oxidoreductase +ec:1.1.99.38 2-deoxy-scyllo-inosamine dehydrogenase (AdoMet-dependent); btrN (gene name); 2-deoxy-scyllo-inosamine dehydrogenase (SAM-dependent) +ec:1.1.99.39 D-2-hydroxyglutarate dehydrogenase; D2HGDH (gene name) +ec:1.1.99.40 (R)-2-hydroxyglutarate---pyruvate transhydrogenase; DLD3 (gene name) +ec:1.1.99.41 3-hydroxy-1,2-didehydro-2,3-dihydrotabersonine reductase; T3R; tabersonine 3-reductase +ec:1.1.99.42 4-pyridoxic acid dehydrogenase; mlr6792 (locus name) +ec:1.2.1.1 Deleted entry +ec:1.2.1.2 Transferred to 1.17.1.9 +ec:1.2.1.3 aldehyde dehydrogenase (NAD+); CoA-independent aldehyde dehydrogenase; m-methylbenzaldehyde dehydrogenase; NAD-aldehyde dehydrogenase; NAD-dependent 4-hydroxynonenal dehydrogenase; NAD-dependent aldehyde dehydrogenase; NAD-linked aldehyde dehydrogenase; propionaldehyde dehydrogenase; aldehyde dehydrogenase (NAD) +ec:1.2.1.4 aldehyde dehydrogenase (NADP+); NADP-acetaldehyde dehydrogenase; NADP-dependent aldehyde dehydrogenase; aldehyde dehydrogenase (NADP) +ec:1.2.1.5 aldehyde dehydrogenase [NAD(P)+]; ALDH +ec:1.2.1.6 Deleted entry +ec:1.2.1.7 benzaldehyde dehydrogenase (NADP+); NADP+-linked benzaldehyde dehydrogenase; benzaldehyde dehydrogenase (NADP+) +ec:1.2.1.8 betaine-aldehyde dehydrogenase; betaine aldehyde oxidase; BADH; betaine aldehyde dehydrogenase; BetB +ec:1.2.1.9 glyceraldehyde-3-phosphate dehydrogenase (NADP+); triosephosphate dehydrogenase (ambiguous); glyceraldehyde phosphate dehydrogenase (nicotinamide adenine dinucleotide phosphate); glyceraldehyde phosphate dehydrogenase (NADP+); glyceraldehyde 3-phosphate dehydrogenase (NADP+); NADP+-glyceraldehyde phosphate dehydrogenase; NADP+-glyceraldehyde-3-phosphate dehydrogenase; glyceraldehyde-3-phosphate:NADP+ reductase; nonphosphorylating glyceraldehyde-3-phosphate dehydrogenase +ec:1.2.1.10 acetaldehyde dehydrogenase (acetylating); aldehyde dehydrogenase (acylating); ADA; acylating acetaldehyde dehyrogenase; DmpF; BphJ +ec:1.2.1.11 aspartate-semialdehyde dehydrogenase; aspartate semialdehyde dehydrogenase; aspartic semialdehyde dehydrogenase; L-aspartate-beta-semialdehyde:NADP+ oxidoreductase (phosphorylating); aspartic beta-semialdehyde dehydrogenase; ASA dehydrogenase +ec:1.2.1.12 glyceraldehyde-3-phosphate dehydrogenase (phosphorylating); triosephosphate dehydrogenase (ambiguous); glyceraldehyde phosphate dehydrogenase; phosphoglyceraldehyde dehydrogenase; 3-phosphoglyceraldehyde dehydrogenase; NAD+-dependent glyceraldehyde phosphate dehydrogenase; glyceraldehyde phosphate dehydrogenase (NAD+); glyceraldehyde-3-phosphate dehydrogenase (NAD+); NADH-glyceraldehyde phosphate dehydrogenase; glyceraldehyde-3-P-dehydrogenase +ec:1.2.1.13 glyceraldehyde-3-phosphate dehydrogenase (NADP+) (phosphorylating); triosephosphate dehydrogenase (NADP+); dehydrogenase, glyceraldehyde phosphate (nicotinamide adenine dinucleotide phosphate) (phosphorylating); glyceraldehyde phosphate dehydrogenase (nicotinamide adenine dinucleotide phosphate) (phosphorylating); NADP+-glyceraldehyde-3-phosphate dehydrogenase; NADP+-glyceraldehyde phosphate dehydrogenase; NADP+-dependent glyceraldehyde phosphate dehydrogenase; NADP+-triose phosphate dehydrogenase; glyceraldehyde-3-phosphate dehydrogenase (NADP+) (phosphorylating); GAPDH +ec:1.2.1.14 Transferred to 1.1.1.205 +ec:1.2.1.15 malonate-semialdehyde dehydrogenase +ec:1.2.1.16 succinate-semialdehyde dehydrogenase [NAD(P)+]; succinate semialdehyde dehydrogenase (nicotinamide adenine dinucleotide (phosphate)); succinate-semialdehyde dehydrogenase [NAD(P)] +ec:1.2.1.17 glyoxylate dehydrogenase (acylating) +ec:1.2.1.18 malonate-semialdehyde dehydrogenase (acetylating); malonic semialdehyde oxidative decarboxylase +ec:1.2.1.19 aminobutyraldehyde dehydrogenase; gamma-guanidinobutyraldehyde dehydrogenase (ambiguous); ABAL dehydrogenase; 4-aminobutyraldehyde dehydrogenase; 4-aminobutanal dehydrogenase; gamma-aminobutyraldehyde dehydroganase; 1-pyrroline dehydrogenase; ABALDH; YdcW +ec:1.2.1.20 glutarate-semialdehyde dehydrogenase; glutarate semialdehyde dehydrogenase; davD (gene name) +ec:1.2.1.21 glycolaldehyde dehydrogenase; glycol aldehyde dehydrogenase +ec:1.2.1.22 lactaldehyde dehydrogenase; L-lactaldehyde:NAD oxidoreductase; nicotinamide adenine dinucleotide (NAD)-linked dehydrogenase +ec:1.2.1.23 2-oxoaldehyde dehydrogenase (NAD+); alpha-ketoaldehyde dehydrogenase; methylglyoxal dehydrogenase; NAD+-linked alpha-ketoaldehyde dehydrogenase; 2-ketoaldehyde dehydrogenase; NAD+-dependent alpha-ketoaldehyde dehydrogenase +ec:1.2.1.24 succinate-semialdehyde dehydrogenase (NAD+); succinate semialdehyde dehydrogenase (NAD+); succinic semialdehyde dehydrogenase (NAD+); succinyl semialdehyde dehydrogenase (NAD+); succinate semialdehyde:NAD+ oxidoreductase +ec:1.2.1.25 branched-chain alpha-keto acid dehydrogenase system; branched-chain alpha-keto acid dehydrogenase complex; 2-oxoisovalerate dehydrogenase; alpha-ketoisovalerate dehydrogenase; 2-oxoisovalerate dehydrogenase (acylating) +ec:1.2.1.26 2,5-dioxovalerate dehydrogenase; 2-oxoglutarate semialdehyde dehydrogenase; alpha-ketoglutaric semialdehyde dehydrogenase +ec:1.2.1.27 methylmalonate-semialdehyde dehydrogenase (CoA-acylating); MSDH; MMSA dehydrogenase; iolA (gene name); methylmalonate-semialdehyde dehydrogenase (acylating) +ec:1.2.1.28 benzaldehyde dehydrogenase (NAD+); benzaldehyde (NAD+) dehydrogenase; benzaldehyde dehydrogenase (NAD+) +ec:1.2.1.29 aryl-aldehyde dehydrogenase +ec:1.2.1.30 carboxylate reductase (NADP+); aromatic acid reductase; aryl-aldehyde dehydrogenase (NADP+) +ec:1.2.1.31 L-aminoadipate-semialdehyde dehydrogenase; aminoadipate semialdehyde dehydrogenase; 2-aminoadipate semialdehyde dehydrogenase; alpha-aminoadipate-semialdehyde dehydrogenase; alpha-aminoadipate reductase; 2-aminoadipic semialdehyde dehydrogenase; L-alpha-aminoadipate delta-semialdehyde oxidoreductase; L-alpha-aminoadipate delta-semialdehyde:NAD+ oxidoreductase; L-alpha-aminoadipate delta-semialdehyde:nicotinamide adenine dinucleotide oxidoreductase; L-2-aminoadipate 6-semialdehyde:NAD(P)+ 6-oxidoreductase +ec:1.2.1.32 aminomuconate-semialdehyde dehydrogenase; 2-aminomuconate semialdehyde dehydrogenase; 2-hydroxymuconic acid semialdehyde dehydrogenase; 2-hydroxymuconate semialdehyde dehydrogenase; alpha-aminomuconic epsilon-semialdehyde dehydrogenase; alpha-hydroxymuconic epsilon-semialdehyde dehydrogenase; 2-hydroxymuconic semialdehyde dehydrogenase +ec:1.2.1.33 (R)-dehydropantoate dehydrogenase; D-aldopantoate dehydrogenase; D-2-hydroxy-3,3-dimethyl-3-formylpropionate:diphosphopyridine nucleotide (DPN+) oxidoreductase +ec:1.2.1.34 Transferred to 1.1.1.131 +ec:1.2.1.35 Transferred to 1.1.1.203 +ec:1.2.1.36 retinal dehydrogenase; cytosolic retinal dehydrogenase +ec:1.2.1.37 Transferred to 1.17.1.4 +ec:1.2.1.38 N-acetyl-gamma-glutamyl-phosphate reductase; reductase, acetyl-gamma-glutamyl phosphate; N-acetylglutamate 5-semialdehyde dehydrogenase; N-acetylglutamic gamma-semialdehyde dehydrogenase; N-acetyl-L-glutamate gamma-semialdehyde:NADP+ oxidoreductase (phosphorylating) +ec:1.2.1.39 phenylacetaldehyde dehydrogenase +ec:1.2.1.40 Deleted entry +ec:1.2.1.41 glutamate-5-semialdehyde dehydrogenase; beta-glutamylphosphate reductase; gamma-glutamyl phosphate reductase; beta-glutamylphosphate reductase; glutamate semialdehyde dehydrogenase; glutamate-gamma-semialdehyde dehydrogenase +ec:1.2.1.42 hexadecanal dehydrogenase (acylating); fatty acyl-CoA reductase +ec:1.2.1.43 Transferred to 1.17.1.10 +ec:1.2.1.44 cinnamoyl-CoA reductase; feruloyl-CoA reductase; cinnamoyl-coenzyme A reductase; ferulyl-CoA reductase; feruloyl coenzyme A reductase; p-hydroxycinnamoyl coenzyme A reductase; cinnamoyl-CoA:NADPH reductase +ec:1.2.1.45 Transferred to 1.1.1.312 +ec:1.2.1.46 formaldehyde dehydrogenase; NAD+-linked formaldehyde dehydrogenase; NAD+-dependent formaldehyde dehydrogenase +ec:1.2.1.47 4-trimethylammoniobutyraldehyde dehydrogenase; 4-trimethylaminobutyraldehyde dehydrogenase; 4-N-trimethylaminobutyraldehyde dehydrogenase +ec:1.2.1.48 long-chain-aldehyde dehydrogenase; long-chain aliphatic aldehyde dehydrogenase; long-chain fatty aldehyde dehydrogenase; fatty aldehyde:NAD+ oxidoreductase +ec:1.2.1.49 2-oxoaldehyde dehydrogenase (NADP+); alpha-ketoaldehyde dehydrogenase; methylglyoxal dehydrogenase; NADP+-linked alpha-ketoaldehyde dehydrogenase; 2-ketoaldehyde dehydrogenase; NADP+-dependent alpha-ketoaldehyde dehydrogenase +ec:1.2.1.50 long-chain acyl-protein thioester reductase; luxC (gene name); acyl-CoA reductase; acyl coenzyme A reductase; long-chain-aldehyde:NADP+ oxidoreductase (acyl-CoA-forming); long-chain-fatty-acyl-CoA reductase +ec:1.2.1.51 pyruvate dehydrogenase (NADP+) +ec:1.2.1.52 oxoglutarate dehydrogenase (NADP+); oxoglutarate dehydrogenase (NADP+) +ec:1.2.1.53 4-hydroxyphenylacetaldehyde dehydrogenase; 4-HPAL dehydrogenase +ec:1.2.1.54 gamma-guanidinobutyraldehyde dehydrogenase; alpha-guanidinobutyraldehyde dehydrogenase; 4-guanidinobutyraldehyde dehydrogenase; GBAL dehydrogenase +ec:1.2.1.55 Transferred to 1.1.1.279 +ec:1.2.1.56 Transferred to 1.1.1.280 +ec:1.2.1.57 butanal dehydrogenase +ec:1.2.1.58 phenylglyoxylate dehydrogenase (acylating) +ec:1.2.1.59 glyceraldehyde-3-phosphate dehydrogenase (NAD(P)+) (phosphorylating); triosephosphate dehydrogenase (NAD(P)); glyceraldehyde-3-phosphate dehydrogenase (NAD(P)) (phosphorylating) +ec:1.2.1.60 5-carboxymethyl-2-hydroxymuconic-semialdehyde dehydrogenase; carboxymethylhydroxymuconic semialdehyde dehydrogenase +ec:1.2.1.61 4-hydroxymuconic-semialdehyde dehydrogenase +ec:1.2.1.62 4-formylbenzenesulfonate dehydrogenase +ec:1.2.1.63 6-oxohexanoate dehydrogenase +ec:1.2.1.64 4-hydroxybenzaldehyde dehydrogenase (NAD+); p-hydroxybenzaldehyde dehydrogenase (ambiguous); 4-hydroxybenzaldehyde dehydrogenase (ambiguous) +ec:1.2.1.65 salicylaldehyde dehydrogenase +ec:1.2.1.66 Transferred to 1.1.1.306 +ec:1.2.1.67 vanillin dehydrogenase +ec:1.2.1.68 coniferyl-aldehyde dehydrogenase +ec:1.2.1.69 fluoroacetaldehyde dehydrogenase +ec:1.2.1.70 glutamyl-tRNA reductase +ec:1.2.1.71 succinylglutamate-semialdehyde dehydrogenase; succinylglutamic semialdehyde dehydrogenase; N-succinylglutamate 5-semialdehyde dehydrogenase; SGSD; AruD; AstD +ec:1.2.1.72 erythrose-4-phosphate dehydrogenase; erythrose 4-phosphate dehydrogenase; E4PDH; GapB; Epd dehydrogenase; E4P dehydrogenase +ec:1.2.1.73 sulfoacetaldehyde dehydrogenase; SafD +ec:1.2.1.74 abieta-7,13-dien-18-al dehydrogenase; abietadienal dehydrogenase (ambiguous) +ec:1.2.1.75 malonyl-CoA reductase (malonate semialdehyde-forming); NADP-dependent malonyl CoA reductase; malonyl CoA reductase (NADP); malonyl CoA reductase (malonate semialdehyde-forming) +ec:1.2.1.76 succinate-semialdehyde dehydrogenase (acylating); succinyl-coA reductase; coenzyme-A-dependent succinate-semialdehyde dehydrogenase +ec:1.2.1.77 3,4-dehydroadipyl-CoA semialdehyde dehydrogenase (NADP+); BoxD; 3,4-dehydroadipyl-CoA semialdehyde dehydrogenase +ec:1.2.1.78 2-formylbenzoate dehydrogenase; 2-carboxybenzaldehyde dehydrogenase; 2CBAL dehydrogenase; PhdK +ec:1.2.1.79 succinate-semialdehyde dehydrogenase (NADP+); succinic semialdehyde dehydrogenase (NADP+); succinyl semialdehyde dehydrogenase (NADP+); succinate semialdehyde:NADP+ oxidoreductase; NADP-dependent succinate-semialdehyde dehydrogenase; GabD +ec:1.2.1.80 long-chain acyl-[acyl-carrier-protein] reductase; long-chain acyl-[acp] reductase; fatty acyl-[acyl-carrier-protein] reductase; acyl-[acp] reductase +ec:1.2.1.81 sulfoacetaldehyde dehydrogenase (acylating); SauS +ec:1.2.1.82 beta-apo-4'-carotenal oxygenase; beta-apo-4'-carotenal dehydrogenase; YLO-1; carD (gene name) +ec:1.2.1.83 3-succinoylsemialdehyde-pyridine dehydrogenase +ec:1.2.1.84 alcohol-forming fatty acyl-CoA reductase; FAR (gene name); long-chain acyl-CoA:NADPH reductase +ec:1.2.1.85 2-hydroxymuconate-6-semialdehyde dehydrogenase; xylG (gene name); praB (gene name) +ec:1.2.1.86 geranial dehydrogenase; GaDH; geoB (gene name) +ec:1.2.1.87 propanal dehydrogenase (CoA-propanoylating); BphJ +ec:1.2.1.88 L-glutamate gamma-semialdehyde dehydrogenase; 1-pyrroline-5-carboxylate dehydrogenase; Delta1-pyrroline-5-carboxylate dehydrogenase; 1-pyrroline dehydrogenase; pyrroline-5-carboxylate dehydrogenase; pyrroline-5-carboxylic acid dehydrogenase; L-pyrroline-5-carboxylate-NAD+ oxidoreductase; 1-pyrroline-5-carboxylate:NAD+ oxidoreductase; Delta1-pyrroline-5-carboxylic acid dehydrogenase +ec:1.2.1.89 D-glyceraldehyde dehydrogenase (NADP+); glyceraldehyde dehydrogenase; GADH +ec:1.2.1.90 glyceraldehyde-3-phosphate dehydrogenase [NAD(P)+]; non-phosphorylating glyceraldehyde-3-phosphate dehydrogenase (ambiguous); GAPN +ec:1.2.1.91 3-oxo-5,6-dehydrosuberyl-CoA semialdehyde dehydrogenase; paaZ (gene name) +ec:1.2.1.92 3,6-anhydro-alpha-L-galactose dehydrogenase +ec:1.2.1.93 Transferred to 1.17.1.11 +ec:1.2.1.94 farnesal dehydrogenase; AaALDH3 +ec:1.2.1.95 L-2-aminoadipate reductase; LYS2; alpha-aminoadipate reductase +ec:1.2.1.96 4-hydroxybenzaldehyde dehydrogenase (NADP+); p-hydroxybenzaldehyde dehydrogenase (ambiguous); pchA (gene name) +ec:1.2.1.97 3-sulfolactaldehyde dehydrogenase; SLA dehydrogenase +ec:1.2.1.98 2-hydroxy-2-methylpropanal dehydrogenase; mpdC (gene name) +ec:1.2.1.99 4-(gamma-glutamylamino)butanal dehydrogenase; puuC (gene name) +ec:1.2.1.100 5-formyl-3-hydroxy-2-methylpyridine 4-carboxylic acid 5-dehydrogenase; mlr6793 (locus name) +ec:1.2.1.101 L-tyrosine reductase; lnaA (gene name); lnbA (gene name) +ec:1.2.1.102 isopyridoxal dehydrogenase (5-pyridoxate-forming) +ec:1.2.1.103 [amino-group carrier protein]-6-phospho-L-2-aminoadipate reductase; lysY (gene name) +ec:1.2.1.104 pyruvate dehydrogenase system; pyruvate dehydrogenase complex; PDH +ec:1.2.1.105 2-oxoglutarate dehydrogenase system; 2-oxoglutarate dehydrogenase complex +ec:1.2.1.106 [amino-group carrier protein]-5-phospho-L-glutamate reductase; lysY (gene name) +ec:1.2.1.107 glyceraldehyde-3-phosphate dehydrogenase (arsenate-transferring) +ec:1.2.2.1 formate dehydrogenase (cytochrome); formate dehydrogenase; formate:cytochrome b1 oxidoreductase +ec:1.2.2.2 Deleted entry +ec:1.2.2.3 Transferred to 1.17.2.3 +ec:1.2.2.4 Deleted entry +ec:1.2.3.1 aldehyde oxidase; quinoline oxidase; retinal oxidase +ec:1.2.3.2 Transferred to 1.17.3.2 +ec:1.2.3.3 pyruvate oxidase; pyruvic oxidase; phosphate-dependent pyruvate oxidase +ec:1.2.3.4 oxalate oxidase; aero-oxalo dehydrogenase; oxalic acid oxidase +ec:1.2.3.5 glyoxylate oxidase +ec:1.2.3.6 pyruvate oxidase (CoA-acetylating) +ec:1.2.3.7 indole-3-acetaldehyde oxidase; indoleacetaldehyde oxidase; IAAld oxidase; AO1; indole-3-acetaldehyde:oxygen oxidoreductase +ec:1.2.3.8 pyridoxal oxidase +ec:1.2.3.9 aryl-aldehyde oxidase +ec:1.2.3.10 Deleted entry +ec:1.2.3.11 Deleted entry +ec:1.2.3.12 Transferred to 1.14.13.82 +ec:1.2.3.13 4-hydroxyphenylpyruvate oxidase +ec:1.2.3.14 abscisic-aldehyde oxidase; abscisic aldehyde oxidase; AAO3; AOd; AOdelta +ec:1.2.3.15 (methyl)glyoxal oxidase; glx1 (gene name); glx2 (gene name) +ec:1.2.4.1 pyruvate dehydrogenase (acetyl-transferring); pyruvate decarboxylase (ambiguous); pyruvate dehydrogenase (ambiguous); pyruvate dehydrogenase (lipoamide); pyruvate:lipoamide 2-oxidoreductase (decarboxylating and acceptor-acetylating); pyruvic acid dehydrogenase; pyruvic dehydrogenase (ambiguous) +ec:1.2.4.2 oxoglutarate dehydrogenase (succinyl-transferring); 2-ketoglutarate dehydrogenase; 2-oxoglutarate dehydrogenase; 2-oxoglutarate: lipoate oxidoreductase; 2-oxoglutarate:lipoamide 2-oxidoreductase (decarboxylating and acceptor-succinylating); alpha-ketoglutarate dehydrogenase; alphaketoglutaric acid dehydrogenase; alpha-ketoglutaric dehydrogenase; alpha-oxoglutarate dehydrogenase; AKGDH; OGDC; ketoglutaric dehydrogenase; oxoglutarate decarboxylase (misleading); oxoglutarate dehydrogenase; oxoglutarate dehydrogenase (lipoamide) +ec:1.2.4.3 Deleted entry +ec:1.2.4.4 3-methyl-2-oxobutanoate dehydrogenase (2-methylpropanoyl-transferring); 2-oxoisocaproate dehydrogenase; 2-oxoisovalerate (lipoate) dehydrogenase; 3-methyl-2-oxobutanoate dehydrogenase (lipoamide); 3-methyl-2-oxobutanoate:lipoamide oxidoreductase (decarboxylating and acceptor-2-methylpropanoylating); alpha-keto-alpha-methylvalerate dehydrogenase; alpha-ketoisocaproate dehydrogenase; alpha-ketoisocaproic dehydrogenase; alpha-ketoisocaproic-alpha-keto-alpha-methylvaleric dehydrogenase; alpha-ketoisovalerate dehydrogenase; alpha-oxoisocaproate dehydrogenase; BCKDH (ambiguous); BCOAD; branched chain keto acid dehydrogenase; branched-chain (-2-oxoacid) dehydrogenase (BCD); branched-chain 2-keto acid dehydrogenase; branched-chain 2-oxo acid dehydrogenase; branched-chain alpha-keto acid dehydrogenase; branched-chain alpha-oxo acid dehydrogenase; branched-chain keto acid dehydrogenase; branched-chain ketoacid dehydrogenase; dehydrogenase, 2-oxoisovalerate (lipoate); dehydrogenase, branched chain alpha-keto acid +ec:1.2.5.1 pyruvate dehydrogenase (quinone); pyruvate dehydrogenase (ambiguous); pyruvic dehydrogenase (ambiguous); pyruvic (cytochrome b1) dehydrogenase (incorrect); pyruvate:ubiquinone-8-oxidoreductase; pyruvate oxidase (ambiguous); pyruvate dehydrogenase (cytochrome) (incorrect) +ec:1.2.5.2 aldehyde dehydrogenase (quinone); aldehyde dehydrogenase (acceptor) +ec:1.2.5.3 aerobic carbon monoxide dehydrogenase; MoCu-CODH; coxSML (gene names); molybdoenzyme carbon monoxide dehydrogenase +ec:1.2.7.1 pyruvate synthase; pyruvate oxidoreductase; pyruvate synthetase; pyruvate:ferredoxin oxidoreductase; pyruvic-ferredoxin oxidoreductase; 2-oxobutyrate synthase; alpha-ketobutyrate-ferredoxin oxidoreductase; 2-ketobutyrate synthase; alpha-ketobutyrate synthase; 2-oxobutyrate-ferredoxin oxidoreductase; 2-oxobutanoate:ferredoxin 2-oxidoreductase (CoA-propionylating); 2-oxobutanoate:ferredoxin 2-oxidoreductase (CoA-propanoylating) +ec:1.2.7.2 Deleted entry +ec:1.2.7.3 2-oxoglutarate synthase; 2-ketoglutarate ferredoxin oxidoreductase; 2-oxoglutarate:ferredoxin oxidoreductase; KGOR; 2-oxoglutarate ferredoxin oxidoreductase; 2-oxoglutarate:ferredoxin 2-oxidoreductase (CoA-succinylating) +ec:1.2.7.4 anaerobic carbon monoxide dehydrogenase; Ni-CODH; carbon-monoxide dehydrogenase (ferredoxin) +ec:1.2.7.5 aldehyde ferredoxin oxidoreductase; AOR +ec:1.2.7.6 glyceraldehyde-3-phosphate dehydrogenase (ferredoxin); GAPOR; glyceraldehyde-3-phosphate Fd oxidoreductase; glyceraldehyde-3-phosphate ferredoxin reductase +ec:1.2.7.7 3-methyl-2-oxobutanoate dehydrogenase (ferredoxin); 2-ketoisovalerate ferredoxin reductase; 3-methyl-2-oxobutanoate synthase (ferredoxin); VOR; branched-chain ketoacid ferredoxin reductase; branched-chain oxo acid ferredoxin reductase; keto-valine-ferredoxin oxidoreductase; ketoisovalerate ferredoxin reductase; 2-oxoisovalerate ferredoxin reductase +ec:1.2.7.8 indolepyruvate ferredoxin oxidoreductase; 3-(indol-3-yl)pyruvate synthase (ferredoxin); IOR +ec:1.2.7.9 Deleted entry +ec:1.2.7.10 oxalate oxidoreductase +ec:1.2.7.11 2-oxoacid oxidoreductase (ferredoxin); OFOR +ec:1.2.7.12 formylmethanofuran dehydrogenase; formylmethanofuran:acceptor oxidoreductase +ec:1.2.98.1 formaldehyde dismutase; aldehyde dismutase; cannizzanase; nicotinoprotein aldehyde dismutase +ec:1.2.99.1 Transferred to 1.17.99.4 +ec:1.2.99.2 Transferred to 1.2.7.4 +ec:1.2.99.3 Transferred to 1.2.5.2 +ec:1.2.99.4 Transferred to 1.2.98.1 +ec:1.2.99.5 Transferred to 1.2.7.12 +ec:1.2.99.6 carboxylate reductase; aldehyde:(acceptor) oxidoreductase +ec:1.2.99.7 aldehyde dehydrogenase (FAD-independent); aldehyde oxidase; aldehyde oxidoreductase; Mop; AORDd +ec:1.2.99.8 glyceraldehyde dehydrogenase (FAD-containing); glyceraldehyde oxidoreductase +ec:1.2.99.9 Transferred to 1.17.98.3 +ec:1.2.99.10 4,4'-diapolycopenoate synthase; crtNc; 4,4'-diapolycopenealdehyde oxidase (misleading) +ec:1.3.1.1 dihydropyrimidine dehydrogenase (NAD+); dihydropyrimidine dehydrogenase; dihydrothymine dehydrogenase; pyrimidine reductase; thymine reductase; uracil reductase; dihydrouracil dehydrogenase (NAD+) +ec:1.3.1.2 dihydropyrimidine dehydrogenase (NADP+); dihydrothymine dehydrogenase; dihydrouracil dehydrogenase (NADP+); 4,5-dihydrothymine: oxidoreductase; DPD; DHPDH; dehydrogenase, dihydrouracil (nicotinamide adenine dinucleotide phosphate); DHU dehydrogenase; hydropyrimidine dehydrogenase; dihydropyrimidine dehydrogenase (NADP) +ec:1.3.1.3 Delta4-3-oxosteroid 5beta-reductase; 3-oxo-Delta4-steroid 5beta-reductase; 5beta-reductase; androstenedione 5beta-reductase; cholestenone 5beta-reductase; cortisone 5beta-reductase; cortisone beta-reductase; cortisone Delta4-5beta-reductase; steroid 5beta-reductase; testosterone 5beta-reductase; Delta4-3-ketosteroid 5beta-reductase; Delta4-5beta-reductase; Delta4-hydrogenase; 4,5beta-dihydrocortisone:NADP+ Delta4-oxidoreductase; 3-oxo-5beta-steroid:NADP+ Delta4-oxidoreductase +ec:1.3.1.4 Transferred to 1.3.1.4 and 1.3.1.22 +ec:1.3.1.5 cucurbitacin Delta23-reductase; NAD(P)H: cucurbitacin B Delta23-oxidoreductase +ec:1.3.1.6 fumarate reductase (NADH); NADH-fumarate reductase; NADH-dependent fumarate reductase; fumarate reductase (NADH) +ec:1.3.1.7 meso-tartrate dehydrogenase +ec:1.3.1.8 acyl-CoA dehydrogenase (NADP+); 2-enoyl-CoA reductase; dehydrogenase, acyl coenzyme A (nicotinamide adenine dinucleotide phosphate); enoyl coenzyme A reductase; crotonyl coenzyme A reductase; crotonyl-CoA reductase; acyl-CoA dehydrogenase (NADP+) +ec:1.3.1.9 enoyl-[acyl-carrier-protein] reductase (NADH); enoyl-[acyl carrier protein] reductase; enoyl-ACP reductase; NADH-enoyl acyl carrier protein reductase; NADH-specific enoyl-ACP reductase; acyl-[acyl-carrier-protein]:NAD+ oxidoreductase; fabI (gene name) +ec:1.3.1.10 enoyl-[acyl-carrier-protein] reductase (NADPH, Si-specific); acyl-ACP dehydrogenase (ambiguous); enoyl-[acyl carrier protein] (reduced nicotinamide adenine dinucleotide phosphate) reductase; NADPH 2-enoyl Co A reductase; enoyl acyl-carrier-protein reductase (ambiguous); enoyl-ACP reductase (ambiguous); acyl-[acyl-carrier-protein]:NADP+ oxidoreductase (B-specific); acyl-[acyl-carrier protein]:NADP+ oxidoreductase (B-specific); enoyl-[acyl-carrier-protein] reductase (NADPH, B-specific) +ec:1.3.1.11 2-coumarate reductase; melilotate dehydrogenase +ec:1.3.1.12 prephenate dehydrogenase; hydroxyphenylpyruvate synthase; chorismate mutase---prephenate dehydrogenase +ec:1.3.1.13 prephenate dehydrogenase (NADP+); prephenate dehydrogenase (ambiguous); prephenate (nicotinamide adenine dinucleotide phosphate) dehydrogenase; prephenate dehydrogenase (NADP) +ec:1.3.1.14 dihydroorotate dehydrogenase (NAD+); orotate reductase (NADH); orotate reductase (NADH2); DHOdehase (ambiguous); DHOD (ambiguous); DHODase (ambiguous); dihydroorotate oxidase, pyrD (gene name) +ec:1.3.1.15 dihydroorotate dehydrogenase (NADP+); orotate reductase; dihydro-orotic dehydrogenase; L-5,6-dihydro-orotate:NAD+ oxidoreductase; orotate reductase (NADPH) +ec:1.3.1.16 beta-nitroacrylate reductase +ec:1.3.1.17 3-methyleneoxindole reductase; 3-methyloxindole:NADP+ oxidoreductase +ec:1.3.1.18 kynurenate-7,8-dihydrodiol dehydrogenase; 7,8-dihydro-7,8-dihydroxykynurenate dehydrogenase; 7,8-dihydroxykynurenic acid 7,8-diol dehydrogenase +ec:1.3.1.19 cis-1,2-dihydrobenzene-1,2-diol dehydrogenase; cis-benzene glycol dehydrogenase; cis-1,2-dihydrocyclohexa-3,5-diene (nicotinamide adenine dinucleotide) oxidoreductase +ec:1.3.1.20 trans-1,2-dihydrobenzene-1,2-diol dehydrogenase; dihydrodiol dehydrogenase +ec:1.3.1.21 7-dehydrocholesterol reductase; DHCR7 (gene name); 7-DHC reductase; 7-dehydrocholesterol dehydrogenase/cholesterol oxidase; Delta7-sterol reductase +ec:1.3.1.22 3-oxo-5alpha-steroid 4-dehydrogenase (NADP+); cholestenone 5alpha-reductase; testosterone Delta4-5alpha-reductase; steroid 5alpha-reductase; 3-oxosteroid Delta4-dehydrogenase; 5alpha-reductase; steroid 5alpha-hydrogenase; 3-oxosteroid 5alpha-reductase; testosterone Delta4-hydrogenase; 4-ene-3-oxosteroid 5alpha-reductase; reduced nicotinamide adenine dinucleotide phosphate:Delta4-3-ketosteroid 5alpha-oxidoreductase; 4-ene-5alpha-reductase; Delta4-3-ketosteroid 5alpha-oxidoreductase; cholest-4-en-3-one 5alpha-reductase; testosterone 5alpha-reductase; 3-oxo-5alpha-steroid 4-dehydrogenase +ec:1.3.1.23 Deleted entry +ec:1.3.1.24 biliverdin reductase +ec:1.3.1.25 1,6-dihydroxycyclohexa-2,4-diene-1-carboxylate dehydrogenase; 3,5-cyclohexadiene-1,2-diol-1-carboxylate dehydrogenase; 3,5-cyclohexadiene-1,2-diol-1-carboxylic acid dehydrogenase; dihydrodihydroxybenzoate dehydrogenase; DHBDH; cis-1,2-dihydroxycyclohexa-3,5-diene-1-carboxylate dehydrogenase; 2-hydro-1,2-dihydroxybenzoate dehydrogenase; cis-1,2-dihydroxycyclohexa-3,5-diene-1-carboxylate:NAD+ oxidoreductase; dihydrodihydroxybenzoate dehydrogenase; (1R,6R)-1,6-dihydroxycyclohexa-2,4-diene-1-carboxylate:NAD+ oxidoreductase (decarboxylating) +ec:1.3.1.26 Transferred to 1.17.1.8 +ec:1.3.1.27 2-hexadecenal reductase; 2-alkenal reductase; hexadecanal: NADP+ oxidoreductase +ec:1.3.1.28 2,3-dihydro-2,3-dihydroxybenzoate dehydrogenase; 2,3-DHB dehydrogenase; 2,3-dihydro-2,3-dihydroxybenzoate:NAD+ oxidoreductase +ec:1.3.1.29 cis-1,2-dihydro-1,2-dihydroxynaphthalene dehydrogenase; (+)-cis-naphthalene dihydrodiol dehydrogenase; naphthalene dihydrodiol dehydrogenase; cis-dihydrodiol naphthalene dehydrogenase; cis-1,2-dihydronaphthalene-1,2-diol:NAD+ 1,2-oxidoreductase +ec:1.3.1.30 Transferred to 1.3.1.30 and 1.3.1.22 +ec:1.3.1.31 2-enoate reductase; enoate reductase +ec:1.3.1.32 maleylacetate reductase; maleolylacetate reductase +ec:1.3.1.33 protochlorophyllide reductase; NADPH2-protochlorophyllide oxidoreductase; NADPH-protochlorophyllide oxidoreductase; NADPH-protochlorophyllide reductase; protochlorophyllide oxidoreductase (ambiguous); protochlorophyllide photooxidoreductase; light-dependent protochlorophyllide reductase +ec:1.3.1.34 2,4-dienoyl-CoA reductase [(2E)-enoyl-CoA-producing]; fadH (gene name); 4-enoyl-CoA reductase (NADPH) (ambiguous); 4-enoyl coenzyme A (reduced nicotinamide adenine dinucleotide phosphate) reductase (ambiguous); 4-enoyl-CoA reductase (ambiguous); 2,4-dienoyl-CoA reductase (NADPH) (ambiguous); trans-2,3-didehydroacyl-CoA:NADP+ 4-oxidoreductase +ec:1.3.1.35 Transferred to 1.14.19.22 +ec:1.3.1.36 geissoschizine dehydrogenase +ec:1.3.1.37 cis-2-enoyl-CoA reductase (NADPH); NADPH-dependent cis-enoyl-CoA reductase; reductase, cis-2-enoyl coenzyme A; cis-2-enoyl-coenzyme A reductase; cis-2-enoyl-CoA reductase (NADPH) +ec:1.3.1.38 trans-2-enoyl-CoA reductase (NADPH); NADPH-dependent trans-2-enoyl-CoA reductase; reductase, trans-enoyl coenzyme A; trans-2-enoyl-CoA reductase (NADPH2) +ec:1.3.1.39 enoyl-[acyl-carrier-protein] reductase (NADPH, Re-specific); acyl-ACP dehydrogenase; enoyl-[acyl carrier protein] (reduced nicotinamide adenine dinucleotide phosphate) reductase; NADPH 2-enoyl Co A reductase; enoyl-ACp reductase; enoyl-[acyl-carrier-protein] reductase (NADPH2, A-specific); acyl-[acyl-carrier-protein]:NADP+ oxidoreductase (A-specific); enoyl-[acyl-carrier-protein] reductase (NADPH, A-specific); acyl-[acyl-carrier protein]:NADP+ oxidoreductase (A-specific) +ec:1.3.1.40 2-hydroxy-6-oxo-6-phenylhexa-2,4-dienoate reductase; 2-hydroxy-6-oxo-phenylhexa-2,4-dienoate (reduced nicotinamide adenine dinucleotide phosphate) reductase +ec:1.3.1.41 xanthommatin reductase +ec:1.3.1.42 12-oxophytodienoate reductase; 12-oxo-phytodienoic acid reductase +ec:1.3.1.43 arogenate dehydrogenase; arogenic dehydrogenase (ambiguous); cyclohexadienyl dehydrogenase (ambiguous); pretyrosine dehydrogenase (ambiguous); L-arogenate:NAD+ oxidoreductase; arogenate dehydrogenase (NAD+) +ec:1.3.1.44 trans-2-enoyl-CoA reductase (NAD+); trans-2-enoyl-CoA reductase (NAD+) +ec:1.3.1.45 2'-hydroxyisoflavone reductase; NADPH:2'-hydroxyisoflavone oxidoreductase; isoflavone reductase; 2',7-dihydroxy-4',5'-methylenedioxyisoflavone reductase +ec:1.3.1.46 biochanin-A reductase +ec:1.3.1.47 alpha-santonin 1,2-reductase +ec:1.3.1.48 13,14-dehydro-15-oxoprostaglandin 13-reductase; 15-oxo-Delta13-prostaglandin reductase; Delta13-15-ketoprostaglandin reductase; 15-ketoprostaglandin Delta13-reductase; prostaglandin Delta13-reductase; prostaglandin 13-reductase; (5Z)-(15S)-11alpha-hydroxy-9,15-dioxoprostanoate:NAD(P)+ Delta13-oxidoreductase; (5Z)-11alpha-hydroxy-9,15-dioxoprost-5-enoate:NAD(P)+ Delta13-oxidoreductase +ec:1.3.1.49 cis-3,4-dihydrophenanthrene-3,4-diol dehydrogenase +ec:1.3.1.50 Deleted entry +ec:1.3.1.51 2'-hydroxydaidzein reductase; NADPH:2'-hydroxydaidzein oxidoreductase; HDR; 2'-hydroxydihydrodaidzein:NADP+ 2'-oxidoreductase +ec:1.3.1.52 Transferred to 1.3.8.5 +ec:1.3.1.53 (3S,4R)-3,4-dihydroxycyclohexa-1,5-diene-1,4-dicarboxylate dehydrogenase; (1R,2S)-dihydroxy-3,5-cyclohexadiene-1,4-dicarboxylate dehydrogenase; terephthalate 1,2-cis-dihydrodiol dehydrogenase; cis-4,5-dihydroxycyclohexa-1(6),2-diene-1,4-dicarboxylate:NAD+ oxidoreductase (decarboxylating) +ec:1.3.1.54 precorrin-6A reductase; precorrin-6X reductase; precorrin-6Y:NADP+ oxidoreductase; CobK +ec:1.3.1.55 Deleted entry +ec:1.3.1.56 cis-2,3-dihydrobiphenyl-2,3-diol dehydrogenase; 2,3-dihydro-2,3-dihydroxybiphenyl dehydrogenase +ec:1.3.1.57 phloroglucinol reductase +ec:1.3.1.58 2,3-dihydroxy-2,3-dihydro-p-cumate dehydrogenase +ec:1.3.1.59 Deleted entry +ec:1.3.1.60 dibenzothiophene dihydrodiol dehydrogenase +ec:1.3.1.61 Deleted entry +ec:1.3.1.62 pimeloyl-CoA dehydrogenase +ec:1.3.1.63 Transferred to 1.21.1.2 +ec:1.3.1.64 phthalate 4,5-cis-dihydrodiol dehydrogenase +ec:1.3.1.65 5,6-dihydroxy-3-methyl-2-oxo-1,2,5,6-tetrahydroquinoline dehydrogenase +ec:1.3.1.66 cis-dihydroethylcatechol dehydrogenase +ec:1.3.1.67 cis-1,2-dihydroxy-4-methylcyclohexa-3,5-diene-1-carboxylate dehydrogenase +ec:1.3.1.68 1,2-dihydroxy-6-methylcyclohexa-3,5-dienecarboxylate dehydrogenase +ec:1.3.1.69 zeatin reductase +ec:1.3.1.70 Delta14-sterol reductase +ec:1.3.1.71 Delta24(241)-sterol reductase; sterol Delta24(28)-methylene reductase; sterol Delta24(28)-reductase +ec:1.3.1.72 Delta24-sterol reductase; lanosterol Delta24-reductase +ec:1.3.1.73 1,2-dihydrovomilenine reductase +ec:1.3.1.74 2-alkenal reductase [NAD(P)+]; NAD(P)H-dependent alkenal/one oxidoreductase; NADPH:2-alkenal alpha,beta-hydrogenase; 2-alkenal reductase +ec:1.3.1.75 3,8-divinyl protochlorophyllide a 8-vinyl-reductase (NADPH); DVR (gene name); bciA (gene name); [4-vinyl]chlorophyllide a reductase; 4VCR; chlorophyllide-a:NADP+ oxidoreductase; divinyl chlorophyllide a 8-vinyl-reductase; plant-type divinyl chlorophyllide a 8-vinyl-reductase +ec:1.3.1.76 precorrin-2 dehydrogenase; Met8p; SirC; CysG +ec:1.3.1.77 anthocyanidin reductase [(2R,3R)-flavan-3-ol-forming]; ANR (gene name) (ambiguous); flavan-3-ol:NAD(P)+ oxidoreductase; anthocyanidin reductase (ambiguous) +ec:1.3.1.78 arogenate dehydrogenase (NADP+); arogenic dehydrogenase (ambiguous); pretyrosine dehydrogenase (ambiguous); TyrAAT1; TyrAAT2; TyrAa +ec:1.3.1.79 arogenate dehydrogenase [NAD(P)+]; arogenic dehydrogenase (ambiguous); cyclohexadienyl dehydrogenase; pretyrosine dehydrogenase (ambiguous) +ec:1.3.1.80 Transferred to 1.3.7.12 +ec:1.3.1.81 (+)-pulegone reductase +ec:1.3.1.82 (-)-isopiperitenone reductase +ec:1.3.1.83 geranylgeranyl diphosphate reductase; geranylgeranyl reductase; CHL P +ec:1.3.1.84 acrylyl-CoA reductase (NADPH) +ec:1.3.1.85 crotonyl-CoA carboxylase/reductase; CCR; crotonyl-CoA reductase (carboxylating) +ec:1.3.1.86 crotonyl-CoA reductase; butyryl-CoA dehydrogenase; butyryl dehydrogenase; unsaturated acyl-CoA reductase; ethylene reductase; enoyl-coenzyme A reductase; unsaturated acyl coenzyme A reductase; butyryl coenzyme A dehydrogenase; short-chain acyl CoA dehydrogenase; short-chain acyl-coenzyme A dehydrogenase; 3-hydroxyacyl CoA reductase; butanoyl-CoA:(acceptor) 2,3-oxidoreductase; CCR +ec:1.3.1.87 3-(cis-5,6-dihydroxycyclohexa-1,3-dien-1-yl)propanoate dehydrogenase; hcaB (gene name); cis-dihydrodiol dehydrogenase; 2,3-dihydroxy-2,3-dihydro-phenylpropionate dehydrogenase +ec:1.3.1.88 tRNA-dihydrouridine16/17 synthase [NAD(P)+]; Dus1p; tRNA-dihydrouridine synthase 1 +ec:1.3.1.89 tRNA-dihydrouridine47 synthase [NAD(P)+]; Dus3p; tRNA-dihydrouridine synthase 3 +ec:1.3.1.90 tRNA-dihydrouridine20a/20b synthase [NAD(P)+]; Dus4p +ec:1.3.1.91 tRNA-dihydrouridine20 synthase [NAD(P)+]; Dus2p; tRNA-dihydrouridine synthase 2 +ec:1.3.1.92 artemisinic aldehyde Delta11(13)-reductase; Dbr2 +ec:1.3.1.93 very-long-chain enoyl-CoA reductase; TSC13 (gene name); CER10 (gene name) +ec:1.3.1.94 polyprenol reductase; SRD5A3 (gene name); DFG10 (gene name) +ec:1.3.1.95 acrylyl-CoA reductase (NADH) +ec:1.3.1.96 Botryococcus squalene synthase; SSL-2 (gene name) +ec:1.3.1.97 botryococcene synthase; SSL-3 (gene name) +ec:1.3.1.98 UDP-N-acetylmuramate dehydrogenase; MurB reductase; UDP-N-acetylenolpyruvoylglucosamine reductase; UDP-N-acetylglucosamine-enoylpyruvate reductase; UDP-GlcNAc-enoylpyruvate reductase; uridine diphosphoacetylpyruvoylglucosamine reductase; uridine diphospho-N-acetylglucosamine-enolpyruvate reductase; uridine-5'-diphospho-N-acetyl-2-amino-2-deoxy-3-O-lactylglucose:NADP-oxidoreductase +ec:1.3.1.99 Transferred to 1.3.1.122 and 5.5.1.34 +ec:1.3.1.100 chanoclavine-I aldehyde reductase; FgaOx3; easA (gene name) +ec:1.3.1.101 2,3-bis-O-geranylgeranyl-sn-glycerol 1-phosphate reductase [NAD(P)H]; digeranylgeranylglycerophospholipid reductase; Ta0516m (gene name); DGGGPL reductase; 2,3-digeranylgeranylglycerophospholipid reductase +ec:1.3.1.102 2-alkenal reductase (NADP+); NADPH-dependent alkenal/one oxidoreductase; NADPH:2-alkenal alpha,beta-hydrogenase +ec:1.3.1.103 2-haloacrylate reductase; CAA43 (gene name) +ec:1.3.1.104 enoyl-[acyl-carrier-protein] reductase (NADPH); acyl-ACP dehydrogenase (ambiguous); enoyl-[acyl carrier protein] (reduced nicotinamide adenine dinucleotide phosphate) reductase; NADPH 2-enoyl Co A reductase; enoyl-ACP reductase (ambiguous); fabL (gene name) +ec:1.3.1.105 2-methylene-furan-3-one reductase; FaEO; SIEO; enone oxidoreductase; 4-hydroxy-2,5-dimethylfuran-3(2H)-one:NAD(P)+ oxidoreductase +ec:1.3.1.106 cobalt-precorrin-6A reductase; cbiJ (gene name) +ec:1.3.1.107 sanguinarine reductase +ec:1.3.1.108 caffeoyl-CoA reductase; electron-bifurcating caffeoyl-CoA reductase; caffeoyl-CoA reductase-Etf complex; hydrocaffeoyl-CoA:NAD+,ferredoxin oxidoreductase +ec:1.3.1.109 butanoyl-CoA dehydrogenase complex (NAD+, ferredoxin); bifurcating butyryl-CoA dehydrogenase; butyryl-CoA dehydrogenase/Etf complex; Etf-Bcd complex; bifurcating butanoyl-CoA dehydrogenase; butanoyl-CoA dehydrogenase/Etf complex; butanoyl-CoA dehydrogenase (NAD+, ferredoxin) +ec:1.3.1.110 lactate dehydrogenase (NAD+,ferredoxin); electron bifurcating LDH/Etf complex +ec:1.3.1.111 geranylgeranyl-bacteriochlorophyllide a reductase; geranylgeranyl-bacteriopheophytin reductase; bchP (gene name) +ec:1.3.1.112 anthocyanidin reductase [(2S)-flavan-3-ol-forming] +ec:1.3.1.113 (4-alkanoyl-5-oxo-2,5-dihydrofuran-3-yl)methyl phosphate reductase; bprA (gene name); scbC (gene name) +ec:1.3.1.114 3-dehydro-bile acid Delta4,6-reductase; baiN (gene name) +ec:1.3.1.115 3-oxocholoyl-CoA 4-desaturase; baiCD (gene name); 3-oxo-choloyl-CoA dehydrogenase +ec:1.3.1.116 7beta-hydroxy-3-oxochol-24-oyl-CoA 4-desaturase; baiH (gene name) +ec:1.3.1.117 hydroxycinnamoyl-CoA reductase; MdHCDBR; hydroxycinnamoyl-CoA double bond reductase +ec:1.3.1.118 meromycolic acid enoyl-[acyl-carrier-protein] reductase; inhA (gene name) +ec:1.3.1.119 chlorobenzene dihydrodiol dehydrogenase; tecB (gene name) +ec:1.3.1.120 cyclohexane-1-carbonyl-CoA reductase (NADP+); 1-cyclohexenylcarbonyl-CoA reductase (ambiguous); chcA (gene name) +ec:1.3.1.121 4-amino-4-deoxyprephenate dehydrogenase; cmlC (gene name); papC (gene name) +ec:1.3.1.122 (S)-8-oxocitronellyl enol synthase; CrISY; 8-oxogeranial:NAD(P)+ oxidoreductase (cyclizing, cis-trans-nepetalactol forming); iridoid synthase (incorrect) +ec:1.3.1.123 8-oxogeranial reductase; AmISY +ec:1.3.1.124 2,4-dienoyl-CoA reductase [(3E)-enoyl-CoA-producing]; SPS19 (gene name); DECR1 (gene name); DECR2 (gene name); Delta2,Delta4-dienoyl-CoA reductase (ambiguous) +ec:1.3.2.1 Transferred to 1.3.99.2 +ec:1.3.2.2 Transferred to 1.3.99.3 +ec:1.3.2.3 L-galactonolactone dehydrogenase; galactonolactone dehydrogenase; L-galactono-gamma-lactone dehydrogenase; L-galactono-gamma-lactone:ferricytochrome-c oxidoreductase; GLDHase; GLDase +ec:1.3.3.1 Transferred to 1.3.98.1 +ec:1.3.3.2 Transferred to 1.14.21.6 +ec:1.3.3.3 coproporphyrinogen oxidase; coproporphyrinogen III oxidase; coproporphyrinogenase +ec:1.3.3.4 protoporphyrinogen oxidase; protoporphyrinogen IX oxidase; protoporphyrinogenase; PPO; Protox; HemG; HemY +ec:1.3.3.5 bilirubin oxidase; bilirubin oxidase M-1 +ec:1.3.3.6 acyl-CoA oxidase; fatty acyl-CoA oxidase; acyl coenzyme A oxidase; fatty acyl-coenzyme A oxidase +ec:1.3.3.7 dihydrouracil oxidase +ec:1.3.3.8 tetrahydroberberine oxidase; (S)-THB oxidase +ec:1.3.3.9 Transferred to 1.14.19.62 +ec:1.3.3.10 tryptophan alpha,beta-oxidase; L-tryptophan 2',3'-oxidase; L-tryptophan alpha,beta-dehydrogenase +ec:1.3.3.11 pyrroloquinoline-quinone synthase; PqqC; 6-(2-amino-2-carboxyethyl)-7,8-dioxo-1,2,3,4,5,6,7,8-octahydroquinoline-2,4-dicarboxylate:oxygen oxidoreductase (cyclizing) [incorrect] +ec:1.3.3.12 L-galactonolactone oxidase; L-galactono-1,4-lactone oxidase +ec:1.3.3.13 albonoursin synthase; cyclo(dipeptide):oxygen oxidoreductase; cyclic dipeptide oxidase; AlbA +ec:1.3.3.14 aclacinomycin-A oxidase; AknOx (ambiguous); aclacinomycin oxidoreductase (ambiguous) +ec:1.3.3.15 coproporphyrinogen III oxidase (coproporphyrin-forming); hemY (gene name) +ec:1.3.3.16 oxazoline dehydrogenase; azoline oxidase; thiazoline oxidase; cyanobactin oxidase; patG (gene name); mcaG (gene name); artG (gene name); lynG (gene name); tenG (gene name) +ec:1.3.3.17 benzylmalonyl-CoA dehydrogenase; iaaF (gene name) +ec:1.3.4.1 fumarate reductase (CoM/CoB); thiol:fumarate reductase; Tfr +ec:1.3.5.1 succinate dehydrogenase; succinate dehydrogenase (quinone); succinate dehydrogenase (ubiquinone); succinic dehydrogenase; complex II (ambiguous); succinate dehydrogenase complex; SDH (ambiguous); succinate:ubiquinone oxidoreductase; fumarate reductase (quinol); FRD; menaquinol-fumarate oxidoreductase; succinate dehydrogenase (menaquinone); succinate:menaquinone oxidoreductase; fumarate reductase (menaquinone) +ec:1.3.5.2 dihydroorotate dehydrogenase (quinone); dihydroorotate:ubiquinone oxidoreductase; (S)-dihydroorotate:(acceptor) oxidoreductase; (S)-dihydroorotate:acceptor oxidoreductase; DHOdehase (ambiguous); DHOD (ambiguous); DHODase (ambiguous); DHODH +ec:1.3.5.3 protoporphyrinogen IX dehydrogenase (quinone); HemG; protoporphyrinogen IX dehydrogenase (menaquinone) +ec:1.3.5.4 Transferred to 1.3.5.1 +ec:1.3.5.5 15-cis-phytoene desaturase; phytoene desaturase (ambiguous); PDS; plant-type phytoene desaturase +ec:1.3.5.6 9,9'-dicis-zeta-carotene desaturase; zeta-carotene desaturase; ZDS +ec:1.3.7.1 6-hydroxynicotinate reductase; 6-oxotetrahydronicotinate dehydrogenase; 6-hydroxynicotinic reductase; HNA reductase; 1,4,5,6-tetrahydro-6-oxonicotinate:ferredoxin oxidoreductase +ec:1.3.7.2 15,16-dihydrobiliverdin:ferredoxin oxidoreductase; PebA +ec:1.3.7.3 phycoerythrobilin:ferredoxin oxidoreductase; PebB +ec:1.3.7.4 phytochromobilin:ferredoxin oxidoreductase; HY2; PPhi B synthase; phytochromobilin synthase +ec:1.3.7.5 phycocyanobilin:ferredoxin oxidoreductase +ec:1.3.7.6 phycoerythrobilin synthase; PebS +ec:1.3.7.7 ferredoxin:protochlorophyllide reductase (ATP-dependent); light-independent protochlorophyllide reductase +ec:1.3.7.8 benzoyl-CoA reductase; benzoyl-CoA reductase (dearomatizing) +ec:1.3.7.9 Transferred to 1.1.7.1 +ec:1.3.7.10 Transferred to 1.14.19.8 +ec:1.3.7.11 2,3-bis-O-geranylgeranyl-sn-glycero-phospholipid reductase; AF0464 (gene name); 2,3-bis-O-geranylgeranyl-sn-glycerol 1-phosphate reductase (donor) +ec:1.3.7.12 red chlorophyll catabolite reductase; RCCR; RCC reductase; red Chl catabolite reductase +ec:1.3.7.13 3,8-divinyl protochlorophyllide a 8-vinyl-reductase (ferredoxin); bciB (gene name); cyano-type divinyl chlorophyllide a 8-vinyl-reductase +ec:1.3.7.14 3,8-divinyl chlorophyllide a reductase +ec:1.3.7.15 chlorophyllide a reductase; bchX (gene name); bchY (gene name); bchZ (gene name); COR +ec:1.3.8.1 short-chain acyl-CoA dehydrogenase; butyryl-CoA dehydrogenase; butanoyl-CoA dehydrogenase; butyryl dehydrogenase; unsaturated acyl-CoA reductase; ethylene reductase; enoyl-coenzyme A reductase; unsaturated acyl coenzyme A reductase; butyryl coenzyme A dehydrogenase; short-chain acyl CoA dehydrogenase; short-chain acyl-coenzyme A dehydrogenase; 3-hydroxyacyl CoA reductase; butanoyl-CoA:(acceptor) 2,3-oxidoreductase; ACADS (gene name). +ec:1.3.8.2 4,4'-diapophytoene desaturase (4,4'-diapolycopene-forming); dehydrosqualene desaturase (ambiguous); CrtN (ambiguous); 4,4'-diapophytoene:FAD oxidoreductase (ambiguous); 15-cis-4,4'-diapophytoene:FAD oxidoreductase; 4,4'-diapophytoene desaturase (ambiguous) +ec:1.3.8.3 (R)-benzylsuccinyl-CoA dehydrogenase; BbsG; (R)-benzylsuccinyl-CoA:(acceptor) oxidoreductase +ec:1.3.8.4 isovaleryl-CoA dehydrogenase; isovaleryl-coenzyme A dehydrogenase; isovaleroyl-coenzyme A dehydrogenase; 3-methylbutanoyl-CoA:(acceptor) oxidoreductase +ec:1.3.8.5 short-chain 2-methylacyl-CoA dehydrogenase; ACADSB (gene name); 2-methylacyl-CoA dehydrogenase; branched-chain acyl-CoA dehydrogenase (ambiguous); 2-methyl branched chain acyl-CoA dehydrogenase; 2-methylbutanoyl-CoA:(acceptor) oxidoreductase; 2-methyl-branched-chain-acyl-CoA:electron-transfer flavoprotein 2-oxidoreductase; 2-methyl-branched-chain-enoyl-CoA reductase +ec:1.3.8.6 glutaryl-CoA dehydrogenase (ETF); glutaryl coenzyme A dehydrogenase; glutaryl-CoA:(acceptor) 2,3-oxidoreductase (decarboxylating); glutaryl-CoA dehydrogenase +ec:1.3.8.7 medium-chain acyl-CoA dehydrogenase; fatty acyl coenzyme A dehydrogenase (ambiguous); acyl coenzyme A dehydrogenase (ambiguous); acyl dehydrogenase (ambiguous); fatty-acyl-CoA dehydrogenase (ambiguous); acyl CoA dehydrogenase (ambiguous); general acyl CoA dehydrogenase (ambiguous); medium-chain acyl-coenzyme A dehydrogenase; acyl-CoA:(acceptor) 2,3-oxidoreductase (ambiguous); ACADM (gene name). +ec:1.3.8.8 long-chain acyl-CoA dehydrogenase; palmitoyl-CoA dehydrogenase; palmitoyl-coenzyme A dehydrogenase; long-chain acyl-coenzyme A dehydrogenase; long-chain-acyl-CoA:(acceptor) 2,3-oxidoreductase; ACADL (gene name). +ec:1.3.8.9 very-long-chain acyl-CoA dehydrogenase; ACADVL (gene name). +ec:1.3.8.10 cyclohex-1-ene-1-carbonyl-CoA dehydrogenase +ec:1.3.8.11 cyclohexane-1-carbonyl-CoA dehydrogenase (electron-transfer flavoprotein); aliB (gene name); cyclohexane-1-carbonyl-CoA dehydrogenase (ambiguous) +ec:1.3.8.12 (2S)-methylsuccinyl-CoA dehydrogenase; Mcd +ec:1.3.8.13 crotonobetainyl-CoA reductase; caiA (gene name) +ec:1.3.8.14 L-prolyl-[peptidyl-carrier protein] dehydrogenase; pigA (gene name); bmp3 (gene name); pltE (gene name); redW (gene name); (L-prolyl)-[peptidyl-carrier protein]:electron-transfer flavoprotein oxidoreductase +ec:1.3.8.15 3-(aryl)acrylate reductase; acdA (gene name) +ec:1.3.8.16 2-amino-4-deoxychorismate dehydrogenase; ADIC dehydrogenase; 2-amino-2-deoxyisochorismate dehydrogenase; SgcG +ec:1.3.8.17 dehydro coenzyme F420 reductase; fbiB (gene name) +ec:1.3.98.1 dihydroorotate dehydrogenase (fumarate); DHOdehase (ambiguous); dihydroorotate dehydrogenase (ambiguous); dihydoorotic acid dehydrogenase (ambiguous); DHOD (ambiguous); DHODase (ambiguous); dihydroorotate oxidase; pyr4 (gene name) +ec:1.3.98.2 Transferred to 1.3.4.1 +ec:1.3.98.3 coproporphyrinogen dehydrogenase; oxygen-independent coproporphyrinogen-III oxidase; HemN; coproporphyrinogen III oxidase +ec:1.3.98.4 5a,11a-dehydrotetracycline reductase; oxyR (gene name); 12-dehydrotetracycline dehydrogenase; dehydrooxytetracycline dehydrogenase; 12-dehydrotetracycline reductase +ec:1.3.98.5 hydrogen peroxide-dependent heme synthase; coproheme III oxidative decarboxylase; hemQ (gene name) +ec:1.3.98.6 AdoMet-dependent heme synthase; ahbD (gene name); SAM-dependent heme synthase +ec:1.3.98.7 [mycofactocin precursor peptide]-tyrosine decarboxylase; mftC (gene name) +ec:1.3.99.1 Deleted entry +ec:1.3.99.2 Transferred to 1.3.8.1 +ec:1.3.99.3 Transferred to 1.3.8.7 and 1.3.8.8 and 1.3.8.9 +ec:1.3.99.4 3-oxosteroid 1-dehydrogenase; 3-oxosteroid Delta1-dehydrogenase; Delta1-dehydrogenase; 3-ketosteroid-1-en-dehydrogenase; 3-ketosteroid-Delta1-dehydrogenase; 1-ene-dehydrogenase; 3-oxosteroid:(2,6-dichlorphenolindophenol) Delta1-oxidoreductase; 4-en-3-oxosteroid:(acceptor)-1-en-oxido-reductase; Delta1-steroid reductase; 3-oxosteroid:(acceptor) Delta1-oxidoreductase +ec:1.3.99.5 3-oxo-5alpha-steroid 4-dehydrogenase (acceptor); steroid 5alpha-reductase; 3-oxosteroid Delta4-dehydrogenase; 3-oxo-5alpha-steroid Delta4-dehydrogenase; steroid Delta4-5alpha-reductase; Delta4-3-keto steroid 5alpha-reductase; Delta4-3-oxo steroid reductase; Delta4-3-ketosteroid5alpha-oxidoreductase; Delta4-3-oxosteroid-5alpha-reductase; 3-keto-Delta4-steroid-5alpha-reductase; 5alpha-reductase; testosterone 5alpha-reductase; 4-ene-3-ketosteroid-5alpha-oxidoreductase; Delta4-5alpha-dehydrogenase; 3-oxo-5alpha-steroid:(acceptor) Delta4-oxidoreductase; tesI (gene name) +ec:1.3.99.6 3-oxo-5beta-steroid 4-dehydrogenase; 3-oxo-5beta-steroid:(acceptor) Delta4-oxidoreductase +ec:1.3.99.7 Transferred to 1.3.8.6 +ec:1.3.99.8 2-furoyl-CoA dehydrogenase; furoyl-CoA hydroxylase; 2-furoyl coenzyme A hydroxylase; 2-furoyl coenzyme A dehydrogenase; 2-furoyl-CoA:(acceptor) 5-oxidoreductase (hydroxylating) +ec:1.3.99.9 Transferred to 1.21.99.1 +ec:1.3.99.10 Transferred to 1.3.8.4 +ec:1.3.99.11 Transferred to 1.3.5.2 +ec:1.3.99.12 Transferred to 1.3.8.5 +ec:1.3.99.13 Transferred to 1.3.8.8 +ec:1.3.99.14 cyclohexanone dehydrogenase; cyclohexanone:(acceptor) 2-oxidoreductase +ec:1.3.99.15 Transferred to 1.3.7.8 +ec:1.3.99.16 isoquinoline 1-oxidoreductase +ec:1.3.99.17 quinoline 2-oxidoreductase +ec:1.3.99.18 quinaldate 4-oxidoreductase; quinaldic acid 4-oxidoreductase +ec:1.3.99.19 quinoline-4-carboxylate 2-oxidoreductase; quinaldic acid 4-oxidoreductase; quinoline-4-carboxylate:acceptor 2-oxidoreductase (hydroxylating) +ec:1.3.99.20 Transferred to 1.3.99.20 and 1.3.7.9 +ec:1.3.99.21 Transferred to 1.3.8.3 +ec:1.3.99.22 Transferred to 1.3.98.3 +ec:1.3.99.23 all-trans-retinol 13,14-reductase; retinol saturase; RetSat; (13,14)-all-trans-retinol saturase; all-trans-retinol:all-trans-13,14-dihydroretinol saturase +ec:1.3.99.24 Transferred to 1.3.8.16 +ec:1.3.99.25 carvone reductase +ec:1.3.99.26 all-trans-zeta-carotene desaturase; CrtIb; phytoene desaturase (ambiguous); 2-step phytoene desaturase (ambiguous); two-step phytoene desaturase (ambiguous); CrtI (ambiguous) +ec:1.3.99.27 1-hydroxycarotenoid 3,4-desaturase; CrtD; hydroxyneurosporene desaturase; carotenoid 3,4-dehydrogenase; 1-hydroxy-carotenoid 3,4-dehydrogenase +ec:1.3.99.28 phytoene desaturase (neurosporene-forming); 3-step phytoene desaturase; three-step phytoene desaturase; phytoene desaturase (ambiguous); CrtI (ambiguous) +ec:1.3.99.29 phytoene desaturase (zeta-carotene-forming); CrtIa; 2-step phytoene desaturase (ambiguous); two-step phytoene desaturase (ambiguous) +ec:1.3.99.30 phytoene desaturase (3,4-didehydrolycopene-forming); 5-step phytoene desaturase; five-step phytoene desaturase; phytoene desaturase (ambiguous); Al-1 +ec:1.3.99.31 phytoene desaturase (lycopene-forming); 4-step phytoene desaturase; four-step phytoene desaturase; phytoene desaturase (ambiguous); CrtI (ambiguous) +ec:1.3.99.32 glutaryl-CoA dehydrogenase (acceptor); GDHDes; nondecarboxylating glutaryl-coenzyme A dehydrogenase; nondecarboxylating glutaconyl-coenzyme A-forming GDH; glutaryl-CoA dehydrogenase (non-decarboxylating) +ec:1.3.99.33 urocanate reductase; urdA (gene name) +ec:1.3.99.34 Transferred to 1.3.7.11 +ec:1.3.99.35 Transferred to 1.3.7.15 +ec:1.3.99.36 cypemycin cysteine dehydrogenase (decarboxylating); cypemycin decarboxylase; CypD +ec:1.3.99.37 1-hydroxy-2-isopentenylcarotenoid 3,4-desaturase; crtD (gene name) +ec:1.3.99.38 menaquinone-9 beta-reductase; MenJ +ec:1.3.99.39 carotenoid phi-ring synthase; crtU (gene name) (ambiguous) +ec:1.3.99.40 carotenoid chi-ring synthase; crtU (gene name) (ambiguous); cruE (gene name) +ec:1.3.99.41 3-(methylsulfanyl)propanoyl-CoA 2-dehydrogenase; dmdC (gene name) +ec:1.4.1.1 alanine dehydrogenase; AlaDH; L-alanine dehydrogenase; NAD+-linked alanine dehydrogenase; alpha-alanine dehydrogenase; NAD+-dependent alanine dehydrogenase; alanine oxidoreductase; NADH-dependent alanine dehydrogenase +ec:1.4.1.2 glutamate dehydrogenase; glutamic dehydrogenase; glutamate dehydrogenase (NAD+); glutamate oxidoreductase; glutamic acid dehydrogenase; L-glutamate dehydrogenase; NAD+-dependent glutamate dehydrogenase; NAD+-dependent glutamic dehydrogenase; NAD+-glutamate dehydrogenase; NAD+-linked glutamate dehydrogenase; NAD+-linked glutamic dehydrogenase; NAD+-specific glutamic dehydrogenase; NAD+-specific glutamate dehydrogenase; NAD+:glutamate oxidoreductase; NADH-linked glutamate dehydrogenase +ec:1.4.1.3 glutamate dehydrogenase [NAD(P)+]; glutamic dehydrogenase; glutamate dehydrogenase [NAD(P)+] +ec:1.4.1.4 glutamate dehydrogenase (NADP+); glutamic dehydrogenase; dehydrogenase, glutamate (nicotinamide adenine dinucleotide (phosphate)); glutamic acid dehydrogenase; L-glutamate dehydrogenase; L-glutamic acid dehydrogenase; NAD(P)+-glutamate dehydrogenase; NAD(P)H-dependent glutamate dehydrogenase; glutamate dehydrogenase (NADP+) +ec:1.4.1.5 L-amino-acid dehydrogenase +ec:1.4.1.6 Deleted entry +ec:1.4.1.7 serine 2-dehydrogenase; L-serine:NAD+ oxidoreductase (deaminating); serine dehydrogenase +ec:1.4.1.8 valine dehydrogenase (NADP+); valine dehydrogenase (nicotinanide adenine dinucleotide phosphate); valine dehydrogenase (NADP) +ec:1.4.1.9 leucine dehydrogenase; L-leucine dehydrogenase; L-leucine:NAD+ oxidoreductase, deaminating; LeuDH +ec:1.4.1.10 glycine dehydrogenase +ec:1.4.1.11 L-erythro-3,5-diaminohexanoate dehydrogenase; L-3,5-diaminohexanoate dehydrogenase +ec:1.4.1.12 2,4-diaminopentanoate dehydrogenase; 2,4-diaminopentanoic acid C4 dehydrogenase +ec:1.4.1.13 glutamate synthase (NADPH); glutamate (reduced nicotinamide adenine dinucleotide phosphate) synthase; L-glutamate synthase; L-glutamate synthetase; glutamate synthetase (NADP); NADPH-dependent glutamate synthase; glutamine-ketoglutaric aminotransferase; NADPH-glutamate synthase; NADPH-linked glutamate synthase; glutamine amide-2-oxoglutarate aminotransferase (oxidoreductase, NADP); L-glutamine:2-oxoglutarate aminotransferase, NADPH oxidizing; GOGAT +ec:1.4.1.14 glutamate synthase (NADH); glutamate (reduced nicotinamide adenine dinucleotide) synthase; NADH: GOGAT; L-glutamate synthase (NADH); L-glutamate synthetase; NADH-glutamate synthase; NADH-dependent glutamate synthase +ec:1.4.1.15 lysine dehydrogenase +ec:1.4.1.16 diaminopimelate dehydrogenase; meso-alpha,epsilon-diaminopimelate dehydrogenase; meso-diaminopimelate dehydrogenase +ec:1.4.1.17 N-methylalanine dehydrogenase +ec:1.4.1.18 lysine 6-dehydrogenase; L-lysine epsilon-dehydrogenase; L-lysine 6-dehydrogenase; LysDH +ec:1.4.1.19 tryptophan dehydrogenase; NAD(P)+-L-tryptophan dehydrogenase; L-tryptophan dehydrogenase; L-Trp-dehydrogenase; TDH +ec:1.4.1.20 phenylalanine dehydrogenase; L-phenylalanine dehydrogenase; PHD +ec:1.4.1.21 aspartate dehydrogenase; AspDH; NAD-dependent aspartate dehydrogenase; NADH2-dependent aspartate dehydrogenase; NADP+-dependent aspartate dehydrogenase; nadX (gene name); L-aspartate:NAD(P)+ oxidoreductase (deaminating) +ec:1.4.1.22 Deleted entry +ec:1.4.1.23 valine dehydrogenase (NAD+) +ec:1.4.1.24 3-dehydroquinate synthase II; DHQ synthase II; MJ1249 (gene name); aroB' (gene name) +ec:1.4.1.25 L-arginine dehydrogenase; dauB (gene name); anabolic L-arginine dehydrogenase +ec:1.4.1.26 2,4-diaminopentanoate dehydrogenase (NAD+); DAPDH (ambiguous) +ec:1.4.1.27 glycine cleavage system; GCV +ec:1.4.1.28 secondary-alkyl amine dehydrogenase [NAD(P)+]; AmDH (ambiguous); amine dehydrogenase (ambiguous) +ec:1.4.2.1 glycine dehydrogenase (cytochrome); glycine---cytochrome c reductase +ec:1.4.3.1 D-aspartate oxidase; aspartic oxidase; D-aspartic oxidase +ec:1.4.3.2 L-amino-acid oxidase; ophio-amino-acid oxidase (ambiguous) +ec:1.4.3.3 D-amino-acid oxidase; ophio-amino-acid oxidase (ambiguous); L-amino acid:O2 oxidoreductase; new yellow enzyme +ec:1.4.3.4 monoamine oxidase; adrenalin oxidase; adrenaline oxidase; amine oxidase (ambiguous); amine oxidase (flavin-containing); amine:oxygen oxidoreductase (deaminating) (flavin-containing); epinephrine oxidase; MAO; MAO A; MAO B; MAO-A; MAO-B; monoamine oxidase A; monoamine oxidase B; monoamine:O2 oxidoreductase (deaminating); polyamine oxidase (ambiguous); serotonin deaminase; spermidine oxidase (ambiguous); spermine oxidase (ambiguous); tyraminase; tyramine oxidase +ec:1.4.3.5 pyridoxal 5'-phosphate synthase; pyridoxamine 5'-phosphate oxidase; pyridoxamine phosphate oxidase; pyridoxine (pyridoxamine)phosphate oxidase; pyridoxine (pyridoxamine) 5'-phosphate oxidase; pyridoxaminephosphate oxidase (EC 1.4.3.5: deaminating); PMP oxidase; pyridoxol-5'-phosphate:oxygen oxidoreductase (deaminating) (incorrect); pyridoxamine-phosphate oxidase; PdxH +ec:1.4.3.6 Deleted entry +ec:1.4.3.7 D-glutamate oxidase; D-glutamic oxidase; D-glutamic acid oxidase +ec:1.4.3.8 ethanolamine oxidase +ec:1.4.3.9 Deleted entry +ec:1.4.3.10 putrescine oxidase +ec:1.4.3.11 L-glutamate oxidase; glutamate (acceptor) dehydrogenase; glutamate oxidase; glutamic acid oxidase; glutamic dehydrogenase (acceptor); L-glutamic acid oxidase +ec:1.4.3.12 cyclohexylamine oxidase +ec:1.4.3.13 protein-lysine 6-oxidase; lysyl oxidase +ec:1.4.3.14 L-lysine oxidase; L-lysine alpha-oxidase; L-lysyl-alpha-oxidase +ec:1.4.3.15 D-glutamate(D-aspartate) oxidase; D-glutamic-aspartic oxidase; D-monoaminodicarboxylic acid oxidase +ec:1.4.3.16 L-aspartate oxidase; NadB; Laspo; AO +ec:1.4.3.17 Transferred to 1.3.3.10 +ec:1.4.3.18 Deleted entry +ec:1.4.3.19 glycine oxidase +ec:1.4.3.20 L-lysine 6-oxidase; L-lysine-epsilon-oxidase; Lod; LodA; marinocine +ec:1.4.3.21 primary-amine oxidase; amine oxidase (ambiguous); amine oxidase (copper-containing); amine oxidase (pyridoxal containing) (incorrect); benzylamine oxidase (incorrect); CAO (ambiguous); copper amine oxidase (ambiguous); Cu-amine oxidase (ambiguous); Cu-containing amine oxidase (ambiguous); diamine oxidase (incorrect); diamino oxhydrase (incorrect); histamine deaminase (ambiguous); histamine oxidase (ambiguous); monoamine oxidase (ambiguous); plasma monoamine oxidase (ambiguous); polyamine oxidase (ambiguous); semicarbazide-sensitive amine oxidase (ambiguous); SSAO (ambiguous) +ec:1.4.3.22 diamine oxidase; amine oxidase (ambiguous); amine oxidase (copper-containing) (ambiguous); CAO (ambiguous); Cu-containing amine oxidase (ambiguous); copper amine oxidase (ambiguous); diamine oxidase (ambiguous); diamino oxhydrase (ambiguous); histaminase; histamine deaminase (incorrect); semicarbazide-sensitive amine oxidase (incorrect); SSAO (incorrect) +ec:1.4.3.23 7-chloro-L-tryptophan oxidase; RebO +ec:1.4.3.24 pseudooxynicotine oxidase +ec:1.4.3.25 L-arginine oxidase +ec:1.4.3.26 pre-mycofactocin synthase; mftD (gene name) +ec:1.4.4.1 Transferred to 1.21.4.1 +ec:1.4.4.2 glycine dehydrogenase (aminomethyl-transferring); P-protein; glycine decarboxylase; glycine-cleavage complex; glycine:lipoylprotein oxidoreductase (decarboxylating and acceptor-aminomethylating); protein P1; glycine dehydrogenase (decarboxylating); glycine cleavage system P-protein; glycine-cleavage complex P-protein +ec:1.4.5.1 D-amino acid dehydrogenase (quinone); DadA +ec:1.4.7.1 glutamate synthase (ferredoxin); ferredoxin-dependent glutamate synthase; ferredoxin-glutamate synthase; glutamate synthase (ferredoxin-dependent) +ec:1.4.9.1 methylamine dehydrogenase (amicyanin); amine dehydrogenase; primary-amine dehydrogenase; amine: (acceptor) oxidoreductase (deaminating); primary-amine:(acceptor) oxidoreductase (deaminating) +ec:1.4.9.2 aralkylamine dehydrogenase (azurin); aromatic amine dehydrogenase; arylamine dehydrogenase; tyramine dehydrogenase; aralkylamine:(acceptor) oxidoreductase (deaminating) +ec:1.4.98.1 Transferred to 1.4.9.1 +ec:1.4.99.1 Transferred to 1.4.99.6 +ec:1.4.99.2 taurine dehydrogenase; taurine:(acceptor) oxidoreductase (deaminating) +ec:1.4.99.3 Transferred to 1.4.9.1 +ec:1.4.99.4 Transferred to 1.4.9.2 +ec:1.4.99.5 glycine dehydrogenase (cyanide-forming); hydrogen cyanide synthase; HCN synthase +ec:1.4.99.6 D-arginine dehydrogenase; D-amino-acid:(acceptor) oxidoreductase (deaminating); D-amino-acid dehydrogenase; D-amino-acid:acceptor oxidoreductase (deaminating) +ec:1.5.1.1 1-piperideine-2-carboxylate/1-pyrroline-2-carboxylate reductase [NAD(P)H]; Delta1-pyrroline-2-carboxylate reductase; DELTA1-pyrroline-2-carboxylate reductase; DELTA1-piperideine-2-carboxylate/1-pyrroline-2-carboxylate reductase (ambiguous); AbLhpI; pyrroline-2-carboxylate reductase; L-proline:NAD(P)+ 2-oxidoreductase +ec:1.5.1.2 pyrroline-5-carboxylate reductase; proline oxidase; L-proline oxidase; 1-pyrroline-5-carboxylate reductase; NADPH-L-Delta1-pyrroline carboxylic acid reductase; L-proline-NAD(P)+ 5-oxidoreductase +ec:1.5.1.3 dihydrofolate reductase; tetrahydrofolate dehydrogenase; DHFR; pteridine reductase:dihydrofolate reductase; dihydrofolate reductase:thymidylate synthase; thymidylate synthetase-dihydrofolate reductase; folic acid reductase; folic reductase; dihydrofolic acid reductase; dihydrofolic reductase; 7,8-dihydrofolate reductase; NADPH-dihydrofolate reductase +ec:1.5.1.4 Deleted entry +ec:1.5.1.5 methylenetetrahydrofolate dehydrogenase (NADP+); N5,N10-methylenetetrahydrofolate dehydrogenase; 5,10-methylenetetrahydrofolate:NADP oxidoreductase; 5,10-methylenetetrahydrofolate dehydrogenase; methylenetetrahydrofolate dehydrogenase; methylenetetrahydrofolate dehydrogenase (NADP) +ec:1.5.1.6 formyltetrahydrofolate dehydrogenase; 10-formyl tetrahydrofolate:NADP oxidoreductase; 10-formyl-H2PtGlu:NADP oxidoreductase ; 10-formyl-H4folate dehydrogenase; N10-formyltetrahydrofolate dehydrogenase ; 10-formyltetrahydrofolate dehydrogenase +ec:1.5.1.7 saccharopine dehydrogenase (NAD+, L-lysine-forming); lysine-2-oxoglutarate reductase; dehydrogenase, saccharopine (nicotinamide adenine dinucleotide, lysine forming); epsilon-N-(L-glutaryl-2)-L-lysine:NAD oxidoreductase (L-lysine forming); N6-(glutar-2-yl)-L-lysine:NAD oxidoreductase (L-lysine-forming); 6-N-(L-1,3-dicarboxypropyl)-L-lysine:NAD+ oxidoreductase (L-lysine-forming) +ec:1.5.1.8 saccharopine dehydrogenase (NADP+, L-lysine-forming); lysine-2-oxoglutarate reductase; lysine-ketoglutarate reductase; L-lysine-alpha-ketoglutarate reductase; lysine:alpha-ketoglutarate:TPNH oxidoreductase (epsilon-N-[gultaryl-2]-L-lysine forming); saccharopine (nicotinamide adenine dinucleotide phosphate, lysine-forming) dehydrogenase; 6-N-(L-1,3-dicarboxypropyl)-L-lysine:NADP+ oxidoreductase (L-lysine-forming) +ec:1.5.1.9 saccharopine dehydrogenase (NAD+, L-glutamate-forming); dehydrogenase, saccharopine (nicotinamide adenine dinucleotide, glutamate-forming); saccharopin dehydrogenase; NAD+ oxidoreductase (L-2-aminoadipic-delta-semialdehyde and glutamate forming); aminoadipic semialdehyde synthase; 6-N-(L-1,3-dicarboxypropyl)-L-lysine:NAD+ oxidoreductase (L-glutamate-forming) +ec:1.5.1.10 saccharopine dehydrogenase (NADP+, L-glutamate-forming); saccharopine (nicotinamide adenine dinucleotide phosphate, glutamate-forming) dehydrogenase; aminoadipic semialdehyde-glutamic reductase; aminoadipate semialdehyde-glutamate reductase; aminoadipic semialdehyde-glutamate reductase; epsilon-N-(L-glutaryl-2)-L-lysine:NAD+(P) oxidoreductase (L-2-aminoadipate-semialdehyde forming); saccharopine reductase; 6-N-(L-1,3-dicarboxypropyl)-L-lysine:NADP+ oxidoreductase (L-glutamate-forming) +ec:1.5.1.11 D-octopine dehydrogenase; D-octopine synthase; octopine dehydrogenase; octopine:NAD+ oxidoreductase; ODH; 2-N-(D-1-carboxyethyl)-L-arginine:NAD+ oxidoreductase (L-arginine-forming) +ec:1.5.1.12 Transferred to 1.2.1.88 +ec:1.5.1.13 Transferred to 1.17.1.5 +ec:1.5.1.14 Deleted entry +ec:1.5.1.15 methylenetetrahydrofolate dehydrogenase (NAD+); methylenetetrahydrofolate dehydrogenase (NAD+) +ec:1.5.1.16 D-lysopine dehydrogenase; D-lysopine synthase; lysopine dehydrogenase; D(+)-lysopine dehydrogenase; 2-N-(D-1-carboxyethyl)-L-lysine:NADP+ oxidoreductase (L-lysine-forming) +ec:1.5.1.17 alanopine dehydrogenase; ALPDH; alanopine[meso-N-(1-carboxyethyl)-alanine]dehydrogenase; meso-N-(1-carboxyethyl)-alanine:NAD+ oxidoreductase; alanopine: NAD+ oxidoreductase; ADH (ambiguous); alanopine:NAD+ oxidoreductase +ec:1.5.1.18 ephedrine dehydrogenase +ec:1.5.1.19 D-nopaline dehydrogenase; D-nopaline synthase; nopaline dehydrogenase; nopaline synthase; NOS; 2-N-(D-1,3-dicarboxypropyl)-L-arginine:NADP+ oxidoreductase (L-arginine-forming) +ec:1.5.1.20 methylenetetrahydrofolate reductase [NAD(P)H]; MTHFR (gene name) +ec:1.5.1.21 1-piperideine-2-carboxylate/1-pyrroline-2-carboxylate reductase (NADPH); Pyr2C reductase; 1,2-didehydropipecolate reductase; P2C reductase; 1,2-didehydropipecolic reductase; DELTA1-piperideine-2-carboxylate/1-pyrroline-2-carboxylate reductase (ambiguous); L-pipecolate:NADP+ 2-oxidoreductase; DELTA1-piperideine-2-carboxylate reductase; Delta1-piperideine-2-carboxylate reductase +ec:1.5.1.22 strombine dehydrogenase; strombine[N-(carboxymethyl)-D-alanine]dehydrogenase; N-(carboxymethyl)-D-alanine: NAD+ oxidoreductase +ec:1.5.1.23 tauropine dehydrogenase; 2-N-(D-1-carboxyethyl)taurine:NAD+ oxidoreductase (taurine-forming) +ec:1.5.1.24 N5-(carboxyethyl)ornithine synthase; 5-N-(L-1-carboxyethyl)-L-ornithine:NADP+ oxidoreductase (L-ornithine-forming) +ec:1.5.1.25 thiomorpholine-carboxylate dehydrogenase; ketimine reductase; ketimine-reducing enzyme +ec:1.5.1.26 beta-alanopine dehydrogenase +ec:1.5.1.27 1,2-dehydroreticulinium reductase (NADPH); 1,2-dehydroreticulinium ion reductase +ec:1.5.1.28 opine dehydrogenase; (2S)-2-{[1-(R)-carboxyethyl]amino}pentanoate dehydrogenase (NAD+, L-aminopentanoate-forming) +ec:1.5.1.29 Deleted entry +ec:1.5.1.30 flavin reductase (NADPH); NADPH:flavin oxidoreductase; riboflavin mononucleotide (reduced nicotinamide adenine dinucleotide phosphate) reductase; flavin mononucleotide reductase; flavine mononucleotide reductase; FMN reductase (NADPH); NADPH-dependent FMN reductase; NADPH-flavin reductase; NADPH-FMN reductase; NADPH-specific FMN reductase; riboflavin mononucleotide reductase; riboflavine mononucleotide reductase; NADPH2 dehydrogenase (flavin); NADPH2:riboflavin oxidoreductase +ec:1.5.1.31 berberine reductase; (R)-canadine synthase +ec:1.5.1.32 vomilenine reductase +ec:1.5.1.33 pteridine reductase; PTR1; pteridine reductase 1 +ec:1.5.1.34 6,7-dihydropteridine reductase; 6,7-dihydropteridine:NAD(P)H oxidoreductase; DHPR; NAD(P)H:6,7-dihydropteridine oxidoreductase; NADH-dihydropteridine reductase; NADPH-dihydropteridine reductase; NADPH-specific dihydropteridine reductase; dihydropteridine (reduced nicotinamide adenine dinucleotide) reductase; dihydropteridine reductase; dihydropteridine reductase (NADH); 5,6,7,8-tetrahydropteridine:NAD(P)H+ oxidoreductase +ec:1.5.1.35 Deleted entry +ec:1.5.1.36 flavin reductase (NADH); NADH-dependent flavin reductase; flavin:NADH oxidoreductase +ec:1.5.1.37 FAD reductase (NADH); NADH-FAD reductase; NADH-dependent FAD reductase; NADH:FAD oxidoreductase; NADH:flavin adenine dinucleotide oxidoreductase +ec:1.5.1.38 FMN reductase (NADPH); FRP; flavin reductase P; SsuE +ec:1.5.1.39 FMN reductase [NAD(P)H]; FRG +ec:1.5.1.40 8-hydroxy-5-deazaflavin:NADPH oxidoreductase; 8-OH-5dFl:NADPH oxidoreductase +ec:1.5.1.41 riboflavin reductase [NAD(P)H]; NAD(P)H-FMN reductase (ambiguous); NAD(P)H-dependent FMN reductase (ambiguous); NAD(P)H:FMN oxidoreductase (ambiguous); NAD(P)H:flavin oxidoreductase (ambiguous); NAD(P)H2 dehydrogenase (FMN) (ambiguous); NAD(P)H2:FMN oxidoreductase (ambiguous); riboflavin mononucleotide reductase (ambiguous); flavine mononucleotide reductase (ambiguous); riboflavin mononucleotide (reduced nicotinamide adenine dinucleotide (phosphate)) reductase; flavin mononucleotide reductase (ambiguous); riboflavine mononucleotide reductase (ambiguous); Fre +ec:1.5.1.42 FMN reductase (NADH); NADH-FMN reductase; NADH-dependent FMN reductase; NADH:FMN oxidoreductase; NADH:flavin oxidoreductase +ec:1.5.1.43 carboxynorspermidine synthase; carboxynorspermidine dehydrogenase; carboxyspermidine dehydrogenase; CASDH; CANSDH; VC1624 (gene name) +ec:1.5.1.44 festuclavine dehydrogenase; FgaFS; festuclavine synthase +ec:1.5.1.45 FAD reductase [NAD(P)H]; GTNG_3158 (gene name) +ec:1.5.1.46 agroclavine dehydrogenase; easG (gene name) +ec:1.5.1.47 dihydromethanopterin reductase [NAD(P)+]; DmrA; H2MPT reductase; 5,6,7,8-tetrahydromethanopterin 5,6-oxidoreductase; dihydromethanopterin reductase +ec:1.5.1.48 2-methyl-1-pyrroline reductase; (R)-imine reductase (ambiguous) +ec:1.5.1.49 1-pyrroline-2-carboxylate reductase [NAD(P)H] +ec:1.5.1.50 dihydromonapterin reductase; FolM; H2-MPt reductase +ec:1.5.1.51 N-[(2S)-2-amino-2-carboxyethyl]-L-glutamate dehydrogenase; SbnB +ec:1.5.1.52 staphylopine dehydrogenase; cntM (gene name); staphylopine synthase +ec:1.5.1.53 methylenetetrahydrofolate reductase (NADPH); MTHFR (gene name); methylenetetrahydrofolate (reduced nicotinamide adenine dinucleotide phosphate) reductase; 5,10-methylenetetrahydrofolate reductase (NADPH); 5,10-methylenetetrahydrofolic acid reductase (ambiguous); 5,10-CH2-H4folate reductase (ambiguous); methylenetetrahydrofolate reductase (NADPH2); 5,10-methylenetetrahydrofolate reductase (ambiguous); methylenetetrahydrofolate reductase (ambiguous); N5,10-methylenetetrahydrofolate reductase (ambiguous); 5,10-methylenetetrahydropteroylglutamate reductase (ambiguous); N5,N10-methylenetetrahydrofolate reductase (ambiguous); methylenetetrahydrofolic acid reductase (ambiguous); 5-methyltetrahydrofolate:(acceptor) oxidoreductase (incorrect); 5,10-methylenetetrahydrofolate reductase (FADH2) (ambiguous) +ec:1.5.1.54 methylenetetrahydrofolate reductase (NADH); metF (gene name); 5,10-methylenetetrahydrofolic acid reductase (ambiguous); 5,10-CH2-H4folate reductase (ambiguous); methylenetetrahydrofolate (reduced riboflavin adenine dinucleotide) reductase; 5,10-methylenetetrahydrofolate reductase (ambiguous); methylenetetrahydrofolate reductase (ambiguous); N5,10-methylenetetrahydrofolate reductase (ambiguous); 5,10-methylenetetrahydropteroylglutamate reductase (ambiguous); N5,N10-methylenetetrahydrofolate reductase (ambiguous); methylenetetrahydrofolic acid reductase (ambiguous); 5-methyltetrahydrofolate:(acceptor) oxidoreductase (incorrect); 5,10-methylenetetrahydrofolate reductase (FADH2) (ambiguous) +ec:1.5.3.1 sarcosine oxidase (formaldehyde-forming); MSOX; monomeric sarcosine oxidase; sarcosine oxidase (ambiguous) +ec:1.5.3.2 N-methyl-L-amino-acid oxidase; N-methylamino acid oxidase; demethylase +ec:1.5.3.3 Deleted entry +ec:1.5.3.4 N6-methyl-lysine oxidase; epsilon-alkyl-L-lysine:oxygen oxidoreductase ; N6-methyllysine oxidase; epsilon-N-methyllysine demethylase; epsilon-alkyllysinase; 6-N-methyl-L-lysine:oxygen oxidoreductase (demethylating) +ec:1.5.3.5 (S)-6-hydroxynicotine oxidase; L-6-hydroxynicotine oxidase; 6-hydroxy-L-nicotine oxidase; 6-hydroxy-L-nicotine:oxygen oxidoreductase; nctB (gene name) +ec:1.5.3.6 (R)-6-hydroxynicotine oxidase; D-6-hydroxynicotine oxidase; 6-hydroxy-D-nicotine oxidase +ec:1.5.3.7 L-pipecolate oxidase; pipecolate oxidase; L-pipecolic acid oxidase +ec:1.5.3.8 Deleted entry +ec:1.5.3.9 Transferred to 1.21.3.3 +ec:1.5.3.10 dimethylglycine oxidase; dmg (gene name); N,N-dimethylglycine:oxygen oxidoreductase (demethylating) +ec:1.5.3.11 Deleted entry +ec:1.5.3.12 dihydrobenzophenanthridine oxidase +ec:1.5.3.13 N1-acetylpolyamine oxidase; hPAO-1; PAO (ambiguous); mPAO; hPAO; polyamine oxidase (ambiguous) +ec:1.5.3.14 polyamine oxidase (propane-1,3-diamine-forming); MPAO (ambiguous); maize PAO +ec:1.5.3.15 N8-acetylspermidine oxidase (propane-1,3-diamine-forming) +ec:1.5.3.16 spermine oxidase; PAOh1/SMO; PAOh1 (ambiguous); AtPAO1; AtPAO4; SMO; mSMO; SMO(PAOh1); SMO/PAOh1; SMO5; mSMOmu +ec:1.5.3.17 non-specific polyamine oxidase; polyamine oxidase (ambiguous); Fms1; AtPAO3 +ec:1.5.3.18 L-saccharopine oxidase; FAP2 +ec:1.5.3.19 4-methylaminobutanoate oxidase (formaldehyde-forming); mabO (gene name) +ec:1.5.3.20 N-alkylglycine oxidase; N-carboxymethylalkylamine:oxygen oxidoreductase (decarboxymethylating) +ec:1.5.3.21 4-methylaminobutanoate oxidase (methylamine-forming); mao (gene name, ambiguous) +ec:1.5.3.22 coenzyme F420H2 oxidase; FprA +ec:1.5.3.23 glyphosate oxidoreductase; gox (gene name) +ec:1.5.3.24 sarcosine oxidase (5,10-methylenetetrahydrofolate-forming); TSOX; sarcosine oxidase (ambigious); heterotetrameric sarcosine oxidase +ec:1.5.3.25 fructosyl amine oxidase (glucosone-forming); amadoriase +ec:1.5.3.26 fructosyl amine oxidase (fructosamine-forming) +ec:1.5.4.1 pyrimidodiazepine synthase; PDA synthase; pyrimidodiazepine:oxidized-glutathione oxidoreductase (ring-opening, cyclizing); pyrimidodiazepine:glutathione-disulfide oxidoreductase (ring-opening, cyclizing) +ec:1.5.5.1 electron-transferring-flavoprotein dehydrogenase; ETF-QO; ETF:ubiquinone oxidoreductase; electron transfer flavoprotein dehydrogenase; electron transfer flavoprotein Q oxidoreductase; electron transfer flavoprotein-ubiquinone oxidoreductase; electron transfer flavoprotein reductase +ec:1.5.5.2 proline dehydrogenase; L-proline dehydrogenase; L-proline:(acceptor) oxidoreductase +ec:1.5.5.3 hydroxyproline dehydrogenase; HYPDH; OH-POX; hydroxyproline oxidase; PRODH2 (gene name) +ec:1.5.7.1 methylenetetrahydrofolate reductase (ferredoxin); 5,10-methylenetetrahydrofolate reductase +ec:1.5.7.2 coenzyme F420 oxidoreductase (ferredoxin); Fd:F420 oxidoreductase; FpoF protein; ferredoxin:F420 oxidoreductase +ec:1.5.7.3 N,N-dimethylglycine/sarcosine dehydrogenase (ferredoxin); ddhC (gene name); dgcA (gene name) +ec:1.5.8.1 dimethylamine dehydrogenase +ec:1.5.8.2 trimethylamine dehydrogenase +ec:1.5.8.3 sarcosine dehydrogenase; sarcosine N-demethylase; monomethylglycine dehydrogenase; sarcosine:(acceptor) oxidoreductase (demethylating); sarcosine:electron-transfer flavoprotein oxidoreductase (demethylating) +ec:1.5.8.4 dimethylglycine dehydrogenase; N,N-dimethylglycine oxidase; N,N-dimethylglycine:(acceptor) oxidoreductase (demethylating); Me2GlyDH; N,N-dimethylglycine:electron-transfer flavoprotein oxidoreductase (demethylating) +ec:1.5.98.1 methylenetetrahydromethanopterin dehydrogenase; N5,N10-methylenetetrahydromethanopterin dehydrogenase; 5,10-methylenetetrahydromethanopterin dehydrogenase +ec:1.5.98.2 5,10-methylenetetrahydromethanopterin reductase; 5,10-methylenetetrahydromethanopterin cyclohydrolase; N5,N10-methylenetetrahydromethanopterin reductase; methylene-H4MPT reductase; coenzyme F420-dependent N5,N10-methenyltetrahydromethanopterin reductase; N5,N10-methylenetetrahydromethanopterin:coenzyme-F420 oxidoreductase +ec:1.5.98.3 coenzyme F420:methanophenazine dehydrogenase; F420H2 dehydrogenase; fpoBCDIF (gene names) +ec:1.5.99.1 Transferred to 1.5.8.3 +ec:1.5.99.2 Transferred to 1.5.8.4 +ec:1.5.99.3 L-pipecolate dehydrogenase; L-pipecolate:(acceptor) 1,6-oxidoreductase +ec:1.5.99.4 nicotine dehydrogenase; nicotine oxidase; D-nicotine oxidase; nicotine:(acceptor) 6-oxidoreductase (hydroxylating); L-nicotine oxidase +ec:1.5.99.5 methylglutamate dehydrogenase; N-methylglutamate dehydrogenase; N-methyl-L-glutamate:(acceptor) oxidoreductase (demethylating) +ec:1.5.99.6 spermidine dehydrogenase; spermidine:(acceptor) oxidoreductase +ec:1.5.99.7 Transferred to 1.5.8.2 +ec:1.5.99.8 Transferred to 1.5.5.2 +ec:1.5.99.9 Transferred to 1.5.98.1 +ec:1.5.99.10 Transferred to 1.5.8.1 +ec:1.5.99.11 Transferred to 1.5.98.2 +ec:1.5.99.12 cytokinin dehydrogenase; N6-dimethylallyladenine:(acceptor) oxidoreductase; 6-N-dimethylallyladenine:acceptor oxidoreductase; OsCKX2; CKX; cytokinin oxidase/dehydrogenase; N6-dimethylallyladenine:acceptor oxidoreductase +ec:1.5.99.13 D-proline dehydrogenase; D-Pro DH; D-Pro dehydrogenase; dye-linked D-proline dehydrogenase +ec:1.5.99.14 6-hydroxypseudooxynicotine dehydrogenase +ec:1.5.99.15 dihydromethanopterin reductase (acceptor); DmrX +ec:1.6.1.1 NAD(P)+ transhydrogenase (Si-specific); pyridine nucleotide transhydrogenase; transhydrogenase; NAD(P)+ transhydrogenase; nicotinamide adenine dinucleotide (phosphate) transhydrogenase; NAD+ transhydrogenase; NADH transhydrogenase; nicotinamide nucleotide transhydrogenase; NADPH-NAD+ transhydrogenase; pyridine nucleotide transferase; NADPH-NAD+ oxidoreductase; NADH-NADP+-transhydrogenase; NADPH:NAD+ transhydrogenase; H+-Thase; non-energy-linked transhydrogenase; NADPH:NAD+ oxidoreductase (B-specific); NAD(P)+ transhydrogenase (B-specific) +ec:1.6.1.2 NAD(P)+ transhydrogenase (Re/Si-specific); pyridine nucleotide transhydrogenase; transhydrogenase; NAD(P)+ transhydrogenase; nicotinamide adenine dinucleotide (phosphate) transhydrogenase; NAD+ transhydrogenase; NADH transhydrogenase; nicotinamide nucleotide transhydrogenase; NADPH-NAD+ transhydrogenase; pyridine nucleotide transferase; NADPH-NAD+ oxidoreductase; NADH-NADP+-transhydrogenase; NADPH:NAD+ transhydrogenase; H+-Thase; energy-linked transhydrogenase; NAD(P) transhydrogenase (AB-specific); NAD(P)+ transhydrogenase (AB-specific); NADPH:NAD+ oxidoreductase (AB-specific) +ec:1.6.1.3 NAD(P)+ transhydrogenase; pyridine nucleotide transhydrogenase; transhydrogenase (ambiguous); nicotinamide adenine dinucleotide (phosphate) transhydrogenase (ambiguous); NAD+ transhydrogenase (ambiguous); NADH transhydrogenase (misleading); nicotinamide nucleotide transhydrogenase (ambiguous); NADPH-NAD+ transhydrogenase (ambiguous); pyridine nucleotide transferase (ambiguous); NADPH-NAD+ oxidoreductase (ambiguous); NADH-NADP+-transhydrogenase (ambiguous); NADPH:NAD+ transhydrogenase; H+-Thase (ambiguous); non-energy-linked transhydrogenase (ambiguous) +ec:1.6.1.4 NAD(P)+ transhydrogenase (ferredoxin); NADH-dependent reduced ferredoxin:NADP+ oxidoreductase; Nfn; nfnAB (gene names) +ec:1.6.1.5 Transferred to 7.1.1.1 +ec:1.6.2.1 Transferred to 1.6.99.3 +ec:1.6.2.2 cytochrome-b5 reductase; cytochrome b5 reductase; dihydronicotinamide adenine dinucleotide-cytochrome b5 reductase; reduced nicotinamide adeninedinucleotide-cytochrome b5 reductase; NADH-ferricytochrome b5 oxidoreductase; NADH-cytochrome b5 reductase; NADH 5alpha-reductase ; NADH-cytochrome-b5 reductase +ec:1.6.2.3 Deleted entry +ec:1.6.2.4 NADPH---hemoprotein reductase; CPR; FAD-cytochrome c reductase; NADP-cytochrome c reductase; NADP-cytochrome reductase; NADPH-dependent cytochrome c reductase; NADPH:P-450 reductase; NADPH:ferrihemoprotein oxidoreductase; NADPH---cytochrome P-450 oxidoreductase; NADPH-cytochrome c oxidoreductase; NADPH-cytochrome c reductase; NADPH---cytochrome p-450 reductase; NADPH-ferricytochrome c oxidoreductase; NADPH-ferrihemoprotein reductase; TPNH2 cytochrome c reductase; TPNH-cytochrome c reductase; aldehyde reductase (NADPH-dependent); cytochrome P-450 reductase; cytochrome c reductase (reduced nicotinamide adenine dinucleotide phosphate, NADPH, NADPH-dependent); dihydroxynicotinamide adenine dinucleotide phosphate-cytochrome c reductase; ferrihemoprotein P-450 reductase; reduced nicotinamide adenine dinucleotide phosphate-cytochrome c reductase; reductase, cytochrome c (reduced nicotinamide adenine dinucleotide phosphate) +ec:1.6.2.5 NADPH---cytochrome-c2 reductase; cytochrome c2 reductase (reduced nicotinamide adenine dinucleotide phosphate); cytochrome c2 reductase (reduced nicotinamide adinine dinucleotide phosphate, NADPH) +ec:1.6.2.6 leghemoglobin reductase; ferric leghemoglobin reductase +ec:1.6.3.1 NAD(P)H oxidase (H2O2-forming); THOX2; ThOX; dual oxidase; p138tox; thyroid NADPH oxidase; thyroid oxidase; thyroid oxidase 2; NADPH oxidase; NAD(P)H:oxygen oxidoreductase; NAD(P)H oxidase +ec:1.6.3.2 NAD(P)H oxidase (H2O-forming) +ec:1.6.3.3 NADH oxidase (H2O2-forming); NOX-1; H2O2-forming NADH oxidase +ec:1.6.3.4 NADH oxidase (H2O-forming); H2O-forming NADH oxidase; Nox-2 +ec:1.6.3.5 renalase; alphaNAD(P)H oxidase/anomerase (incorrect); NAD(P)H:oxygen oxidoreductase (H2O2-forming, epimerising) (incorrect) +ec:1.6.4.1 Transferred to 1.8.1.6 +ec:1.6.4.2 Transferred to 1.8.1.7 +ec:1.6.4.3 Transferred to 1.8.1.4 +ec:1.6.4.4 Transferred to 1.8.1.8 +ec:1.6.4.5 Transferred to 1.8.1.9 +ec:1.6.4.6 Transferred to 1.8.1.10 +ec:1.6.4.7 Transferred to 1.8.1.11 +ec:1.6.4.8 Transferred to 1.8.1.12 +ec:1.6.4.9 Transferred to 1.8.1.13 +ec:1.6.4.10 Transferred to 1.8.1.14 +ec:1.6.5.1 Deleted entry +ec:1.6.5.2 NAD(P)H dehydrogenase (quinone); menadione reductase; phylloquinone reductase; quinone reductase; dehydrogenase, reduced nicotinamide adenine dinucleotide (phosphate, quinone); DT-diaphorase; flavoprotein NAD(P)H-quinone reductase; menadione oxidoreductase; NAD(P)H dehydrogenase; NAD(P)H menadione reductase; NAD(P)H-quinone dehydrogenase; NAD(P)H-quinone oxidoreductase; NAD(P)H: (quinone-acceptor)oxidoreductase; NAD(P)H: menadione oxidoreductase; NADH-menadione reductase; naphthoquinone reductase; p-benzoquinone reductase; reduced NAD(P)H dehydrogenase; viologen accepting pyridine nucleotide oxidoreductase; vitamin K reductase; diaphorase; reduced nicotinamide-adenine dinucleotide (phosphate) dehydrogenase; vitamin-K reductase; NAD(P)H2 dehydrogenase (quinone); NQO1; QR1; NAD(P)H:(quinone-acceptor) oxidoreductase +ec:1.6.5.3 Transferred to 7.1.1.2 +ec:1.6.5.4 monodehydroascorbate reductase (NADH); NADH:semidehydroascorbic acid oxidoreductase; MDHA; semidehydroascorbate reductase; AFR (ambiguous); AFR-reductase; ascorbic free radical reductase; ascorbate free radical reductase; SOR (ambiguous); MDAsA reductase (NADPH); SDA reductase; NADH:ascorbate radical oxidoreductase; NADH-semidehydroascorbate oxidoreductase; ascorbate free-radical reductase; NADH:AFR oxidoreductase; monodehydroascorbate reductase (NADH2) +ec:1.6.5.5 NADPH:quinone reductase; NADPH2:quinone reductase +ec:1.6.5.6 p-benzoquinone reductase (NADPH) +ec:1.6.5.7 2-hydroxy-1,4-benzoquinone reductase; hydroxybenzoquinone reductase; 1,2,4-trihydroxybenzene:NAD oxidoreductase +ec:1.6.5.8 Transferred to 7.2.1.1 +ec:1.6.5.9 NADH:quinone reductase (non-electrogenic); type II NAD(P)H:quinone oxidoreductase; NDE2 (gene name); ndh (gene name); NDH-II; NDH-2; NADH dehydrogenase (quinone) (ambiguous); ubiquinone reductase (ambiguous); coenzyme Q reductase (ambiguous); dihydronicotinamide adenine dinucleotide-coenzyme Q reductase (ambiguous); DPNH-coenzyme Q reductase (ambiguous); DPNH-ubiquinone reductase (ambiguous); NADH-coenzyme Q oxidoreductase (ambiguous); NADH-coenzyme Q reductase (ambiguous); NADH-CoQ oxidoreductase (ambiguous); NADH-CoQ reductase (ambiguous); NADH-ubiquinone reductase (ambiguous); NADH-ubiquinone oxidoreductase (ambiguous); reduced nicotinamide adenine dinucleotide-coenzyme Q reductase (ambiguous); NADH-Q6 oxidoreductase (ambiguous); NADH2 dehydrogenase (ubiquinone) (ambiguous); NADH:ubiquinone oxidoreductase; NADH:ubiquinone reductase (non-electrogenic) +ec:1.6.5.10 NADPH dehydrogenase (quinone); reduced nicotinamide adenine dinucleotide phosphate (quinone) dehydrogenase; NADPH oxidase; NADPH2 dehydrogenase (quinone) +ec:1.6.5.11 Deleted entry +ec:1.6.5.12 demethylphylloquinone reductase; ndbB (gene name); NDC1 (gene name); demethylphylloquinone:NADPH oxidoreductase +ec:1.6.6.1 Transferred to 1.7.1.1 +ec:1.6.6.2 Transferred to 1.7.1.2 +ec:1.6.6.3 Transferred to 1.7.1.3 +ec:1.6.6.4 Transferred to 1.7.1.4 +ec:1.6.6.5 Transferred to 1.7.2.1 +ec:1.6.6.6 Transferred to 1.7.1.5 +ec:1.6.6.7 Transferred to 1.7.1.6 +ec:1.6.6.8 Transferred to 1.7.1.7 +ec:1.6.6.9 Deleted entry +ec:1.6.6.10 Transferred to 1.7.1.9 +ec:1.6.6.11 Transferred to 1.7.1.10 +ec:1.6.6.12 Transferred to 1.7.1.11 +ec:1.6.6.13 Transferred to 1.7.1.12 +ec:1.6.7.1 Transferred to 1.18.1.2 +ec:1.6.7.2 Transferred to 1.18.1.1 +ec:1.6.7.3 Transferred to 1.18.1.3 +ec:1.6.8.1 Transferred to 1.5.1.29 +ec:1.6.8.2 Transferred to 1.5.1.30 +ec:1.6.99.1 NADPH dehydrogenase; NADPH2 diaphorase; NADPH diaphorase; OYE; diaphorase; dihydronicotinamide adenine dinucleotide phosphate dehydrogenase; NADPH-dehydrogenase; NADPH-diaphorase; NADPH2-dehydrogenase; old yellow enzyme; reduced nicotinamide adenine dinucleotide phosphate dehydrogenase; TPNH dehydrogenase; TPNH-diaphorase; triphosphopyridine diaphorase; triphosphopyridine nucleotide diaphorase; NADPH2 dehydrogenase; NADPH:(acceptor) oxidoreductase +ec:1.6.99.2 Transferred to 1.6.5.2 +ec:1.6.99.3 Deleted entry +ec:1.6.99.4 Transferred to 1.18.1.2 +ec:1.6.99.5 Transferred to 1.6.5.11 +ec:1.6.99.6 Transferred to 1.6.5.10 +ec:1.6.99.7 Transferred to 1.5.1.34 +ec:1.6.99.8 Deleted entry +ec:1.6.99.9 Transferred to 1.16.1.4 +ec:1.6.99.10 Deleted entry +ec:1.6.99.11 Deleted entry +ec:1.6.99.12 Transferred to 1.16.1.6 +ec:1.6.99.13 Transferred to 1.16.1.7 +ec:1.7.1.1 nitrate reductase (NADH); assimilatory nitrate reductase (ambiguous); NADH-nitrate reductase; NADH-dependent nitrate reductase; assimilatory NADH: nitrate reductase; nitrate reductase (NADH2); NADH2:nitrate oxidoreductase +ec:1.7.1.2 nitrate reductase [NAD(P)H]; assimilatory nitrate reductase ( ambiguous); assimilatory NAD(P)H-nitrate reductase; NAD(P)H bispecific nitrate reductase; nitrate reductase (reduced nicotinamide adenine dinucleotide (phosphate)); nitrate reductase NAD(P)H; NAD(P)H-nitrate reductase; nitrate reductase [NAD(P)H2]; NAD(P)H2:nitrate oxidoreductase +ec:1.7.1.3 nitrate reductase (NADPH); assimilatory nitrate reductase (ambiguous); assimilatory reduced nicotinamide adenine dinucleotide phosphate-nitrate reductase; NADPH-nitrate reductase; assimilatory NADPH-nitrate reductase; triphosphopyridine nucleotide-nitrate reductase; NADPH:nitrate reductase; nitrate reductase (NADPH2); NADPH2:nitrate oxidoreductase +ec:1.7.1.4 nitrite reductase [NAD(P)H]; nitrite reductase (reduced nicotinamide adenine dinucleotide (phosphate)); assimilatory nitrite reductase (ambiguous); nitrite reductase [NAD(P)H2]; NAD(P)H2:nitrite oxidoreductase; nit-6 (gene name) +ec:1.7.1.5 hyponitrite reductase; NADH2:hyponitrite oxidoreductase +ec:1.7.1.6 azobenzene reductase; new coccine (NC)-reductase; NC-reductase; azo-dye reductase; orange II azoreductase; NAD(P)H:1-(4'-sulfophenylazo)-2-naphthol oxidoreductase; orange I azoreductase; azo reductase; azoreductase; nicotinamide adenine dinucleotide (phosphate) azoreductase; NADPH2-dependent azoreductase; dimethylaminobenzene reductase; p-dimethylaminoazobenzene azoreductase; dibromopropylaminophenylazobenzoic azoreductase; N,N-dimethyl-4-phenylazoaniline azoreductase; p-aminoazobenzene reductase; methyl red azoreductase; NADPH2:4-(dimethylamino)azobenzene oxidoreductase +ec:1.7.1.7 GMP reductase; guanosine 5'-monophosphate reductase; NADPH:GMP oxidoreductase (deaminating); guanosine monophosphate reductase; guanylate reductase; NADPH2:guanosine-5'-phosphate oxidoreductase (deaminating); guanosine 5'-phosphate reductase +ec:1.7.1.8 Deleted entry +ec:1.7.1.9 nitroquinoline-N-oxide reductase; 4-nitroquinoline 1-oxide reductase; 4NQO reductase; NAD(P)H2:4-nitroquinoline-N-oxide oxidoreductase +ec:1.7.1.10 hydroxylamine reductase (NADH); hydroxylamine reductase; ammonium dehydrogenase; NADH-hydroxylamine reductase; N-hydroxy amine reductase; hydroxylamine reductase (NADH2); NADH2:hydroxylamine oxidoreductase +ec:1.7.1.11 4-(dimethylamino)phenylazoxybenzene reductase; N,N-dimethyl-p-aminoazobenzene oxide reductase; dimethylaminoazobenzene N-oxide reductase; NADPH-dependent DMAB N-oxide reductase; NADPH:4-(dimethylamino)phenylazoxybenzene oxidoreductase +ec:1.7.1.12 N-hydroxy-2-acetamidofluorene reductase; N-hydroxy-2-acetylaminofluorene reductase; NAD(P)H:N-hydroxy-2-acetamidofluorene N-oxidoreductase +ec:1.7.1.13 preQ1 synthase; YkvM; QueF; preQ0 reductase; preQ0 oxidoreductase; 7-cyano-7-deazaguanine reductase; queuine synthase (incorrect as queuine is not the product); queuine:NADP+ oxidoreductase (incorrect as queuine is not the product) +ec:1.7.1.14 nitric oxide reductase [NAD(P)+, nitrous oxide-forming]; fungal nitric oxide reductase; cytochrome P450nor; NOR (ambiguous) +ec:1.7.1.15 nitrite reductase (NADH); nitrite reductase (reduced nicotinamide adenine dinucleotide); NADH-nitrite oxidoreductase; assimilatory nitrite reductase (ambiguous); nirB (gene name); nirD (gene name) +ec:1.7.1.16 nitrobenzene nitroreductase; cnbA (gene name) +ec:1.7.1.17 FMN-dependent NADH-azoreductase; azoR (gene name); NADH-azoreductase +ec:1.7.2.1 nitrite reductase (NO-forming); cd-cytochrome nitrite reductase; [nitrite reductase (cytochrome)] [misleading, see comments.]; cytochrome c-551:O2, NO2+ oxidoreductase; cytochrome cd; cytochrome cd1; hydroxylamine (acceptor) reductase; methyl viologen-nitrite reductase; nitrite reductase (cytochrome; NO-forming) +ec:1.7.2.2 nitrite reductase (cytochrome; ammonia-forming); cytochrome c nitrite reductase; multiheme nitrite reductase +ec:1.7.2.3 trimethylamine-N-oxide reductase; TMAO reductase; TOR; torA (gene name); torZ (gene name); bisZ (gene name); trimethylamine-N-oxide reductase (cytochrome c) +ec:1.7.2.4 nitrous-oxide reductase; nitrous oxide reductase; N2O reductase; nitrogen:(acceptor) oxidoreductase (N2O-forming) +ec:1.7.2.5 nitric oxide reductase (cytochrome c) +ec:1.7.2.6 hydroxylamine dehydrogenase; HAO (ambiguous); hydroxylamine oxidoreductase (ambiguous); hydroxylamine oxidase (misleading) +ec:1.7.2.7 hydrazine synthase; HZS +ec:1.7.2.8 hydrazine dehydrogenase; HDH +ec:1.7.2.9 hydroxylamine oxidase; HOX +ec:1.7.3.1 nitroalkane oxidase; nitroethane oxidase; NAO; nitroethane:oxygen oxidoreductase +ec:1.7.3.2 acetylindoxyl oxidase +ec:1.7.3.3 factor-independent urate hydroxylase; uric acid oxidase; uricase; uricase II; urate oxidase +ec:1.7.3.4 Transferred to 1.7.2.6 and 1.7.3.6 +ec:1.7.3.5 3-aci-nitropropanoate oxidase; propionate-3-nitronate oxidase +ec:1.7.3.6 hydroxylamine oxidase (cytochrome); HAO (ambiguous); hydroxylamine oxidoreductase (ambiguous); hydroxylamine oxidase (misleading) +ec:1.7.5.1 nitrate reductase (quinone); nitrate reductase A; nitrate reductase Z; quinol/nitrate oxidoreductase; quinol-nitrate oxidoreductase; quinol:nitrate oxidoreductase; NarA; NarZ; NarGHI; dissimilatory nitrate reductase +ec:1.7.5.2 nitric oxide reductase (menaquinol) +ec:1.7.6.1 nitrite dismutase; Prolixin S; Nitrophorin 7 +ec:1.7.7.1 ferredoxin---nitrite reductase +ec:1.7.7.2 ferredoxin---nitrate reductase; assimilatory nitrate reductase (ambiguous); nitrate (ferredoxin) reductase; assimilatory ferredoxin-nitrate reductase +ec:1.7.99.1 hydroxylamine reductase; hydroxylamine (acceptor) reductase; ammonia:(acceptor) oxidoreductase +ec:1.7.99.2 Deleted entry +ec:1.7.99.3 Transferred to 1.7.2.1 +ec:1.7.99.4 Transferred to 1.7.1.1 and 1.7.1.2 and 1.7.1.3 and 1.7.5.1 and 1.7.7.2 and 1.9.6.1 +ec:1.7.99.5 Deleted entry +ec:1.7.99.6 Transferred to 1.7.99.6 and 1.7.2.4 +ec:1.7.99.7 Transferred to 1.7.2.5 +ec:1.7.99.8 Transferred to 1.7.2.8 +ec:1.8.1.1 Deleted entry +ec:1.8.1.2 assimilatory sulfite reductase (NADPH); sulfite reductase (NADPH); sulfite (reduced nicotinamide adenine dinucleotide phosphate) reductase; NADPH-sulfite reductase; NADPH-dependent sulfite reductase; H2S-NADP oxidoreductase; sulfite reductase (NADPH2); MET5 (gene name); MET10 (gene name); cysI (gene name); cysJ (gene name) +ec:1.8.1.3 Deleted entry +ec:1.8.1.4 dihydrolipoyl dehydrogenase; LDP-Glc; LDP-Val; dehydrolipoate dehydrogenase; diaphorase; dihydrolipoamide dehydrogenase; dihydrolipoamide:NAD+ oxidoreductase; dihydrolipoic dehydrogenase; dihydrothioctic dehydrogenase; lipoamide dehydrogenase (NADH); lipoamide oxidoreductase (NADH); lipoamide reductase; lipoamide reductase (NADH); lipoate dehydrogenase; lipoic acid dehydrogenase; lipoyl dehydrogenase; protein-6-N-(dihydrolipoyl)lysine:NAD+ oxidoreductase +ec:1.8.1.5 2-oxopropyl-CoM reductase (carboxylating); NADPH:2-(2-ketopropylthio)ethanesulfonate oxidoreductase/carboxylase; NADPH:2-ketopropyl-coenzyme M oxidoreductase/carboxylase; 2-mercaptoethanesulfonate,acetoacetate:NADP+ oxidoreductase (decarboxylating) +ec:1.8.1.6 cystine reductase; cystine reductase (NADH); NADH-dependent cystine reductase; cystine reductase (NADH2); NADH2:L-cystine oxidoreductase +ec:1.8.1.7 glutathione-disulfide reductase; glutathione reductase; glutathione reductase (NADPH); NADPH-glutathione reductase; GSH reductase; GSSG reductase; NADPH-GSSG reductase; glutathione S-reductase; NADPH:oxidized-glutathione oxidoreductase +ec:1.8.1.8 protein-disulfide reductase; protein disulphide reductase; insulin-glutathione transhydrogenase; disulfide reductase; NAD(P)H2:protein-disulfide oxidoreductase +ec:1.8.1.9 thioredoxin-disulfide reductase; NADP-thioredoxin reductase; NADPH-thioredoxin reductase; thioredoxin reductase (NADPH); NADPH2:oxidized thioredoxin oxidoreductase +ec:1.8.1.10 CoA-glutathione reductase; coenzyme A glutathione disulfide reductase; NADPH-dependent coenzyme A-SS-glutathione reductase; coenzyme A disulfide-glutathione reductase; NADPH:CoA-glutathione oxidoreductase +ec:1.8.1.11 asparagusate reductase; asparagusate dehydrogenase; asparagusic dehydrogenase; asparagusate reductase (NADH2); NADH2:asparagusate oxidoreductase; 3-mercapto-2-mercaptomethylpropanoate:NAD+ oxidoreductase +ec:1.8.1.12 trypanothione-disulfide reductase; trypanothione reductase; NADPH2:trypanothione oxidoreductase +ec:1.8.1.13 bis-gamma-glutamylcystine reductase; NADPH2:bis-gamma-glutamylcysteine oxidoreductase; GSR +ec:1.8.1.14 CoA-disulfide reductase; CoA-disulfide reductase (NADH2); NADH2:CoA-disulfide oxidoreductase; CoA:NAD+ oxidoreductase (misleading); CoADR; coenzyme A disulfide reductase +ec:1.8.1.15 mycothione reductase; mycothiol-disulfide reductase +ec:1.8.1.16 glutathione amide reductase; GAR +ec:1.8.1.17 dimethylsulfone reductase +ec:1.8.1.18 NAD(P)H sulfur oxidoreductase (CoA-dependent); NADPH NSR; S0 reductase; coenzyme A-dependent NADPH sulfur oxidoreductase +ec:1.8.1.19 sulfide dehydrogenase; SuDH +ec:1.8.1.20 4,4'-dithiodibutanoate disulfide reductase +ec:1.8.1.21 dissimilatory dimethyldisulfide reductase +ec:1.8.2.1 sulfite dehydrogenase (cytochrome); sulfite cytochrome c reductase; sulfite-cytochrome c oxidoreductase; sulfite oxidase (ambiguous); sulfite dehydrogenase (ambiguous); sorAB (gene names) +ec:1.8.2.2 thiosulfate dehydrogenase; tsdA (gene name); tetrathionate synthase; thiosulfate oxidase; thiosulfate-oxidizing enzyme; thiosulfate-acceptor oxidoreductase +ec:1.8.2.3 sulfide-cytochrome-c reductase (flavocytochrome c) +ec:1.8.2.4 dimethyl sulfide:cytochrome c2 reductase; Ddh (gene name) +ec:1.8.2.5 thiosulfate reductase (cytochrome) +ec:1.8.2.6 S-disulfanyl-L-cysteine oxidoreductase; SoxCD; sulfur dehydrogenase +ec:1.8.2.7 thiocyanate desulfurase; TcDH; thiocyanate dehydrogenase +ec:1.8.3.1 sulfite oxidase +ec:1.8.3.2 thiol oxidase; sulfhydryl oxidase +ec:1.8.3.3 glutathione oxidase +ec:1.8.3.4 methanethiol oxidase; methylmercaptan oxidase; methyl mercaptan oxidase; (MM)-oxidase; MT-oxidase +ec:1.8.3.5 prenylcysteine oxidase; prenylcysteine lyase +ec:1.8.3.6 farnesylcysteine lyase; FC lyase; FCLY +ec:1.8.3.7 formylglycine-generating enzyme; sulfatase-modifying factor 1; Calpha-formylglycine-generating enzyme 1; SUMF1 (gene name) +ec:1.8.4.1 glutathione---homocystine transhydrogenase +ec:1.8.4.2 protein-disulfide reductase (glutathione); glutathione-insulin transhydrogenase; insulin reductase; reductase, protein disulfide (glutathione); protein disulfide transhydrogenase; glutathione-protein disulfide oxidoreductase; protein disulfide reductase (glutathione); GSH-insulin transhydrogenase; protein-disulfide interchange enzyme; protein-disulfide isomerase/oxidoreductase; thiol:protein-disulfide oxidoreductase; thiol-protein disulphide oxidoreductase +ec:1.8.4.3 glutathione---CoA-glutathione transhydrogenase; glutathione-coenzyme A glutathione disulfide transhydrogenase; glutathione-coenzyme A glutathione disulfide transhydrogenase; glutathione coenzyme A-glutathione transhydrogenase; glutathione:coenzyme A-glutathione transhydrogenase; coenzyme A:oxidized-glutathione oxidoreductase; coenzyme A:glutathione-disulfide oxidoreductase +ec:1.8.4.4 glutathione---cystine transhydrogenase; GSH-cystine transhydrogenase; NADPH-dependent GSH-cystine transhydrogenase +ec:1.8.4.5 Transferred to 1.8.4.13 and 1.8.4.14 +ec:1.8.4.6 Transferred to 1.8.4.11 +ec:1.8.4.7 enzyme-thiol transhydrogenase (glutathione-disulfide); [xanthine-dehydrogenase]:oxidized-glutathione S-oxidoreductase; enzyme-thiol transhydrogenase (oxidized-glutathione); glutathione-dependent thiol:disulfide oxidoreductase; thiol:disulphide oxidoreductase +ec:1.8.4.8 phosphoadenylyl-sulfate reductase (thioredoxin); PAPS reductase, thioredoxin-dependent; PAPS reductase; thioredoxin:adenosine 3'-phosphate 5'-phosphosulfate reductase; 3'-phosphoadenylylsulfate reductase; thioredoxin:3'-phospho-adenylylsulfate reductase; phosphoadenosine-phosphosulfate reductase; adenosine 3',5'-bisphosphate,sulfite:oxidized-thioredoxin oxidoreductase (3'-phosphoadenosine-5'-phosphosulfate-forming) +ec:1.8.4.9 adenylyl-sulfate reductase (glutathione); 5'-adenylylsulfate reductase (also used for EC 1.8.99.2); AMP,sulfite:oxidized-glutathione oxidoreductase (adenosine-5'-phosphosulfate-forming); plant-type 5'-adenylylsulfate reductase +ec:1.8.4.10 adenylyl-sulfate reductase (thioredoxin); thioredoxin-dependent 5'-adenylylsulfate reductase +ec:1.8.4.11 peptide-methionine (S)-S-oxide reductase; MsrA; methionine sulfoxide reductase (ambiguous); methionine sulphoxide reductase A; methionine S-oxide reductase (ambiguous); methionine S-oxide reductase (S-form oxidizing); methionine sulfoxide reductase A; peptide methionine sulfoxide reductase +ec:1.8.4.12 peptide-methionine (R)-S-oxide reductase; MsrB; methionine sulfoxide reductase (ambiguous); pMSR; methionine S-oxide reductase (ambiguous); selenoprotein R; methionine S-oxide reductase (R-form oxidizing); methionine sulfoxide reductase B; SelR; SelX; PilB; pRMsr +ec:1.8.4.13 L-methionine (S)-S-oxide reductase; fSMsr; methyl sulfoxide reductase I and II; acetylmethionine sulfoxide reductase; methionine sulfoxide reductase; L-methionine:oxidized-thioredoxin S-oxidoreductase; methionine-S-oxide reductase; free-methionine (S)-S-oxide reductase +ec:1.8.4.14 L-methionine (R)-S-oxide reductase; fRMsr; FRMsr; free met-R-(o) reductase; free-methionine (R)-S-oxide reductase +ec:1.8.4.15 protein dithiol oxidoreductase (disulfide-forming); dsbA (gene name) +ec:1.8.4.16 thioredoxin:protein disulfide reductase; dsbD (gene name); dipZ (gene name) +ec:1.8.5.1 glutathione dehydrogenase (ascorbate); dehydroascorbic reductase; dehydroascorbic acid reductase; glutathione dehydroascorbate reductase; DHA reductase ; dehydroascorbate reductase; GDOR; glutathione:dehydroascorbic acid oxidoreductase +ec:1.8.5.2 thiosulfate dehydrogenase (quinone); thiosulfate:quinone oxidoreductase; thiosulphate:quinone oxidoreductase; thiosulfate oxidoreductase, tetrathionate-forming; TQO +ec:1.8.5.3 respiratory dimethylsulfoxide reductase; dmsABC (gene names); DMSO reductase (ambiguous); dimethylsulfoxide reductase (ambiguous) +ec:1.8.5.4 bacterial sulfide:quinone reductase; sqr (gene name); sulfide:quinone reductase (ambiguous); sulfide:quinone oxidoreductase +ec:1.8.5.5 thiosulfate reductase (quinone); phsABC (gene names) +ec:1.8.5.6 sulfite dehydrogenase (quinone); soeABC (gene name) +ec:1.8.5.7 glutathionyl-hydroquinone reductase; pcpF (gene name); yqjG (gene name) +ec:1.8.5.8 eukaryotic sulfide quinone oxidoreductase; SQR; SQOR; SQRDL (gene name) +ec:1.8.5.9 protein dithiol:quinone oxidoreductase DsbB; dsbB (gene name) +ec:1.8.6.1 Deleted entry +ec:1.8.7.1 assimilatory sulfite reductase (ferredoxin); ferredoxin-sulfite reductase; SIR (gene name); sulfite reductase (ferredoxin) +ec:1.8.7.2 ferredoxin:thioredoxin reductase +ec:1.8.7.3 ferredoxin:CoB-CoM heterodisulfide reductase; hdrABC (gene names); hdrA1B1C1 (gene names); hdrA2B2C2 (gene names) +ec:1.8.98.1 dihydromethanophenazine:CoB-CoM heterodisulfide reductase; hdrDE (gene names); CoB---CoM heterodisulfide reductase (ambiguous); heterodisulfide reductase (ambiguous); coenzyme B:coenzyme M:methanophenazine oxidoreductase +ec:1.8.98.2 sulfiredoxin; Srx1; sulphiredoxin; peroxiredoxin-(S-hydroxy-S-oxocysteine) reductase +ec:1.8.98.3 sulfite reductase (coenzyme F420); coenzyme F420-dependent sulfite reductase; Fsr +ec:1.8.98.4 coenzyme F420:CoB-CoM heterodisulfide,ferredoxin reductase; hdrA2B2C2 (gene names) +ec:1.8.98.5 H2:CoB-CoM heterodisulfide,ferredoxin reductase +ec:1.8.98.6 formate:CoB-CoM heterodisulfide,ferredoxin reductase +ec:1.8.98.7 cysteine-type anaerobic sulfatase-maturating enzyme; anSME; Cys-type anaerobic sulfatase-maturating enzyme; anaerobic sulfatase maturase +ec:1.8.99.1 Deleted entry +ec:1.8.99.2 adenylyl-sulfate reductase; adenosine phosphosulfate reductase; adenosine 5'-phosphosulfate reductase; APS-reductase; APS reductase; AMP, sulfite:(acceptor) oxidoreductase (adenosine-5'-phosphosulfate-forming) +ec:1.8.99.3 Deleted entry +ec:1.8.99.4 Transferred to 1.8.4.8 +ec:1.8.99.5 dissimilatory sulfite reductase; siroheme sulfite reductase; hydrogen-sulfide:(acceptor) oxidoreductase (ambiguous); DsrAB +ec:1.9.3.1 Transferred to 7.1.1.9 +ec:1.9.3.2 Transferred to 1.7.2.1 +ec:1.9.6.1 nitrate reductase (cytochrome); respiratory nitrate reductase; benzyl viologen-nitrate reductase +ec:1.9.98.1 iron---cytochrome-c reductase; iron-cytochrome c reductase +ec:1.9.99.1 Transferred to 1.9.98.1 +ec:1.10.1.1 trans-acenaphthene-1,2-diol dehydrogenase; trans-1,2-acenaphthenediol dehydrogenase +ec:1.10.2.1 Deleted entry +ec:1.10.2.2 Transferred to 7.1.1.8 +ec:1.10.3.1 catechol oxidase; diphenol oxidase; o-diphenolase; polyphenol oxidase; pyrocatechol oxidase; dopa oxidase; catecholase; o-diphenol:oxygen oxidoreductase; o-diphenol oxidoreductase +ec:1.10.3.2 laccase; urishiol oxidase; urushiol oxidase; p-diphenol oxidase +ec:1.10.3.3 L-ascorbate oxidase; ascorbase; ascorbic acid oxidase; ascorbate oxidase; ascorbic oxidase; ascorbate dehydrogenase; L-ascorbic acid oxidase; AAO; L-ascorbate:O2 oxidoreductase; AA oxidase +ec:1.10.3.4 o-aminophenol oxidase; isophenoxazine synthase; o-aminophenol:O2 oxidoreductase; 2-aminophenol:O2 oxidoreductase +ec:1.10.3.5 3-hydroxyanthranilate oxidase; 3-hydroxyanthranilic acid oxidase +ec:1.10.3.6 rifamycin-B oxidase; rifamycin B oxidase +ec:1.10.3.7 Transferred to 1.21.3.4 +ec:1.10.3.8 Transferred to 1.21.3.5 +ec:1.10.3.9 photosystem II +ec:1.10.3.10 Transferred to 7.1.1.3 +ec:1.10.3.11 ubiquinol oxidase (non-electrogenic); plant alternative oxidase; cyanide-insensitive oxidase; AOX (gene name); ubiquinol oxidase; ubiquinol:O2 oxidoreductase (non-electrogenic) +ec:1.10.3.12 Transferred to 7.1.1.5 +ec:1.10.3.13 Transferred to 7.1.1.4 +ec:1.10.3.14 Transferred to 7.1.1.7 +ec:1.10.3.15 grixazone synthase; GriF +ec:1.10.3.16 dihydrophenazinedicarboxylate synthase; phzG (gene name) +ec:1.10.3.17 superoxide oxidase; SOO; CybB; cytochrome b561; superoxide:ubiquinone oxidoreductase +ec:1.10.5.1 ribosyldihydronicotinamide dehydrogenase (quinone); NRH:quinone oxidoreductase 2; NQO2; NAD(P)H:quinone oxidoreductase-2 (misleading); QR2; quinone reductase 2; N-ribosyldihydronicotinamide dehydrogenase (quinone); NAD(P)H:quinone oxidoreductase2 (misleading) +ec:1.10.9.1 Transferred to 7.1.1.6 +ec:1.10.99.1 Transferred to 1.10.9.1 +ec:1.10.99.2 Transferred to 1.10.5.1 +ec:1.10.99.3 Transferred to 1.23.5.1 +ec:1.11.1.1 NADH peroxidase; DPNH peroxidase; NAD peroxidase; diphosphopyridine nucleotide peroxidase; NADH-peroxidase; nicotinamide adenine dinucleotide peroxidase; NADH2 peroxidase +ec:1.11.1.2 NADPH peroxidase; TPNH peroxidase; NADP peroxidase; nicotinamide adenine dinucleotide phosphate peroxidase; TPN peroxidase; triphosphopyridine nucleotide peroxidase; NADPH2 peroxidase +ec:1.11.1.3 fatty-acid peroxidase; long chain fatty acid peroxidase +ec:1.11.1.4 Transferred to 1.13.11.11 +ec:1.11.1.5 cytochrome-c peroxidase; cytochrome peroxidase; cytochrome c-551 peroxidase; apocytochrome c peroxidase; mesocytochrome c peroxidase azide; mesocytochrome c peroxidase cyanide; mesocytochrome c peroxidase cyanate; cytochrome c-H2O oxidoreductase; cytochrome c peroxidase +ec:1.11.1.6 catalase; equilase; caperase; optidase; catalase-peroxidase; CAT +ec:1.11.1.7 peroxidase; lactoperoxidase; guaiacol peroxidase; plant peroxidase; Japanese radish peroxidase; horseradish peroxidase (HRP); soybean peroxidase (SBP); extensin peroxidase; heme peroxidase; oxyperoxidase; protoheme peroxidase; pyrocatechol peroxidase; scopoletin peroxidase; Coprinus cinereus peroxidase; Arthromyces ramosus peroxidase +ec:1.11.1.8 iodide peroxidase; thyroid peroxidase; iodoperoxidase (heme type); iodide peroxidase-tyrosine iodinase; thyroperoxidase; tyrosine iodinase; TPO; iodinase +ec:1.11.1.9 glutathione peroxidase; GSH peroxidase; selenium-glutathione peroxidase; reduced glutathione peroxidase +ec:1.11.1.10 chloride peroxidase; chloroperoxidase; CPO; vanadium haloperoxidase +ec:1.11.1.11 L-ascorbate peroxidase; L-ascorbic acid peroxidase; L-ascorbic acid-specific peroxidase; ascorbate peroxidase; ascorbic acid peroxidase +ec:1.11.1.12 phospholipid-hydroperoxide glutathione peroxidase; peroxidation-inhibiting protein; PHGPX; peroxidation-inhibiting protein:peroxidase,glutathione (phospholipid hydroperoxide-reducing); phospholipid hydroperoxide glutathione peroxidase; hydroperoxide glutathione peroxidase +ec:1.11.1.13 manganese peroxidase; peroxidase-M2; Mn-dependent (NADH-oxidizing) peroxidase +ec:1.11.1.14 lignin peroxidase; diarylpropane oxygenase; ligninase I; diarylpropane peroxidase; LiP; diarylpropane:oxygen,hydrogen-peroxide oxidoreductase (C-C-bond-cleaving); 1,2-bis(3,4-dimethoxyphenyl)propane-1,3-diol:hydrogen-peroxide oxidoreductase (incorrect); (3,4-dimethoxyphenyl)methanol:hydrogen-peroxide oxidoreductase +ec:1.11.1.15 Transferred to 1.11.1.24 and 1.11.1.25 and 1.11.1.26 and 1.11.1.27 and 1.11.1.28 and 1.11.1.29 +ec:1.11.1.16 versatile peroxidase; VP; hybrid peroxidase; polyvalent peroxidase; reactive-black-5:hydrogen-peroxide oxidoreductase +ec:1.11.1.17 glutathione amide-dependent peroxidase +ec:1.11.1.18 bromide peroxidase; bromoperoxidase; haloperoxidase (ambiguous); eosinophil peroxidase +ec:1.11.1.19 dye decolorizing peroxidase; DyP; DyP-type peroxidase +ec:1.11.1.20 prostamide/prostaglandin F2alpha synthase; prostamide/PGF synthase; prostamide F synthase; prostamide/prostaglandin F synthase; tPGF synthase +ec:1.11.1.21 catalase-peroxidase; katG (gene name) +ec:1.11.1.22 hydroperoxy fatty acid reductase; slr1171 (gene name); slr1992 (gene name); hydroperoxy fatty acid:NADPH oxidoreductase +ec:1.11.1.23 (S)-2-hydroxypropylphosphonic acid epoxidase; HPP epoxidase; HppE; 2-hydroxypropylphosphonic acid epoxidase; Fom4; (S)-2-hydroxypropylphosphonate epoxidase +ec:1.11.1.24 thioredoxin-dependent peroxiredoxin; thioredoxin peroxidase; bcp (gene name); tpx (gene name); PrxQ +ec:1.11.1.25 glutaredoxin-dependent peroxiredoxin; PRXIIB (gene name) +ec:1.11.1.26 NADH-dependent peroxiredoxin; ahpC (gene name); ahpF (gene name); alkyl hydroperoxide reductase +ec:1.11.1.27 glutathione-dependent peroxiredoxin; PRDX6 (gene name); prx3 (gene name) +ec:1.11.1.28 lipoyl-dependent peroxiredoxin; Ohr; ahpC (gene name); ahpD (gene name) +ec:1.11.1.29 mycoredoxin-dependent peroxiredoxin; ahpE (gene name) +ec:1.11.2.1 unspecific peroxygenase; aromatic peroxygenase; mushroom peroxygenase; haloperoxidase-peroxygenase; Agrocybe aegerita peroxidase +ec:1.11.2.2 myeloperoxidase; MPO; verdoperoxidase +ec:1.11.2.3 plant seed peroxygenase; plant peroxygenase; soybean peroxygenase +ec:1.11.2.4 fatty-acid peroxygenase; fatty acid hydroxylase (ambiguous); P450 peroxygenase; CYP152A1; P450BS; P450SPalpha +ec:1.11.2.5 3-methyl-L-tyrosine peroxygenase; SfmD; SacD; 3-methyltyrosine peroxidase; 3-methyl-L-tyrosine peroxidase +ec:1.11.2.6 L-tyrosine peroxygenase +ec:1.12.1.1 Transferred to 1.12.7.2 +ec:1.12.1.2 hydrogen dehydrogenase; H2:NAD+ oxidoreductase; NAD+-linked hydrogenase; bidirectional hydrogenase; hydrogenase +ec:1.12.1.3 hydrogen dehydrogenase (NADP+); NADP+-linked hydrogenase; NADP+-reducing hydrogenase; hydrogenase (ambiguous); hydrogenase I (ambiguous) +ec:1.12.1.4 hydrogenase (NAD+, ferredoxin); bifurcating [FeFe] hydrogenase +ec:1.12.1.5 hydrogen dehydrogenase [NAD(P)+]; hydrogenase II (ambiguous) +ec:1.12.2.1 cytochrome-c3 hydrogenase; H2:ferricytochrome c3 oxidoreductase; cytochrome c3 reductase; cytochrome hydrogenase; hydrogenase [ambiguous] +ec:1.12.5.1 hydrogen:quinone oxidoreductase; hydrogen-ubiquinone oxidoreductase; hydrogen:menaquinone oxidoreductase; membrane-bound hydrogenase; quinone-reactive Ni/Fe-hydrogenase +ec:1.12.7.1 Transferred to 1.12.7.2 +ec:1.12.7.2 ferredoxin hydrogenase; H2 oxidizing hydrogenase; H2 producing hydrogenase [ambiguous]; bidirectional hydrogenase; hydrogen-lyase [ambiguous]; hydrogenase (ferredoxin); hydrogenase I; hydrogenase II; hydrogenlyase [ambiguous]; uptake hydrogenase [ambiguous] +ec:1.12.98.1 coenzyme F420 hydrogenase; 8-hydroxy-5-deazaflavin-reducing hydrogenase; F420-reducing hydrogenase; coenzyme F420-dependent hydrogenase +ec:1.12.98.2 5,10-methenyltetrahydromethanopterin hydrogenase; H2-forming N5,N10-methylenetetrahydromethanopterin dehydrogenase; nonmetal hydrogenase; N5,N10-methenyltetrahydromethanopterin hydrogenase; hydrogen:N5,N10-methenyltetrahydromethanopterin oxidoreductase +ec:1.12.98.3 Methanosarcina-phenazine hydrogenase; methanophenazine hydrogenase; methylviologen-reducing hydrogenase +ec:1.12.98.4 sulfhydrogenase; sulfur reductase +ec:1.12.99.1 Transferred to 1.12.98.1 +ec:1.12.99.2 Deleted entry +ec:1.12.99.3 Transferred to 1.12.5.1 +ec:1.12.99.4 Transferred to 1.12.98.2 +ec:1.12.99.5 Deleted entry +ec:1.12.99.6 hydrogenase (acceptor); H2 producing hydrogenase (ambiguous); hydrogen-lyase (ambiguous); hydrogenlyase (ambiguous); uptake hydrogenase (ambiguous); hydrogen:(acceptor) oxidoreductase +ec:1.13.1.1 Transferred to 1.13.11.1 +ec:1.13.1.2 Transferred to 1.13.11.2 +ec:1.13.1.3 Transferred to 1.13.11.3 +ec:1.13.1.4 Transferred to 1.13.11.4 +ec:1.13.1.5 Transferred to 1.13.11.5 +ec:1.13.1.6 Transferred to 1.13.11.6 +ec:1.13.1.7 Deleted entry +ec:1.13.1.8 Transferred to 1.13.11.8 +ec:1.13.1.9 Transferred to 1.13.11.9 +ec:1.13.1.10 Transferred to 1.13.11.10 +ec:1.13.1.11 Transferred to 1.13.99.1 +ec:1.13.1.12 Transferred to 1.13.11.11 +ec:1.13.1.13 Transferred to 1.13.11.12 +ec:1.13.11.1 catechol 1,2-dioxygenase; catechol-oxygen 1,2-oxidoreductase; 1,2-pyrocatechase; catechase; catechol 1,2-oxygenase; catechol dioxygenase; pyrocatechase; pyrocatechol 1,2-dioxygenase; CD I; CD II +ec:1.13.11.2 catechol 2,3-dioxygenase; 2,3-pyrocatechase; catechol 2,3-oxygenase; catechol oxygenase; metapyrocatechase; pyrocatechol 2,3-dioxygenase; xylE (gene name); catechol:oxygen 2,3-oxidoreductase (decyclizing) +ec:1.13.11.3 protocatechuate 3,4-dioxygenase; protocatechuate oxygenase; protocatechuic acid oxidase; protocatechuic 3,4-dioxygenase; protocatechuic 3,4-oxygenase; protocatechuate:oxygen 3,4-oxidoreductase (decyclizing) +ec:1.13.11.4 gentisate 1,2-dioxygenase; gentisate oxygenase; 2,5-dihydroxybenzoate dioxygenase; gentisate dioxygenase; gentisic acid oxidase; gentisate:oxygen 1,2-oxidoreductase (decyclizing) +ec:1.13.11.5 homogentisate 1,2-dioxygenase; homogentisicase; homogentisate oxygenase; homogentisate dioxygenase; homogentisate oxidase; homogentisic acid oxidase; homogentisic acid oxygenase; homogentisic oxygenase; homogentisate:oxygen 1,2-oxidoreductase (decyclizing) +ec:1.13.11.6 3-hydroxyanthranilate 3,4-dioxygenase; 3-hydroxyanthranilate oxygenase; 3-hydroxyanthranilic acid oxygenase; 3-hydroxyanthranilic oxygenase; 3-hydroxyanthranilic acid oxidase; 3HAO; 3-hydroxyanthranilate:oxygen 3,4-oxidoreductase (decyclizing) +ec:1.13.11.7 Deleted entry +ec:1.13.11.8 protocatechuate 4,5-dioxygenase; protocatechuate 4,5-oxygenase; protocatechuic 4,5-dioxygenase; protocatechuic 4,5-oxygenase; protocatechuate:oxygen 4,5-oxidoreductase (decyclizing); protocatechuate:oxygen 4,5-oxidoreductase (ring-opening) +ec:1.13.11.9 2,5-dihydroxypyridine 5,6-dioxygenase; 2,5-dihydroxypyridine oxygenase; pyridine-2,5-diol dioxygenase; NicX +ec:1.13.11.10 7,8-dihydroxykynurenate 8,8a-dioxygenase; 7,8-dihydroxykynurenate oxygenase; 7,8-dihydroxykynurenate 8,8alpha-dioxygenase; 7,8-dihydroxykynurenate:oxygen 8,8a-oxidoreductase (decyclizing) +ec:1.13.11.11 tryptophan 2,3-dioxygenase; tryptophan pyrrolase (ambiguous); tryptophanase; tryptophan oxygenase; tryptamine 2,3-dioxygenase; tryptophan peroxidase; indoleamine 2,3-dioxygenase (ambiguous); indolamine 2,3-dioxygenase (ambiguous); L-tryptophan pyrrolase; TDO; L-tryptophan 2,3-dioxygenase; L-tryptophan:oxygen 2,3-oxidoreductase (decyclizing) +ec:1.13.11.12 linoleate 13S-lipoxygenase; 13-lipoxidase; carotene oxidase; 13-lipoperoxidase; fat oxidase; 13-lipoxydase; lionoleate:O2 13-oxidoreductase +ec:1.13.11.13 Deleted entry +ec:1.13.11.14 2,3-dihydroxybenzoate 3,4-dioxygenase; o-pyrocatechuate oxygenase; 2,3-dihydroxybenzoate 1,2-dioxygenase; 2,3-dihydroxybenzoic oxygenase; 2,3-dihydroxybenzoate oxygenase; 2,3-dihydroxybenzoate:oxygen 3,4-oxidoreductase (decyclizing) +ec:1.13.11.15 3,4-dihydroxyphenylacetate 2,3-dioxygenase; 3,4-dihydroxyphenylacetic acid 2,3-dioxygenase; HPC dioxygenase; homoprotocatechuate 2,3-dioxygenase; 3,4-dihydroxyphenylacetate:oxygen 2,3-oxidoreductase (decyclizing) +ec:1.13.11.16 3-carboxyethylcatechol 2,3-dioxygenase; 2,3-dihydroxy-beta-phenylpropionic dioxygenase; 2,3-dihydroxy-beta-phenylpropionate oxygenase; 3-(2,3-dihydroxyphenyl)propanoate:oxygen 1,2-oxidoreductase; 3-(2,3-dihydroxyphenyl)propanoate:oxygen 1,2-oxidoreductase (decyclizing) +ec:1.13.11.17 indole 2,3-dioxygenase; indole oxidase; indoleamine 2,3-dioxygenase (ambiguous); indole:O2 oxidoreductase; indole-oxygen 2,3-oxidoreductase (decyclizing); IDO (ambiguous); indole:oxygen 2,3-oxidoreductase (decyclizing) +ec:1.13.11.18 persulfide dioxygenase; sulfur oxygenase (incorrect); sulfur:oxygen oxidoreductase (incorrect); sulfur dioxygenase (incorrect) +ec:1.13.11.19 cysteamine dioxygenase; ADO (gene name); persulfurase; cysteamine oxygenase; cysteamine:oxygen oxidoreductase +ec:1.13.11.20 cysteine dioxygenase; cysteine oxidase +ec:1.13.11.21 Transferred to 1.14.99.36 +ec:1.13.11.22 caffeate 3,4-dioxygenase; 3,4-dihydroxy-trans-cinnamate:oxygen 3,4-oxidoreductase (decyclizing) +ec:1.13.11.23 2,3-dihydroxyindole 2,3-dioxygenase; 2,3-dihydroxyindole:oxygen 2,3-oxidoreductase (decyclizing) +ec:1.13.11.24 quercetin 2,3-dioxygenase; quercetinase; flavonol 2,4-oxygenase; quercetin:oxygen 2,3-oxidoreductase (decyclizing) +ec:1.13.11.25 3,4-dihydroxy-9,10-secoandrosta-1,3,5(10)-triene-9,17-dione 4,5-dioxygenase; steroid 4,5-dioxygenase; 3-alkylcatechol 2,3-dioxygenase; 3,4-dihydroxy-9,10-secoandrosta-1,3,5(10)-triene-9,17-dione:oxygen 4,5-oxidoreductase (decyclizing) +ec:1.13.11.26 peptide-tryptophan 2,3-dioxygenase; pyrrolooxygenase; peptidyltryptophan 2,3-dioxygenase; tryptophan pyrrolooxygenase; [protein]-L-tryptophan:oxygen 2,3-oxidoreductase (decyclizing) +ec:1.13.11.27 4-hydroxyphenylpyruvate dioxygenase; p-hydroxyphenylpyruvic hydroxylase; p-hydroxyphenylpyruvate hydroxylase; p-hydroxyphenylpyruvate oxidase; p-hydroxyphenylpyruvic oxidase; p-hydroxyphenylpyruvate dioxygenase; p-hydroxyphenylpyruvic acid hydroxylase; 4-hydroxyphenylpyruvic acid dioxygenase +ec:1.13.11.28 2,3-dihydroxybenzoate 2,3-dioxygenase; 2,3-dihydroxybenzoate 2,3-oxygenase; 2,3-dihydroxybenzoate:oxygen 2,3-oxidoreductase (decyclizing) +ec:1.13.11.29 stizolobate synthase +ec:1.13.11.30 stizolobinate synthase +ec:1.13.11.31 arachidonate 12-lipoxygenase; Delta12-lipoxygenase; 12-lipoxygenase; 12Delta-lipoxygenase; C-12 lipoxygenase; 12S-lipoxygenase; leukotriene A4 synthase; LTA4 synthase +ec:1.13.11.32 Transferred to 1.13.12.16 +ec:1.13.11.33 arachidonate 15-lipoxygenase; 15-lipoxygenase; linoleic acid omega6-lipoxygenase; omega6 lipoxygenase +ec:1.13.11.34 arachidonate 5-lipoxygenase; leukotriene-A4 synthase; Delta5-lipoxygenase; 5Delta-lipoxygenase; arachidonic 5-lipoxygenase; arachidonic acid 5-lipoxygenase; C-5-lipoxygenase; LTA synthase; leukotriene A4 synthase +ec:1.13.11.35 pyrogallol 1,2-oxygenase; pyrogallol 1,2-dioxygenase; 1,2,3-trihydroxybenzene:oxygen 1,2-oxidoreductase (decyclizing) +ec:1.13.11.36 chloridazon-catechol dioxygenase; 5-amino-4-chloro-2-(2,3-dihydroxyphenyl)-3(2H)-pyridazinone 1,2-oxidoreductase (decyclizing) +ec:1.13.11.37 hydroxyquinol 1,2-dioxygenase; hydroxyquinol dioxygenase; benzene-1,2,4-triol:oxygen 1,2-oxidoreductase (decyclizing); benzene-1,2,4-triol:oxygen 1,2-oxidoreductase (ring-opening) +ec:1.13.11.38 1-hydroxy-2-naphthoate 1,2-dioxygenase; 1-hydroxy-2-naphthoate dioxygenase; 1-hydroxy-2-naphthoate-degrading enzyme; 1-hydroxy-2-naphthoic acid dioxygenase; 1-hydroxy-2-naphthoate:oxygen 1,2-oxidoreductase (decyclizing) +ec:1.13.11.39 biphenyl-2,3-diol 1,2-dioxygenase; 2,3-dihydroxybiphenyl dioxygenase; biphenyl-2,3-diol dioxygenase; bphC (gene name); biphenyl-2,3-diol:oxygen 1,2-oxidoreductase (decyclizing) +ec:1.13.11.40 arachidonate 8-lipoxygenase; 8-lipoxygenase; 8(R)-lipoxygenase +ec:1.13.11.41 2,4'-dihydroxyacetophenone dioxygenase; (4-hydroxybenzoyl)methanol oxygenase +ec:1.13.11.42 Deleted entry +ec:1.13.11.43 lignostilbene alphabeta-dioxygenase +ec:1.13.11.44 Deleted entry +ec:1.13.11.45 linoleate 11-lipoxygenase; linoleate dioxygenase; manganese lipoxygenase +ec:1.13.11.46 4-hydroxymandelate synthase; 4-hydroxyphenylpyruvate dioxygenase II +ec:1.13.11.47 3-hydroxy-4-oxoquinoline 2,4-dioxygenase; (1H)-3-hydroxy-4-oxoquinoline 2,4-dioxygenase; 3-hydroxy-4-oxo-1,4-dihydroquinoline 2,4-dioxygenase; 3-hydroxy-4(1H)-one, 2,4-dioxygenase; quinoline-3,4-diol 2,4-dioxygenase +ec:1.13.11.48 3-hydroxy-2-methylquinolin-4-one 2,4-dioxygenase; (1H)-3-hydroxy-4-oxoquinaldine 2,4-dioxygenase +ec:1.13.11.49 chlorite O2-lyase +ec:1.13.11.50 acetylacetone-cleaving enzyme; Dke1; acetylacetone dioxygenase; diketone cleaving dioxygenase; diketone cleaving enzyme +ec:1.13.11.51 9-cis-epoxycarotenoid dioxygenase; nine-cis-epoxycarotenoid dioxygenase; NCED; AtNCED3; PvNCED1; VP14 +ec:1.13.11.52 indoleamine 2,3-dioxygenase; IDO (ambiguous); tryptophan pyrrolase (ambiguous); D-tryptophan:oxygen 2,3-oxidoreductase (decyclizing) +ec:1.13.11.53 acireductone dioxygenase (Ni2+-requiring); ARD; 2-hydroxy-3-keto-5-thiomethylpent-1-ene dioxygenase (ambiguous); acireductone dioxygenase (ambiguous); E-2; 1,2-dihydroxy-5-(methylthio)pent-1-en-3-one:oxygen oxidoreductase (formate- and CO-forming) +ec:1.13.11.54 acireductone dioxygenase [iron(II)-requiring]; ARD'; 2-hydroxy-3-keto-5-thiomethylpent-1-ene dioxygenase (ambiguous); acireductone dioxygenase (ambiguous); E-2'; E-3 dioxygenase; 1,2-dihydroxy-5-(methylthio)pent-1-en-3-one:oxygen oxidoreductase (formate-forming) +ec:1.13.11.55 sulfur oxygenase/reductase; SOR; sulfur oxygenase; sulfur oxygenase reductase +ec:1.13.11.56 1,2-dihydroxynaphthalene dioxygenase; 1,2-DHN dioxygenase; DHNDO; 1,2-dihydroxynaphthalene oxygenase; 1,2-dihydroxynaphthalene:oxygen oxidoreductase +ec:1.13.11.57 gallate dioxygenase; GalA; gallate:oxygen oxidoreductase +ec:1.13.11.58 linoleate 9S-lipoxygenase; 9-lipoxygenase; 9S-lipoxygenase; linoleate 9-lipoxygenase; LOX1 (gene name); 9S-LOX +ec:1.13.11.59 torulene dioxygenase; CAO-2; CarT +ec:1.13.11.60 linoleate 8R-lipoxygenase; linoleic acid 8R-dioxygenase; 5,8-LDS (bifunctional enzyme); 7,8-LDS (bifunctional enzyme); 5,8-linoleate diol synthase (bifunctional enzyme); 7,8-linoleate diol synthase (bifunctional enzyme); PpoA +ec:1.13.11.61 linolenate 9R-lipoxygenase; NspLOX; (9R)-LOX; linoleate 9R-dioxygenase +ec:1.13.11.62 linoleate 10R-lipoxygenase; 10R-DOX; (10R)-dioxygenase; 10R-dioxygenase +ec:1.13.11.63 beta-carotene 15,15'-dioxygenase; blh (gene name); BCO1 (gene name); BCDO (gene name); carotene dioxygenase; carotene 15,15'-dioxygenase; BCMO1 (misleading); beta-carotene 15,15'-monooxygenase (incorrect) +ec:1.13.11.64 5-nitrosalicylate dioxygenase; naaB (gene name); 5-nitrosalicylate:oxygen 1,2-oxidoreductase (decyclizing) +ec:1.13.11.65 carotenoid isomerooxygenase; ninaB (gene name) +ec:1.13.11.66 hydroquinone 1,2-dioxygenase; hydroquinone dioxygenase; benzene-1,4-diol:oxygen 1,2-oxidoreductase (decyclizing) +ec:1.13.11.67 8'-apo-beta-carotenoid 14',13'-cleaving dioxygenase; 8'-apo-beta-carotenol:O2 oxidoreductase (14',13'-cleaving) +ec:1.13.11.68 9-cis-beta-carotene 9',10'-cleaving dioxygenase; CCD7 (gene name); MAX3 (gene name); NCED7 (gene name) +ec:1.13.11.69 carlactone synthase; CCD8 (gene name); MAX4 (gene name); NCED8 (gene name) +ec:1.13.11.70 all-trans-10'-apo-beta-carotenal 13,14-cleaving dioxygenase; CCD8 (gene name); MAX4 (gene name); NCED8 (gene name); all-trans-10'-apo-beta-carotenal:O2 oxidoreductase (13,14-cleaving) +ec:1.13.11.71 carotenoid-9',10'-cleaving dioxygenase; BCO2 (gene name); beta-carotene 9',10'-monooxygenase (misleading); all-trans-beta-carotene:O2 oxidoreductase (9',10'-cleaving) +ec:1.13.11.72 2-hydroxyethylphosphonate dioxygenase; HEPD; phpD (gene name); 2-hydroxyethylphosphonate:O2 1,2-oxidoreductase (hydroxymethylphosphonate forming) +ec:1.13.11.73 methylphosphonate synthase; mpnS (gene name); 2-hydroxyethylphosphonate:O2 1,2-oxidoreductase (methylphosphonate forming) +ec:1.13.11.74 2-aminophenol 1,6-dioxygenase; amnA (gene name); amnB (gene name); 2-aminophenol:oxygen 1,6-oxidoreductase (decyclizing) +ec:1.13.11.75 all-trans-8'-apo-beta-carotenal 15,15'-oxygenase; Diox1; ACO; 8'-apo-beta-carotenal 15,15'-oxygenase +ec:1.13.11.76 2-amino-5-chlorophenol 1,6-dioxygenase; cnbC (gene name); 2-amino-5-chlorophenol:oxygen 1,6-oxidoreductase (decyclizing) +ec:1.13.11.77 oleate 10S-lipoxygenase; 10S-DOX; (10S)-dioxygenase; 10S-dioxygenase +ec:1.13.11.78 2-amino-1-hydroxyethylphosphonate dioxygenase (glycine-forming); phnZ (gene name) +ec:1.13.11.79 aerobic 5,6-dimethylbenzimidazole synthase; BluB; flavin destructase +ec:1.13.11.80 (3,5-dihydroxyphenyl)acetyl-CoA 1,2-dioxygenase; DpgC +ec:1.13.11.81 7,8-dihydroneopterin oxygenase +ec:1.13.11.82 8'-apo-carotenoid 13,14-cleaving dioxygenase; NACOX1 (gene name) +ec:1.13.11.83 4-hydroxy-3-prenylphenylpyruvate oxygenase; CloR +ec:1.13.11.84 crocetin dialdehyde synthase; CCD2; zeaxanthin 7,8-dioxygenase +ec:1.13.11.85 exo-cleaving rubber dioxygenase; roxA (gene name); heme-dependent rubber oxygenase (ambiguous) +ec:1.13.11.86 5-aminosalicylate 1,2-dioxygenase; mabB (gene name) +ec:1.13.11.87 endo-cleaving rubber dioxygenase; latex clearing protein; lcp (gene name); roxB (gene name) +ec:1.13.11.88 isoeugenol monooxygenase; iem (gene name) +ec:1.13.11.89 (hydroxymethyl)phosphonate dioxygenase; phnZ1 (gene name) +ec:1.13.11.90 [1-hydroxy-2-(trimethylamino)ethyl]phosphonate dioxygenase (glycine-betaine-forming); tmpB (gene name) +ec:1.13.11.91 3-mercaptopropionate dioxygenase; mdo (gene name); 3-mercaptopropionic acid dioxygenase; 3-sulfanylpropanoate dioxygenase +ec:1.13.11.92 fatty acid alpha-dioxygenase; DOX1 (gene name) +ec:1.13.11.93 2-oxoadipate dioxygenase/decarboxylase; ydcJ (gene name) +ec:1.13.12.1 arginine 2-monooxygenase; arginine monooxygenase; arginine decarboxylase (incorrect); arginine oxygenase (decarboxylating); arginine decarboxy-oxidase +ec:1.13.12.2 lysine 2-monooxygenase; lysine oxygenase; lysine monooxygenase; L-lysine-2-monooxygenase +ec:1.13.12.3 tryptophan 2-monooxygenase; tms1 (gene name); iaaM (gene name) +ec:1.13.12.4 lactate 2-monooxygenase; lactate oxidative decarboxylase; lactate oxidase; lactic oxygenase; lactate oxygenase; lactic oxidase; L-lactate monooxygenase; lactate monooxygenase; L-lactate-2-monooxygenase +ec:1.13.12.5 Renilla-type luciferase; Renilla-luciferin 2-monooxygenase; luciferase (Renilla luciferin); Renilla-luciferin:oxygen 2-oxidoreductase (decarboxylating) +ec:1.13.12.6 Cypridina-luciferin 2-monooxygenase; Cypridina-type luciferase; luciferase (Cypridina luciferin); Cypridina luciferase +ec:1.13.12.7 firefly luciferase; Photinus-luciferin 4-monooxygenase (ATP-hydrolysing); luciferase (firefly luciferin); Photinus luciferin 4-monooxygenase (adenosine triphosphate-hydrolyzing); firefly luciferin luciferase; Photinus pyralis luciferase; Photinus-luciferin:oxygen 4-oxidoreductase (decarboxylating, ATP-hydrolysing) +ec:1.13.12.8 Watasenia-luciferin 2-monooxygenase; Watasenia-type luciferase +ec:1.13.12.9 phenylalanine 2-monooxygenase; L-phenylalanine oxidase (deaminating and decarboxylating); phenylalanine (deaminating, decarboxylating)oxidase +ec:1.13.12.10 Deleted entry +ec:1.13.12.11 Deleted entry +ec:1.13.12.12 Transferred to 1.13.11.67 +ec:1.13.12.13 Oplophorus-luciferin 2-monooxygenase; Oplophorus luciferase +ec:1.13.12.14 Transferred to 1.14.13.122 +ec:1.13.12.15 3,4-dihydroxyphenylalanine oxidative deaminase; 3,4-dihydroxy-L-phenylalanine: oxidative deaminase; oxidative deaminase; DOPA oxidative deaminase; DOPAODA +ec:1.13.12.16 nitronate monooxygenase; NMO; 2-nitropropane dioxygenase (incorrect) +ec:1.13.12.17 dichloroarcyriaflavin A synthase +ec:1.13.12.18 dinoflagellate luciferase; (dinoflagellate luciferin) luciferase; Gonyaulax luciferase +ec:1.13.12.19 2-oxoglutarate dioxygenase (ethene-forming); ethylene-forming enzyme; EFE; 2-oxoglutarate dioxygenase (ethylene-forming); 2-oxoglutarate:oxygen oxidoreductase (decarboxylating, ethylene-forming) +ec:1.13.12.20 noranthrone monooxygenase; norsolorinate anthrone oxidase +ec:1.13.12.21 tetracenomycin-F1 monooxygenase; tcmH (gene name) +ec:1.13.12.22 deoxynogalonate monooxygenase; SnoaB (gene name); 12-deoxynogalonic acid oxidoreductase; [4,5-dihydroxy-10-oxo-3-(3-oxobutanoyl)-9,10-dihydroanthracen-2-yl]acetate oxidase; [4,5-dihydroxy-10-oxo-3-(3-oxobutanoyl)-9,10-dihydroanthracen-2-yl]acetate monooxygenase; deoxynogalonate oxidoreductase +ec:1.13.12.23 4-hydroxy-3-prenylbenzoate synthase; CloR; novR (gene name) +ec:1.13.12.24 calcium-regulated photoprotein; Ca2+-regulated photoprotein; calcium-activated photoprotein; aequorin; obelin; halistaurin; mitrocomin; phialidin; clytin; mnemiopsin; berovin +ec:1.13.99.1 inositol oxygenase; meso-inositol oxygenase; myo-inositol oxygenase; MOO +ec:1.13.99.2 Transferred to 1.14.12.10 +ec:1.13.99.3 tryptophan 2'-dioxygenase; indole-3-alkane alpha-hydroxylase; tryptophan side-chain alpha,beta-oxidase; tryptophan side chain oxidase II; tryptophan side-chain oxidase; TSO; indolyl-3-alkan alpha-hydroxylase; tryptophan side chain oxidase type I; TSO I ; TSO II; tryptophan side chain oxidase +ec:1.13.99.4 Transferred to 1.14.12.9 +ec:1.13.99.5 Transferred to 1.13.11.47 +ec:1.14.1.1 Transferred to 1.14.14.1 +ec:1.14.1.2 Transferred to 1.14.13.9 +ec:1.14.1.3 Deleted entry +ec:1.14.1.4 Transferred to 1.14.99.2 +ec:1.14.1.5 Transferred to 1.14.13.5 +ec:1.14.1.6 Transferred to 1.14.15.4 +ec:1.14.1.7 Transferred to 1.14.99.9 +ec:1.14.1.8 Transferred to 1.14.99.10 +ec:1.14.1.9 Deleted entry +ec:1.14.1.10 Transferred to 1.14.99.11 +ec:1.14.1.11 Deleted entry +ec:1.14.2.1 Transferred to 1.14.17.1 +ec:1.14.2.2 Transferred to 1.13.11.27 +ec:1.14.3.1 Transferred to 1.14.16.1 +ec:1.14.11.1 gamma-butyrobetaine dioxygenase; alpha-butyrobetaine hydroxylase; gamma-butyrobetaine hydroxylase; butyrobetaine hydroxylase +ec:1.14.11.2 procollagen-proline 4-dioxygenase; P4HA (gene name); P4HB (gene name); protocollagen hydroxylase; proline hydroxylase; proline,2-oxoglutarate 4-dioxygenase; collagen proline hydroxylase; hydroxylase, collagen proline; peptidyl proline hydroxylase; proline protocollagen hydroxylase; proline, 2-oxoglutarate dioxygenase; prolyl hydroxylase; prolylprotocollagen dioxygenase; prolylprotocollagen hydroxylase; protocollagen proline 4-hydroxylase; protocollagen proline dioxygenase; protocollagen proline hydroxylase; protocollagen prolyl hydroxylase; prolyl 4-hydroxylase; prolyl-glycyl-peptide, 2-oxoglutarate:oxygen oxidoreductase, 4-hydroxylating; procollagen-proline 4-dioxygenase (ambiguous) +ec:1.14.11.3 pyrimidine-deoxynucleoside 2'-dioxygenase; deoxyuridine 2'-dioxygenase; deoxyuridine 2'-hydroxylase; pyrimidine deoxyribonucleoside 2'-hydroxylase; thymidine 2'-dioxygenase; thymidine 2'-hydroxylase; thymidine 2-oxoglutarate dioxygenase; thymidine dioxygenase +ec:1.14.11.4 procollagen-lysine 5-dioxygenase; lysine hydroxylase; lysine,2-oxoglutarate 5-dioxygenase; protocollagen lysine dioxygenase; collagen lysine hydroxylase; lysine-2-oxoglutarate dioxygenase; lysyl hydroxylase; lysylprotocollagen dioxygenase; protocollagen lysyl hydroxylase; peptidyl-lysine, 2-oxoglutarate: oxygen oxidoreductase; peptidyllysine, 2-oxoglutarate:oxygen 5-oxidoreductase; protocollagen lysine hydroxylase; procollagen-L-lysine,2-oxoglutarate:oxygen oxidoreductase (5-hydroxylating); L-lysine-[procollagen],2-oxoglutarate:oxygen oxidoreductase (5-hydroxylating) +ec:1.14.11.5 Deleted entry +ec:1.14.11.6 thymine dioxygenase; thymine 7-hydroxylase; 5-hydroxy-methyluracil dioxygenase; 5-hydroxymethyluracil oxygenase +ec:1.14.11.7 procollagen-proline 3-dioxygenase; proline,2-oxoglutarate 3-dioxygenase; prolyl 3-hydroxylase; protocollagen proline 3-hydroxylase; prolyl-4-hydroxyprolyl-glycyl-peptide,2-oxoglutarate:oxygen oxidoreductase, 3-hydroxylating +ec:1.14.11.8 trimethyllysine dioxygenase; trimethyllysine alpha-ketoglutarate dioxygenase; TML-alpha-ketoglutarate dioxygenase; TML hydroxylase; 6-N,6-N,6-N-trimethyl-L-lysine,2-oxoglutarate:oxygen oxidoreductase (3-hydroxylating) +ec:1.14.11.9 flavanone 3-dioxygenase; naringenin 3-hydroxylase; flavanone 3-hydroxylase; flavanone 3beta-hydroxylase; flavanone synthase I; (2S)-flavanone 3-hydroxylase; naringenin,2-oxoglutarate:oxygen oxidoreductase (3-hydroxylating); F3H; flavanone,2-oxoglutarate:oxygen oxidoreductase (3-hydroxylating) +ec:1.14.11.10 pyrimidine-deoxynucleoside 1'-dioxygenase; deoxyuridine-uridine 1'-dioxygenase +ec:1.14.11.11 hyoscyamine (6S)-dioxygenase; hyoscyamine 6beta-hydroxylase; hyoscyamine 6beta-dioxygenase; hyoscyamine 6-hydroxylase +ec:1.14.11.12 gibberellin-44 dioxygenase; oxygenase, gibberellin A44 oxidase; (gibberellin-44), 2-oxoglutarate:oxygen oxidoreductase +ec:1.14.11.13 gibberellin 2beta-dioxygenase; gibberellin 2beta-hydroxylase +ec:1.14.11.14 Transferred to 1.14.20.13 +ec:1.14.11.15 gibberellin 3beta-dioxygenase; gibberellin 3beta-hydroxylase; (gibberrellin-20),2-oxoglutarate: oxygen oxidoreductase (3beta-hydroxylating) +ec:1.14.11.16 peptide-aspartate beta-dioxygenase; aspartate beta-hydroxylase; aspartylpeptide beta-dioxygenase +ec:1.14.11.17 taurine dioxygenase; 2-aminoethanesulfonate dioxygenase; alpha-ketoglutarate-dependent taurine dioxygenase +ec:1.14.11.18 phytanoyl-CoA dioxygenase; phytanoyl-CoA hydroxylase +ec:1.14.11.19 Transferred to 1.14.20.4 +ec:1.14.11.20 deacetoxyvindoline 4-hydroxylase; desacetoxyvindoline 4-hydroxylase; desacetyoxyvindoline-17-hydroxylase; D17H; desacetoxyvindoline,2-oxoglutarate:oxygen oxidoreductase (4beta-hydroxylating) +ec:1.14.11.21 clavaminate synthase; clavaminate synthase 2; clavaminic acid synthase +ec:1.14.11.22 Transferred to 1.14.20.5 +ec:1.14.11.23 Transferred to 1.14.20.6 +ec:1.14.11.24 2'-deoxymugineic-acid 2'-dioxygenase; IDS3 +ec:1.14.11.25 mugineic-acid 3-dioxygenase; IDS2 +ec:1.14.11.26 deacetoxycephalosporin-C hydroxylase; deacetylcephalosporin C synthase; 3'-methylcephem hydroxylase; DACS; DAOC hydroxylase; deacetoxycephalosporin C hydroxylase +ec:1.14.11.27 [histone H3]-dimethyl-L-lysine36 demethylase; KDM2A (gene name); KDM2B (gene name); JHDM1A (gene name); JHDM1B (gene name); JmjC domain-containing histone demethylase 1A; H3-K36-specific demethylase (ambiguous); histone-lysine (H3-K36) demethylase (ambiguous); histone demethylase (ambiguous); protein-6-N,6-N-dimethyl-L-lysine,2-oxoglutarate:oxygen oxidoreductase; protein-N6,N6-dimethyl-L-lysine,2-oxoglutarate:oxygen oxidoreductase; [histone-H3]-lysine-36 demethylase +ec:1.14.11.28 proline 3-hydroxylase; P-3-H +ec:1.14.11.29 hypoxia-inducible factor-proline dioxygenase; HIF hydroxylase +ec:1.14.11.30 hypoxia-inducible factor-asparagine dioxygenase; HIF hydroxylase +ec:1.14.11.31 thebaine 6-O-demethylase; T6ODM +ec:1.14.11.32 codeine 3-O-demethylase; codeine O-demethylase; CODM +ec:1.14.11.33 DNA oxidative demethylase; alkylated DNA repair protein; alpha-ketoglutarate-dependent dioxygenase ABH1; alkB (gene name) +ec:1.14.11.34 Transferred to 1.14.20.7 +ec:1.14.11.35 1-deoxypentalenic acid 11beta-hydroxylase; ptlH (gene name); sav2991 (gene name); pntH (gene name) +ec:1.14.11.36 pentalenolactone F synthase; penD (gene name); pntD (gene name); ptlD (gene name) +ec:1.14.11.37 kanamycin B dioxygenase; kanJ (gene name) +ec:1.14.11.38 verruculogen synthase; fmtF (gene name); FmtOx1 +ec:1.14.11.39 L-asparagine hydroxylase; L-asparagine 3-hydroxylase; AsnO +ec:1.14.11.40 enduracididine beta-hydroxylase; MppO; L-enduracididine,2-oxoglutarate:O2 oxidoreductase (3-hydroxylating) +ec:1.14.11.41 L-arginine hydroxylase; VioC (ambiguous); L-arginine,2-oxoglutarate:O2 oxidoreductase (3-hydroxylating) +ec:1.14.11.42 tRNAPhe (7-(3-amino-3-carboxypropyl)wyosine37-C2)-hydroxylase; TYW5; tRNA yW-synthesizing enzyme 5 +ec:1.14.11.43 (S)-dichlorprop dioxygenase (2-oxoglutarate); SdpA; alpha-ketoglutarate-dependent (S)-dichlorprop dioxygenase; (S)-phenoxypropionate/alpha-ketoglutarate-dioxygenase; 2-oxoglutarate-dependent (S)-dichlorprop dioxygenase; (S)-mecoprop dioxygenase; 2-oxoglutarate-dependent (S)-mecoprop dioxygenase +ec:1.14.11.44 (R)-dichlorprop dioxygenase (2-oxoglutarate); RdpA; alpha-ketoglutarate-dependent (R)-dichlorprop dioxygenase; (R)-phenoxypropionate/alpha-ketoglutarate-dioxygenase; 2-oxoglutarate-dependent (R)-dichlorprop dioxygenase; (R)-mecoprop dioxygenase; 2-oxoglutarate-dependent (R)-mecoprop dioxygenase +ec:1.14.11.45 L-isoleucine 4-hydroxylase; ido (gene name) +ec:1.14.11.46 2-aminoethylphosphonate dioxygenase; phnY (gene name) +ec:1.14.11.47 [50S ribosomal protein L16]-arginine 3-hydroxylase; ycfD (gene name) +ec:1.14.11.48 xanthine dioxygenase; XanA; alpha-ketoglutarate-dependent xanthine hydroxylase +ec:1.14.11.49 uridine-5'-phosphate dioxygenase; lipL (gene name) +ec:1.14.11.50 Transferred to 1.14.20.8 +ec:1.14.11.51 DNA N6-methyladenine demethylase; ALKBH1 +ec:1.14.11.52 validamycin A dioxygenase; vldW (gene name) +ec:1.14.11.53 mRNA N6-methyladenine demethylase; ALKBH5; FTO +ec:1.14.11.54 mRNA N1-methyladenine demethylase; ALKBH3 +ec:1.14.11.55 ectoine hydroxylase; ectD (gene name); ectoine dioxygenase +ec:1.14.11.56 L-proline cis-4-hydroxylase +ec:1.14.11.57 L-proline trans-4-hydroxylase +ec:1.14.11.58 ornithine lipid ester-linked acyl 2-hydroxylase; olsC (gene name) +ec:1.14.11.59 2,4-dihydroxy-1,4-benzoxazin-3-one-glucoside dioxygenase; BX6 (gene name); DIBOA-Glc dioxygenase +ec:1.14.11.60 scopoletin 8-hydroxylase; S8H (gene name) +ec:1.14.11.61 feruloyl-CoA 6-hydroxylase +ec:1.14.11.62 trans-4-coumaroyl-CoA 2-hydroxylase; Diox4 (gene name); C2'H (gene name) +ec:1.14.11.63 peptidyl-lysine (3S)-dioxygenase; JMJD7 (gene name); Jumonji domain-containing protein 7; JmjC domain-containing protein 7 +ec:1.14.11.64 glutarate dioxygenase; csiD (gene name) +ec:1.14.11.65 [histone H3]-dimethyl-L-lysine9 demethylase; KDM3A (gene name); KDM3B (gene name); JMJD1A (gene name); JMJD1B (gene name); JHDM2A (gene name); JHDM2B (gene name); KDM7B (gene name); PHF8 (gene name); HR (gene name) +ec:1.14.11.66 [histone H3]-trimethyl-L-lysine9 demethylase; KDM4A (gene name); KDM4B (gene name); KDM4C (gene name); KDM4D (gene name); JHDM3A (gene name); JMJD2 (gene name); JMJD2A (gene name); GASC1 (gene name) +ec:1.14.11.67 [histone H3]-trimethyl-L-lysine4 demethylase; KDM5A (gene name); KDM5B (gene name); KDM5C (gene name); KDM5D (gene name); JARID1A (gene name) +ec:1.14.11.68 [histone H3]-trimethyl-L-lysine27 demethylase; KDM6A (gene name); KDM6C (gene name); UTX (gene name); UTY (gene name); JMJD3 (gene name) +ec:1.14.11.69 [histone H3]-trimethyl-L-lysine36 demethylase; KDM4A (gene name); KDM4B (gene name); RPH1 (gene name); JHDM3A (gene name); JHDM3B (gene name); JMJD2A (gene name); JMJD2B (gene name) +ec:1.14.11.70 7-deoxycylindrospermopsin hydroxylase; cyrI (gene name) +ec:1.14.11.71 methylphosphonate hydroxylase; phnY* (gene name) +ec:1.14.11.72 [2-(trimethylamino)ethyl]phosphonate dioxygenase; tmpA (gene name) +ec:1.14.11.73 [protein]-arginine 3-hydroxylase; JMJD5 (gene name) +ec:1.14.11.74 L-isoleucine 31-dioxygenase; hilA (gene name); L-isoleucine 4'-dioxygenase (incorrect) +ec:1.14.11.75 31-hydroxy-L-isoleucine 4-dioxygenase; hilB (gene name); 4'-hydroxy-L-isoleucine 4-dioxygenase (incorrect) +ec:1.14.11.76 L-glutamate 3(R)-hydroxylase; iboH (gene name) +ec:1.14.11.77 alkyl sulfatase; atsK (gene name); alpha-ketoglutarate-dependent sulfate ester dioxygenase; 2-oxoglutarate-dependent sulfate ester dioxygenase; type II alkyl sulfatase +ec:1.14.11.78 (R)-3-[(carboxymethyl)amino]fatty acid dioxygenase/decarboxylase; scoE (gene name); mmaE (gene name); Rv0097 (locus name) +ec:1.14.11.79 protein-L-histidine (3S)-3-hydroxylase; RIOX1 (gene name); RIOX2 (gene name); protein histidyl hydroxylase +ec:1.14.12.1 anthranilate 1,2-dioxygenase (deaminating, decarboxylating); anthranilate hydroxylase; anthranilic hydroxylase; anthranilic acid hydroxylase +ec:1.14.12.2 Transferred to 1.14.13.35 +ec:1.14.12.3 benzene 1,2-dioxygenase; benzene hydroxylase; benzene dioxygenase +ec:1.14.12.4 Transferred to 1.14.13.242 +ec:1.14.12.5 Transferred to 1.14.13.241 +ec:1.14.12.6 Transferred to 1.14.13.66 +ec:1.14.12.7 phthalate 4,5-dioxygenase; PDO ; phthalate dioxygenase +ec:1.14.12.8 4-sulfobenzoate 3,4-dioxygenase; 4-sulfobenzoate dioxygenase; 4-sulfobenzoate 3,4-dioxygenase system +ec:1.14.12.9 4-chlorophenylacetate 3,4-dioxygenase +ec:1.14.12.10 benzoate 1,2-dioxygenase; benzoate hydroxylase; benzoate hydroxylase; benzoic hydroxylase; benzoate dioxygenase; benzoate,NADH:oxygen oxidoreductase (1,2-hydroxylating, decarboxylating) [incorrect] +ec:1.14.12.11 toluene dioxygenase; toluene 2,3-dioxygenase +ec:1.14.12.12 naphthalene 1,2-dioxygenase; naphthalene dioxygenase; naphthalene oxygenase; NDO +ec:1.14.12.13 2-halobenzoate 1,2-dioxygenase; 2-chlorobenzoate 1,2-dioxygenase +ec:1.14.12.14 2-aminobenzenesulfonate 2,3-dioxygenase; 2-aminosulfobenzene 2,3-dioxygenase +ec:1.14.12.15 terephthalate 1,2-dioxygenase; benzene-1,4-dicarboxylate 1,2-dioxygenase; 1,4-dicarboxybenzoate 1,2-dioxygenase +ec:1.14.12.16 2-hydroxyquinoline 5,6-dioxygenase; 2-oxo-1,2-dihydroquinoline 5,6-dioxygenase; quinolin-2-ol 5,6-dioxygenase; quinolin-2(1H)-one 5,6-dioxygenase +ec:1.14.12.17 nitric oxide dioxygenase +ec:1.14.12.18 biphenyl 2,3-dioxygenase; biphenyl dioxygenase +ec:1.14.12.19 3-phenylpropanoate dioxygenase; HcaA1A2CD; Hca dioxygenase; 3-phenylpropionate dioxygenase +ec:1.14.12.20 Transferred to 1.14.15.17 +ec:1.14.12.21 Transferred to 1.14.13.208 +ec:1.14.12.22 carbazole 1,9a-dioxygenase; CARDO +ec:1.14.12.23 nitroarene dioxygenase; cnbA (gene name) +ec:1.14.12.24 2,4-dinitrotoluene dioxygenase; dntA (gene name) +ec:1.14.12.25 p-cumate 2,3-dioxygenase +ec:1.14.12.26 chlorobenzene dioxygenase; TecA +ec:1.14.13.1 salicylate 1-monooxygenase; salicylate hydroxylase; salicylate 1-hydroxylase; salicylate monooxygenase; salicylate hydroxylase (decarboxylating) +ec:1.14.13.2 4-hydroxybenzoate 3-monooxygenase; p-hydroxybenzoate hydrolyase; p-hydroxybenzoate hydroxylase; 4-hydroxybenzoate 3-hydroxylase; 4-hydroxybenzoate monooxygenase; 4-hydroxybenzoic hydroxylase; p-hydroxybenzoate-3-hydroxylase; p-hydroxybenzoic acid hydrolase; p-hydroxybenzoic acid hydroxylase; p-hydroxybenzoic hydroxylase +ec:1.14.13.3 Transferred to 1.14.14.9 +ec:1.14.13.4 melilotate 3-monooxygenase; 2-hydroxyphenylpropionate hydroxylase; melilotate hydroxylase; 2-hydroxyphenylpropionic hydroxylase; melilotic hydroxylase +ec:1.14.13.5 imidazoleacetate 4-monooxygenase; imidazoleacetic hydroxylase; imidazoleacetate hydroxylase; imidazoleacetic monooxygenase +ec:1.14.13.6 orcinol 2-monooxygenase; orcinol hydroxylase +ec:1.14.13.7 phenol 2-monooxygenase (NADPH); phenol hydroxylase; phenol o-hydroxylase +ec:1.14.13.8 flavin-containing monooxygenase; dimethylaniline oxidase; dimethylaniline N-oxidase; FAD-containing monooxygenase; N,N-dimethylaniline monooxygenase; DMA oxidase; flavin mixed function oxidase; Ziegler's enzyme; mixed-function amine oxidase; FMO; FMO-I; FMO-II; FMO1; FMO2; FMO3; FMO4; FMO5; flavin monooxygenase; methylphenyltetrahydropyridine N-monooxygenase; 1-methyl-4-phenyl-1,2,3,6-tetrahydropyridine:oxygen N-oxidoreductase; dimethylaniline monooxygenase (N-oxide-forming) +ec:1.14.13.9 kynurenine 3-monooxygenase; kynurenine 3-hydroxylase; kynurenine hydroxylase; L-kynurenine-3-hydroxylase +ec:1.14.13.10 2,6-dihydroxypyridine 3-monooxygenase; 2,6-dihydroxypyridine oxidase +ec:1.14.13.11 Transferred to 1.14.14.91 +ec:1.14.13.12 Transferred to 1.14.14.92 +ec:1.14.13.13 Transferred to 1.14.15.18 +ec:1.14.13.14 trans-cinnamate 2-monooxygenase; cinnamic acid 2-hydroxylase; cinnamate 2-monooxygenase; cinnamic 2-hydroxylase; cinnamate 2-hydroxylase; trans-cinnamic acid 2-hydroxylase +ec:1.14.13.15 Transferred to 1.14.15.15 +ec:1.14.13.16 cyclopentanone monooxygenase; cyclopentanone oxygenase +ec:1.14.13.17 Transferred to 1.14.14.23 +ec:1.14.13.18 4-hydroxyphenylacetate 1-monooxygenase; 4-hydroxyphenylacetate 1-hydroxylase; 4-hydroxyphenylacetic 1-hydroxylase; 4-HPA 1-hydroxylase +ec:1.14.13.19 taxifolin 8-monooxygenase; taxifolin hydroxylase +ec:1.14.13.20 2,4-dichlorophenol 6-monooxygenase; 2,4-dichlorophenol hydroxylase; 2,4-dichlorophenol monooxygenase +ec:1.14.13.21 Transferred to 1.14.14.82 +ec:1.14.13.22 cyclohexanone monooxygenase; cyclohexanone 1,2-monooxygenase; cyclohexanone oxygenase; cyclohexanone:NADPH:oxygen oxidoreductase (6-hydroxylating, 1,2-lactonizing) +ec:1.14.13.23 3-hydroxybenzoate 4-monooxygenase; 3-hydroxybenzoate 4-hydroxylase +ec:1.14.13.24 3-hydroxybenzoate 6-monooxygenase; 3-hydroxybenzoate 6-hydroxylase; m-hydroxybenzoate 6-hydroxylase; 3-hydroxybenzoic acid-6-hydroxylase +ec:1.14.13.25 methane monooxygenase (soluble); methane hydroxylase +ec:1.14.13.26 Transferred to 1.14.18.4 +ec:1.14.13.27 4-aminobenzoate 1-monooxygenase; 4-aminobenzoate hydroxylase; 4-aminobenzoate monooxygenase +ec:1.14.13.28 Transferred to 1.14.14.93 +ec:1.14.13.29 4-nitrophenol 2-monooxygenase; 4-nitrophenol hydroxylase; 4-nitrophenol-2-hydroxylase +ec:1.14.13.30 Transferred to 1.14.14.94 +ec:1.14.13.31 2-nitrophenol 2-monooxygenase; 2-nitrophenol oxygenase; nitrophenol oxygenase +ec:1.14.13.32 albendazole monooxygenase; albendazole oxidase (misleading); albendazole sulfoxidase (ambiguous); FMO3 (gene name); albendazole monooxygenase (flavin-containing) +ec:1.14.13.33 4-hydroxybenzoate 3-monooxygenase [NAD(P)H]; 4-hydroxybenzoate 3-monooxygenase (reduced nicotinamide adenine dinucleotide (phosphate)); 4-hydroxybenzoate-3-hydroxylase; 4-hydroxybenzoate 3-hydroxylase +ec:1.14.13.34 leukotriene-E4 20-monooxygenase; leukotriene-E4 omega-hydroxylase +ec:1.14.13.35 anthranilate 3-monooxygenase (deaminating); anthranilate hydroxylase; anthranilate 2,3-dioxygenase (deaminating); anthranilate hydroxylase (deaminating); anthranilic hydroxylase; anthranilate 2,3-hydroxylase (deaminating) +ec:1.14.13.36 Transferred to 1.14.14.96 +ec:1.14.13.37 Transferred to 1.14.14.97 +ec:1.14.13.38 anhydrotetracycline 6-monooxygenase; ATC oxygenase; anhydrotetracycline oxygenase; oxyS (gene name); anhydrotetracycline monooxygenase +ec:1.14.13.39 nitric-oxide synthase (NADPH); NOS (gene name); nitric oxide synthetase (ambiguous); endothelium-derived relaxation factor-forming enzyme; endothelium-derived relaxing factor synthase; NO synthase (ambiguous); NADPH-diaphorase (ambiguous) +ec:1.14.13.40 anthraniloyl-CoA monooxygenase; anthraniloyl coenzyme A reductase; 2-aminobenzoyl-CoA monooxygenase/reductase +ec:1.14.13.41 Transferred to 1.14.14.36 +ec:1.14.13.42 Deleted entry +ec:1.14.13.43 questin monooxygenase; questin oxygenase +ec:1.14.13.44 2-hydroxybiphenyl 3-monooxygenase +ec:1.14.13.45 Transferred to 1.14.18.2 +ec:1.14.13.46 (-)-menthol monooxygenase; l-menthol monooxygenase +ec:1.14.13.47 Transferred to 1.14.14.99 +ec:1.14.13.48 Transferred to 1.14.14.51 +ec:1.14.13.49 Transferred to 1.14.14.52 +ec:1.14.13.50 pentachlorophenol monooxygenase; pcpB (gene name); pentachlorophenol dechlorinase; pentachlorophenol dehalogenase; pentachlorophenol 4-monooxygenase; PCP hydroxylase; pentachlorophenol hydroxylase; PCB 4-monooxygenase; PCB4MO +ec:1.14.13.51 6-oxocineole dehydrogenase; 6-oxocineole oxygenase +ec:1.14.13.52 Transferred to 1.14.14.88 +ec:1.14.13.53 Transferred to 1.14.14.89 +ec:1.14.13.54 ketosteroid monooxygenase; steroid-ketone monooxygenase; progesterone, NADPH2:oxygen oxidoreductase (20-hydroxylating, ester-producing); 17alpha-hydroxyprogesterone, NADPH2:oxygen oxidoreductase (20-hydroxylating, side-chain cleaving); androstenedione, NADPH2:oxygen oxidoreductase (17-hydroxylating, lactonizing) +ec:1.14.13.55 Transferred to 1.14.14.98 +ec:1.14.13.56 Transferred to 1.14.14.100 +ec:1.14.13.57 Transferred to 1.14.14.101 +ec:1.14.13.58 benzoyl-CoA 3-monooxygenase; benzoyl-CoA 3-hydroxylase +ec:1.14.13.59 L-lysine N6-monooxygenase (NADPH); lysine N6-hydroxylase; L-lysine 6-monooxygenase (NADPH) (ambiguous) +ec:1.14.13.60 Transferred to 1.14.13.100 +ec:1.14.13.61 2-hydroxyquinoline 8-monooxygenase; 2-oxo-1,2-dihydroquinoline 8-monooxygenase +ec:1.14.13.62 4-hydroxyquinoline 3-monooxygenase; quinolin-4(1H)-one 3-monooxygenase +ec:1.14.13.63 3-hydroxyphenylacetate 6-hydroxylase; 3-hydroxyphenylacetate 6-monooxygenase +ec:1.14.13.64 4-hydroxybenzoate 1-hydroxylase; 4-hydroxybenzoate 1-monooxygenase +ec:1.14.13.65 Deleted entry +ec:1.14.13.66 2-hydroxycyclohexanone 2-monooxygenase +ec:1.14.13.67 Transferred to 1.14.14.55 +ec:1.14.13.68 Transferred to 1.14.14.37 +ec:1.14.13.69 alkene monooxygenase; alkene epoxygenase; etnABCD (gene names); amoABCDE (gene names) +ec:1.14.13.70 Transferred to 1.14.14.154 +ec:1.14.13.71 Transferred to 1.14.14.102 +ec:1.14.13.72 Transferred to 1.14.18.9 +ec:1.14.13.73 Transferred to 1.14.14.103 +ec:1.14.13.74 Transferred to 1.14.14.85 +ec:1.14.13.75 Transferred to 1.14.14.104 +ec:1.14.13.76 Transferred to 1.14.14.105 +ec:1.14.13.77 Transferred to 1.14.14.106 +ec:1.14.13.78 Transferred to 1.14.14.86 +ec:1.14.13.79 Transferred to 1.14.14.107 +ec:1.14.13.80 Transferred to 1.14.14.53 +ec:1.14.13.81 magnesium-protoporphyrin IX monomethyl ester (oxidative) cyclase; Mg-protoporphyrin IX monomethyl ester (oxidative) cyclase +ec:1.14.13.82 vanillate monooxygenase; 4-hydroxy-3-methoxybenzoate demethylase; vanillate demethylase +ec:1.14.13.83 precorrin-3B synthase; precorrin-3X synthase; CobG +ec:1.14.13.84 4-hydroxyacetophenone monooxygenase; HAPMO +ec:1.14.13.85 Transferred to 1.14.14.135 +ec:1.14.13.86 Deleted entry +ec:1.14.13.87 Transferred to 1.14.14.140 +ec:1.14.13.88 Transferred to 1.14.14.81 +ec:1.14.13.89 Transferred to 1.14.14.90 +ec:1.14.13.90 Transferred to 1.14.15.21 +ec:1.14.13.91 Transferred to 1.14.14.136 +ec:1.14.13.92 phenylacetone monooxygenase; PAMO +ec:1.14.13.93 Transferred to 1.14.14.137 +ec:1.14.13.94 Transferred to 1.14.14.138 +ec:1.14.13.95 Transferred to 1.14.14.139 +ec:1.14.13.96 Transferred to 1.14.14.139 +ec:1.14.13.97 Transferred to 1.14.14.57 +ec:1.14.13.98 Transferred to 1.14.14.25 +ec:1.14.13.99 Transferred to 1.14.14.26 +ec:1.14.13.100 Transferred to 1.14.14.29 +ec:1.14.13.101 senecionine N-oxygenase; senecionine monooxygenase (N-oxide-forming); SNO +ec:1.14.13.102 Transferred to 1.14.14.141 +ec:1.14.13.103 Transferred to 1.14.14.142 +ec:1.14.13.104 Transferred to 1.14.14.143 +ec:1.14.13.105 monocyclic monoterpene ketone monooxygenase; 1-hydroxy-2-oxolimonene 1,2-monooxygenase; dihydrocarvone 1,2-monooxygenase; MMKMO +ec:1.14.13.106 Transferred to 1.14.15.39 +ec:1.14.13.107 limonene 1,2-monooxygenase +ec:1.14.13.108 Transferred to 1.14.14.144 +ec:1.14.13.109 Transferred to 1.14.14.145 +ec:1.14.13.110 Transferred to 1.14.14.146 +ec:1.14.13.111 methanesulfonate monooxygenase (NADH); mesylate monooxygenase; mesylate,reduced-FMN:oxygen oxidoreductase; MsmABC; methanesulfonic acid monooxygenase; MSA monooxygenase; MSAMO +ec:1.14.13.112 Transferred to 1.14.14.147 +ec:1.14.13.113 FAD-dependent urate hydroxylase; HpxO enzyme; FAD-dependent urate oxidase; urate hydroxylase +ec:1.14.13.114 6-hydroxynicotinate 3-monooxygenase; NicC; 6HNA monooxygenase; HNA-3-monooxygenase +ec:1.14.13.115 Transferred to 1.14.14.148 +ec:1.14.13.116 Transferred to 1.14.14.174 +ec:1.14.13.117 Transferred to 1.14.14.39 +ec:1.14.13.118 Transferred to 1.14.14.38 +ec:1.14.13.119 Transferred to 1.14.14.149 +ec:1.14.13.120 Transferred to 1.14.14.150 +ec:1.14.13.121 Transferred to 1.14.14.151 +ec:1.14.13.122 chlorophyllide-a oxygenase; chlorophyllide a oxygenase; chlorophyll-b synthase; CAO +ec:1.14.13.123 Transferred to 1.14.14.95 +ec:1.14.13.124 Transferred to 1.14.14.40 +ec:1.14.13.125 Transferred to 1.14.14.156 +ec:1.14.13.126 Transferred to 1.14.15.16 +ec:1.14.13.127 3-(3-hydroxyphenyl)propanoate hydroxylase; mhpA (gene name) +ec:1.14.13.128 7-methylxanthine demethylase; ndmC (gene name) +ec:1.14.13.129 Transferred to 1.14.15.24 +ec:1.14.13.130 pyrrole-2-carboxylate monooxygenase; pyrrole-2-carboxylate oxygenase +ec:1.14.13.131 dissimilatory dimethyl sulfide monooxygenase; dmoAB (gene names); dimethyl sulfide C-monooxygenase; dimethylsulfide monooxygenase (ambiguous); dimethyl sulfide monooxygenase (ambiguous) +ec:1.14.13.132 Transferred to 1.14.14.17 +ec:1.14.13.133 Transferred to 1.14.15.32 +ec:1.14.13.134 Transferred to 1.14.14.152 +ec:1.14.13.135 1-hydroxy-2-naphthoate hydroxylase; 1-hydroxy-2-naphthoic acid hydroxylase +ec:1.14.13.136 Transferred to 1.14.14.87 +ec:1.14.13.137 Transferred to 1.14.14.153 +ec:1.14.13.138 Transferred to 1.14.14.157 +ec:1.14.13.139 Transferred to 1.14.14.109 +ec:1.14.13.140 Transferred to 1.14.14.110 +ec:1.14.13.141 Transferred to 1.14.15.29 +ec:1.14.13.142 Transferred to 1.14.15.30 +ec:1.14.13.143 Transferred to 1.14.14.76 +ec:1.14.13.144 Transferred to 1.14.14.111 +ec:1.14.13.145 Transferred to 1.14.14.112 +ec:1.14.13.146 taxoid 14beta-hydroxylase +ec:1.14.13.147 Transferred to 1.14.14.182 +ec:1.14.13.148 trimethylamine monooxygenase; flavin-containing monooxygenase 3; FMO3; tmm (gene name) +ec:1.14.13.149 phenylacetyl-CoA 1,2-epoxidase; ring 1,2-phenylacetyl-CoA epoxidase; phenylacetyl-CoA monooxygenase; PaaAC; PaaABC(D)E +ec:1.14.13.150 Transferred to 1.14.14.113 +ec:1.14.13.151 Transferred to 1.14.14.84 +ec:1.14.13.152 Transferred to 1.14.14.83 +ec:1.14.13.153 (+)-sabinene 3-hydroxylase +ec:1.14.13.154 erythromycin 12-hydroxylase; EryK +ec:1.14.13.155 alpha-pinene monooxygenase +ec:1.14.13.156 Transferred to 1.14.14.133 +ec:1.14.13.157 Transferred to 1.14.14.56 +ec:1.14.13.158 Transferred to 1.14.14.114 +ec:1.14.13.159 Transferred to 1.14.14.24 +ec:1.14.13.160 (2,2,3-trimethyl-5-oxocyclopent-3-enyl)acetyl-CoA 1,5-monooxygenase; 2-oxo-Delta3-4,5,5-trimethylcyclopentenylacetyl-CoA monooxygenase; 2-oxo-Delta3-4,5,5-trimethylcyclopentenylacetyl-CoA 1,2-monooxygenase; OTEMO +ec:1.14.13.161 (+)-camphor 6-exo-hydroxylase; (+)-camphor 6-hydroxylase +ec:1.14.13.162 Transferred to 1.14.14.108 +ec:1.14.13.163 6-hydroxy-3-succinoylpyridine 3-monooxygenase; 6-hydroxy-3-succinoylpyridine hydroxylase; hspA (gene name); hspB (gene name) +ec:1.14.13.164 Transferred to 1.13.11.65 +ec:1.14.13.165 Transferred to 1.14.14.47 +ec:1.14.13.166 4-nitrocatechol 4-monooxygenase +ec:1.14.13.167 4-nitrophenol 4-monooxygenase; pnpA (gene name); pdcA (gene name) +ec:1.14.13.168 indole-3-pyruvate monooxygenase; YUC2 (gene name); spi1 (gene name) +ec:1.14.13.169 Transferred to 1.14.18.5 +ec:1.14.13.170 pentalenolactone D synthase; penE (gene name); pntE (gene name) +ec:1.14.13.171 neopentalenolactone D synthase; ptlE (gene name) +ec:1.14.13.172 salicylate 5-hydroxylase; nagG (gene name); nagH (gene name) +ec:1.14.13.173 Transferred to 1.14.14.115 +ec:1.14.13.174 Transferred to 1.14.14.116 +ec:1.14.13.175 Transferred to 1.14.14.117 +ec:1.14.13.176 Transferred to 1.14.14.118 +ec:1.14.13.177 Transferred to 1.14.14.119 +ec:1.14.13.178 methylxanthine N1-demethylase; ndmA (gene name) +ec:1.14.13.179 methylxanthine N3-demethylase; ndmB (gene name) +ec:1.14.13.180 aklavinone 12-hydroxylase; DnrF; RdmE; aklavinone 11-hydroxylase (incorrect) +ec:1.14.13.181 13-deoxydaunorubicin hydroxylase; DoxA +ec:1.14.13.182 2-heptyl-3-hydroxy-4(1H)-quinolone synthase; PqsH; 2-heptyl-3,4-dihydroxyquinoline synthase +ec:1.14.13.183 Transferred to 1.14.14.120 +ec:1.14.13.184 Transferred to 1.14.14.121 +ec:1.14.13.185 Transferred to 1.14.15.33 +ec:1.14.13.186 Transferred to 1.14.15.34 +ec:1.14.13.187 L-evernosamine nitrososynthase +ec:1.14.13.188 Transferred to 1.14.15.35 +ec:1.14.13.189 5-methyl-1-naphthoate 3-hydroxylase; AziB1 +ec:1.14.13.190 Transferred to 1.14.14.175 +ec:1.14.13.191 Transferred to 1.14.14.70 +ec:1.14.13.192 Transferred to 1.14.14.122 +ec:1.14.13.193 Transferred to 1.14.14.123 +ec:1.14.13.194 Transferred to 1.14.14.78 +ec:1.14.13.195 L-ornithine N5-monooxygenase (NADPH); CchB; ornithine hydroxylase; EtcB; PvdA; Af-OMO; dffA (gene name) +ec:1.14.13.196 L-ornithine N5-monooxygenase [NAD(P)H]; SidA (ambiguous) +ec:1.14.13.197 Transferred to 1.14.14.124 +ec:1.14.13.198 Transferred to 1.14.14.125 +ec:1.14.13.199 Transferred to 1.14.14.79 +ec:1.14.13.200 tetracenomycin A2 monooxygenase-dioxygenase; TcmG; ElmG; tetracenomycin A2,NAD(P)H:O2 oxidoreductase (tetracenomycin C forming) +ec:1.14.13.201 Transferred to 1.14.14.126 +ec:1.14.13.202 Transferred to 1.14.14.127 +ec:1.14.13.203 Transferred to 1.14.14.128 +ec:1.14.13.204 Transferred to 1.14.14.129 +ec:1.14.13.205 Transferred to 1.14.14.80 +ec:1.14.13.206 Transferred to 1.14.14.130 +ec:1.14.13.207 Transferred to 1.14.14.31 +ec:1.14.13.208 benzoyl-CoA 2,3-epoxidase; benzoyl-CoA dioxygenase/reductase (incorrect); BoxBA; BoxA/BoxB system; benzoyl-CoA 2,3-dioxygenase (incorrect) +ec:1.14.13.209 salicyloyl-CoA 5-hydroxylase; sdgC (gene name) +ec:1.14.13.210 4-methyl-5-nitrocatechol 5-monooxygenase; dntB (gene name); 4-methyl-5-nitrocatechol oxygenase; MNC monooxygenase +ec:1.14.13.211 rifampicin monooxygenase; RIF-O +ec:1.14.13.212 1,3,7-trimethyluric acid 5-monooxygenase; tmuM (gene name) +ec:1.14.13.213 Transferred to 1.14.14.131 +ec:1.14.13.214 Transferred to 1.14.14.132 +ec:1.14.13.215 protoasukamycin 4-monooxygenase +ec:1.14.13.216 asperlicin C monooxygenase; AspB +ec:1.14.13.217 protodeoxyviolaceinate monooxygenase; vioD (gene name); protoviolaceinate synthase +ec:1.14.13.218 5-methylphenazine-1-carboxylate 1-monooxygenase; phzS (gene name) +ec:1.14.13.219 resorcinol 4-hydroxylase (NADPH) +ec:1.14.13.220 resorcinol 4-hydroxylase (NADH); tsdB (gene name) +ec:1.14.13.221 Transferred to 1.14.15.28 +ec:1.14.13.222 aurachin C monooxygenase/isomerase; auaG (gene name); aurachin C monooxygenase +ec:1.14.13.223 3-hydroxy-4-methylanthranilyl-[aryl-carrier protein] 5-monooxygenase; sibG (gene name) +ec:1.14.13.224 violacein synthase; proviolaceinate monooxygenase; vioC (gene name) +ec:1.14.13.225 F-actin monooxygenase; MICAL (gene name) +ec:1.14.13.226 acetone monooxygenase (methyl acetate-forming); acmA (gene name) +ec:1.14.13.227 propane 2-monooxygenase; prmABCD (gene names) +ec:1.14.13.228 jasmonic acid 12-hydroxylase; ABM (gene name) +ec:1.14.13.229 tert-butyl alcohol monooxygenase; mdpJK (gene names); tert-butanol monooxygenase +ec:1.14.13.230 butane monooxygenase (soluble); sBMO; bmoBCDXYZ (gene names) +ec:1.14.13.231 tetracycline 11a-monooxygenase; tetX (gene name) +ec:1.14.13.232 6-methylpretetramide 4-monooxygenase +ec:1.14.13.233 4-hydroxy-6-methylpretetramide 12a-monooxygenase; oxyL (gene name) +ec:1.14.13.234 5a,11a-dehydrotetracycline 5-monooxygenase; oxyS (gene name); 12-dehydrotetracycline 5-monooxygenase +ec:1.14.13.235 indole-3-acetate monooxygenase; iacA (gene name) +ec:1.14.13.236 toluene 4-monooxygenase; TMO +ec:1.14.13.237 aliphatic glucosinolate S-oxygenase; omega-(methylthio)alkylglucosinolate S-oxygenase; GS-OX1 (gene name); omega-(methylthio)alkyl-glucosinolate,NADPH:oxygen S-oxidoreductase +ec:1.14.13.238 dimethylamine monooxygenase; dmmABC (gene names) +ec:1.14.13.239 carnitine monooxygenase; cntAB (gene names); yeaWX (gene names) +ec:1.14.13.240 2-polyprenylphenol 6-hydroxylase; ubiI (gene name); ubiM (gene name) +ec:1.14.13.241 5-pyridoxate monooxygenase; 5-pyridoxate,NADPH:oxygen oxidoreductase (decyclizing); 5-pyridoxate oxidase (misleading); 5-pyridoxate dioxygenase (incorrect) +ec:1.14.13.242 3-hydroxy-2-methylpyridine-5-carboxylate monooxygenase; MHPCO; 3-hydroxy-2-methylpyridine-5-carboxylate,NAD(P)H:oxygen oxidoreductase (decyclizing); methylhydroxypyridinecarboxylate oxidase (misleading); 2-methyl-3-hydroxypyridine 5-carboxylic acid dioxygenase (incorrect); methylhydroxypyridine carboxylate dioxygenase (incorrect); 3-hydroxy-3-methylpyridinecarboxylate dioxygenase [incorrect]; 3-hydroxy-2-methylpyridinecarboxylate dioxygenase (incorrect) +ec:1.14.13.243 toluene 2-monooxygenase; tomA1/2/3/4/5 (gene names); toluene ortho-monooxygenase +ec:1.14.13.244 phenol 2-monooxygenase (NADH); dmpLMNOP (gene names) +ec:1.14.13.245 assimilatory dimethylsulfide S-monooxygenase; dsoBCDEF (gene names) +ec:1.14.13.246 4beta-methylsterol monooxygenase; sdmA (gene name) +ec:1.14.13.247 stachydrine N-demethylase; L-proline betaine N-demethylase; stc2 (gene name) +ec:1.14.13.248 L-aspartate N-monooxygenase (nitrosuccinate-forming); creE (gene name) +ec:1.14.13.249 3-amino-4-hydroxybenzoate 2-monooxygenase; creL (gene name); ptmB3 (gene name); ptnB3 (gene name) +ec:1.14.13.250 nitrosourea synthase; sznF (gene name); StzF +ec:1.14.13.251 glycine betaine monooxygenase; glycine betaine dioxygenase (incorrect); bmoAB (gene names); gbcAB (gene names) +ec:1.14.14.1 unspecific monooxygenase; microsomal monooxygenase; xenobiotic monooxygenase; aryl-4-monooxygenase; aryl hydrocarbon hydroxylase; microsomal P-450; flavoprotein-linked monooxygenase; flavoprotein monooxygenase; substrate,reduced-flavoprotein:oxygen oxidoreductase (RH-hydroxylating or -epoxidizing) +ec:1.14.14.2 Deleted entry +ec:1.14.14.3 bacterial luciferase; aldehyde monooxygenase; luciferase; Vibrio fischeri luciferase; alkanal,reduced-FMN:oxygen oxidoreductase (1-hydroxylating, luminescing); alkanal,FMNH2:oxygen oxidoreductase (1-hydroxylating, luminescing); alkanal monooxygenase (FMN); aldehyde,FMNH2:oxygen oxidoreductase (1-hydroxylating, luminescing) +ec:1.14.14.4 Deleted entry +ec:1.14.14.5 alkanesulfonate monooxygenase; SsuD; sulfate starvation-induced protein 6; alkanesulfonate,reduced-FMN:oxygen oxidoreductase +ec:1.14.14.6 Transferred to 1.14.13.111 +ec:1.14.14.7 Transferred to 1.14.19.9 +ec:1.14.14.8 anthranilate 3-monooxygenase (FAD); anthranilate 3-hydroxylase; anthranilate hydroxylase +ec:1.14.14.9 4-hydroxyphenylacetate 3-monooxygenase; p-hydroxyphenylacetate 3-hydroxylase; 4-hydroxyphenylacetic acid-3-hydroxylase; p-hydroxyphenylacetate hydroxylase (FAD); 4 HPA 3-hydroxylase; p-hydroxyphenylacetate 3-hydroxylase (FAD); HpaB +ec:1.14.14.10 nitrilotriacetate monooxygenase +ec:1.14.14.11 styrene monooxygenase; StyA; SMO; NSMOA +ec:1.14.14.12 3-hydroxy-9,10-secoandrosta-1,3,5(10)-triene-9,17-dione monooxygenase; HsaA +ec:1.14.14.13 4-(gamma-L-glutamylamino)butanoyl-[BtrI acyl-carrier protein] monooxygenase; btrO (gene name) +ec:1.14.14.14 aromatase; CYP19A1 (gene name); estrogen synthetase (incorrect) +ec:1.14.14.15 (3S)-3-amino-3-(3-chloro-4-hydroxyphenyl)propanoyl-[peptidyl-carrier protein SgcC2] monooxygenase; SgcC +ec:1.14.14.16 steroid 21-monooxygenase; steroid 21-hydroxylase; 21-hydroxylase; P450c21; CYP21A2 (gene name) +ec:1.14.14.17 squalene monooxygenase; squalene epoxidase; squalene-2,3-epoxide cyclase; squalene 2,3-oxidocyclase; squalene hydroxylase; squalene oxydocyclase; squalene-2,3-epoxidase +ec:1.14.14.18 heme oxygenase (biliverdin-producing); ORP33 proteins; haem oxygenase (ambiguous); heme oxygenase (decyclizing) (ambiguous); heme oxidase (ambiguous); haem oxidase (ambiguous); heme oxygenase (ambiguous); heme,hydrogen-donor:oxygen oxidoreductase (alpha-methene-oxidizing, hydroxylating) +ec:1.14.14.19 steroid 17alpha-monooxygenase; steroid 17alpha-hydroxylase; cytochrome P-450 17alpha; cytochrome P-450 (P-450 17alpha,lyase); 17alpha-hydroxylase-C17,20 lyase; CYP17; CYP17A1 (gene name) +ec:1.14.14.20 phenol 2-monooxygenase (FADH2); pheA1 (gene name) +ec:1.14.14.21 dibenzothiophene monooxygenase; dszC (gene name) +ec:1.14.14.22 dibenzothiophene sulfone monooxygenase; dszA (gene name) +ec:1.14.14.23 cholesterol 7alpha-monooxygenase; cholesterol 7alpha-hydroxylase; CYP7A1 (gene name) +ec:1.14.14.24 vitamin D 25-hydroxylase; vitamin D2 25-hydroxylase; vitamin D3 25-hydroxylase; CYP2R1 +ec:1.14.14.25 cholesterol 24-hydroxylase; cholesterol 24-monooxygenase; CYP46; CYP46A1; cholesterol 24S-hydroxylase; cytochrome P450 46A1 +ec:1.14.14.26 24-hydroxycholesterol 7alpha-hydroxylase; 24-hydroxycholesterol 7alpha-monooxygenase; CYP39A1; CYP39A1 oxysterol 7alpha-hydroxylase +ec:1.14.14.27 resorcinol 4-hydroxylase (FADH2); graA (gene name) +ec:1.14.14.28 long-chain alkane monooxygenase +ec:1.14.14.29 25/26-hydroxycholesterol 7alpha-hydroxylase; 25-hydroxycholesterol 7alpha-monooxygenase; CYP7B1; CYP7B1 oxysterol 7alpha-hydroxylase; 27-hydroxycholesterol 7-monooxygenase; 27-hydroxycholesterol 7alpha-hydroxylase; cholest-5-ene-3beta,25-diol,NADPH:oxygen oxidoreductase (7alpha-hydroxylating); 25-hydroxycholesterol 7alpha-hydroxylase +ec:1.14.14.30 isobutylamine N-monooxygenase; vlmH (gene name) +ec:1.14.14.31 ipsdienol synthase; myrcene hydroxylase; CYP9T2; CYP9T3 +ec:1.14.14.32 17alpha-hydroxyprogesterone deacetylase; C-17/C-20 lyase; 17alpha-hydroxyprogesterone acetaldehyde-lyase; CYP17; CYP17A1 (gene name); 17alpha-hydroxyprogesterone 17,20-lyase +ec:1.14.14.33 ethylenediaminetetraacetate monooxygenase +ec:1.14.14.34 methanesulfonate monooxygenase (FMNH2); msuD (gene name); ssuD (gene name) +ec:1.14.14.35 dimethylsulfone monooxygenase; sfnG (gene name) +ec:1.14.14.36 tyrosine N-monooxygenase; tyrosine N-hydroxylase; CYP79A1 +ec:1.14.14.37 4-hydroxyphenylacetaldehyde oxime monooxygenase; 4-hydroxybenzeneacetaldehyde oxime monooxygenase; cytochrome P450II-dependent monooxygenase; NADPH-cytochrome P450 reductase (CYP71E1); CYP71E1; 4-hydroxyphenylacetaldehyde oxime,NADPH:oxygen oxidoreductase +ec:1.14.14.38 valine N-monooxygenase; CYP79D1; CYP79D2 +ec:1.14.14.39 isoleucine N-monooxygenase; CYP79D3 (gene name); CYP79D4 (gene name) +ec:1.14.14.40 phenylalanine N-monooxygenase; phenylalanine N-hydroxylase; CYP79A2 (gene name); CYP79D16 (gene name) +ec:1.14.14.41 (E)-2-methylbutanal oxime monooxygenase; CYP71E7 (gene name) +ec:1.14.14.42 homomethionine N-monooxygenase; CYP79F1 (gene name); CYP79F2 (gene name) +ec:1.14.14.43 (methylsulfanyl)alkanaldoxime N-monooxygenase; CYP83A1 (gene name); (methylthio)alkanaldoxime N-monooxygenase; (E)-omega-(methylthio)alkananaldoxime,[reduced NADPH---hemoprotein reductase]:oxygen oxidoreductase (N-hydroxylating) +ec:1.14.14.44 phenylacetaldehyde oxime monooxygenase; CYP71AN24 (gene name) +ec:1.14.14.45 aromatic aldoxime N-monooxygenase; CYP83B1 (gene name) +ec:1.14.14.46 pimeloyl-[acyl-carrier protein] synthase; bioI (gene name); P450BioI; CYP107H1 +ec:1.14.14.47 nitric-oxide synthase (flavodoxin); nitric oxide synthetase (ambiguous); NO synthase (ambiguous) +ec:1.14.14.48 jasmonoyl-L-amino acid 12-hydroxylase; CYP94B1 (gene name); CYP94B3 (gene name) +ec:1.14.14.49 12-hydroxyjasmonoyl-L-amino acid 12-hydroxylase; CYP94C1 (gene name) +ec:1.14.14.50 tabersonine 3-oxygenase; T3O; CYP71D1V2 +ec:1.14.14.51 (S)-limonene 6-monooxygenase; (-)-limonene 6-hydroxylase; (-)-limonene 6-monooxygenase; (-)-limonene,NADPH:oxygen oxidoreductase (6-hydroxylating) +ec:1.14.14.52 (S)-limonene 7-monooxygenase; (-)-limonene 7-monooxygenase; (-)-limonene hydroxylase; (-)-limonene monooxygenase; (-)-limonene,NADPH:oxygen oxidoreductase (7-hydroxylating) +ec:1.14.14.53 (R)-limonene 6-monooxygenase; (+)-limonene-6-hydroxylase; (+)-limonene 6-monooxygenase +ec:1.14.14.54 phenylacetate 2-hydroxylase; CYP504; phaA (gene name) +ec:1.14.14.55 quinine 3-monooxygenase; CYP3A4 (gene name) +ec:1.14.14.56 1,8-cineole 2-exo-monooxygenase; CYP3A4 +ec:1.14.14.57 taurochenodeoxycholate 6alpha-hydroxylase; CYP3A4; CYP4A21; taurochenodeoxycholate 6alpha-monooxygenase +ec:1.14.14.58 trimethyltridecatetraene synthase; CYP82G1; CYP92C5; CYP92C6; DMNT/TMTT homoterpene synthase +ec:1.14.14.59 dimethylnonatriene synthase; CYP82G1; CYP92C5; DMNT/TMTT homoterpene synthase +ec:1.14.14.60 ferruginol monooxygenase; CYP76AH24; CYP76AH3 +ec:1.14.14.61 carnosic acid synthase; CYP76AK6; CYP76AK7; CYP76AK8 +ec:1.14.14.62 salviol synthase; CYP71BE52 +ec:1.14.14.63 beta-amyrin 16beta-monooxygenase; CYP716A141 +ec:1.14.14.64 beta-amyrin 6beta-monooxygenase; CYP716E26 +ec:1.14.14.65 sugiol synthase; CYP76AH3 +ec:1.14.14.66 marmesin synthase +ec:1.14.14.67 11-hydroxysugiol 20-monooxygenase; CYP76AK1 +ec:1.14.14.68 syn-pimaradiene 3-monooxygenase; CYP701A8 +ec:1.14.14.69 ent-cassadiene hydroxylase; CYP71Z7 +ec:1.14.14.70 ent-sandaracopimaradiene 3-hydroxylase; CYP701A; OsKOL4 +ec:1.14.14.71 cucurbitadienol 11-hydroxylase; CYP87D18 +ec:1.14.14.72 drimenol monooxygenase; PhDOX1 +ec:1.14.14.73 albendazole monooxygenase (sulfoxide-forming); albendazole sulfoxidase (ambiguous); albendazole hydroxylase (ambiguous); CYP3A4 (gene name); CYP2J2 (gene name); CYP1A2 (gene name) +ec:1.14.14.74 albendazole monooxygenase (hydroxylating); CYP2J2 (gene name) +ec:1.14.14.75 fenbendazole monooxygenase (4'-hydroxylating); CYP2C19 (gene name) +ec:1.14.14.76 ent-isokaurene C2/C3-hydroxylase; CYP71Z6; ent-isokaurene C2-hydroxylase +ec:1.14.14.77 phenylacetonitrile alpha-monooxygenase; CYP3201B1 (gene name) +ec:1.14.14.78 phylloquinone omega-hydroxylase; vitamin K1 omega-hydroxylase; CYP4F2; CYP4F11 +ec:1.14.14.79 docosahexaenoic acid omega-hydroxylase; CYP4F3B; CYP4V2; docosahexaenoate,NADPH:O2 oxidoreductase (22-hydroxydocosahexaenoate forming) +ec:1.14.14.80 long-chain fatty acid omega-monooxygenase; CYP704B1 (gene name); CYP52M1 (gene name); CYP4A (gene name); CYP86A (gene name) +ec:1.14.14.81 flavanoid 3',5'-hydroxylase; flavonoid 3',5'-hydroxylase +ec:1.14.14.82 flavonoid 3'-monooxygenase; CYP75B1 (gene name); flavonoid 3'-hydroxylase; flavonoid 3-hydroxylase (incorrect); NADPH:flavonoid-3'-hydroxylase (incorrect); flavonoid 3-monooxygenase (incorrect) +ec:1.14.14.83 geraniol 8-hydroxylase; CYP76B6 (gene name); G10H (gene name) +ec:1.14.14.84 linalool 8-monooxygenase; P-450lin; CYP111 +ec:1.14.14.85 7-deoxyloganate 7-hydroxylase; CYP72A224 (gene name); 7-deoxyloganin 7-hydroxylase (incorrect); 7-deoxyloganin,[reduced NADPH---hemoprotein reductase]:oxygen oxidoreductase (7alpha-hydroxylating) (incorrect) +ec:1.14.14.86 ent-kaurene monooxygenase; ent-kaurene oxidase (misleading) +ec:1.14.14.87 2-hydroxyisoflavanone synthase; CYP93C; IFS; isoflavonoid synthase +ec:1.14.14.88 isoflavone 3'-hydroxylase; isoflavone 3'-monooxygenase; CYP81E9 +ec:1.14.14.89 4'-methoxyisoflavone 2'-hydroxylase; CYP81E1 (gene name); CYP81E3 (gene name); CYP81E7 (gene name); isoflavone 2'-monooxygenase (ambiguous); isoflavone 2'-hydroxylase (ambiguous) +ec:1.14.14.90 isoflavone 2'-hydroxylase; isoflavone 2'-monooxygenase; CYP81E1; CYP Ge-3 +ec:1.14.14.91 trans-cinnamate 4-monooxygenase; cinnamic acid 4-hydroxylase; CA4H; cytochrome P450 cinnamate 4-hydroxylase; cinnamate 4-hydroxylase; cinnamate 4-monooxygenase; cinnamate hydroxylase; cinnamic 4-hydroxylase; cinnamic acid 4-monooxygenase; cinnamic acid p-hydroxylase; t-cinnamic acid hydroxylase; trans-cinnamate 4-hydroxylase; trans-cinnamic acid 4-hydroxylase; CYP73A1 (gene name) +ec:1.14.14.92 benzoate 4-monooxygenase; benzoic acid 4-hydroxylase; benzoate 4-hydroxylase; benzoic 4-hydroxylase; benzoate-p-hydroxylase; p-hydroxybenzoate hydroxylase; CYP53A1 (gene name) +ec:1.14.14.93 3,9-dihydroxypterocarpan 6a-monooxygenase; 3,9-dihydroxypterocarpan 6a-hydroxylase; 3,9-dihydroxypterocarpan 6alpha-monooxygenase (erroneous); CYP93A1 (gene name) +ec:1.14.14.94 leukotriene-B4 20-monooxygenase; leukotriene-B4 20-hydroxylase; leucotriene-B4 omega-hydroxylase; LTB4 20-hydroxylase; LTB4 omega-hydroxylase; CYP4F2 (gene name); CYP4F3 (gene name) +ec:1.14.14.95 germacrene A hydroxylase; GAO (gene name) +ec:1.14.14.96 5-O-(4-coumaroyl)-D-quinate 3'-monooxygenase; 5-O-(4-coumaroyl)-D-quinate/shikimate 3'-hydroxylase; coumaroylquinate(coumaroylshikimate) 3'-monooxygenase; CYP98A3 (gene name) +ec:1.14.14.97 methyltetrahydroprotoberberine 14-monooxygenase; methyltetrahydroprotoberberine 14-hydroxylase; (S)-cis-N-methyltetrahydroberberine 14-monooxygenase; (S)-cis-N-methyltetrahydroprotoberberine-14-hydroxylase; CYP82N4 (gene name) +ec:1.14.14.98 protopine 6-monooxygenase; protopine 6-hydroxylase; CYP82N2 (gene name) +ec:1.14.14.99 (S)-limonene 3-monooxygenase; (-)-limonene 3-hydroxylase; (-)-limonene 3-monooxygenase; CYP71D15 (gene name) +ec:1.14.14.100 dihydrosanguinarine 10-monooxygenase; dihydrosanguinarine 10-hydroxylase +ec:1.14.14.101 dihydrochelirubine 12-monooxygenase; dihydrochelirubine 12-hydroxylase +ec:1.14.14.102 N-methylcoclaurine 3'-monooxygenase; N-methylcoclaurine 3'-hydroxylase; CYP80B1 (gene name) +ec:1.14.14.103 tabersonine 16-hydroxylase; tabersonine-11-hydroxylase; T11H; CYP71D12 (gene name) +ec:1.14.14.104 vinorine hydroxylase +ec:1.14.14.105 taxane 10beta-hydroxylase; CYP725A1 (gene name); 5-alpha-taxadienol-10-beta-hydroxylase +ec:1.14.14.106 taxane 13alpha-hydroxylase; CYP725A2 (gene name) +ec:1.14.14.107 ent-kaurenoic acid monooxygenase; KAO1 (gene name); CYP88A3 (gene name); ent-kaurenoic acid oxidase +ec:1.14.14.108 2,5-diketocamphane 1,2-monooxygenase; 2,5-diketocamphane lactonizing enzyme; ketolactonase I (ambiguous); 2,5-diketocamphane 1,2-monooxygenase oxygenating component; 2,5-DKCMO; camP (gene name); camphor 1,2-monooxygenase; camphor ketolactonase I +ec:1.14.14.109 3-hydroxyindolin-2-one monooxygenase; BX4 (gene name); CYP71C1 (gene name) +ec:1.14.14.110 2-hydroxy-1,4-benzoxazin-3-one monooxygenase; BX5 (gene name); CYP71C3 (gene name) +ec:1.14.14.111 9beta-pimara-7,15-diene oxidase; CYP99A3; 9beta-pimara-7,15-diene monooxygenase +ec:1.14.14.112 ent-cassa-12,15-diene 11-hydroxylase; ent-cassadiene C11alpha-hydroxylase; CYP76M7 +ec:1.14.14.113 alpha-humulene 10-hydroxylase; CYP71BA1 +ec:1.14.14.114 amorpha-4,11-diene 12-monooxygenase; CYP71AV1 +ec:1.14.14.115 11-oxo-beta-amyrin 30-oxidase; CYP72A; CYP72A154; 11-oxo-beta-amyrin 30-monooxygenase +ec:1.14.14.116 averantin hydroxylase; AVN hydroxylase; avnA (gene name); CYP60A1 +ec:1.14.14.117 aflatoxin B synthase; ordA (gene name) +ec:1.14.14.118 tryprostatin B 6-hydroxylase; ftmC (gene name) +ec:1.14.14.119 fumitremorgin C monooxygenase; ftmG (gene name) +ec:1.14.14.120 dammarenediol 12-hydroxylase; protopanaxadiol synthase; CYP716A47 +ec:1.14.14.121 protopanaxadiol 6-hydroxylase; protopanaxatriol synthase; P6H; CYP716A53v2 +ec:1.14.14.122 oryzalexin E synthase; CYP76M6 +ec:1.14.14.123 oryzalexin D synthase; CYP76M8 +ec:1.14.14.124 dihydromonacolin L hydroxylase; LovA (ambiguous) +ec:1.14.14.125 monacolin L hydroxylase; LovA (ambiguous) +ec:1.14.14.126 beta-amyrin 28-monooxygenase; CYP716A52v2; CYP716A12; CYP16A75; beta-amyrin 28-oxidase +ec:1.14.14.127 methyl farnesoate epoxidase; CYP15A1 +ec:1.14.14.128 farnesoate epoxidase; CYP15C1 +ec:1.14.14.129 long-chain acyl-CoA omega-monooxygenase; long-chain acyl-CoA omega-hydroxylase; CYP86A22 (gene name) +ec:1.14.14.130 laurate 7-monooxygenase; CYP703A2 (gene name) +ec:1.14.14.131 bursehernin 5'-monooxygenase; CYP71CU1 (gene name); bursehernin 5'-hydroxylase +ec:1.14.14.132 (-)-4'-demethyl-deoxypodophyllotoxin 4-hydroxylase; CYP82D61 (gene name) +ec:1.14.14.133 1,8-cineole 2-endo-monooxygenase; P450cin; CYP176A; CYP176A1 +ec:1.14.14.134 beta-amyrin 24-hydroxylase; sophoradiol 24-hydroxylase; CYP93E1 +ec:1.14.14.135 glyceollin synthase; dimethylallyl-3,6a,9-trihydroxypterocarpan cyclase +ec:1.14.14.136 deoxysarpagine hydroxylase; DOSH +ec:1.14.14.137 (+)-abscisic acid 8'-hydroxylase; (+)-ABA 8'-hydroxylase; ABA 8'-hydroxylase; CYP707A1 (gene name) +ec:1.14.14.138 lithocholate 6beta-hydroxylase; lithocholate 6beta-monooxygenase; CYP3A10; 6beta-hydroxylase; cytochrome P450 3A10; lithocholic acid 6beta-hydroxylase +ec:1.14.14.139 5beta-cholestane-3alpha,7alpha-diol 12alpha-hydroxylase; 5beta-cholestane-3alpha,7alpha-diol 12alpha-monooxygenase; sterol 12alpha-hydroxylase (ambiguous); CYP8B1; cytochrome P450 8B1; 7alpha-hydroxycholest-4-en-3-one 12alpha-hydroxylase; 7alpha-hydroxy-4-cholesten-3-one 12alpha-monooxygenase; chenodeoxycholate 12alpha monooxygenase +ec:1.14.14.140 Transferred to 1.14.14.162 +ec:1.14.14.141 psoralen synthase; CYP71AJ1 +ec:1.14.14.142 8-dimethylallylnaringenin 2'-hydroxylase; 8-DMAN 2'-hydroxylase +ec:1.14.14.143 (+)-menthofuran synthase; menthofuran synthase; (+)-pulegone 9-hydroxylase; (+)-MFS; cytochrome P450 menthofuran synthase +ec:1.14.14.144 abieta-7,13-diene hydroxylase; abietadiene hydroxylase (ambiguous) +ec:1.14.14.145 abieta-7,13-dien-18-ol hydroxylase; CYP720B1; PtAO; abietadienol hydroxylase (ambiguous) +ec:1.14.14.146 geranylgeraniol 18-hydroxylase; GGOH-18-hydroxylase +ec:1.14.14.147 22alpha-hydroxysteroid 23-monooxygenase; cytochrome P450 90C1; CYP90D1; CYP90C1; 3-epi-6-deoxocathasterone,[reduced NADPH---hemoprotein reductase]:oxygen oxidoreductase (C-23-hydroxylating); 3-epi-6-deoxocathasterone 23-monooxygenase +ec:1.14.14.148 angelicin synthase; CYP71AJ4 (gene name) +ec:1.14.14.149 5-epiaristolochene 1,3-dihydroxylase; 5-epi-aristolochene 1,3-dihydroxylase; EAH; CYP71D20 +ec:1.14.14.150 costunolide synthase; CYP71BL2 +ec:1.14.14.151 premnaspirodiene oxygenase; HPO; Hyoscymus muticus premnaspirodiene oxygenase; CYP71D55 +ec:1.14.14.152 beta-amyrin 11-oxidase; CYP88D6 +ec:1.14.14.153 indole-2-monooxygenase; BX2 (gene name); CYP71C4 (gene name) +ec:1.14.14.154 sterol 14alpha-demethylase; obtusufoliol 14-demethylase; lanosterol 14-demethylase; lanosterol 14alpha-demethylase; sterol 14-demethylase; CYP51 (gene name); ERG11 (gene name) +ec:1.14.14.155 3,6-diketocamphane 1,2-monooxygenase; 3,6-diketocamphane lactonizing enzyme; 3,6-DKCMO +ec:1.14.14.156 tryptophan N-monooxygenase; tryptophan N-hydroxylase; CYP79B1; CYP79B2; CYP79B3 +ec:1.14.14.157 indolin-2-one monooxygenase; BX3 (gene name); CYP71C2 (gene name) +ec:1.14.14.158 carotenoid epsilon hydroxylase; CYP97C1; LUT1; CYP97C; carotene epsilon-monooxygenase +ec:1.14.14.159 dolabradiene monooxygenase; CYP71Z16 (gene name) +ec:1.14.14.160 zealexin A1 synthase; CYP71Z18 (gene name) +ec:1.14.14.161 nepetalactol monooxygenase; CYP76A26 (gene name); iridoid oxidase (misleading) +ec:1.14.14.162 flavanone 2-hydroxylase; CYP93G2 (gene name); CYP93B1 (gene name); (2S)-flavanone 2-hydroxylase; licodione synthase +ec:1.14.14.163 (S)-1-hydroxy-N-methylcanadine 13-hydroxylase; CYP82X2 (gene name) +ec:1.14.14.164 fraxetin 5-hydroxylase; CYP82C4; fraxetin 5-monooxygenase +ec:1.14.14.165 indole-3-carbonyl nitrile 4-hydroxylase; CYP82C2 +ec:1.14.14.166 (S)-N-methylcanadine 1-hydroxylase; CYP82Y1 (gene name) +ec:1.14.14.167 (13S,14R)-13-O-acetyl-1-hydroxy-N-methylcanadine 8-hydroxylase; CYP82X1 (gene name) +ec:1.14.14.168 germacrene A acid 8beta-hydroxylase; HaG8H; CYP71BL1; CYP71BL6 +ec:1.14.14.169 eupatolide synthase; CYP71DD6; HaES +ec:1.14.14.170 8-epi-inunolide synthase; CYP71BL1 +ec:1.14.14.171 beta-amyrin 16alpha-hydroxylase; CYP87D16 +ec:1.14.14.172 3,5,6-trichloropyridin-2-ol monooxygenase; tcpA (gene name) +ec:1.14.14.173 2,4,6-trichlorophenol monooxygenase; tcpA (gene name) +ec:1.14.14.174 geranylhydroquinone 3''-hydroxylase; GHQ 3''-hydroxylase; CYP76B74 (gene name); geranylhydroquinone,NADPH:oxygen oxidoreductase (3''-hydroxylating) +ec:1.14.14.175 ferruginol synthase; miltiradiene oxidase (incorrect); CYP76AH1; miltiradiene,NADPH:oxygen oxidoreductase (ferruginol forming) (incorrect) +ec:1.14.14.176 taxadiene 5alpha-hydroxylase +ec:1.14.14.177 ultra-long-chain fatty acid omega-hydroxylase; CYP4F22 (gene name) +ec:1.14.14.178 steroid 22S-hydroxylase; CYP90B1 (gene name); DWF4 (gene name); steroid C-22 hydroxylase +ec:1.14.14.179 brassinosteroid 6-oxygenase; CYP85A1 (gene name); CYP85A2 (gene name); brassinosteroid 6-oxidase +ec:1.14.14.180 brassinolide synthase; CYP85A2 (gene name); CYP85A3 (gene name) +ec:1.14.14.181 sulfoquinovose monooxygenase; 6-deoxy-6-sulfo-D-glucose monooxygenase; smoC (gene name); squD (gene name) +ec:1.14.14.182 taxoid 7beta-hydroxylase +ec:1.14.14.183 taxoid 2alpha-hydroxylase +ec:1.14.15.1 camphor 5-monooxygenase; camphor 5-exo-methylene hydroxylase; 2-bornanone 5-exo-hydroxylase; bornanone 5-exo-hydroxylase; camphor 5-exo-hydroxylase; camphor 5-exohydroxylase; camphor hydroxylase; d-camphor monooxygenase; methylene hydroxylase; methylene monooxygenase; D-camphor-exo-hydroxylase; camphor methylene hydroxylase +ec:1.14.15.2 Transferred to 1.14.13.162 +ec:1.14.15.3 alkane 1-monooxygenase; alkane 1-hydroxylase; omega-hydroxylase; fatty acid omega-hydroxylase; alkane monooxygenase; 1-hydroxylase; alkane hydroxylase +ec:1.14.15.4 steroid 11beta-monooxygenase; steroid 11beta-hydroxylase; steroid 11beta/18-hydroxylase +ec:1.14.15.5 corticosterone 18-monooxygenase; corticosterone 18-hydroxylase; corticosterone methyl oxidase +ec:1.14.15.6 cholesterol monooxygenase (side-chain-cleaving); cholesterol desmolase; cytochrome P-450scc; C27-side chain cleavage enzyme; cholesterol 20-22-desmolase; cholesterol C20-22 desmolase; cholesterol side-chain cleavage enzyme; cholesterol side-chain-cleaving enzyme; steroid 20-22 desmolase; steroid 20-22-lyase; CYP11A1 (gene name) +ec:1.14.15.7 choline monooxygenase +ec:1.14.15.8 steroid 15beta-monooxygenase; cytochrome P-450meg; cytochrome P450meg; steroid 15beta-hydroxylase; CYP106A2; BmCYP106A2 +ec:1.14.15.9 spheroidene monooxygenase; CrtA; acyclic carotenoid 2-ketolase; spirilloxanthin monooxygenase; 2-oxo-spirilloxanthin monooxygenase +ec:1.14.15.10 (+)-camphor 6-endo-hydroxylase; P450camr +ec:1.14.15.11 pentalenic acid synthase; CYP105D7; sav7469 (gene name); 1-deoxypentalenate,reduced ferredoxin:O2 oxidoreductase +ec:1.14.15.12 Transferred to 1.14.14.46 +ec:1.14.15.13 pulcherriminic acid synthase; cyclo-L-leucyl-L-leucyl dipeptide oxidase; CYP134A1; CypX (ambiguous) +ec:1.14.15.14 methyl-branched lipid omega-hydroxylase; CYP124 +ec:1.14.15.15 cholestanetriol 26-monooxygenase; 5beta-cholestane-3alpha,7alpha,12alpha-triol 26-hydroxylase; 5beta-cholestane-3alpha,7alpha,12alpha-triol hydroxylase; cholestanetriol 26-hydroxylase; sterol 27-hydroxylase; sterol 26-hydroxylase; cholesterol 27-hydroxylase; CYP27A; CYP27A1; cytochrome P450 27A1' +ec:1.14.15.16 vitamin D3 24-hydroxylase; CYP24A1 +ec:1.14.15.17 pheophorbide a oxygenase; pheide a monooxygenase; pheide a oxygenase; PaO; PAO +ec:1.14.15.18 calcidiol 1-monooxygenase; 25-hydroxycholecalciferol 1-hydroxylase; 25-hydroxycholecalciferol 1-monooxygenase; 1-hydroxylase-25-hydroxyvitamin D3; 25-hydroxy D3-1alpha-hydroxylase; 25-hydroxycholecalciferol 1alpha-hydroxylase; 25-hydroxyvitamin D3 1alpha-hydroxylase +ec:1.14.15.19 C-19 steroid 1alpha-hydroxylase; CYP260A1 +ec:1.14.15.20 heme oxygenase (biliverdin-producing, ferredoxin); HO1 (gene name); HY1 (gene name); HO3 (gene name); HO4 (gene name); pbsA1 (gene name) +ec:1.14.15.21 zeaxanthin epoxidase; Zea-epoxidase +ec:1.14.15.22 vitamin D 1,25-hydroxylase; CYP105A1; Streptomyces griseolus cytochrome P450SU-1 +ec:1.14.15.23 chloroacetanilide N-alkylformylase; cndA (gene name) +ec:1.14.15.24 beta-carotene 3-hydroxylase; beta-carotene 3,3'-monooxygenase; CrtZ +ec:1.14.15.25 p-cymene methyl-monooxygenase; cymAa (gene name); cymA (gene name); p-cymene methyl hydroxylase +ec:1.14.15.26 toluene methyl-monooxygenase; xylM (gene names); ntnM (gene names) +ec:1.14.15.27 beta-dihydromenaquinone-9 omega-hydroxylase; cyp128 (gene name) +ec:1.14.15.28 cholest-4-en-3-one 26-monooxygenase [(25R)-3-oxocholest-4-en-26-oate forming]; CYP142 +ec:1.14.15.29 cholest-4-en-3-one 26-monooxygenase [(25S)-3-oxocholest-4-en-26-oate forming]; CYP125; CYP125A1; cholest-4-en-3-one 27-monooxygenase (misleading); cholest-4-en-3-one,NADH:oxygen oxidoreductase (26-hydroxylating); cholest-4-en-3-one 26-monooxygenase (ambiguous) +ec:1.14.15.30 3-ketosteroid 9alpha-monooxygenase; KshA; 3-ketosteroid 9alpha-hydroxylase +ec:1.14.15.31 2-hydroxy-5-methyl-1-naphthoate 7-hydroxylase; NcsB3 +ec:1.14.15.32 pentalenene oxygenase; PtlI +ec:1.14.15.33 pikromycin synthase; PikC; CYP107L1 +ec:1.14.15.34 20-oxo-5-O-mycaminosyltylactone 23-monooxygenase; tylH1 (gene name) +ec:1.14.15.35 6-deoxyerythronolide B hydroxylase; DEB hydroxylase; eryF (gene name); P450(eryF); CYP107A1 +ec:1.14.15.36 sterol 14alpha-demethylase (ferredoxin); cyp51 (gene name) +ec:1.14.15.37 luteothin monooxygenase; aurH (gene name) +ec:1.14.15.38 N,N-dimethyl phenylurea N-demethylase; pdmAB (gene names) +ec:1.14.15.39 epi-isozizaene 5-monooxygenase; CYP170A1 +ec:1.14.16.1 phenylalanine 4-monooxygenase; phenylalaninase; phenylalanine 4-hydroxylase; phenylalanine hydroxylase +ec:1.14.16.2 tyrosine 3-monooxygenase; L-tyrosine hydroxylase; tyrosine 3-hydroxylase; tyrosine hydroxylase +ec:1.14.16.3 Deleted entry +ec:1.14.16.4 tryptophan 5-monooxygenase; L-tryptophan hydroxylase; indoleacetic acid-5-hydroxylase; tryptophan 5-hydroxylase; tryptophan hydroxylase +ec:1.14.16.5 alkylglycerol monooxygenase; glyceryl-ether monooxygenase; glyceryl-ether cleaving enzyme; glyceryl ether oxygenase; glyceryl etherase; O-alkylglycerol monooxygenase +ec:1.14.16.6 mandelate 4-monooxygenase; L-mandelate 4-hydroxylase; mandelic acid 4-hydroxylase +ec:1.14.16.7 phenylalanine 3-monooxygenase; PacX; phenylalanine 3-hydroxylase +ec:1.14.17.1 dopamine beta-monooxygenase; dopamine beta-hydroxylase; MDBH (membrane-associated dopamine beta-monooxygenase); SDBH (soluble dopamine beta-monooxygenase); dopamine-B-hydroxylase; 3,4-dihydroxyphenethylamine beta-oxidase; 4-(2-aminoethyl)pyrocatechol beta-oxidase; dopa beta-hydroxylase; dopamine beta-oxidase; dopamine hydroxylase; phenylamine beta-hydroxylase; (3,4-dihydroxyphenethylamine)beta-mono-oxygenase; DbetaM (gene name) +ec:1.14.17.2 Deleted entry +ec:1.14.17.3 peptidylglycine monooxygenase; peptidylglycine 2-hydroxylase; peptidyl alpha-amidating enzyme; peptide-alpha-amide synthetase; peptide alpha-amidating enzyme; peptide alpha-amide synthase; peptidylglycine alpha-hydroxylase; peptidylglycine alpha-amidating monooxygenase; PAM-A; PAM-B; PAM; peptidylglycine,ascorbate:oxygen oxidoreductase (2-hydroxylating) +ec:1.14.17.4 aminocyclopropanecarboxylate oxidase; ACC oxidase; ethylene-forming enzyme; 1-aminocyclopropane-1-carboxylate oxygenase (ethylene-forming) +ec:1.14.18.1 tyrosinase; monophenol monooxygenase; phenolase; monophenol oxidase; cresolase; monophenolase; tyrosine-dopa oxidase; monophenol monooxidase; monophenol dihydroxyphenylalanine:oxygen oxidoreductase; N-acetyl-6-hydroxytryptophan oxidase; monophenol, dihydroxy-L-phenylalanine oxygen oxidoreductase; o-diphenol:O2 oxidoreductase; phenol oxidase +ec:1.14.18.2 CMP-N-acetylneuraminate monooxygenase; CMP-N-acetylneuraminic acid hydroxylase; CMP-Neu5Ac hydroxylase; cytidine monophosphoacetylneuraminate monooxygenase; N-acetylneuraminic monooxygenase; cytidine-5'-monophosphate-N-acetylneuraminic acid hydroxylase +ec:1.14.18.3 methane monooxygenase (particulate) +ec:1.14.18.4 phosphatidylcholine 12-monooxygenase; ricinoleic acid synthase; oleate Delta12-hydroxylase; oleate Delta12-monooxygenase +ec:1.14.18.5 sphingolipid C4-monooxygenase; sphinganine C4-monooxygenase; sphingolipid C4-hydroxylase; SUR2 (gene name); SBH1 (gene name); SBH2 (gene name); DEGS2 (gene name) +ec:1.14.18.6 4-hydroxysphinganine ceramide fatty acyl 2-hydroxylase; FA2H (gene name); SCS7 (gene name) +ec:1.14.18.7 dihydroceramide fatty acyl 2-hydroxylase; FAH1 (gene name); FAH2 (gene name); plant sphingolipid fatty acid 2-hydroxylase +ec:1.14.18.8 Transferred to 1.14.14.139 +ec:1.14.18.9 4alpha-methylsterol monooxygenase; methylsterol hydroxylase (ambiguous); 4-methylsterol oxidase (ambiguous); 4,4-dimethyl-5alpha-cholest-7-en-3beta-ol,hydrogen-donor:oxygen oxidoreductase (hydroxylating) (ambiguous); methylsterol monooxygenase (ambiguous); ERG25 (gene name); MSMO1 (gene name); 4,4-dimethyl-5alpha-cholest-7-en-3beta-ol,ferrocytochrome-b5:oxygen oxidoreductase (hydroxylating) (ambiguous) +ec:1.14.18.10 plant 4,4-dimethylsterol C-4alpha-methyl-monooxygenase; SMO1 (gene name) +ec:1.14.18.11 plant 4alpha-monomethylsterol monooxygenase; SMO2 (gene name) +ec:1.14.18.12 2-hydroxy fatty acid dioxygenase; MPO1 (gene name) +ec:1.14.19.1 stearoyl-CoA 9-desaturase; Delta9-desaturase; acyl-CoA desaturase; fatty acid desaturase; stearoyl-CoA, hydrogen-donor:oxygen oxidoreductase +ec:1.14.19.2 stearoyl-[acyl-carrier-protein] 9-desaturase; stearyl acyl carrier protein desaturase; stearyl-ACP desaturase; acyl-[acyl-carrier-protein] desaturase; acyl-[acyl-carrier protein],hydrogen-donor:oxygen oxidoreductase +ec:1.14.19.3 acyl-CoA 6-desaturase; Delta6-desaturase; Delta6-fatty acyl-CoA desaturase; Delta6-acyl CoA desaturase; fatty acid Delta6-desaturase; fatty acid 6-desaturase; linoleate desaturase; linoleic desaturase; linoleic acid desaturase; linoleoyl CoA desaturase; linoleoyl-coenzyme A desaturase; long-chain fatty acid Delta6-desaturase; linoleoyl-CoA,hydrogen-donor:oxygen oxidoreductase; linoleoyl-CoA desaturase; FADS2 (gene name) +ec:1.14.19.4 acyl-lipid (11-3)-desaturase; acyl-lipid 8-desaturase; Delta8 fatty acid desaturase; Delta8-desaturase; Delta8-fatty-acid desaturase; efd1 (gene name); D8Des (gene name); phytosphinganine,hydrogen donor:oxygen Delta8-oxidoreductase (incorrect); SLD +ec:1.14.19.5 acyl-CoA 11-(Z)-desaturase; Delta11 desaturase; fatty acid Delta11-desaturase; TpDESN; Cro-PG; Delta11 fatty acid desaturase; Z/E11-desaturase; Delta11-palmitoyl-CoA desaturase; acyl-CoA,hydrogen donor:oxygen Delta11-oxidoreductase; Delta11-fatty-acid desaturase +ec:1.14.19.6 acyl-CoA (9+3)-desaturase; oleoyl-CoA 12-desaturase; Delta12 fatty acid desaturase; Delta12(omega6)-desaturase; oleoyl-CoA Delta12 desaturase; Delta12 desaturase; Delta12-desaturase; Delta12-fatty-acid desaturase; acyl-CoA,hydrogen donor:oxygen Delta12-oxidoreductase +ec:1.14.19.7 Transferred to 1.11.1.23 +ec:1.14.19.8 pentalenolactone synthase; penM (gene name); pntM (gene name) +ec:1.14.19.9 tryptophan 7-halogenase; prnA (gene name); rebH (gene name); ktzQ (gene name) +ec:1.14.19.10 icosanoyl-CoA 5-desaturase; acyl-CoA Delta5-desaturase (ambiguous) +ec:1.14.19.11 acyl-[acyl-carrier-protein] 4-desaturase; Delta4-palmitoyl-[acyl carrier protein] desaturase +ec:1.14.19.12 acyl-lipid omega-(9-4) desaturase; acyl-lipid omega-13 desaturase; acyl-lipid 7-desaturase (ambiguous) +ec:1.14.19.13 acyl-CoA 15-desaturase; DES3 (gene name) +ec:1.14.19.14 linoleoyl-lipid Delta9 conjugase +ec:1.14.19.15 (11Z)-hexadec-11-enoyl-CoA conjugase; Bmpgdesat1 (gene name) +ec:1.14.19.16 linoleoyl-lipid Delta12 conjugase (11E,13Z-forming); Fac (gene name) +ec:1.14.19.17 sphingolipid 4-desaturase; dehydroceramide desaturase +ec:1.14.19.18 sphingolipid 8-(E)-desaturase; 8-sphingolipid desaturase (ambiguous); 8 fatty acid desaturase (ambiguous); DELTA8-sphingolipid desaturase (ambiguous) +ec:1.14.19.19 sphingolipid 10-desaturase; desA (gene name) +ec:1.14.19.20 Delta7-sterol 5(6)-desaturase; lathosterol oxidase; Delta7-sterol Delta5-dehydrogenase; Delta7-sterol 5-desaturase; Delta7-sterol-C5(6)-desaturase; 5-DES; SC5DL (gene name); ERG3 (gene name) +ec:1.14.19.21 cholesterol 7-desaturase; nvd (gene name); daf-36 (gene name) +ec:1.14.19.22 acyl-lipid omega-6 desaturase (cytochrome b5); oleate desaturase (ambiguous); linoleate synthase (ambiguous); oleoyl-CoA desaturase (incorrect); oleoylphosphatidylcholine desaturase (ambiguous); phosphatidylcholine desaturase (ambiguous); n-6 desaturase (ambiguous); FAD2 (gene name) +ec:1.14.19.23 acyl-lipid (n+3)-(Z)-desaturase (ferredoxin); acyl-lipid omega6-desaturase (ferredoxin); oleate desaturase (ambiguous); linoleate synthase (ambiguous); oleoyl-CoA desaturase (ambiguous); oleoylphosphatidylcholine desaturase (ambiguous); phosphatidylcholine desaturase (ambiguous); FAD6 (gene name) +ec:1.14.19.24 acyl-CoA 11-(E)-desaturase +ec:1.14.19.25 acyl-lipid omega-3 desaturase (cytochrome b5); FAD3 +ec:1.14.19.26 acyl-[acyl-carrier-protein] 6-desaturase; DELTA6 palmitoyl-ACP desaturase; DELTA6 16:0-ACP desaturase +ec:1.14.19.27 sn-2 palmitoyl-lipid 9-desaturase; DesC2 +ec:1.14.19.28 sn-1 stearoyl-lipid 9-desaturase; desC (gene name) +ec:1.14.19.29 sphingolipid 8-(E/Z)-desaturase; 8-sphingolipid desaturase (ambiguous); 8 fatty acid desaturase (ambiguous); DELTA8-sphingolipid desaturase (ambiguous) +ec:1.14.19.30 acyl-lipid (8-3)-desaturase; acyl-lipid 5-desaturase; Delta5-fatty-acid desaturase; DES5 (gene name); D5des (gene name); FADS1 +ec:1.14.19.31 acyl-lipid (7-3)-desaturase; D4Des (gene name); des1 (gene name); CrDelta4FAD (gene name); acyl-lipid 4-desaturase +ec:1.14.19.32 palmitoyl-CoA 14-(E/Z)-desaturase +ec:1.14.19.33 Delta12 acyl-lipid conjugase (11E,13E-forming); fatty acid Delta12-conjugase (ambiguous); FADX (gene name) +ec:1.14.19.34 acyl-lipid (9+3)-(E)-desaturase; acyl-lipid 12-(E)-desaturase; DsFAD2-1; FADX +ec:1.14.19.35 sn-2 acyl-lipid omega-3 desaturase (ferredoxin); FAD7; FAD8 +ec:1.14.19.36 sn-1 acyl-lipid omega-3 desaturase (ferredoxin); desB (gene name) +ec:1.14.19.37 acyl-CoA 5-desaturase; acyl-CoA 5-desaturase (non-methylene-interrupted) +ec:1.14.19.38 acyl-lipid Delta6-acetylenase +ec:1.14.19.39 acyl-lipid Delta12-acetylenase +ec:1.14.19.40 hex-5-enoyl-[acyl-carrier protein] acetylenase; jamB (gene name) +ec:1.14.19.41 sterol 22-desaturase; ERG5 (gene name); CYP710A (gene name) +ec:1.14.19.42 palmitoyl-[glycerolipid] 7-desaturase; FAD5 +ec:1.14.19.43 palmitoyl-[glycerolipid] 3-(E)-desaturase; FAD4 +ec:1.14.19.44 acyl-CoA (8-3)-desaturase; FADS1 (gene name); acyl-CoA 5-desaturase (methylene-interrupted) +ec:1.14.19.45 sn-1 oleoyl-lipid 12-desaturase; desA (gene name) +ec:1.14.19.46 sn-1 linoleoyl-lipid 6-desaturase; desD (gene name) +ec:1.14.19.47 acyl-lipid (9-3)-desaturase; DES6 (gene name); acyl-lipid 6-desaturase; acyl-lipid Delta6-desaturase; Delta6-desaturase (ambiguous) +ec:1.14.19.48 tert-amyl alcohol desaturase; mdpJK (gene names) +ec:1.14.19.49 tetracycline 7-halogenase; ctcP (gene name) +ec:1.14.19.50 noroxomaritidine synthase; CYP96T1 (gene name) +ec:1.14.19.51 (S)-corytuberine synthase; CYP80G2 +ec:1.14.19.52 camalexin synthase; CYP71B15 (gene name); bifunctional dihydrocamalexate synthase/camalexin synthase +ec:1.14.19.53 all-trans-retinol 3,4-desaturase; CYP27C1 (gene name) +ec:1.14.19.54 1,2-dehydroreticuline synthase; STORR; CYP82Y2 (gene name); DRS (gene name) +ec:1.14.19.55 4-hydroxybenzoate brominase (decarboxylating); bmp5 (gene name) +ec:1.14.19.56 1H-pyrrole-2-carbonyl-[peptidyl-carrier protein] chlorinase; pltA (gene name) +ec:1.14.19.57 1H-pyrrole-2-carbonyl-[peptidyl-carrier protein] brominase; bmp2 (gene name) +ec:1.14.19.58 tryptophan 5-halogenase; pyrH (gene name) +ec:1.14.19.59 tryptophan 6-halogenase; sttH (gene name); thdH (gene name) +ec:1.14.19.60 7-chloro-L-tryptophan 6-halogenase; ktzR (gene name) +ec:1.14.19.61 dihydrorhizobitoxine desaturase; rtxC (gene name) +ec:1.14.19.62 secologanin synthase +ec:1.14.19.63 pseudobaptigenin synthase +ec:1.14.19.64 (S)-stylopine synthase; (S)-cheilanthifoline oxidase (methylenedioxy-bridge-forming) +ec:1.14.19.65 (S)-cheilanthifoline synthase; CYP719A14 (gene name); (S)-scoulerine oxidase (methylenedioxy-bridge-forming) (ambiguous) +ec:1.14.19.66 berbamunine synthase; (S)-N-methylcoclaurine oxidase (C-O phenol-coupling) +ec:1.14.19.67 salutaridine synthase; (R)-reticuline oxidase (C-C phenol-coupling) +ec:1.14.19.68 (S)-canadine synthase; (S)-tetrahydroberberine synthase; (S)-tetrahydrocolumbamine oxidase (methylenedioxy-bridge-forming); CYP719A (gene name) +ec:1.14.19.69 biflaviolin synthase; CYP158A2 (gene name); cytochrome P450 158A2 +ec:1.14.19.70 mycocyclosin synthase; CYP121; rv2276 (locus name) +ec:1.14.19.71 fumitremorgin C synthase; ftmE (gene name) +ec:1.14.19.72 (-)-pluviatolide synthase; CYP719A23 (gene name) +ec:1.14.19.73 (S)-nandinine synthase; CYP719A3 +ec:1.14.19.74 (+)-piperitol/(+)-sesamin synthase; CYP81Q1; CYP81Q2; PS; PSS; SS; piperitol synthase; sesamin synthase +ec:1.14.19.75 very-long-chain acyl-lipid omega-9 desaturase; ADS2 (gene name) +ec:1.14.19.76 flavone synthase II; CYP93B16 (gene name); CYP93G1 (gene name); FNS II +ec:1.14.19.77 plasmanylethanolamine desaturase; TMEM189 (gene name); 2-acyl-1-alkyl-sn-glycero-3-phosphoethanolamine desaturase; alkylacylglycerophosphoethanolamine desaturase; alkylacylglycero-phosphorylethanolamine dehydrogenase; alkyl-acylglycerophosphorylethanolamine dehydrogenase; 1-O-alkyl-2-acyl-sn-glycero-3-phosphorylethanolamine desaturase; 1-O-alkyl 2-acyl-sn-glycero-3-phosphorylethanolamine desaturase +ec:1.14.19.78 decanoyl-[acyl-carrier protein] acetylenase; ttuB (gene name) (ambiguous) +ec:1.14.19.79 3beta,22alpha-dihydroxysteroid 3-dehydrogenase; CYP90A1 (gene name) +ec:1.14.20.1 deacetoxycephalosporin-C synthase; DAOCS; penicillin N expandase; DAOC synthase +ec:1.14.20.2 Transferred to 1.14.11.59 +ec:1.14.20.3 (5R)-carbapenem-3-carboxylate synthase; carC (gene name) +ec:1.14.20.4 anthocyanidin synthase; leucocyanidin oxygenase; leucocyanidin,2-oxoglutarate:oxygen oxidoreductase; ANS (gene name) +ec:1.14.20.5 flavone synthase I; FNSI (gene name) +ec:1.14.20.6 flavonol synthase; FLS (gene name) +ec:1.14.20.7 2-oxoglutarate/L-arginine monooxygenase/decarboxylase (succinate-forming); ethene-forming enzyme; ethylene-forming enzyme; EFE +ec:1.14.20.8 (-)-deoxypodophyllotoxin synthase; 2-ODD (gene name) +ec:1.14.20.9 L-tyrosine isonitrile desaturase; pvcB (gene name) +ec:1.14.20.10 L-tyrosine isonitrile desaturase/decarboxylase; pvcB (gene name) +ec:1.14.20.11 3-[(Z)-2-isocyanoethenyl]-1H-indole synthase; ambI3 (gene name); famH3 (gene name); L-tryptophan isonitrile desaturase/decarboxylase (3-[(Z)-2-isocyanoethenyl]-1H-indole-forming) +ec:1.14.20.12 3-[(E)-2-isocyanoethenyl]-1H-indole synthase; isnB (gene name); L-tryptophan isonitrile desaturase/decarboxylase (3-[(E)-2-isocyanoethenyl]-1H-indole-forming) +ec:1.14.20.13 6beta-hydroxyhyoscyamine epoxidase; hydroxyhyoscyamine dioxygenase; (6S)-6-hydroxyhyoscyamine,2-oxoglutarate oxidoreductase (epoxide-forming) +ec:1.14.20.14 hapalindole-type alkaloid chlorinase; ambO5 (gene name); welO5 (gene name) +ec:1.14.20.15 L-threonyl-[L-threonyl-carrier protein] 4-chlorinase; syrB2 (gene name) +ec:1.14.21.1 Transferred to 1.14.19.64 +ec:1.14.21.2 Transferred to 1.14.19.65 +ec:1.14.21.3 Transferred to 1.14.19.66 +ec:1.14.21.4 Transferred to 1.14.19.67 +ec:1.14.21.5 Transferred to 1.14.19.68 +ec:1.14.21.6 Transferred to 1.14.19.20 +ec:1.14.21.7 Transferred to 1.14.19.69 +ec:1.14.21.8 Transferred to 1.14.19.63 +ec:1.14.21.9 Transferred to 1.14.19.70 +ec:1.14.21.10 Transferred to 1.14.19.71 +ec:1.14.21.11 Transferred to 1.14.19.72 +ec:1.14.21.12 Transferred to 1.14.19.73 +ec:1.14.99.1 prostaglandin-endoperoxide synthase; prostaglandin synthase; prostaglandin G/H synthase; (PG)H synthase; PG synthetase; prostaglandin synthetase; fatty acid cyclooxygenase; prostaglandin endoperoxide synthetase +ec:1.14.99.2 kynurenine 7,8-hydroxylase; kynurenic acid hydroxylase; kynurenic hydroxylase; kynurenate 7,8-hydroxylase +ec:1.14.99.3 Transferred to 1.14.14.18 +ec:1.14.99.4 progesterone monooxygenase; progesterone hydroxylase +ec:1.14.99.5 Transferred to 1.14.19.1 +ec:1.14.99.6 Transferred to 1.14.19.2 +ec:1.14.99.7 Transferred to 1.14.13.132 +ec:1.14.99.8 Deleted entry +ec:1.14.99.9 Transferred to 1.14.14.19 +ec:1.14.99.10 Transferred to 1.14.14.16 +ec:1.14.99.11 estradiol 6beta-monooxygenase; estradiol 6beta-hydroxylase +ec:1.14.99.12 androst-4-ene-3,17-dione monooxygenase; androstene-3,17-dione hydroxylase; androst-4-ene-3,17-dione 17-oxidoreductase; androst-4-ene-3,17-dione hydroxylase; androstenedione monooxygenase; 4-androstene-3,17-dione monooxygenase +ec:1.14.99.13 Transferred to 1.14.13.23 +ec:1.14.99.14 progesterone 11alpha-monooxygenase; progesterone 11alpha-hydroxylase +ec:1.14.99.15 4-methoxybenzoate monooxygenase (O-demethylating); 4-methoxybenzoate 4-monooxygenase (O-demethylating); 4-methoxybenzoate O-demethylase; p-anisic O-demethylase; piperonylate-4-O-demethylase +ec:1.14.99.16 Transferred to 1.14.13.72 +ec:1.14.99.17 Transferred to 1.14.16.5 +ec:1.14.99.18 Deleted entry +ec:1.14.99.19 Transferred to 1.14.19.77 +ec:1.14.99.20 phylloquinone monooxygenase (2,3-epoxidizing); phylloquinone epoxidase; vitamin K 2,3-epoxidase; vitamin K epoxidase; vitamin K1 epoxidase +ec:1.14.99.21 Latia-luciferin monooxygenase (demethylating); luciferase (Latia luciferin); Latia luciferin monooxygenase (demethylating) +ec:1.14.99.22 ecdysone 20-monooxygenase; alpha-ecdysone C-20 hydroxylase; ecdysone 20-hydroxylase +ec:1.14.99.23 3-hydroxybenzoate 2-monooxygenase; 3-hydroxybenzoate 2-hydroxylase; 3-HBA-2-hydroxylase +ec:1.14.99.24 steroid 9alpha-monooxygenase; steroid 9alpha-hydroxylase +ec:1.14.99.25 Transferred to 1.14.19.3 +ec:1.14.99.26 2-hydroxypyridine 5-monooxygenase; 2-hydroxypyridine oxygenase +ec:1.14.99.27 Transferred to 1.17.3.4 +ec:1.14.99.28 Transferred to 1.14.14.84 +ec:1.14.99.29 deoxyhypusine monooxygenase; deoxyhypusine hydroxylase; deoxyhypusine dioxygenase +ec:1.14.99.30 Transferred to 1.3.5.6 +ec:1.14.99.31 Transferred to 1.14.19.24 +ec:1.14.99.32 Transferred to 1.14.19.5 +ec:1.14.99.33 Transferred to 1.14.19.39 +ec:1.14.99.34 monoprenyl isoflavone epoxidase; monoprenyl isoflavone monooxygenase; 7-O-methylluteone:O2 oxidoreductase; 7-O-methylluteone,NADPH:O2 oxidoreductase +ec:1.14.99.35 thiophene-2-carbonyl-CoA monooxygenase; thiophene-2-carboxyl-CoA dehydrogenase; thiophene-2-carboxyl-CoA hydroxylase; thiophene-2-carboxyl-CoA monooxygenase +ec:1.14.99.36 Transferred to 1.13.11.63 +ec:1.14.99.37 Transferred to 1.14.14.176 +ec:1.14.99.38 cholesterol 25-monooxygenase; cholesterol 25-hydroxylase (ambiguous) +ec:1.14.99.39 ammonia monooxygenase; AMO +ec:1.14.99.40 Transferred to 1.13.11.79 +ec:1.14.99.41 Transferred to 1.13.11.75 +ec:1.14.99.42 Transferred to 1.13.11.84 +ec:1.14.99.43 Transferred to 1.14.14.134 +ec:1.14.99.44 diapolycopene oxygenase; crtP (ambiguous) +ec:1.14.99.45 Transferred to 1.14.14.158 +ec:1.14.99.46 pyrimidine oxygenase; rutA (gene name) +ec:1.14.99.47 (+)-larreatricin hydroxylase +ec:1.14.99.48 heme oxygenase (staphylobilin-producing); haem oxygenase (ambiguous); heme oxygenase (decyclizing) (ambiguous); heme oxidase (ambiguous); haem oxidase (ambiguous); heme oxygenase (ambiguous); isdG (gene name); isdI (gene name) +ec:1.14.99.49 Transferred to 1.14.15.31 +ec:1.14.99.50 gamma-glutamyl hercynylcysteine S-oxide synthase; EgtB +ec:1.14.99.51 Transferred to 1.21.3.10 +ec:1.14.99.52 L-cysteinyl-L-histidinylsulfoxide synthase; OvoA +ec:1.14.99.53 lytic chitin monooxygenase; LPMO (ambiguous); CBP21; chitin oxidohydrolase +ec:1.14.99.54 lytic cellulose monooxygenase (C1-hydroxylating); lytic polysaccharide monooxygenase (ambiguous); LPMO (ambiguous); LPMO9A +ec:1.14.99.55 lytic starch monooxygenase; LPMO (ambiguous) +ec:1.14.99.56 lytic cellulose monooxygenase (C4-dehydrogenating) +ec:1.14.99.57 heme oxygenase (mycobilin-producing); mhuD (gene name) +ec:1.14.99.58 heme oxygenase (biliverdin-IX-beta and delta-forming); pigA (gene name) +ec:1.14.99.59 tryptamine 4-monooxygenase; PsiH +ec:1.14.99.60 3-demethoxyubiquinol 3-hydroxylase; 6-methoxy-3-methyl-2-(all-trans-polyprenyl)-1,4-benzoquinol 5-hydroxylase; COQ7 (gene name); clk-1 (gene name); ubiF (gene name) +ec:1.14.99.61 cyclooctat-9-en-7-ol 5-monooxygenase; CotB3 +ec:1.14.99.62 cyclooctatin synthase; CotB4 +ec:1.14.99.63 beta-carotene 4-ketolase; BKT (ambiguous); beta-C-4 oxygenase; beta-carotene ketolase; crtS (gene name); crtW (gene name) +ec:1.14.99.64 zeaxanthin 4-ketolase; BKT (ambiguous); crtW148 (gene name) +ec:1.14.99.65 4-amino-L-phenylalanyl-[CmlP-peptidyl-carrier-protein] 3-hydroxylase; cmlA (gene name) +ec:1.14.99.66 [histone H3]-N6,N6-dimethyl-L-lysine4 FAD-dependent demethylase; KDM1 (gene name); LSD1 (gene name); lysine-specific histone demethylase 1 +ec:1.14.99.67 alpha-N-dichloroacetyl-p-aminophenylserinol N-oxygenase; cmlI (gene name) +ec:1.14.99.68 4-aminobenzoate N-oxygenase; aurF (gene name) +ec:1.14.99.69 tRNA 2-(methylsulfanyl)-N6-isopentenyladenosine37 hydroxylase; miaE (gene name); tRNA 2-methylthio-N6-isopentenyl adenosine(37) hydroxylase; tRNA 2-(methylsulfanyl)-N6-dimethylallyladenosine37 hydroxylase +ec:1.15.1.1 superoxide dismutase; superoxidase dismutase; copper-zinc superoxide dismutase; Cu-Zn superoxide dismutase; ferrisuperoxide dismutase; superoxide dismutase I; superoxide dismutase II; SOD; Cu,Zn-SOD; Mn-SOD; Fe-SOD; SODF; SODS; SOD-1; SOD-2; SOD-3; SOD-4; hemocuprein; erythrocuprein; cytocuprein; cuprein; hepatocuprein +ec:1.15.1.2 superoxide reductase; neelaredoxin; desulfoferrodoxin +ec:1.16.1.1 mercury(II) reductase; mercuric reductase; mercurate(II) reductase; mercuric ion reductase; mercury reductase; reduced NADP:mercuric ion oxidoreductase; mer A +ec:1.16.1.2 diferric-transferrin reductase; diferric transferrin reductase; NADH diferric transferrin reductase; transferrin reductase +ec:1.16.1.3 Deleted entry +ec:1.16.1.4 Deleted entry +ec:1.16.1.5 Deleted entry +ec:1.16.1.6 cyanocobalamin reductase; MMACHC (gene name); CblC; cyanocobalamin reductase (NADPH, cyanide-eliminating); cyanocobalamin reductase (NADPH, CN-eliminating); NADPH:cyanocob(III)alamin oxidoreductase (cyanide-eliminating); cob(I)alamin, cyanide:NADP+ oxidoreductase; cyanocobalamin reductase (cyanide-eliminating) +ec:1.16.1.7 ferric-chelate reductase (NADH); ferric chelate reductase (ambiguous); iron chelate reductase (ambiguous); NADH:Fe3+-EDTA reductase; NADH2:Fe3+ oxidoreductase; ferB (gene name); Fe(II):NAD+ oxidoreductase +ec:1.16.1.8 [methionine synthase] reductase; methionine synthase cob(II)alamin reductase (methylating); methionine synthase reductase; [methionine synthase]-cobalamin methyltransferase (cob(II)alamin reducing); [methionine synthase]-methylcob(I)alamin,S-adenosylhomocysteine:NADP+ oxidoreductase +ec:1.16.1.9 ferric-chelate reductase (NADPH); ferric chelate reductase (ambiguous); iron chelate reductase (ambiguous); NADPH:Fe3+-EDTA reductase; NADPH-dependent ferric reductase; yqjH (gene name); Fe(II):NADP+ oxidoreductase +ec:1.16.1.10 ferric-chelate reductase [NAD(P)H]; ferric reductase (ambiguous) +ec:1.16.3.1 ferroxidase; ceruloplasmin; caeruloplasmin; ferroxidase I; iron oxidase; iron(II):oxygen oxidoreductase; ferro:O2 oxidoreductase; iron II:oxygen oxidoreductase; hephaestin; HEPH +ec:1.16.3.2 bacterial non-heme ferritin; FtnA; HuHF +ec:1.16.3.3 manganese oxidase; mnxG (gene name); mofA (gene name); moxA (gene name); cotA (gene name) +ec:1.16.3.4 cuproxidase; cueO (gene name); cuprous oxidase; Cu(I) oxidase; copper efflux oxidase +ec:1.16.5.1 Transferred to 7.2.1.3 +ec:1.16.8.1 Deleted entry +ec:1.16.9.1 iron:rusticyanin reductase; Cyc2 (ambiguous) +ec:1.16.98.1 Transferred to 1.16.9.1 +ec:1.16.99.1 [Co(II) methylated amine-specific corrinoid protein] reductase +ec:1.17.1.1 CDP-4-dehydro-6-deoxyglucose reductase; CDP-4-keto-6-deoxyglucose reductase; cytidine diphospho-4-keto-6-deoxy-D-glucose reductase; cytidine diphosphate 4-keto-6-deoxy-D-glucose-3-dehydrogenase; CDP-4-keto-deoxy-glucose reductase; CDP-4-keto-6-deoxy-D-glucose-3-dehydrogenase system; NAD(P)H:CDP-4-keto-6-deoxy-D-glucose oxidoreductase +ec:1.17.1.2 Transferred to 1.17.7.4 +ec:1.17.1.3 leucoanthocyanidin reductase; leucocyanidin reductase +ec:1.17.1.4 xanthine dehydrogenase; NAD+-xanthine dehydrogenase; xanthine-NAD+ oxidoreductase; xanthine/NAD+ oxidoreductase; xanthine oxidoreductase +ec:1.17.1.5 nicotinate dehydrogenase; nicotinic acid hydroxylase; nicotinate hydroxylase +ec:1.17.1.6 Transferred to 1.17.99.5 +ec:1.17.1.7 Transferred to 1.2.1.91 +ec:1.17.1.8 4-hydroxy-tetrahydrodipicolinate reductase; dihydrodipicolinate reductase (incorrect); dihydrodipicolinic acid reductase (incorrect); 2,3,4,5-tetrahydrodipicolinate:NAD(P)+ oxidoreductase (incorrect); dapB (gene name) +ec:1.17.1.9 formate dehydrogenase; formate-NAD+ oxidoreductase; FDH I; FDH II; N-FDH; formic hydrogen-lyase; formate hydrogenlyase; hydrogenlyase; NAD+-linked formate dehydrogenase; NAD+-dependent formate dehydrogenase; formate dehydrogenase (NAD+); NAD+-formate dehydrogenase; formate benzyl-viologen oxidoreductase; formic acid dehydrogenase +ec:1.17.1.10 formate dehydrogenase (NADP+); NADP+-dependent formate dehydrogenase +ec:1.17.1.11 formate dehydrogenase (NAD+, ferredoxin); electron-bifurcating formate dehydrogenase +ec:1.17.2.1 nicotinate dehydrogenase (cytochrome); nicotinic acid hydroxylase; nicotinate hydroxylase +ec:1.17.2.2 lupanine 17-hydroxylase (cytochrome c); lupanine dehydrogenase (cytochrome c) +ec:1.17.2.3 formate dehydrogenase (cytochrome-c-553) +ec:1.17.3.1 pteridine oxidase +ec:1.17.3.2 xanthine oxidase; hypoxanthine oxidase; hypoxanthine:oxygen oxidoreductase; Schardinger enzyme; xanthine oxidoreductase; hypoxanthine-xanthine oxidase; xanthine:O2 oxidoreductase; xanthine:xanthine oxidase +ec:1.17.3.3 6-hydroxynicotinate dehydrogenase; 6-hydroxynicotinic acid hydroxylase; 6-hydroxynicotinic acid dehydrogenase; 6-hydroxynicotinate hydroxylase; 6-hydroxynicotinate:O2 oxidoreductase +ec:1.17.3.4 juglone 3-hydroxylase; juglone hydroxylase; naphthoquinone hydroxylase; naphthoquinone-hydroxylase +ec:1.17.4.1 ribonucleoside-diphosphate reductase; ribonucleotide reductase (ambiguous); CDP reductase; ribonucleoside diphosphate reductase; UDP reductase; ADP reductase; nucleoside diphosphate reductase; ribonucleoside 5'-diphosphate reductase; ribonucleotide diphosphate reductase; 2'-deoxyribonucleoside-diphosphate:oxidized-thioredoxin 2'-oxidoreductase; RR; nrdB (gene name); nrdF (gene name); nrdJ (gene name) +ec:1.17.4.2 ribonucleoside-triphosphate reductase (thioredoxin); ribonucleotide reductase (ambiguous); 2'-deoxyribonucleoside-triphosphate:oxidized-thioredoxin 2'-oxidoreductase +ec:1.17.4.3 Transferred to 1.17.7.1 +ec:1.17.4.4 vitamin-K-epoxide reductase (warfarin-sensitive); VKORC1 (gene name); VKORC1L1 (gene name) +ec:1.17.4.5 vitamin-K-epoxide reductase (warfarin-insensitive) +ec:1.17.5.1 phenylacetyl-CoA dehydrogenase; phenylacetyl-CoA:acceptor oxidoreductase +ec:1.17.5.2 caffeine dehydrogenase +ec:1.17.5.3 formate dehydrogenase-N; Fdh-N; FdnGHI; nitrate-inducible formate dehydrogenase; formate dehydrogenase N; FDH-N; nitrate inducible Fdn; nitrate inducible formate dehydrogenase +ec:1.17.7.1 (E)-4-hydroxy-3-methylbut-2-enyl-diphosphate synthase (ferredoxin); 4-hydroxy-3-methylbut-2-en-1-yl diphosphate synthase (ambiguous); (E)-4-hydroxy-3-methylbut-2-en-1-yl-diphosphate:protein-disulfide oxidoreductase (hydrating) (incorrect); (E)-4-hydroxy-3-methylbut-2-enyl diphosphate synthase (ambiguous); gcpE (gene name); ISPG (gene name); (E)-4-hydroxy-3-methylbut-2-enyl-diphosphate synthase +ec:1.17.7.2 7-hydroxymethyl chlorophyll a reductase; HCAR; 71-hydroxychlorophyll-a:ferredoxin oxidoreductase +ec:1.17.7.3 (E)-4-hydroxy-3-methylbut-2-enyl-diphosphate synthase (flavodoxin); 4-hydroxy-3-methylbut-2-en-1-yl diphosphate synthase (ambiguous); (E)-4-hydroxy-3-methylbut-2-en-1-yl-diphosphate:protein-disulfide oxidoreductase (hydrating) (incorrect); (E)-4-hydroxy-3-methylbut-2-enyl diphosphate synthase (ambiguous); ispG (gene name) +ec:1.17.7.4 4-hydroxy-3-methylbut-2-en-1-yl diphosphate reductase; isopentenyl-diphosphate:NADP+ oxidoreductase; LytB; (E)-4-hydroxy-3-methylbut-2-en-1-yl diphosphate reductase; HMBPP reductase; IspH; LytB/IspH; isopentenyl-diphosphate:ferredoxin oxidoreductase +ec:1.17.8.1 hydroxysqualene dehydroxylase; hpnE (gene name) +ec:1.17.9.1 4-methylphenol dehydrogenase (hydroxylating); pchCF (gene names); p-cresol-(acceptor) oxidoreductase (hydroxylating); p-cresol methylhydroxylase; 4-cresol dehydrogenase (hydroxylating) +ec:1.17.9.2 (+)-pinoresinol hydroxylase; pinoresinol alpha-hydroxylase; pinAB (gene names) +ec:1.17.98.1 Deleted entry +ec:1.17.98.2 bacteriochlorophyllide c C-71-hydroxylase; bciD (gene name) +ec:1.17.98.3 formate dehydrogenase (coenzyme F420); coenzyme F420 reducing formate dehydrogenase; coenzyme F420-dependent formate dehydrogenase +ec:1.17.98.4 formate dehydrogenase (hydrogenase); FDHH; FDH-H; FDH-O; formate dehydrogenase H; formate dehydrogenase O +ec:1.17.99.1 Transferred to 1.17.9.1 +ec:1.17.99.2 ethylbenzene hydroxylase; ethylbenzene dehydrogenase; ethylbenzene:(acceptor) oxidoreductase +ec:1.17.99.3 3alpha,7alpha,12alpha-trihydroxy-5beta-cholestanoyl-CoA 24-hydroxylase; trihydroxycoprostanoyl-CoA oxidase; THC-CoA oxidase; THCA-CoA oxidase; 3alpha,7alpha,12alpha-trihydroxy-5beta-cholestanoyl-CoA oxidase; 3alpha,7alpha,12alpha-trihydroxy-5beta-cholestan-26-oate 24-hydroxylase +ec:1.17.99.4 uracil/thymine dehydrogenase; uracil oxidase; uracil-thymine oxidase; uracil dehydrogenase +ec:1.17.99.5 Transferred to 1.17.98.1 +ec:1.17.99.6 epoxyqueuosine reductase; oQ reductase; queG (gene name); queH (gene name) +ec:1.17.99.7 Transferred to 1.17.98.4 +ec:1.17.99.8 limonene dehydrogenase; ctmAB (gene names) +ec:1.17.99.9 heme a synthase; COX15 (gene name); ctaA (gene name) +ec:1.17.99.10 steroid C-25 hydroxylase; s25dA1 (gene name); s25dA1B3 (gene name); s25dA1C3 (gene name); cholesterol C-25 dehydrogenase; steroid C-25 dehydrogenase +ec:1.17.99.11 3-oxo-Delta1-steroid hydratase/dehydrogenase; atcABC (gene names) +ec:1.18.1.1 rubredoxin---NAD+ reductase; rubredoxin reductase; rubredoxin-nicotinamide adenine dinucleotide reductase; dihydronicotinamide adenine dinucleotide-rubredoxin reductase; reduced nicotinamide adenine dinucleotide-rubredoxin reductase; NADH-rubredoxin reductase; rubredoxin-NAD reductase; NADH: rubredoxin oxidoreductase; DPNH-rubredoxin reductase; NADH-rubredoxin oxidoreductase +ec:1.18.1.2 ferredoxin---NADP+ reductase; ferredoxin-nicotinamide adenine dinucleotide phosphate reductase; ferredoxin-NADP+ reductase; TPNH-ferredoxin reductase; ferredoxin-NADP+ oxidoreductase; NADP+:ferredoxin oxidoreductase; ferredoxin-TPN reductase; ferredoxin-NADP+-oxidoreductase; NADPH:ferredoxin oxidoreductase; ferredoxin-nicotinamide-adenine dinucleotide phosphate (oxidized) reductase +ec:1.18.1.3 ferredoxin---NAD+ reductase; ferredoxin-nicotinamide adenine dinucleotide reductase; ferredoxin reductase (ambiguous); NAD+-ferredoxin reductase; NADH-ferredoxin oxidoreductase; reductase, reduced nicotinamide adenine dinucleotide-ferredoxin; ferredoxin-NAD+ reductase; NADH-ferredoxin reductase; NADH2-ferredoxin oxidoreductase; NADH flavodoxin oxidoreductase; NADH-ferredoxin NAP reductase (component of naphthalene dioxygenase multicomponent enzyme system); ferredoxin-linked NAD+ reductase; NADH-ferredoxin TOL reductase (component of toluene dioxygenase); ferredoxin---NAD reductase +ec:1.18.1.4 rubredoxin---NAD(P)+ reductase; rubredoxin-nicotinamide adenine dinucleotide (phosphate) reductase; rubredoxin-nicotinamide adenine; dinucleotide phosphate reductase; NAD(P)+-rubredoxin oxidoreductase; NAD(P)H-rubredoxin oxidoreductase +ec:1.18.1.5 putidaredoxin---NAD+ reductase; putidaredoxin reductase; camA (gene name) +ec:1.18.1.6 adrenodoxin-NADP+ reductase; adrenodoxin reductase; nicotinamide adenine dinucleotide phosphate-adrenodoxin reductase; AdR; NADPH:adrenal ferredoxin oxidoreductase; NADPH-adrenodoxin reductase +ec:1.18.1.7 ferredoxin---NAD(P)+ reductase (naphthalene dioxygenase ferredoxin-specific); NADH-ferredoxin(NAP) reductase +ec:1.18.1.8 Transferred to 7.2.1.2 +ec:1.18.2.1 Transferred to 1.18.6.1 +ec:1.18.3.1 Transferred to 1.12.7.2 +ec:1.18.6.1 nitrogenase; reduced ferredoxin:dinitrogen oxidoreductase (ATP-hydrolysing) +ec:1.18.6.2 vanadium-dependent nitrogenase; vnfD (gene name); vnfG (gene name); vnfK (gene name) +ec:1.18.96.1 Transferred to 1.15.1.2 +ec:1.18.99.1 Transferred to 1.12.7.2 +ec:1.19.1.1 flavodoxin---NADP+ reductase; FPR +ec:1.19.6.1 nitrogenase (flavodoxin) +ec:1.20.1.1 phosphonate dehydrogenase; NAD:phosphite oxidoreductase; phosphite dehydrogenase +ec:1.20.2.1 arsenate reductase (cytochrome c); arsenite oxidase (ambiguous) +ec:1.20.4.1 arsenate reductase (glutathione/glutaredoxin); ArsC (ambiguous); arsenate:glutaredoxin oxidoreductase; arsenate reductase (glutaredoxin) +ec:1.20.4.2 methylarsonate reductase; MMA(V) reductase +ec:1.20.4.3 mycoredoxin; Mrx1; MrxI +ec:1.20.4.4 arsenate reductase (thioredoxin); ArsC (ambiguous) +ec:1.20.9.1 arsenate reductase (azurin); arsenite oxidase (ambiguous) +ec:1.20.98.1 Transferred to 1.20.9.1 +ec:1.20.99.1 arsenate reductase (donor); arsenate:(acceptor) oxidoreductase +ec:1.21.1.1 iodotyrosine deiodinase; iodotyrosine dehalogenase 1; DEHAL1 +ec:1.21.1.2 2,4-dichlorobenzoyl-CoA reductase +ec:1.21.3.1 isopenicillin-N synthase; isopenicillin N synthetase +ec:1.21.3.2 columbamine oxidase; berberine synthase +ec:1.21.3.3 reticuline oxidase; BBE; berberine bridge enzyme; berberine-bridge-forming enzyme; tetrahydroprotoberberine synthase +ec:1.21.3.4 sulochrin oxidase [(+)-bisdechlorogeodin-forming]; sulochrin oxidase +ec:1.21.3.5 sulochrin oxidase [(-)-bisdechlorogeodin-forming]; sulochrin oxidase +ec:1.21.3.6 aureusidin synthase; AmAS1 +ec:1.21.3.7 tetrahydrocannabinolic acid synthase; THCA synthase; Delta1-tetrahydrocannabinolic acid synthase +ec:1.21.3.8 cannabidiolic acid synthase; CBDA synthase +ec:1.21.3.9 Transferred to 1.21.98.2 +ec:1.21.3.10 hercynylcysteine S-oxide synthase; Egt1; Egt-1 +ec:1.21.4.1 D-proline reductase; prdAB (gene names); D-proline reductase (dithiol) +ec:1.21.4.2 glycine reductase +ec:1.21.4.3 sarcosine reductase +ec:1.21.4.4 betaine reductase; acetyl-phosphate trimethylamine:thioredoxin disulfide oxidoreductase (N,N,N-trimethylglycine-forming) +ec:1.21.4.5 tetrachlorohydroquinone reductive dehalogenase; pcpC (gene name) +ec:1.21.98.1 cyclic dehypoxanthinyl futalosine synthase; MqnC; dehypoxanthinyl futalosine cyclase +ec:1.21.98.2 dichlorochromopyrrolate synthase; RebD; chromopyrrolic acid synthase; chromopyrrolate synthase +ec:1.21.98.3 anaerobic magnesium-protoporphyrin IX monomethyl ester cyclase; bchE (gene name); MPE cyclase (ambiguous) +ec:1.21.98.4 PqqA peptide cyclase; pqqE (gene name) +ec:1.21.99.1 beta-cyclopiazonate dehydrogenase; beta-cyclopiazonate oxidocyclase; beta-cyclopiazonic oxidocyclase; beta-cyclopiazonate:(acceptor) oxidoreductase (cyclizing) +ec:1.21.99.2 Transferred to 1.21.99.2 and 1.21.98.1 +ec:1.21.99.3 thyroxine 5-deiodinase; diiodothyronine 5'-deiodinase (ambiguous); iodothyronine 5-deiodinase; iodothyronine inner ring monodeiodinase; type III iodothyronine deiodinase +ec:1.21.99.4 thyroxine 5'-deiodinase; diiodothyronine 5'-deiodinase [ambiguous]; iodothyronine 5'-deiodinase; iodothyronine outer ring monodeiodinase; type I iodothyronine deiodinase; type II iodothyronine deiodinase; thyroxine 5-deiodinase [misleading]; L-thyroxine iodohydrolase (reducing) +ec:1.21.99.5 tetrachloroethene reductive dehalogenase; tetrachloroethene reductase +ec:1.22.1.1 Transferred to 1.21.1.1 +ec:1.23.1.1 (+)-pinoresinol reductase; pinoresinol/lariciresinol reductase; pinoresinol-lariciresinol reductases; (+)-pinoresinol/(+)-lariciresinol; (+)-pinoresinol-(+)-lariciresinol reductase; PLR +ec:1.23.1.2 (+)-lariciresinol reductase; pinoresinol/lariciresinol reductase; pinoresinol-lariciresinol reductases; (+)-pinoresinol/(+)-lariciresinol; (+)-pinoresinol-(+)-lariciresinol reductase; PLR +ec:1.23.1.3 (-)-pinoresinol reductase; pinoresinol/lariciresinol reductase; pinoresinol-lariciresinol reductases; (-)-pinoresinol-(-)-lariciresinol reductase; PLR +ec:1.23.1.4 (-)-lariciresinol reductase; pinoresinol/lariciresinol reductase; pinoresinol-lariciresinol reductases; (-)-pinoresinol-(-)-lariciresinol reductase; PLR +ec:1.23.5.1 violaxanthin de-epoxidase; VDE +ec:1.97.1.1 chlorate reductase; chlorate reductase C +ec:1.97.1.2 pyrogallol hydroxytransferase; 1,2,3,5-tetrahydroxybenzene hydroxyltransferase; 1,2,3,5-tetrahydroxybenzene:pyrogallol transhydroxylase; 1,2,3,5-tetrahydroxybenzene-pyrogallol hydroxyltransferase (transhydroxylase); pyrogallol hydroxyltransferase; 1,2,3,5-tetrahydroxybenzene:1,2,3-trihydroxybenzene hydroxyltransferase +ec:1.97.1.3 Transferred to 1.12.98.4 +ec:1.97.1.4 [formate-C-acetyltransferase]-activating enzyme; PFL activase; PFL-glycine:S-adenosyl-L-methionine H transferase (flavodoxin-oxidizing, S-adenosyl-L-methionine-cleaving); formate acetyltransferase activating enzyme; formate acetyltransferase-glycine dihydroflavodoxin:S-adenosyl-L-methionine oxidoreductase (S-adenosyl-L-methionine cleaving); pyruvate formate-lyase activating enzyme; pyruvate formate-lyase 1 activating enzyme +ec:1.97.1.5 Transferred to 1.20.4.1 +ec:1.97.1.6 Transferred to 1.20.99.1 +ec:1.97.1.7 Transferred to 1.20.4.2 +ec:1.97.1.8 Transferred to 1.21.99.5 +ec:1.97.1.9 selenate reductase +ec:1.97.1.10 Transferred to 1.21.99.4 +ec:1.97.1.11 Transferred to 1.21.99.3 +ec:1.97.1.12 photosystem I +ec:1.98.1.1 Transferred to 1.12.7.2 +ec:1.99.1.1 Transferred to 1.12.7.2 +ec:1.99.1.2 Transferred to 1.14.16.1 +ec:1.99.1.3 Deleted entry +ec:1.99.1.4 Deleted entry +ec:1.99.1.5 Transferred to 1.14.13.9 +ec:1.99.1.6 Deleted entry +ec:1.99.1.7 Transferred to 1.14.15.4 +ec:1.99.1.8 Deleted entry +ec:1.99.1.9 Transferred to 1.14.99.9 +ec:1.99.1.10 Deleted entry +ec:1.99.1.11 Transferred to 1.14.99.10 +ec:1.99.1.12 Deleted entry +ec:1.99.1.13 Deleted entry +ec:1.99.1.14 Transferred to 1.13.11.27 +ec:1.99.2.1 Transferred to 1.13.11.12 +ec:1.99.2.2 Transferred to 1.13.11.1 +ec:1.99.2.3 Transferred to 1.13.11.3 +ec:1.99.2.4 Transferred to 1.13.11.4 +ec:1.99.2.5 Transferred to 1.13.11.5 +ec:1.99.2.6 Transferred to 1.13.99.1 +ec:2.1.1.1 nicotinamide N-methyltransferase; nicotinamide methyltransferase +ec:2.1.1.2 guanidinoacetate N-methyltransferase; GA methylpherase; guanidinoacetate methyltransferase; guanidinoacetate transmethylase; methionine-guanidinoacetic transmethylase; guanidoacetate methyltransferase +ec:2.1.1.3 thetin---homocysteine S-methyltransferase; dimethylthetin-homocysteine methyltransferase; thetin-homocysteine methylpherase +ec:2.1.1.4 acetylserotonin O-methyltransferase; hydroxyindole methyltransferase; hydroxyindole O-methyltransferase; N-acetylserotonin O-methyltransferase; acetylserotonin methyltransferase +ec:2.1.1.5 betaine---homocysteine S-methyltransferase; betaine-homocysteine methyltransferase; betaine-homocysteine transmethylase +ec:2.1.1.6 catechol O-methyltransferase; COMT I ; COMT II; S-COMT (soluble form of catechol-O-methyltransferase); MB-COMT (membrane-bound form of catechol-O-methyltransferase); catechol methyltransferase; catecholamine O-methyltransferase +ec:2.1.1.7 nicotinate N-methyltransferase; furanocoumarin 8-methyltransferase; furanocoumarin 8-O-methyltransferase +ec:2.1.1.8 histamine N-methyltransferase; histamine 1-methyltransferase; histamine methyltransferase; histamine-methylating enzyme; imidazolemethyltransferase; S-adenosylmethionine-histamine N-methyltransferase +ec:2.1.1.9 thiol S-methyltransferase; S-methyltransferase; thiol methyltransferase; TMT +ec:2.1.1.10 homocysteine S-methyltransferase; S-adenosylmethionine homocysteine transmethylase; S-methylmethionine homocysteine transmethylase; adenosylmethionine transmethylase; methylmethionine:homocysteine methyltransferase; adenosylmethionine:homocysteine methyltransferase; homocysteine methylase; homocysteine methyltransferase; homocysteine transmethylase; L-homocysteine S-methyltransferase; S-adenosyl-L-methionine:L-homocysteine methyltransferase; S-adenosylmethionine-homocysteine transmethylase; S-adenosylmethionine:homocysteine methyltransferase +ec:2.1.1.11 magnesium protoporphyrin IX methyltransferase +ec:2.1.1.12 methionine S-methyltransferase; S-adenosyl methionine:methionine methyl transferase; methionine methyltransferase; S-adenosylmethionine transmethylase; S-adenosylmethionine-methionine methyltransferase +ec:2.1.1.13 methionine synthase; 5-methyltetrahydrofolate---homocysteine S-methyltransferase; 5-methyltetrahydrofolate---homocysteine transmethylase; N-methyltetrahydrofolate:L-homocysteine methyltransferase; N5-methyltetrahydrofolate methyltransferase; N5-methyltetrahydrofolate-homocysteine cobalamin methyltransferase; N5-methyltetrahydrofolic---homocysteine vitamin B12 transmethylase; B12 N5-methyltetrahydrofolate homocysteine methyltransferase; methyltetrahydrofolate---homocysteine vitamin B12 methyltransferase; tetrahydrofolate methyltransferase; tetrahydropteroylglutamate methyltransferase; tetrahydropteroylglutamic methyltransferase; vitamin B12 methyltransferase; cobalamin-dependent methionine synthase; methionine synthase (cobalamin-dependent); MetH +ec:2.1.1.14 5-methyltetrahydropteroyltriglutamate---homocysteine S-methyltransferase; tetrahydropteroyltriglutamate methyltransferase; homocysteine methylase; methyltransferase, tetrahydropteroylglutamate-homocysteine transmethylase; methyltetrahydropteroylpolyglutamate:homocysteine methyltransferase; cobalamin-independent methionine synthase; methionine synthase (cobalamin-independent); MetE +ec:2.1.1.15 fatty-acid O-methyltransferase; fatty acid methyltransferase; fatty acid O-methyltransferase +ec:2.1.1.16 methylene-fatty-acyl-phospholipid synthase; unsaturated-phospholipid methyltransferase +ec:2.1.1.17 phosphatidylethanolamine N-methyltransferase; PEMT; LMTase; lipid methyl transferase; phosphatidylethanolamine methyltransferase; phosphatidylethanolamine-N-methylase; phosphatidylethanolamine-S-adenosylmethionine methyltransferase +ec:2.1.1.18 polysaccharide O-methyltransferase; polysaccharide methyltransferase; acylpolysacharide 6-methyltransferase; S-adenosyl-L-methionine:1,4-alpha-D-glucan 6-O-methyltransferase +ec:2.1.1.19 trimethylsulfonium---tetrahydrofolate N-methyltransferase; trimethylsulfonium-tetrahydrofolate methyltransferase +ec:2.1.1.20 glycine N-methyltransferase; glycine methyltransferase; S-adenosyl-L-methionine:glycine methyltransferase; GNMT +ec:2.1.1.21 methylamine---glutamate N-methyltransferase; N-methylglutamate synthase; methylamine-glutamate methyltransferase +ec:2.1.1.22 carnosine N-methyltransferase +ec:2.1.1.23 Deleted entry +ec:2.1.1.24 Deleted entry +ec:2.1.1.25 phenol O-methyltransferase; PMT +ec:2.1.1.26 iodophenol O-methyltransferase +ec:2.1.1.27 tyramine N-methyltransferase; DIB O-methyltransferase (3,5-diiodo-4-hydroxy-benzoic acid); S-adenosyl-methionine:tyramine N-methyltransferase; tyramine methylpherase +ec:2.1.1.28 phenylethanolamine N-methyltransferase; noradrenaline N-methyltransferase; noradrenalin N-methyltransferase; norepinephrine methyltransferase; norepinephrine N-methyltransferase; phenethanolamine methyltransferase; phenethanolamine N-methyltransferase +ec:2.1.1.29 Transferred to 2.1.1.202 and 2.1.1.203 and 2.1.1.204 +ec:2.1.1.30 Deleted entry +ec:2.1.1.31 Transferred to 2.1.1.221 and 2.1.1.228 +ec:2.1.1.32 Transferred to 2.1.1.213 and 2.1.1.214 and 2.1.1.215 and 2.1.1.216 +ec:2.1.1.33 tRNA (guanine46-N7)-methyltransferase; Trm8/Trm82; TrmB; tRNA (m7G46) methyltransferase; transfer ribonucleate guanine 7-methyltransferase; 7-methylguanine transfer ribonucleate methylase; tRNA guanine 7-methyltransferase; N7-methylguanine methylase; S-adenosyl-L-methionine:tRNA (guanine-7-N-)-methyltransferase +ec:2.1.1.34 tRNA (guanosine18-2'-O)-methyltransferase; tRNA (Gm18) 2'-O-methyltransferase; tRNA (Gm18) methyltransferase; TrmH; SpoU +ec:2.1.1.35 tRNA (uracil54-C5)-methyltransferase; transfer RNA uracil54 5-methyltransferase; transfer RNA uracil54 methylase; tRNA uracil54 5-methyltransferase; m5U54-methyltransferase; tRNA:m5U54-methyltransferase; RUMT; TrmA; 5-methyluridine54 tRNA methyltransferase; tRNA(uracil-54,C5)-methyltransferase; Trm2; tRNA(m5U54)methyltransferase +ec:2.1.1.36 Transferred to 2.1.1.217 and 2.1.1.218 and 2.1.1.219 and 2.1.1.220 +ec:2.1.1.37 DNA (cytosine-5-)-methyltransferase; EcoRI methylase; DNA 5-cytosine methylase; DNA cytosine C5 methylase; DNA cytosine methylase; DNA methylase (ambiguous); DNA methyltransferase (ambiguous); DNA transmethylase (ambiguous); DNA-cytosine 5-methylase; DNA-cytosine methyltransferase; HpaII methylase; HpaII' methylase; M.BsuRIa; M.BsuRIb; Type II DNA methylase; cytosine 5-methyltransferase; cytosine DNA methylase; cytosine DNA methyltransferase; cytosine-specific DNA methyltransferase; deoxyribonucleate methylase (ambiguous); deoxyribonucleate methyltransferase (ambiguous); deoxyribonucleic (cytosine-5-)-methyltransferase; deoxyribonucleic acid (cytosine-5-)-methyltransferase; deoxyribonucleic acid methylase (ambiguous); deoxyribonucleic acid methyltransferase (ambiguous); deoxyribonucleic acid modification methylase (ambiguous); deoxyribonucleic methylase (ambiguous); methylphosphotriester-DNA methyltransferase (ambiguous); modification methylase (ambiguous); restriction-modification system (ambiguous); site-specific DNA-methyltransferase (cytosine-specific); DNA-(cytosine C5)-methylase +ec:2.1.1.38 O-demethylpuromycin O-methyltransferase; O-demethylpuromycin methyltransferase +ec:2.1.1.39 inositol 3-methyltransferase; inositol L-1-methyltransferase; myo-inositol 1-methyltransferase; S-adenosylmethionine:myo-inositol 1-methyltransferase; myo-inositol 1-O-methyltransferase (name based on 1L-numbering system and not 1D-numbering); S-adenosyl-L-methionine:myo-inositol 1-O-methyltransferase +ec:2.1.1.40 inositol 1-methyltransferase; inositol D-1-methyltransferase; S-adenosylmethionine:myo-inositol 3-methyltransferase; myo-inositol 3-O-methyltransferase; inositol 3-O-methyltransferase (name based on 1L-numbering system and not 1D-numbering); S-adenosyl-L-methionine:myo-inositol 3-O-methyltransferase +ec:2.1.1.41 sterol 24-C-methyltransferase; Delta24-methyltransferase; Delta24-sterol methyltransferase; zymosterol-24-methyltransferase; S-adenosyl-4-methionine:sterol Delta24-methyltransferase; SMT1; 24-sterol C-methyltransferase; S-adenosyl-L-methionine:Delta24(23)-sterol methyltransferase; phytosterol methyltransferase +ec:2.1.1.42 flavone 3'-O-methyltransferase; o-dihydric phenol methyltransferase; luteolin methyltransferase; luteolin 3'-O-methyltransferase; o-diphenol m-O-methyltransferase; o-dihydric phenol meta-O-methyltransferase; S-adenosylmethionine:flavone/flavonol 3'-O-methyltransferase; quercetin 3'-O-methyltransferase +ec:2.1.1.43 Transferred to 2.1.1.354 and 2.1.1.355 and 2.1.1.356 and 2.1.1.357 and 2.1.1.358 and 2.1.1.359 and 2.1.1.360 and 2.1.1.361 and 2.1.1.362 +ec:2.1.1.44 L-histidine Nalpha-methyltransferase; dimethylhistidine N-methyltransferase; dimethylhistidine methyltransferase; histidine-alpha-N-methyltransferase; S-adenosyl-L-methionine:alpha-N,alpha-N-dimethyl-L-histidine alpha-N-methyltransferase; S-adenosyl-L-methionine:Nalpha,Nalpha-dimethyl-L-histidine Nalpha-methyltransferase +ec:2.1.1.45 thymidylate synthase; dTMP synthase; thymidylate synthetase; methylenetetrahydrofolate:dUMP C-methyltransferase; TMP synthetase +ec:2.1.1.46 isoflavone 4'-O-methyltransferase; 4'-hydroxyisoflavone methyltransferase; isoflavone methyltransferase; isoflavone O-methyltransferase +ec:2.1.1.47 indolepyruvate C-methyltransferase; ind1 (gene name); indolepyruvate methyltransferase; indolepyruvate 3-methyltransferase; indolepyruvic acid methyltransferase; S-adenosyl-L-methionine:indolepyruvate C-methyltransferase +ec:2.1.1.48 Transferred to 2.1.1.181 and 2.1.1.182 and 2.1.1.183 and 2.1.1.184 +ec:2.1.1.49 amine N-methyltransferase; nicotine N-methyltransferase; tryptamine N-methyltransferase; arylamine N-methyltransferase; tryptamine methyltransferase +ec:2.1.1.50 loganate O-methyltransferase; loganate methyltransferase; S-adenosyl-L-methionine:loganic acid methyltransferase +ec:2.1.1.51 Transferred to 2.1.1.187 and 2.1.1.188 +ec:2.1.1.52 Transferred to 2.1.1.171 and 2.1.1.172 and 2.1.1.173 and 2.1.1.174 +ec:2.1.1.53 putrescine N-methyltransferase; putrescine methyltransferase +ec:2.1.1.54 deoxycytidylate C-methyltransferase; deoxycytidylate methyltransferase; dCMP methyltransferase +ec:2.1.1.55 tRNA (adenine-N6-)-methyltransferase; S-adenosyl-L-methionine:tRNA (adenine-6-N-)-methyltransferase +ec:2.1.1.56 mRNA (guanine-N7)-methyltransferase; RNMT (gene name); ABD1 (gene name); messenger ribonucleate guanine 7-methyltransferase; guanine-7-methyltransferase; messenger RNA guanine 7-methyltransferase; S-adenosyl-L-methionine:mRNA (guanine-7-N)-methyltransferase +ec:2.1.1.57 methyltransferase cap1; FTSJD2 (gene name); messenger ribonucleate nucleoside 2'-methyltransferase; messenger RNA (nucleoside-2'-)-methyltransferase; MTR1; cap1-MTase; mRNA (nucleoside-2'-O)-methyltransferase (ambiguous); S-adenosyl-L-methionine:mRNA (nucleoside-2'-O)-methyltransferase +ec:2.1.1.58 Deleted entry +ec:2.1.1.59 [cytochrome c]-lysine N-methyltransferase; cytochrome c (lysine) methyltransferase; cytochrome c methyltransferase; cytochrome c-specific protein methylase III; cytochrome c-specific protein-lysine methyltransferase; S-adenosyl-L-methionine:[cytochrome c]-L-lysine 6-N-methyltransferase +ec:2.1.1.60 calmodulin-lysine N-methyltransferase; S-adenosylmethionine:calmodulin (lysine) N-methyltransferase; S-adenosyl-L-methionine:calmodulin-L-lysine 6-N-methyltransferase +ec:2.1.1.61 tRNA 5-(aminomethyl)-2-thiouridylate-methyltransferase; transfer ribonucleate 5-methylaminomethyl-2-thiouridylate 5-methyltransferase; tRNA 5-methylaminomethyl-2-thiouridylate 5'-methyltransferase; S-adenosyl-L-methionine:tRNA (5-methylaminomethyl-2-thio-uridylate)-methyltransferase; tRNA (5-methylaminomethyl-2-thiouridylate)-methyltransferase +ec:2.1.1.62 mRNA (2'-O-methyladenosine-N6-)-methyltransferase; messenger ribonucleate 2'-O-methyladenosine NG-methyltransferase; S-adenosyl-L-methionine:mRNA (2'-O-methyladenosine-6-N-)-methyltransferase +ec:2.1.1.63 methylated-DNA---[protein]-cysteine S-methyltransferase; ada (gene name); ogt (gene name); MGT1 (gene name); MGMT (gene name) +ec:2.1.1.64 3-demethylubiquinol 3-O-methyltransferase; 5-demethylubiquinone-9 methyltransferase; OMHMB-methyltransferase; 2-octaprenyl-3-methyl-5-hydroxy-6-methoxy-1,4-benzoquinone methyltransferase; S-adenosyl-L-methionine:2-octaprenyl-3-methyl-5-hydroxy-6-methoxy-1,4-benzoquinone-O-methyltransferase; COQ3 (gene name); Coq3 O-methyltransferase; 3-demethylubiquinone-9 3-methyltransferase; ubiG (gene name, ambiguous) +ec:2.1.1.65 licodione 2'-O-methyltransferase +ec:2.1.1.66 Deleted entry +ec:2.1.1.67 thiopurine S-methyltransferase; mercaptopurine methyltransferase; thiopurine methyltransferase; 6-thiopurine transmethylase; TPMT +ec:2.1.1.68 caffeate O-methyltransferase; caffeate methyltransferase; caffeate 3-O-methyltransferase; S-adenosyl-L-methionine:caffeic acid-O-methyltransferase +ec:2.1.1.69 5-hydroxyfuranocoumarin 5-O-methyltransferase; furanocoumarin 5-methyltransferase; furanocoumarin 5-O-methyltransferase; bergaptol 5-O-methyltransferase; bergaptol O-methyltransferase; bergaptol methyltransferase; S-adenosyl-L-methionine:bergaptol O-methyltransferase; BMT; S-adenosyl-L-methionine:5-hydroxyfuranocoumarin 5-O-methyltransferase +ec:2.1.1.70 8-hydroxyfuranocoumarin 8-O-methyltransferase; furanocoumarin 8-methyltransferase; furanocoumarin 8-O-methyl-transferase; xanthotoxol 8-O-methyltransferase; XMT; 8-hydroxyfuranocoumarin 8-O-methyltransferase; SAM:xanthotoxol O-methyltransferase; S-adenosyl-L-methionine:8-hydroxyfuranocoumarin 8-O-methyltransferase; xanthotoxol methyltransferase; xanthotoxol O-methyltransferase; S-adenosyl-L-methionine:xanthotoxol O-methyltransferase; S-adenosyl-L-methionine-xanthotoxol O-methyltransferase +ec:2.1.1.71 phosphatidyl-N-methylethanolamine N-methyltransferase; phosphatidylmonomethylethanolamine methyltransferase; methyltransferase II; phospholipid methyltransferase; PLMT; phosphatidyl-N-methylethanolamine methyltransferase; phosphatidyl-N-monomethylethanolamine methyltransferase; phosphatidylethanolamine methyltransferase I; phosphatidylmonomethylethanolamine methyltransferase +ec:2.1.1.72 site-specific DNA-methyltransferase (adenine-specific); modification methylase; restriction-modification system +ec:2.1.1.73 Deleted entry +ec:2.1.1.74 methylenetetrahydrofolate---tRNA-(uracil54-C5)-methyltransferase [NAD(P)H-oxidizing]; folate-dependent ribothymidyl synthase; methylenetetrahydrofolate-transfer ribonucleate uracil 5-methyltransferase; 5,10-methylenetetrahydrofolate:tRNA-UPsiC (uracil-5-)-methyl-transferase; 5,10-methylenetetrahydrofolate:tRNA (uracil-5-)-methyl-transferase; TrmFO; folate/FAD-dependent tRNA T54 methyltransferase; methylenetetrahydrofolate---tRNA-(uracil54-C5)-methyltransferase (FADH2-oxidizing) +ec:2.1.1.75 apigenin 4'-O-methyltransferase; flavonoid O-methyltransferase; flavonoid methyltransferase; S-adenosyl-L-methionine:5,7,4'-trihydroxyflavone 4'-O-methyltransferase +ec:2.1.1.76 quercetin 3-O-methyltransferase; flavonol 3-O-methyltransferase; flavonoid 3-methyltransferase +ec:2.1.1.77 protein-L-isoaspartate(D-aspartate) O-methyltransferase; protein-L-isoaspartate O-methyltransferase; protein-beta-aspartate O-methyltransferase; D-aspartyl/L-isoaspartyl methyltransferase; L-isoaspartyl/D-aspartyl protein carboxyl methyltransferase; protein (D-aspartate) methyltransferase; protein D-aspartate methyltransferase; protein L-isoaspartate methyltransferase; protein L-isoaspartyl methyltransferase; protein O-methyltransferase (L-isoaspartate); L-aspartyl/L-isoaspartyl protein methyltransferase +ec:2.1.1.78 isoorientin 3'-O-methyltransferase; isoorientin 3'-methyltransferase +ec:2.1.1.79 cyclopropane-fatty-acyl-phospholipid synthase; cyclopropane synthetase; unsaturated-phospholipid methyltransferase; cyclopropane synthase; cyclopropane fatty acid synthase; cyclopropane fatty acid synthetase; CFA synthase +ec:2.1.1.80 protein-glutamate O-methyltransferase; methyl-accepting chemotaxis protein O-methyltransferase; S-adenosylmethionine-glutamyl methyltransferase; methyl-accepting chemotaxis protein methyltransferase II; S-adenosylmethionine:protein-carboxyl O-methyltransferase; protein methylase II; MCP methyltransferase I; MCP methyltransferase II; protein O-methyltransferase; protein(aspartate)methyltransferase; protein(carboxyl)methyltransferase; protein carboxyl-methylase; protein carboxyl-O-methyltransferase; protein carboxylmethyltransferase II; protein carboxymethylase; protein carboxymethyltransferase; protein methyltransferase II +ec:2.1.1.81 Deleted entry +ec:2.1.1.82 3-methylquercetin 7-O-methyltransferase; flavonol 7-O-methyltransferase; flavonol 7-methyltransferase; 7-OMT; S-adenosyl-L-methionine:3',4',5,7-tetrahydroxy-3-methoxyflavone 7-O-methyltransferase; 3-methylquercitin 7-O-methyltransferase [mis-spelt] +ec:2.1.1.83 3,7-dimethylquercetin 4'-O-methyltransferase; flavonol 4'-O-methyltransferase; flavonol 4'-methyltransferase; 4'-OMT; S-adenosyl-L-methionine:3',4',5-trihydroxy-3,7-dimethoxyflavone 4'-O-methyltransferase; 3,7-dimethylquercitin 4'-O-methyltransferase [mis-spelt] +ec:2.1.1.84 methylquercetagetin 6-O-methyltransferase; flavonol 6-O-methyltransferase; flavonol 6-methyltransferase; 6-OMT; S-adenosyl-L-methionine:3',4',5,6-tetrahydroxy-3,7-dimethoxyflavone 6-O-methyltransferase +ec:2.1.1.85 protein-histidine N-methyltransferase; protein methylase IV; protein (histidine) methyltransferase; actin-specific histidine methyltransferase; S-adenosyl methionine:protein-histidine N-methyltransferase +ec:2.1.1.86 tetrahydromethanopterin S-methyltransferase; tetrahydromethanopterin methyltransferase; mtrA-H (gene names); cmtA (gene name); N5-methyltetrahydromethanopterin---coenzyme M methyltransferase; 5-methyl-5,6,7,8-tetrahydromethanopterin:2-mercaptoethanesulfonate 2-methyltransferase +ec:2.1.1.87 pyridine N-methyltransferase; pyridine methyltransferase +ec:2.1.1.88 8-hydroxyquercetin 8-O-methyltransferase; flavonol 8-O-methyltransferase; flavonol 8-methyltransferase; S-adenosyl-L-methionine:3,3',4',5,7,8-hexahydroxyflavone 8-O-methyltransferase; 8-hydroxyquercitin 8-O-methyltransferase [mis-spelt] +ec:2.1.1.89 tetrahydrocolumbamine 2-O-methyltransferase; tetrahydrocolumbamine methyltransferase +ec:2.1.1.90 methanol---corrinoid protein Co-methyltransferase; methanol cobalamin methyltransferase; methanol:5-hydroxybenzimidazolylcobamide methyltransferase; MT 1 (ambiguous); methanol---5-hydroxybenzimidazolylcobamide Co-methyltransferase; mtaB (gene name) +ec:2.1.1.91 isobutyraldoxime O-methyltransferase; aldoxime methyltransferase; S-adenosylmethionine:aldoxime O-methyltransferase; aldoxime O-methyltransferase +ec:2.1.1.92 Deleted entry +ec:2.1.1.93 Deleted entry +ec:2.1.1.94 tabersonine 16-O-methyltransferase; 11-demethyl-17-deacetylvindoline 11-methyltransferase; 11-O-demethyl-17-O-deacetylvindoline O-methyltransferase; S-adenosyl-L-methionine:11-O-demethyl-17-O-deacetylvindoline 11-O-methyltransferase +ec:2.1.1.95 tocopherol C-methyltransferase; gamma-tocopherol methyltransferase; VTE4 (gene name); S-adenosyl-L-methionine:gamma-tocopherol 5-O-methyltransferase (incorrect); tocopherol O-methyltransferase (incorrect) +ec:2.1.1.96 thioether S-methyltransferase; S-adenosyl-L-methionine:thioether S-methyltransferase; thioether methyltransferase +ec:2.1.1.97 3-hydroxyanthranilate 4-C-methyltransferase; 3-hydroxyanthranilate 4-methyltransferase +ec:2.1.1.98 diphthine synthase; S-adenosyl-L-methionine:elongation factor 2 methyltransferase (ambiguous); diphthine methyltransferase (ambiguous); S-adenosyl-L-methionine:2-(3-carboxy-3-aminopropyl)-L-histidine-[translation elongation factor 2] methyltransferase; Dph5 (ambiguous) +ec:2.1.1.99 3-hydroxy-16-methoxy-2,3-dihydrotabersonine N-methyltransferase; 16-methoxy-2,3-dihydro-3-hydroxytabersonine methyltransferase; NMT; 16-methoxy-2,3-dihydro-3-hydroxytabersonine N-methyltransferase; S-adenosyl-L-methionine:16-methoxy-2,3-dihydro-3-hydroxytabersonine N-methyltransferase +ec:2.1.1.100 protein-S-isoprenylcysteine O-methyltransferase; farnesyl cysteine C-terminal methyltransferase; farnesyl-protein carboxymethyltransferase; protein C-terminal farnesylcysteine O-methyltransferase; farnesylated protein C-terminal O-methyltransferase; isoprenylated protein methyltransferase; prenylated protein methyltransferase; protein S-farnesylcysteine C-terminal methyltransferase; S-farnesylcysteine methyltransferase; prenylcysteine carboxylmethyltransferase [misleading]; prenylcysteine carboxymethyltransferase [misleading]; prenylcysteine methyltransferase +ec:2.1.1.101 macrocin O-methyltransferase; macrocin methyltransferase; S-adenosyl-L-methionine-macrocin O-methyltransferase; MOMT (ambiguous); tylF (gene name) +ec:2.1.1.102 demethylmacrocin O-methyltransferase; demethylmacrocin methyltransferase; DMOMT +ec:2.1.1.103 phosphoethanolamine N-methyltransferase; phosphoethanolamine methyltransferase +ec:2.1.1.104 caffeoyl-CoA O-methyltransferase; caffeoyl coenzyme A methyltransferase; caffeoyl-CoA 3-O-methyltransferase; trans-caffeoyl-CoA 3-O-methyltransferase +ec:2.1.1.105 N-benzoyl-4-hydroxyanthranilate 4-O-methyltransferase; N-benzoyl-4-hydroxyanthranilate 4-methyltransferase; benzoyl-CoA:anthranilate N-benzoyltransferase +ec:2.1.1.106 tryptophan 2-C-methyltransferase; tsrM (gene name); tryptophan 2-methyltransferase; S-adenosylmethionine:tryptophan 2-methyltransferase +ec:2.1.1.107 uroporphyrinogen-III C-methyltransferase; uroporphyrinogen methyltransferase; uroporphyrinogen-III methyltransferase; adenosylmethionine-uroporphyrinogen III methyltransferase; S-adenosyl-L-methionine-dependent uroporphyrinogen III methylase; uroporphyrinogen-III methylase; SirA; CysG; CobA [ambiguous - see EC 2.5.1.17] SUMT; uroporphyrin-III C-methyltransferase (incorrect); S-adenosyl-L-methionine:uroporphyrin-III C-methyltransferase (incorrect) +ec:2.1.1.108 6-hydroxymellein O-methyltransferase; 6-hydroxymellein methyltransferase +ec:2.1.1.109 demethylsterigmatocystin 6-O-methyltransferase; demethylsterigmatocystin methyltransferase; O-methyltransferase I +ec:2.1.1.110 sterigmatocystin 8-O-methyltransferase; sterigmatocystin methyltransferase; O-methyltransferase II; sterigmatocystin 7-O-methyltransferase (incorrect); S-adenosyl-L-methionine:sterigmatocystin 7-O-methyltransferase (incorrect); OmtA +ec:2.1.1.111 anthranilate N-methyltransferase; anthranilic acid N-methyltransferase +ec:2.1.1.112 glucuronoxylan 4-O-methyltransferase +ec:2.1.1.113 site-specific DNA-methyltransferase (cytosine-N4-specific); modification methylase; restriction-modification system; DNA[cytosine-N4]methyltransferase; m4C-forming MTase; S-adenosyl-L-methionine:DNA-cytosine 4-N-methyltransferase +ec:2.1.1.114 polyprenyldihydroxybenzoate methyltransferase; 3,4-dihydroxy-5-hexaprenylbenzoate methyltransferase; dihydroxyhexaprenylbenzoate methyltransferase; COQ3 (gene name); Coq3 O-methyltransferase; DHHB O-methyltransferase +ec:2.1.1.115 (RS)-1-benzyl-1,2,3,4-tetrahydroisoquinoline N-methyltransferase; norreticuline N-methyltransferase +ec:2.1.1.116 3'-hydroxy-N-methyl-(S)-coclaurine 4'-O-methyltransferase +ec:2.1.1.117 (S)-scoulerine 9-O-methyltransferase +ec:2.1.1.118 columbamine O-methyltransferase +ec:2.1.1.119 10-hydroxydihydrosanguinarine 10-O-methyltransferase +ec:2.1.1.120 12-hydroxydihydrochelirubine 12-O-methyltransferase +ec:2.1.1.121 6-O-methylnorlaudanosoline 5'-O-methyltransferase +ec:2.1.1.122 (S)-tetrahydroprotoberberine N-methyltransferase; tetrahydroprotoberberine cis-N-methyltransferase +ec:2.1.1.123 [cytochrome-c]-methionine S-methyltransferase +ec:2.1.1.124 Deleted entry +ec:2.1.1.125 Deleted entry +ec:2.1.1.126 Deleted entry +ec:2.1.1.127 [ribulose-bisphosphate carboxylase]-lysine N-methyltransferase; rubisco methyltransferase; ribulose-bisphosphate-carboxylase/oxygenase N-methyltransferase; ribulose-1,5-bisphosphate carboxylase/oxygenase large subunit epsilonN-methyltransferase; S-adenosyl-L-methionine:[3-phospho-D-glycerate-carboxy-lyase (dimerizing)]-lysine 6-N-methyltransferase; RuBisCO methyltransferase; RuBisCO LSMT +ec:2.1.1.128 (RS)-norcoclaurine 6-O-methyltransferase +ec:2.1.1.129 inositol 4-methyltransferase; myo-inositol 4-O-methyltransferase; S-adenosyl-L-methionine:myo-inositol 4-O-methyltransferase; myo-inositol 6-O-methyltransferase +ec:2.1.1.130 precorrin-2 C20-methyltransferase +ec:2.1.1.131 precorrin-3B C17-methyltransferase; precorrin-3 methyltransferase; CobJ +ec:2.1.1.132 precorrin-6B C5,15-methyltransferase (decarboxylating); precorrin-6 methyltransferase; precorrin-6Y methylase; precorrin-6Y C5,15-methyltransferase (decarboxylating); cobL (gene name) +ec:2.1.1.133 precorrin-4 C11-methyltransferase; precorrin-3 methylase; CobM +ec:2.1.1.134 Deleted entry +ec:2.1.1.135 Transferred to 1.16.1.8 +ec:2.1.1.136 chlorophenol O-methyltransferase; halogenated phenol O-methyltransferase; trichlorophenol O-methyltransferase +ec:2.1.1.137 arsenite methyltransferase; AS3MT (gene name); arsM (gene name); S-adenosyl-L-methionine:arsenic(III) methyltransferase; S-adenosyl-L-methionine:methylarsonite As-methyltransferase; methylarsonite methyltransferase +ec:2.1.1.138 Deleted entry +ec:2.1.1.139 3'-demethylstaurosporine O-methyltransferase; 3'-demethoxy-3'-hydroxystaurosporine O-methyltransferase; staurosporine synthase +ec:2.1.1.140 (S)-coclaurine-N-methyltransferase +ec:2.1.1.141 jasmonate O-methyltransferase; jasmonic acid carboxyl methyltransferase +ec:2.1.1.142 cycloartenol 24-C-methyltransferase; sterol C-methyltransferase +ec:2.1.1.143 24-methylenesterol C-methyltransferase; SMT2; 24-methylenelophenol C-241-methyltransferase +ec:2.1.1.144 trans-aconitate 2-methyltransferase +ec:2.1.1.145 trans-aconitate 3-methyltransferase +ec:2.1.1.146 (iso)eugenol O-methyltransferase +ec:2.1.1.147 corydaline synthase +ec:2.1.1.148 thymidylate synthase (FAD); Thy1; ThyX +ec:2.1.1.149 Deleted entry +ec:2.1.1.150 isoflavone 7-O-methyltransferase +ec:2.1.1.151 cobalt-factor II C20-methyltransferase; CbiL +ec:2.1.1.152 precorrin-6A synthase (deacetylating); precorrin-6X synthase (deacetylating); CobF +ec:2.1.1.153 vitexin 2''-O-rhamnoside 7-O-methyltransferase +ec:2.1.1.154 isoliquiritigenin 2'-O-methyltransferase; chalcone OMT; CHMT +ec:2.1.1.155 kaempferol 4'-O-methyltransferase; S-adenosyl-L-methionine:flavonoid 4'-O-methyltransferase; F 4'-OMT +ec:2.1.1.156 glycine/sarcosine N-methyltransferase; ApGSMT; glycine-sarcosine methyltransferase; GSMT; GMT; glycine sarcosine N-methyltransferase; S-adenosyl-L-methionine:sarcosine N-methyltransferase +ec:2.1.1.157 sarcosine/dimethylglycine N-methyltransferase; ApDMT; sarcosine-dimethylglycine methyltransferase; SDMT; sarcosine dimethylglycine N-methyltransferase; S-adenosyl-L-methionine:N,N-dimethylglycine N-methyltransferase +ec:2.1.1.158 7-methylxanthosine synthase; xanthosine methyltransferase; XMT; xanthosine:S-adenosyl-L-methionine methyltransferase; CtCS1; CmXRS1; CaXMT1; S-adenosyl-L-methionine:xanthosine 7-N-methyltransferase +ec:2.1.1.159 theobromine synthase; monomethylxanthine methyltransferase; MXMT; CTS1; CTS2; S-adenosyl-L-methionine:7-methylxanthine 3-N-methyltransferase +ec:2.1.1.160 caffeine synthase; dimethylxanthine methyltransferase; 3N-methyltransferase; DXMT; CCS1; S-adenosyl-L-methionine:3,7-dimethylxanthine 1-N-methyltransferase +ec:2.1.1.161 dimethylglycine N-methyltransferase; BsmB; DMT +ec:2.1.1.162 glycine/sarcosine/dimethylglycine N-methyltransferase; GSDMT; glycine sarcosine dimethylglycine N-methyltransferase +ec:2.1.1.163 demethylmenaquinone methyltransferase; S-adenosyl-L-methione---DMK methyltransferase; demethylmenaquinone C-methylase; 2-heptaprenyl-1,4-naphthoquinone methyltransferase; 2-demethylmenaquinone methyltransferase; S-adenosyl-L-methione:2-demethylmenaquinone methyltransferase +ec:2.1.1.164 demethylrebeccamycin-D-glucose O-methyltransferase; RebM +ec:2.1.1.165 methyl halide transferase; MCT; methyl chloride transferase; S-adenosyl-L-methionine:halide/bisulfide methyltransferase; AtHOL1; AtHOL2; AtHOL3; HARMLESS TO OZONE LAYER protein; HMT; S-adenosyl-L-methionine: halide ion methyltransferase; SAM:halide ion methyltransferase +ec:2.1.1.166 23S rRNA (uridine2552-2'-O)-methyltransferase; Um(2552) 23S ribosomal RNA methyltransferase; heat shock protein RrmJ; RrmJ; FTSJ; Um2552 methyltransferase +ec:2.1.1.167 27S pre-rRNA (guanosine2922-2'-O)-methyltransferase; Spb1p (gene name); YCL054W (gene name) +ec:2.1.1.168 21S rRNA (uridine2791-2'-O)-methyltransferase; MRM2 (gene name); mitochondrial 21S rRNA methyltransferase; mitochondrial rRNA MTase 2 +ec:2.1.1.169 tricetin 3',4',5'-O-trimethyltransferase; FOMT; TaOMT1; TaCOMT1; TaOMT2 +ec:2.1.1.170 16S rRNA (guanine527-N7)-methyltransferase; ribosomal RNA small subunit methyltransferase G; 16S rRNA methyltransferase RsmG; GidB; rsmG (gene name) +ec:2.1.1.171 16S rRNA (guanine966-N2)-methyltransferase; yhhF (gene name); rsmD (gene name); m2G966 methyltransferase +ec:2.1.1.172 16S rRNA (guanine1207-N2)-methyltransferase; m2G1207 methyltransferase +ec:2.1.1.173 23S rRNA (guanine2445-N2)-methyltransferase; ycbY (gene name); rlmL (gene name) +ec:2.1.1.174 23S rRNA (guanine1835-N2)-methyltransferase; ygjO (gene name); rlmG (gene name); ribosomal RNA large subunit methyltransferase G +ec:2.1.1.175 tricin synthase; ROMT-17; ROMT-15; HvOMT1; ZmOMT1 +ec:2.1.1.176 16S rRNA (cytosine967-C5)-methyltransferase; rsmB (gene name); fmu (gene name); 16S rRNA m5C967 methyltransferase +ec:2.1.1.177 23S rRNA (pseudouridine1915-N3)-methyltransferase; YbeA; RlmH; pseudouridine methyltransferase; m3Psi methyltransferase; Psi1915-specific methyltransferase; rRNA large subunit methyltransferase H +ec:2.1.1.178 16S rRNA (cytosine1407-C5)-methyltransferase; RNA m5C methyltransferase YebU; RsmF; YebU +ec:2.1.1.179 16S rRNA (guanine1405-N7)-methyltransferase; methyltransferase Sgm; m7G1405 Mtase; Sgm Mtase; Sgm; sisomicin-gentamicin methyltransferase; sisomicin-gentamicin methylase; GrmA; RmtB; RmtC; ArmA +ec:2.1.1.180 16S rRNA (adenine1408-N1)-methyltransferase; kanamycin-apramycin resistance methylase; 16S rRNA:m1A1408 methyltransferase; KamB; NpmA; 16S rRNA m1A1408 methyltransferase +ec:2.1.1.181 23S rRNA (adenine1618-N6)-methyltransferase; rRNA large subunit methyltransferase F; YbiN protein; rlmF (gene name); m6A1618 methyltransferase +ec:2.1.1.182 16S rRNA (adenine1518-N6/adenine1519-N6)-dimethyltransferase; S-adenosylmethionine-6-N',N'-adenosyl (rRNA) dimethyltransferase; KsgA; ksgA methyltransferase +ec:2.1.1.183 18S rRNA (adenine1779-N6/adenine1780-N6)-dimethyltransferase; 18S rRNA dimethylase Dim1p; Dim1p; ScDim1; m2(6)A dimethylase; KIDIM1 +ec:2.1.1.184 23S rRNA (adenine2085-N6)-dimethyltransferase; ErmC' methyltransferase; ermC methylase; ermC 23S rRNA methyltransferase; rRNA:m6A methyltransferase ErmC'; ErmC'; rRNA methyltransferase ErmC' +ec:2.1.1.185 23S rRNA (guanosine2251-2'-O)-methyltransferase; rlmB (gene name); yifH (gene name) +ec:2.1.1.186 23S rRNA (cytidine2498-2'-O)-methyltransferase; YgdE; rRNA large subunit methyltransferase M; RlmM +ec:2.1.1.187 23S rRNA (guanine745-N1)-methyltransferase; Rlma(I); Rlma1; 23S rRNA m1G745 methyltransferase; YebH; RlmAI methyltransferase; ribosomal RNA(m1G)-methylase (ambiguous); rRNA(m1G)methylase (ambiguous); RrmA (ambiguous); 23S rRNA:m1G745 methyltransferase +ec:2.1.1.188 23S rRNA (guanine748-N1)-methyltransferase; Rlma(II); Rlma2; 23S rRNA m1G748 methyltransferase; RlmaII; Rlma II; tylosin-resistance methyltransferase RlmA(II); TlrB; rRNA large subunit methyltransferase II +ec:2.1.1.189 23S rRNA (uracil747-C5)-methyltransferase; YbjF; RumB; RNA uridine methyltransferase B +ec:2.1.1.190 23S rRNA (uracil1939-C5)-methyltransferase; RumA; RNA uridine methyltransferase A; YgcA +ec:2.1.1.191 23S rRNA (cytosine1962-C5)-methyltransferase; RlmI; rRNA large subunit methyltransferase I; YccW +ec:2.1.1.192 23S rRNA (adenine2503-C2)-methyltransferase; RlmN; YfgB; Cfr +ec:2.1.1.193 16S rRNA (uracil1498-N3)-methyltransferase; DUF558 protein; YggJ; RsmE; m3U1498 specific methyltransferase +ec:2.1.1.194 Deleted entry +ec:2.1.1.195 cobalt-precorrin-5B (C1)-methyltransferase; cobalt-precorrin-6A synthase; CbiD +ec:2.1.1.196 cobalt-precorrin-6B (C15)-methyltransferase [decarboxylating]; cbiT (gene name); S-adenosyl-L-methionine:precorrin-7 C15-methyltransferase (C-12-decarboxylating); cobalt-precorrin-7 (C15)-methyltransferase [decarboxylating] +ec:2.1.1.197 malonyl-[acyl-carrier protein] O-methyltransferase; BioC +ec:2.1.1.198 16S rRNA (cytidine1402-2'-O)-methyltransferase; RsmI; YraL +ec:2.1.1.199 16S rRNA (cytosine1402-N4)-methyltransferase; RsmH; MraW +ec:2.1.1.200 tRNA (cytidine32/uridine32-2'-O)-methyltransferase; YfhQ; tRNA:Cm32/Um32 methyltransferase; TrMet(Xm32); TrmJ +ec:2.1.1.201 2-methoxy-6-polyprenyl-1,4-benzoquinol methylase; ubiE (gene name, ambiguous) +ec:2.1.1.202 multisite-specific tRNA:(cytosine-C5)-methyltransferase; multisite-specific tRNA:m5C-methyltransferase; TRM4 (gene name, gene corresponding to ORF YBL024w) +ec:2.1.1.203 tRNA (cytosine34-C5)-methyltransferase; hTrm4 Mtase; hTrm4 methyltransferase; hTrm4 (gene name); tRNA:m5C-methyltransferase (ambiguous) +ec:2.1.1.204 tRNA (cytosine38-C5)-methyltransferase; hDNMT2 (gene name); DNMT2 (gene name); TRDMT1 (gene name) +ec:2.1.1.205 tRNA (cytidine32/guanosine34-2'-O)-methyltransferase; Trm7p +ec:2.1.1.206 tRNA (cytidine56-2'-O)-methyltransferase; aTrm56; tRNA ribose 2'-O-methyltransferase aTrm56; PAB1040 (gene name) +ec:2.1.1.207 tRNA (cytidine34-2'-O)-methyltransferase; yibK (gene name); methyltransferase yibK; TrmL; tRNA methyltransferase L; tRNA (cytidine34/5-carboxymethylaminomethyluridine34-2'-O)-methyltransferase +ec:2.1.1.208 23S rRNA (uridine2479-2'-O)-methyltransferase; AviRb +ec:2.1.1.209 23S rRNA (guanine2535-N1)-methyltransferase; AviRa +ec:2.1.1.210 demethylspheroidene O-methyltransferase; 1-hydroxycarotenoid O-methylase; 1-hydroxycarotenoid methylase; 1-HO-carotenoid methylase; CrtF +ec:2.1.1.211 tRNASer (uridine44-2'-O)-methyltransferase; TRM44 +ec:2.1.1.212 2,7,4'-trihydroxyisoflavanone 4'-O-methyltransferase; SAM:2,7,4'-trihydroxyisoflavanone 4'-O-methyltransferase; HI4'OMT; HMM1; MtIOMT5; S-adenosyl-L-methionine:2,7,4'-trihydroxyisoflavanone 4'-O-methyltransferase +ec:2.1.1.213 tRNA (guanine10-N2)-dimethyltransferase; PAB1283; N(2),N(2)-dimethylguanosine tRNA methyltransferase; Trm-G10; PabTrm-G10; PabTrm-m2 2G10 enzyme +ec:2.1.1.214 tRNA (guanine10-N2)-methyltransferase; (m2G10) methyltransferase; Trm11-Trm112 complex +ec:2.1.1.215 tRNA (guanine26-N2/guanine27-N2)-dimethyltransferase; Trm1 (ambiguous); tRNA (N2,N2-guanine)-dimethyltransferase; tRNA (m2(2G26) methyltransferase; Trm1[tRNA (m2(2)G26) methyltransferase] +ec:2.1.1.216 tRNA (guanine26-N2)-dimethyltransferase; Trm1p; TRM1; tRNA (m22G26)dimethyltransferase +ec:2.1.1.217 tRNA (adenine22-N1)-methyltransferase; TrmK; YqfN; Sp1610 (gene name); tRNA: m1A22 methyltransferase +ec:2.1.1.218 tRNA (adenine9-N1)-methyltransferase; Trm10p (ambiguous); tRNA(m1G9/m1A9)-methyltransferase; tRNA(m1G9/m1A9)MTase; TK0422p (gene name); tRNA m1A9-methyltransferase; tRNA m1A9 Mtase +ec:2.1.1.219 tRNA (adenine57-N1/adenine58-N1)-methyltransferase; TrmI; PabTrmI; AqTrmI; MtTrmI +ec:2.1.1.220 tRNA (adenine58-N1)-methyltransferase; tRNA m1A58 methyltransferase; tRNA (m1A58) methyltransferase; TrmI; tRNA (m1A58) Mtase; Rv2118cp; Gcd10p-Gcd14p; Trm61p-Trm6p +ec:2.1.1.221 tRNA (guanine9-N1)-methyltransferase; Trm10p (ambiguous); tRNA(m1G9/m1A9)-methyltransferase; tRNA(m1G9/m1A9)MTase; tRNA (guanine-N(1)-)-methyltransferase; tRNA m1G9-methyltransferase; tRNA m1G9 MTase +ec:2.1.1.222 2-polyprenyl-6-hydroxyphenol methylase; ubiG (gene name, ambiguous); ubiG methyltransferase (ambiguous); 2-octaprenyl-6-hydroxyphenol methylase +ec:2.1.1.223 tRNA1Val (adenine37-N6)-methyltransferase; YfiC +ec:2.1.1.224 23S rRNA (adenine2503-C8)-methyltransferase; Cfr (gene name) +ec:2.1.1.225 tRNA:m4X modification enzyme; TRM13; Trm13p; tRNA:Xm4 modification enzyme +ec:2.1.1.226 23S rRNA (cytidine1920-2'-O)-methyltransferase; TlyA (ambiguous) +ec:2.1.1.227 16S rRNA (cytidine1409-2'-O)-methyltransferase; TlyA (ambiguous) +ec:2.1.1.228 tRNA (guanine37-N1)-methyltransferase; TrmD; tRNA (m1G37) methyltransferase; transfer RNA (m1G37) methyltransferase; Trm5p; TRMT5; tRNA-(N1G37) methyltransferase; MJ0883 (gene name) +ec:2.1.1.229 tRNA (carboxymethyluridine34-5-O)-methyltransferase; ALKBH8; ABH8; Trm9; tRNA methyltransferase 9 +ec:2.1.1.230 23S rRNA (adenosine1067-2'-O)-methyltransferase; 23S rRNA A1067 2'-methyltransferase; thiostrepton-resistance methylase; nosiheptide-resistance methyltransferase +ec:2.1.1.231 flavonoid 4'-O-methyltransferase; SOMT-2; 4'-hydroxyisoflavone methyltransferase +ec:2.1.1.232 naringenin 7-O-methyltransferase; NOMT +ec:2.1.1.233 [phosphatase 2A protein]-leucine-carboxy methyltransferase; leucine carboxy methyltransferase-1; LCMT1 +ec:2.1.1.234 dTDP-3-amino-3,4,6-trideoxy-alpha-D-glucopyranose N,N-dimethyltransferase; DesVI +ec:2.1.1.235 dTDP-3-amino-3,6-dideoxy-alpha-D-glucopyranose N,N-dimethyltransferase; TylM1 +ec:2.1.1.236 dTDP-3-amino-3,6-dideoxy-alpha-D-galactopyranose N,N-dimethyltransferase; RavNMT +ec:2.1.1.237 mycinamicin III 3''-O-methyltransferase; MycF +ec:2.1.1.238 mycinamicin VI 2''-O-methyltransferase; MycE +ec:2.1.1.239 L-olivosyl-oleandolide 3-O-methyltransferase; OleY +ec:2.1.1.240 trans-resveratrol di-O-methyltransferase; ROMT; resveratrol O-methyltransferase; pterostilbene synthase +ec:2.1.1.241 2,4,7-trihydroxy-1,4-benzoxazin-3-one-glucoside 7-O-methyltransferase; BX7 (gene name); OMT BX7 +ec:2.1.1.242 16S rRNA (guanine1516-N2)-methyltransferase; yhiQ (gene name); rsmJ (gene name); m2G1516 methyltransferase +ec:2.1.1.243 2-ketoarginine methyltransferase; mrsA (gene name) +ec:2.1.1.244 protein N-terminal methyltransferase; NMT1 (gene name); METTL11A (gene name) +ec:2.1.1.245 5-methyltetrahydrosarcinapterin---corrinoid/iron-sulfur protein Co-methyltransferase; cdhD (gene name); cdhE (gene name) +ec:2.1.1.246 [methyl-Co(III) methanol-specific corrinoid protein]---coenzyme M methyltransferase; methyltransferase 2 (ambiguous); mtaA (gene name) +ec:2.1.1.247 [methyl-Co(III) methylamine-specific corrinoid protein]---coenzyme M methyltransferase; methyltransferase 2 (ambiguous); MT2 (ambiguous); MT2-A; mtbA (gene name); [methyl-Co(III) methylamine-specific corrinoid protein]:coenzyme M methyltransferase +ec:2.1.1.248 methylamine---corrinoid protein Co-methyltransferase; mtmB (gene name); monomethylamine methyltransferase +ec:2.1.1.249 dimethylamine---corrinoid protein Co-methyltransferase; mtbB (gene name); dimethylamine methyltransferase +ec:2.1.1.250 trimethylamine---corrinoid protein Co-methyltransferase; mttB (gene name); trimethylamine methyltransferase +ec:2.1.1.251 methylated-thiol---coenzyme M methyltransferase; mtsA (gene name) +ec:2.1.1.252 tetramethylammonium---corrinoid protein Co-methyltransferase; mtqB (gene name); tetramethylammonium methyltransferase +ec:2.1.1.253 [methyl-Co(III) tetramethylammonium-specific corrinoid protein]---coenzyme M methyltransferase; methyltransferase 2 (ambiguous); mtqA (gene name) +ec:2.1.1.254 erythromycin 3''-O-methyltransferase; EryG +ec:2.1.1.255 geranyl diphosphate 2-C-methyltransferase; SCO7701; GPP methyltransferase; GPPMT; 2-methyl-GPP synthase; MGPPS; geranyl pyrophosphate methyltransferase +ec:2.1.1.256 tRNA (guanine6-N2)-methyltransferase; methyltransferase Trm14; m2G6 methyltransferase +ec:2.1.1.257 tRNA (pseudouridine54-N1)-methyltransferase; TrmY; m1Psi methyltransferase +ec:2.1.1.258 5-methyltetrahydrofolate---corrinoid/iron-sulfur protein Co-methyltransferase; acsE (gene name) +ec:2.1.1.259 [fructose-bisphosphate aldolase]-lysine N-methyltransferase; rubisco methyltransferase; ribulose-bisphosphate-carboxylase/oxygenase N-methyltransferase; ribulose-1,5-bisphosphate carboxylase/oxygenase large subunit epsilonN-methyltransferase; S-adenosyl-L-methionine:[3-phospho-D-glycerate-carboxy-lyase (dimerizing)]-lysine 6-N-methyltransferase +ec:2.1.1.260 rRNA small subunit pseudouridine methyltransferase Nep1; Nep1; nucleolar essential protein 1 +ec:2.1.1.261 4-dimethylallyltryptophan N-methyltransferase; fgaMT (gene name); easF (gene name) +ec:2.1.1.262 squalene methyltransferase; TMT-1; TMT-2 +ec:2.1.1.263 botryococcene C-methyltransferase; TMT-3 +ec:2.1.1.264 23S rRNA (guanine2069-N7)-methyltransferase; rlmK (gene name); 23S rRNA m7G2069 methyltransferase +ec:2.1.1.265 tellurite methyltransferase; TehB +ec:2.1.1.266 23S rRNA (adenine2030-N6)-methyltransferase; YhiR protein; rlmJ (gene name); m6A2030 methyltransferase +ec:2.1.1.267 flavonoid 3',5'-methyltransferase; AOMT; CrOMT2 +ec:2.1.1.268 tRNAThr (cytosine32-N3)-methyltransferase; ABP140; Trm140p +ec:2.1.1.269 dimethylsulfoniopropionate demethylase; dmdA (gene name); dimethylsulfoniopropionate-dependent demethylase A +ec:2.1.1.270 (+)-6a-hydroxymaackiain 3-O-methyltransferase; HM3OMT; HMM2 +ec:2.1.1.271 cobalt-precorrin-4 methyltransferase; CbiF; S-adenosyl-L-methionine:cobalt-precorrin-4 11-methyltransferase +ec:2.1.1.272 cobalt-factor III methyltransferase; CbiH60 (gene name); S-adenosyl-L-methionine:cobalt-factor III 17-methyltransferase (ring contracting) +ec:2.1.1.273 benzoate O-methyltransferase; BAMT; S-adenosyl-L-methionine:benzoic acid carboxyl methyltransferase +ec:2.1.1.274 salicylate 1-O-methyltransferase; SAMT; S-adenosyl-L-methionine:salicylic acid carboxyl methyltransferase; salicylate carboxymethyltransferase +ec:2.1.1.275 gibberellin A9 O-methyltransferase; GAMT1 +ec:2.1.1.276 gibberellin A4 carboxyl methyltransferase; GAMT2; gibberellin A4 O-methyltransferase +ec:2.1.1.277 anthranilate O-methyltransferase; AAMT +ec:2.1.1.278 indole-3-acetate O-methyltransferase; IAA carboxylmethyltransferase; IAMT +ec:2.1.1.279 trans-anol O-methyltransferase; AIMT1; S-adenosyl-L-methionine:t-anol/isoeugenol O-methyltransferase; t-anol O-methyltransferase +ec:2.1.1.280 selenocysteine Se-methyltransferase; SMT +ec:2.1.1.281 phenylpyruvate C3-methyltransferase; phenylpyruvate Cbeta-methyltransferase; phenylpyruvate methyltransferase; mppJ (gene name) +ec:2.1.1.282 tRNAPhe 7-[(3-amino-3-carboxypropyl)-4-demethylwyosine37-N4]-methyltransferase; TYW3 (gene name); tRNA-yW synthesizing enzyme-3 +ec:2.1.1.283 emodin O-methyltransferase; EOMT +ec:2.1.1.284 8-demethylnovobiocic acid C8-methyltransferase; NovO +ec:2.1.1.285 demethyldecarbamoylnovobiocin O-methyltransferase; NovP +ec:2.1.1.286 25S rRNA (adenine2142-N1)-methyltransferase; BMT2 (gene name); 25S rRNA m1A2142 methyltransferase +ec:2.1.1.287 25S rRNA (adenine645-N1)-methyltransferase; 25S rRNA m1A645 methyltransferase; Rrp8 +ec:2.1.1.288 aklanonic acid methyltransferase; DauC; AAMT +ec:2.1.1.289 cobalt-precorrin-7 (C5)-methyltransferase; CbiE +ec:2.1.1.290 tRNAPhe [7-(3-amino-3-carboxypropyl)wyosine37-O]-methyltransferase; TYW4 (ambiguous); tRNA-yW synthesizing enzyme-4 (ambiguous) +ec:2.1.1.291 (R,S)-reticuline 7-O-methyltransferase +ec:2.1.1.292 carminomycin 4-O-methyltransferase; DnrK; DauK +ec:2.1.1.293 6-hydroxytryprostatin B O-methyltransferase; ftmD (gene name) +ec:2.1.1.294 3-O-phospho-polymannosyl GlcNAc-diphospho-ditrans,octacis-undecaprenol 3-phospho-methyltransferase; WbdD; S-adenosyl-L-methionine:3-O-phospho-alpha-D-Man-(1->2)-alpha-D-Man-(1->2)-alpha-D-Man-(1->3)-alpha-D-Man-(1->3)-[alpha-D-Man-(1->2)-alpha-D-Man-(1->2)-alpha-D-Man-(1->3)-alpha-D-Man-(1->3)]n-alpha-D-Man-(1->3)-alpha-D-Man-(1->3)-alpha-D-GlcNAc-alpha-diphospho-ditrans,octacis-undecaprenol 3-phospho-methyltransferase +ec:2.1.1.295 2-methyl-6-phytyl-1,4-hydroquinone methyltransferase; VTE3 (gene name); 2-methyl-6-solanyl-1,4-hydroquinone methyltransferase; MPBQ/MSBQ methyltransferase; MPBQ/MSBQ MT +ec:2.1.1.296 methyltransferase cap2; CMTR2 (gene name); MTR2; cap2-MTase; mRNA (nucleoside-2'-O)-methyltransferase (ambiguous) +ec:2.1.1.297 peptide chain release factor N5-glutamine methyltransferase; N5-glutamine S-adenosyl-L-methionine dependent methyltransferase; N5-glutamine MTase; HemK; PrmC +ec:2.1.1.298 ribosomal protein L3 N5-glutamine methyltransferase; YfcB; PrmB +ec:2.1.1.299 protein N-terminal monomethyltransferase; NRMT2 (gene name); METTL11B (gene name); N-terminal monomethylase +ec:2.1.1.300 pavine N-methyltransferase; PavNMT +ec:2.1.1.301 cypemycin N-terminal methyltransferase; CypM +ec:2.1.1.302 3-hydroxy-5-methyl-1-naphthoate 3-O-methyltransferase; AziB2 +ec:2.1.1.303 2,7-dihydroxy-5-methyl-1-naphthoate 7-O-methyltransferase; NcsB1; neocarzinostatin O-methyltransferase +ec:2.1.1.304 L-tyrosine C3-methyltransferase; SfmM2; SacF +ec:2.1.1.305 8-demethyl-8-alpha-L-rhamnosyltetracenomycin-C 2'-O-methyltransferase; ElmMI +ec:2.1.1.306 8-demethyl-8-(2-methoxy-alpha-L-rhamnosyl)tetracenomycin-C 3'-O-methyltransferase; ElmMII +ec:2.1.1.307 8-demethyl-8-(2,3-dimethoxy-alpha-L-rhamnosyl)tetracenomycin-C 4'-O-methyltransferase; ElmMIII +ec:2.1.1.308 cytidylyl-2-hydroxyethylphosphonate methyltransferase; Fom3; S-adenosyl-L-methionine:methylcob(III)alamin:2-hydroxyethylphosphonate methyltransferase (incorrect); 2-hydroxyethylphosphonate methyltransferase (incorrect) +ec:2.1.1.309 18S rRNA (guanine1575-N7)-methyltransferase; 18S rRNA methylase Bud23; BUD23 (gene name) +ec:2.1.1.310 25S rRNA (cytosine2870-C5)-methyltransferase; NOP2 (gene name) +ec:2.1.1.311 25S rRNA (cytosine2278-C5)-methyltransferase; RCM1 (gene name) +ec:2.1.1.312 25S rRNA (uracil2843-N3)-methyltransferase; BMT6 +ec:2.1.1.313 25S rRNA (uracil2634-N3)-methyltransferase; BMT5 +ec:2.1.1.314 diphthine methyl ester synthase; S-adenosyl-L-methionine:elongation factor 2 methyltransferase (ambiguous); diphthine methyltransferase (ambiguous); Dph5 (ambiguous) +ec:2.1.1.315 27-O-demethylrifamycin SV methyltransferase; AdoMet:27-O-demethylrifamycin SV methyltransferase +ec:2.1.1.316 mitomycin 6-O-methyltransferase; MmcR; mitomycin 7-O-methyltransferase (incorrect); S-adenosyl-L-methionine:7-demethylmitomycin-A 7-O-methyltransferase (incorrect) +ec:2.1.1.317 sphingolipid C9-methyltransferase +ec:2.1.1.318 [trehalose-6-phosphate synthase]-L-cysteine S-methyltransferase +ec:2.1.1.319 type I protein arginine methyltransferase; PRMT1 (gene name); PRMT2 (gene name); PRMT3 (gene name); PRMT4 (gene name); PRMT6 (gene name); PRMT8 (gene name); RMT1 (gene name); CARM1 (gene name) +ec:2.1.1.320 type II protein arginine methyltransferase; PRMT5 (gene name); PRMT9 (gene name) +ec:2.1.1.321 type III protein arginine methyltransferase; PRMT7 (gene name) +ec:2.1.1.322 type IV protein arginine methyltransferase; RMT2 (gene name) +ec:2.1.1.323 (-)-pluviatolide 4-O-methyltransferase; OMT3 (gene name) +ec:2.1.1.324 dTDP-4-amino-2,3,4,6-tetradeoxy-D-glucose N,N-dimethyltransferase; SpnS; TDP-4-amino-2,3,6-trideoxy-D-glucose N,N-dimethyltransferase +ec:2.1.1.325 juvenile hormone-III synthase; farnesoic acid methyltransferase; juvenile hormone acid methyltransferase; JHAMT +ec:2.1.1.326 N-acetyldemethylphosphinothricin P-methyltransferase; phpK (gene name); bcpD (gene name); P-methylase +ec:2.1.1.327 phenazine-1-carboxylate N-methyltransferase; phzM (gene name) +ec:2.1.1.328 N-demethylindolmycin N-methyltransferase; ind7 (gene name) +ec:2.1.1.329 demethylphylloquinol methyltransferase; menG (gene name); 2-phytyl-1,4-naphthoquinol methyltransferase +ec:2.1.1.330 5'-demethylyatein 5'-O-methyltransferase; OMT1 (gene name) +ec:2.1.1.331 bacteriochlorophyllide d C-121-methyltransferase; bchR (gene name) +ec:2.1.1.332 bacteriochlorophyllide d C-82-methyltransferase; bchQ (gene name) +ec:2.1.1.333 bacteriochlorophyllide d C-20 methyltransferase; bchU (gene name) +ec:2.1.1.334 methanethiol S-methyltransferase; mddA (gene name) +ec:2.1.1.335 4-amino-anhydrotetracycline N4-methyltransferase; oxyT (gene name); ctcO (gene name) +ec:2.1.1.336 norbelladine O-methyltransferase; N4OMT1 (gene name) +ec:2.1.1.337 reticuline N-methyltransferase; RNMT +ec:2.1.1.338 desmethylxanthohumol 6'-O-methyltransferase; OMT1 (ambiguous) +ec:2.1.1.339 xanthohumol 4-O-methyltransferase; OMT2 (ambiguous); S-adenosyl-L-methionine:xanthohumol 4'-O-methyltransferase (incorrect); xanthohumol 4'-O-methyltransferase (incorrect) +ec:2.1.1.340 3-aminomethylindole N-methyltransferase; NMT (gene name) +ec:2.1.1.341 vanillate/3-O-methylgallate O-demethylase; ligM (gene name) +ec:2.1.1.342 anaerobilin synthase; chuW (gene name) +ec:2.1.1.343 8-amino-8-demethylriboflavin N,N-dimethyltransferase; rosA (gene name) +ec:2.1.1.344 ornithine lipid N-methyltransferase; olsG (gene name) +ec:2.1.1.345 psilocybin synthase; PsiM +ec:2.1.1.346 U6 snRNA m6A methyltransferase; METTL16 (gene name) +ec:2.1.1.347 (+)-O-methylkolavelool synthase; Haur_2147 (locus name) +ec:2.1.1.348 mRNA m6A methyltransferase; METTL3 (gene name); METTL14 (gene name) +ec:2.1.1.349 toxoflavin synthase; toxA (gene name) +ec:2.1.1.350 menaquinone C8-methyltransferase; mqnK (gene name); menK (gene name) +ec:2.1.1.351 nocamycin O-methyltransferase; ncmP (gene name) +ec:2.1.1.352 3-O-acetyl-4'-O-demethylpapaveroxine 4'-O-methyltransferase +ec:2.1.1.353 demethylluteothin O-methyltransferase; aurI (gene name) +ec:2.1.1.354 [histone H3]-lysine4 N-trimethyltransferase; KMT2H (gene name); KMT3C (gene name); KMT3D (gene name); KMT3E (gene name); PRDM9 (gene name); MLL5 (gene name); ASH1L (gene name); SMYD1 (gene name); SMYD2 (gene name); SMYD3 (gene name) +ec:2.1.1.355 [histone H3]-lysine9 N-trimethyltransferase; KMT1A (gene name); KMT1B (gene name); KMT1C (gene name); KMT1D (gene name); KMT1F (gene name); MT8 (gene name); SUV39H1 (gene name); G9A (gene name); EHMT1 (gene name); PRDM2 (gene name) +ec:2.1.1.356 [histone H3]-lysine27 N-trimethyltransferase; KMT6A (gene name); KMT6B (gene name); EZH1 (gene name); EZH2 (gene name) +ec:2.1.1.357 [histone H3]-lysine36 N-dimethyltransferase; KMT3B (gene name); KMT3C (gene name); NSD2 (gene name); SETMAR (gene name); WHSC1 (gene name) +ec:2.1.1.358 Deleted entry +ec:2.1.1.359 [histone H3]-lysine36 N-trimethyltransferase; SET2 (gene name); KMT3A (gene name) +ec:2.1.1.360 [histone H3]-lysine79 N-trimethyltransferase; DOT1L (gene name); KMT4 (gene name) +ec:2.1.1.361 [histone H4]-lysine20 N-methyltransferase; KMT5A (gene name); SET8 (gene name); PR-SET7 (gene name) +ec:2.1.1.362 [histone H4]-N-methyl-L-lysine20 N-methyltransferase; KMT5B (gene name); KMT5C (gene name); SUV420H1 (gene name); SUV420H2 (gene name) +ec:2.1.1.363 pre-sodorifen synthase; sodC (gene name) +ec:2.1.1.364 [histone H3]-lysine4 N-methyltransferase; KMT7 (gene name); SETD7 (gene name); SET7/9 (gene name); KIAA1717 (gene name); KMT2A (gene name); KMT2B (gene name); KMT2C (gene name); KMT2D (gene name); KMT2F (gene name); KMT2G (gene name); MLL1 (gene name); MLL2 (gene name); MLL3 (gene name); MLL4 (gene name); SETD1A (gene name) +ec:2.1.1.365 MMP 1-O-methyltransferase; MeT1; 3-O-methylmannose polysaccharide 1-O-methyltransferase +ec:2.1.1.366 [histone H3]-N6,N6-dimethyl-lysine9 N-methyltransferase; KMT1E (gene name); SETDB1 (gene name); KIAA0067 (gene name) +ec:2.1.1.367 [histone H3]-lysine9 N-methyltransferase; PRDM3 (gene name); PRDM16 (gene name) +ec:2.1.1.368 [histone H3]-lysine9 N-dimethyltransferase; SUVH1 (gene name); SUVR1 (gene name); SET32 (gene name); SDG32 (gene name); SET13 (gene name) +ec:2.1.1.369 [histone H3]-lysine27 N-methyltransferase; ATXR5 (gene name) +ec:2.1.1.370 [histone H3]-lysine4 N-dimethyltransferase; NSD3 (gene name) +ec:2.1.1.371 [histone H3]-lysine27 N-dimethyltransferase; NSD3 (gene name) +ec:2.1.1.372 [histone H4]-lysine20 N-trimethyltransferase; SET9 (gene name) +ec:2.1.1.373 2-hydroxy-4-(methylsulfanyl)butanoate S-methyltransferase; dsyB (gene name); methylthiohydroxybutyrate methyltransferase; MTHB methyltransferase +ec:2.1.1.374 2-heptyl-1-hydroxyquinolin-4(1H)-one methyltransferase; htm (gene name) +ec:2.1.1.375 NNS virus cap methyltransferase +ec:2.1.1.376 glycine betaine---corrinoid protein Co-methyltransferase; mtgB (gene name); glycine betaine methyltransferase +ec:2.1.1.377 [methyl-Co(III) glycine betaine-specific corrinoid protein]---coenzyme M methyltransferase; mtaA (gene name) +ec:2.1.1.378 [methyl-Co(III) glycine betaine-specific corrinoid protein]---tetrahydrofolate methyltransferase; mtgA (gene name); DSY3157 (locus name) +ec:2.1.1.379 [methyl coenzyme M reductase]-L-arginine C-5-methyltransferase; methanogenesis marker protein 10; Mmp10 +ec:2.1.1.380 3-amino-4-hydroxybenzoate 4-O-methyltransferase; creN (gene name) +ec:2.1.1.381 arginine Nomega-methyltransferase; sznE (gene name); stzE (gene name) +ec:2.1.1.382 methoxylated aromatic compound---corrinoid protein Co-methyltransferase; mtoB (gene name); mtvB (gene name); vdmB (gene name) +ec:2.1.1.383 L-carnitine---corrinoid protein Co-methyltransferase; mtcB (gene name) +ec:2.1.1.384 [methyl-Co(III) methoxylated-aromatic-compound-specific corrinoid protein]---tetrahydromethanopterin methyltransferase; mtoA (gene name) +ec:2.1.1.385 [methyl-Co(III) methoxylated-aromatic-compound-specific corrinoid protein]---tetrahydrofolate methyltransferase; mtvA (gene name) +ec:2.1.2.1 glycine hydroxymethyltransferase; serine aldolase; threonine aldolase; serine hydroxymethylase; serine hydroxymethyltransferase; allothreonine aldolase; L-serine hydroxymethyltransferase; L-threonine aldolase; serine hydroxymethyltransferase; serine transhydroxymethylase +ec:2.1.2.2 phosphoribosylglycinamide formyltransferase 1; 2-amino-N-ribosylacetamide 5'-phosphate transformylase; GAR formyltransferase; GAR transformylase; glycinamide ribonucleotide transformylase; GAR TFase; 5,10-methenyltetrahydrofolate:2-amino-N-ribosylacetamide ribonucleotide transformylase; purN (gene name); ADE8 (gene name); GART (gene name); 5'-phosphoribosylglycinamide transformylase; phosphoribosylglycinamide formyltransferase (ambiguous) +ec:2.1.2.3 phosphoribosylaminoimidazolecarboxamide formyltransferase; 5-amino-4-imidazolecarboxamide ribonucleotide transformylase; AICAR transformylase; 10-formyltetrahydrofolate:5'-phosphoribosyl-5-amino-4-imidazolecarboxamide formyltransferase; 5'-phosphoribosyl-5-amino-4-imidazolecarboxamide formyltransferase; 5-amino-1-ribosyl-4-imidazolecarboxamide 5'-phosphate transformylase; 5-amino-4-imidazolecarboxamide ribotide transformylase; AICAR formyltransferase; aminoimidazolecarboxamide ribonucleotide transformylase +ec:2.1.2.4 glycine formimidoyltransferase; formiminoglycine formiminotransferase; FIG formiminotransferase; glycine formiminotransferase +ec:2.1.2.5 glutamate formimidoyltransferase; FTCD (gene name); glutamate formyltransferase; formiminoglutamic acid transferase; formiminoglutamic formiminotransferase; glutamate formiminotransferase +ec:2.1.2.6 Deleted entry +ec:2.1.2.7 D-alanine 2-hydroxymethyltransferase; 2-methylserine hydroxymethyltransferase +ec:2.1.2.8 deoxycytidylate 5-hydroxymethyltransferase; dCMP hydroxymethylase; d-cytidine 5'-monophosphate hydroxymethylase; deoxyCMP hydroxymethylase; deoxycytidylate hydroxymethylase; deoxycytidylic hydroxymethylase +ec:2.1.2.9 methionyl-tRNA formyltransferase; N10-formyltetrahydrofolic-methionyl-transfer ribonucleic transformylase; formylmethionyl-transfer ribonucleic synthetase; methionyl ribonucleic formyltransferase; methionyl-tRNA Met formyltransferase; methionyl-tRNA transformylase; methionyl-transfer RNA transformylase; methionyl-transfer ribonucleate methyltransferase; methionyl-transfer ribonucleic transformylase +ec:2.1.2.10 aminomethyltransferase; S-aminomethyldihydrolipoylprotein:(6S)-tetrahydrofolate aminomethyltransferase (ammonia-forming); T-protein; glycine synthase; tetrahydrofolate aminomethyltransferase; [protein]-8-S-aminomethyldihydrolipoyllysine:tetrahydrofolate aminomethyltransferase (ammonia-forming) +ec:2.1.2.11 3-methyl-2-oxobutanoate hydroxymethyltransferase; alpha-ketoisovalerate hydroxymethyltransferase; dehydropantoate hydroxymethyltransferase; ketopantoate hydroxymethyltransferase; oxopantoate hydroxymethyltransferase; 5,10-methylene tetrahydrofolate:alpha-ketoisovalerate hydroxymethyltransferase +ec:2.1.2.12 Deleted entry +ec:2.1.2.13 UDP-4-amino-4-deoxy-L-arabinose formyltransferase; UDP-L-Ara4N formyltransferase; ArnAFT +ec:2.1.2.14 GDP-perosamine N-formyltransferase; wbkC (gene name) +ec:2.1.3.1 methylmalonyl-CoA carboxytransferase; transcarboxylase; methylmalonyl coenzyme A carboxyltransferase; methylmalonyl-CoA transcarboxylase; oxalacetic transcarboxylase; methylmalonyl-CoA carboxyltransferase; (S)-2-methyl-3-oxopropanoyl-CoA:pyruvate carboxyltransferase; (S)-2-methyl-3-oxopropanoyl-CoA:pyruvate carboxytransferase carboxytransferase [incorrect] +ec:2.1.3.2 aspartate carbamoyltransferase; carbamylaspartotranskinase; aspartate transcarbamylase; aspartate carbamyltransferase; aspartic acid transcarbamoylase; aspartic carbamyltransferase; aspartic transcarbamylase; carbamylaspartotranskinase; L-aspartate transcarbamoylase; L-aspartate transcarbamylase; carbamoylaspartotranskinase; aspartate transcarbamylase; aspartate transcarbamoylase; ATCase +ec:2.1.3.3 ornithine carbamoyltransferase; citrulline phosphorylase; ornithine transcarbamylase; OTC; carbamylphosphate-ornithine transcarbamylase; L-ornithine carbamoyltransferase; L-ornithine carbamyltransferase; L-ornithine transcarbamylase; ornithine carbamyltransferase +ec:2.1.3.4 Deleted entry +ec:2.1.3.5 oxamate carbamoyltransferase; oxamic transcarbamylase +ec:2.1.3.6 putrescine carbamoyltransferase; PTCase; putrescine synthase; putrescine transcarbamylase +ec:2.1.3.7 3-hydroxymethylcephem carbamoyltransferase +ec:2.1.3.8 lysine carbamoyltransferase; lysine transcarbamylase +ec:2.1.3.9 N-acetylornithine carbamoyltransferase; acetylornithine transcarbamylase; N-acetylornithine transcarbamylase; AOTC; carbamoyl-phosphate:2-N-acetyl-L-ornithine carbamoyltransferase; AOTCase +ec:2.1.3.10 malonyl-S-ACP:biotin-protein carboxyltransferase; malonyl-S-acyl-carrier protein:biotin-protein carboxyltransferase; MadC/MadD; MadC,D; malonyl-[acyl-carrier protein]:biotinyl-[protein] carboxyltransferase +ec:2.1.3.11 N-succinylornithine carbamoyltransferase; succinylornithine transcarbamylase; N-succinyl-L-ornithine transcarbamylase; SOTCase +ec:2.1.3.12 decarbamoylnovobiocin carbamoyltransferase; novN (gene name) +ec:2.1.3.13 Deleted entry +ec:2.1.3.14 Deleted entry +ec:2.1.3.15 acetyl-CoA carboxytransferase; accAD (gene names) +ec:2.1.3.16 ureidoglycine carbamoyltransferase; UGTCase +ec:2.1.4.1 glycine amidinotransferase; arginine-glycine amidinotransferase; arginine-glycine transamidinase; glycine transamidinase +ec:2.1.4.2 scyllo-inosamine-4-phosphate amidinotransferase; L-arginine:inosamine-P-amidinotransferase; inosamine-P amidinotransferase; L-arginine:inosamine phosphate amidinotransferase; inosamine-phosphate amidinotransferase +ec:2.1.4.3 L-arginine:L-lysine amidinotransferase; amtA (gene name) +ec:2.1.5.1 sesamin methylene transferase; sesA (gene name) +ec:2.2.1.1 transketolase; glycolaldehydetransferase +ec:2.2.1.2 transaldolase; dihydroxyacetonetransferase; dihydroxyacetone synthase (incorrect); formaldehyde transketolase (incorrect) +ec:2.2.1.3 formaldehyde transketolase; dihydroxyacetone synthase +ec:2.2.1.4 acetoin---ribose-5-phosphate transaldolase; 1-deoxy-D-altro-heptulose-7-phosphate synthetase; 1-deoxy-D-altro-heptulose-7-phosphate synthase; 3-hydroxybutan-2-one:D-ribose-5-phosphate aldehydetransferase [wrong substrate name] +ec:2.2.1.5 2-hydroxy-3-oxoadipate synthase; 2-hydroxy-3-oxoadipate glyoxylate-lyase (carboxylating); alpha-ketoglutaric-glyoxylic carboligase; oxoglutarate: glyoxylate carboligase +ec:2.2.1.6 acetolactate synthase; alpha-acetohydroxy acid synthetase; alpha-acetohydroxyacid synthase; alpha-acetolactate synthase; alpha-acetolactate synthetase; acetohydroxy acid synthetase; acetohydroxyacid synthase; acetolactate pyruvate-lyase (carboxylating); acetolactic synthetase +ec:2.2.1.7 1-deoxy-D-xylulose-5-phosphate synthase; 1-deoxy-D-xylulose-5-phosphate pyruvate-lyase (carboxylating); DXP-synthase +ec:2.2.1.8 fluorothreonine transaldolase +ec:2.2.1.9 2-succinyl-5-enolpyruvyl-6-hydroxy-3-cyclohexene-1-carboxylic-acid synthase; SEPHCHC synthase; MenD +ec:2.2.1.10 2-amino-3,7-dideoxy-D-threo-hept-6-ulosonate synthase; ADH synthase; ADHS; MJ0400 (gene name) +ec:2.2.1.11 6-deoxy-5-ketofructose 1-phosphate synthase; DKFP synthase +ec:2.2.1.12 3-acetyloctanal synthase; pigD (gene name) +ec:2.2.1.13 apulose-4-phosphate transketolase; aptAB (gene names) +ec:2.2.1.14 6-deoxy-6-sulfo-D-fructose transaldolase; sftT (gene name) +ec:2.2.1.15 6-deoxy-6-sulfo-D-fructose transketolase; 6-deoxy-6-sulfo-erythrulose transketolase; sqwGH (gene name) +ec:2.3.1.1 amino-acid N-acetyltransferase; N-acetylglutamate synthase; AGAS; acetylglutamate acetylglutamate synthetase; acetylglutamic synthetase; amino acid acetyltransferase; N-acetyl-L-glutamate synthetase; N-acetylglutamate synthetase +ec:2.3.1.2 imidazole N-acetyltransferase; imidazole acetylase; imidazole acetyltransferase +ec:2.3.1.3 glucosamine N-acetyltransferase; glucosamine acetylase; glucosamine acetyltransferase +ec:2.3.1.4 glucosamine-phosphate N-acetyltransferase; phosphoglucosamine transacetylase; phosphoglucosamine acetylase; glucosamine-6-phosphate acetylase; D-glucosamine-6-P N-acetyltransferase; aminodeoxyglucosephosphate acetyltransferase; glucosamine 6-phosphate acetylase; glucosamine 6-phosphate N-acetyltransferase; N-acetylglucosamine-6-phosphate synthase; phosphoglucosamine N-acetylase; glucosamine-6-phosphate N-acetyltransferase +ec:2.3.1.5 arylamine N-acetyltransferase; arylamine acetylase; beta-naphthylamine N-acetyltransferase; 4-aminobiphenyl N-acetyltransferase; acetyl CoA-arylamine N-acetyltransferase; 2-naphthylamine N-acetyltransferase; arylamine acetyltransferase; indoleamine N-acetyltransferase; N-acetyltransferase (ambiguous); p-aminosalicylate N-acetyltransferase; serotonin acetyltransferase; serotonin N-acetyltransferase +ec:2.3.1.6 choline O-acetyltransferase; choline acetylase; choline acetyltransferase +ec:2.3.1.7 carnitine O-acetyltransferase; acetyl-CoA-carnitine O-acetyltransferase; acetylcarnitine transferase; carnitine acetyl coenzyme A transferase; carnitine acetylase; carnitine acetyltransferase; carnitine-acetyl-CoA transferase; CATC +ec:2.3.1.8 phosphate acetyltransferase; phosphotransacetylase; phosphoacylase; PTA +ec:2.3.1.9 acetyl-CoA C-acetyltransferase; acetoacetyl-CoA thiolase; beta-acetoacetyl coenzyme A thiolase; 2-methylacetoacetyl-CoA thiolase [misleading]; 3-oxothiolase; acetyl coenzyme A thiolase; acetyl-CoA acetyltransferase; acetyl-CoA:N-acetyltransferase; thiolase II; type II thiolase +ec:2.3.1.10 hydrogen-sulfide S-acetyltransferase; hydrogen-sulfide acetyltransferase +ec:2.3.1.11 thioethanolamine S-acetyltransferase; thioltransacetylase B; thioethanolamine acetyltransferase; acetyl-CoA:thioethanolamine S-acetyltransferase +ec:2.3.1.12 dihydrolipoyllysine-residue acetyltransferase; acetyl-CoA:dihydrolipoamide S-acetyltransferase; dihydrolipoamide S-acetyltransferase; dihydrolipoate acetyltransferase; dihydrolipoic transacetylase; dihydrolipoyl acetyltransferase; lipoate acetyltransferase; lipoate transacetylase; lipoic acetyltransferase; lipoic acid acetyltransferase; lipoic transacetylase; lipoylacetyltransferase; thioltransacetylase A; transacetylase X; enzyme-dihydrolipoyllysine:acetyl-CoA S-acetyltransferase; acetyl-CoA:enzyme 6-N-(dihydrolipoyl)lysine S-acetyltransferase +ec:2.3.1.13 glycine N-acyltransferase; glycine acyltransferase; glycine-N-acylase +ec:2.3.1.14 glutamine N-phenylacetyltransferase; glutamine phenylacetyltransferase; phenylacetyl-CoA:L-glutamine N-acetyltransferase +ec:2.3.1.15 glycerol-3-phosphate 1-O-acyltransferase; alpha-glycerophosphate acyltransferase; 3-glycerophosphate acyltransferase; ACP:sn-glycerol-3-phosphate acyltransferase; glycerol 3-phosphate acyltransferase; glycerol phosphate acyltransferase; glycerol phosphate transacylase; glycerophosphate acyltransferase; glycerophosphate transacylase; sn-glycerol 3-phosphate acyltransferase; sn-glycerol-3-phosphate acyltransferase; glycerol-3-phosphate O-acyltransferase (ambiguous) +ec:2.3.1.16 acetyl-CoA C-acyltransferase; beta-ketothiolase; 3-ketoacyl-CoA thiolase; KAT; beta-ketoacyl coenzyme A thiolase; beta-ketoacyl-CoA thiolase; beta-ketoadipyl coenzyme A thiolase; beta-ketoadipyl-CoA thiolase; 3-ketoacyl CoA thiolase; 3-ketoacyl coenzyme A thiolase; 3-ketoacyl thiolase; 3-ketothiolase; 3-oxoacyl-CoA thiolase; 3-oxoacyl-coenzyme A thiolase; 6-oxoacyl-CoA thiolase; acetoacetyl-CoA beta-ketothiolase; acetyl-CoA acyltransferase; ketoacyl-CoA acyltransferase; ketoacyl-coenzyme A thiolase; long-chain 3-oxoacyl-CoA thiolase; oxoacyl-coenzyme A thiolase; pro-3-ketoacyl-CoA thiolase; thiolase I; type I thiolase; 2-methylacetoacetyl-CoA thiolase [misleading] +ec:2.3.1.17 aspartate N-acetyltransferase; aspartate acetyltransferase; L-aspartate N-acetyltransferase +ec:2.3.1.18 galactoside O-acetyltransferase; thiogalactoside acetyltransferase; galactoside acetyltransferase; thiogalactoside transacetylase +ec:2.3.1.19 phosphate butyryltransferase; phosphotransbutyrylase +ec:2.3.1.20 diacylglycerol O-acyltransferase; diglyceride acyltransferase; 1,2-diacylglycerol acyltransferase; diacylglycerol acyltransferase; diglyceride O-acyltransferase; palmitoyl-CoA-sn-1,2-diacylglycerol acyltransferase; acyl-CoA:1,2-diacylglycerol O-acyltransferase +ec:2.3.1.21 carnitine O-palmitoyltransferase; CPT (ambiguous); CPTo; outer malonyl-CoA inhibitable carnitine palmitoyltransferase; CPTi; CPT I (outer membrane carnitine palmitoyl transferase); carnitine palmitoyltransferase I; carnitine palmitoyltransferase II; CPT-A; CPT-B; acylcarnitine transferase; carnitine palmitoyltransferase; carnitine palmitoyltransferase-A; L-carnitine palmitoyltransferase; palmitoylcarnitine transferase +ec:2.3.1.22 2-acylglycerol O-acyltransferase; acylglycerol palmitoyltransferase; monoglyceride acyltransferase; acyl coenzyme A-monoglyceride acyltransferase; monoacylglycerol acyltransferase +ec:2.3.1.23 1-acylglycerophosphocholine O-acyltransferase; lysolecithin acyltransferase; 1-acyl-sn-glycero-3-phosphocholine acyltransferase; acyl coenzyme A-monoacylphosphatidylcholine acyltransferase; acyl-CoA:1-acyl-glycero-3-phosphocholine transacylase; lysophosphatide acyltransferase; lysophosphatidylcholine acyltransferase +ec:2.3.1.24 sphingosine N-acyltransferase; ceramide synthetase; sphingosine acyltransferase +ec:2.3.1.25 plasmalogen synthase; lysoplasmenylcholine acyltransferase; O-1-alkenylglycero-3-phosphorylcholine acyltransferase; 1-alkenyl-glycero-3-phosphorylcholine:acyl-CoA acyltransferase; 1-alkenylglycerophosphocholine O-acyltransferase +ec:2.3.1.26 sterol O-acyltransferase; cholesterol acyltransferase; sterol-ester synthase; acyl coenzyme A-cholesterol-O-acyltransferase; acyl-CoA:cholesterol acyltransferase; ACAT; acylcoenzyme A:cholesterol O-acyltransferase; cholesterol ester synthase; cholesterol ester synthetase; cholesteryl ester synthetase; SOAT1 (gene name); SOAT2 (gene name); ARE1 (gene name); ARE2 (gene name); acyl-CoA:cholesterol O-acyltransferase +ec:2.3.1.27 cortisol O-acetyltransferase; cortisol acetyltransferase; corticosteroid acetyltransferase; corticosteroid-21-O-acetyltransferase +ec:2.3.1.28 chloramphenicol O-acetyltransferase; chloramphenicol acetyltransferase; chloramphenicol acetylase; chloramphenicol transacetylase; CAT I; CAT II; CAT III +ec:2.3.1.29 glycine C-acetyltransferase; 2-amino-3-ketobutyrate CoA ligase; 2-amino-3-ketobutyrate coenzyme A ligase; 2-amino-3-ketobutyrate-CoA ligase; glycine acetyltransferase; aminoacetone synthase; aminoacetone synthetase; KBL; AKB ligase +ec:2.3.1.30 serine O-acetyltransferase; SATase; L-serine acetyltransferase; serine acetyltransferase; serine transacetylase +ec:2.3.1.31 homoserine O-acetyltransferase; homoserine acetyltransferase; homoserine transacetylase; homoserine-O-transacetylase; L-homoserine O-acetyltransferase +ec:2.3.1.32 lysine N-acetyltransferase; lysine acetyltransferase; acetyl-phosphate:L-lysine 6-N-acetyltransferase +ec:2.3.1.33 histidine N-acetyltransferase; acetylhistidine synthetase; histidine acetyltransferase +ec:2.3.1.34 D-tryptophan N-acetyltransferase; D-tryptophan acetyltransferase; acetyl-CoA-D-tryptophan-alpha-N-acetyltransferase +ec:2.3.1.35 glutamate N-acetyltransferase; ornithine transacetylase; alpha-N-acetyl-L-ornithine:L-glutamate N-acetyltransferase; acetylglutamate synthetase; acetylglutamate-acetylornithine transacetylase; acetylglutamic synthetase; acetylglutamic-acetylornithine transacetylase; acetylornithine glutamate acetyltransferase; glutamate acetyltransferase; N-acetyl-L-glutamate synthetase; N-acetylglutamate synthase; N-acetylglutamate synthetase; ornithine acetyltransferase; 2-N-acetyl-L-ornithine:L-glutamate N-acetyltransferase; acetylornithinase (ambiguous) +ec:2.3.1.36 D-amino-acid N-acetyltransferase; D-amino acid acetyltransferase; D-amino acid-alpha-N-acetyltransferase +ec:2.3.1.37 5-aminolevulinate synthase; ALAS; ALA synthase; alpha-aminolevulinic acid synthase; delta-aminolevulinate synthase; delta-aminolevulinate synthetase; delta-aminolevulinic acid synthase; delta-aminolevulinic acid synthetase; delta-aminolevulinic synthetase; 5-aminolevulinate synthetase; 5-aminolevulinic acid synthetase; ALA synthetase; aminolevulinate synthase; aminolevulinate synthetase; aminolevulinic acid synthase; aminolevulinic acid synthetase; aminolevulinic synthetase +ec:2.3.1.38 [acyl-carrier-protein] S-acetyltransferase; acetyl coenzyme A-acyl-carrier-protein transacylase; [acyl-carrier-protein]-acetyltransferase; [ACP]-acetyltransferase; acetyl-CoA:[acyl-carrier-protein] S-acetyltransferase +ec:2.3.1.39 [acyl-carrier-protein] S-malonyltransferase; [acyl carrier protein]malonyltransferase; FabD; malonyl coenzyme A-acyl carrier protein transacylase; malonyl transacylase; malonyl transferase; malonyl-CoA-acyl carrier protein transacylase; malonyl-CoA:[acyl-carrier-protein] S-malonyltransferase; malonyl-CoA:ACP transacylase; malonyl-CoA:ACP-SH transacylase; malonyl-CoA:AcpM transacylase; malonyl-CoA:acyl carrier protein transacylase; malonyl-CoA:acyl-carrier-protein transacylase; malonyl-CoA/dephospho-CoA acyltransferase; MAT; MCAT; MdcH +ec:2.3.1.40 acyl-[acyl-carrier-protein]---phospholipid O-acyltransferase; acyl-[acyl-carrier protein]:O-(2-acyl-sn-glycero-3-phospho)-ethanolamine O-acyltransferase +ec:2.3.1.41 beta-ketoacyl-[acyl-carrier-protein] synthase I; beta-ketoacyl-ACP synthase I; beta-ketoacyl synthetase; beta-ketoacyl-ACP synthetase; beta-ketoacyl-acyl carrier protein synthetase; beta-ketoacyl-[acyl carrier protein] synthase; beta-ketoacylsynthase; condensing enzyme (ambiguous); 3-ketoacyl-acyl carrier protein synthase; fatty acid condensing enzyme; acyl-malonyl(acyl-carrier-protein)-condensing enzyme; acyl-malonyl acyl carrier protein-condensing enzyme; beta-ketoacyl acyl carrier protein synthase; 3-oxoacyl-[acyl-carrier-protein] synthase; 3-oxoacyl:ACP synthase I; KASI; KAS I; FabF1; FabB; acyl-[acyl-carrier-protein]:malonyl-[acyl-carrier-protein] C-acyltransferase (decarboxylating) +ec:2.3.1.42 glycerone-phosphate O-acyltransferase; dihydroxyacetone phosphate acyltransferase (ambiguous) +ec:2.3.1.43 phosphatidylcholine---sterol O-acyltransferase; lecithin---cholesterol acyltransferase; phospholipid---cholesterol acyltransferase; LCAT (lecithin-cholesterol acyltransferase); lecithin:cholesterol acyltransferase; lysolecithin acyltransferase +ec:2.3.1.44 N-acetylneuraminate 4-O-acetyltransferase; sialate O-acetyltransferase +ec:2.3.1.45 N-acetylneuraminate 7-O(or 9-O)-acetyltransferase; N-acetylneuraminate 7(8)-O-acetyltransferase; sialate O-acetyltransferase; N-acetylneuraminate 7,8-O-acetyltransferase; acetyl-CoA:N-acetylneuraminate-7- or 8-O-acetyltransferase; acetyl-CoA:N-acetylneuraminate-7- and/or 8-O-acetyltransferase; glycoprotein 7(9)-O-acetyltransferase; acetyl-CoA:N-acetylneuraminate-9(7)-O-acetyltransferase; N-acetylneuraminate O7-(or O9-)acetyltransferase; acetyl-CoA:N-acetylneuraminate-9(or 7)-O-acetyltransferase +ec:2.3.1.46 homoserine O-succinyltransferase; homoserine O-transsuccinylase (ambiguous); homoserine succinyltransferase +ec:2.3.1.47 8-amino-7-oxononanoate synthase; 7-keto-8-aminopelargonic acid synthetase; 7-keto-8-aminopelargonic synthetase; 8-amino-7-oxopelargonate synthase; bioF (gene name) +ec:2.3.1.48 histone acetyltransferase; nucleosome-histone acetyltransferase; histone acetokinase; histone acetylase; histone transacetylase; lysine acetyltransferase; protein lysine acetyltransferase; acetyl-CoA:histone acetyltransferase +ec:2.3.1.49 deacetyl-[citrate-(pro-3S)-lyase] S-acetyltransferase; S-acetyl phosphopantetheine:deacetyl citrate lyase S-acetyltransferase; deacetyl-[citrate-(pro-3S)-lyase] acetyltransferase; S-acetylphosphopantetheine:deacetyl-[citrate-oxaloacetate-lyase((pro-3S)-CH2COO-->acetate)] S-acetyltransferase +ec:2.3.1.50 serine C-palmitoyltransferase; serine palmitoyltransferase; SPT; 3-oxosphinganine synthetase; acyl-CoA:serine C-2 acyltransferase decarboxylating +ec:2.3.1.51 1-acylglycerol-3-phosphate O-acyltransferase; 1-acyl-sn-glycero-3-phosphate acyltransferase; 1-acyl-sn-glycerol 3-phosphate acyltransferase; 1-acylglycero-3-phosphate acyltransferase; 1-acylglycerolphosphate acyltransferase; 1-acylglycerophosphate acyltransferase; lysophosphatidic acid-acyltransferase +ec:2.3.1.52 2-acylglycerol-3-phosphate O-acyltransferase; 2-acylglycerophosphate acyltransferase +ec:2.3.1.53 phenylalanine N-acetyltransferase; acetyl-CoA-L-phenylalanine alpha-N-acetyltransferase +ec:2.3.1.54 formate C-acetyltransferase; pyruvate formate-lyase; pyruvic formate-lyase; formate acetyltransferase +ec:2.3.1.55 Deleted entry +ec:2.3.1.56 aromatic-hydroxylamine O-acetyltransferase; aromatic hydroxylamine acetyltransferase; arylhydroxamate acyltransferase; arylhydroxamate N,O-acetyltransferase; arylhydroxamic acid N,O-acetyltransferase; arylhydroxamic acyltransferase; N,O-acetyltransferase; N-hydroxy-2-acetylaminofluorene N-O acyltransferase +ec:2.3.1.57 diamine N-acetyltransferase; spermidine acetyltransferase; putrescine acetyltransferase; putrescine (diamine)-acetylating enzyme; diamine acetyltransferase; spermidine/spermine N1-acetyltransferase; spermidine N1-acetyltransferase; acetyl-coenzyme A-1,4-diaminobutane N-acetyltransferase; putrescine acetylase; putrescine N-acetyltransferase +ec:2.3.1.58 2,3-diaminopropionate N-oxalyltransferase; oxalyldiaminopropionate synthase; ODAP synthase; oxalyl-CoA:L-alpha,beta-diaminopropionic acid oxalyltransferase; oxalyldiaminopropionic synthase; oxalyl-CoA:L-2,3-diaminopropanoate 3-N-oxalyltransferase +ec:2.3.1.59 gentamicin 2'-N-acetyltransferase; gentamycin acetyltransferase II; gentamycin 2'-N-acetyltransferase; acetyl-CoA:gentamycin-C1a N2'-acetyltransferase +ec:2.3.1.60 gentamicin 3-N-acetyltransferase; gentamycin acetyltransferase I; aminoglycoside acetyltransferase AAC(3)-1; gentamycin 3-N-acetyltransferase; acetyl-CoA:gentamycin-C N3-acetyltransferase; acetyl-CoA:gentamicin-C N3'-acetyltransferase (incorrect); gentamicin 3'-N-acetyltransferase (incorrect) +ec:2.3.1.61 dihydrolipoyllysine-residue succinyltransferase; dihydrolipoamide S-succinyltransferase; dihydrolipoamide succinyltransferase; dihydrolipoic transsuccinylase; dihydrolipolyl transsuccinylase; dihydrolipoyl transsuccinylase; lipoate succinyltransferase (Escherichia coli); lipoic transsuccinylase; lipoyl transsuccinylase; succinyl-CoA:dihydrolipoamide S-succinyltransferase; succinyl-CoA:dihydrolipoate S-succinyltransferase; enzyme-dihydrolipoyllysine:succinyl-CoA S-succinyltransferase +ec:2.3.1.62 2-acylglycerophosphocholine O-acyltransferase; 2-acylglycerol-3-phosphorylcholine acyltransferase; 2-acylglycerophosphocholine acyltransferase +ec:2.3.1.63 1-alkylglycerophosphocholine O-acyltransferase +ec:2.3.1.64 agmatine N4-coumaroyltransferase; p-coumaroyl-CoA-agmatine N-p-coumaroyltransferase; agmatine coumaroyltransferase; 4-coumaroyl-CoA:agmatine 4-N-coumaroyltransferase +ec:2.3.1.65 bile acid-CoA:amino acid N-acyltransferase; glycine---taurine N-acyltransferase; amino acid N-choloyltransferase; BAT; glycine N-choloyltransferase; BACAT; cholyl-CoA glycine-taurine N-acyltransferase; cholyl-CoA:taurine N-acyltransferase +ec:2.3.1.66 leucine N-acetyltransferase; leucine acetyltransferase +ec:2.3.1.67 1-alkylglycerophosphocholine O-acetyltransferase; acetyl-CoA:1-alkyl-2-lyso-sn-glycero-3-phosphocholine 2-O-acetyltransferase; acetyl-CoA:lyso-PAF acetyltransferase; 1-alkyl-2-lysolecithin acetyltransferase; acyl-CoA:1-alkyl-sn-glycero-3-phosphocholine acyltransferase; blood platelet-activating factor acetyltransferase; lyso-GPC:acetyl CoA acetyltransferase; lyso-platelet activating factor:acetyl-CoA acetyltransferase; lysoPAF:acetyl CoA acetyltransferase; PAF acetyltransferase; platelet-activating factor acylhydrolase; platelet-activating factor-synthesizing enzyme; 1-alkyl-2-lyso-sn-glycero-3-phosphocholine acetyltransferase; lyso-platelet-activating factor:acetyl-CoA acetyltransferase +ec:2.3.1.68 glutamine N-acyltransferase +ec:2.3.1.69 monoterpenol O-acetyltransferase; menthol transacetylase +ec:2.3.1.70 Deleted entry +ec:2.3.1.71 glycine N-benzoyltransferase; benzoyl CoA-amino acid N-acyltransferase; benzoyl-CoA:glycine N-acyltransferase +ec:2.3.1.72 indoleacetylglucose---inositol O-acyltransferase; indole-3-acetyl-beta-1-D-glucoside:myo-inositol indoleacetyltransferase; 1-O-(indol-3-ylacetyl)-beta-D-glucose:myo-inositol indole-3-ylacetyltransferase +ec:2.3.1.73 diacylglycerol---sterol O-acyltransferase; 1,2-diacyl-sn-glycerol:sterol acyl transferase +ec:2.3.1.74 chalcone synthase; naringenin-chalcone synthase; flavanone synthase; 6'-deoxychalcone synthase; chalcone synthetase; DOCS; CHS +ec:2.3.1.75 long-chain-alcohol O-fatty-acyltransferase; wax synthase; wax-ester synthase +ec:2.3.1.76 retinol O-fatty-acyltransferase; retinol acyltransferase; retinol fatty-acyltransferase +ec:2.3.1.77 triacylglycerol---sterol O-acyltransferase; triacylglycerol:sterol acyltransferase +ec:2.3.1.78 heparan-alpha-glucosaminide N-acetyltransferase; acetyl-CoA:alpha-glucosaminide N-acetyltransferase +ec:2.3.1.79 maltose O-acetyltransferase; maltose transacetylase; maltose O-acetyltransferase; MAT +ec:2.3.1.80 cysteine-S-conjugate N-acetyltransferase +ec:2.3.1.81 aminoglycoside 3-N-acetyltransferase; 3-aminoglycoside acetyltransferase; 3-N-aminoglycoside acetyltransferase; aminoglycoside N3-acetyltransferase; acetyl-CoA:2-deoxystreptamine-antibiotic N3'-acetyltransferase (incorrect); aminoglycoside N3'-acetyltransferase (incorrect) +ec:2.3.1.82 aminoglycoside 6'-N-acetyltransferase; aminoglycoside N6'-acetyltransferase; aminoglycoside-6'-acetyltransferase; aminoglycoside-6-N-acetyltransferase; kanamycin acetyltransferase +ec:2.3.1.83 phosphatidylcholine---dolichol O-acyltransferase +ec:2.3.1.84 alcohol O-acetyltransferase; alcohol acetyltransferase +ec:2.3.1.85 fatty-acid synthase system; FASN (gene name); fatty-acid synthase +ec:2.3.1.86 fatty-acyl-CoA synthase system; yeast fatty acid synthase; FAS1 (gene name); FAS2 (gene name); fatty-acyl-CoA synthase +ec:2.3.1.87 aralkylamine N-acetyltransferase; serotonin acetyltransferase; serotonin acetylase; arylalkylamine N-acetyltransferase; serotonin N-acetyltransferase; AANAT; melatonin rhythm enzyme +ec:2.3.1.88 Transferred to 2.3.1.254 and 2.3.1.255 and 2.3.1.256 and 2.3.1.257 and 2.3.1.258 and 2.3.1.259 +ec:2.3.1.89 tetrahydrodipicolinate N-acetyltransferase; tetrahydrodipicolinate acetylase; tetrahydrodipicolinate:acetyl-CoA acetyltransferase; acetyl-CoA:L-2,3,4,5-tetrahydrodipicolinate N2-acetyltransferase; acetyl-CoA:(S)-2,3,4,5-tetrahydropyridine-2,6-dicarboxylate 2-N-acetyltransferase +ec:2.3.1.90 beta-glucogallin O-galloyltransferase +ec:2.3.1.91 sinapoylglucose---choline O-sinapoyltransferase; sinapine synthase +ec:2.3.1.92 sinapoylglucose---malate O-sinapoyltransferase; 1-sinapoylglucose-L-malate sinapoyltransferase; sinapoylglucose:malate sinapoyltransferase +ec:2.3.1.93 13-hydroxylupanine O-tigloyltransferase; tigloyl-CoA:13-hydroxylupanine O-tigloyltransferase; 13-hydroxylupanine acyltransferase +ec:2.3.1.94 6-deoxyerythronolide-B synthase; erythronolide condensing enzyme; malonyl-CoA:propionyl-CoA malonyltransferase (cyclizing); erythronolide synthase; malonyl-CoA:propanoyl-CoA malonyltransferase (cyclizing); deoxyerythronolide B synthase; 6-deoxyerythronolide B synthase; DEBS +ec:2.3.1.95 trihydroxystilbene synthase; resveratrol synthase; stilbene synthase (ambiguous) +ec:2.3.1.96 Deleted entry +ec:2.3.1.97 glycylpeptide N-tetradecanoyltransferase; NMT (gene name); peptide N-myristoyltransferase; myristoyl-CoA-protein N-myristoyltransferase; myristoyl-coenzyme A:protein N-myristoyl transferase; myristoylating enzymes; protein N-myristoyltransferase; tetradecanoyl-CoA:glycylpeptide N-tetradecanoyltransferase +ec:2.3.1.98 chlorogenate---glucarate O-hydroxycinnamoyltransferase; chlorogenate:glucarate caffeoyltransferase; chlorogenic acid:glucaric acid O-caffeoyltransferase; chlorogenate:glucarate caffeoyltransferase +ec:2.3.1.99 quinate O-hydroxycinnamoyltransferase; hydroxycinnamoyl coenzyme A-quinate transferase +ec:2.3.1.100 [myelin-proteolipid] O-palmitoyltransferase; myelin PLP acyltransferase; acyl-protein synthetase; myelin-proteolipid O-palmitoyltransferase +ec:2.3.1.101 formylmethanofuran---tetrahydromethanopterin N-formyltransferase; formylmethanofuran-tetrahydromethanopterin formyltransferase; formylmethanofuran:tetrahydromethanopterin formyltransferase; N-formylmethanofuran(CHO-MFR):tetrahydromethanopterin(H4MPT) formyltransferase; FTR; formylmethanofuran:5,6,7,8-tetrahydromethanopterin N5-formyltransferase +ec:2.3.1.102 N6-hydroxylysine N-acetyltransferase; N6-hydroxylysine:acetyl CoA N6-transacetylase; N6-hydroxylysine acetylase; acetyl-CoA:6-N-hydroxy-L-lysine 6-acetyltransferase; N6-hydroxylysine O-acetyltransferase (incorrect) +ec:2.3.1.103 sinapoylglucose---sinapoylglucose O-sinapoyltransferase; hydroxycinnamoylglucose-hydroxycinnamoylglucose hydroxycinnamoyltransferase; 1-(hydroxycinnamoyl)-glucose:1-(hydroxycinnamoyl)-glucose hydroxycinnamoyltransferase; 1-O-(4-hydroxy-3,5-dimethoxycinnamoyl)-beta-D-glucoside:1-O-(4-hydroxy-3,5-dimethoxycinnamoyl)-beta-D-glucoside 1-O-sinapoyltransferase +ec:2.3.1.104 Deleted entry +ec:2.3.1.105 alkylglycerophosphate 2-O-acetyltransferase; alkyllyso-GP:acetyl-CoA acetyltransferase +ec:2.3.1.106 tartronate O-hydroxycinnamoyltransferase; tartronate sinapoyltransferase; hydroxycinnamoyl-coenzyme-A:tartronate hydroxycinnamoyltransferase +ec:2.3.1.107 deacetylvindoline O-acetyltransferase; deacetylvindoline acetyltransferase; DAT; 17-O-deacetylvindoline-17-O-acetyltransferase; acetylcoenzyme A-deacetylvindoline 4-O-acetyltransferase; acetyl-CoA-17-O-deacetylvindoline 17-O-acetyltransferase; acetylcoenzyme A:deacetylvindoline 4-O-acetyltransferase; acetylcoenzyme A:deacetylvindoline O-acetyltransferase; 17-O-deacetylvindoline O-acetyltransferase; acetyl-CoA:17-O-deacetylvindoline 17-O-acetyltransferase +ec:2.3.1.108 alpha-tubulin N-acetyltransferase; ATAT1 (gene name); MEC17 (gene name); alpha-tubulin acetylase; TAT; alpha-tubulin acetyltransferase; tubulin N-acetyltransferase (ambiguous); acetyl-CoA:alpha-tubulin-L-lysine N-acetyltransferase; acetyl-CoA:[alpha-tubulin]-L-lysine 6-N-acetyltransferase +ec:2.3.1.109 arginine N-succinyltransferase; arginine succinyltransferase; AstA; arginine and ornithine N2-succinyltransferase; AOST; AST (ambiguous); succinyl-CoA:L-arginine 2-N-succinyltransferase +ec:2.3.1.110 tyramine N-feruloyltransferase; tyramine N-feruloyl-CoA transferase; feruloyltyramine synthase; feruloyl-CoA tyramine N-feruloyl-CoA transferase; tyramine feruloyltransferase +ec:2.3.1.111 mycocerosate synthase; mas (gene name); mycocerosic acid synthase; acyl-CoA:methylmalonyl-CoA C-acyltransferase (decarboxylating, oxoacyl- and enoyl-reducing); long-chain acyl-CoA:methylmalonyl-CoA C-acyltransferase (mycocerosate-forming) +ec:2.3.1.112 D-tryptophan N-malonyltransferase +ec:2.3.1.113 anthranilate N-malonyltransferase +ec:2.3.1.114 3,4-dichloroaniline N-malonyltransferase +ec:2.3.1.115 isoflavone-7-O-beta-glucoside 6''-O-malonyltransferase; flavone/flavonol 7-O-beta-D-glucoside malonyltransferase; flavone (flavonol) 7-O-glycoside malonyltransferase; malonyl-CoA:flavone/flavonol 7-O-glucoside malonyltransferase; MAT-7; malonyl-coenzyme A:isoflavone 7-O-glucoside-6''-malonyltransferase; malonyl-coenzyme A:flavone/flavonol-7-O-glycoside malonyltransferase +ec:2.3.1.116 flavonol-3-O-beta-glucoside O-malonyltransferase; flavonol 3-O-glucoside malonyltransferase; MAT-3; malonyl-coenzyme A:flavonol-3-O-glucoside malonyltransferase +ec:2.3.1.117 2,3,4,5-tetrahydropyridine-2,6-dicarboxylate N-succinyltransferase; tetrahydropicolinate succinylase; tetrahydrodipicolinate N-succinyltransferase; tetrahydrodipicolinate succinyltransferase; succinyl-CoA:tetrahydrodipicolinate N-succinyltransferase; succinyl-CoA:2,3,4,5-tetrahydropyridine-2,6-dicarboxylate N-succinyltransferase +ec:2.3.1.118 N-hydroxyarylamine O-acetyltransferase; arylhydroxamate N,O-acetyltransferase; arylamine N-acetyltransferase; N-hydroxy-2-aminofluorene-O-acetyltransferase +ec:2.3.1.119 Deleted entry +ec:2.3.1.120 Deleted entry +ec:2.3.1.121 1-alkenylglycerophosphoethanolamine O-acyltransferase +ec:2.3.1.122 trehalose O-mycolyltransferase; alpha,alpha'-trehalose 6-monomycolate:alpha,alpha'-trehalose mycolyltransferase; alpha,alpha'-trehalose-6-mycolate:alpha,alpha'-trehalose-6-mycolate 6'-mycolyltransferase +ec:2.3.1.123 dolichol O-acyltransferase; acyl-CoA:dolichol acyltransferase +ec:2.3.1.124 Deleted entry +ec:2.3.1.125 1-alkyl-2-acetylglycerol O-acyltransferase; 1-hexadecyl-2-acetylglycerol acyltransferase +ec:2.3.1.126 isocitrate O-dihydroxycinnamoyltransferase +ec:2.3.1.127 ornithine N-benzoyltransferase; ornithine N-acyltransferase +ec:2.3.1.128 Transferred to 2.3.1.266 and 2.3.1.267 +ec:2.3.1.129 acyl-[acyl-carrier-protein]---UDP-N-acetylglucosamine O-acyltransferase; lpxA (gene name); UDP-N-acetylglucosamine acyltransferase; uridine diphosphoacetylglucosamine acyltransferase; acyl-[acyl-carrier-protein]-UDP-N-acetylglucosamine O-acyltransferase; (R)-3-hydroxytetradecanoyl-[acyl-carrier-protein]:UDP-N-acetylglucosamine 3-O-(3-hydroxytetradecanoyl)transferase +ec:2.3.1.130 galactarate O-hydroxycinnamoyltransferase; galacturate hydroxycinnamoyltransferase +ec:2.3.1.131 glucarate O-hydroxycinnamoyltransferase +ec:2.3.1.132 glucarolactone O-hydroxycinnamoyltransferase +ec:2.3.1.133 shikimate O-hydroxycinnamoyltransferase; shikimate hydroxycinnamoyltransferase +ec:2.3.1.134 galactolipid O-acyltransferase; galactolipid:galactolipid acyltransferase +ec:2.3.1.135 phosphatidylcholine---retinol O-acyltransferase; lecithin---retinol acyltransferase; phosphatidylcholine:retinol-(cellular-retinol-binding-protein) O-acyltransferase; lecithin:retinol acyltransferase; lecithin-retinol acyltransferase; retinyl ester synthase; LRAT; lecithin retinol acyl transferase +ec:2.3.1.136 polysialic-acid O-acetyltransferase +ec:2.3.1.137 carnitine O-octanoyltransferase; medium-chain/long-chain carnitine acyltransferase; carnitine medium-chain acyltransferase; easily solubilized mitochondrial carnitine palmitoyltransferase; overt mitochondrial carnitine palmitoyltransferase +ec:2.3.1.138 putrescine N-hydroxycinnamoyltransferase; caffeoyl-CoA putrescine N-caffeoyl transferase; PHT; putrescine hydroxycinnamoyl transferase; hydroxycinnamoyl-CoA:putrescine hydroxycinnamoyltransferase; putrescine hydroxycinnamoyltransferase +ec:2.3.1.139 ecdysone O-acyltransferase; acyl-CoA:ecdysone acyltransferase; fatty acyl-CoA:ecdysone acyltransferase +ec:2.3.1.140 rosmarinate synthase; rosmarinic acid synthase; caffeoyl-coenzyme A:3,4-dihydroxyphenyllactic acid caffeoyltransferase; 4-coumaroyl-CoA:4-hydroxyphenyllactic acid 4-coumaroyl transferase; RAS (gene name) +ec:2.3.1.141 galactosylacylglycerol O-acyltransferase; acyl-acyl-carrier protein: lysomonogalactosyldiacylglycerol acyltransferase; acyl-ACP:lyso-MGDG acyltransferase; acyl-[acyl-carrier-protein]:D-galactosylacylglycerol O-acyltransferase +ec:2.3.1.142 glycoprotein O-fatty-acyltransferase; protein acyltransferase +ec:2.3.1.143 beta-glucogallin---tetrakisgalloylglucose O-galloyltransferase; beta-glucogallin-tetragalloylglucose 4-galloyltransferase; beta-glucogallin:1,2,3,6-tetra-O-galloylglucose 4-O-galloyltransferase; beta-glucogallin:1,2,3,6-tetra-O-galloyl-beta-D-glucose 4-O-galloyltransferase +ec:2.3.1.144 anthranilate N-benzoyltransferase +ec:2.3.1.145 piperidine N-piperoyltransferase; piperidine piperoyltransferase; piperoyl-CoA:piperidine N-piperoyltransferase +ec:2.3.1.146 pinosylvin synthase; stilbene synthase (ambiguous); pine stilbene synthase (ambiguous) +ec:2.3.1.147 glycerophospholipid arachidonoyl-transferase (CoA-independent) +ec:2.3.1.148 glycerophospholipid acyltransferase (CoA-dependent) +ec:2.3.1.149 platelet-activating factor acetyltransferase; PAF acetyltransferase +ec:2.3.1.150 salutaridinol 7-O-acetyltransferase +ec:2.3.1.151 2,3',4,6-tetrahydroxybenzophenone synthase; benzophenone synthase (ambiguous); BPS (ambiguous) +ec:2.3.1.152 alcohol O-cinnamoyltransferase +ec:2.3.1.153 anthocyanin 5-(6'''-hydroxycinnamoyltransferase) +ec:2.3.1.154 Transferred to 2.3.1.176 +ec:2.3.1.155 acetyl-CoA C-myristoyltransferase +ec:2.3.1.156 phloroisovalerophenone synthase; valerophenone synthase; 3-methyl-1-(trihydroxyphenyl)butan-1-one synthase; acylphloroglucinol synthase; isovaleryl-CoA:malonyl-CoA acyltransferase +ec:2.3.1.157 glucosamine-1-phosphate N-acetyltransferase +ec:2.3.1.158 phospholipid:diacylglycerol acyltransferase; PDAT +ec:2.3.1.159 acridone synthase +ec:2.3.1.160 vinorine synthase +ec:2.3.1.161 lovastatin nonaketide synthase; LNKS; LovB; LovC; acyl-CoA:malonyl-CoA C-acyltransferase (decarboxylating, oxoacyl- and enoyl-reducing, thioester-hydrolysing) +ec:2.3.1.162 taxadien-5alpha-ol O-acetyltransferase; acetyl coenzyme A:taxa-4(20),11(12)-dien-5alpha-ol O-acetyl transferase +ec:2.3.1.163 10-hydroxytaxane O-acetyltransferase; acetyl coenzyme A: 10-hydroxytaxane O-acetyltransferase +ec:2.3.1.164 isopenicillin-N N-acyltransferase; acyl-coenzyme A:isopenicillin N acyltransferase; isopenicillin N:acyl-CoA: acyltransferase +ec:2.3.1.165 6-methylsalicylic-acid synthase; MSAS; 6-methylsalicylic acid synthase +ec:2.3.1.166 2alpha-hydroxytaxane 2-O-benzoyltransferase; benzoyl-CoA:taxane 2alpha-O-benzoyltransferase +ec:2.3.1.167 10-deacetylbaccatin III 10-O-acetyltransferase +ec:2.3.1.168 dihydrolipoyllysine-residue (2-methylpropanoyl)transferase; dihydrolipoyl transacylase; enzyme-dihydrolipoyllysine:2-methylpropanoyl-CoA S-(2-methylpropanoyl)transferase; 2-methylpropanoyl-CoA:enzyme-6-N-(dihydrolipoyl)lysine S-(2-methylpropanoyl)transferase +ec:2.3.1.169 CO-methylating acetyl-CoA synthase +ec:2.3.1.170 6'-deoxychalcone synthase +ec:2.3.1.171 anthocyanin 6''-O-malonyltransferase +ec:2.3.1.172 anthocyanin 5-O-glucoside 6'''-O-malonyltransferase +ec:2.3.1.173 flavonol-3-O-triglucoside O-coumaroyltransferase; 4-coumaroyl-CoA:flavonol-3-O-[beta-D-glucosyl-(1->2)-beta-D-glucoside] 6'''-O-4-coumaroyltransferase (incorrect) +ec:2.3.1.174 3-oxoadipyl-CoA thiolase +ec:2.3.1.175 deacetylcephalosporin-C acetyltransferase; acetyl-CoA:deacetylcephalosporin-C acetyltransferase; DAC acetyltransferase; cefG; deacetylcephalosporin C acetyltransferase; acetyl coenzyme A:DAC acetyltransferase; acetyl-CoA:DAC acetyltransferase; CPC acetylhydrolase; acetyl-CoA:DAC O-acetyltransferase; DAC-AT +ec:2.3.1.176 propanoyl-CoA C-acyltransferase; SCP2 (gene name); peroxisomal thiolase 2; sterol carrier protein-chi; SCPchi; PTE-2 (ambiguous); propionyl-CoA C2-trimethyltridecanoyltransferase; 3-oxopristanoyl-CoA hydrolase; 3-oxopristanoyl-CoA thiolase; peroxisome sterol carrier protein thiolase; sterol carrier protein; oxopristanoyl-CoA thiolase; peroxisomal 3-oxoacyl coenzyme A thiolase; SCPx; 4,8,12-trimethyltridecanoyl-CoA:propanoyl-CoA 2-C-4,8,12-trimethyltridecanoyltransferase +ec:2.3.1.177 3,5-dihydroxybiphenyl synthase; BIS1; biphenyl synthase (ambiguous) +ec:2.3.1.178 diaminobutyrate acetyltransferase; L-2,4-diaminobutyrate acetyltransferase; L-2,4-diaminobutanoate acetyltransferase; EctA; diaminobutyric acid acetyltransferase; DABA acetyltransferase; 2,4-diaminobutanoate acetyltransferase; DAB acetyltransferase; DABAcT; acetyl-CoA:L-2,4-diaminobutanoate 4-N-acetyltransferase +ec:2.3.1.179 beta-ketoacyl-[acyl-carrier-protein] synthase II; KASII; KAS II; FabF; 3-oxoacyl-acyl carrier protein synthase II; beta-ketoacyl-ACP synthase II +ec:2.3.1.180 beta-ketoacyl-[acyl-carrier-protein] synthase III; 3-oxoacyl:ACP synthase III; 3-ketoacyl-acyl carrier protein synthase III; KASIII; KAS III; FabH; beta-ketoacyl-acyl carrier protein synthase III; beta-ketoacyl-ACP synthase III; beta-ketoacyl (acyl carrier protein) synthase III; acetyl-CoA:malonyl-[acyl-carrier-protein] C-acyltransferase +ec:2.3.1.181 lipoyl(octanoyl) transferase; LipB; lipoyl (octanoyl)-[acyl-carrier-protein]-protein N-lipoyltransferase; lipoyl (octanoyl)-acyl carrier protein:protein transferase; lipoate/octanoate transferase; lipoyltransferase; octanoyl-[acyl carrier protein]-protein N-octanoyltransferase; lipoyl(octanoyl)transferase; octanoyl-[acyl-carrier-protein]:protein N-octanoyltransferase +ec:2.3.1.182 Transferred to 2.3.3.21 +ec:2.3.1.183 phosphinothricin acetyltransferase; PAT (ambiguous); PPT acetyltransferase; Pt-N-acetyltransferase +ec:2.3.1.184 acyl-homoserine-lactone synthase; acyl-homoserine lactone synthase; acyl homoserine lactone synthase; acyl-homoserinelactone synthase; acylhomoserine lactone synthase; AHL synthase; AHS; AHSL synthase; AhyI; AinS; AinS protein; autoinducer synthase; autoinducer synthesis protein rhlI; EsaI; ExpISCC1; ExpISCC3065; LasI; LasR; LuxI; LuxI protein; LuxM; N-acyl homoserine lactone synthase; RhlI; YspI ; acyl-[acyl carrier protein]:S-adenosyl-L-methionine acyltranserase (lactone-forming, methylthioadenosine-releasing) +ec:2.3.1.185 tropine acyltransferase; tropine:acyl-CoA transferase; acetyl-CoA:tropan-3-ol acyltransferase; tropine acetyltransferase; tropine tigloyltransferase; TAT +ec:2.3.1.186 pseudotropine acyltransferase; pseudotropine:acyl-CoA transferase; tigloyl-CoA:pseudotropine acyltransferase; acetyl-CoA:pseudotropine acyltransferase; pseudotropine acetyltransferase; pseudotropine tigloyltransferase; PAT (ambiguous) +ec:2.3.1.187 acetyl-S-ACP:malonate ACP transferase; acetyl-S-ACP:malonate ACP-SH transferase; acetyl-S-acyl-carrier protein:malonate acyl-carrier-protein-transferase; MdcA; MadA; ACP transferase; malonate/acetyl-CoA transferase; malonate:ACP transferase; acetyl-S-acyl carrier protein:malonate acyl carrier protein-SH transferase +ec:2.3.1.188 omega-hydroxypalmitate O-feruloyl transferase; hydroxycinnamoyl-CoA omega-hydroxypalmitic acid O-hydroxycinnamoyltransferase; HHT +ec:2.3.1.189 mycothiol synthase; MshD +ec:2.3.1.190 acetoin dehydrogenase system; acetoin dehydrogenase complex; acetoin dehydrogenase enzyme system; AoDH ES; acetoin dehydrogenase +ec:2.3.1.191 UDP-3-O-(3-hydroxyacyl)glucosamine N-acyltransferase; lpxD (gene name); UDP-3-O-acyl-glucosamine N-acyltransferase; UDP-3-O-(R-3-hydroxymyristoyl)-glucosamine N-acyltransferase; acyltransferase LpxD; acyl-ACP:UDP-3-O-(3-hydroxyacyl)-GlcN N-acyltransferase; firA (gene name); (3R)-3-hydroxymyristoyl-[acyl-carrier protein]:UDP-3-O-[(3R)-3-hydroxymyristoyl]-alpha-D-glucosamine N-acetyltransferase; UDP-3-O-(3-hydroxymyristoyl)glucosamine N-acyltransferase; (3R)-3-hydroxytetradecanoyl-[acyl-carrier protein]:UDP-3-O-[(3R)-3-hydroxytetradecanoyl]-alpha-D-glucosamine N-acetyltransferase +ec:2.3.1.192 glycine N-phenylacetyltransferase; arylacetyl-CoA N-acyltransferase; arylacetyltransferase; GAT (gene name) +ec:2.3.1.193 tRNAMet cytidine acetyltransferase; YpfI; TmcA +ec:2.3.1.194 acetoacetyl-CoA synthase; NphT7 +ec:2.3.1.195 (Z)-3-hexen-1-ol acetyltransferase; CHAT; At3g03480 +ec:2.3.1.196 benzyl alcohol O-benzoyltransferase; benzoyl-CoA:benzyl alcohol benzoyltransferase; benzoyl-CoA:benzyl alcohol/phenylethanol benzoyltransferase; benzoyl-coenzyme A:benzyl alcohol benzoyltransferase; benzoyl-coenzyme A:phenylethanol benzoyltransferase +ec:2.3.1.197 dTDP-3-amino-3,6-dideoxy-alpha-D-galactopyranose 3-N-acetyltransferase; FdtC; dTDP-D-Fucp3N acetylase +ec:2.3.1.198 glycerol-3-phosphate 2-O-acyltransferase; sn-2-glycerol-3-phosphate O-acyltransferase; glycerol-3-phosphate O-acyltransferase (ambiguous) +ec:2.3.1.199 very-long-chain 3-oxoacyl-CoA synthase; very-long-chain 3-ketoacyl-CoA synthase; very-long-chain beta-ketoacyl-CoA synthase; condensing enzyme (ambiguous); CUT1 (gene name); CER6 (gene name); FAE1 (gene name); KCS (gene name); ELO (gene name) +ec:2.3.1.200 lipoyl amidotransferase; LipL (gene name, ambiguous) +ec:2.3.1.201 UDP-2-acetamido-3-amino-2,3-dideoxy-glucuronate N-acetyltransferase; WbpD; WlbB +ec:2.3.1.202 UDP-4-amino-4,6-dideoxy-N-acetyl-beta-L-altrosamine N-acetyltransferase; PseH +ec:2.3.1.203 UDP-N-acetylbacillosamine N-acetyltransferase; UDP-4-amino-4,6-dideoxy-N-acetyl-alpha-D-glucosamine N-acetyltransferase; pglD (gene name) +ec:2.3.1.204 octanoyl-[GcvH]:protein N-octanoyltransferase; LipL; octanoyl-[GcvH]:E2 amidotransferase; ywfL (gene name) +ec:2.3.1.205 fumigaclavine B O-acetyltransferase; FgaAT +ec:2.3.1.206 3,5,7-trioxododecanoyl-CoA synthase; TKS (ambiguous); olivetol synthase (incorrect) +ec:2.3.1.207 beta-ketodecanoyl-[acyl-carrier-protein] synthase +ec:2.3.1.208 4-hydroxycoumarin synthase; BIS2; BIS3 +ec:2.3.1.209 dTDP-4-amino-4,6-dideoxy-D-glucose acyltransferase; VioB +ec:2.3.1.210 dTDP-4-amino-4,6-dideoxy-D-galactose acyltransferase; TDP-fucosamine acetyltransferase; WecD; RffC +ec:2.3.1.211 bisdemethoxycurcumin synthase; CUS; curcuminoid synthase (ambiguous) +ec:2.3.1.212 benzalacetone synthase; BAS +ec:2.3.1.213 cyanidin 3-O-(6-O-glucosyl-2-O-xylosylgalactoside) 6'''-O-hydroxycinnamoyltransferase; 1-O-(4-hydroxycinnamoyl)-beta-D-glucose:cyanidin 3-O-(2"-O-xylosyl-6"-O-glucosylgalactoside) 6'''-O-(4-hydroxycinnamoyl)transferase +ec:2.3.1.214 pelargonidin 3-O-(6-caffeoylglucoside) 5-O-(6-O-malonylglucoside) 4'''-malonyltransferase; malonyl-CoA:anthocyanin 5-glucoside 4'''-O-malonyltransferase; Ss5MaT2 +ec:2.3.1.215 anthocyanidin 3-O-glucoside 6''-O-acyltransferase +ec:2.3.1.216 5,7-dihydroxy-2-methylchromone synthase; pentaketide chromone synthase +ec:2.3.1.217 curcumin synthase; CURS; CURS1 (gene name); CURS2 (gene name); CURS3 (gene name) +ec:2.3.1.218 phenylpropanoylacetyl-CoA synthase; phenylpropanoyl-diketide-CoA synthase; DCS +ec:2.3.1.219 demethoxycurcumin synthase; CURS3 +ec:2.3.1.220 2,4,6-trihydroxybenzophenone synthase; benzophenone synthase (ambiguous); BPS (ambiguous) +ec:2.3.1.221 noranthrone synthase; polyketide synthase A (ambiguous); PksA (ambiguous); norsolorinic acid anthrone synthase +ec:2.3.1.222 phosphate propanoyltransferase; PduL +ec:2.3.1.223 3-oxo-5,6-didehydrosuberyl-CoA thiolase; paaJ (gene name) +ec:2.3.1.224 acetyl-CoA-benzylalcohol acetyltransferase; BEAT +ec:2.3.1.225 protein S-acyltransferase; DHHC palmitoyl transferase; S-protein acyltransferase; G-protein palmitoyltransferase +ec:2.3.1.226 carboxymethylproline synthase; CarB (ambiguous) +ec:2.3.1.227 GDP-perosamine N-acetyltransferase; perB (gene name); GDP-alpha-D-perosamine N-acetyltransferase +ec:2.3.1.228 isovaleryl-homoserine lactone synthase; IV-HSL synthase; BjaI +ec:2.3.1.229 4-coumaroyl-homoserine lactone synthase; p-coumaryl-homoserine lactone synthase; RpaI +ec:2.3.1.230 2-heptyl-4(1H)-quinolone synthase; pqsBC (gene names); malonyl-CoA:anthraniloyl-CoA C-acetyltransferase (decarboxylating) +ec:2.3.1.231 tRNAPhe {7-[3-amino-3-(methoxycarbonyl)propyl]wyosine37-N}-methoxycarbonyltransferase; TYW4 (ambiguous); tRNA-yW synthesizing enzyme-4 (ambiguous) +ec:2.3.1.232 methanol O-anthraniloyltransferase; AMAT; anthraniloyl-coenzyme A (CoA):methanol acyltransferase +ec:2.3.1.233 1,3,6,8-tetrahydroxynaphthalene synthase; PKS1; THNS; SCO1206; RppA +ec:2.3.1.234 N6-L-threonylcarbamoyladenine synthase; t6A synthase; Kae1; ygjD (gene name); Qri7 +ec:2.3.1.235 tetracenomycin F2 synthase; TCM PKS +ec:2.3.1.236 5-methylnaphthoic acid synthase; AziB +ec:2.3.1.237 neocarzinostatin naphthoate synthase; naphthoic acid synthase; NNS; ncsB (gene name) +ec:2.3.1.238 monacolin J acid methylbutanoate transferase; LovD +ec:2.3.1.239 10-deoxymethynolide synthase; pikromycin PKS +ec:2.3.1.240 narbonolide synthase; pikromycin PKS +ec:2.3.1.241 Kdo2-lipid IVA acyltransferase; LpxL; htrB (gene name); dodecanoyl-[acyl-carrier protein]:alpha-Kdo-(2->4)-alpha-Kdo-(2->6)-lipid IVA O-dodecanoyltransferase; lauroyl-[acyl-carrier protein]:Kdo2-lipid IVA O-lauroyltransferase; (Kdo)2-lipid IVA lauroyltransferase; alpha-Kdo-(2->4)-alpha-(2->6)-lipid IVA lauroyltransferase; dodecanoyl-[acyl-carrier protein]:Kdo2-lipid IVA O-dodecanoyltransferase; Kdo2-lipid IVA lauroyltransferase +ec:2.3.1.242 Kdo2-lipid IVA palmitoleoyltransferase; LpxP; palmitoleoyl-acyl carrier protein-dependent acyltransferase; cold-induced palmitoleoyl transferase; palmitoleoyl-[acyl-carrier protein]:Kdo2-lipid IVA O-palmitoleoyltransferase; (Kdo)2-lipid IVA palmitoleoyltransferase; alpha-Kdo-(2->4)-alpha-(2->6)-lipid IVA palmitoleoyltransferase +ec:2.3.1.243 acyl-Kdo2-lipid IVA acyltransferase; lpxM (gene name); MsbB acyltransferase; myristoyl-[acyl-carrier protein]:alpha-Kdo-(2->4)-alpha-Kdo-(2->6)-(dodecanoyl)-lipid IVA O-myristoyltransferase; tetradecanoyl-[acyl-carrier protein]:dodecanoyl-Kdo2-lipid IVA O-tetradecanoyltransferase; lauroyl-Kdo2-lipid IVA myristoyltransferase +ec:2.3.1.244 2-methylbutanoate polyketide synthase; LovF +ec:2.3.1.245 3-hydroxy-5-phosphooxypentane-2,4-dione thiolase; lsrF (gene name); 3-hydroxy-5-phosphonooxypentane-2,4-dione thiolase +ec:2.3.1.246 3,5-dihydroxyphenylacetyl-CoA synthase; DpgA +ec:2.3.1.247 3-keto-5-aminohexanoate cleavage enzyme; kce (gene name) +ec:2.3.1.248 spermidine disinapoyl transferase; SDT +ec:2.3.1.249 spermidine dicoumaroyl transferase; SCT +ec:2.3.1.250 [Wnt protein] O-palmitoleoyl transferase; porcupine; PORCN (gene name) +ec:2.3.1.251 lipid IVA palmitoyltransferase; PagP; crcA (gene name) +ec:2.3.1.252 mycolipanoate synthase; msl3 (gene name); Pks3/4; mycolipanoic acid synthase; long-chain acyl-CoA:methylmalonyl-CoA C-acyltransferase (mycolipanoate-forming) +ec:2.3.1.253 phloroglucinol synthase; phlD (gene name) +ec:2.3.1.254 N-terminal methionine Nalpha-acetyltransferase NatB; NAA20 (gene name); NAA25 (gene name) +ec:2.3.1.255 N-terminal amino-acid Nalpha-acetyltransferase NatA; NAA10 (gene name); NAA15 (gene name); ARD1 (gene name) +ec:2.3.1.256 N-terminal methionine Nalpha-acetyltransferase NatC; NAA30 (gene name); NAA35 (gene name); NAA38 (gene name); MAK3 (gene name); MAK10 (gene name); MAK31 (gene name) +ec:2.3.1.257 N-terminal L-serine Nalpha-acetyltransferase NatD; NAA40 (gene name) +ec:2.3.1.258 N-terminal methionine Nalpha-acetyltransferase NatE; NAA50 (gene name); NAT5; SAN +ec:2.3.1.259 N-terminal methionine Nalpha-acetyltransferase NatF; NAA60 (gene name) +ec:2.3.1.260 tetracycline polyketide synthase +ec:2.3.1.261 (4-hydroxyphenyl)alkanoate synthase; msl7 (gene name); Pks15/1 +ec:2.3.1.262 anthraniloyl-CoA anthraniloyltransferase; pqsD (gene name) +ec:2.3.1.263 2-amino-4-oxopentanoate thiolase; AKPT; AKP thiolase; 2-amino-4-ketopentanoate thiolase +ec:2.3.1.264 beta-lysine N6-acetyltransferase; ablB (gene name) +ec:2.3.1.265 phosphatidylinositol dimannoside acyltransferase; PIM2 acyltransferase; ptfP1 (gene name) +ec:2.3.1.266 [ribosomal protein S18]-alanine N-acetyltransferase; rimI (gene name) +ec:2.3.1.267 [ribosomal protein S5]-alanine N-acetyltransferase; rimJ (gene name) +ec:2.3.1.268 ethanol O-acetyltransferase; eat1 (gene name); ethanol acetyltransferase +ec:2.3.1.269 apolipoprotein N-acyltransferase; lnt (gene name); Lnt +ec:2.3.1.270 lyso-ornithine lipid O-acyltransferase; olsA (gene name) +ec:2.3.1.271 L-glutamate-5-semialdehyde N-acetyltransferase; MPR1 (gene name); MPR2 (gene name) +ec:2.3.1.272 2-acetylphloroglucinol acetyltransferase; MAPG ATase +ec:2.3.1.273 diglucosylglycerate octanoyltransferase; octT (gene name); DGG octanoyltransferase +ec:2.3.1.274 phosphate acyltransferase; plsX (gene name); acyl-ACP phosphotransacylase; acyl-[acyl-carrier-protein]---phosphate acyltransferase; phosphate-acyl-ACP acyltransferase +ec:2.3.1.275 acyl phosphate:glycerol-3-phosphate acyltransferase; plsY (gene name); G3P acyltransferase; GPAT; lysophosphatidic acid synthase; LPA synthase +ec:2.3.1.276 galactosamine-1-phosphate N-acetyltransferase; ST0452 (locus name) +ec:2.3.1.277 2-oxo-3-(phosphooxy)propyl 3-oxoalkanoate synthase; afsA (gene name); scbA (gene name); barX (gene name) +ec:2.3.1.278 mycolipenoyl-CoA---2-(long-chain-fatty acyl)-trehalose mycolipenoyltransferase; papA3 (gene name) +ec:2.3.1.279 long-chain-acyl-CoA---trehalose acyltransferase; papA3 (gene name) +ec:2.3.1.280 (aminoalkyl)phosphonate N-acetyltransferase; phnO (gene name) +ec:2.3.1.281 5-hydroxydodecatetraenal polyketide synthase; cpkABC (gene names) +ec:2.3.1.282 phenolphthiocerol/phthiocerol/phthiodiolone dimycocerosyl transferase; papA5 (gene name) +ec:2.3.1.283 2'-acyl-2-O-sulfo-trehalose (hydroxy)phthioceranyltransferase; papA1 (gene name) +ec:2.3.1.284 3'-(hydroxy)phthioceranyl-2'-palmitoyl(stearoyl)-2-O-sulfo-trehalose (hydroxy)phthioceranyltransferase; chp1 (gene name) +ec:2.3.1.285 (13S,14R)-1,13-dihydroxy-N-methylcanadine 13-O-acetyltransferase; AT1 (gene name) +ec:2.3.1.286 protein acetyllysine N-acetyltransferase; Sir2; protein lysine deacetylase; NAD+-dependent protein deacetylase +ec:2.3.1.287 phthioceranic/hydroxyphthioceranic acid synthase; msl2 (gene name); PKS2 +ec:2.3.1.288 2-O-sulfo trehalose long-chain-acyltransferase; papA2 (gene name) +ec:2.3.1.289 aureothin polyketide synthase system; aurABC (gene names); aureothin polyketide synthase complex +ec:2.3.1.290 spectinabilin polyketide synthase system; norAA'BC (gene names); spectinabilin polyketide synthase complex +ec:2.3.1.291 sphingoid base N-palmitoyltransferase; mammalian ceramide synthase 5; CERS5 (gene name); LASS5 (gene name) +ec:2.3.1.292 (phenol)carboxyphthiodiolenone synthase; ppsABCDE (gene names) +ec:2.3.1.293 meromycolic acid 3-oxoacyl-(acyl carrier protein) synthase I; kasA (gene name); beta-ketoacyl-acyl carrier protein synthase KasA +ec:2.3.1.294 meromycolic acid 3-oxoacyl-(acyl carrier protein) synthase II; kasB (gene name); beta-ketoacyl-acyl carrier protein synthase KasB +ec:2.3.1.295 mycoketide-CoA synthase; pks12 (gene name) +ec:2.3.1.296 omega-hydroxyceramide transacylase; PNPLA1 (gene name) +ec:2.3.1.297 very-long-chain ceramide synthase; sphingoid base N-very-long-chain fatty acyl-CoA transferase; mammalian ceramide synthase 2; CERS3 (gene name); LASS3 (gene name); LAG1 (gene name); LAC1 (gene name); LOH1 (gene name); LOH3 (gene name) +ec:2.3.1.298 ultra-long-chain ceramide synthase; mammalian ceramide synthase 3; sphingoid base N-ultra-long-chain fatty acyl-CoA transferase; CERS3 (gene name) +ec:2.3.1.299 sphingoid base N-stearoyltransferase; mammalian ceramide synthase 1; LASS1 (gene name); UOG1 (gene name); CERS1 (gene name) +ec:2.3.1.300 branched-chain beta-ketoacyl-[acyl-carrier-protein] synthase +ec:2.3.1.301 mycobacterial beta-ketoacyl-[acyl carrier protein] synthase III; fabH (gene name) (ambiguous); mycobacterial 3-oxoacyl-[acyl carrier protein] synthase III +ec:2.3.1.302 hydroxycinnamoyl-CoA:5-hydroxyanthranilate N-hydroxycinnamoyltransferase; HHT1 (gene name); HHT4 (gene name) +ec:2.3.1.303 alpha-L-Rha-(1->2)-alpha-D-Man-(1->2)-alpha-D-Man-(1->3)-alpha-D-Gal-PP-Und 2IV-O-acetyltransferase; rfbL (gene name); wbaL (gene name) +ec:2.3.1.304 poly[(R)-3-hydroxyalkanoate] polymerase; PHA synthase; phaC (gene name); PhaE +ec:2.3.1.305 acyl-[acyl-carrier protein]---UDP-2-acetamido-3-amino-2,3-dideoxy-alpha-D-glucopyranose N-acyltransferase; lpxA (gene name) (ambiguous) +ec:2.3.1.306 acetyl-CoA:lysine N6-acetyltransferase; LYC1 (gene name); lysine N6-acetyltransferase (ambiguous) +ec:2.3.1.307 6-diazo-5-oxo-L-norleucine Nalpha-acetyltranferase; azpI (gene name) +ec:2.3.1.308 tubulin N-terminal N-acetyltransferase NAT9; NAT9 (gene name); microtubule-associated N-acetyltransferase NAT9 +ec:2.3.2.1 D-glutamyltransferase; D-glutamyl transpeptidase; D-gamma-glutamyl transpeptidase +ec:2.3.2.2 gamma-glutamyltransferase; glutamyl transpeptidase; alpha-glutamyl transpeptidase; gamma-glutamyl peptidyltransferase; gamma-glutamyl transpeptidase (ambiguous); gamma-GPT; gamma-GT; gamma-GTP; L-gamma-glutamyl transpeptidase; L-gamma-glutamyltransferase; L-glutamyltransferase; GGT (ambiguous); gamma-glutamyltranspeptidase (ambiguous) +ec:2.3.2.3 lysyltransferase; L-lysyl-tRNA:phosphatidylglycerol 3-O-lysyltransferase +ec:2.3.2.4 Transferred to 4.3.2.9 +ec:2.3.2.5 glutaminyl-peptide cyclotransferase; glutaminyl-tRNA cyclotransferase; glutaminyl cyclase; glutaminyl-transfer ribonucleate cyclotransferase +ec:2.3.2.6 lysine/arginine leucyltransferase; leucyl, phenylalanine-tRNA-protein transferase; leucyl-phenylalanine-transfer ribonucleate-protein aminoacyltransferase; leucyl-phenylalanine-transfer ribonucleate-protein transferase; L-leucyl-tRNA:protein leucyltransferase; leucyltransferase (misleading); L/FK,R-transferase; aat (gene name); L-leucyl-tRNALeu:protein leucyltransferase +ec:2.3.2.7 aspartyltransferase; beta-aspartyl transferase; aspartotransferase +ec:2.3.2.8 arginyltransferase; arginine transferase; arginyl-transfer ribonucleate-protein aminoacyltransferase; arginyl-transfer ribonucleate-protein transferase; arginyl-tRNA protein transferase; L-arginyl-tRNA:protein arginyltransferase +ec:2.3.2.9 agaritine gamma-glutamyltransferase; (gamma-L-glutamyl)-N1-(4-hydroxymethylphenyl)hydrazine:(acceptor) gamma-glutamyltransferase; (gamma-L-glutamyl)-1-N-(4-hydroxymethylphenyl)hydrazine:(acceptor) gamma-glutamyltransferase; (gamma-L-glutamyl)-1-N-(4-hydroxymethylphenyl)hydrazine:acceptor gamma-glutamyltransferase +ec:2.3.2.10 UDP-N-acetylmuramoylpentapeptide-lysine N6-alanyltransferase; alanyl-transfer ribonucleate-uridine diphosphoacetylmuramoylpentapeptide transferase; UDP-N-acetylmuramoylpentapeptide lysine N6-alanyltransferase; uridine diphosphoacetylmuramoylpentapeptide lysine N6-alanyltransferase; L-alanyl-tRNA:UDP-N-acetylmuramoyl-L-alanyl-D-glutamyl-L-lysyl-D-alanyl-D-alanine 6-N-alanyltransferase; L-alanyl-tRNA:UDP-N-acetylmuramoyl-L-alanyl-D-glutamyl-L-lysyl-D-alanyl-D-alanine N6-alanyltransferase +ec:2.3.2.11 alanylphosphatidylglycerol synthase; O-alanylphosphatidylglycerol synthase; alanyl phosphatidylglycerol synthetase +ec:2.3.2.12 peptidyltransferase; transpeptidase; ribosomal peptidyltransferase +ec:2.3.2.13 protein-glutamine gamma-glutamyltransferase; transglutaminase; Factor XIIIa; fibrinoligase; fibrin stabilizing factor; glutaminylpeptide gamma-glutamyltransferase; polyamine transglutaminase; tissue transglutaminase; R-glutaminyl-peptide:amine gamma-glutamyl transferase +ec:2.3.2.14 D-alanine gamma-glutamyltransferase +ec:2.3.2.15 glutathione gamma-glutamylcysteinyltransferase; phytochelatin synthase; gamma-glutamylcysteine dipeptidyl transpeptidase +ec:2.3.2.16 lipid II:glycine glycyltransferase; N-acetylmuramoyl-L-alanyl-D-glutamyl-L-lysyl-D-alanyl-D-alanine-diphosphoundecaprenyl-N-acetylglucosamine:N6-glycine transferase; femX (gene name); alanyl-D-alanine-diphospho-ditrans,octacis-undecaprenyl-N-acetylglucosamine:glycine N6-glycyltransferase +ec:2.3.2.17 N-acetylmuramoyl-L-alanyl-D-glutamyl-L-lysyl-(N6-glycyl)-D-alanyl-D-alanine-diphosphoundecaprenyl-N-acetylglucosamine:glycine glycyltransferase; femA (gene name); N-acetylmuramoyl-L-alanyl-D-glutamyl-L-lysyl-(N6-glycyl)-D-alanyl-D-alanine-ditrans,octacis-diphosphoundecaprenyl-N-acetylglucosamine:glycine glycyltransferase +ec:2.3.2.18 N-acetylmuramoyl-L-alanyl-D-glutamyl-L-lysyl-(N6-triglycine)-D-alanyl-D-alanine-diphosphoundecaprenyl-N-acetylglucosamine:glycine glycyltransferase; femB (gene name); N-acetylmuramoyl-L-alanyl-D-glutamyl-L-lysyl-(N6-triglycine)-D-alanyl-D-alanine-ditrans,octacis-diphosphoundecaprenyl-N-acetylglucosamine:glycine glycyltransferase +ec:2.3.2.19 ribostamycin:4-(gamma-L-glutamylamino)-(S)-2-hydroxybutanoyl-[BtrI acyl-carrier protein] 4-(gamma-L-glutamylamino)-(S)-2-hydroxybutanoate transferase; btrH (gene name) +ec:2.3.2.20 cyclo(L-leucyl-L-phenylalanyl) synthase; AlbC; cFL synthase +ec:2.3.2.21 cyclo(L-tyrosyl-L-tyrosyl) synthase; Rv2275 (gene name); cYY synthase; cyclodityrosine synthase +ec:2.3.2.22 cyclo(L-leucyl-L-leucyl) synthase; YvmC; cLL synthase; cyclodileucine synthase +ec:2.3.2.23 E2 ubiquitin-conjugating enzyme; ubiquitin-carrier-protein E2; UBC (ambiguous); ubiquitin-conjugating enzyme E2 +ec:2.3.2.24 (E3-independent) E2 ubiquitin-conjugating enzyme; E2-230K; UBE2O; E3-independent ubiquitin-conjugating enzyme E2 +ec:2.3.2.25 N-terminal E2 ubiquitin-conjugating enzyme; Ube2w; N-terminal ubiquitin-conjugating enzyme E2 +ec:2.3.2.26 HECT-type E3 ubiquitin transferase; HECT E3 ligase (misleading); ubiquitin transferase HECT-E3; S-ubiquitinyl-[HECT-type E3-ubiquitin transferase]-L-cysteine:acceptor protein ubiquitin transferase (isopeptide bond-forming) +ec:2.3.2.27 RING-type E3 ubiquitin transferase; RING E3 ligase (misleading); ubiquitin transferase RING E3; S-ubiquitinyl-[ubiquitin-conjugating E2 enzyme]-L-cysteine:acceptor protein ubiquitin transferase (isopeptide bond-forming, RING-type) +ec:2.3.2.28 L-allo-isoleucyltransferase; CmaE +ec:2.3.2.29 aspartate/glutamate leucyltransferase; leucylD,E-transferase; bpt (gene name) +ec:2.3.2.30 L-ornithine Nalpha-acyltransferase; olsB (gene name) +ec:2.3.2.31 RBR-type E3 ubiquitin transferase +ec:2.3.2.32 cullin-RING-type E3 NEDD8 transferase; RBX1 (gene name) +ec:2.3.2.33 RCR-type E3 ubiquitin transferase; MYCBP2; PHR1 +ec:2.3.2.34 E2 NEDD8-conjugating enzyme; NEDD8-carrier-protein E2; NEDD8-conjugating enzyme E2; UBE2M (gene name); UBE2F (gene name) +ec:2.3.2.35 capsaicin synthase; CS (gene name) (ambiguous); Pun1 (locus name) +ec:2.3.2.36 RING-type E3 ubiquitin transferase (cysteine targeting); RING E3 ligase (misleading) +ec:2.3.3.1 citrate (Si)-synthase; (R)-citric synthase; citrate oxaloacetate-lyase [(pro-3S)-CH2COO-->acetyl-CoA] +ec:2.3.3.2 decylcitrate synthase; 2-decylcitrate synthase; (2S,3S)-2-hydroxytridecane-1,2,3-tricarboxylate oxaloacetate-lyase (CoA-acylating) +ec:2.3.3.3 citrate (Re)-synthase; (R)-citrate synthase; Re-citrate-synthase; citrate oxaloacetate-lyase [(pro-3R)-CH2COO-->acetyl-CoA] +ec:2.3.3.4 decylhomocitrate synthase; 2-decylhomocitrate synthase; 3-hydroxytetradecane-1,3,4-tricarboxylate 2-oxoglutarate-lyase (CoA-acylating) +ec:2.3.3.5 2-methylcitrate synthase; 2-methylcitrate oxaloacetate-lyase; MCS; methylcitrate synthase; methylcitrate synthetase +ec:2.3.3.6 2-ethylmalate synthase; (R)-2-ethylmalate 2-oxobutanoyl-lyase (CoA-acetylating); 2-ethylmalate-3-hydroxybutanedioate synthase; propylmalate synthase; propylmalic synthase +ec:2.3.3.7 3-ethylmalate synthase; 2-ethyl-3-hydroxybutanedioate synthase; 3-ethylmalate glyoxylate-lyase (CoA-butanoylating) +ec:2.3.3.8 ATP citrate synthase; ATP-citric lyase; ATP:citrate oxaloacetate-lyase [(pro-S)-CH2COO-->acetyl-CoA] (ATP-dephosphorylating); acetyl-CoA:oxaloacetate acetyltransferase (isomerizing; ADP-phosphorylating); adenosine triphosphate citrate lyase; citrate cleavage enzyme; citrate-ATP lyase; citric cleavage enzyme; ATP citrate (pro-S)-lyase +ec:2.3.3.9 malate synthase; L-malate glyoxylate-lyase (CoA-acetylating); glyoxylate transacetylase; glyoxylate transacetase; glyoxylic transacetase; malate condensing enzyme; malate synthetase; malic synthetase; malic-condensing enzyme; acetyl-CoA:glyoxylate C-acetyltransferase (thioester-hydrolysing, carboxymethyl-forming) +ec:2.3.3.10 hydroxymethylglutaryl-CoA synthase; (S)-3-hydroxy-3-methylglutaryl-CoA acetoacetyl-CoA-lyase (CoA-acetylating); 3-hydroxy-3-methylglutaryl CoA synthetase; 3-hydroxy-3-methylglutaryl coenzyme A synthase; 3-hydroxy-3-methylglutaryl coenzyme A synthetase; 3-hydroxy-3-methylglutaryl-CoA synthase; 3-hydroxy-3-methylglutaryl-coenzyme A synthase; beta-hydroxy-beta-methylglutaryl-CoA synthase; HMG-CoA synthase; acetoacetyl coenzyme A transacetase; hydroxymethylglutaryl coenzyme A synthase; hydroxymethylglutaryl coenzyme A-condensing enzyme +ec:2.3.3.11 2-hydroxyglutarate synthase; 2-hydroxyglutaratic synthetase; 2-hydroxyglutaric synthetase; alpha-hydroxyglutarate synthase; hydroxyglutarate synthase; 2-hydroxyglutarate glyoxylate-lyase (CoA-propanoylating) +ec:2.3.3.12 3-propylmalate synthase; 3-(n-propyl)-malate synthase; 3-propylmalate glyoxylate-lyase (CoA-pentanoylating); beta-n-propylmalate synthase; n-propylmalate synthase +ec:2.3.3.13 2-isopropylmalate synthase; 3-carboxy-3-hydroxy-4-methylpentanoate 3-methyl-2-oxobutanoate-lyase (CoA-acetylating); alpha-isopropylmalate synthetase; alpha-isopropylmalate synthase; alpha-isopropylmalic synthetase; isopropylmalate synthase; isopropylmalate synthetase +ec:2.3.3.14 homocitrate synthase; 2-hydroxybutane-1,2,4-tricarboxylate 2-oxoglutarate-lyase (CoA-acetylating); acetyl-coenzyme A:2-ketoglutarate C-acetyl transferase; homocitrate synthetase; HCS +ec:2.3.3.15 sulfoacetaldehyde acetyltransferase; Xsc +ec:2.3.3.16 citrate synthase (unknown stereospecificity); citrate condensing enzyme; CoA-acetylating citrate oxaloacetate-lyase; citrate synthetase; citric synthase; citric-condensing enzyme; citrogenase; condensing enzyme (ambiguous); oxaloacetate transacetase; oxalacetic transacetase +ec:2.3.3.17 methylthioalkylmalate synthase; MAM1 (gene name); MAM3 (gene name); acetyl-CoA:omega-(methylthio)-2-oxoalkanoate C-acetyltransferase +ec:2.3.3.18 2-phosphinomethylmalate synthase; pmmS (gene name) +ec:2.3.3.19 2-phosphonomethylmalate synthase; 2-phosphinomethylmalic acid synthase; PMM synthase +ec:2.3.3.20 acyl-CoA:acyl-CoA alkyltransferase; oleA (gene name) +ec:2.3.3.21 (R)-citramalate synthase; CimA +ec:2.4.1.1 glycogen phosphorylase; muscle phosphorylase a and b; amylophosphorylase; polyphosphorylase; amylopectin phosphorylase; glucan phosphorylase; alpha-glucan phosphorylase; 1,4-alpha-glucan phosphorylase; glucosan phosphorylase; granulose phosphorylase; maltodextrin phosphorylase; muscle phosphorylase; myophosphorylase; potato phosphorylase; starch phosphorylase; 1,4-alpha-D-glucan:phosphate alpha-D-glucosyltransferase; phosphorylase (ambiguous) +ec:2.4.1.2 dextrin dextranase; dextrin 6-glucosyltransferase; dextran dextrinase; 1,4-alpha-D-glucan:1,6-alpha-D-glucan 6-alpha-D-glucosyltransferase +ec:2.4.1.3 Deleted entry +ec:2.4.1.4 amylosucrase; sucrose---glucan glucosyltransferase; sucrose-1,4-alpha-glucan glucosyltransferase; sucrose:1,4-alpha-D-glucan 4-alpha-D-glucosyltransferase +ec:2.4.1.5 dextransucrase; sucrose 6-glucosyltransferase; SGE; CEP; sucrose-1,6-alpha-glucan glucosyltransferase; sucrose:1,6-alpha-D-glucan 6-alpha-D-glucosyltransferase +ec:2.4.1.6 Deleted entry +ec:2.4.1.7 sucrose phosphorylase; sucrose glucosyltransferase; disaccharide glucosyltransferase +ec:2.4.1.8 maltose phosphorylase +ec:2.4.1.9 inulosucrase; sucrose 1-fructosyltransferase; sucrose:2,1-beta-D-fructan 1-beta-D-fructosyltransferase +ec:2.4.1.10 levansucrase; sucrose 6-fructosyltransferase; beta-2,6-fructosyltransferase; beta-2,6-fructan:D-glucose 1-fructosyltransferase; sucrose:2,6-beta-D-fructan 6-beta-D-fructosyltransferase; sucrose:(2->6)-beta-D-fructan 6-beta-D-fructosyltransferase +ec:2.4.1.11 glycogen(starch) synthase; UDP-glucose---glycogen glucosyltransferase; glycogen (starch) synthetase; UDP-glucose-glycogen glucosyltransferase; UDP-glycogen synthase; UDPG-glycogen synthetase; UDPG-glycogen transglucosylase; uridine diphosphoglucose-glycogen glucosyltransferase; UDP-glucose:glycogen 4-alpha-D-glucosyltransferase +ec:2.4.1.12 cellulose synthase (UDP-forming); UDP-glucose---beta-glucan glucosyltransferase; UDP-glucose-cellulose glucosyltransferase; GS-I; beta-1,4-glucosyltransferase; uridine diphosphoglucose-1,4-beta-glucan glucosyltransferase; beta-1,4-glucan synthase; beta-1,4-glucan synthetase; beta-glucan synthase; 1,4-beta-D-glucan synthase; 1,4-beta-glucan synthase; glucan synthase; UDP-glucose-1,4-beta-glucan glucosyltransferase; uridine diphosphoglucose-cellulose glucosyltransferase; UDP-glucose:1,4-beta-D-glucan 4-beta-D-glucosyltransferase; UDP-glucose:(1->4)-beta-D-glucan 4-beta-D-glucosyltransferase +ec:2.4.1.13 sucrose synthase; UDPglucose-fructose glucosyltransferase; sucrose synthetase; sucrose-UDP glucosyltransferase; sucrose-uridine diphosphate glucosyltransferase; uridine diphosphoglucose-fructose glucosyltransferase; NDP-glucose:D-fructose 2-alpha-D-glucosyltransferase +ec:2.4.1.14 sucrose-phosphate synthase; UDP-glucose---fructose-phosphate glucosyltransferase; sucrosephosphate---UDP glucosyltransferase; UDP-glucose-fructose-phosphate glucosyltransferase; SPS; uridine diphosphoglucose-fructose phosphate glucosyltransferase; sucrose 6-phosphate synthase; sucrose phosphate synthetase; sucrose phosphate-uridine diphosphate glucosyltransferase; sucrose phosphate synthase; UDP-glucose:D-fructose-6-phosphate 2-alpha-D-glucosyltransferase +ec:2.4.1.15 alpha,alpha-trehalose-phosphate synthase (UDP-forming); UDP-glucose---glucose-phosphate glucosyltransferase; trehalosephosphate-UDP glucosyltransferase; UDP-glucose-glucose-phosphate glucosyltransferase; alpha,alpha-trehalose phosphate synthase (UDP-forming); phosphotrehalose-uridine diphosphate transglucosylase; trehalose 6-phosphate synthase; trehalose 6-phosphate synthetase; trehalose phosphate synthase; trehalose phosphate synthetase; trehalose phosphate-uridine diphosphate glucosyltransferase; trehalose-P synthetase; transglucosylase; uridine diphosphoglucose phosphate glucosyltransferase; UDP-glucose:D-glucose-6-phosphate 1-alpha-D-glucosyltransferase +ec:2.4.1.16 chitin synthase; chitin-UDP N-acetylglucosaminyltransferase; chitin-uridine diphosphate acetylglucosaminyltransferase; chitin synthetase; trans-N-acetylglucosaminosylase; UDP-N-acetyl-D-glucosamine:chitin 4-beta-N-acetylglucosaminyl-transferase; UDP-N-acetyl-alpha-D-glucosamine:chitin 4-beta-N-acetylglucosaminyltransferase +ec:2.4.1.17 glucuronosyltransferase; 1-naphthol glucuronyltransferase; 1-naphthol-UDP-glucuronosyltransferase; 17beta-hydroxysteroid UDP-glucuronosyltransferase; 3alpha-hydroxysteroid UDP-glucuronosyltransferase; 4-hydroxybiphenyl UDP-glucuronosyltransferase; 4-methylumbelliferone UDP-glucuronosyltransferase; 4-nitrophenol UDP-glucuronyltransferase; 4-nitrophenol UDPGT; 17-OH steroid UDPGT; 3-OH androgenic UDPGT; bilirubin uridine diphosphoglucuronyltransferase; bilirubin UDP-glucuronosyltransferase; bilirubin monoglucuronide glucuronyltransferase; bilirubin UDPGT; bilirubin glucuronyltransferase; ciramadol UDP-glucuronyltransferase; estriol UDP-glucuronosyltransferase; estrone UDP-glucuronosyltransferase; uridine diphosphoglucuronosyltransferase; uridine diphosphoglucuronate-bilirubin glucuronoside glucuronosyltransferase; uridine diphosphoglucuronate-bilirubin glucuronosyltransferase; uridine diphosphoglucuronate-estriol glucuronosyltransferase; uridine diphosphoglucuronate-estradiol glucuronosyltransferase; uridine diphosphoglucuronate-4-hydroxybiphenyl glucuronosyltransferase; uridine diphosphoglucuronate-1,2-diacylglycerol glucuronosyltransferase; uridine diphosphoglucuronate-estriol 16alpha-glucuronosyltransferase; GT; morphine glucuronyltransferase; p-hydroxybiphenyl UDP glucuronyltransferase; p-nitrophenol UDP-glucuronosyltransferase; p-nitrophenol UDP-glucuronyltransferase; p-nitrophenylglucuronosyltransferase; p-phenylphenol glucuronyltransferase; phenyl-UDP-glucuronosyltransferase; PNP-UDPGT; UDP glucuronate-estradiol-glucuronosyltransferase; UDP glucuronosyltransferase; UDP glucuronate-estriol glucuronosyltransferase; UDP glucuronic acid transferase; UDP glucuronyltransferase; UDP-glucuronate-4-hydroxybiphenyl glucuronosyltransferase; UDP-glucuronate-bilirubin glucuronyltransferase; UDP-glucuronosyltransferase; UDP-glucuronyltransferase; UDPGA transferase; UDPGA-glucuronyltransferase; UDPGT; uridine diphosphoglucuronyltransferase; uridine diphosphate glucuronyltransferase; uridine 5'-diphosphoglucuronyltransferase; UDP-glucuronate beta-D-glucuronosyltransferase (acceptor-unspecific) +ec:2.4.1.18 1,4-alpha-glucan branching enzyme; branching enzyme; amylo-(1,4->1,6)-transglycosylase; Q-enzyme; alpha-glucan-branching glycosyltransferase; amylose isomerase; enzymatic branching factor; branching glycosyltransferase; enzyme Q; glucosan transglycosylase; glycogen branching enzyme; plant branching enzyme; alpha-1,4-glucan:alpha-1,4-glucan-6-glycosyltransferase; starch branching enzyme; 1,4-alpha-D-glucan:1,4-alpha-D-glucan 6-alpha-D-(1,4-alpha-D-glucano)-transferase +ec:2.4.1.19 cyclomaltodextrin glucanotransferase; Bacillus macerans amylase; cyclodextrin glucanotransferase; alpha-cyclodextrin glucanotransferase; alpha-cyclodextrin glycosyltransferase; beta-cyclodextrin glucanotransferase; beta-cyclodextrin glycosyltransferase; gamma-cyclodextrin glycosyltransferase; cyclodextrin glycosyltransferase; cyclomaltodextrin glucotransferase; cyclomaltodextrin glycosyltransferase; konchizaimu; alpha-1,4-glucan 4-glycosyltransferase, cyclizing; BMA; CGTase; neutral-cyclodextrin glycosyltransferase; 1,4-alpha-D-glucan 4-alpha-D-(1,4-alpha-D-glucano)-transferase (cyclizing) +ec:2.4.1.20 cellobiose phosphorylase +ec:2.4.1.21 starch synthase (glycosyl-transferring); ADP-glucose---starch glucosyltransferase; adenosine diphosphate glucose-starch glucosyltransferase; adenosine diphosphoglucose-starch glucosyltransferase; ADP-glucose starch synthase; ADP-glucose transglucosylase; ADP-glucose-starch glucosyltransferase; ADPG starch synthetase; ADPG-starch glucosyltransferase; starch synthetase; ADP-glucose:1,4-alpha-D-glucan 4-alpha-D-glucosyltransferase +ec:2.4.1.22 lactose synthase; UDP-galactose---glucose galactosyltransferase; N-acetyllactosamine synthase; uridine diphosphogalactose-glucose galactosyltransferase; lactose synthetase; UDP-galactose:D-glucose 4-beta-D-galactotransferase; UDP-galactose:D-glucose 4-beta-D-galactosyltransferase +ec:2.4.1.23 sphingosine beta-galactosyltransferase; psychosine---UDP galactosyltransferase; galactosyl-sphingosine transferase; psychosine-uridine diphosphate galactosyltransferase; UDP-galactose:sphingosine O-galactosyl transferase; uridine diphosphogalactose-sphingosine beta-galactosyltransferase; UDP-galactose:sphingosine 1-beta-galactotransferase; UDP-galactose:sphingosine 1-beta-galactosyltransferase +ec:2.4.1.24 1,4-alpha-glucan 6-alpha-glucosyltransferase; oligoglucan-branching glycosyltransferase; 1,4-alpha-D-glucan 6-alpha-D-glucosyltransferase; T-enzyme; D-glucosyltransferase; 1,4-alpha-D-glucan:1,4-alpha-D-glucan(D-glucose) 6-alpha-D-glucosyltransferase +ec:2.4.1.25 4-alpha-glucanotransferase; disproportionating enzyme; dextrin glycosyltransferase; D-enzyme; debranching enzyme maltodextrin glycosyltransferase; amylomaltase; dextrin transglycosylase; 1,4-alpha-D-glucan:1,4-alpha-D-glucan 4-alpha-D-glycosyltransferase +ec:2.4.1.26 DNA alpha-glucosyltransferase; uridine diphosphoglucose-deoxyribonucleate alpha-glucosyltransferase; UDP-glucose-DNA alpha-glucosyltransferase; uridine diphosphoglucose-deoxyribonucleate alpha-glucosyltransferase; T2-HMC-alpha-glucosyl transferase; T4-HMC-alpha-glucosyl transferase; T6-HMC-alpha-glucosyl transferase +ec:2.4.1.27 DNA beta-glucosyltransferase; T4-HMC-beta-glucosyl transferase; T4-beta-glucosyl transferase; T4 phage beta-glucosyltransferase; UDP glucose-DNA beta-glucosyltransferase; uridine diphosphoglucose-deoxyribonucleate beta-glucosyltransferase; UDP-glucose:DNA beta-D-glucosyltransferase +ec:2.4.1.28 glucosyl-DNA beta-glucosyltransferase; T6-glucosyl-HMC-beta-glucosyl transferase; T6-beta-glucosyl transferase; uridine diphosphoglucose-glucosyldeoxyribonucleate beta-glucosyltransferase +ec:2.4.1.29 cellulose synthase (GDP-forming); cellulose synthase (guanosine diphosphate-forming); cellulose synthetase; guanosine diphosphoglucose-1,4-beta-glucan glucosyltransferase; guanosine diphosphoglucose-cellulose glucosyltransferase; GDP-glucose:1,4-beta-D-glucan 4-beta-D-glucosyltransferase +ec:2.4.1.30 1,3-beta-oligoglucan phosphorylase; beta-1,3-oligoglucan:orthophosphate glucosyltransferase II; beta-1,3-oligoglucan phosphorylase; 1,3-beta-D-oligoglucan:phosphate alpha-D-glucosyltransferase +ec:2.4.1.31 laminaribiose phosphorylase +ec:2.4.1.32 glucomannan 4-beta-mannosyltransferase; GDP-man-beta-mannan manosyltransferase; glucomannan-synthase; GDPmannose:glucomannan 1,4-beta-D-mannosyltransferase; GDP-mannose:glucomannan 1,4-beta-D-mannosyltransferase +ec:2.4.1.33 mannuronan synthase; mannuronosyl transferase; alginate synthase (incorrect); alg8 (gene name); alg44 (gene name); GDP-D-mannuronate:alginate D-mannuronyltransferase +ec:2.4.1.34 1,3-beta-glucan synthase; 1,3-beta-D-glucan---UDP glucosyltransferase; UDP-glucose---1,3-beta-D-glucan glucosyltransferase; callose synthetase; 1,3-beta-D-glucan-UDP glucosyltransferase; UDP-glucose-1,3-beta-D-glucan glucosyltransferase; paramylon synthetase; UDP-glucose-beta-glucan glucosyltransferase; GS-II; (1,3)-beta-glucan (callose) synthase; beta-1,3-glucan synthase; beta-1,3-glucan synthetase; 1,3-beta-D-glucan synthetase; 1,3-beta-D-glucan synthase; 1,3-beta-glucan-uridine diphosphoglucosyltransferase; callose synthase; UDP-glucose-1,3-beta-glucan glucosyltransferase; UDP-glucose:(1,3)beta-glucan synthase; uridine diphosphoglucose-1,3-beta-glucan glucosyltransferase; UDP-glucose:1,3-beta-D-glucan 3-beta-D-glucosyltransferase +ec:2.4.1.35 phenol beta-glucosyltransferase; UDPglucosyltransferase (ambiguous); phenol-beta-D-glucosyltransferase; UDP glucosyltransferase (ambiguous); UDP-glucose glucosyltransferase (ambiguous); uridine diphosphoglucosyltransferase +ec:2.4.1.36 alpha,alpha-trehalose-phosphate synthase (GDP-forming); GDP-glucose---glucose-phosphate glucosyltransferase; guanosine diphosphoglucose-glucose phosphate glucosyltransferase; trehalose phosphate synthase (GDP-forming) +ec:2.4.1.37 fucosylgalactoside 3-alpha-galactosyltransferase; UDP-galactose:O-alpha-L-fucosyl(1->2)D-galactose alpha-D-galactosyltransferase; UDPgalactose:glycoprotein-alpha-L-fucosyl-(1,2)-D-galactose 3-alpha-D-galactosyltransferase; [blood group substance] alpha-galactosyltransferase; blood-group substance B-dependent galactosyltransferase; glycoprotein-fucosylgalactoside alpha-galactosyltransferase; histo-blood group B transferase; histo-blood substance B-dependent galactosyltransferase; UDP-galactose:alpha-L-fucosyl-1,2-D-galactoside 3-alpha-D-galactosyltransferase; UDP-galactose:alpha-L-fucosyl-(1->2)-D-galactoside 3-alpha-D-galactosyltransferase +ec:2.4.1.38 beta-N-acetylglucosaminylglycopeptide beta-1,4-galactosyltransferase; UDP-galactose---glycoprotein galactosyltransferase; glycoprotein 4-beta-galactosyl-transferase; beta-N-acetyl-beta1-4-galactosyltransferase; thyroid glycoprotein beta-galactosyltransferase; glycoprotein beta-galactosyltransferase; thyroid galactosyltransferase; uridine diphosphogalactose-glycoprotein galactosyltransferase; beta-N-acetylglucosaminyl-glycopeptide beta-1,4-galactosyltransferase; GalT; UDP-galactose:N-acetyl-beta-D-glucosaminylglycopeptide beta-1,4-galactosyltransferase; UDP-galactose:N-acetyl-beta-D-glucosaminylglycopeptide 4-beta-galactosyltransferase +ec:2.4.1.39 steroid N-acetylglucosaminyltransferase; hydroxy steroid acetylglucosaminyltransferase; steroid acetylglucosaminyltransferase; uridine diphosphoacetylglucosamine-steroid acetylglucosaminyltransferase +ec:2.4.1.40 glycoprotein-fucosylgalactoside alpha-N-acetylgalactosaminyltransferase; A-transferase; histo-blood group A glycosyltransferase (Fucalpha1->2Galalpha1->3-N-acetylgalactosaminyltransferase); UDP-GalNAc:Fucalpha1->2Galalpha1->3-N-acetylgalactosaminyltransferase; alpha-3-N-acetylgalactosaminyltransferase; blood-group substance alpha-acetyltransferase; blood-group substance A-dependent acetylgalactosaminyltransferase; fucosylgalactose acetylgalactosaminyltransferase; histo-blood group A acetylgalactosaminyltransferase; histo-blood group A transferase; UDP-N-acetyl-D-galactosamine:alpha-L-fucosyl-1,2-D-galactose 3-N-acetyl-D-galactosaminyltransferase; UDP-N-acetyl-D-galactosamine:glycoprotein-alpha-L-fucosyl-(1,2)-D-galactose 3-N-acetyl-D-galactosaminyltransferase +ec:2.4.1.41 polypeptide N-acetylgalactosaminyltransferase; protein-UDP acetylgalactosaminyltransferase; UDP-GalNAc:polypeptide N-acetylgalactosaminyl transferase; UDP-N-acetylgalactosamine:kappa-casein polypeptide N-acetylgalactosaminyltransferase; uridine diphosphoacetylgalactosamine-glycoprotein acetylgalactosaminyltransferase; glycoprotein acetylgalactosaminyltransferase; polypeptide-N-acetylgalactosamine transferase; UDP-acetylgalactosamine-glycoprotein acetylgalactosaminyltransferase; UDP-acetylgalactosamine:peptide-N-galactosaminyltransferase; UDP-GalNAc:polypeptide N-acetylgalactosaminyltransferase; UDP-N-acetyl-alpha-D-galactosamine:polypeptide N-acetylgalactosaminyltransferase; UDP-N-acetylgalactosamine-glycoprotein N-acetylgalactosaminyltransferase; UDP-N-acetylgalactosamine-protein N-acetylgalactosaminyltransferase; UDP-N-acetylgalactosamine:polypeptide N-acetylgalactosaminyltransferase; UDP-N-acetylgalactosamine:protein N-acetylgalactosaminyl transferase; ppGalNAc-T; UDP-N-acetyl-alpha-D-galactosamine:polypeptide N-acetylgalactosaminyl-transferase +ec:2.4.1.42 Deleted entry +ec:2.4.1.43 polygalacturonate 4-alpha-galacturonosyltransferase; UDP galacturonate-polygalacturonate alpha-galacturonosyltransferase; uridine diphosphogalacturonate-polygalacturonate alpha-galacturonosyltransferase; UDP-D-galacturonate:1,4-alpha-poly-D-galacturonate 4-alpha-D-galacturonosyltransferase; UDP-D-galacturonate:(1->4)-alpha-poly-D-galacturonate 4-alpha-D-galacturonosyltransferase +ec:2.4.1.44 lipopolysaccharide 3-alpha-galactosyltransferase; UDP-galactose:lipopolysaccharide alpha,3-galactosyltransferase; UDP-galactose:polysaccharide galactosyltransferase; uridine diphosphate galactose:lipopolysaccharide alpha-3-galactosyltransferase; uridine diphosphogalactose-lipopolysaccharide alpha,3-galactosyltransferase; UDP-galactose:lipopolysaccharide 3-alpha-D-galactosyltransferase +ec:2.4.1.45 Deleted entry +ec:2.4.1.46 monogalactosyldiacylglycerol synthase; uridine diphosphogalactose-1,2-diacylglycerol galactosyltransferase; UDP-galactose:diacylglycerol galactosyltransferase; MGDG synthase; UDP galactose-1,2-diacylglycerol galactosyltransferase; UDP-galactose-diacylglyceride galactosyltransferase; UDP-galactose:1,2-diacylglycerol 3-beta-D-galactosyltransferase; 1beta-MGDG; 1,2-diacylglycerol 3-beta-galactosyltransferase; UDP-galactose:1,2-diacyl-sn-glycerol 3-beta-D-galactosyltransferase +ec:2.4.1.47 N-acylsphingosine galactosyltransferase; UGT8 (gene name); CGT (gene name); UDP galactose-N-acylsphingosine galactosyltransferase; uridine diphosphogalactose-acylsphingosine galactosyltransferase; UDP-galactose:N-acylsphingosine D-galactosyltransferase; UDP-alpha-D-galactose:N-acylsphingosine D-galactosyltransferase; 2-hydroxyacylsphingosine 1-beta-galactosyltransferase +ec:2.4.1.48 heteroglycan alpha-mannosyltransferase; GDP mannose alpha-mannosyltransferase; guanosine diphosphomannose-heteroglycan alpha-mannosyltransferase +ec:2.4.1.49 cellodextrin phosphorylase; beta-1,4-oligoglucan:orthophosphate glucosyltransferase; 1,4-beta-D-oligo-D-glucan:phosphate alpha-D-glucosyltransferase +ec:2.4.1.50 procollagen galactosyltransferase; hydroxylysine galactosyltransferase; collagen galactosyltransferase; collagen hydroxylysyl galactosyltransferase; UDP galactose-collagen galactosyltransferase; uridine diphosphogalactose-collagen galactosyltransferase; UDPgalactose:5-hydroxylysine-collagen galactosyltransferase; UDP-galactose:procollagen-5-hydroxy-L-lysine D-galactosyltransferase; UDP-alpha-D-galactose:procollagen-5-hydroxy-L-lysine D-galactosyltransferase +ec:2.4.1.51 Deleted entry +ec:2.4.1.52 poly(glycerol-phosphate) alpha-glucosyltransferase; UDP glucose-poly(glycerol-phosphate) alpha-glucosyltransferase; uridine diphosphoglucose-poly(glycerol-phosphate) alpha-glucosyltransferase; tagE (gene name); UDP-glucose:poly(glycerol-phosphate) alpha-D-glucosyltransferase +ec:2.4.1.53 poly(ribitol-phosphate) beta-glucosyltransferase; TarQ; UDP glucose-poly(ribitol-phosphate) beta-glucosyltransferase; uridine diphosphoglucose-poly(ribitol-phosphate) beta-glucosyltransferase; UDP-D-glucose polyribitol phosphate glucosyl transferase; UDP-D-glucose:polyribitol phosphate glucosyl transferase; UDP-glucose:poly(ribitol-phosphate) beta-D-glucosyltransferase +ec:2.4.1.54 undecaprenyl-phosphate mannosyltransferase; guanosine diphosphomannose-undecaprenyl phosphate mannosyltransferase; GDP mannose-undecaprenyl phosphate mannosyltransferase; GDP-D-mannose:lipid phosphate transmannosylase; GDP-mannose:undecaprenyl-phosphate D-mannosyltransferase +ec:2.4.1.55 Transferred to 2.7.8.14 +ec:2.4.1.56 lipopolysaccharide N-acetylglucosaminyltransferase; UDP-N-acetylglucosamine-lipopolysaccharide N-acetylglucosaminyltransferase; uridine diphosphoacetylglucosamine-lipopolysaccharide acetylglucosaminyltransferase; UDP-N-acetyl-D-glucosamine:lipopolysaccharide N-acetyl-D-glucosaminyltransferase +ec:2.4.1.57 Deleted entry +ec:2.4.1.58 lipopolysaccharide glucosyltransferase I; UDP-glucose:lipopolysaccharide glucosyltransferase I; lipopolysaccharide glucosyltransferase; uridine diphosphate glucose:lipopolysaccharide glucosyltransferase I; uridine diphosphoglucose-lipopolysaccharide glucosyltransferase +ec:2.4.1.59 Deleted entry +ec:2.4.1.60 CDP-abequose:alpha-D-Man-(1->4)-alpha-L-Rha-(1->3)-alpha-D-Gal-PP-Und alpha-1,3-abequosyltransferase; wbaV (gene name); rfbV (gene name); trihexose diphospholipid abequosyltransferase; abequosyltransferase (ambiguous); CDP-alpha-D-abequose:Man(alpha1->4)Rha(alpha1->3)Gal(beta-1)-diphospholipid D-abequosyltransferase +ec:2.4.1.61 Deleted entry +ec:2.4.1.62 ganglioside galactosyltransferase; UDP-galactose---ceramide galactosyltransferase; uridine diphosphogalactose-ceramide galactosyltransferase; UDP galactose-LAC Tet-ceramide alpha-galactosyltransferase; UDP-galactose-GM2 galactosyltransferase; uridine diphosphogalactose-GM2 galactosyltransferase; uridine diphosphate D-galactose:glycolipid galactosyltransferase; UDP-galactose:N-acetylgalactosaminyl-(N-acetylneuraminyl) galactosyl-glucosyl-ceramide galactosyltransferase; UDP-galactose-GM2 ganglioside galactosyltransferase; GM1-synthase; UDP-galactose:N-acetyl-D-galactosaminyl-(N-acetylneuraminyl)-D-galactosyl-D-glucosyl-N-acylsphingosine beta-1,3-D-galactosyltransferase; UDP-galactose:N-acetyl-D-galactosaminyl-(N-acetylneuraminyl)-D-galactosyl-(1->4)-beta-D-glucosyl-N-acylsphingosine 3-beta-D-galactosyltransferase +ec:2.4.1.63 linamarin synthase; uridine diphosphoglucose-ketone glucosyltransferase; uridine diphosphate-glucose-ketone cyanohydrin beta-glucosyltransferase; UDP glucose ketone cyanohydrin glucosyltransferase; UDP-glucose:ketone cyanohydrin beta-glucosyltransferase; uridine diphosphoglucose-ketone cyanohydrin glucosyltransferase +ec:2.4.1.64 alpha,alpha-trehalose phosphorylase; trehalose phosphorylase +ec:2.4.1.65 3-galactosyl-N-acetylglucosaminide 4-alpha-L-fucosyltransferase; (Lea)-dependent (alpha-3/4)-fucosyltransferase; alpha(1,3/1,4) fucosyltransferase III; alpha-(1->4)-L-fucosyltransferase; alpha-4-L-fucosyltransferase; beta-acetylglucosaminylsaccharide fucosyltransferase; FucT-II; Lewis alpha-(1->3/4)-fucosyltransferase; Lewis blood group alpha-(1->3/4)-fucosyltransferase; Lewis(Le) blood group gene-dependent alpha-(1->3/4)-L-fucosyltransferase; blood group Lewis alpha-4-fucosyltransferase; blood-group substance Lea-dependent fucosyltransferase; guanosine diphosphofucose-beta-acetylglucosaminylsaccharide 4-alpha-L-fucosyltransferase; guanosine diphosphofucose-glycoprotein 4-alpha-L-fucosyltransferase; guanosine diphosphofucose-glycoprotein 4-alpha-fucosyltransferase; 3-alpha-galactosyl-N-acetylglucosaminide 4-alpha-L-fucosyltransferase; GDP-beta-L-fucose:3-beta-D-galactosyl-N-acetyl-D-glucosaminyl-R 4I-alpha-L-fucosyltransferase; GDP-L-fucose:3-beta-D-galactosyl-N-acetyl-D-glucosaminyl-R 4I-alpha-L-fucosyltransferase +ec:2.4.1.66 procollagen glucosyltransferase; galactosylhydroxylysine glucosyltransferase; collagen glucosyltransferase; collagen hydroxylysyl glucosyltransferase; galactosylhydroxylysyl glucosyltransferase; UDP-glucose-collagenglucosyltransferase; uridine diphosphoglucose-collagen glucosyltransferase; UDP-glucose:5-(D-galactosyloxy)-L-lysine-procollagen D-glucosyltransferase; UDP-glucose:(2S,5R)-5-O-(beta-D-galactosyl)-5-hydroxy-L-lysine-[procollagen] D-glucosyltransferase +ec:2.4.1.67 galactinol---raffinose galactosyltransferase; galactinol-raffinose galactosyltransferase; stachyose synthetase; alpha-D-galactosyl-(1->3)-myo-inositol:raffinose galactosyltransferase +ec:2.4.1.68 glycoprotein 6-alpha-L-fucosyltransferase; GDP-fucose---glycoprotein fucosyltransferase; GDP-L-Fuc:N-acetyl-beta-D-glucosaminide alpha1->6fucosyltransferase; GDP-L-fucose-glycoprotein fucosyltransferase; glycoprotein fucosyltransferase; guanosine diphosphofucose-glycoprotein fucosyltransferase; GDP-L-fucose:glycoprotein (L-fucose to asparagine-linked N-acetylglucosamine of 4-N-{N-acetyl-beta-D-glucosaminyl-(1->2)-alpha-D-mannosyl-(1->3)-[N-acetyl-beta-D-glucosaminyl-(1->2)-alpha-D-mannosyl-(1->6)]-beta-D-mannosyl-(1->4)-N-acetyl-beta-D-glucosaminyl-(1->4)-N-acetyl-beta-D-glucosaminyl}asparagine) 6-alpha-L-fucosyltransferase; FucT; GDP-L-fucose:glycoprotein (L-fucose to asparagine-linked N-acetylglucosamine of N4-{N-acetyl-beta-D-glucosaminyl-(1->2)-alpha-D-mannosyl-(1->3)-[N-acetyl-beta-D-glucosaminyl-(1->2)-alpha-D-mannosyl-(1->6)]-beta-D-mannosyl-(1->4)-N-acetyl-beta-D-glucosaminyl-(1->4)-N-acetyl-beta-D-glucosaminyl}asparagine) 6-alpha-L-fucosyltransferase; GDP-beta-L-fucose:glycoprotein (L-fucose to asparagine-linked N-acetylglucosamine of N4-{N-acetyl-beta-D-glucosaminyl-(1->2)-alpha-D-mannosyl-(1->3)-[N-acetyl-beta-D-glucosaminyl-(1->2)-alpha-D-mannosyl-(1->6)]-beta-D-mannosyl-(1->4)-N-acetyl-beta-D-glucosaminyl-(1->4)-N-acetyl-beta-D-glucosaminyl}asparagine) 6-alpha-L-fucosyltransferase +ec:2.4.1.69 type 1 galactoside alpha-(1,2)-fucosyltransferase; galactoside 2-alpha-L-fucosyltransferase (ambiguous); blood group H alpha-2-fucosyltransferase (ambiguous); guanosine diphosphofucose-galactoside 2-L-fucosyltransferase; alpha-(1->2)-L-fucosyltransferase (ambiguous); alpha-2-fucosyltransferase (ambiguous); alpha-2-L-fucosyltransferase (ambiguous); blood-group substance H-dependent fucosyltransferase (ambiguous); guanosine diphosphofucose-glycoprotein 2-alpha-fucosyltransferase (ambiguous); guanosine diphosphofucose-beta-D-galactosyl-alpha-2-L-fucosyltransferase (ambiguous); guanosine diphosphofucose-galactosylacetylglucosaminylgalactosylglucosylceramide alpha-L-fucosyltransferase (ambiguous); guanosine diphosphofucose-glycoprotein 2-alpha-L-fucosyltransferase (ambiguous); secretor-type beta-galactoside alpha1->2fucosyltransferase; beta-galactoside alpha1->2fucosyltransferase (ambiguous); GDP-beta-L-fucose:beta-D-galactosyl-R 2-alpha-L-fucosyltransferase (ambiguous); FUT2 (gene name); GDP-beta-L-fucose:beta-D-galactosyl-(1->3)-N-acetyl-beta-D-glucosaminyl-(1->3)-beta-D-galactosyl-(1->4)-beta-D-glucosyl-(1<->1)-ceramide 2-alpha-L-fucosyltransferase +ec:2.4.1.70 poly(ribitol-phosphate) alpha-N-acetylglucosaminyltransferase; TarM; UDP acetylglucosamine-poly(ribitol phosphate) acetylglucosaminyltransferase (ambiguous); uridine diphosphoacetylglucosamine-poly(ribitol phosphate) acetylglucosaminyltransferase (ambiguous); UDP-N-acetyl-D-glucosamine:poly(ribitol-phosphate) N-acetyl-D-glucosaminyltransferase (ambiguous); UDP-N-acetyl-alpha-D-glucosamine:poly(ribitol-phosphate) N-acetyl-alpha-D-glucosaminyltransferase (ambiguous); poly(ribitol-phosphate) N-acetylglucosaminyltransferase (ambiguous) +ec:2.4.1.71 arylamine glucosyltransferase; UDP glucose-arylamine glucosyltransferase; uridine diphosphoglucose-arylamine glucosyltransferase +ec:2.4.1.72 Transferred to 2.4.2.24 +ec:2.4.1.73 lipopolysaccharide glucosyltransferase II; uridine diphosphoglucose-galactosylpolysaccharide glucosyltransferase +ec:2.4.1.74 glycosaminoglycan galactosyltransferase; uridine diphosphogalactose-mucopolysaccharide galactosyltransferase; UDP-galactose:glycosaminoglycan D-galactosyltransferase +ec:2.4.1.75 Deleted entry +ec:2.4.1.76 Deleted entry +ec:2.4.1.77 Deleted entry +ec:2.4.1.78 phosphopolyprenol glucosyltransferase; uridine diphosphoglucose-polyprenol monophosphate glucosyltransferase; UDP-glucose:polyprenol monophosphate glucosyltransferase +ec:2.4.1.79 globotriaosylceramide 3-beta-N-acetylgalactosaminyltransferase; uridine diphosphoacetylgalactosamine-galactosylgalactosylglucosylceramide acetylgalactosaminyltransferase; globoside synthetase; UDP-N-acetylgalactosamine:globotriaosylceramide beta-3-N-acetylgalactosaminyltransferase; galactosylgalactosylglucosylceramide beta-D-acetylgalactosaminyltransferase; UDP-N-acetylgalactosamine:globotriaosylceramide beta1,3-N-acetylgalactosaminyltransferase; globoside synthase; gUDP-N-acetyl-D-galactosamine:D-galactosyl-1,4-D-galactosyl-1,4-D-glucosylceramide beta-N-acetyl-D-galactosaminyltransferase; beta3GalNAc-T1; UDP-N-acetyl-D-galactosamine:alpha-D-galactosyl-(1->4)-beta-D-galactosyl-(1->4)-beta-D-glucosylceramide 3III-beta-N-acetyl-D-galactosaminyltransferase; UDP-N-acetyl-D-galactosamine:alpha-D-galactosyl-(1->4)-beta-D-galactosyl-(1->4)-beta-D-glucosyl-(1<->1)-ceramide 3III-beta-N-acetyl-D-galactosaminyltransferase; UDP-N-acetyl-D-galactosamine:alpha-D-galactosyl-(1->4)-beta-D-galactosyl-(1->4)-beta-D-glucosyl-(1<->1)-ceramide III3-beta-N-acetyl-D-galactosaminyltransferase +ec:2.4.1.80 ceramide glucosyltransferase; UDP-glucose:ceramide glucosyltransferase; ceramide:UDP-Glc glucosyltransferase; uridine diphosphoglucose-ceramide glucosyltransferase; ceramide:UDP-glucose glucosyltransferase; glucosylceramide synthase; UDP-glucose:N-acylsphingosine D-glucosyltransferase +ec:2.4.1.81 flavone 7-O-beta-glucosyltransferase; UDP-glucose-apigenin beta-glucosyltransferase; UDP-glucose-luteolin beta-D-glucosyltransferase; uridine diphosphoglucose-luteolin glucosyltransferase; uridine diphosphoglucose-apigenin 7-O-glucosyltransferase; UDP-glucosyltransferase (ambiguous) +ec:2.4.1.82 galactinol---sucrose galactosyltransferase; 1-alpha-D-galactosyl-myo-inositol:sucrose 6-alpha-D-galactosyltransferase; alpha-D-galactosyl-(1->3)-myo-inositol:sucrose 6-alpha-D-galactosyltransferase; raffinose synthase; RafS +ec:2.4.1.83 dolichyl-phosphate beta-D-mannosyltransferase; GDP-Man:DolP mannosyltransferase; dolichyl mannosyl phosphate synthase; dolichyl-phospho-mannose synthase; GDP-mannose:dolichyl-phosphate mannosyltransferase; guanosine diphosphomannose-dolichol phosphate mannosyltransferase; dolichol phosphate mannose synthase; dolichyl phosphate mannosyltransferase; dolichyl-phosphate mannose synthase; GDP-mannose-dolichol phosphate mannosyltransferase; GDP-mannose-dolichylmonophosphate mannosyltransferase; mannosylphosphodolichol synthase; mannosylphosphoryldolichol synthase +ec:2.4.1.84 Deleted entry +ec:2.4.1.85 cyanohydrin beta-glucosyltransferase; uridine diphosphoglucose-p-hydroxymandelonitrile glucosyltransferase; UDP-glucose-p-hydroxymandelonitrile glucosyltransferase; uridine diphosphoglucose-cyanohydrin glucosyltransferase; uridine diphosphoglucose:aldehyde cyanohydrin beta-glucosyltransferase; UDP-glucose:(S)-4-hydroxymandelonitrile beta-D-glucosyltransferase; UGT85B1; UDP-glucose:p-hydroxymandelonitrile-O-glucosyltransferase; UDP-D-glucose:(S)-4-hydroxymandelonitrile beta-D-glucosyltransferase +ec:2.4.1.86 N-acetyl-beta-D-glucosaminide beta-(1,3)-galactosyltransferase; B3GALT1 (gene name); uridine diphosphogalactose-acetyl-glucosaminylgalactosylglucosylceramide galactosyltransferase; GalT-4; UDP-galactose:N-acetyl-D-glucosaminyl-1,3-D-galactosyl-1,4-D-glucosylceramide beta-D-galactosyltransferase; UDP-galactose:N-acetyl-D-glucosaminyl-(1->3)-D-galactosyl-(1->4)-D-glucosylceramide 3-beta-D-galactosyltransferase; UDP-galactose:N-acetyl-beta-D-glucosaminyl-(1->3)-beta-D-galactosyl-(1->4)-beta-D-glucosylceramide 3-beta-D-galactosyltransferase; UDP-galactose:N-acetyl-beta-D-glucosaminyl-(1->3)-beta-D-galactosyl-(1->4)-beta-D-glucosyl(1<->1)ceramide 3-beta-D-galactosyltransferase; UDP-galactose:N-acetyl-beta-D-glucosaminyl-(1->3)-beta-D-galactosyl-(1->4)-beta-D-glucosyl-(1<->1)-ceramide 3-beta-D-galactosyltransferase; glucosaminylgalactosylglucosylceramide beta-galactosyltransferase; UDP-alpha-D-galactose:N-acetyl-beta-D-glucosaminyl-(1->3)-beta-D-galactosyl-(1->4)-beta-D-glucosyl-(1<->1)-ceramide 3-beta-D-galactosyltransferase +ec:2.4.1.87 N-acetyllactosaminide 3-alpha-galactosyltransferase; alpha-galactosyltransferase; UDP-Gal:beta-D-Gal(1,4)-D-GlcNAc alpha(1,3)-galactosyltransferase; UDP-Gal:N-acetyllactosaminide alpha(1,3)-galactosyltransferase; UDP-Gal:N-acetyllactosaminide alpha-1,3-D-galactosyltransferase; UDP-Gal:Galbeta1->4GlcNAc-R alpha1->3-galactosyltransferase; UDP-galactose-acetyllactosamine alpha-D-galactosyltransferase; UDPgalactose:beta-D-galactosyl-beta-1,4-N-acetyl-D-glucosaminyl-glycopeptide alpha-1,3-D-galactosyltransferase; glucosaminylglycopeptide alpha-1,3-galactosyltransferase; uridine diphosphogalactose-acetyllactosamine alpha1->3-galactosyltransferase; uridine diphosphogalactose-acetyllactosamine galactosyltransferase; uridine diphosphogalactose-galactosylacetylglucosaminylgalactosylglucosylceramide galactosyltransferase; beta-D-galactosyl-N-acetylglucosaminylglycopeptide alpha-1,3-galactosyltransferase; UDP-galactose:N-acetyllactosaminide 3-alpha-D-galactosyltransferase; UDP-galactose:beta-D-galactosyl-1,4-beta-N-acetyl-D-glucosaminyl-R 3-alpha-D-galactosyltransferase; UDP-galactose:beta-D-galactosyl-(1->4)-beta-N-acetyl-D-glucosaminyl-R 3-alpha-D-galactosyltransferase +ec:2.4.1.88 globoside alpha-N-acetylgalactosaminyltransferase; uridine diphosphoacetylgalactosamine-globoside alpha-acetylgalactosaminyltransferase; Forssman synthase; globoside acetylgalactosaminyltransferase; UDP-N-acetyl-D-galactosamine:N-acetyl-D-galactosaminyl-1,3-D-galactosyl-1,4-D-galactosyl-1,4-D-glucosylceramide alpha-N-acetyl-D-galactosaminyltransferase; UDP-N-acetyl-D-galactosamine:N-acetyl-D-galactosaminyl-(1->3)-D-galactosyl-(1->4)-D-galactosyl-(1->4)-D-glucosyl-(1<->1)-ceramide alpha-N-acetyl-D-galactosaminyltransferase +ec:2.4.1.89 Deleted entry +ec:2.4.1.90 N-acetyllactosamine synthase; UDP-galactose---N-acetylglucosamine beta-D-galactosyltransferase; uridine diphosphogalactose-acetylglucosamine galactosyltransferase; beta-1,4-galactosyltransferase; acetyllactosamine synthetase; lactosamine synthase; lactosamine synthetase; lactose synthetase A protein; N-acetyllactosamine synthetase; UDP-galactose N-acetylglucosamine beta-4-galactosyltransferase; UDP-galactose-acetylglucosamine galactosyltransferase; UDP-galactose-N-acetylglucosamine beta-1,4-galactosyltransferase; UDP-galactose-N-acetylglucosamine galactosyltransferase; beta1-4-galactosyltransferase; UDP-Gal:N-acetylglucosamine beta1-4-galactosyltransferase; beta1-4GalT; NAL synthetase; UDP-beta-1,4-galactosyltransferase; Gal-T; UDP-galactose:N-acetylglucosaminide beta1-4-galactosyltransferase; UDPgalactose:N-acetylglucosaminyl(beta1-4)galactosyltransferase; beta-N-acetylglucosaminide beta1-4-galactosyltransferase; UDP-galactose:N-acetyl-D-glucosamine 4-beta-D-galactosyltransferase +ec:2.4.1.91 flavonol 3-O-glucosyltransferase; GTI; uridine diphosphoglucose-flavonol 3-O-glucosyltransferase; UDP-glucose:flavonol 3-O-glucosyltransferase; UDPG:flavonoid-3-O-glucosyltransferase +ec:2.4.1.92 (N-acetylneuraminyl)-galactosylglucosylceramide N-acetylgalactosaminyltransferase; uridine diphosphoacetylgalactosamine-ganglioside GM3 acetylgalactosaminyltransferase; ganglioside GM2 synthase; ganglioside GM3 acetylgalactosaminyltransferase; GM2 synthase; UDP acetylgalactosamine-(N-acetylneuraminyl)-D-galactosyl-D-glucosylceramide acetylgalactosaminyltransferase; UDP-N-acetyl-D-galactosamine:1-O-[O-(N-acetyl-alpha-neuraminyl)-(2->3)-O-beta-D-galactopyranosyl-(1->4)-beta-D-glucopyranosyl]-ceramide 1,4-beta-N-acetyl-D-galactosaminyltransferase acetylgalactosaminyltransferase; UDP-N-acetylgalactosamine GM3 N-acetylgalactosaminyltransferase; uridine diphosphoacetylgalactosamine-acetylneuraminylgalactosylglucosylceramide acetylgalactosaminyltransferase; uridine diphosphoacetylgalactosamine-hematoside acetylgalactosaminyltransferase; GM2/GD2-synthase; beta-1,4N-acetylgalactosaminyltransferase; asialo-GM2 synthase; GalNAc-T; UDP-N-acetyl-D-galactosamine:(N-acetylneuraminyl)-D-galactosyl-D-glucosylceramide N-acetyl-D-galactosaminyltransferase; UDP-N-acetyl-D-galactosamine:1-O-[O-(N-acetyl-alpha-neuraminyl)-(2->3)-O-beta-D-galactopyranosyl-(1->4)-beta-D-glucopyranosyl]-ceramide 4-beta-N-acetyl-D-galactosaminyltransferase +ec:2.4.1.93 Transferred to 4.2.2.18 +ec:2.4.1.94 protein N-acetylglucosaminyltransferase; uridine diphosphoacetylglucosamine-protein acetylglucosaminyltransferase; uridine diphospho-N-acetylglucosamine:polypeptide beta-N-acetylglucosaminyltransferase; N-acetylglucosaminyltransferase I +ec:2.4.1.95 Deleted entry +ec:2.4.1.96 sn-glycerol-3-phosphate 1-galactosyltransferase; isofloridoside-phosphate synthase; UDP-Gal:sn-glycero-3-phosphoric acid 1-alpha-galactosyl-transferase; UDPgalactose:sn-glycerol-3-phosphate alpha-D-galactosyltransferase; uridine diphosphogalactose-glycerol phosphate galactosyltransferase; glycerol 3-phosphate 1alpha-galactosyltransferase; UDP-galactose:sn-glycerol-3-phosphate 1-alpha-D-galactosyltransferase +ec:2.4.1.97 1,3-beta-D-glucan phosphorylase; laminarin phosphoryltransferase; 1,3-beta-D-glucan:orthophosphate glucosyltransferase; 1,3-beta-D-glucan:phosphate alpha-D-glucosyltransferase +ec:2.4.1.98 Deleted entry +ec:2.4.1.99 sucrose:sucrose fructosyltransferase; SST; sucrose:sucrose 1-fructosyltransferase; sucrose-sucrose 1-fructosyltransferase; sucrose 1F-fructosyltransferase; sucrose:sucrose 1F-beta-D-fructosyltransferase +ec:2.4.1.100 2,1-fructan:2,1-fructan 1-fructosyltransferase; 1,2-beta-D-fructan 1F-fructosyltransferase; fructan:fructan fructosyl transferase; FFT; 1,2-beta-fructan 1F-fructosyltransferase; 1,2-beta-D-fructan:1,2-beta-D-fructan 1F-beta-D-fructosyltransferase; fructan:fructan 1-fructosyl transferase; 2,1-beta-D-fructan:2,1-beta-D-fructan 1-beta-D-fructosyltransferase +ec:2.4.1.101 alpha-1,3-mannosyl-glycoprotein 2-beta-N-acetylglucosaminyltransferase; MGAT1 (gene name); N-acetylglucosaminyltransferase I; N-glycosyl-oligosaccharide-glycoprotein N-acetylglucosaminyltransferase I; uridine diphosphoacetylglucosamine-alpha-1,3-mannosylglycoprotein beta-1,2-N-acetylglucosaminyltransferase; UDP-N-acetylglucosaminyl:alpha-1,3-D-mannoside-beta-1,2-N-acetylglucosaminyltransferase I; UDP-N-acetylglucosaminyl:alpha-3-D-mannoside beta-1,2-N-acetylglucosaminyltransferase I; alpha-1,3-mannosyl-glycoprotein beta-1,2-N-acetylglucosaminyltransferase; GnTI; GlcNAc-T I; UDP-N-acetyl-D-glucosamine:3-(alpha-D-mannosyl)-beta-D-mannosyl-glycoprotein 2-beta-N-acetyl-D-glucosaminyltransferase +ec:2.4.1.102 beta-1,3-galactosyl-O-glycosyl-glycoprotein beta-1,6-N-acetylglucosaminyltransferase; O-glycosyl-oligosaccharide-glycoprotein N-acetylglucosaminyltransferase I; beta6-N-acetylglucosaminyltransferase; uridine diphosphoacetylglucosamine-mucin beta-(1->6)-acetylglucosaminyltransferase; core 2 acetylglucosaminyltransferase; core 6-beta-GlcNAc-transferase A; UDP-N-acetyl-D-glucosamine:O-glycosyl-glycoprotein (N-acetyl-D-glucosamine to N-acetyl-D-galactosamine of beta-D-galactosyl-1,3-N-acetyl-D-galactosaminyl-R) beta-1,6-N-acetyl-D-glucosaminyltransferase; GCNT1; GCNT3; UDP-N-acetyl-D-glucosamine:O-glycosyl-glycoprotein (N-acetyl-D-glucosamine to N-acetyl-D-galactosamine of beta-D-galactosyl-(1->3)-N-acetyl-D-galactosaminyl-R) 6-beta-N-acetyl-D-glucosaminyltransferase +ec:2.4.1.103 alizarin 2-beta-glucosyltransferase; uridine diphosphoglucose-alizarin glucosyltransferase +ec:2.4.1.104 o-dihydroxycoumarin 7-O-glucosyltransferase; uridine diphosphoglucose-o-dihydroxycoumarin 7-O-glucosyltransferase; UDP-glucose:o-dihydroxycoumarin glucosyltransferase +ec:2.4.1.105 vitexin beta-glucosyltransferase; uridine diphosphoglucose-vitexin 2''-glucosyltransferase +ec:2.4.1.106 isovitexin beta-glucosyltransferase; uridine diphosphoglucose-isovitexin 2''-glucosyltransferase +ec:2.4.1.107 Deleted entry +ec:2.4.1.108 Deleted entry +ec:2.4.1.109 dolichyl-phosphate-mannose---protein mannosyltransferase; dolichol phosphomannose-protein mannosyltransferase; protein O-D-mannosyltransferase; dolichyl-phosphate-D-mannose:protein O-D-mannosyltransferase; dolichyl-phosphate-mannose-protein mannosyltransferase; dolichyl-D-mannosyl-phosphate:protein O-D-mannosyltransferase +ec:2.4.1.110 tRNA-queuosine alpha-mannosyltransferase; GDP-mannose:tRNAAsp-queuosine O-5''-beta-D-mannosyltransferase (incorrect); tRNA-queuosine beta-mannosyltransferase (incorrect) +ec:2.4.1.111 coniferyl-alcohol glucosyltransferase; uridine diphosphoglucose-coniferyl alcohol glucosyltransferase; UDP-glucose coniferyl alcohol glucosyltransferase +ec:2.4.1.112 Deleted entry +ec:2.4.1.113 alpha-1,4-glucan-protein synthase (ADP-forming); ADP-glucose:protein glucosyltransferase; adenosine diphosphoglucose-protein glucosyltransferase +ec:2.4.1.114 2-coumarate O-beta-glucosyltransferase; uridine diphosphoglucose-o-coumarate glucosyltransferase; UDPG:o-coumaric acid O-glucosyltransferase +ec:2.4.1.115 anthocyanidin 3-O-glucosyltransferase; uridine diphosphoglucose-anthocyanidin 3-O-glucosyltransferase; UDP-glucose:anthocyanidin/flavonol 3-O-glucosyltransferase; UDP-glucose:cyanidin-3-O-glucosyltransferase; UDP-glucose:anthocyanidin 3-O-D-glucosyltransferase; 3-GT +ec:2.4.1.116 cyanidin 3-O-rutinoside 5-O-glucosyltransferase; uridine diphosphoglucose-cyanidin 3-rhamnosylglucoside 5-O-glucosyltransferase; cyanidin-3-rhamnosylglucoside 5-O-glucosyltransferase; UDP-glucose:cyanidin-3-O-D-rhamnosyl-1,6-D-glucoside 5-O-D-glucosyltransferase +ec:2.4.1.117 dolichyl-phosphate beta-glucosyltransferase; polyprenyl phosphate:UDP-D-glucose glucosyltransferase; UDP-glucose dolichyl-phosphate glucosyltransferase; uridine diphosphoglucose-dolichol glucosyltransferase; UDP-glucose:dolichol phosphate glucosyltransferase; UDP-glucose:dolicholphosphoryl glucosyltransferase; UDP-glucose:dolichyl monophosphate glucosyltransferase; UDP-glucose:dolichyl phosphate glucosyltransferase; UDP-glucose:dolichyl-phosphate beta-D-glucosyltransferase +ec:2.4.1.118 cytokinin 7-beta-glucosyltransferase; uridine diphosphoglucose-zeatin 7-glucosyltransferase; cytokinin 7-glucosyltransferase; UDP-glucose:zeatin 7-glucosyltransferase +ec:2.4.1.119 Transferred to 2.4.99.18 +ec:2.4.1.120 sinapate 1-glucosyltransferase; uridine diphosphoglucose-sinapate glucosyltransferase; UDP-glucose:sinapic acid glucosyltransferase; uridine 5'-diphosphoglucose-hydroxycinnamic acid acylglucosyltransferase; UDP-glucose:sinapate D-glucosyltransferase +ec:2.4.1.121 indole-3-acetate beta-glucosyltransferase; uridine diphosphoglucose-indoleacetate glucosyltransferase; UDPG-indol-3-ylacetyl glucosyl transferase; UDP-glucose:indol-3-ylacetate glucosyltransferase; indol-3-ylacetylglucose synthase; UDP-glucose:indol-3-ylacetate glucosyl-transferase; IAGlu synthase; IAA-glucose synthase; UDP-glucose:indole-3-acetate beta-D-glucosyltransferase +ec:2.4.1.122 N-acetylgalactosaminide beta-1,3-galactosyltransferase; glycoprotein-N-acetylgalactosamine 3-beta-galactosyltransferase; uridine diphosphogalactose-mucin beta-(1->3)-galactosyltransferase; UDP-galactose:glycoprotein-N-acetyl-D-galactosamine 3-beta-D-galactosyltransferase; UDP-Gal:alpha-D-GalNAc-1,3-alpha-D-GalNAc-diphosphoundecaprenol beta-1,3-galactosyltransferase; wbnJ (gene name); wbiP (gene name); C1GALT1 (gene name); UDP-alpha-D-galactose:glycoprotein-N-acetyl-D-galactosamine 3-beta-D-galactosyltransferase +ec:2.4.1.123 inositol 3-alpha-galactosyltransferase; UDP-D-galactose:inositol galactosyltransferase; UDP-galactose:myo-inositol 1-alpha-D-galactosyltransferase; UDPgalactose:myo-inositol 1-alpha-D-galactosyltransferase; galactinol synthase; inositol 1-alpha-galactosyltransferase; uridine diphosphogalactose-inositol galactosyltransferase; GolS; UDP-galactose:myo-inositol 3-alpha-D-galactosyltransferase +ec:2.4.1.124 Transferred to 2.4.1.87 +ec:2.4.1.125 sucrose---1,6-alpha-glucan 3(6)-alpha-glucosyltransferase; water-soluble-glucan synthase (misleading); GTF-I; GTF-S; GTF-SI; sucrose-1,6-alpha-glucan 3(6)-alpha-glucosyltransferase; sucrose:1,6-alpha-D-glucan 3-alpha- and 6-alpha-glucosyltransferase; sucrose:1,6-, 1,3-alpha-D-glucan 3-alpha- and 6-alpha-D-glucosyltransferase; sucrose:1,6-alpha-D-glucan 3(6)-alpha-D-glucosyltransferase; gtfB (gene name); gtfC (gene name); gtfD (gene name) +ec:2.4.1.126 hydroxycinnamate 4-beta-glucosyltransferase; uridine diphosphoglucose-hydroxycinnamate glucosyltransferase; UDP-glucose-hydroxycinnamate glucosyltransferase; hydroxycinnamoyl glucosyltransferase +ec:2.4.1.127 monoterpenol beta-glucosyltransferase; uridine diphosphoglucose-monoterpenol glucosyltransferase; UDPglucose:monoterpenol glucosyltransferase +ec:2.4.1.128 scopoletin glucosyltransferase; uridine diphosphoglucose-scopoletin glucosyltransferase; UDP-glucose:scopoletin glucosyltransferase; SGTase +ec:2.4.1.129 peptidoglycan glycosyltransferase; PG-II; bactoprenyldiphospho-N-acetylmuramoyl-(N-acetyl-D-glucosaminyl)-pentapeptide:peptidoglycan N-acetylmuramoyl-N-acetyl-D-glucosaminyltransferase; penicillin binding protein (3 or 1B); peptidoglycan transglycosylase; undecaprenyldiphospho-(N-acetyl-D-glucosaminyl-(1->4)-N-acetyl-D-muramoylpentapeptide):undecaprenyldiphospho-(N-acetyl-D-glucosaminyl-(1->4)-N-acetyl-D-muramoylpentapeptide) disaccharidetransferase +ec:2.4.1.130 Transferred to 2.4.1.258 and 2.4.1.259 and 2.4.1.260 and 2.4.1.261 +ec:2.4.1.131 GDP-Man:Man3GlcNAc2-PP-dolichol alpha-1,2-mannosyltransferase; ALG11; ALG11 mannosyltransferase; LEW3 (gene name); At2G40190 (gene name); gmd3 (gene name); galactomannan deficiency protein 3; GDP-mannose:glycolipid 1,2-alpha-D-mannosyltransferase; glycolipid 2-alpha-mannosyltransferase; GDP-mannose:glycolipid 2-alpha-D-mannosyltransferase; GDP-Man:Man3GlcNAc2-PP-Dol alpha-1,2-mannosyltransferase; GDP-alpha-D-mannose:D-Man-alpha-(1->3)-[D-Man-alpha-(1->6)]-D-Man-beta-(1->4)-D-GlcNAc-beta-(1->4)-D-GlcNAc-diphosphodolichol 2-alpha-D-mannosyltransferase +ec:2.4.1.132 GDP-Man:Man1GlcNAc2-PP-dolichol alpha-1,3-mannosyltransferase; Alg2 mannosyltransferase (ambiguous); ALG2 (gene name, ambiguous); glycolipid 3-alpha-mannosyltransferase; GDP-mannose:glycolipid 3-alpha-D-mannosyltransferase; GDP-Man:Man1GlcNAc2-PP-Dol alpha-1,3-mannosyltransferase; GDP-D-mannose:D-Man-beta-(1->4)-D-GlcNAc-beta-(1->4)-D-GlcNAc-diphosphodolichol 3-alpha-mannosyltransferase +ec:2.4.1.133 xylosylprotein 4-beta-galactosyltransferase; UDP-D-galactose:D-xylose galactosyltransferase; UDP-D-galactose:xylose galactosyltransferase; galactosyltransferase I; uridine diphosphogalactose-xylose galactosyltransferase; UDP-galactose:O-beta-D-xylosylprotein 4-beta-D-galactosyltransferase; UDP-alpha-D-galactose:O-beta-D-xylosylprotein 4-beta-D-galactosyltransferase; UDP-alpha-D-galactose:O-beta-D-xylosyl-[protein] 4-beta-D-galactosyltransferase +ec:2.4.1.134 galactosylxylosylprotein 3-beta-galactosyltransferase; galactosyltransferase II; uridine diphosphogalactose-galactosylxylose galactosyltransferase; UDP-galactose:4-beta-D-galactosyl-O-beta-D-xylosylprotein 3-beta-D-galactosyltransferase; UDP-alpha-D-galactose:4-beta-D-galactosyl-O-beta-D-xylosylprotein 3-beta-D-galactosyltransferase +ec:2.4.1.135 galactosylgalactosylxylosylprotein 3-beta-glucuronosyltransferase; glucuronosyltransferase I; uridine diphosphate glucuronic acid:acceptor glucuronosyltransferase; UDP-glucuronate:3-beta-D-galactosyl-4-beta-D-galactosyl-O-beta-D-xylosyl-protein D-glucuronosyltransferase; UDP-glucuronate:3-beta-D-galactosyl-4-beta-D-galactosyl-O-beta-D-xylosylprotein D-glucuronosyltransferase +ec:2.4.1.136 gallate 1-beta-glucosyltransferase; UDP-glucose---vanillate 1-glucosyltransferase; UDPglucose:vanillate 1-O-glucosyltransferase; UDPglucose:gallate glucosyltransferase +ec:2.4.1.137 sn-glycerol-3-phosphate 2-alpha-galactosyltransferase; floridoside-phosphate synthase; UDP-galactose:sn-glycerol-3-phosphate-2-D-galactosyl transferase; FPS; UDP-galactose,sn-3-glycerol phosphate:1->2' galactosyltransferase; floridoside phosphate synthetase; floridoside phosphate synthase; UDP-galactose:sn-glycerol-3-phosphate 2-alpha-D-galactosyltransferase +ec:2.4.1.138 mannotetraose 2-alpha-N-acetylglucosaminyltransferase; alpha-N-acetylglucosaminyltransferase; uridine diphosphoacetylglucosamine mannoside alpha1->2-alphacetylglucosaminyltransferase; UDP-N-acetyl-D-glucosamine:mannotetraose alpha-N-acetyl-D-glucosaminyltransferase +ec:2.4.1.139 maltose synthase +ec:2.4.1.140 alternansucrase; sucrose-1,6(3)-alpha-glucan 6(3)-alpha-glucosyltransferase; sucrose:1,6-, 1,3-alpha-D-glucan 3-alpha- and 6-alpha-D-glucosyltransferase; sucrose:1,6(1,3)-alpha-D-glucan 6(3)-alpha-D-glucosyltransferase +ec:2.4.1.141 N-acetylglucosaminyldiphosphodolichol N-acetylglucosaminyltransferase; UDP-GlcNAc:dolichyl-pyrophosphoryl-GlcNAc GlcNAc transferase; uridine diphosphoacetylglucosamine-dolichylacetylglucosamine pyrophosphate acetylglucosaminyltransferase; N,N'-diacetylchitobiosylpyrophosphoryldolichol synthase; UDP-N-acetyl-D-glucosamine:N-acetyl-D-glucosaminyl-diphosphodolichol N-acetyl-D-glucosaminyltransferase +ec:2.4.1.142 chitobiosyldiphosphodolichol beta-mannosyltransferase; guanosine diphosphomannose-dolichol diphosphochitobiose mannosyltransferase; GDP-mannose-dolichol diphosphochitobiose mannosyltransferase; GDP-mannose:chitobiosyldiphosphodolichol beta-D-mannosyltransferase +ec:2.4.1.143 alpha-1,6-mannosyl-glycoprotein 2-beta-N-acetylglucosaminyltransferase; MGAT2 (gene name); N-acetylglucosaminyltransferase II; N-glycosyl-oligosaccharide-glycoprotein N-acetylglucosaminyltransferase II; acetylglucosaminyltransferase II; uridine diphosphoacetylglucosamine-mannoside alpha1->6-acetylglucosaminyltransferase; uridine diphosphoacetylglucosamine-alpha-1,6-mannosylglycoprotein beta-1-2-N-acetylglucosaminyltransferase; uridine diphosphoacetylglucosamine-alpha-D-mannoside beta1-2-acetylglucosaminyltransferase; UDP-GlcNAc:mannoside alpha1-6 acetylglucosaminyltransferase; alpha-1,6-mannosyl-glycoprotein beta-1,2-N-acetylglucosaminyltransferase; GnTII; GlcNAc-T II; UDP-N-acetyl-D-glucosamine:6-(alpha-D-mannosyl)-beta-D-mannosyl-glycoprotein 2-beta-N-acetyl-D-glucosaminyltransferase +ec:2.4.1.144 beta-1,4-mannosyl-glycoprotein 4-beta-N-acetylglucosaminyltransferase; N-acetylglucosaminyltransferase III; N-glycosyl-oligosaccharide-glycoprotein N-acetylglucosaminyltransferase III; uridine diphosphoacetylglucosamine-glycopeptide beta4-acetylglucosaminyltransferase III; beta-1,4-mannosyl-glycoprotein beta-1,4-N-acetylglucosaminyltransferase; GnTIII; GlcNAc-T III; MGAT3 (gene name); UDP-N-acetyl-D-glucosamine:beta-D-mannosyl-glycoprotein 4-beta-N-acetyl-D-glucosaminyltransferase +ec:2.4.1.145 alpha-1,3-mannosyl-glycoprotein 4-beta-N-acetylglucosaminyltransferase; N-acetylglucosaminyltransferase IV; N-glycosyl-oligosaccharide-glycoprotein N-acetylglucosaminyltransferase IV; beta-acetylglucosaminyltransferase IV; uridine diphosphoacetylglucosamine-glycopeptide beta4-acetylglucosaminyltransferase IV; alpha-1,3-mannosylglycoprotein beta-1,4-N-acetylglucosaminyltransferase; GnTIV; UDP-N-acetyl-D-glucosamine:3-[2-(N-acetyl-beta-D-glucosaminyl)-alpha-D-mannosyl]-glycoprotein 4-beta-N-acetyl-D-glucosaminyltransferase +ec:2.4.1.146 beta-1,3-galactosyl-O-glycosyl-glycoprotein beta-1,3-N-acetylglucosaminyltransferase; O-glycosyl-oligosaccharide-glycoprotein N-acetylglucosaminyltransferase II; uridine diphosphoacetylglucosamine-mucin beta(1->3)-acetylglucosaminyltransferase (elongating); elongation 3beta-GalNAc-transferase; UDP-N-acetyl-D-glucosamine:O-glycosyl-glycoprotein (N-acetyl-D-glucosamine to beta-D-galactose of beta-D-galactosyl-1,3-(N-acetyl-D-glucosaminyl-1,6)-N-acetyl-D-galactosaminyl-R) beta-1,3-N-acetyl-D-glucosaminyltransferase; UDP-N-acetyl-D-glucosamine:beta-D-galactosyl-(1->3)-[N-acetyl-D-glucosaminyl-(1->6)]-N-acetyl-D-galactosaminyl-R 3-beta-N-acetyl-D-glucosaminyltransferase; B3GNT3 (gene name) +ec:2.4.1.147 acetylgalactosaminyl-O-glycosyl-glycoprotein beta-1,3-N-acetylglucosaminyltransferase; O-glycosyl-oligosaccharide-glycoprotein N-acetylglucosaminyltransferase III; uridine diphosphoacetylglucosamine-mucin beta(1->3)-acetylglucosaminyltransferase; mucin core 3 beta3-GlcNAc-transferase; Core 3beta-GlcNAc-transferase; UDP-N-acetyl-D-glucosamine:O-glycosyl-glycoprotein (N-acetyl-D-glucosamine to N-acetyl-D-galactosaminyl-R) beta-1,3-N-acetyl-D-glucosaminyltransferase; UDP-N-acetyl-D-glucosamine:N-acetyl-beta-D-galactosaminyl-R 3-beta-N-acetyl-D-glucosaminyltransferase (incorrect) +ec:2.4.1.148 acetylgalactosaminyl-O-glycosyl-glycoprotein beta-1,6-N-acetylglucosaminyltransferase; O-glycosyl-oligosaccharide-glycoprotein N-acetylglucosaminyltransferase IV; uridine diphosphoacetylglucosamine-mucin beta(1->6)-acetylglucosaminyltransferase B; core 4 beta6-GalNAc-transferase; core 6beta-GalNAc-transferase B; UDP-N-acetyl-D-glucosamine:O-oligosaccharide-glycoprotein (N-acetyl-D-glucosamine to N-acetyl-D-galactosamine of N-acetyl-beta-D-glucosaminyl-1,3-N-acetyl-D-galactosaminyl-R) beta-1,6-N-acetyl-D-glucosaminyltransferase +ec:2.4.1.149 N-acetyllactosaminide beta-1,3-N-acetylglucosaminyltransferase; uridine diphosphoacetylglucosamine-acetyllactosaminide beta1->3-acetylglucosaminyltransferase; poly-N-acetyllactosamine extension enzyme; Galbeta1->4GlcNAc-R beta1->3 N-acetylglucosaminyltransferase; UDP-GlcNAc:GalR beta-D-3-N-acetylglucosaminyltransferase; N-acetyllactosamine beta(1-3)N-acetylglucosaminyltransferase; UDP-GlcNAc:Galbeta1->4GlcNAcbeta-Rbeta1->3-N-acetylglucosaminyltransferase; GnTE; UDP-N-acetyl-D-glucosamine:beta-D-galactosyl-1,4-N-acetyl-D-glucosamine beta-1,3-acetyl-D-glucosaminyltransferase; beta-galactosyl-N-acetylglucosaminylgalactosylglucosyl-ceramide beta-1,3-acetylglucosaminyltransferase; UDP-N-acetyl-D-glucosamine:beta-D-galactosyl-(1->4)-N-acetyl-D-glucosamine 3-beta-N-acetyl-D-glucosaminyltransferase +ec:2.4.1.150 N-acetyllactosaminide beta-1,6-N-acetylglucosaminyltransferase; GCNT2 (gene name); GCNT3 (gene name); IGnT; I-branching beta1,6-N-acetylglucosaminyltransferase; N-acetylglucosaminyltransferase; uridine diphosphoacetylglucosamine-acetyllactosaminide beta1->6-acetylglucosaminyltransferase; Galbeta1->4GlcNAc-R beta1->6 N-acetylglucosaminyltransferase; UDP-N-acetyl-D-glucosamine:beta-D-galactosyl-1,4-N-acetyl-D-glucosaminide beta-1,6-N-acetyl-D-glucosaminyltransferase +ec:2.4.1.151 Transferred to 2.4.1.87 +ec:2.4.1.152 4-galactosyl-N-acetylglucosaminide 3-alpha-L-fucosyltransferase; Lewis-negative alpha-3-fucosyltransferase; plasma alpha-3-fucosyltransferase; guanosine diphosphofucose-glucoside alpha1->3-fucosyltransferase; galactoside 3-fucosyltransferase; GDP-L-fucose:1,4-beta-D-galactosyl-N-acetyl-D-glucosaminyl-R 3-L-fucosyltransferase; GDP-beta-L-fucose:1,4-beta-D-galactosyl-N-acetyl-D-glucosaminyl-R 3-L-fucosyltransferase; GDP-beta-L-fucose:1,4-beta-D-galactosyl-N-acetyl-D-glucosaminyl-R 3-alpha-L-fucosyltransferase; GDP-beta-L-fucose:(1->4)-beta-D-galactosyl-N-acetyl-D-glucosaminyl-R 3-alpha-L-fucosyltransferase +ec:2.4.1.153 UDP-N-acetylglucosamine---dolichyl-phosphate N-acetylglucosaminyltransferase; aglK (gene name); dolichyl-phosphate alpha-N-acetylglucosaminyltransferase; UDP-N-acetyl-D-glucosamine:dolichyl-phosphate alpha-N-acetyl-D-glucosaminyltransferase +ec:2.4.1.154 Deleted entry +ec:2.4.1.155 alpha-1,6-mannosyl-glycoprotein 6-beta-N-acetylglucosaminyltransferase; MGAT5 (gene name); N-acetylglucosaminyltransferase V; alpha-mannoside beta-1,6-N-acetylglucosaminyltransferase; uridine diphosphoacetylglucosamine-alpha-mannoside beta1->6-acetylglucosaminyltransferase; UDP-N-acetylglucosamine:alpha-mannoside-beta1,6 N-acetylglucosaminyltransferase; alpha-1,3(6)-mannosylglycoprotein beta-1,6-N-acetylglucosaminyltransferase; GnTV; GlcNAc-T V; UDP-N-acetyl-D-glucosamine:6-[2-(N-acetyl-beta-D-glucosaminyl)-alpha-D-mannosyl]-glycoprotein 6-beta-N-acetyl-D-glucosaminyltransferase +ec:2.4.1.156 indolylacetyl-myo-inositol galactosyltransferase; uridine diphosphogalactose-indolylacetylinositol galactosyltransferase; indol-3-ylacetyl-myo-inositol galactoside synthase; UDP-galactose:indol-3-ylacetyl-myo-inositol 5-O-D-galactosyltransferase; UDP-galactose:(indol-3-yl)acetyl-myo-inositol 5-O-D-galactosyltransferase +ec:2.4.1.157 Transferred to 2.4.1.336 and 2.4.1.337 +ec:2.4.1.158 13-hydroxydocosanoate 13-beta-glucosyltransferase; 13-glucosyloxydocosanoate 2'-beta-glucosyltransferase; UDP-glucose:13-hydroxydocosanoic acid glucosyltransferase; uridine diphosphoglucose-hydroxydocosanoate glucosyltransferase; UDP-glucose-13-hydroxydocosanoate glucosyltransferase +ec:2.4.1.159 flavonol-3-O-glucoside L-rhamnosyltransferase; uridine diphosphorhamnose-flavonol 3-O-glucoside rhamnosyltransferase; UDP-rhamnose:flavonol 3-O-glucoside rhamnosyltransferase; UDP-L-rhamnose:flavonol-3-O-D-glucoside 6''-O-L-rhamnosyltransferase +ec:2.4.1.160 pyridoxine 5'-O-beta-D-glucosyltransferase; UDP-glucose:pyridoxine 5'-O-beta-glucosyltransferase; uridine diphosphoglucose-pyridoxine 5'-beta-glucosyltransferase; UDP-glucose-pyridoxine glucosyltransferase +ec:2.4.1.161 oligosaccharide 4-alpha-D-glucosyltransferase; amylase III; 1,4-alpha-glucan:1,4-alpha-glucan 4-alpha-glucosyltransferase; 1,4-alpha-D-glucan:1,4-alpha-D-glucan 4-alpha-D-glucosyltransferase; alpha-1,4-transglucosylase +ec:2.4.1.162 aldose beta-D-fructosyltransferase +ec:2.4.1.163 Transferred to 2.4.1.149 +ec:2.4.1.164 Transferred to 2.4.1.150 +ec:2.4.1.165 N-acetylneuraminylgalactosylglucosylceramide beta-1,4-N-acetylgalactosaminyltransferase; uridine diphosphoacetylgalactosamine-acetylneuraminyl(alpha2->3)galactosyl(beta1->4)glucosyl beta1->4-acetylgalactosaminyltransferase; UDP-N-acetyl-D-galactosamine:N-acetylneuraminyl-2,3-alpha-D-galactosyl-1,4-beta-D-glucosylceramide beta-1,4-N-acetylgalactosaminyltransferase; UDP-N-acetyl-D-galactosamine:N-acetylneuraminyl-(2->3)-alpha-D-galactosyl-(1->4)-beta-D-glucosyl(1<->1)ceramide 4-beta-N-acetylgalactosaminyltransferase; UDP-N-acetyl-D-galactosamine:N-acetylneuraminyl-(2->3)-alpha-D-galactosyl-(1->4)-beta-D-glucosyl-(1<->1)-ceramide 4-beta-N-acetylgalactosaminyltransferase +ec:2.4.1.166 raffinose---raffinose alpha-galactosyltransferase; raffinose (raffinose donor) galactosyltransferase; raffinose:raffinose alpha-galactosyltransferase; raffinose---raffinose alpha-galactotransferase +ec:2.4.1.167 sucrose 6F-alpha-galactosyltransferase; uridine diphosphogalactose-sucrose 6F-alpha-galactosyltransferase; UDPgalactose:sucrose 6fru-alpha-galactosyltransferase; sucrose 6F-alpha-galactotransferase; UDP-galactose:sucrose 6F-alpha-D-galactosyltransferase +ec:2.4.1.168 xyloglucan 4-glucosyltransferase; uridine diphosphoglucose-xyloglucan 4beta-glucosyltransferase; xyloglucan 4beta-D-glucosyltransferase; xyloglucan glucosyltransferase; UDP-glucose:xyloglucan 1,4-beta-D-glucosyltransferase +ec:2.4.1.169 Transferred to 2.4.2.39 +ec:2.4.1.170 isoflavone 7-O-glucosyltransferase; uridine diphosphoglucose-isoflavone 7-O-glucosyltransferase; UDPglucose-favonoid 7-O-glucosyltransferase; UDPglucose:isoflavone 7-O-glucosyltransferase +ec:2.4.1.171 methyl-ONN-azoxymethanol beta-D-glucosyltransferase; cycasin synthase; uridine diphosphoglucose-methylazoxymethanol glucosyltransferase; UDP-glucose-methylazoxymethanol glucosyltransferase +ec:2.4.1.172 salicyl-alcohol beta-D-glucosyltransferase; uridine diphosphoglucose-salicyl alcohol 2-glucosyltransferase; UDPglucose:salicyl alcohol phenyl-glucosyltransferase +ec:2.4.1.173 sterol 3beta-glucosyltransferase; UDPG:sterol glucosyltransferase; UDP-glucose-sterol beta-glucosyltransferase; sterol:UDPG glucosyltransferase; UDPG-SGTase; uridine diphosphoglucose-poriferasterol glucosyltransferase; uridine diphosphoglucose-sterol glucosyltransferase; sterol glucosyltransferase; sterol-beta-D-glucosyltransferase; UDP-glucose-sterol glucosyltransferase +ec:2.4.1.174 glucuronylgalactosylproteoglycan 4-beta-N-acetylgalactosaminyltransferase; N-acetylgalactosaminyltransferase I; glucuronylgalactosylproteoglycan beta-1,4-N-acetylgalactosaminyltransferase; uridine diphosphoacetylgalactosamine-chondroitin acetylgalactosaminyltransferase I; UDP-N-acetyl-D-galactosamine:D-glucuronyl-1,3-beta-D-galactosyl-proteoglycan beta-1,4-N-acetylgalactosaminyltransferase; UDP-N-acetyl-D-galactosamine:D-glucuronyl-(1->3)-beta-D-galactosyl-proteoglycan 4-beta-N-acetylgalactosaminyltransferase +ec:2.4.1.175 glucuronosyl-N-acetylgalactosaminyl-proteoglycan 4-beta-N-acetylgalactosaminyltransferase; N-acetylgalactosaminyltransferase II; UDP-N-acetyl-D-galactosamine:D-glucuronyl-N-acetyl-1,3-beta-D-galactosaminylproteoglycan beta-1,4-N-acetylgalactosaminyltransferase; chondroitin synthase; glucuronyl-N-acetylgalactosaminylproteoglycan beta-1,4-N-acetylgalactosaminyltransferase; uridine diphosphoacetylgalactosamine-chondroitin acetylgalactosaminyltransferase II; UDP-N-acetyl-D-galactosamine:beta-D-glucuronosyl-(1->3)-N-acetyl-beta-D-galactosaminyl-proteoglycan 4-beta-N-acetylgalactosaminyltransferase; UDP-N-acetyl-alpha-D-galactosamine:beta-D-glucuronosyl-(1->3)-N-acetyl-beta-D-galactosaminyl-proteoglycan 4-beta-N-acetylgalactosaminyltransferase +ec:2.4.1.176 gibberellin beta-D-glucosyltransferase; uridine diphosphoglucose-gibberellate 7-glucosyltransferase; uridine diphosphoglucose-gibberellate 3-O-glucosyltransferase +ec:2.4.1.177 cinnamate beta-D-glucosyltransferase; uridine diphosphoglucose-cinnamate glucosyltransferase; UDPG:t-cinnamate glucosyltransferase +ec:2.4.1.178 hydroxymandelonitrile glucosyltransferase; cyanohydrin glucosyltransferase; uridine diphosphoglucose-cyanohydrin glucosyltransferase +ec:2.4.1.179 lactosylceramide beta-1,3-galactosyltransferase; uridine diphosphogalactose-lactosylceramide beta1->3-galactosyltransferase; UDP-galactose:D-galactosyl-1,4-beta-D-glucosyl-R beta-1,3-galactosyltransferase; UDP-galactose:D-galactosyl-(1->4)-beta-D-glucosyl-R 3-beta-galactosyltransferase; UDP-alpha-D-galactose:D-galactosyl-(1->4)-beta-D-glucosyl-R 3-beta-galactosyltransferase +ec:2.4.1.180 lipopolysaccharide N-acetylmannosaminouronosyltransferase; ManNAcA transferase; uridine diphosphoacetylmannosaminuronate-acetylglucosaminylpyrophosphorylundecaprenol acetylmannosaminuronosyltransferase; UDP-N-acetyl-beta-D-mannosaminouronate:lipid I N-acetyl-beta-D-mannosaminouronosyltransferase (incorrect) +ec:2.4.1.181 hydroxyanthraquinone glucosyltransferase; uridine diphosphoglucose-anthraquinone glucosyltransferase; anthraquinone-specific glucosyltransferase +ec:2.4.1.182 lipid-A-disaccharide synthase; lpxB (gene name); UDP-2,3-bis(3-hydroxytetradecanoyl)glucosamine:2,3-bis-(3-hydroxytetradecanoyl)-beta-D-glucosaminyl-1-phosphate 2,3-bis(3-hydroxytetradecanoyl)-glucosaminyltransferase (incorrect) +ec:2.4.1.183 alpha-1,3-glucan synthase; uridine diphosphoglucose-1,3-alpha-glucan glucosyltransferase; 1,3-alpha-D-glucan synthase; UDP-glucose:alpha-D-(1-3)-glucan 3-alpha-D-glucosyltransferase +ec:2.4.1.184 galactolipid galactosyltransferase; galactolipid-galactolipid galactosyltransferase; galactolipid:galactolipid galactosyltransferase; interlipid galactosyltransferase; GGGT; DGDG synthase (ambiguous); digalactosyldiacylglycerol synthase (ambiguous); 3-(beta-D-galactosyl)-1,2-diacyl-sn-glycerol:mono-3-(beta-D-galactosyl)-1,2-diacyl-sn-glycerol beta-D-galactosyltransferase; 3-(beta-D-galactosyl)-1,2-diacyl-sn-glycerol:3-(beta-D-galactosyl)-1,2-diacyl-sn-glycerol beta-D-galactosyltransferase; SFR2 (gene name) +ec:2.4.1.185 flavanone 7-O-beta-glucosyltransferase; uridine diphosphoglucose-flavanone 7-O-glucosyltransferase; naringenin 7-O-glucosyltransferase; hesperetin 7-O-glucosyl-transferase +ec:2.4.1.186 glycogenin glucosyltransferase; glycogenin; priming glucosyltransferase; UDP-glucose:glycogenin glucosyltransferase +ec:2.4.1.187 N-acetylglucosaminyldiphosphoundecaprenol N-acetyl-beta-D-mannosaminyltransferase; uridine diphosphoacetyl-mannosamineacetylglucosaminylpyrophosphorylundecaprenol acetylmannosaminyltransferase; N-acetylmannosaminyltransferase; UDP-N-acetylmannosamine:N-acetylglucosaminyl diphosphorylundecaprenol N-acetylmannosaminyltransferase; UDP-N-acetyl-D-mannosamine:N-acetyl-beta-D-glucosaminyldiphosphoundecaprenol beta-1,4-N-acetylmannosaminyltransferase; UDP-N-acetyl-D-mannosamine:N-acetyl-beta-D-glucosaminyldiphosphoundecaprenol 4-beta-N-acetylmannosaminyltransferase; tagA (gene name); tarA (gene name); UDP-N-acetyl-alpha-D-mannosamine:N-acetyl-beta-D-glucosaminyl-diphospho-ditrans,octacis-undecaprenol 4-beta-N-acetylmannosaminyltransferase +ec:2.4.1.188 N-acetylglucosaminyldiphosphoundecaprenol glucosyltransferase; UDP-D-glucose:N-acetylglucosaminyl pyrophosphorylundecaprenol glucosyltransferase; uridine diphosphoglucose-acetylglucosaminylpyrophosphorylundecaprenol glucosyltransferase; UDP-glucose:N-acetyl-D-glucosaminyldiphosphoundecaprenol 4-beta-D-glucosyltransferase +ec:2.4.1.189 luteolin 7-O-glucuronosyltransferase; uridine diphosphoglucuronate-luteolin 7-O-glucuronosyltransferase; LGT; UDP-glucuronate:luteolin 7-O-glucuronosyltransferase +ec:2.4.1.190 luteolin-7-O-glucuronide 2''-O-glucuronosyltransferase; uridine diphosphoglucuronate-luteolin 7-O-glucuronide glucuronosyltransferase; LMT; UDP-glucuronate:luteolin 7-O-glucuronide-glucuronosyltransferase; UDP-glucuronate:luteolin-7-O-beta-D-glucuronide 2''-O-glucuronosyltransferase +ec:2.4.1.191 luteolin-7-O-diglucuronide 4'-O-glucuronosyltransferase; uridine diphosphoglucuronate-luteolin 7-O-diglucuronide glucuronosyltransferase; UDP-glucuronate:luteolin 7-O-diglucuronide-glucuronosyltransferase; UDPglucuronate:luteolin 7-O-diglucuronide-4'-O-glucuronosyl-transferase; LDT; UDP-glucuronate:luteolin-7-O-beta-D-diglucuronide 4'-O-glucuronosyltransferase +ec:2.4.1.192 nuatigenin 3beta-glucosyltransferase; uridine diphosphoglucose-nuatigenin glucosyltransferase +ec:2.4.1.193 sarsapogenin 3beta-glucosyltransferase; uridine diphosphoglucose-sarsapogenin glucosyltransferase +ec:2.4.1.194 4-hydroxybenzoate 4-O-beta-D-glucosyltransferase; uridine diphosphoglucose-4-hydroxybenzoate glucosyltransferase; UDP-glucose:4-(beta-D-glucopyranosyloxy)benzoic acid glucosyltransferase; HBA glucosyltransferase; p-hydroxybenzoate glucosyltransferase; PHB glucosyltransferase; PHB-O-glucosyltransferase +ec:2.4.1.195 N-hydroxythioamide S-beta-glucosyltransferase; UGT74B1 (gene name); desulfoglucosinolate-uridine diphosphate glucosyltransferase; uridine diphosphoglucose-thiohydroximate glucosyltransferase; thiohydroximate beta-D-glucosyltransferase; UDPG:thiohydroximate glucosyltransferase; thiohydroximate S-glucosyltransferase; thiohydroximate glucosyltransferase; UDP-glucose:thiohydroximate S-beta-D-glucosyltransferase; UDP-glucose:N-hydroxy-2-phenylethanethioamide S-beta-D-glucosyltransferase +ec:2.4.1.196 nicotinate glucosyltransferase; uridine diphosphoglucose-nicotinate N-glucosyltransferase; UDP-glucose:nicotinic acid-N-glucosyltransferase +ec:2.4.1.197 high-mannose-oligosaccharide beta-1,4-N-acetylglucosaminyltransferase; uridine diphosphoacetylglucosamine-oligosaccharide acetylglucosaminyltransferase; acetylglucosamine-oligosaccharide acetylglucosaminyltransferase; UDP-GlcNAc:oligosaccharide beta-N-acetylglucosaminyltransferase; UDP-N-acetyl-D-glucosamine:high-mannose-oligosaccharide beta-1,4-N-acetylglucosaminyltransferase +ec:2.4.1.198 phosphatidylinositol N-acetylglucosaminyltransferase; UDP-N-acetyl-D-glucosamine:phosphatidylinositol N-acetyl-D-glucosaminyltransferase; uridine diphosphoacetylglucosamine alpha1,6-acetyl-D-glucosaminyltransferase; UDP-N-acetyl-D-glucosamine:1-phosphatidyl-1D-myo-inositol 6-(N-acetyl-alpha-D-glucosaminyl)transferase +ec:2.4.1.199 beta-mannosylphosphodecaprenol---mannooligosaccharide 6-mannosyltransferase; mannosylphospholipid-methylmannoside alpha-1,6-mannosyltransferase; beta-D-mannosylphosphodecaprenol:1,6-alpha-D-mannosyloligosaccharide 1,6-alpha-D-mannosyltransferase +ec:2.4.1.200 Transferred to 4.2.2.17 +ec:2.4.1.201 alpha-1,6-mannosyl-glycoprotein 4-beta-N-acetylglucosaminyltransferase; MGAT4C (gene name); N-acetylglucosaminyltransferase VI; N-glycosyl-oligosaccharide-glycoprotein N-acetylglucosaminyltransferase VI; uridine diphosphoacetylglucosamine-glycopeptide beta-1->4-acetylglucosaminyltransferase VI; mannosyl-glycoprotein beta-1,4-N-acetylglucosaminyltransferase; GnTVI; GlcNAc-T VI; UDP-N-acetyl-D-glucosamine:2,6-bis(N-acetyl-beta-D-glucosaminyl)-alpha-D-mannosyl-glycoprotein 4-beta-N-acetyl-D-glucosaminyltransferase +ec:2.4.1.202 2,4-dihydroxy-7-methoxy-2H-1,4-benzoxazin-3(4H)-one 2-D-glucosyltransferase; uridine diphosphoglucose-2,4-dihydroxy-7-methoxy-2H-1,4-benzoxazin-3(4H)-one 2-glucosyltransferase; BX8; BX9; benzoxazinoid glucosyltransferase; DIMBOA glucosyltransferase +ec:2.4.1.203 trans-zeatin O-beta-D-glucosyltransferase; zeatin O-beta-D-glucosyltransferase; uridine diphosphoglucose-zeatin O-glucosyltransferase; zeatin O-glucosyltransferase +ec:2.4.1.204 Transferred to 2.4.2.40 +ec:2.4.1.205 galactogen 6beta-galactosyltransferase; uridine diphosphogalactose-galactogen galactosyltransferase; 1,6-D-galactosyltransferase; beta-(1-6)-D-galactosyltransferase; UDP-galactose:galactogen beta-1,6-D-galactosyltransferase +ec:2.4.1.206 lactosylceramide 1,3-N-acetyl-beta-D-glucosaminyltransferase; LA2 synthase; beta1->3-N-acetylglucosaminyltransferase; uridine diphosphoacetylglucosamine-lactosylceramide beta-acetylglucosaminyltransferase; lactosylceramide beta-acetylglucosaminyltransferase; UDP-N-acetyl-D-glucosamine:D-galactosyl-1,4-beta-D-glucosylceramide beta-1,3-acetylglucosaminyltransferase; UDP-N-acetyl-D-glucosamine:beta-D-galactosyl-(1->4)-beta-D-glucosyl(1<->1)ceramide 3-beta-N-acetylglucosaminyltransferase; UDP-N-acetyl-D-glucosamine:beta-D-galactosyl-(1->4)-beta-D-glucosyl-(1<->1)-ceramide 3-beta-N-acetylglucosaminyltransferase +ec:2.4.1.207 xyloglucan:xyloglucosyl transferase; endo-xyloglucan transferase; xyloglucan endotransglycosylase +ec:2.4.1.208 diglucosyl diacylglycerol synthase (1,2-linking); monoglucosyl diacylglycerol (1->2) glucosyltransferase; MGlcDAG (1->2) glucosyltransferase; DGlcDAG synthase (ambiguous); UDP-glucose:1,2-diacyl-3-O-(alpha-D-glucopyranosyl)-sn-glycerol (1->2) glucosyltransferase; diglucosyl diacylglycerol synthase +ec:2.4.1.209 cis-p-coumarate glucosyltransferase +ec:2.4.1.210 limonoid glucosyltransferase; uridine diphosphoglucose-limonoid glucosyltransferase +ec:2.4.1.211 1,3-beta-galactosyl-N-acetylhexosamine phosphorylase; lacto-N-biose phosphorylase; LNBP; galacto-N-biose phosphorylase +ec:2.4.1.212 hyaluronan synthase; spHAS; seHAS; Alternating UDP-alpha-N-acetyl-D-glucosamine:beta-D-glucuronosyl-(1->3)-[nascent hyaluronan] 4-N-acetyl-beta-D-glucosaminyltransferase and UDP-alpha-D-glucuronate:N-acetyl-beta-D-glucosaminyl-(1->4)-[nascent hyaluronan] 3-beta-D-glucuronosyltransferase +ec:2.4.1.213 glucosylglycerol-phosphate synthase; ADP-glucose:sn-glycerol-3-phosphate 2-beta-D-glucosyltransferase (incorrect) +ec:2.4.1.214 glycoprotein 3-alpha-L-fucosyltransferase; GDP-L-Fuc:N-acetyl-beta-D-glucosaminide alpha1,3-fucosyltransferase; GDP-L-Fuc:Asn-linked GlcNAc alpha1,3-fucosyltransferase; GDP-fucose:beta-N-acetylglucosamine (Fuc to (Fucalpha1->6GlcNAc)-Asn-peptide) alpha1->3-fucosyltransferase; GDP-L-fucose:glycoprotein (L-fucose to asparagine-linked N-acetylglucosamine of 4-N-{N-acetyl-beta-D-glucosaminyl-(1->2)-alpha-D-mannosyl-(1->3)-[N-acetyl-beta-D-glucosaminyl-(1->2)-alpha-D-mannosyl-(1->6)]-beta-D-mannosyl-(1->4)-N-acetyl-beta-D-glucosaminyl-(1->4)-N-acetyl-beta-D-glucosaminyl}asparagine) 3-alpha-L-fucosyl-transferase; GDP-L-fucose:glycoprotein (L-fucose to asparagine-linked N-acetylglucosamine of N4-{N-acetyl-beta-D-glucosaminyl-(1->2)-alpha-D-mannosyl-(1->3)-[N-acetyl-beta-D-glucosaminyl-(1->2)-alpha-D-mannosyl-(1->6)]-beta-D-mannosyl-(1->4)-N-acetyl-beta-D-glucosaminyl-(1->4)-N-acetyl-beta-D-glucosaminyl}asparagine) 3-alpha-L-fucosyl-transferase; GDP-beta-L-fucose:glycoprotein (L-fucose to asparagine-linked N-acetylglucosamine of N4-{N-acetyl-beta-D-glucosaminyl-(1->2)-alpha-D-mannosyl-(1->3)-[N-acetyl-beta-D-glucosaminyl-(1->2)-alpha-D-mannosyl-(1->6)]-beta-D-mannosyl-(1->4)-N-acetyl-beta-D-glucosaminyl-(1->4)-N-acetyl-beta-D-glucosaminyl}asparagine) 3-alpha-L-fucosyl-transferase +ec:2.4.1.215 cis-zeatin O-beta-D-glucosyltransferase +ec:2.4.1.216 trehalose 6-phosphate phosphorylase; trehalose 6-phosphate:phosphate beta-D-glucosyltransferase +ec:2.4.1.217 mannosyl-3-phosphoglycerate synthase; MPG synthase; GDP-mannose:3-phosphoglycerate 3-alpha-D-mannosyltransferase +ec:2.4.1.218 hydroquinone glucosyltransferase; arbutin synthase; hydroquinone:O-glucosyltransferase +ec:2.4.1.219 vomilenine glucosyltransferase; UDPG:vomilenine 21-beta-D-glucosyltransferase +ec:2.4.1.220 indoxyl-UDPG glucosyltransferase; indoxyl-UDPG-glucosyltransferase +ec:2.4.1.221 peptide-O-fucosyltransferase; GDP-L-fucose:polypeptide fucosyltransferase; GDP-fucose protein O-fucosyltransferase; GDP-fucose:polypeptide fucosyltransferase; POFUT1 (gene name); POFUT2 (gene name) +ec:2.4.1.222 O-fucosylpeptide 3-beta-N-acetylglucosaminyltransferase; O-fucosylpeptide beta-1,3-N-acetylglucosaminyltransferase; fringe; UDP-D-GlcNAc:O-L-fucosylpeptide 3-beta-N-acetyl-D-glucosaminyltransferase +ec:2.4.1.223 glucuronosyl-galactosyl-proteoglycan 4-alpha-N-acetylglucosaminyltransferase; alpha-N-acetylglucosaminyltransferase I; alpha1,4-N-acetylglucosaminyltransferase; glucuronosylgalactosyl-proteoglycan 4-alpha-N-acetylglucosaminyltransferase; UDP-N-acetyl-D-glucosamine:beta-D-glucuronosyl-(1->3)-beta-D-galactosyl-(1->3)-beta-D-galactosyl-(1->4)-beta-D-xylosyl-proteoglycan 4IV-alpha-N-acetyl-D-glucosaminyltransferase; glucuronyl-galactosyl-proteoglycan 4-alpha-N-acetylglucosaminyltransferase +ec:2.4.1.224 glucuronosyl-N-acetylglucosaminyl-proteoglycan 4-alpha-N-acetylglucosaminyltransferase; alpha-N-acetylglucosaminyltransferase II glucuronyl-N-acetylglucosaminylproteoglycan alpha-1,4-N-acetylglucosaminyltransferase +ec:2.4.1.225 N-acetylglucosaminyl-proteoglycan 4-beta-glucuronosyltransferase; N-acetylglucosaminylproteoglycan beta-1,4-glucuronyltransferase; heparan glucuronyltransferase II +ec:2.4.1.226 N-acetylgalactosaminyl-proteoglycan 3-beta-glucuronosyltransferase; chondroitin glucuronyltransferase II; alpha-D-glucuronate:N-acetyl-beta-D-galactosaminyl-(1->4)-beta-D-glucuronosyl-proteoglycan 3-beta-glucuronosyltransferase; UDP-alpha-D-glucuronate:N-acetyl-beta-D-galactosaminyl-(1->4)-beta-D-glucuronosyl-proteoglycan 3-beta-glucuronosyltransferase +ec:2.4.1.227 undecaprenyldiphospho-muramoylpentapeptide beta-N-acetylglucosaminyltransferase; MurG transferase; UDP-N-D-glucosamine:N-acetyl-alpha-D-muramyl(oyl-L-Ala-gamma-D-Glu-L-Lys-D-Ala-D-Ala)-diphosphoundecaprenol beta-1,4-N-acetylglucosaminlytransferase; UDP-N-acetyl-D-glucosamine:N-acetyl-alpha-D-muramyl(oyl-L-Ala-gamma-D-Glu-L-Lys-D-Ala-D-Ala)-diphosphoundecaprenol 4-beta-N-acetylglucosaminlytransferase +ec:2.4.1.228 lactosylceramide 4-alpha-galactosyltransferase; Galbeta1-4Glcbeta1-Cer alpha1,4-galactosyltransferase; globotriaosylceramide/CD77 synthase; histo-blood group Pk UDP-galactose; UDP-galactose:lactosylceramide 4II-alpha-D-galactosyltransferase; UDP-galactose:beta-D-galactosyl-(1->4)-D-glucosyl(1<->1)ceramide 4II-alpha-D-galactosyltransferase; UDP-galactose:beta-D-galactosyl-(1->4)-D-glucosyl-(1<->1)-ceramide 4II-alpha-D-galactosyltransferase +ec:2.4.1.229 [Skp1-protein]-hydroxyproline N-acetylglucosaminyltransferase; Skp1-HyPro GlcNAc-transferase; UDP-N-acetylglucosamine (GlcNAc):hydroxyproline polypeptide GlcNAc-transferase; UDP-GlcNAc:Skp1-hydroxyproline GlcNAc-transferase; UDP-GlcNAc:hydroxyproline polypeptide GlcNAc-transferase; UDP-N-acetyl-D-glucosamine:[Skp1-protein]-hydroxyproline N-acetyl-D-glucosaminyl-transferase +ec:2.4.1.230 kojibiose phosphorylase +ec:2.4.1.231 alpha,alpha-trehalose phosphorylase (configuration-retaining); trehalose phosphorylase[ambiguous] +ec:2.4.1.232 initiation-specific alpha-1,6-mannosyltransferase; alpha-1,6-mannosyltransferase; GDP-mannose:oligosaccharide 1,6-alpha-D-mannosyltransferase; GDP-mannose:glycolipid 1,6-alpha-D-mannosyltransferase; glycolipid 6-alpha-mannosyltransferase; GDP-mannose:oligosaccharide 1,6-alpha-D-mannosyltransferase +ec:2.4.1.233 Deleted entry +ec:2.4.1.234 kaempferol 3-O-galactosyltransferase; F3GalTase; UDP-galactose:kaempferol 3-O-beta-D-galactosyltransferase +ec:2.4.1.235 Deleted entry +ec:2.4.1.236 flavanone 7-O-glucoside 2''-O-beta-L-rhamnosyltransferase; UDP-rhamnose:flavanone-7-O-glucoside-2''-O-rhamnosyltransferase; 1->2 UDP-rhamnosyltransferase; UDP-L-rhamnose:flavanone-7-O-glucoside 2''-O-beta-L-rhamnosyltransferase +ec:2.4.1.237 flavonol 7-O-beta-glucosyltransferase; UDP-glucose:flavonol 7-O-glucosyltransferase +ec:2.4.1.238 delphinidin 3,5-di-O-glucoside 3'-O-glucosyltransferase; UDP-glucose:anthocyanin 3'-O-glucosyltransferase; 3'GT +ec:2.4.1.239 flavonol-3-O-glucoside glucosyltransferase; UDP-glucose:flavonol-3-O-glucoside 2''-O-beta-D-glucosyltransferase +ec:2.4.1.240 flavonol-3-O-glycoside glucosyltransferase +ec:2.4.1.241 digalactosyldiacylglycerol synthase; DGD1; DGD2; DGDG synthase (ambiguous); UDP-galactose-dependent DGDG synthase; UDP-galactose-dependent digalactosyldiacylglycerol synthase; UDP-galactose:MGDG galactosyltransferase; UDP-galactose:3-(beta-D-galactosyl)-1,2-diacyl-sn-glycerol 6-alpha-galactosyltransferase +ec:2.4.1.242 NDP-glucose---starch glucosyltransferase; granule-bound starch synthase; starch synthase II (ambiguous); waxy protein; starch granule-bound nucleoside diphosphate glucose-starch glucosyltransferase; granule-bound starch synthase I; GBSSI; granule-bound starch synthase II; GBSSII; GBSS; NDPglucose-starch glucosyltransferase +ec:2.4.1.243 6G-fructosyltransferase; fructan:fructan 6G-fructosyltransferase; 1F(1-beta-D-fructofuranosyl)m sucrose:1F(1-beta-D-fructofuranosyl)nsucrose 6G-fructosyltransferase; 6G-FFT; 6G-FT; 6G-fructotransferase +ec:2.4.1.244 N-acetyl-beta-glucosaminyl-glycoprotein 4-beta-N-acetylgalactosaminyltransferase; beta1,4-N-acetylgalactosaminyltransferase III; beta4GalNAc-T3; beta1,4-N-acetylgalactosaminyltransferase IV; beta4GalNAc-T4; UDP-N-acetyl-D-galactosamine:N-acetyl-D-glucosaminyl-group beta-1,4-N-acetylgalactosaminyltransferase; UDP-N-acetyl-D-galactosamine:N-acetyl-beta-D-glucosaminyl-group 4-beta-N-acetylgalactosaminyltransferase +ec:2.4.1.245 alpha,alpha-trehalose synthase; trehalose synthase; trehalose synthetase; UDP-glucose:glucose 1-glucosyltransferase; TreT; PhGT; ADP-glucose:D-glucose 1-alpha-D-glucosyltransferase +ec:2.4.1.246 mannosylfructose-phosphate synthase; mannosylfructose-6-phosphate synthase; MFPS +ec:2.4.1.247 beta-D-galactosyl-(1->4)-L-rhamnose phosphorylase; D-galactosyl-beta1->4-L-rhamnose phosphorylase; GalRhaP +ec:2.4.1.248 cycloisomaltooligosaccharide glucanotransferase +ec:2.4.1.249 delphinidin 3',5'-O-glucosyltransferase; UDP-glucose:anthocyanin 3',5'-O-glucosyltransferase; UA3'5'GZ +ec:2.4.1.250 D-inositol-3-phosphate glycosyltransferase; mycothiol glycosyltransferases; MshA; UDP-N-acetyl-D-glucosamine:1D-myo-inositol 3-phosphate alpha-D-glycosyltransferase +ec:2.4.1.251 GlcA-beta-(1->2)-D-Man-alpha-(1->3)-D-Glc-beta-(1->4)-D-Glc-alpha-1-diphospho-ditrans,octacis-undecaprenol 4-beta-mannosyltransferase; GumI +ec:2.4.1.252 GDP-mannose:cellobiosyl-diphosphopolyprenol alpha-mannosyltransferase; GumH; AceA; alpha1,3-mannosyltransferase AceA +ec:2.4.1.253 baicalein 7-O-glucuronosyltransferase; UBGAT +ec:2.4.1.254 cyanidin-3-O-glucoside 2''-O-glucuronosyltransferase; BpUGT94B1; UDP-glucuronic acid:anthocyanin glucuronosyltransferase; UDP-glucuronic acid:anthocyanidin 3-glucoside 2'-O-beta-glucuronosyltransferase; BpUGAT; UDP-D-glucuronate:cyanidin-3-O-beta-glucoside 2-O-beta-glucuronosyltransferase +ec:2.4.1.255 protein O-GlcNAc transferase; O-GlcNAc transferase; OGTase; O-linked N-acetylglucosaminyltransferase; uridine diphospho-N-acetylglucosamine:polypeptide beta-N-acetylglucosaminyltransferase; protein O-linked beta-N-acetylglucosamine transferase +ec:2.4.1.256 dolichyl-P-Glc:Glc2Man9GlcNAc2-PP-dolichol alpha-1,2-glucosyltransferase; ALG10; Dol-P-Glc:Glc2Man9GlcNAc2-PP-Dol alpha-1,2-glucosyltransferase; dolichyl beta-D-glucosyl phosphate:D-Glc-alpha-(1->3)-D-Glc-alpha-(1->3)-D-Man-alpha-(1->2)-D-Man-alpha-(1->2)-D-Man-alpha-(1->3)-[D-Man-alpha-(1->2)-D-Man-alpha-(1->3)-[D-Man-alpha-(1->2)-D-Man-alpha-(1->6)]-D-Man-alpha-(1->6)]-D-Man-beta-(1->4)-D-GlcNAc-beta-(1->4)-D-GlcNAc-diphosphodolichol 2-alpha-D-glucosyltransferase +ec:2.4.1.257 GDP-Man:Man2GlcNAc2-PP-dolichol alpha-1,6-mannosyltransferase; GDP-Man:Man2GlcNAc2-PP-Dol alpha-1,6-mannosyltransferase; Alg2 mannosyltransferase (ambiguous); ALG2 (gene name, ambiguous); GDP-Man:Man1GlcNAc2-PP-dolichol mannosyltransferase (ambiguous); GDP-D-mannose:D-Man-alpha-(1->3)-D-Man-beta-(1->4)-D-GlcNAc-beta-(1->4)-D-GlcNAc-diphosphodolichol alpha-6-mannosyltransferase +ec:2.4.1.258 dolichyl-P-Man:Man5GlcNAc2-PP-dolichol alpha-1,3-mannosyltransferase; Man5GlcNAc2-PP-Dol mannosyltransferase; ALG3; dolichyl-P-Man:Man(5)GlcNAc(2)-PP-dolichyl mannosyltransferase; Not56-like protein; Alg3 alpha-1,3-mannosyl transferase; Dol-P-Man:Man5GlcNAc2-PP-Dol alpha-1,3-mannosyltransferase; dolichyl beta-D-mannosyl phosphate:D-Man-alpha-(1->2)-D-Man-alpha-(1->2)-D-Man-alpha-(1->3)-[D-Man-alpha-(1->6)]-D-Man-beta-(1->4)-D-GlcNAc-beta-(1->4)-D-GlcNAc-diphosphodolichol alpha-1,3-mannosyltransferase +ec:2.4.1.259 dolichyl-P-Man:Man6GlcNAc2-PP-dolichol alpha-1,2-mannosyltransferase; ALG9; ALG9 alpha1,2 mannosyltransferase; dolichylphosphomannose-dependent ALG9 mannosyltransferase; ALG9 mannosyltransferase; Dol-P-Man:Man6GlcNAc2-PP-Dol alpha-1,2-mannosyltransferase; dolichyl beta-D-mannosyl phosphate:D-Man-alpha-(1->2)-D-Man-alpha-(1->2)-D-Man-alpha-(1->3)-[D-Man-alpha-(1->3)-D-Man-alpha-(1->6)]-D-Man-beta-(1->4)-D-GlcNAc-beta-(1->4)-D-GlcNAc-diphosphodolichol alpha-1,2-mannosyltransferase +ec:2.4.1.260 dolichyl-P-Man:Man7GlcNAc2-PP-dolichol alpha-1,6-mannosyltransferase; ALG12; ALG12 mannosyltransferase; ALG12 alpha1,6mannosyltransferase; dolichyl-P-mannose:Man7GlcNAc2-PP-dolichyl mannosyltransferase; dolichyl-P-Man:Man7GlcNAc2-PP-dolichyl alpha6-mannosyltransferase; EBS4; Dol-P-Man:Man7GlcNAc2-PP-Dol alpha-1,6-mannosyltransferase; dolichyl beta-D-mannosyl phosphate:D-Man-alpha-(1->2)-D-Man-alpha-(1->2)-D-Man-alpha-(1->3)-[D-Man-alpha-(1->2)-D-Man-alpha-(1->3)-D-Man-alpha-(1->6)]-D-Man-beta-(1->4)-D-GlcNAc-beta-(1->4)-D-GlcNAc-diphosphodolichol alpha-1,6-mannosyltransferase +ec:2.4.1.261 dolichyl-P-Man:Man8GlcNAc2-PP-dolichol alpha-1,2-mannosyltransferase; ALG9; ALG9 alpha1,2 mannosyltransferase; dolichylphosphomannose-dependent ALG9 mannosyltransferase; ALG9 mannosyltransferase; Dol-P-Man:Man8GlcNAc2-PP-Dol alpha-1,2-mannosyltransferase; dolichyl beta-D-mannosyl phosphate:D-Man-alpha-(1->2)-D-Man-alpha-(1->2)-D-Man-alpha-(1->3)-[D-Man-alpha-(1->2)-D-Man-alpha-(1->3)-[D-Man-alpha-(1->6)]-D-Man-alpha-(1->6)]-D-Man-beta-(1->4)-D-GlcNAc-beta-(1->4)-D-GlcNAc-diphosphodolichol 2-alpha-D-mannosyltransferase +ec:2.4.1.262 soyasapogenol glucuronosyltransferase; UGASGT; UDP-D-glucuronate:soyasapogenol 3-O-D-glucuronosyltransferase +ec:2.4.1.263 abscisate beta-glucosyltransferase; ABA-glucosyltransferase; ABA-GTase; AOG; UDP-D-glucose:abscisate beta-D-glucosyltransferase +ec:2.4.1.264 D-Man-alpha-(1->3)-D-Glc-beta-(1->4)-D-Glc-alpha-1-diphosphoundecaprenol 2-beta-glucuronosyltransferase; GumK; UDP-glucuronate:D-Man-alpha-(1->3)-D-Glc-beta-(1->4)-D-Glc-alpha-1-diphospho-ditrans,octacis-undecaprenol beta-1,2-glucuronyltransferase; D-Man-alpha-(1->3)-D-Glc-beta-(1->4)-D-Glc-alpha-1-diphosphoundecaprenol 2-beta-glucuronyltransferase +ec:2.4.1.265 dolichyl-P-Glc:Glc1Man9GlcNAc2-PP-dolichol alpha-1,3-glucosyltransferase; ALG8; Dol-P-Glc:Glc1Man9GlcNAc2-PP-Dol alpha-1,3-glucosyltransferase; dolichyl beta-D-glucosyl phosphate:D-Glc-alpha-(1->3)-D-Man-alpha-(1->2)-D-Man-alpha-(1->2)-D-Man-alpha-(1->3)-[D-Man-alpha-(1->2)-D-Man-alpha-(1->3)-[D-Man-alpha-(1->2)-D-Man-alpha-(1->6)]-D-Man-alpha-(1->6)]-D-Man-beta-(1->4)-D-GlcNAc-beta-(1->4)-D-GlcNAc-diphosphodolichol alpha-1,3-glucosyltransferase +ec:2.4.1.266 glucosyl-3-phosphoglycerate synthase; GpgS protein; GPG synthase; glucosylphosphoglycerate synthase +ec:2.4.1.267 dolichyl-P-Glc:Man9GlcNAc2-PP-dolichol alpha-1,3-glucosyltransferase; ALG6; Dol-P-Glc:Man9GlcNAc2-PP-Dol alpha-1,3-glucosyltransferase; dolichyl beta-D-glucosyl phosphate:D-Man-alpha-(1->2)-D-Man-alpha-(1->2)-D-Man-alpha-(1->3)-[D-Man-alpha-(1->2)-D-Man-alpha-(1->3)-[D-Man-alpha-(1->2)-D-Man-alpha-(1->6)]-D-Man-alpha-(1->6)]-D-Man-beta-(1->4)-D-GlcNAc-beta-(1->4)-D-GlcNAc-diphosphodolichol alpha-1,3-glucosyltransferase +ec:2.4.1.268 glucosylglycerate synthase; Ggs (gene name) +ec:2.4.1.269 mannosylglycerate synthase +ec:2.4.1.270 mannosylglucosyl-3-phosphoglycerate synthase; MggA +ec:2.4.1.271 crocetin glucosyltransferase; crocetin GTase; UGTCs2; UGT75L6; UDP-glucose:crocetin glucosyltransferase; UDP-glucose:crocetin 8-O-D-glucosyltransferase +ec:2.4.1.272 soyasapogenol B glucuronide galactosyltransferase; UDP-galactose:SBMG-galactosyltransferase; UGT73P2; GmSGT2 (gene name); UDP-galactose:soyasapogenol B 3-O-glucuronide beta-D-galactosyltransferase +ec:2.4.1.273 soyasaponin III rhamnosyltransferase; UGT91H4; GmSGT3 (gene name); UDP-rhamnose:soyasaponin III rhamnosyltransferase +ec:2.4.1.274 glucosylceramide beta-1,4-galactosyltransferase; lactosylceramide synthase; uridine diphosphate-galactose:glucosyl ceramide beta 1-4 galactosyltransferase; UDP-Gal:glucosylceramide beta1->4galactosyltransferase; GalT-2 (misleading); UDP-galactose:beta-D-glucosyl-(1<->1)-ceramide beta-1,4-galactosyltransferase +ec:2.4.1.275 neolactotriaosylceramide beta-1,4-galactosyltransferase; beta4Gal-T4; UDP-galactose:N-acetyl-beta-D-glucosaminyl-(1->3)-beta-D-galactosyl-(1->4)-beta-D-glucosyl-(1<->1)-ceramide beta-1,4-galactosyltransferase; lactotriaosylceramide beta-1,4-galactosyltransferase (incorrect) +ec:2.4.1.276 zeaxanthin glucosyltransferase; crtX (gene name) +ec:2.4.1.277 10-deoxymethynolide desosaminyltransferase; glycosyltransferase DesVII; DesVII +ec:2.4.1.278 3-alpha-mycarosylerythronolide B desosaminyl transferase; EryCIII; dTDP-3-dimethylamino-4,6-dideoxy-alpha-D-glucopyranose:3-alpha-mycarosylerythronolide B 3-dimethylamino-4,6-dideoxy-alpha-D-glucosyltransferase +ec:2.4.1.279 nigerose phosphorylase; cphy1874 (gene name) +ec:2.4.1.280 N,N'-diacetylchitobiose phosphorylase; chbP (gene name) +ec:2.4.1.281 4-O-beta-D-mannosyl-D-glucose phosphorylase; mannosylglucose phosphorylase +ec:2.4.1.282 3-O-alpha-D-glucosyl-L-rhamnose phosphorylase; cphy1019 (gene name) +ec:2.4.1.283 2-deoxystreptamine N-acetyl-D-glucosaminyltransferase; btrM (gene name); neoD (gene name); kanF (gene name) +ec:2.4.1.284 2-deoxystreptamine glucosyltransferase; kanF (gene name) +ec:2.4.1.285 UDP-GlcNAc:ribostamycin N-acetylglucosaminyltransferase; neoK (gene name) +ec:2.4.1.286 chalcone 4'-O-glucosyltransferase; 4'CGT +ec:2.4.1.287 rhamnopyranosyl-N-acetylglucosaminyl-diphospho-decaprenol beta-1,4/1,5-galactofuranosyltransferase; arabinogalactan galactofuranosyl transferase 1; GlfT1 +ec:2.4.1.288 galactofuranosylgalactofuranosylrhamnosyl-N-acetylglucosaminyl-diphospho-decaprenol beta-1,5/1,6-galactofuranosyltransferase; GlfT2 +ec:2.4.1.289 N-acetylglucosaminyl-diphospho-decaprenol L-rhamnosyltransferase; WbbL +ec:2.4.1.290 N,N'-diacetylbacillosaminyl-diphospho-undecaprenol alpha-1,3-N-acetylgalactosaminyltransferase; PglA +ec:2.4.1.291 N-acetylgalactosamine-N,N'-diacetylbacillosaminyl-diphospho-undecaprenol 4-alpha-N-acetylgalactosaminyltransferase; PglJ +ec:2.4.1.292 GalNAc-alpha-(1->4)-GalNAc-alpha-(1->3)-diNAcBac-PP-undecaprenol alpha-1,4-N-acetyl-D-galactosaminyltransferase; PglH +ec:2.4.1.293 GalNAc5-diNAcBac-PP-undecaprenol beta-1,3-glucosyltransferase; PglI +ec:2.4.1.294 cyanidin 3-O-galactosyltransferase; UDP-galactose:cyanidin galactosyltransferase +ec:2.4.1.295 anthocyanin 3-O-sambubioside 5-O-glucosyltransferase +ec:2.4.1.296 anthocyanidin 3-O-coumaroylrutinoside 5-O-glucosyltransferase +ec:2.4.1.297 anthocyanidin 3-O-glucoside 2''-O-glucosyltransferase; 3GGT +ec:2.4.1.298 anthocyanidin 3-O-glucoside 5-O-glucosyltransferase; UDP-glucose:anthocyanin 5-O-glucosyltransferase +ec:2.4.1.299 cyanidin 3-O-glucoside 5-O-glucosyltransferase (acyl-glucose); AA5GT +ec:2.4.1.300 cyanidin 3-O-glucoside 7-O-glucosyltransferase (acyl-glucose); AA7GT +ec:2.4.1.301 2'-deamino-2'-hydroxyneamine 1-alpha-D-kanosaminyltransferase; kanE (gene name); kanM2 (gene name) +ec:2.4.1.302 L-demethylnoviosyl transferase; novM (gene name); dTDP-beta-L-noviose:novobiocic acid 7-O-noviosyltransferase; L-noviosyl transferase +ec:2.4.1.303 UDP-Gal:alpha-D-GlcNAc-diphosphoundecaprenol beta-1,3-galactosyltransferase; WbbD; WbbD beta3Gal-transferase; UDP-Gal:GlcNAc-R beta1,3-galactosyltransferase; UDP-Gal:GlcNAcalpha-pyrophosphate-R beta1,3-galactosyltransferase; UDP-Gal:GlcNAc-R galactosyltransferase +ec:2.4.1.304 UDP-Gal:alpha-D-GlcNAc-diphosphoundecaprenol beta-1,4-galactosyltransferase; WfeD; UDP-Gal:GlcNAc-R 1,4-Gal-transferase; UDP-Gal:GlcNAc-pyrophosphate-lipid beta-1,4-galactosyltransferase +ec:2.4.1.305 UDP-Glc:alpha-D-GlcNAc-glucosaminyl-diphosphoundecaprenol beta-1,3-glucosyltransferase; WfaP; WfgD; UDP-Glc:GlcNAc-pyrophosphate-lipid beta-1,3-glucosyltransferase; UDP-Glc:GlcNAc-diphosphate-lipid beta-1,3-glucosyltransferase +ec:2.4.1.306 UDP-GalNAc:alpha-D-GalNAc-diphosphoundecaprenol alpha-1,3-N-acetylgalactosaminyltransferase; WbnH +ec:2.4.1.307 Deleted entry +ec:2.4.1.308 GDP-Fuc:beta-D-Gal-1,3-alpha-D-GalNAc-1,3-alpha-GalNAc-diphosphoundecaprenol alpha-1,2-fucosyltransferase; WbnK +ec:2.4.1.309 UDP-Gal:alpha-L-Fuc-1,2-beta-Gal-1,3-alpha-GalNAc-1,3-alpha-GalNAc-diphosphoundecaprenol alpha-1,3-galactosyltransferase; WbnI +ec:2.4.1.310 vancomycin aglycone glucosyltransferase; GtfB (ambiguous) +ec:2.4.1.311 chloroorienticin B synthase; GtfA +ec:2.4.1.312 protein O-mannose beta-1,4-N-acetylglucosaminyltransferase; GTDC2 (gene name); POMGNT2 +ec:2.4.1.313 protein O-mannose beta-1,3-N-acetylgalactosaminyltransferase; B3GALNT2 +ec:2.4.1.314 ginsenoside Rd glucosyltransferase; UDPG:ginsenoside Rd glucosyltransferase; UDP-glucose:ginsenoside Rd glucosyltransferase; UGRdGT +ec:2.4.1.315 diglucosyl diacylglycerol synthase (1,6-linking); monoglucosyl diacylglycerol (1->6) glucosyltransferase; MGlcDAG (1->6) glucosyltransferase; DGlcDAG synthase (ambiguous); UGT106B1; ypfP (gene name) +ec:2.4.1.316 tylactone mycaminosyltransferase; tylM2 (gene name) +ec:2.4.1.317 O-mycaminosyltylonolide 6-deoxyallosyltransferase; tylN (gene name) +ec:2.4.1.318 demethyllactenocin mycarosyltransferase; tylCV (gene name); tylC5 (gene name) +ec:2.4.1.319 beta-1,4-mannooligosaccharide phosphorylase; RaMP2 +ec:2.4.1.320 1,4-beta-mannosyl-N-acetylglucosamine phosphorylase; BT1033 +ec:2.4.1.321 cellobionic acid phosphorylase +ec:2.4.1.322 devancosaminyl-vancomycin vancosaminetransferase; devancosaminyl-vancomycin TDP-vancosaminyltransferase; GtfD; dTDP-beta-L-vancomycin:desvancosaminyl-vancomycin beta-L-vancosaminetransferase; desvancosaminyl-vancomycin vancosaminetransferase +ec:2.4.1.323 7-deoxyloganetic acid glucosyltransferase; UGT8 +ec:2.4.1.324 7-deoxyloganetin glucosyltransferase; UDPglucose:iridoid glucosyltransferase; UGT6; UGT85A24 +ec:2.4.1.325 TDP-N-acetylfucosamine:lipid II N-acetylfucosaminyltransferase; TDP-Fuc4NAc:lipid II Fuc4NAc-transferase; TDP-Fuc4NAc:lipid II Fuc4NAc transferase; wecF (gene name) +ec:2.4.1.326 aklavinone 7-L-rhodosaminyltransferase; AknS/AknT; aklavinone 7-beta-L-rhodosaminyltransferase; dTDP-beta-L-rhodosamine:aklavinone 7-alpha-L-rhodosaminyltransferase +ec:2.4.1.327 aclacinomycin-T 2-deoxy-L-fucose transferase; AknK +ec:2.4.1.328 erythronolide mycarosyltransferase; EryBV +ec:2.4.1.329 sucrose 6F-phosphate phosphorylase; sucrose 6'-phosphate phosphorylase +ec:2.4.1.330 beta-D-glucosyl crocetin beta-1,6-glucosyltransferase; UGT94E5; UDP-glucose:crocetin glucosyl ester glucosyltransferasee +ec:2.4.1.331 8-demethyltetracenomycin C L-rhamnosyltransferase; elmGT +ec:2.4.1.332 1,2-alpha-glucosylglycerol phosphorylase; 2-O-alpha-D-glucopyranosylglycerol phosphorylase +ec:2.4.1.333 1,2-beta-oligoglucan phosphorylase +ec:2.4.1.334 1,3-alpha-oligoglucan phosphorylase +ec:2.4.1.335 dolichyl N-acetyl-alpha-D-glucosaminyl phosphate 3-beta-D-2,3-diacetamido-2,3-dideoxy-beta-D-glucuronosyltransferase; AglC; UDP-Glc-2,3-diNAcA glycosyltransferase +ec:2.4.1.336 monoglucosyldiacylglycerol synthase; mgdA (gene name) +ec:2.4.1.337 1,2-diacylglycerol 3-alpha-glucosyltransferase; mgs (gene name); UDP-glucose:diacylglycerol glucosyltransferase; UDP-glucose:1,2-diacylglycerol glucosyltransferase; uridine diphosphoglucose-diacylglycerol glucosyltransferase; UDP-glucose-diacylglycerol glucosyltransferase; UDP-glucose:1,2-diacylglycerol 3-D-glucosyltransferase; UDP-glucose:1,2-diacyl-sn-glycerol 3-D-glucosyltransferase; 1,2-diacylglycerol 3-glucosyltransferase (ambiguous) +ec:2.4.1.338 validoxylamine A glucosyltransferase; vldK (gene name); valG (gene name) +ec:2.4.1.339 beta-1,2-mannobiose phosphorylase +ec:2.4.1.340 1,2-beta-oligomannan phosphorylase +ec:2.4.1.341 alpha-1,2-colitosyltransferase; wbgN (gene name) +ec:2.4.1.342 alpha-maltose-1-phosphate synthase; glgM (gene name) +ec:2.4.1.343 UDP-Gal:alpha-D-GlcNAc-diphosphoundecaprenol alpha-1,3-galactosyltransferase; wclR (gene name) +ec:2.4.1.344 type 2 galactoside alpha-(1,2)-fucosyltransferase; blood group H alpha-2-fucosyltransferase (ambiguous); guanosine diphosphofucose-galactoside 2-L-fucosyltransferase (ambiguous); alpha-(1->2)-L-fucosyltransferase (ambiguous); alpha-2-fucosyltransferase (ambiguous); alpha-2-L-fucosyltransferase (ambiguous); blood-group substance H-dependent fucosyltransferase (ambiguous); guanosine diphosphofucose-glycoprotein 2-alpha-fucosyltransferase (ambiguous); guanosine diphosphofucose-lactose fucosyltransferase; GDP fucose-lactose fucosyltransferase; guanosine diphospho-L-fucose-lactose fucosyltransferase; guanosine diphosphofucose-beta-D-galactosyl-alpha-2-L-fucosyltransferase (ambiguous); guanosine diphosphofucose-galactosylacetylglucosaminylgalactosylglucosylceramide alpha-L-fucosyltransferase (ambiguous); guanosine diphosphofucose-glycoprotein 2-alpha-L-fucosyltransferase (ambiguous); H-gene-encoded beta-galactoside alpha(1->2)fucosyltransferase; beta-galactoside alpha(1->2)fucosyltransferase (ambiguous); GDP-L-fucose:lactose fucosyltransferase; GDP-beta-L-fucose:beta-D-galactosyl-R 2-alpha-L-fucosyltransferase (ambiguous); FUT1 (gene name); FUT2 (gene name) +ec:2.4.1.345 phosphatidyl-myo-inositol alpha-mannosyltransferase; mannosyltransferase PimA; PimA; guanosine diphosphomannose-phosphatidyl-inositol alpha-mannosyltransferase (ambiguous) +ec:2.4.1.346 phosphatidyl-myo-inositol dimannoside synthase; mannosyltransferase PimB; PimB; guanosine diphosphomannose-phosphatidyl-inositol alpha-mannosyltransferase (ambiguous) +ec:2.4.1.347 alpha,alpha-trehalose-phosphate synthase (ADP-forming); otsA (gene name); ADP-glucose---glucose-phosphate glucosyltransferase +ec:2.4.1.348 N-acetyl-alpha-D-glucosaminyl-diphospho-ditrans,octacis-undecaprenol 3-alpha-mannosyltransferase; WbdC +ec:2.4.1.349 mannosyl-N-acetyl-alpha-D-glucosaminyl-diphospho-ditrans,octacis-undecaprenol 3-alpha-mannosyltransferase; WbdB +ec:2.4.1.350 mogroside IE synthase; UGT74AC1; mogrol C-3 hydroxyl glycosyltransferase +ec:2.4.1.351 rhamnogalacturonan I rhamnosyltransferase; RRT; RG I rhamnosyltransferase +ec:2.4.1.352 glucosylglycerate phosphorylase +ec:2.4.1.353 sordaricin 6-deoxyaltrosyltransferase; SdnJ +ec:2.4.1.354 (R)-mandelonitrile beta-glucosyltransferase; UGT85A19 (gene name) +ec:2.4.1.355 poly(ribitol-phosphate) beta-N-acetylglucosaminyltransferase; TarS +ec:2.4.1.356 glucosyl-dolichyl phosphate glucuronosyltransferase; aglG (gene name) +ec:2.4.1.357 phlorizin synthase; MdPGT1: P2'GT +ec:2.4.1.358 acylphloroglucinol glucosyltransferase; UGT71K3 +ec:2.4.1.359 glucosylglycerol phosphorylase (configuration-retaining); 2-O-alpha-D-glucosylglycerol phosphorylase (retaining) +ec:2.4.1.360 2-hydroxyflavanone C-glucosyltransferase; OsCGT +ec:2.4.1.361 GDP-mannose:di-myo-inositol-1,3'-phosphate beta-1,2-mannosyltransferase; MDIP synthase +ec:2.4.1.362 alpha-(1->3) branching sucrase; branching sucrase A; BRS-A; brsA (gene name) +ec:2.4.1.363 ginsenoside 20-O-glucosyltransferase; UGT71A27 (gene name) +ec:2.4.1.364 protopanaxadiol-type ginsenoside 3-O-glucosyltransferase; UGT74AE2 (gene name) +ec:2.4.1.365 protopanaxadiol-type ginsenoside-3-O-glucoside 2''-O-glucosyltransferase; UGT94Q2 (gene name) +ec:2.4.1.366 ginsenoside F1 6-O-glucosyltransferase; UGTPg101 (gene name) +ec:2.4.1.367 ginsenoside 6-O-glucosyltransferase; UGTPg100 (gene name) +ec:2.4.1.368 oleanolate 3-O-glucosyltransferase; UGT73C10 (gene name); UGT73C11 (gene name) +ec:2.4.1.369 enterobactin C-glucosyltransferase; iroB (gene name) +ec:2.4.1.370 inositol phosphorylceramide mannosyltransferase; SUR1 (gene name); CSH1 (gene name) +ec:2.4.1.371 polymannosyl GlcNAc-diphospho-ditrans,octacis-undecaprenol 2,3-alpha-mannosylpolymerase; WbdA +ec:2.4.1.372 mutansucrase; gtfJ (gene name) +ec:2.4.1.373 alpha-(1->2) branching sucrase +ec:2.4.1.374 beta-1,2-mannooligosaccharide synthase; MTP1 (gene name); MTP2 (gene name) +ec:2.4.1.375 rhamnogalacturonan I galactosyltransferase +ec:2.4.1.376 EGF-domain serine glucosyltransferase; POGLUT1 (gene name) (ambiguous); rumi (gene name) (ambiguous) +ec:2.4.1.377 dTDP-Rha:alpha-D-Gal-diphosphoundecaprenol alpha-1,3-rhamnosyltransferase; wbaN (gene name); rfbN (gene name) +ec:2.4.1.378 GDP-mannose:alpha-L-Rha-(1->3)-alpha-D-Gal-PP-Und alpha-1,4-mannosyltransferase; wbaU (gene name); rfbU (gene name) +ec:2.4.1.379 GDP-Man:alpha-D-Gal-diphosphoundecaprenol alpha-1,3-mannosyltransferase; wbaZ (gene name); rfbZ (gene name) +ec:2.4.1.380 GDP-Man:alpha-D-Man-(1->3)-alpha-D-Gal diphosphoundecaprenol alpha-1,2-mannosyltransferase; wbaW (gene name); rfbW (gene name) +ec:2.4.1.381 dTDP-Rha:alpha-D-Man-(1->3)-alpha-D-Gal diphosphoundecaprenol alpha-1,2-rhamnosyltransferase; wbaQ (gene name); rfbQ (gene name) +ec:2.4.1.382 CDP-abequose:alpha-L-Rha2OAc-(1->2)-alpha-D-Man-(1->2)-alpha-D-Man-(1->3)-alpha-D-Gal-PP-Und alpha-1,3-abequosyltransferase; wbaR (gene name); rfbR (gene name) +ec:2.4.1.383 GDP-Man:alpha-L-Rha-(1->3)-alpha-D-Gal-PP-Und beta-1,4-mannosyltransferase; wbaO (gene name); rfbO (gene name) +ec:2.4.1.384 NDP-glycosyltransferase; yjiC (gene name) +ec:2.4.1.385 sterol 27-beta-glucosyltransferase +ec:2.4.1.386 GlcNAc-beta-1,3-Gal beta-1,6-N-acetylglucosaminyltransferase (distally acting); UDP-GlcNAc:GlcNAcbeta1-3Gal(-R) beta1-6(GlcNAc to Gal) N-acetylglucosaminyltransferase; dIGnT; C2GnT2 (misleading) +ec:2.4.1.387 isomaltosyltransferase +ec:2.4.1.388 glucosylgalactose phosphorylase; 4-O-beta-D-glucosyl-D-galactose phosphorylase +ec:2.4.1.389 solabiose phosphorylase +ec:2.4.2.1 purine-nucleoside phosphorylase; inosine phosphorylase; PNPase (ambiguous); PUNPI; PUNPII; inosine-guanosine phosphorylase; purine deoxynucleoside phosphorylase; purine deoxyribonucleoside phosphorylase; purine nucleoside phosphorylase; purine ribonucleoside phosphorylase +ec:2.4.2.2 pyrimidine-nucleoside phosphorylase; Py-NPase; pdp (gene name) +ec:2.4.2.3 uridine phosphorylase; pyrimidine phosphorylase; UrdPase; UPH; UPase +ec:2.4.2.4 thymidine phosphorylase; pyrimidine phosphorylase; thymidine-orthophosphate deoxyribosyltransferase; animal growth regulators, blood platelet-derived endothelial cell growth factors; blood platelet-derived endothelial cell growth factor; deoxythymidine phosphorylase; gliostatins; pyrimidine deoxynucleoside phosphorylase; thymidine:phosphate deoxy-D-ribosyltransferase +ec:2.4.2.5 nucleoside ribosyltransferase; nucleoside N-ribosyltransferase +ec:2.4.2.6 nucleoside deoxyribosyltransferase; purine(pyrimidine) nucleoside:purine(pyrimidine) deoxyribosyl transferase; deoxyribose transferase; nucleoside trans-N-deoxyribosylase; trans-deoxyribosylase; trans-N-deoxyribosylase; trans-N-glycosidase; nucleoside deoxyribosyltransferase I (purine nucleoside:purine deoxyribosyltransferase: strictly specific for transfer between purine bases); nucleoside deoxyribosyltransferase II [purine(pyrimidine) nucleoside:purine(pyrimidine) deoxyribosyltransferase] +ec:2.4.2.7 adenine phosphoribosyltransferase; AMP pyrophosphorylase; transphosphoribosidase; APRT; AMP-pyrophosphate phosphoribosyltransferase; adenine phosphoribosylpyrophosphate transferase; adenosine phosphoribosyltransferase; adenylate pyrophosphorylase; adenylic pyrophosphorylase +ec:2.4.2.8 hypoxanthine phosphoribosyltransferase; IMP pyrophosphorylase; transphosphoribosidase; hypoxanthine---guanine phosphoribosyltransferase; guanine phosphoribosyltransferase; GPRT; HPRT; guanosine 5'-phosphate pyrophosphorylase; IMP-GMP pyrophosphorylase; HGPRTase; 6-hydroxypurine phosphoribosyltransferase; 6-mercaptopurine phosphoribosyltransferase; GMP pyrophosphorylase; guanine-hypoxanthine phosphoribosyltransferase; guanosine phosphoribosyltransferase; guanylate pyrophosphorylase; guanylic pyrophosphorylase; inosinate pyrophosphorylase; inosine 5'-phosphate pyrophosphorylase; inosinic acid pyrophosphorylase; inosinic pyrophosphorylase; purine-6-thiol phosphoribosyltransferase +ec:2.4.2.9 uracil phosphoribosyltransferase; UMP pyrophosphorylase; UPRTase; UMP:pyrophosphate phosphoribosyltransferase; uridine 5'-phosphate pyrophosphorylase; uridine monophosphate pyrophosphorylase; uridylate pyrophosphorylase; uridylic pyrophosphorylase +ec:2.4.2.10 orotate phosphoribosyltransferase; orotidylic acid phosphorylase; orotidine-5'-phosphate pyrophosphorylase; OPRTase; orotate phosphoribosyl pyrophosphate transferase; orotic acid phosphoribosyltransferase; orotidine 5'-monophosphate pyrophosphorylase; orotidine monophosphate pyrophosphorylase; orotidine phosphoribosyltransferase; orotidylate phosphoribosyltransferase; orotidylate pyrophosphorylase; orotidylic acid pyrophosphorylase; orotidylic phosphorylase; orotidylic pyrophosphorylase +ec:2.4.2.11 Transferred to 6.3.4.21 +ec:2.4.2.12 nicotinamide phosphoribosyltransferase; NMN pyrophosphorylase; nicotinamide mononucleotide pyrophosphorylase; nicotinamide mononucleotide synthetase; NMN synthetase; nicotinamide-nucleotide:diphosphate phospho-alpha-D-ribosyltransferase +ec:2.4.2.13 Transferred to 2.5.1.6 +ec:2.4.2.14 amidophosphoribosyltransferase; phosphoribosyldiphosphate 5-amidotransferase; glutamine phosphoribosyldiphosphate amidotransferase; alpha-5-phosphoribosyl-1-pyrophosphate amidotransferase; 5'-phosphoribosylpyrophosphate amidotransferase; 5-phosphoribosyl-1-pyrophosphate amidotransferase; 5-phosphororibosyl-1-pyrophosphate amidotransferase; glutamine 5-phosphoribosylpyrophosphate amidotransferase; glutamine ribosylpyrophosphate 5-phosphate amidotransferase; phosphoribose pyrophosphate amidotransferase; phosphoribosyl pyrophosphate amidotransferase; phosphoribosylpyrophosphate glutamyl amidotransferase; 5-phosphoribosylamine:diphosphate phospho-alpha-D-ribosyltransferase (glutamate-amidating) +ec:2.4.2.15 guanosine phosphorylase +ec:2.4.2.16 urate-ribonucleoside phosphorylase; UAR phosphorylase; urate-ribonucleotide:phosphate D-ribosyltransferase (incorrect); urate-ribonucleotide:phosphate alpha-D-ribosyltransferase (incorrect); urate-ribonucleotide phosphorylase (incorrect) +ec:2.4.2.17 ATP phosphoribosyltransferase; phosphoribosyl-ATP pyrophosphorylase; adenosine triphosphate phosphoribosyltransferase; phosphoribosyladenosine triphosphate:pyrophosphate phosphoribosyltransferase; phosphoribosyl ATP synthetase; phosphoribosyl ATP:pyrophosphate phosphoribosyltransferase; phosphoribosyl-ATP:pyrophosphate-phosphoribosyl phosphotransferase; phosphoribosyladenosine triphosphate pyrophosphorylase; phosphoribosyladenosine triphosphate synthetase; 1-(5-phospho-D-ribosyl)-ATP:diphosphate phospho-alpha-D-ribosyl-transferase +ec:2.4.2.18 anthranilate phosphoribosyltransferase; phosphoribosyl-anthranilate pyrophosphorylase; PRT; anthranilate 5-phosphoribosylpyrophosphate phosphoribosyltransferase; anthranilate phosphoribosylpyrophosphate phosphoribosyltransferase; phosphoribosylanthranilate pyrophosphorylase; phosphoribosylanthranilate transferase; anthranilate-PP-ribose-P phosphoribosyltransferase +ec:2.4.2.19 nicotinate-nucleotide diphosphorylase (carboxylating); quinolinate phosphoribosyltransferase (decarboxylating); quinolinic acid phosphoribosyltransferase; QAPRTase; NAD+ pyrophosphorylase; nicotinate mononucleotide pyrophosphorylase (carboxylating); quinolinic phosphoribosyltransferase +ec:2.4.2.20 dioxotetrahydropyrimidine phosphoribosyltransferase; dioxotetrahydropyrimidine-ribonucleotide pyrophosphorylase; dioxotetrahydropyrimidine phosphoribosyl transferase; dioxotetrahydropyrimidine ribonucleotide pyrophosphorylase; 2,4-dioxotetrahydropyrimidine-nucleotide:diphosphate phospho-alpha-D-ribosyltransferase +ec:2.4.2.21 nicotinate-nucleotide---dimethylbenzimidazole phosphoribosyltransferase; nicotinate mononucleotide-dimethylbenzimidazole phosphoribosyltransferase; nicotinate ribonucleotide:benzimidazole (adenine) phosphoribosyltransferase; nicotinate-nucleotide:dimethylbenzimidazole phospho-D-ribosyltransferase; CobT; nicotinate mononucleotide (NaMN):5,6-dimethylbenzimidazole phosphoribosyltransferase +ec:2.4.2.22 xanthine phosphoribosyltransferase; Xan phosphoribosyltransferase; xanthosine 5'-phosphate pyrophosphorylase; xanthylate pyrophosphorylase; xanthylic pyrophosphorylase; XMP pyrophosphorylase; 5-phospho-alpha-D-ribose-1-diphosphate:xanthine phospho-D-ribosyltransferase; 9-(5-phospho-beta-D-ribosyl)xanthine:diphosphate 5-phospho-alpha-D-ribosyltransferase +ec:2.4.2.23 Transferred to 2.4.2.2 and 2.4.2.3 and 2.4.2.4 +ec:2.4.2.24 1,4-beta-D-xylan synthase; uridine diphosphoxylose-1,4-beta-xylan xylosyltransferase; 1,4-beta-xylan synthase; xylan synthase; xylan synthetase; UDP-D-xylose:1,4-beta-D-xylan 4-beta-D-xylosyltransferase +ec:2.4.2.25 flavone apiosyltransferase; uridine diphosphoapiose-flavone apiosyltransferase; UDP-apiose:7-O-(beta-D-glucosyl)-flavone apiosyltransferase +ec:2.4.2.26 protein xylosyltransferase; UDP-D-xylose:core protein beta-D-xylosyltransferase; UDP-D-xylose:core protein xylosyltransferase; UDP-D-xylose:proteoglycan core protein beta-D-xylosyltransferase; UDP-xylose-core protein beta-D-xylosyltransferase; uridine diphosphoxylose-core protein beta-xylosyltransferase; uridine diphosphoxylose-protein xylosyltransferase; UDP-D-xylose:protein beta-D-xylosyltransferase +ec:2.4.2.27 dTDP-dihydrostreptose---streptidine-6-phosphate dihydrostreptosyltransferase; thymidine diphosphodihydrostreptose-streptidine 6-phosphate dihydrostreptosyltransferase +ec:2.4.2.28 S-methyl-5'-thioadenosine phosphorylase; 5'-deoxy-5'-methylthioadenosine phosphorylase; MTA phosphorylase; MeSAdo phosphorylase; MeSAdo/Ado phosphorylase; methylthioadenosine phosphorylase; methylthioadenosine nucleoside phosphorylase; 5'-methylthioadenosine:phosphate methylthio-D-ribosyl-transferase; S-methyl-5-thioadenosine phosphorylase; S-methyl-5-thioadenosine:phosphate S-methyl-5-thio-alpha-D-ribosyl-transferase +ec:2.4.2.29 tRNA-guanosine34 preQ1 transglycosylase; guanine insertion enzyme (ambiguous); tRNA transglycosylase (ambiguous); Q-insertase (ambiguous); transfer ribonucleate glycosyltransferase (ambiguous); tRNA guanine34 transglycosidase (ambiguous); TGT (ambiguous); transfer ribonucleic acid guanine34 transglycosylase (ambiguous) +ec:2.4.2.30 NAD+ ADP-ribosyltransferase; poly(ADP-ribose) synthase; ADP-ribosyltransferase (polymerizing); NAD ADP-ribosyltransferase; PARP; PARP-1; NAD+:poly(adenine-diphosphate-D-ribosyl)-acceptor ADP-D-ribosyl-transferase (incorrect); NAD+:poly(adenosine-diphosphate-D-ribosyl)-acceptor ADP-D-ribosyl-transferase +ec:2.4.2.31 NAD+---protein-arginine ADP-ribosyltransferase; ADP-ribosyltransferase; mono(ADP-ribosyl)transferase; NAD+:L-arginine ADP-D-ribosyltransferase; NAD(P)+-arginine ADP-ribosyltransferase; NAD(P)+:L-arginine ADP-D-ribosyltransferase; mono-ADP-ribosyltransferase; ART; ART1; ART2; ART3; ART4; ART5; ART6; ART7; NAD(P)+---protein-arginine ADP-ribosyltransferase; NAD(P)+:protein-L-arginine ADP-D-ribosyltransferase +ec:2.4.2.32 dolichyl-phosphate D-xylosyltransferase +ec:2.4.2.33 dolichyl-xylosyl-phosphate---protein xylosyltransferase +ec:2.4.2.34 indolylacetylinositol arabinosyltransferase; arabinosylindolylacetylinositol synthase; UDP-L-arabinose:indol-3-ylacetyl-myo-inositol L-arabinosyltransferase; UDP-L-arabinose:(indol-3-yl)acetyl-myo-inositol L-arabinosyltransferase +ec:2.4.2.35 flavonol-3-O-glycoside xylosyltransferase; UDP-D-xylose:flavonol-3-O-glycoside 2''-O-beta-D-xylosyltransferase +ec:2.4.2.36 NAD+---diphthamide ADP-ribosyltransferase; ADP-ribosyltransferase; mono(ADPribosyl)transferase; NAD---diphthamide ADP-ribosyltransferase; NAD+:peptide-diphthamide N-(ADP-D-ribosyl)transferase +ec:2.4.2.37 NAD+---dinitrogen-reductase ADP-D-ribosyltransferase; NAD-azoferredoxin (ADPribose)transferase; NAD-dinitrogen-reductase ADP-D-ribosyltransferase; draT (gene name) +ec:2.4.2.38 glycoprotein 2-beta-D-xylosyltransferase; beta1,2-xylosyltransferase; UDP-D-xylose:glycoprotein (D-xylose to the 3,6-disubstituted mannose of 4-N-{N-acetyl-beta-D-glucosaminyl-(1->2)-alpha-D-mannosyl-(1->3)-[N-acetyl-beta-D-glucosaminyl-(1->2)-alpha-D-mannosyl-(1->6)]-beta-D-mannosyl-(1->4)-N-acetyl-beta-D-glucosaminyl-(1->4)-N-acetyl-beta-D-glucosaminyl}asparagine) 2-beta-D-xylosyltransferase; UDP-D-xylose:glycoprotein (D-xylose to the 3,6-disubstituted mannose of N4-{N-acetyl-beta-D-glucosaminyl-(1->2)-alpha-D-mannosyl-(1->3)-[N-acetyl-beta-D-glucosaminyl-(1->2)-alpha-D-mannosyl-(1->6)]-beta-D-mannosyl-(1->4)-N-acetyl-beta-D-glucosaminyl-(1->4)-N-acetyl-beta-D-glucosaminyl}asparagine) 2-beta-D-xylosyltransferase +ec:2.4.2.39 xyloglucan 6-xylosyltransferase; uridine diphosphoxylose-xyloglucan 6alpha-xylosyltransferase; xyloglucan 6-alpha-D-xylosyltransferase; UDP-D-xylose:xyloglucan 1,6-alpha-D-xylosyltransferase +ec:2.4.2.40 zeatin O-beta-D-xylosyltransferase; uridine diphosphoxylose-zeatin xylosyltransferase; zeatin O-xylosyltransferase +ec:2.4.2.41 xylogalacturonan beta-1,3-xylosyltransferase; xylogalacturonan xylosyltransferase; XGA xylosyltransferase +ec:2.4.2.42 UDP-D-xylose:beta-D-glucoside alpha-1,3-D-xylosyltransferase; beta-glucoside alpha-1,3-xylosyltransferase; UDP-alpha-D-xylose:beta-D-glucoside 3-alpha-D-xylosyltransferase; GXYLT1 (gene name); GXYLT2 (gene name) +ec:2.4.2.43 lipid IVA 4-amino-4-deoxy-L-arabinosyltransferase; undecaprenyl phosphate-alpha-L-Ara4N transferase; 4-amino-4-deoxy-L-arabinose lipid A transferase; polymyxin resistance protein PmrK; arnT (gene name) +ec:2.4.2.44 S-methyl-5'-thioinosine phosphorylase; MTIP; MTI phosphorylase; methylthioinosine phosphorylase +ec:2.4.2.45 decaprenyl-phosphate phosphoribosyltransferase; 5-phospho-alpha-D-ribose-1-diphosphate:decaprenyl-phosphate 5-phosphoribosyltransferase; 5-phospho-alpha-D-ribose 1-pyrophosphate:decaprenyl phosphate 5-phosphoribosyltransferase; DPPR synthase; Rv3806 +ec:2.4.2.46 galactan 5-O-arabinofuranosyltransferase; AftA; Rv3792 +ec:2.4.2.47 arabinofuranan 3-O-arabinosyltransferase; AftC +ec:2.4.2.48 tRNA-guanine15 transglycosylase; tRNA transglycosylase (ambiguous); transfer ribonucleate glycosyltransferase (ambiguous); tRNA guanine15 transglycosidase; TGT (ambiguous); transfer ribonucleic acid guanine15 transglycosylase +ec:2.4.2.49 neamine phosphoribosyltransferase; btrL (gene name); neoM (gene name) +ec:2.4.2.50 cyanidin 3-O-galactoside 2''-O-xylosyltransferase; CGXT +ec:2.4.2.51 anthocyanidin 3-O-glucoside 2'''-O-xylosyltransferase; uridine 5'-diphosphate-xylose:anthocyanidin 3-O-glucose-xylosyltransferase; UGT79B1 +ec:2.4.2.52 triphosphoribosyl-dephospho-CoA synthase; 2'-(5''-triphosphoribosyl)-3-dephospho-CoA synthase; ATP:dephospho-CoA 5-triphosphoribosyl transferase; CitG; ATP:dephospho-CoA 5'-triphosphoribosyl transferase; MdcB; ATP:3-dephospho-CoA 5''-triphosphoribosyltransferase; MadG +ec:2.4.2.53 undecaprenyl-phosphate 4-deoxy-4-formamido-L-arabinose transferase; undecaprenyl-phosphate Ara4FN transferase; Ara4FN transferase; polymyxin resistance protein PmrF; UDP-4-amino-4-deoxy-alpha-L-arabinose:ditrans,polycis-undecaprenyl phosphate 4-amino-4-deoxy-alpha-L-arabinosyltransferase +ec:2.4.2.54 beta-ribofuranosylphenol 5'-phosphate synthase; beta-RFAP synthase (incorrect); beta-RFA-P synthase (incorrect); AF2089 (gene name); MJ1427 (gene name); beta-ribofuranosylhydroxybenzene 5'-phosphate synthase; 4-(beta-D-ribofuranosyl)aminobenzene 5'-phosphate synthase (incorrect); beta-ribofuranosylaminobenzene 5'-phosphate synthase (incorrect); 5-phospho-alpha-D-ribose 1-diphosphate:4-aminobenzoate 5-phospho-beta-D-ribofuranosyltransferase (decarboxylating) (incorrect) +ec:2.4.2.55 nicotinate D-ribonucleotide:phenol phospho-D-ribosyltransferase; ArsAB +ec:2.4.2.56 kaempferol 3-O-xylosyltransferase; F3XT; UDP-D-xylose:flavonol 3-O-xylosyltransferase; flavonol 3-O-xylosyltransferase +ec:2.4.2.57 AMP phosphorylase; AMPpase; nucleoside monophosphate phosphorylase; deoA (gene name) +ec:2.4.2.58 hydroxyproline O-arabinosyltransferase; HPAT +ec:2.4.2.59 sulfide-dependent adenosine diphosphate thiazole synthase; Thi4 (ambiguous) +ec:2.4.2.60 cysteine-dependent adenosine diphosphate thiazole synthase; THI4 (gene name) (ambiguous); THI1 (gene name); ADP-thiazole synthase +ec:2.4.2.61 alpha-dystroglycan beta1,4-xylosyltransferase; TMEM5 (gene name) +ec:2.4.2.62 xylosyl alpha-1,3-xylosyltransferase; XXYLT1 (gene name) +ec:2.4.2.63 EGF-domain serine xylosyltransferase; POGLUT1 (gene name) (ambiguous); rumi (gene name) (ambiguous) +ec:2.4.2.64 tRNA-guanosine34 queuine transglycosylase; QTRT1 (gene name); QTRT2 (gene name); TGT (ambiguous); guanine insertion enzyme (ambiguous); tRNA transglycosylase (ambiguous); Q-insertase (ambiguous); queuine34 transfer ribonucleate ribosyltransferase; transfer ribonucleate glycosyltransferase (ambiguous); tRNA guanine34 transglycosidase (ambiguous); queuine tRNA-ribosyltransferase; [tRNA]-guanine34:queuine tRNA-D-ribosyltransferase; transfer ribonucleic acid guanine34 transglycosylase (ambiguous) +ec:2.4.3.1 beta-galactoside alpha-(2,6)-sialyltransferase; ST6Gal-I; CMP-N-acetylneuraminate:beta-D-galactosyl-1,4-N-acetyl-beta-D-glucosamine alpha-2,6-N-acetylneuraminyltransferase; lactosylceramide alpha-2,6-N-sialyltransferase; CMP-N-acetylneuraminate:beta-D-galactosyl-(1->4)-N-acetyl-beta-D-glucosamine alpha-(2->6)-N-acetylneuraminyltransferase; beta-galactoside alpha-2,6-sialyltransferase +ec:2.4.3.2 beta-D-galactosyl-(1->3)-N-acetyl-beta-D-galactosaminide alpha-2,3-sialyltransferase; CMP-N-acetylneuraminate:D-galactosyl-N-acetyl-D-galactosaminyl-(N-acetylneuraminyl)-D-galactosyl-D-glucosyl-(1<->1)-ceramide N-acetylneuraminyltransferase (ambiguous); monosialoganglioside sialyltransferase; CMP-N-acetylneuraminate:a beta-D-galactosyl-(1->3)-N-acetyl-beta-D-galactosaminyl-(1->4)-[alpha-N-acetylneuraminyl-(2->3)]-beta-D-galactosyl-(1->4)-beta-D-glucosyl-(1<->1)-ceramide N-acetyl-beta-neuraminyltransferase +ec:2.4.3.3 alpha-N-acetylgalactosaminide alpha-2,6-sialyltransferase +ec:2.4.3.4 beta-galactoside alpha-2,3-sialyltransferase; CMP-N-acetylneuraminate:beta-D-galactoside alpha-2,3-N-acetylneuraminyl-transferase +ec:2.4.3.5 galactosyldiacylglycerol alpha-2,3-sialyltransferase +ec:2.4.3.6 N-acetyllactosaminide alpha-2,3-sialyltransferase; cytidine monophosphoacetylneuraminate-beta-galactosyl(1->4)acetylglucosaminide alpha2->3-sialyltransferase; alpha2->3 sialyltransferase (ambiguous); SiaT (ambiguous); CMP-N-acetylneuraminate:beta-D-galactosyl-1,4-N-acetyl-D-glucosaminyl-glycoprotein alpha-2,3-N-acetylneuraminyltransferase; neolactotetraosylceramide alpha-2,3-sialyltransferase; CMP-N-acetylneuraminate:beta-D-galactosyl-(1->4)-N-acetyl-D-glucosaminyl-glycoprotein alpha-(2->3)-N-acetylneuraminyltransferase +ec:2.4.3.7 alpha-N-acetylneuraminyl-2,3-beta-galactosyl-1,3-N-acetylgalactosaminide 6-alpha-sialyltransferase; sialyltransferase; cytidine monophosphoacetylneuraminate-(alpha-N-acetylneuraminyl-2,3-beta-galactosyl-1,3)-N-acetylgalactosaminide-alpha-2,6-sialyltransferase; alpha-N-acetylneuraminyl-2,3-beta-galactosyl-1,3-N-acetyl-galactosaminide alpha-2,6-sialyltransferase; SIAT7; ST6GALNAC; (alpha-N-acetylneuraminyl-2,3-beta-galactosyl-1,3)-N-acetyl-galactosaminide 6-alpha-sialyltransferase; CMP-N-acetylneuraminate:(alpha-N-acetylneuraminyl-2,3-beta-D-galactosyl-1,3)-N-acetyl-D-galactosaminide alpha-2,6-N-acetylneuraminyl-transferase +ec:2.4.3.8 alpha-N-acetylneuraminate alpha-2,8-sialyltransferase; cytidine monophosphoacetylneuraminate-ganglioside GM3; alpha-2,8-sialyltransferase; ganglioside GD3 synthase; ganglioside GD3 synthetase sialyltransferase; CMP-NeuAc:LM1(alpha2-8) sialyltranferase; GD3 synthase; SAT-2 +ec:2.4.3.9 lactosylceramide alpha-2,3-sialyltransferase; cytidine monophosphoacetylneuraminate-lactosylceramide alpha2,3- sialyltransferase; CMP-acetylneuraminate-lactosylceramide-sialyltransferase; CMP-acetylneuraminic acid:lactosylceramide sialyltransferase; CMP-sialic acid:lactosylceramide-sialyltransferase; cytidine monophosphoacetylneuraminate-lactosylceramide sialyltransferase; ganglioside GM3 synthetase; GM3 synthase; GM3 synthetase; SAT 1; CMP-N-acetylneuraminate:lactosylceramide alpha-2,3-N-acetylneuraminyltransferase; CMP-N-acetylneuraminate:beta-D-galactosyl-(1->4)-beta-D-glucosyl(1<->1)ceramide alpha-(2->3)-N-acetylneuraminyltransferase +ec:2.4.3.10 N-acetylglucosaminide alpha-(2,6)-sialyltransferase; alpha-N-acetylneuraminyl-2,3-beta-galactosyl-1,3-N-acetylglucosaminide 6-alpha-sialyltransferase; N-acetylglucosaminide (alpha 2->6)-sialyltransferase; ST6GlcNAc +ec:2.4.99.1 Transferred to 2.4.3.1 +ec:2.4.99.2 Transferred to 2.4.3.2 +ec:2.4.99.3 Transferred to 2.4.3.3 +ec:2.4.99.4 Transferred to 2.4.3.4 +ec:2.4.99.5 Transferred to 2.4.3.5 +ec:2.4.99.6 Transferred to 2.4.3.6 +ec:2.4.99.7 Transferred to 2.4.3.7 +ec:2.4.99.8 Transferred to 2.4.3.8 +ec:2.4.99.9 Transferred to 2.4.3.9 +ec:2.4.99.10 Transferred to 2.4.3.6 +ec:2.4.99.11 Deleted entry +ec:2.4.99.12 lipid IVA 3-deoxy-D-manno-octulosonic acid transferase; waaA (gene name); kdtA (gene name); 3-deoxy-D-manno-oct-2-ulosonic acid transferase; 3-deoxy-manno-octulosonic acid transferase; lipid IVA KDO transferase; CMP-3-deoxy-D-manno-oct-2-ulosonate:lipid IVA 3-deoxy-D-manno-oct-2-ulosonate transferase; KDO transferase +ec:2.4.99.13 (Kdo)-lipid IVA 3-deoxy-D-manno-octulosonic acid transferase; waaA (gene name); kdtA (gene name); 3-deoxy-D-manno-oct-2-ulosonic acid transferase; 3-deoxy-manno-octulosonic acid transferase; (KDO)-lipid IVA 3-deoxy-D-manno-octulosonic acid transferase; CMP-3-deoxy-D-manno-oct-2-ulosonate:(Kdo)-lipid IVA 3-deoxy-D-manno-oct-2-ulosonate transferase; Kdo transferase (ambiguous) +ec:2.4.99.14 (Kdo)2-lipid IVA (2-8) 3-deoxy-D-manno-octulosonic acid transferase; Kdo transferase; waaA (gene name); kdtA (gene name); 3-deoxy-D-manno-oct-2-ulosonic acid transferase; 3-deoxy-manno-octulosonic acid transferase; (KDO)2-lipid IVA (2-8) 3-deoxy-D-manno-octulosonic acid transferase +ec:2.4.99.15 (Kdo)3-lipid IVA (2-4) 3-deoxy-D-manno-octulosonic acid transferase; Kdo transferase; waaA (gene name); kdtA (gene name); 3-deoxy-D-manno-oct-2-ulosonic acid transferase; 3-deoxy-manno-octulosonic acid transferase; (KDO)3-lipid IVA (2-4) 3-deoxy-D-manno-octulosonic acid transferase +ec:2.4.99.16 starch synthase (maltosyl-transferring); alpha1,4-glucan:maltose-1-P maltosyltransferase; GMPMT +ec:2.4.99.17 S-adenosylmethionine:tRNA ribosyltransferase-isomerase; QueA enzyme; queuosine biosynthesis protein QueA +ec:2.4.99.18 dolichyl-diphosphooligosaccharide---protein glycotransferase; dolichyldiphosphooligosaccharide-protein glycosyltransferase; asparagine N-glycosyltransferase; dolichyldiphosphooligosaccharide-protein oligosaccharyltransferase; dolichylpyrophosphodiacetylchitobiose-protein glycosyltransferase; oligomannosyltransferase; oligosaccharide transferase; dolichyldiphosphoryloligosaccharide-protein oligosaccharyltransferase; dolichyl-diphosphooligosaccharide:protein-L-asparagine oligopolysaccharidotransferase; STT3 +ec:2.4.99.19 undecaprenyl-diphosphooligosaccharide---protein glycotransferase; PglB +ec:2.4.99.20 2'-phospho-ADP-ribosyl cyclase/2'-phospho-cyclic-ADP-ribose transferase; diphosphopyridine nucleosidase (ambiguous); CD38 (gene name); BST1 (gene name) +ec:2.4.99.21 dolichyl-phosphooligosaccharide-protein glycotransferase; AglB; archaeal oligosaccharyl transferase; dolichyl-monophosphooligosaccharide-protein glycotransferase +ec:2.4.99.22 Transferred to 2.4.3.10 +ec:2.4.99.23 lipopolysaccharide heptosyltransferase I; HepI; rfaC (gene name); WaaC; heptosyltransferase I (ambiguous) +ec:2.4.99.24 lipopolysaccharide heptosyltransferase II; HepII; rfaF (gene name); WaaF; heptosyltransferase II +ec:2.4.99.25 lipopolysaccharide heptosyltransferase III; waaQ (gene name); rfaQ (gene name) +ec:2.5.1.1 dimethylallyltranstransferase; geranyl-diphosphate synthase; prenyltransferase; dimethylallyltransferase; DMAPP:IPP-dimethylallyltransferase; (2E,6E)-farnesyl diphosphate synthetase; diprenyltransferase; geranyl pyrophosphate synthase; geranyl pyrophosphate synthetase; trans-farnesyl pyrophosphate synthetase; dimethylallyl-diphosphate:isopentenyl-diphosphate dimethylallyltranstransferase +ec:2.5.1.2 thiamine pyridinylase; pyrimidine transferase; thiaminase I; thiamin hydrolase; thiamin pyridinolase; thiaminase (ambiguous); thiamine pyridinolase; thiamin pyridinylase; thiamin:base 2-methyl-4-aminopyrimidine-5-methenyltransferase +ec:2.5.1.3 thiamine phosphate synthase; thiamine phosphate pyrophosphorylase; thiamine monophosphate pyrophosphorylase; TMP-PPase; thiamine-phosphate diphosphorylase; thiE (gene name); TH1 (gene name); THI6 (gene name); 2-methyl-4-amino-5-hydroxymethylpyrimidine-diphosphate:4-methyl-5-(2-phosphoethyl)thiazole 2-methyl-4-aminopyrimidine-5-methenyltransferase; 4-amino-2-methyl-5-diphosphomethylpyrimidine:2-[(2R,5Z)-2-carboxy-4-methylthiazol-5(2H)-ylidene]ethyl phosphate 4-amino-2-methylpyrimidine-5-methenyltransferase (decarboxylating) +ec:2.5.1.4 adenosylmethionine cyclotransferase; adenosylmethioninase +ec:2.5.1.5 galactose-6-sulfurylase; porphyran sulfatase; galactose-6-sulfatase; galactose 6-sulfatase +ec:2.5.1.6 methionine adenosyltransferase; adenosylmethionine synthetase; ATP-methionine adenosyltransferase; methionine S-adenosyltransferase; methionine-activating enzyme; S-adenosyl-L-methionine synthetase; S-adenosylmethionine synthase; S-adenosylmethionine synthetase; AdoMet synthetase +ec:2.5.1.7 UDP-N-acetylglucosamine 1-carboxyvinyltransferase; MurA transferase; UDP-N-acetylglucosamine 1-carboxyvinyl-transferase; UDP-N-acetylglucosamine enoylpyruvyltransferase; enoylpyruvate transferase; phosphoenolpyruvate-UDP-acetylglucosamine-3-enolpyruvyltransferase; phosphoenolpyruvate:UDP-2-acetamido-2-deoxy-D-glucose 2-enoyl-1-carboxyethyltransferase; phosphoenolpyruvate:uridine diphosphate N-acetylglucosamine enolpyruvyltransferase; phosphoenolpyruvate:uridine-5'-diphospho-N-acetyl-2-amino-2-deoxyglucose 3-enolpyruvyltransferase; phosphopyruvate-uridine diphosphoacetylglucosamine pyruvatetransferase; pyruvate-UDP-acetylglucosamine transferase; pyruvate-uridine diphospho-N-acetylglucosamine transferase; pyruvate-uridine diphospho-N-acetyl-glucosamine transferase; pyruvic-uridine diphospho-N-acetylglucosaminyltransferase; phosphoenolpyruvate:UDP-N-acetyl-D-glucosamine 1-carboxyvinyltransferase +ec:2.5.1.8 Transferred to 2.5.1.75 +ec:2.5.1.9 riboflavin synthase; heavy riboflavin synthase; light riboflavin synthase; riboflavin synthetase; riboflavine synthase; riboflavine synthetase +ec:2.5.1.10 (2E,6E)-farnesyl diphosphate synthase; farnesyl-diphosphate synthase; geranyl transferase I; prenyltransferase; farnesyl pyrophosphate synthetase; farnesylpyrophosphate synthetase; geranyltranstransferase +ec:2.5.1.11 Transferred to 2.5.1.84 and 2.5.1.85 +ec:2.5.1.12 Deleted entry +ec:2.5.1.13 Deleted entry +ec:2.5.1.14 Deleted entry +ec:2.5.1.15 dihydropteroate synthase; dihydropteroate pyrophosphorylase; DHPS; 7,8-dihydropteroate synthase; 7,8-dihydropteroate synthetase; 7,8-dihydropteroic acid synthetase; dihydropteroate synthetase; dihydropteroic synthetase; 2-amino-4-hydroxy-6-hydroxymethyl-7,8-dihydropteridine-diphosphate:4-aminobenzoate 2-amino-4-hydroxydihydropteridine-6-methenyltransferase; (2-amino-4-hydroxy-7,8-dihydropteridin-6-yl)methyl-diphosphate:4-aminobenzoate 2-amino-4-hydroxydihydropteridine-6-methenyltransferase +ec:2.5.1.16 spermidine synthase; aminopropyltransferase; putrescine aminopropyltransferase; spermidine synthetase; SpeE (ambiguous); S-adenosylmethioninamine:putrescine 3-aminopropyltransferase; S-adenosyl 3-(methylthio)propylamine:putrescine 3-aminopropyltransferase +ec:2.5.1.17 corrinoid adenosyltransferase; MMAB (gene name); cobA (gene name); cobO (gene name); pduO (gene name); ATP:corrinoid adenosyltransferase; cob(I)alamin adenosyltransferase; aquacob(I)alamin adenosyltransferase; aquocob(I)alamin vitamin B12s adenosyltransferase; ATP:cob(I)alamin Cobeta-adenosyltransferase; ATP:cob(I)yrinic acid-a,c-diamide Cobeta-adenosyltransferase; cob(I)yrinic acid a,c-diamide adenosyltransferase +ec:2.5.1.18 glutathione transferase; glutathione S-transferase; glutathione S-alkyltransferase; glutathione S-aryltransferase; S-(hydroxyalkyl)glutathione lyase; glutathione S-aralkyltransferase; glutathione S-alkyl transferase; GST +ec:2.5.1.19 3-phosphoshikimate 1-carboxyvinyltransferase; 5-enolpyruvylshikimate-3-phosphate synthase; 3-enolpyruvylshikimate 5-phosphate synthase; 3-enolpyruvylshikimic acid-5-phosphate synthetase; 5'-enolpyruvylshikimate-3-phosphate synthase; 5-enolpyruvyl-3-phosphoshikimate synthase; 5-enolpyruvylshikimate-3-phosphate synthetase; 5-enolpyruvylshikimate-3-phosphoric acid synthase; enolpyruvylshikimate phosphate synthase; EPSP synthase +ec:2.5.1.20 rubber cis-polyprenylcistransferase; rubber allyltransferase; rubber transferase; isopentenyl pyrophosphate cis-1,4-polyisoprenyl transferase; cis-prenyl transferase; rubber polymerase; rubber prenyltransferase +ec:2.5.1.21 squalene synthase; farnesyltransferase; presqualene-diphosphate synthase; presqualene synthase; squalene synthetase; farnesyl-diphosphate farnesyltransferase; SQS +ec:2.5.1.22 spermine synthase; spermidine aminopropyltransferase; spermine synthetase; S-adenosylmethioninamine:spermidine 3-aminopropyltransferase; S-adenosyl 3-(methylthio)propylamine:spermidine 3-aminopropyltransferase +ec:2.5.1.23 sym-norspermidine synthase; S-adenosylmethioninamine:propane-1,3-diamine 3-aminopropyltransferase; S-adenosyl 3-(methylthio)propylamine:propane-1,3-diamine 3-aminopropyltransferase +ec:2.5.1.24 discadenine synthase; discadenine synthetase; S-adenosyl-L-methionine:6-N-(Delta2-isopentenyl)-adenine 3-(3-amino-3-carboxypropyl)-transferase +ec:2.5.1.25 tRNA-uridine aminocarboxypropyltransferase; S-adenosyl-L-methionine:tRNA-uridine 3-(3-amino-3-carboxypropyl)transferase; tapT (gene name); DTWD1 (gene name); DTWD2 (gene name); S-adenosyl-L-methionine:uridine47 in tRNAPhe 3-[(3S)-3-amino-3-carboxypropyl]transferase +ec:2.5.1.26 alkylglycerone-phosphate synthase; alkyldihydroxyacetonephosphate synthase; alkyldihydroxyacetone phosphate synthetase; alkyl DHAP synthetase; alkyl-DHAP; dihydroxyacetone-phosphate acyltransferase (ambiguous); DHAP-AT +ec:2.5.1.27 adenylate dimethylallyltransferase (AMP-dependent); cytokinin synthase (ambiguous); isopentenyltransferase (ambiguous); 2-isopentenyl-diphosphate:AMP Delta2-isopentenyltransferase; adenylate isopentenyltransferase (ambiguous); IPT; adenylate dimethylallyltransferase; dimethylallyl-diphosphate:AMP dimethylallyltransferase +ec:2.5.1.28 dimethylallylcistransferase; neryl-diphosphate synthase; dimethylallyl-diphosphate:isopentenyl-diphosphate dimethylallylcistransferase +ec:2.5.1.29 geranylgeranyl diphosphate synthase; geranylgeranyl-diphosphate synthase; geranylgeranyl pyrophosphate synthetase; geranylgeranyl-PP synthetase; farnesyltransferase; geranylgeranyl pyrophosphate synthase; farnesyltranstransferase (obsolete) +ec:2.5.1.30 heptaprenyl diphosphate synthase; all-trans-heptaprenyl-diphosphate synthase; heptaprenyl pyrophosphate synthase; heptaprenyl pyrophosphate synthetase; HepPP synthase; HepPS; heptaprenylpyrophosphate synthetase +ec:2.5.1.31 ditrans,polycis-undecaprenyl-diphosphate synthase [(2E,6E)-farnesyl-diphosphate specific]; di-trans,poly-cis-undecaprenyl-diphosphate synthase; undecaprenyl-diphosphate synthase; bactoprenyl-diphosphate synthase; UPP synthetase; undecaprenyl diphosphate synthetase; undecaprenyl pyrophosphate synthetase; di-trans,poly-cis-decaprenylcistransferase +ec:2.5.1.32 15-cis-phytoene synthase; PSY (gene name); crtB (gene name); prephytoene-diphosphate synthase; phytoene synthetase; PSase; geranylgeranyl-diphosphate geranylgeranyltransferase +ec:2.5.1.33 Transferred to 2.5.1.82 and 2.5.1.83 +ec:2.5.1.34 4-dimethylallyltryptophan synthase; dimethylallylpyrophosphate:L-tryptophan dimethylallyltransferase; dimethylallyltryptophan synthetase; dimethylallylpyrophosphate:tryptophan dimethylallyl transferase; DMAT synthetase; 4-(gamma,gamma-dimethylallyl)tryptophan synthase; tryptophan dimethylallyltransferase +ec:2.5.1.35 aspulvinone dimethylallyltransferase; dimethylallyl pyrophosphate:aspulvinone dimethylallyltransferase; dimethylallyl-diphosphate:aspulvinone-E dimethylallyltransferase +ec:2.5.1.36 trihydroxypterocarpan dimethylallyltransferase; glyceollin synthase; dimethylallylpyrophosphate:3,6a,9-trihydroxypterocarpan dimethylallyltransferase; dimethylallylpyrophosphate:trihydroxypterocarpan dimethylallyl transferase; dimethylallyl-diphosphate:(6aS,11aS)-3,6a,9-trihydroxypterocarpan dimethyltransferase; dimethylallyl-diphosphate:(6aS,11aS)-3,6a,9-trihydroxypterocarpan dimethylallyltransferase +ec:2.5.1.37 Transferred to 4.4.1.20 +ec:2.5.1.38 isonocardicin synthase; nocardicin aminocarboxypropyltransferase; S-adenosyl-L-methionine:nocardicin-E 3-amino-3-carboxypropyltransferase +ec:2.5.1.39 4-hydroxybenzoate polyprenyltransferase; nonaprenyl-4-hydroxybenzoate transferase; 4-hydroxybenzoate transferase; p-hydroxybenzoate dimethylallyltransferase; p-hydroxybenzoate polyprenyltransferase; p-hydroxybenzoic acid-polyprenyl transferase; p-hydroxybenzoic-polyprenyl transferase; 4-hydroxybenzoate nonaprenyltransferase +ec:2.5.1.40 Transferred to 4.2.3.9 +ec:2.5.1.41 phosphoglycerol geranylgeranyltransferase; glycerol phosphate geranylgeranyltransferase; geranylgeranyl-transferase (ambiguous); prenyltransferase (ambiguous); (S)-3-O-geranylgeranylglyceryl phosphate synthase; (S)-geranylgeranylglyceryl phosphate synthase; GGGP synthase; (S)-GGGP synthase; GGGPS; geranylgeranyl diphosphate:sn-glyceryl phosphate geranylgeranyltransferase; geranylgeranyl diphosphate:sn-glycerol-1-phosphate geranylgeranyltransferase +ec:2.5.1.42 geranylgeranylglycerol-phosphate geranylgeranyltransferase; geranylgeranyloxyglycerol phosphate geranylgeranyltransferase; geranylgeranyltransferase II; (S)-2,3-di-O-geranylgeranylglyceryl phosphate synthase; DGGGP synthase; DGGGPS; geranylgeranyl diphosphate:sn-3-O-(geranylgeranyl)glycerol 1-phosphate geranylgeranyltransferase +ec:2.5.1.43 nicotianamine synthase +ec:2.5.1.44 homospermidine synthase; putrescine:putrescine 4-aminobutyltransferase (ammonia-forming) +ec:2.5.1.45 homospermidine synthase (spermidine-specific) +ec:2.5.1.46 deoxyhypusine synthase; spermidine:eIF5A-lysine 4-aminobutyltransferase (propane-1,3-diamine-forming) +ec:2.5.1.47 cysteine synthase; O-acetyl-L-serine sulfhydrylase; O-acetyl-L-serine sulfohydrolase; O-acetylserine (thiol)-lyase; O-acetylserine (thiol)-lyase A; O-acetylserine sulfhydrylase; O3-acetyl-L-serine acetate-lyase (adding hydrogen-sulfide); acetylserine sulfhydrylase; cysteine synthetase; S-sulfocysteine synthase; 3-O-acetyl-L-serine:hydrogen-sulfide 2-amino-2-carboxyethyltransferase; O3-acetyl-L-serine:hydrogen-sulfide 2-amino-2-carboxyethyltransferase +ec:2.5.1.48 cystathionine gamma-synthase; O-succinyl-L-homoserine succinate-lyase (adding cysteine); O-succinylhomoserine (thiol)-lyase; homoserine O-transsuccinylase (ambiguous); O-succinylhomoserine synthase; O-succinylhomoserine synthetase; cystathionine synthase; cystathionine synthetase; homoserine transsuccinylase (ambiguous); 4-O-succinyl-L-homoserine:L-cysteine S-(3-amino-3-carboxypropyl)transferase +ec:2.5.1.49 O-acetylhomoserine aminocarboxypropyltransferase; O-acetyl-L-homoserine acetate-lyase (adding methanethiol); O-acetyl-L-homoserine sulfhydrolase; O-acetylhomoserine (thiol)-lyase; O-acetylhomoserine sulfhydrolase; methionine synthase (misleading) +ec:2.5.1.50 zeatin 9-aminocarboxyethyltransferase; beta-(9-cytokinin)-alanine synthase; beta-(9-cytokinin)alanine synthase; O-acetyl-L-serine acetate-lyase (adding N6-substituted adenine); lupinate synthetase; lupinic acid synthase; lupinic acid synthetase; 3-O-acetyl-L-serine:zeatin 2-amino-2-carboxyethyltransferase +ec:2.5.1.51 beta-pyrazolylalanine synthase; beta-(1-pyrazolyl)alanine synthase; beta-pyrazolealanine synthase; beta-pyrazolylalanine synthase (acetylserine); O3-acetyl-L-serine acetate-lyase (adding pyrazole); BPA-synthase; pyrazolealanine synthase; pyrazolylalaninase; 3-O-acetyl-L-serine:pyrazole 1-(2-amino-2-carboxyethyl)transferase; O3-acetyl-L-serine:pyrazole 1-(2-amino-2-carboxyethyl)transferase +ec:2.5.1.52 L-mimosine synthase; O3-acetyl-L-serine acetate-lyase (adding 3,4-dihydroxypyridin-1-yl); 3-O-acetyl-L-serine:3,4-dihydroxypyridine 1-(2-amino-2-carboxyethyl)transferase; O3-acetyl-L-serine:3,4-dihydroxypyridine 1-(2-amino-2-carboxyethyl)transferase +ec:2.5.1.53 uracilylalanine synthase; O3-acetyl-L-serine acetate-lyase (adding uracil); isowillardiine synthase; willardiine synthase; 3-O-acetyl-L-serine:uracil 1-(2-amino-2-carboxyethyl)transferase; O3-acetyl-L-serine:uracil 1-(2-amino-2-carboxyethyl)transferase +ec:2.5.1.54 3-deoxy-7-phosphoheptulonate synthase; 2-dehydro-3-deoxy-phosphoheptonate aldolase; 2-keto-3-deoxy-D-arabino-heptonic acid 7-phosphate synthetase; 3-deoxy-D-arabino-2-heptulosonic acid 7-phosphate synthetase; 3-deoxy-D-arabino-heptolosonate-7-phosphate synthetase; 3-deoxy-D-arabino-heptulosonate 7-phosphate synthetase; 7-phospho-2-keto-3-deoxy-D-arabino-heptonate D-erythrose-4-phosphate lyase (pyruvate-phosphorylating); 7-phospho-2-dehydro-3-deoxy-D-arabino-heptonate D-erythrose-4-phosphate lyase (pyruvate-phosphorylating); D-erythrose-4-phosphate-lyase; D-erythrose-4-phosphate-lyase (pyruvate-phosphorylating); DAH7-P synthase; DAHP synthase; DS-Co; DS-Mn; KDPH synthase; KDPH synthetase; deoxy-D-arabino-heptulosonate-7-phosphate synthetase; phospho-2-dehydro-3-deoxyheptonate aldolase; phospho-2-keto-3-deoxyheptanoate aldolase; phospho-2-keto-3-deoxyheptonate aldolase; phospho-2-keto-3-deoxyheptonic aldolase; phospho-2-oxo-3-deoxyheptonate aldolase +ec:2.5.1.55 3-deoxy-8-phosphooctulonate synthase; 2-dehydro-3-deoxy-D-octonate-8-phosphate D-arabinose-5-phosphate-lyase (pyruvate-phosphorylating); 2-dehydro-3-deoxy-phosphooctonate aldolase; 2-keto-3-deoxy-8-phosphooctonic synthetase; 3-deoxy-D-manno-octulosonate-8-phosphate synthase; 3-deoxy-D-mannooctulosonate-8-phosphate synthetase; 3-deoxyoctulosonic 8-phosphate synthetase; KDOP synthase; phospho-2-keto-3-deoxyoctonate aldolase +ec:2.5.1.56 N-acetylneuraminate synthase; (NANA)condensing enzyme; N-acetylneuraminate pyruvate-lyase (pyruvate-phosphorylating); NeuAc synthase +ec:2.5.1.57 N-acylneuraminate-9-phosphate synthase; N-acetylneuraminate 9-phosphate lyase; N-acetylneuraminate 9-phosphate sialic acid 9-phosphate synthase; N-acetylneuraminate 9-phosphate synthetase; N-acylneuraminate-9-phosphate pyruvate-lyase (pyruvate-phosphorylating); sialic acid 9-phosphate synthetase +ec:2.5.1.58 protein farnesyltransferase; FTase +ec:2.5.1.59 protein geranylgeranyltransferase type I; GGTase-I; GGTaseI +ec:2.5.1.60 protein geranylgeranyltransferase type II; GGTaseII; Rab geranylgeranyltransferase; RabGGTase; geranylgeranyl-diphosphate,geranylgeranyl-diphosphate:protein-cysteine geranyltransferase +ec:2.5.1.61 hydroxymethylbilane synthase; HMB-synthase; porphobilinogen deaminase; pre-uroporphyrinogen synthase; uroporphyrinogen I synthase; uroporphyrinogen I synthetase; uroporphyrinogen synthase; uroporphyrinogen synthetase; porphobilinogen ammonia-lyase (polymerizing); (4-[2-carboxyethyl]-3-[carboxymethyl]pyrrol-2-yl)methyltransferase (hydrolysing) +ec:2.5.1.62 chlorophyll synthase +ec:2.5.1.63 adenosyl-fluoride synthase; fluorinase +ec:2.5.1.64 Transferred to 2.2.1.9 and 4.2.99.20 +ec:2.5.1.65 O-phosphoserine sulfhydrylase; O-phosphoserine(thiol)-lyase +ec:2.5.1.66 N2-(2-carboxyethyl)arginine synthase; CEAS; N2-(2-carboxyethyl)arginine synthetase; CEA synthetase; glyceraldehyde-3-phosphate:L-arginine 2-N-(2-hydroxy-3-oxopropyl) transferase (2-carboxyethyl-forming) +ec:2.5.1.67 chrysanthemyl diphosphate synthase; CPPase; dimethylallyl-diphosphate:dimethylallyl-diphosphate dimethylallyltransferase (chrysanthemyl-diphosphate-forming) +ec:2.5.1.68 (2Z,6E)-farnesyl diphosphate synthase; (Z)-farnesyl diphosphate synthase; Z-farnesyl diphosphate synthase +ec:2.5.1.69 lavandulyl diphosphate synthase; FDS-5; dimethylallyl-diphosphate:dimethylallyl-diphosphate dimethylallyltransferase (lavandulyl-diphosphate-forming) +ec:2.5.1.70 naringenin 8-dimethylallyltransferase; N8DT; dimethylallyl-diphosphate:naringenin 8-dimethylallyltransferase +ec:2.5.1.71 leachianone-G 2''-dimethylallyltransferase; LG 2''-dimethylallyltransferase; leachianone G 2''-dimethylallyltransferase; LGDT; dimethylallyl-diphosphate:leachianone-G 2''-dimethylallyltransferase +ec:2.5.1.72 quinolinate synthase; NadA; QS; quinolinate synthetase +ec:2.5.1.73 O-phospho-L-seryl-tRNA:Cys-tRNA synthase; SepCysS; Sep-tRNA:Cys-tRNA synthase +ec:2.5.1.74 1,4-dihydroxy-2-naphthoate polyprenyltransferase +ec:2.5.1.75 tRNA dimethylallyltransferase; tRNA prenyltransferase; MiaA; transfer ribonucleate isopentenyltransferase (incorrect); Delta2-isopentenyl pyrophosphate:tRNA-Delta2-isopentenyl transferase (incorrect); Delta2-isopentenyl pyrophosphate:transfer ribonucleic acid Delta2-isopentenyltransferase (incorrect); dimethylallyl-diphosphate: tRNA dimethylallyltransferase; dimethylallyl-diphosphate:adenine37 in tRNA dimethylallyltransferase +ec:2.5.1.76 cysteate synthase; sulfite:O-phospho-L-serine sulfotransferase (phosphate-hydrolysing, L-cysteate-forming) +ec:2.5.1.77 Transferred to 2.5.1.147 and 4.3.1.32 +ec:2.5.1.78 6,7-dimethyl-8-ribityllumazine synthase; lumazine synthase; 6,7-dimethyl-8-ribityllumazine synthase 2; 6,7-dimethyl-8-ribityllumazine synthase 1; lumazine synthase 2; lumazine synthase 1; type I lumazine synthase; type II lumazine synthase; RIB4; MJ0303; RibH; Pbls; MbtLS; RibH1 protein; RibH2 protein; RibH1; RibH2 +ec:2.5.1.79 thermospermine synthase; TSPMS; ACL5; SAC51; S-adenosyl 3-(methylthio)propylamine:spermidine 3-aminopropyltransferase (thermospermine synthesizing) +ec:2.5.1.80 7-dimethylallyltryptophan synthase; 7-DMATS; dimethylallyl-diphosphate:L-tryptophan 7-dimethylallyltransferase +ec:2.5.1.81 geranylfarnesyl diphosphate synthase; FGPP synthase; (all-E) geranylfarnesyl diphosphate synthase; GFPS; Fgs +ec:2.5.1.82 hexaprenyl diphosphate synthase [geranylgeranyl-diphosphate specific]; HexPS(ambiguous); (all-E) hexaprenyl diphosphate synthase; (all-trans) hexaprenyl diphosphate synthase; hexaprenyl pyrophosphate synthase (ambiguous); HexPPs (ambiguous); hexaprenyl diphosphate synthase (ambiguous); geranylgeranyl-diphosphate:isopentenyl-diphosphate transferase (adding 2 isopentenyl units) +ec:2.5.1.83 hexaprenyl diphosphate synthase [(2E,6E)-farnesyl-diphosphate specific]; HexPS (ambiguous); hexaprenyl pyrophosphate synthetase (ambiguous); hexaprenyl diphosphate synthase (ambiguous); (2E,6E)-farnesyl-diphosphate:isopentenyl-diphosphate farnesyltranstransferase (adding 3 isopentenyl units) +ec:2.5.1.84 all-trans-nonaprenyl diphosphate synthase [geranyl-diphosphate specific]; nonaprenyl diphosphate synthase (ambiguous); solanesyl diphosphate synthase (ambiguous); SolPP synthase (ambiguous); SPP-synthase (ambiguous); SPP synthase (ambiguous); solanesyl-diphosphate synthase (ambiguous); OsSPS2 +ec:2.5.1.85 all-trans-nonaprenyl diphosphate synthase [geranylgeranyl-diphosphate specific]; nonaprenyl diphosphate synthase (ambiguous); solanesyl diphosphate synthase (ambiguous); At-SPS2; At-SPS1; SPS1; SPS2 +ec:2.5.1.86 trans,polycis-decaprenyl diphosphate synthase; Rv2361c; (2Z,6Z,10Z,14Z,18Z,22Z,26Z,30Z,34E)-decaprenyl diphosphate synthase +ec:2.5.1.87 ditrans,polycis-polyprenyl diphosphate synthase [(2E,6E)-farnesyl diphosphate specific]; RER2; Rer2p; Rer2p Z-prenyltransferase; Srt1p; Srt2p Z-prenyltransferase; ACPT; dehydrodolichyl diphosphate synthase 1 +ec:2.5.1.88 trans,polycis-polyprenyl diphosphate synthase [(2Z,6E)-farnesyl diphosphate specific] +ec:2.5.1.89 tritrans,polycis-undecaprenyl diphosphate synthase [geranylgeranyl-diphosphate specific] +ec:2.5.1.90 all-trans-octaprenyl-diphosphate synthase; octaprenyl-diphosphate synthase; octaprenyl pyrophosphate synthetase; polyprenylpyrophosphate synthetase; terpenoidallyltransferase; terpenyl pyrophosphate synthetase; trans-heptaprenyltranstransferase; trans-prenyltransferase +ec:2.5.1.91 all-trans-decaprenyl-diphosphate synthase; decaprenyl-diphosphate synthase; decaprenyl pyrophosphate synthetase; polyprenylpyrophosphate synthetase; terpenoidallyltransferase; terpenyl pyrophosphate synthetase; trans-prenyltransferase +ec:2.5.1.92 (2Z,6Z)-farnesyl diphosphate synthase; cis,cis-farnesyl diphosphate synthase; Z,Z-FPP synthase; zFPS; Z,Z-farnesyl pyrophosphate synthase +ec:2.5.1.93 4-hydroxybenzoate geranyltransferase; PGT1; PGT2; 4HB geranyltransferase; 4HB:geranyltransferase; p-hydroxybenzoate geranyltransferase; PHB geranyltransferase; geranyl diphosphate:4-hydroxybenzoate geranyltransferase +ec:2.5.1.94 adenosyl-chloride synthase; chlorinase; 5'-chloro-5'-deoxyadenosine synthase +ec:2.5.1.95 xanthan ketal pyruvate transferase; KPT +ec:2.5.1.96 4,4'-diapophytoene synthase; dehydrosqualene synthase; DAP synthase; C30 carotene synthase; CrtM +ec:2.5.1.97 pseudaminic acid synthase; PseI; NeuB3 +ec:2.5.1.98 Rhizobium leguminosarum exopolysaccharide glucosyl ketal-pyruvate-transferase; PssM; phosphoenolpyruvate:[D-GlcA-beta-(1->4)-2-O-Ac-D-GlcA-beta-(1->4)-D-Glc-beta-(1->4)-[3-O-CH3-CH2CH(OH)C(O)-D-Gal-beta-(1->4)-D-Glc-beta-(1->4)-D-Glc-beta-(1->4)-D-Glc-beta-(1->6)]-2(or 3)-O-Ac-D-Glc-alpha-(1->6)]n 4,6-O-(1-carboxyethan-1,1-diyl)transferase +ec:2.5.1.99 Deleted entry +ec:2.5.1.100 fumigaclavine A dimethylallyltransferase; FgaPT1; dimethylallyl-diphosphate:fumigaclavine A dimethylallyltransferase +ec:2.5.1.101 N,N'-diacetyllegionaminate synthase; neuB (gene name); legI (gene name) +ec:2.5.1.102 geranyl-pyrophosphate---olivetolic acid geranyltransferase; GOT (ambiguous) +ec:2.5.1.103 presqualene diphosphate synthase; SSL-1 (gene name); hpnD (gene name) +ec:2.5.1.104 N1-aminopropylagmatine synthase; agmatine/cadaverine aminopropyl transferase; ACAPT; PF0127 (gene name); triamine/agmatine aminopropyltransferase; SpeE (ambiguous); agmatine aminopropyltransferase; S-adenosyl 3-(methylthio)propylamine:agmatine 3-aminopropyltransferase +ec:2.5.1.105 7,8-dihydropterin-6-yl-methyl-4-(beta-D-ribofuranosyl)aminobenzene 5'-phosphate synthase; MJ0301 (gene name); dihydropteroate synthase (ambiguous) +ec:2.5.1.106 tryprostatin B synthase; ftmPT1 (gene name); brevianamide F prenyltransferase (ambiguous); dimethylallyl-diphosphate:brevianamide-F dimethylallyl-C-2-transferase +ec:2.5.1.107 verruculogen prenyltransferase; FtmPT3 +ec:2.5.1.108 2-(3-amino-3-carboxypropyl)histidine synthase; Dph2 +ec:2.5.1.109 brevianamide F prenyltransferase (deoxybrevianamide E-forming); NotF; BrePT; brevianamide F reverse prenyltransferase; dimethylallyl-diphosphate:brevianamide-F tert-dimethylallyl-C-2-transferase +ec:2.5.1.110 12alpha,13alpha-dihydroxyfumitremorgin C prenyltransferase; ftmH (gene name); FtmPT2; dimethylallyl-diphosphate:12alpha,13alpha-dihydroxyfumitremorgin C dimethylallyl-N-1-transferase +ec:2.5.1.111 4-hydroxyphenylpyruvate 3-dimethylallyltransferase; CloQ; 4HPP dimethylallyltransferase; NovQ; dimethylallyl diphosphate:4-hydroxyphenylpyruvate 3-dimethylallyltransferase +ec:2.5.1.112 adenylate dimethylallyltransferase (ADP/ATP-dependent); cytokinin synthase (ambiguous); isopentenyltransferase (ambiguous); 2-isopentenyl-diphosphate:ADP/ATP Delta2-isopentenyltransferase; adenylate isopentenyltransferase (ambiguous); dimethylallyl diphosphate:ATP/ADP isopentenyltransferase: IPT; dimethylallyl-diphosphate:ADP/ATP dimethylallyltransferase +ec:2.5.1.113 [CysO sulfur-carrier protein]-thiocarboxylate-dependent cysteine synthase; CysM +ec:2.5.1.114 tRNAPhe (4-demethylwyosine37-C7) aminocarboxypropyltransferase; TYW2; tRNA-yW synthesizing enzyme-2; TRM12 (gene name); taw2 (gene name) +ec:2.5.1.115 homogentisate phytyltransferase; HPT; VTE2 (gene name) +ec:2.5.1.116 homogentisate geranylgeranyltransferase; HGGT; slr1736 (gene name) +ec:2.5.1.117 homogentisate solanesyltransferase; HST; PDS2 (gene name) +ec:2.5.1.118 beta-(isoxazolin-5-on-2-yl)-L-alanine synthase +ec:2.5.1.119 beta-(isoxazolin-5-on-4-yl)-L-alanine synthase +ec:2.5.1.120 aminodeoxyfutalosine synthase; MqnE; AFL synthase; aminofutalosine synthase; S-adenosyl-L-methionine:3-[(1-carboxyvinyl)-oxy]benzoate adenosyltransferase (bicarbonate-hydrolysing, 6-amino-6-deoxyfutalosine-forming) +ec:2.5.1.121 5,10-dihydrophenazine-1-carboxylate 9-dimethylallyltransferase; PpzP; dihydrophenazine-1-carboxylate dimethylallyltransferase; 5,10-dihydrophenazine 1-carboxylate dimethylallyltransferase; dimethylallyl diphosphate:5,10-dihydrophenazine-1-carboxylate 9-dimethylallyltransferase +ec:2.5.1.122 4-O-dimethylallyl-L-tyrosine synthase; SirD; dimethylallyl diphosphate:L-tyrosine 4-O-dimethylallyltransferase +ec:2.5.1.123 flaviolin linalyltransferase; Fnq26 +ec:2.5.1.124 6-linalyl-2-O,3-dimethylflaviolin synthase; Fur7; 6-(3,7-dimethylocta-1,6-dien-3-yl)-5,7-dihydroxy-2-methoxy-3-methylnaphthalene-1,4-dione synthase +ec:2.5.1.125 7-geranyloxy-5-hydroxy-2-methoxy-3-methylnaphthalene-1,4-dione synthase; Fur7 +ec:2.5.1.126 norspermine synthase; long-chain polyamine synthase (ambiguous) +ec:2.5.1.127 caldopentamine synthase; long-chain polyamine synthase (ambiguous) +ec:2.5.1.128 N4-bis(aminopropyl)spermidine synthase +ec:2.5.1.129 flavin prenyltransferase; ubiX (gene name); PAD1 (gene name); dimethylallyl-phosphate:FMNH2 prenyltransferase +ec:2.5.1.130 2-carboxy-1,4-naphthoquinone phytyltransferase; menA (gene name); ABC4 (gene name); 1,4-dioxo-2-naphthoate phytyltransferase; 1,4-diketo-2-naphthoate phytyltransferase +ec:2.5.1.131 (4-{4-[2-(gamma-L-glutamylamino)ethyl]phenoxymethyl}furan-2-yl)methanamine synthase; MfnF +ec:2.5.1.132 3-deoxy-D-glycero-D-galacto-nonulopyranosonate 9-phosphate synthase; 3-deoxy-D-glycero-D-galacto-nononate 9-phosphate synthase; 2-keto-3-deoxy-D-glycero-D-galacto-9-phosphonononic acid synthase; Kdn 9-P synthase +ec:2.5.1.133 bacteriochlorophyll a synthase; bchG (gene name) +ec:2.5.1.134 cystathionine beta-synthase (O-acetyl-L-serine); MccB; O-acetylserine dependent cystathionine beta-synthase +ec:2.5.1.135 validamine 7-phosphate valienyltransferase; vldE (gene name); valL (gene name) +ec:2.5.1.136 2-acylphloroglucinol 4-prenyltransferase; PT-1 (gene name); PT1L (gene name); aromatic prenyltransferase (ambiguous); dimethylallyl-diphosphate:2-acylphloroglucinol 4-dimethylallyltransferase +ec:2.5.1.137 2-acyl-4-prenylphloroglucinol 6-prenyltransferase; PT2 (gene name); aromatic prenyltransferase (ambiguous); dimethylallyl-diphosphate:2-acyl-4-prenylphloroglucinol 6-dimethylallyltransferase +ec:2.5.1.138 coumarin 8-geranyltransferase; ClPT1 +ec:2.5.1.139 umbelliferone 6-dimethylallyltransferase; PcPT; dimethylallyl-diphosphate:umbelliferone 6-dimethylallyltransferase +ec:2.5.1.140 N-(2-amino-2-carboxyethyl)-L-glutamate synthase; SbnA; ACEGA synthase +ec:2.5.1.141 heme o synthase; ctaB (gene name); COX10 (gene name) +ec:2.5.1.142 nerylneryl diphosphate synthase; CPT2; dimethylallyl-diphosphate:isopentenyl-diphosphate cistransferase (adding 3 isopentenyl units) +ec:2.5.1.143 pyridinium-3,5-biscarboxylic acid mononucleotide synthase; LarB; P2CMN synthase; nicotinic acid adenine dinucleotide carboxylase/hydrolase; NaAD carboxylase/hydrolase +ec:2.5.1.144 S-sulfo-L-cysteine synthase (O-acetyl-L-serine-dependent); cysteine synthase B; cysM (gene name); CS26 (gene name) +ec:2.5.1.145 phosphatidylglycerol---prolipoprotein diacylglyceryl transferase; lgt (gene name) +ec:2.5.1.146 3-geranyl-3-[(Z)-2-isocyanoethenyl]indole synthase; famD2 (gene name) +ec:2.5.1.147 5-amino-6-(D-ribitylamino)uracil---L-tyrosine 4-hydroxyphenyl transferase; cofH (gene name); cbiF (gene name) (ambiguous) +ec:2.5.1.148 lycopaoctaene synthase; LOS (gene name) +ec:2.5.1.149 lycopene elongase/hydratase (flavuxanthin-forming); crtEb (gene name); dimethylallyl-diphosphate:all-trans-lycopene dimethylallyltransferase (hydrating, flavuxanthin-forming) +ec:2.5.1.150 lycopene elongase/hydratase (dihydrobisanhydrobacterioruberin-forming); lbtA (gene name); lyeJ (gene name); dimethylallyl-diphosphate:all-trans-lycopene dimethylallyltransferase (hydrating, dihydrobisanhydrobacterioruberin-forming) +ec:2.5.1.151 alkylcobalamin dealkylase; MMACHC (gene name); alkylcobalamin:glutathione S-alkyltransferase; alkylcobalamin reductase +ec:2.5.1.152 D-histidine 2-aminobutanoyltransferase; cntL (gene name) +ec:2.5.1.153 adenosine tuberculosinyltransferase; Rv3378c (locus name) +ec:2.5.1.154 corrinoid adenosyltransferase EutT; eutT (gene name) +ec:2.5.1.155 phosphoglycerol geranylfarnesyltransferase; GFGP synthase +ec:2.5.1.156 geranylfarnesylglycerol-phosphate geranylfarnesyltransferase; DGFGP synthase; 2,3-bis-O-(farnesylgeranyl)-sn-glycerol 1-phosphate synthase; 2,3-di-O-farnesylgeranylglyceryl synthase +ec:2.6.1.1 aspartate transaminase; glutamic-oxaloacetic transaminase; glutamic-aspartic transaminase; transaminase A; AAT; AspT; 2-oxoglutarate-glutamate aminotransferase; aspartate alpha-ketoglutarate transaminase; aspartate aminotransferase; aspartate-2-oxoglutarate transaminase; aspartic acid aminotransferase; aspartic aminotransferase; aspartyl aminotransferase; AST (ambiguous); glutamate-oxalacetate aminotransferase; glutamate-oxalate transaminase; glutamic-aspartic aminotransferase; glutamic-oxalacetic transaminase; glutamic oxalic transaminase; GOT (enzyme) [ambiguous]; L-aspartate transaminase; L-aspartate-alpha-ketoglutarate transaminase; L-aspartate-2-ketoglutarate aminotransferase; L-aspartate-2-oxoglutarate aminotransferase; L-aspartate-2-oxoglutarate-transaminase; L-aspartic aminotransferase; oxaloacetate-aspartate aminotransferase; oxaloacetate transferase; aspartate:2-oxoglutarate aminotransferase; glutamate oxaloacetate transaminase +ec:2.6.1.2 alanine transaminase; glutamic-pyruvic transaminase; glutamic-alanine transaminase; GPT (ambiguous); alanine aminotransferase; alanine-alpha-ketoglutarate aminotransferase; alanine-pyruvate aminotransferase; ALT; glutamic acid-pyruvic acid transaminase; glutamic-pyruvic aminotransferase; L-alanine aminotransferase; L-alanine transaminase; L-alanine-alpha-ketoglutarate aminotransferase; pyruvate transaminase; pyruvate-alanine aminotransferase; pyruvate-glutamate transaminase +ec:2.6.1.3 cysteine transaminase; cysteine aminotransferase; L-cysteine aminotransferase; CGT +ec:2.6.1.4 glycine transaminase; glutamic-glyoxylic transaminase; glycine aminotransferase; glyoxylate-glutamic transaminase; L-glutamate:glyoxylate aminotransferase; glyoxylate-glutamate aminotransferase +ec:2.6.1.5 tyrosine transaminase; tyrosine aminotransferase; glutamic-hydroxyphenylpyruvic transaminase; glutamic phenylpyruvic aminotransferase; L-phenylalanine 2-oxoglutarate aminotransferase; L-tyrosine aminotransferase; phenylalanine aminotransferase; phenylalanine transaminase; phenylalanine-alpha-ketoglutarate transaminase; phenylpyruvate transaminase; phenylpyruvic acid transaminase; tyrosine-alpha-ketoglutarate aminotransferase; tyrosine-alpha-ketoglutarate transaminase; tyrosine-2-ketoglutarate aminotransferase; TyrAT +ec:2.6.1.6 leucine transaminase; L-leucine aminotransferase; leucine 2-oxoglutarate transaminase; leucine aminotransferase; leucine-alpha-ketoglutarate transaminase +ec:2.6.1.7 kynurenine---oxoglutarate transaminase; kynurenine transaminase (cyclizing); kynurenine 2-oxoglutarate transaminase; kynurenine aminotransferase; L-kynurenine aminotransferase +ec:2.6.1.8 2,5-diaminovalerate transaminase; diamino-acid transaminase; diamino acid aminotransferase +ec:2.6.1.9 histidinol-phosphate transaminase; imidazolylacetolphosphate transaminase; glutamic-imidazoleacetol phosphate transaminase; histidinol phosphate aminotransferase; imidazoleacetol phosphate transaminase; L-histidinol phosphate aminotransferase; histidine:imidazoleacetol phosphate transaminase; IAP transaminase; imidazolylacetolphosphate aminotransferase +ec:2.6.1.10 Deleted entry +ec:2.6.1.11 acetylornithine transaminase; acetylornithine delta-transaminase; ACOAT; acetylornithine 5-aminotransferase; acetylornithine aminotransferase; N-acetylornithine aminotransferase; N-acetylornithine-delta-transaminase; N2-acetylornithine 5-transaminase; N2-acetyl-L-ornithine:2-oxoglutarate aminotransferase; succinylornithine aminotransferase; 2-N-acetyl-L-ornithine:2-oxoglutarate 5-aminotransferase +ec:2.6.1.12 alanine---oxo-acid transaminase; L-alanine-alpha-keto acid aminotransferase; leucine-alanine transaminase; alanine-keto acid aminotransferase; alanine-oxo acid aminotransferase +ec:2.6.1.13 ornithine aminotransferase; ornithine delta-transaminase; L-ornithine:alpha-ketoglutarate delta-aminotransferase; OAT; L-ornithine 5-aminotransferase; L-ornithine aminotransferase; ornithine 5-aminotransferase; ornithine transaminase; ornithine-alpha-ketoglutarate aminotransferase; ornithine-2-oxoacid aminotransferase; ornithine-keto acid aminotransferase; ornithine-keto acid transaminase; ornithine-ketoglutarate aminotransferase; ornithine-oxo acid aminotransferase; ornithine:alpha-oxoglutarate transaminase; ornithine---oxo-acid transaminase +ec:2.6.1.14 asparagine---oxo-acid transaminase; asparagine-keto acid aminotransferase +ec:2.6.1.15 glutamine---pyruvate transaminase; glutaminase II; L-glutamine transaminase L; glutamine-oxo-acid transaminase +ec:2.6.1.16 glutamine---fructose-6-phosphate transaminase (isomerizing); hexosephosphate aminotransferase; glucosamine-6-phosphate isomerase (glutamine-forming); glutamine-fructose-6-phosphate transaminase (isomerizing); D-fructose-6-phosphate amidotransferase; glucosaminephosphate isomerase; glucosamine 6-phosphate synthase; GlcN6P synthase +ec:2.6.1.17 succinyldiaminopimelate transaminase; succinyldiaminopimelate aminotransferase; N-succinyl-L-diaminopimelic glutamic transaminase +ec:2.6.1.18 beta-alanine---pyruvate transaminase; beta-alanine-pyruvate aminotransferase; beta-alanine-alpha-alanine transaminase +ec:2.6.1.19 4-aminobutyrate---2-oxoglutarate transaminase; beta-alanine-oxoglutarate transaminase; aminobutyrate aminotransferase (ambiguous); beta-alanine aminotransferase; beta-alanine-oxoglutarate aminotransferase; gamma-aminobutyrate aminotransaminase (ambiguous); gamma-aminobutyrate transaminase (ambiguous); gamma-aminobutyrate-alpha-ketoglutarate aminotransferase; gamma-aminobutyrate-alpha-ketoglutarate transaminase; gamma-aminobutyrate:alpha-oxoglutarate aminotransferase; gamma-aminobutyric acid aminotransferase (ambiguous); gamma-aminobutyric acid transaminase (ambiguous); gamma-aminobutyric acid-alpha-ketoglutarate transaminase; gamma-aminobutyric acid-alpha-ketoglutaric acid aminotransferase; gamma-aminobutyric acid-2-oxoglutarate transaminase; gamma-aminobutyric transaminase (ambiguous); 4-aminobutyrate aminotransferase (ambiguous); 4-aminobutyrate-2-ketoglutarate aminotransferase; 4-aminobutyrate-2-oxoglutarate aminotransferase; 4-aminobutyrate-2-oxoglutarate transaminase; 4-aminobutyric acid 2-ketoglutaric acid aminotransferase; 4-aminobutyric acid aminotransferase (ambiguous); aminobutyrate transaminase (ambiguous); GABA aminotransferase (ambiguous); GABA transaminase (ambiguous); GABA transferase (ambiguous); GABA-alpha-ketoglutarate aminotransferase; GABA-alpha-ketoglutarate transaminase; GABA-alpha-ketoglutaric acid transaminase; GABA-alpha-oxoglutarate aminotransferase; GABA-2-oxoglutarate aminotransferase; GABA-2-oxoglutarate transaminase; GABA-oxoglutarate aminotransferase; GABA-oxoglutarate transaminase; glutamate-succinic semialdehyde transaminase; GabT +ec:2.6.1.20 Deleted entry +ec:2.6.1.21 D-amino-acid transaminase; D-aspartate transaminase; D-alanine aminotransferase; D-aspartic aminotransferase; D-alanine-D-glutamate transaminase; D-alanine transaminase; D-amino acid aminotransferase +ec:2.6.1.22 (S)-3-amino-2-methylpropionate transaminase; L-3-aminoisobutyrate transaminase; beta-aminobutyric transaminase; L-3-aminoisobutyric aminotransferase; beta-aminoisobutyrate-alpha-ketoglutarate transaminase +ec:2.6.1.23 4-hydroxyglutamate transaminase; 4-hydroxyglutamate aminotransferase; 4-hydroxy-L-glutamate:2-oxoglutarate aminotransferase +ec:2.6.1.24 diiodotyrosine transaminase; diiodotyrosine aminotransferase; halogenated tyrosine aminotransferase; halogenated tyrosine transaminase +ec:2.6.1.25 Deleted entry +ec:2.6.1.26 thyroid-hormone transaminase; 3,5-dinitrotyrosine transaminase; thyroid hormone aminotransferase +ec:2.6.1.27 tryptophan transaminase; L-phenylalanine-2-oxoglutarate aminotransferase; tryptophan aminotransferase; 5-hydroxytryptophan-ketoglutaric transaminase; hydroxytryptophan aminotransferase; L-tryptophan aminotransferase; L-tryptophan transaminase +ec:2.6.1.28 tryptophan---phenylpyruvate transaminase; L-tryptophan-alpha-ketoisocaproate aminotransferase +ec:2.6.1.29 diamine transaminase; amine transaminase; amine-ketoacid transaminase; diamine aminotransferase; diamine-ketoglutaric transaminase +ec:2.6.1.30 pyridoxamine---pyruvate transaminase; pyridoxamine-pyruvic transaminase +ec:2.6.1.31 pyridoxamine---oxaloacetate transaminase +ec:2.6.1.32 valine---3-methyl-2-oxovalerate transaminase; valine---isoleucine transaminase; valine-3-methyl-2-oxovalerate aminotransferase; alanine-valine transaminase; valine-2-keto-methylvalerate aminotransferase; valine-isoleucine aminotransferase +ec:2.6.1.33 dTDP-4-amino-4,6-dideoxy-D-glucose transaminase; thymidine diphospho-4-amino-4,6-dideoxyglucose aminotransferase; thymidine diphospho-4-amino-6-deoxyglucose aminotransferase; thymidine diphospho-4-keto-6-deoxy-D-glucose transaminase; thymidine diphospho-4-keto-6-deoxy-D-glucose-glutamic transaminase; TDP-4-keto-6-deoxy-D-glucose transaminase; VioA; dTDP-4-amino-4,6-dideoxy-D-glucose:2-oxoglutarate aminotransferase +ec:2.6.1.34 UDP-N-acetylbacillosamine transaminase; uridine diphospho-4-amino-2-acetamido-2,4,6-trideoxyglucose aminotransferase; UDP-4-amino-4,6-dideoxy-N-acetyl-alpha-D-glucosamine transaminase; UDP-2-acetamido-4-amino-2,4,6-trideoxyglucose transaminase; pglE (gene name); UDP-2-acetamido-4-amino-2,4,6-trideoxyglucose:2-oxoglutarate aminotransferase +ec:2.6.1.35 glycine---oxaloacetate transaminase; glycine-oxalacetate aminotransferase +ec:2.6.1.36 L-lysine 6-transaminase; lysine 6-aminotransferase; lysine epsilon-aminotransferase; lysine epsilon-transaminase; lysine:2-ketoglutarate 6-aminotransferase; L-lysine-alpha-ketoglutarate aminotransferase; L-lysine-alpha-ketoglutarate 6-aminotransferase +ec:2.6.1.37 2-aminoethylphosphonate---pyruvate transaminase; (2-aminoethyl)phosphonate transaminase; (2-aminoethyl)phosphonate aminotransferase; (2-aminoethyl)phosphonic acid aminotransferase; 2-aminoethylphosphonate-pyruvate aminotransferase; 2-aminoethylphosphonate aminotransferase; 2-aminoethylphosphonate transaminase; AEP transaminase; AEPT +ec:2.6.1.38 histidine transaminase; histidine aminotransferase; histidine-2-oxoglutarate aminotransferase +ec:2.6.1.39 2-aminoadipate transaminase; alpha-aminoadipate aminotransferase; 2-aminoadipate aminotransferase; 2-aminoadipic aminotransferase; glutamic-ketoadipic transaminase; glutamate-alpha-ketoadipate transaminase +ec:2.6.1.40 (R)-3-amino-2-methylpropionate---pyruvate transaminase; D-3-aminoisobutyrate---pyruvate transaminase; beta-aminoisobutyrate-pyruvate aminotransferase; D-3-aminoisobutyrate-pyruvate aminotransferase; D-3-aminoisobutyrate-pyruvate transaminase; (R)-3-amino-2-methylpropionate transaminase; D-beta-aminoisobutyrate:pyruvate aminotransferase +ec:2.6.1.41 D-methionine---pyruvate transaminase; D-methionine transaminase; D-methionine aminotransferase +ec:2.6.1.42 branched-chain-amino-acid transaminase; transaminase B; branched-chain amino acid aminotransferase; branched-chain amino acid-glutamate transaminase; branched-chain aminotransferase; L-branched chain amino acid aminotransferase; glutamate-branched-chain amino acid transaminase +ec:2.6.1.43 aminolevulinate transaminase; aminolevulinate aminotransferase; gamma,delta-dioxovalerate aminotransferase; gamma,delta-dioxovaleric acid transaminase; 4,5-dioxovalerate aminotransferase; 4,5-dioxovaleric acid transaminase; 4,5-dioxovaleric transaminase; 5-aminolevulinic acid transaminase; alanine-gamma,delta-dioxovalerate aminotransferase; alanine-dioxovalerate aminotransferase; alanine:4,5-dioxovalerate aminotransferase; aminolevulinic acid transaminase; dioxovalerate transaminase; L-alanine-4,5-dioxovalerate aminotransferase; L-alanine:4,5-dioxovaleric acid transaminase; L-alanine:dioxovalerate transaminase; DOVA transaminase; 4,5-dioxovaleric acid aminotransferase +ec:2.6.1.44 alanine---glyoxylate transaminase; AGT; alanine-glyoxylate aminotransferase; alanine-glyoxylic aminotransferase; L-alanine-glycine transaminase +ec:2.6.1.45 serine---glyoxylate transaminase +ec:2.6.1.46 diaminobutyrate---pyruvate transaminase; diaminobutyrate-pyruvate aminotransferase; L-diaminobutyric acid transaminase +ec:2.6.1.47 alanine---oxomalonate transaminase; alanine-oxomalonate aminotransferase; L-alanine-ketomalonate transaminase; alanine-ketomalonate (mesoxalate) transaminase +ec:2.6.1.48 5-aminovalerate transaminase; 5-aminovalerate aminotransferase; delta-aminovalerate aminotransferase; delta-aminovalerate transaminase +ec:2.6.1.49 dihydroxyphenylalanine transaminase; dopa transaminase; dihydroxyphenylalanine aminotransferase; aspartate-DOPP transaminase (ADT); L-dopa transaminase; dopa aminotransferase; glutamate-DOPP transaminase (GDT); phenylalanine-DOPP transaminase (PDT); DOPA 2-oxoglutarate aminotransferase; DOPAATS +ec:2.6.1.50 glutamine---scyllo-inositol transaminase; glutamine scyllo-inosose aminotransferase; L-glutamine-keto-scyllo-inositol aminotransferase; glutamine-scyllo-inosose transaminase; L-glutamine-scyllo-inosose transaminase +ec:2.6.1.51 serine---pyruvate transaminase; SPT; hydroxypyruvate:L-alanine transaminase +ec:2.6.1.52 phosphoserine transaminase; PSAT; phosphoserine aminotransferase; 3-phosphoserine aminotransferase; hydroxypyruvic phosphate-glutamic transaminase; L-phosphoserine aminotransferase; phosphohydroxypyruvate transaminase; phosphohydroxypyruvic-glutamic transaminase; 3-O-phospho-L-serine:2-oxoglutarate aminotransferase; SerC; PdxC; 3PHP transaminase +ec:2.6.1.53 Transferred to 1.4.1.13 +ec:2.6.1.54 pyridoxamine-phosphate transaminase; pyridoxamine phosphate aminotransferase; pyridoxamine 5'-phosphate-alpha-ketoglutarate transaminase; pyridoxamine 5'-phosphate transaminase +ec:2.6.1.55 taurine---2-oxoglutarate transaminase; taurine aminotransferase; taurine transaminase; taurine---alpha-ketoglutarate aminotransferase; taurine---glutamate transaminase +ec:2.6.1.56 1D-1-guanidino-3-amino-1,3-dideoxy-scyllo-inositol transaminase; guanidinoaminodideoxy-scyllo-inositol-pyruvate aminotransferase; L-alanine-N-amidino-3-(or 5-)keto-scyllo-inosamine transaminase +ec:2.6.1.57 aromatic-amino-acid transaminase; aromatic amino acid aminotransferase; aromatic aminotransferase; ArAT +ec:2.6.1.58 phenylalanine(histidine) transaminase; phenylalanine (histidine) aminotransferase; phenylalanine(histidine):pyruvate aminotransferase; histidine:pyruvate aminotransferase; L-phenylalanine(L-histidine):pyruvate aminotransferase +ec:2.6.1.59 dTDP-4-amino-4,6-dideoxygalactose transaminase; thymidine diphosphoaminodideoxygalactose aminotransferase; thymidine diphosphate 4-keto-6-deoxy-D-glucose transaminase; WecE; dTDP-4,6-dideoxy-D-galactose:2-oxoglutarate aminotransferase; dTDP-4,6-dideoxy-alpha-D-galactose:2-oxoglutarate aminotransferase +ec:2.6.1.60 aromatic-amino-acid---glyoxylate transaminase +ec:2.6.1.61 Deleted entry +ec:2.6.1.62 adenosylmethionine---8-amino-7-oxononanoate transaminase; 7,8-diaminonanoate transaminase; 7,8-diaminononanoate transaminase; DAPA transaminase (ambiguous); 7,8-diaminopelargonic acid aminotransferase; DAPA aminotransferase (ambiguous); 7-keto-8-aminopelargonic acid; diaminopelargonate synthase; 7-keto-8-aminopelargonic acid aminotransferase +ec:2.6.1.63 kynurenine---glyoxylate transaminase; kynurenine-glyoxylate aminotransferase +ec:2.6.1.64 glutamine---phenylpyruvate transaminase; glutamine transaminase K; glutamine-phenylpyruvate aminotransferase +ec:2.6.1.65 N6-acetyl-beta-lysine transaminase; epsilon-acetyl-beta-lysine aminotransferase +ec:2.6.1.66 valine---pyruvate transaminase; transaminase C; valine-pyruvate aminotransferase; alanine-oxoisovalerate aminotransferase +ec:2.6.1.67 2-aminohexanoate transaminase; norleucine transaminase; norleucine (leucine) aminotransferase; leucine L-norleucine: 2-oxoglutarate aminotransferase +ec:2.6.1.68 Deleted entry +ec:2.6.1.69 Deleted entry +ec:2.6.1.70 aspartate---phenylpyruvate transaminase; aspartate-phenylpyruvate aminotransferase +ec:2.6.1.71 lysine---pyruvate 6-transaminase; lysine-pyruvate aminotransferase; Lys-AT +ec:2.6.1.72 D-4-hydroxyphenylglycine transaminase; D-hydroxyphenylglycine aminotransferase +ec:2.6.1.73 methionine---glyoxylate transaminase; methionine-glyoxylate aminotransferase; MGAT +ec:2.6.1.74 cephalosporin-C transaminase; cephalosporin C aminotransferase; L-alanine:cephalosporin-C aminotransferase +ec:2.6.1.75 cysteine-conjugate transaminase; cysteine conjugate aminotransferase; cysteine-conjugate alpha-ketoglutarate transaminase (CAT-1) +ec:2.6.1.76 diaminobutyrate---2-oxoglutarate transaminase; L-2,4-diaminobutyrate:2-ketoglutarate 4-aminotransferase; 2,4-diaminobutyrate 4-aminotransferase; diaminobutyrate aminotransferase; DABA aminotransferase; DAB aminotransferase; EctB; diaminibutyric acid aminotransferase; L-2,4-diaminobutyrate:2-oxoglutarate 4-aminotransferase +ec:2.6.1.77 taurine---pyruvate aminotransferase; Tpa +ec:2.6.1.78 aspartate---prephenate aminotransferase; prephenate transaminase (ambiguous); PAT (ambiguous); prephenate aspartate aminotransferase; L-aspartate:prephenate aminotransferase +ec:2.6.1.79 glutamate---prephenate aminotransferase; prephenate transaminase (ambiguous); PAT (ambiguous); L-glutamate:prephenate aminotransferase +ec:2.6.1.80 nicotianamine aminotransferase; NAAT; NAAT-I; NAAT-II; NAAT-III; nicotianamine transaminase +ec:2.6.1.81 succinylornithine transaminase; succinylornithine aminotransferase; N2-succinylornithine 5-aminotransferase; AstC; SOAT; 2-N-succinyl-L-ornithine:2-oxoglutarate 5-aminotransferase +ec:2.6.1.82 putrescine---2-oxoglutarate transaminase; putrescine-alpha-ketoglutarate transaminase; YgjG; putrescine:alpha-ketoglutarate aminotransferase; PAT (ambiguous); putrescine transaminase (ambiguous); putrescine aminotransferase (ambiguous); butane-1,4-diamine:2-oxoglutarate aminotransferase +ec:2.6.1.83 LL-diaminopimelate aminotransferase; LL-diaminopimelate transaminase; LL-DAP aminotransferase; LL-DAP-AT +ec:2.6.1.84 arginine---pyruvate transaminase; arginine:pyruvate transaminase; AruH; ATase +ec:2.6.1.85 aminodeoxychorismate synthase; ADC synthase; 4-amino-4-deoxychorismate synthase; PabAB; chorismate:L-glutamine amido-ligase (incorrect) +ec:2.6.1.86 2-amino-4-deoxychorismate synthase; ADIC synthase; 2-amino-2-deoxyisochorismate synthase; SgcD +ec:2.6.1.87 UDP-4-amino-4-deoxy-L-arabinose aminotransferase; UDP-(beta-L-threo-pentapyranosyl-4''-ulose diphosphate) aminotransferase; UDP-4-amino-4-deoxy-L-arabinose---oxoglutarate aminotransferase; UDP-Ara4O aminotransferase; UDP-L-Ara4N transaminase +ec:2.6.1.88 methionine transaminase; methionine-oxo-acid transaminase +ec:2.6.1.89 dTDP-3-amino-3,6-dideoxy-alpha-D-glucopyranose transaminase; TylB; TDP-3-keto-6-deoxy-D-glucose 3-aminotransferase; TDP-3-dehydro-6-deoxy-D-glucose 3-aminotransferase; dTDP-3-keto-6-deoxy-D-glucose 3-aminotransferase; dTDP-3-dehydro-6-deoxy-D-glucose 3-aminotransferase +ec:2.6.1.90 dTDP-3-amino-3,6-dideoxy-alpha-D-galactopyranose transaminase; dTDP-6-deoxy-D-xylohex-3-uloseaminase; FdtB; TDP-3-keto-6-deoxy-D-galactose-3-aminotransferase; RavAMT; TDP-3-keto-6-deoxy-D-galactose 3-aminotransferase; TDP-3-dehydro-6-deoxy-D-galactose 3-aminotransferase +ec:2.6.1.91 Deleted entry +ec:2.6.1.92 UDP-4-amino-4,6-dideoxy-N-acetyl-beta-L-altrosamine transaminase; PseC; UDP-4-amino-4,6-dideoxy-N-acetyl-beta-L-altrosamine:2-oxoglutarate aminotransferase; UDP-beta-L-threo-pentapyranos-4-ulose transaminase; UDP-4-dehydro-6-deoxy-D-glucose transaminase +ec:2.6.1.93 neamine transaminase; glutamate---6'-dehydroparomamine aminotransferase; btrB (gene name); neoN (gene name); kacL (gene name) +ec:2.6.1.94 2'-deamino-2'-hydroxyneamine transaminase; kacL (gene name) +ec:2.6.1.95 neomycin C transaminase; neoN (gene name) +ec:2.6.1.96 4-aminobutyrate---pyruvate transaminase; aminobutyrate aminotransferase (ambiguous); gamma-aminobutyrate aminotransaminase (ambiguous); gamma-aminobutyrate transaminase (ambiguous); gamma-aminobutyric acid aminotransferase (ambiguous); gamma-aminobutyric acid pyruvate transaminase; gamma-aminobutyric acid transaminase (ambiguous); gamma-aminobutyric transaminase (ambiguous); 4-aminobutyrate aminotransferase (ambiguous); 4-aminobutyric acid aminotransferase (ambiguous); aminobutyrate transaminase (ambiguous); GABA aminotransferase (ambiguous); GABA transaminase (ambiguous); GABA transferase (ambiguous); POP2 (gene name) +ec:2.6.1.97 archaeosine synthase; ArcS; TgtA2; MJ1022 (gene name); glutamine:preQ0-tRNA amidinotransferase (incorrect) +ec:2.6.1.98 UDP-2-acetamido-2-deoxy-ribo-hexuluronate aminotransferase; WbpE; WlbC +ec:2.6.1.99 L-tryptophan---pyruvate aminotransferase; TAA1 (gene name); vt2 (gene name) +ec:2.6.1.100 L-glutamine:2-deoxy-scyllo-inosose aminotransferase; btrR (gene name); neoB (gene name); kanB (gene name) +ec:2.6.1.101 L-glutamine:3-amino-2,3-dideoxy-scyllo-inosose aminotransferase +ec:2.6.1.102 GDP-perosamine synthase; RfbE; GDP-4-keto-6-deoxy-D-mannose-4-aminotransferase; GDP-perosamine synthetase; PerA; GDP-4-amino-4,6-dideoxy-alpha-D-mannose:2-oxoglutarate aminotransferase +ec:2.6.1.103 (S)-3,5-dihydroxyphenylglycine transaminase; HpgT +ec:2.6.1.104 3-dehydro-glucose-6-phosphate---glutamate transaminase; 3-oxo-glucose-6-phosphate:glutamate aminotransferase; ntdA (gene name) +ec:2.6.1.105 lysine---8-amino-7-oxononanoate transaminase; DAPA aminotransferase (ambiguous); bioA (gene name) (ambiguous); bioK (gene name) +ec:2.6.1.106 dTDP-3-amino-3,4,6-trideoxy-alpha-D-glucose transaminase; desV (gene name); megDII (gene name); eryCI (gene name) +ec:2.6.1.107 beta-methylphenylalanine transaminase; TyrB +ec:2.6.1.108 (5-formylfuran-3-yl)methyl phosphate transaminase; mfnC (gene name); [5-(hydroxymethyl)furan-3-yl]methyl phosphate transaminase +ec:2.6.1.109 8-amino-3,8-dideoxy-alpha-D-manno-octulosonate transaminase; kdnA (gene name) +ec:2.6.1.110 dTDP-4-dehydro-2,3,6-trideoxy-D-glucose 4-aminotransferase; SpnR; TDP-4-keto-2,3,6-trideoxy-D-glucose 4-aminotransferase +ec:2.6.1.111 3-aminobutanoyl-CoA transaminase; kat (gene name); acyl-CoA beta-transaminase +ec:2.6.1.112 (S)-ureidoglycine---glyoxylate transaminase; (S)-ureidoglycine---glyoxylate aminotransferase; UGXT; PucG +ec:2.6.1.113 putrescine---pyruvate transaminase; spuC (gene name) +ec:2.6.1.114 8-demethyl-8-aminoriboflavin-5'-phosphate synthase; rosB (gene name) +ec:2.6.1.115 5-hydroxydodecatetraenal 1-aminotransferase; cpkG (gene name) +ec:2.6.1.116 6-aminohexanoate aminotransferase; nylD (gene name) +ec:2.6.1.117 L-glutamine---4-(methylsulfanyl)-2-oxobutanoate aminotransferase; mtnE (gene name); Solyc11g013170.1 (locus name) +ec:2.6.1.118 [amino-group carrier protein]-gamma-(L-lysyl)-L-glutamate aminotransferase; lysJ (gene name) +ec:2.6.1.119 vanillin aminotransferase; VAMT (gene name) +ec:2.6.1.120 beta-alanine---2-oxoglutarate transaminase; pydD (gene name); beta-alanine aminotransferase +ec:2.6.1.121 8-amino-7-oxononanoate carboxylating dehydrogenase; bioU (gene name) +ec:2.6.1.122 UDP-N-acetyl-3-dehydro-alpha-D-glucosamine 3-aminotranferase; gnnB (gene name) +ec:2.6.1.123 4-amino-4-deoxychorismate synthase (2-amino-4-deoxychorismate-forming); ADCS (ambiguous); ADC synthase (ambiguous); pabAB (gene names) +ec:2.6.1.124 [amino-group carrier protein]-gamma-(L-ornithyl)-L-glutamate aminotransferase; lysJ (gene name) +ec:2.6.2.1 Transferred to 2.1.4.1 +ec:2.6.3.1 oximinotransferase; transoximinase; oximase; pyruvate-acetone oximinotransferase; transoximase +ec:2.6.99.1 dATP(dGTP)---DNA purinetransferase +ec:2.6.99.2 pyridoxine 5'-phosphate synthase; pyridoxine 5-phosphate phospho lyase; PNP synthase; PdxJ +ec:2.6.99.3 O-ureido-L-serine synthase; dcsD (gene name) +ec:2.6.99.4 Transferred to 2.3.1.234 +ec:2.7.1.1 hexokinase; hexokinase type IV glucokinase; hexokinase D; hexokinase type IV; hexokinase (phosphorylating); ATP-dependent hexokinase; glucose ATP phosphotransferase +ec:2.7.1.2 glucokinase; glucokinase (phosphorylating) +ec:2.7.1.3 ketohexokinase; ketohexokinase (phosphorylating) +ec:2.7.1.4 fructokinase; fructokinase (phosphorylating); D-fructokinase; D-fructose(D-mannose)kinase +ec:2.7.1.5 rhamnulokinase; RhuK; rhamnulokinase (phosphorylating); L-rhamnulokinase; L-rhamnulose kinase; rhamnulose kinase +ec:2.7.1.6 galactokinase; galactokinase (phosphorylating); ATP:D-galactose-1-phosphotransferase +ec:2.7.1.7 mannokinase; mannokinase (phosphorylating); D-fructose (D-mannose) kinase +ec:2.7.1.8 glucosamine kinase; glucosamine kinase (phosphorylating); ATP:2-amino-2-deoxy-D-glucose-6-phosphotransferase; aminodeoxyglucose kinase; ATP:D-glucosamine phosphotransferase +ec:2.7.1.9 Deleted entry +ec:2.7.1.10 phosphoglucokinase; glucose-phosphate kinase; phosphoglucokinase (phosphorylating); ATP:D-glucose-1-phosphate 6-phosphotransferase +ec:2.7.1.11 6-phosphofructokinase; phosphohexokinase; phosphofructokinase I; phosphofructokinase (phosphorylating); 6-phosphofructose 1-kinase; ATP-dependent phosphofructokinase; D-fructose-6-phosphate 1-phosphotransferase; fructose 6-phosphate kinase; fructose 6-phosphokinase; nucleotide triphosphate-dependent phosphofructokinase; phospho-1,6-fructokinase; PFK +ec:2.7.1.12 gluconokinase; gluconokinase (phosphorylating); gluconate kinase +ec:2.7.1.13 dehydrogluconokinase; ketogluconokinase; 2-ketogluconate kinase; ketogluconokinase (phosphorylating); 2-ketogluconokinase +ec:2.7.1.14 sedoheptulokinase; heptulokinase; sedoheptulokinase (phosphorylating) +ec:2.7.1.15 ribokinase; deoxyribokinase; ribokinase (phosphorylating); D-ribokinase +ec:2.7.1.16 ribulokinase; ribulokinase (phosphorylating); L-ribulokinase +ec:2.7.1.17 xylulokinase; xylulokinase (phosphorylating); D-xylulokinase +ec:2.7.1.18 phosphoribokinase; phosphoribokinase (phosphorylating) +ec:2.7.1.19 phosphoribulokinase; phosphopentokinase; ribulose-5-phosphate kinase; phosphopentokinase; phosphoribulokinase (phosphorylating); 5-phosphoribulose kinase; ribulose phosphate kinase; PKK; PRuK; PRK +ec:2.7.1.20 adenosine kinase; adenosine kinase (phosphorylating) +ec:2.7.1.21 thymidine kinase; thymidine kinase (phosphorylating); 2'-deoxythymidine kinase; deoxythymidine kinase (phosphorylating) +ec:2.7.1.22 ribosylnicotinamide kinase; ribosylnicotinamide kinase (phosphorylating); ATP:N-ribosylnicotinamide 5'-phosphotransferase +ec:2.7.1.23 NAD+ kinase; DPN kinase; nicotinamide adenine dinucleotide kinase (phosphorylating); nicotinamide adenine dinucleotide kinase; NAD kinase; NADK +ec:2.7.1.24 dephospho-CoA kinase; dephosphocoenzyme A kinase (phosphorylating); 3'-dephospho-CoA kinase; dephosphocoenzyme A kinase; ATP:dephospho-CoA 3'-phosphotransferase +ec:2.7.1.25 adenylyl-sulfate kinase; adenylylsulfate kinase (phosphorylating); 5'-phosphoadenosine sulfate kinase; adenosine 5'-phosphosulfate kinase; adenosine phosphosulfate kinase; adenosine phosphosulfokinase; adenosine-5'-phosphosulfate-3'-phosphokinase; APS kinase +ec:2.7.1.26 riboflavin kinase; flavokinase; FK; RFK +ec:2.7.1.27 erythritol kinase (D-erythritol 4-phosphate-forming); erythritol kinase (phosphorylating) (ambiguous) +ec:2.7.1.28 triokinase; triose kinase +ec:2.7.1.29 glycerone kinase; dihydroxyacetone kinase; acetol kinase; acetol kinase (phosphorylating) +ec:2.7.1.30 glycerol kinase; glycerokinase; GK; ATP:glycerol-3-phosphotransferase; glycerol kinase (phosphorylating); glyceric kinase +ec:2.7.1.31 glycerate 3-kinase; glycerate kinase (phosphorylating) (ambiguous); D-glycerate 3-kinase; D-glycerate kinase (ambiguous); glycerate-kinase (ambiguous); GK (ambiguous); D-glyceric acid kinase (ambiguous); ATP:(R)-glycerate 3-phosphotransferase +ec:2.7.1.32 choline kinase; choline kinase (phosphorylating); choline phosphokinase; choline-ethanolamine kinase +ec:2.7.1.33 pantothenate kinase; pantothenate kinase (phosphorylating); pantothenic acid kinase; ATP:pantothenate 4'-phosphotransferase; D-pantothenate kinase +ec:2.7.1.34 pantetheine kinase; pantetheine kinase (phosphorylating) +ec:2.7.1.35 pyridoxal kinase; pyridoxal kinase (phosphorylating); pyridoxal 5-phosphate-kinase; pyridoxal phosphokinase; pyridoxine kinase +ec:2.7.1.36 mevalonate kinase; mevalonate kinase (phosphorylating); mevalonate phosphokinase; mevalonic acid kinase; mevalonic kinase; mevalonate 5-phosphotransferase ; MVA kinase; ATP:mevalonate 5-phosphotransferase +ec:2.7.1.37 Transferred to 2.7.11.1 and 2.7.11.8 and 2.7.11.9 and 2.7.11.10 and 2.7.11.11 and 2.7.11.12 and 2.7.11.13 and 2.7.11.21 and 2.7.11.22 and 2.7.11.24 and 2.7.11.25 and 2.7.11.30 and 2.7.12.1 +ec:2.7.1.38 Transferred to 2.7.11.19 +ec:2.7.1.39 homoserine kinase; homoserine kinase (phosphorylating); HSK +ec:2.7.1.40 pyruvate kinase; phosphoenolpyruvate kinase; phosphoenol transphosphorylase +ec:2.7.1.41 glucose-1-phosphate phosphodismutase +ec:2.7.1.42 riboflavin phosphotransferase; riboflavine phosphotransferase; glucose-1-phosphate phosphotransferase; G-1-P phosphotransferase; D-glucose-1-phosphate:riboflavin 5'-phosphotransferase +ec:2.7.1.43 glucuronokinase; glucuronokinase (phosphorylating); glucurono-glucuronokinase +ec:2.7.1.44 galacturonokinase; galacturonokinase (phosphorylating) D-galacturonic acid kinase +ec:2.7.1.45 2-dehydro-3-deoxygluconokinase; 2-keto-3-deoxygluconokinase; 2-keto-3-deoxy-D-gluconic acid kinase; 2-keto-3-deoxygluconokinase (phosphorylating); 2-keto-3-deoxygluconate kinase; ketodeoxygluconokinase +ec:2.7.1.46 L-arabinokinase; L-arabinokinase (phosphorylating) +ec:2.7.1.47 D-ribulokinase; D-ribulokinase (phosphorylating) +ec:2.7.1.48 uridine/cytidine kinase; UCK (gene name); URK1 (gene name); pyrimidine ribonucleoside kinase; uridine-cytidine kinase; uridine kinase (phosphorylating); uridine phosphokinase; ATP:uridine 5'-phosphotransferase; uridine kinase +ec:2.7.1.49 hydroxymethylpyrimidine kinase; hydroxymethylpyrimidine kinase (phosphorylating) +ec:2.7.1.50 hydroxyethylthiazole kinase; hydroxyethylthiazole kinase (phosphorylating); 4-methyl-5-(beta-hydroxyethyl)thiazole kinase +ec:2.7.1.51 L-fuculokinase; L-fuculokinase (phosphorylating); L-fuculose kinase +ec:2.7.1.52 fucokinase; fucokinase (phosphorylating); fucose kinase; L-fucose kinase; L-fucokinase; ATP:6-deoxy-L-galactose 1-phosphotransferase; ATP:L-fucose 1-phosphotransferase +ec:2.7.1.53 L-xylulokinase; L-xylulokinase (phosphorylating) +ec:2.7.1.54 D-arabinokinase; D-arabinokinase (phosphorylating) +ec:2.7.1.55 allose kinase; allokinase (phosphorylating); allokinase; D-allokinase; D-allose-6-kinase +ec:2.7.1.56 1-phosphofructokinase; fructose-1-phosphate kinase; 1-phosphofructokinase (phosphorylating); D-fructose-1-phosphate kinase; fructose 1-phosphate kinase; phosphofructokinase 1 +ec:2.7.1.57 Deleted entry +ec:2.7.1.58 2-dehydro-3-deoxygalactonokinase; 2-keto-3-deoxygalactonokinase; 2-keto-3-deoxygalactonate kinase (phosphorylating); 2-oxo-3-deoxygalactonate kinase +ec:2.7.1.59 N-acetylglucosamine kinase; acetylglucosamine kinase (phosphorylating); ATP:2-acetylamino-2-deoxy-D-glucose 6-phosphotransferase; 2-acetylamino-2-deoxy-D-glucose kinase; acetylaminodeoxyglucokinase +ec:2.7.1.60 N-acylmannosamine kinase; acylmannosamine kinase (phosphorylating); acetylamidodeoxymannokinase; acetylmannosamine kinase; acylaminodeoxymannokinase; acylmannosamine kinase; N-acyl-D-mannosamine kinase; N-acetylmannosamine kinase; ATP:N-acetylmannosamine 6-phosphotransferase +ec:2.7.1.61 acyl-phosphate---hexose phosphotransferase; hexose phosphate:hexose phosphotransferase +ec:2.7.1.62 phosphoramidate---hexose phosphotransferase; phosphoramidate-hexose transphosphorylase; phosphoramidic-hexose transphosphorylase; phosphoramidate:hexose 1-phosphotransferase +ec:2.7.1.63 polyphosphate---glucose phosphotransferase; polyphosphate glucokinase; polyphosphate-D-(+)-glucose-6-phosphotransferase; polyphosphate-glucose 6-phosphotransferase +ec:2.7.1.64 inositol 3-kinase; inositol-1-kinase (phosphorylating); myoinositol kinase; myo-inositol 1-kinase +ec:2.7.1.65 scyllo-inosamine 4-kinase; scyllo-inosamine kinase (phosphorylating); scyllo-inosamine kinase; ATP:inosamine phosphotransferase +ec:2.7.1.66 undecaprenol kinase; isoprenoid alcohol kinase; isoprenoid alcohol phosphokinase; C55-isoprenoid alcohol phosphokinase; isoprenoid alcohol kinase (phosphorylating); C55-isoprenoid alcohol kinase; C55-isoprenyl alcohol phosphokinase; polyisoprenol kinase +ec:2.7.1.67 1-phosphatidylinositol 4-kinase; phosphatidylinositol kinase (phosphorylating); phosphatidylinositol 4-kinase; phosphatidylinositol kinase; type II phosphatidylinositol kinase; PI kinase; PI 4-kinase +ec:2.7.1.68 1-phosphatidylinositol-4-phosphate 5-kinase; diphosphoinositide kinase; PIP kinase; phosphatidylinositol 4-phosphate kinase; phosphatidylinositol-4-phosphate 5-kinase; type I PIP kinase +ec:2.7.1.69 Transferred to 2.7.1.191 and 2.7.1.192 and 2.7.1.193 and 2.7.1.194 and 2.7.1.195 and 2.7.1.196 and 2.7.1.197 and 2.7.1.198 and 2.7.1.199 and 2.7.1.200 and 2.7.1.201 and 2.7.1.202 and 2.7.1.203 and 2.7.1.204 and 2.7.1.205 and 2.7.1.206 and 2.7.1.207 and 2.7.1.208 +ec:2.7.1.70 Deleted entry +ec:2.7.1.71 shikimate kinase; shikimate kinase (phosphorylating); shikimate kinase II +ec:2.7.1.72 streptomycin 6-kinase; streptidine kinase; SM 6-kinase; streptomycin 6-kinase (phosphorylating); streptidine kinase (phosphorylating); streptomycin 6-O-phosphotransferase; streptomycin 6-phosphotransferase +ec:2.7.1.73 inosine kinase; inosine-guanosine kinase; inosine kinase (phosphorylating) +ec:2.7.1.74 deoxycytidine kinase; deoxycytidine kinase (phosphorylating); 2'-deoxycytidine kinase; Ara-C kinase; arabinofuranosylcytosine kinase; deoxycytidine-cytidine kinase +ec:2.7.1.75 Deleted entry +ec:2.7.1.76 2'-deoxyadenosine kinase; purine-deoxyribonucleoside kinase; deoxyadenosine kinase (phosphorylating) (ambiguous); purine-deoxyribonucleoside kinase (ambiguous); deoxyadenosine kinase (ambiguous); ATP:deoxyadenosine 5'-phosphotransferase (ambiguous) +ec:2.7.1.77 nucleoside phosphotransferase; nonspecific nucleoside phosphotransferase; nucleotide:3'-deoxynucleoside 5'-phosphotransferase +ec:2.7.1.78 polynucleotide 5'-hydroxyl-kinase; ATP:5'-dephosphopolynucleotide 5'-phosphatase; PNK; polynucleotide 5'-hydroxyl kinase (phosphorylating); 5'-hydroxyl polynucleotide kinase; 5'-hydroxyl polyribonucleotide kinase; 5'-hydroxyl RNA kinase; DNA 5'-hydroxyl kinase; DNA kinase; polynucleotide kinase; polynucleotide 5'-hydroxy-kinase +ec:2.7.1.79 diphosphate---glycerol phosphotransferase; PPi-glycerol phosphotransferase; pyrophosphate-glycerol phosphotransferase +ec:2.7.1.80 diphosphate---serine phosphotransferase; pyrophosphate-serine phosphotransferase; pyrophosphate-L-serine phosphotransferase +ec:2.7.1.81 hydroxylysine kinase; hydroxylysine kinase (phosphorylating); guanosine triphosphate:5-hydroxy-L-lysine O-phosphotransferase +ec:2.7.1.82 ethanolamine kinase; ethanolamine kinase (phosphorylating); ethanolamine phosphokinase +ec:2.7.1.83 pseudouridine kinase; pseudouridine kinase (phosphorylating) +ec:2.7.1.84 alkylglycerone kinase; alkyldihydroxyacetone kinase (phosphorylating); alkyldihydroxyacetone kinase +ec:2.7.1.85 beta-glucoside kinase; beta-D-glucoside kinase (phosphorylating) +ec:2.7.1.86 NADH kinase; reduced nicotinamide adenine dinucleotide kinase (phosphorylating); DPNH kinase; reduced diphosphopyridine nucleotide kinase; NADH kinase +ec:2.7.1.87 streptomycin 3''-kinase; streptomycin 3''-kinase (phosphorylating); streptomycin 3''-phosphotransferase +ec:2.7.1.88 dihydrostreptomycin-6-phosphate 3'alpha-kinase; dihydrostreptomycin 6-phosphate kinase (phosphorylating); ATP:dihydrostreptomycin-6-P 3'alpha-phosphotransferase +ec:2.7.1.89 thiamine kinase; thiamin kinase (phosphorylating); thiamin phosphokinase; ATP:thiamin phosphotransferase; thiamin kinase +ec:2.7.1.90 diphosphate---fructose-6-phosphate 1-phosphotransferase; 6-phosphofructokinase (pyrophosphate); pyrophosphate-fructose 6-phosphate 1-phosphotransferase; inorganic pyrophosphate-dependent phosphofructokinase; inorganic pyrophosphate-phosphofructokinase; pyrophosphate-dependent phosphofructo-1-kinase; pyrophosphate-fructose 6-phosphate phosphotransferase +ec:2.7.1.91 sphingosine kinase; SPHK1 (gene name); SPHK2 (gene name); dihydrosphingosine kinase; dihydrosphingosine kinase (phosphorylating); sphingosine kinase (phosphorylating); sphingoid base kinase; sphinganine kinase; ATP:sphinganine 1-phosphotransferase +ec:2.7.1.92 5-dehydro-2-deoxygluconokinase; 5-keto-2-deoxygluconokinase; 5-keto-2-deoxyglucono kinase (phosphorylating); DKH kinase +ec:2.7.1.93 alkylglycerol kinase; 1-alkylglycerol kinase (phosphorylating); ATP-alkylglycerol phosphotransferase; alkylglycerol phosphotransferase; ATP: 1-alkyl-sn-glycerol phosphotransferase +ec:2.7.1.94 acylglycerol kinase; monoacylglycerol kinase; monoacylglycerol kinase (phosphorylating); sn-2-monoacylglycerol kinase; MGK; monoglyceride kinase; monoglyceride phosphokinase +ec:2.7.1.95 kanamycin kinase; neomycin-kanamycin phosphotransferase +ec:2.7.1.96 Deleted entry +ec:2.7.1.97 Deleted entry +ec:2.7.1.98 Deleted entry +ec:2.7.1.99 Transferred to 2.7.11.2 +ec:2.7.1.100 S-methyl-5-thioribose kinase; 5-methylthioribose kinase (phosphorylating); methylthioribose kinase; 5-methylthioribose kinase; ATP:S5-methyl-5-thio-D-ribose 1-phosphotransferase +ec:2.7.1.101 tagatose kinase; AtuFK +ec:2.7.1.102 hamamelose kinase; hamamelose kinase (phosphorylating); hamamelosekinase (ATP: hamamelose 2'-phosphotransferase); ATP/hamamelose 2'-phosphotransferase +ec:2.7.1.103 viomycin kinase; viomycin phosphotransferase; capreomycin phosphotransferase +ec:2.7.1.104 Transferred to 2.7.99.1 +ec:2.7.1.105 6-phosphofructo-2-kinase; phosphofructokinase 2; 6-phosphofructose 2-kinase; 6-phosphofructo-2-kinase (phosphorylating); fructose 6-phosphate 2-kinase; ATP:D-fructose-6-phosphate 2-phosphotransferase +ec:2.7.1.106 glucose-1,6-bisphosphate synthase; glucose 1,6-diphosphate synthase; glucose-1,6-bisphosphate synthetase; 3-phospho-D-glyceroyl-phosphate:D-glucose-1-phosphate 6-phosphotransferase +ec:2.7.1.107 diacylglycerol kinase (ATP); diglyceride kinase (ambiguous); 1,2-diacylglycerol kinase (phosphorylating) (ambiguous); 1,2-diacylglycerol kinase (ambiguous); sn-1,2-diacylglycerol kinase (ambiguous); DG kinase (ambiguous); DGK (ambiguous); ATP:diacylglycerol phosphotransferase; arachidonoyl-specific diacylglycerol kinase; diacylglycerol:ATP kinase; ATP:1,2-diacylglycerol 3-phosphotransferase; diacylglycerol kinase (ATP dependent) +ec:2.7.1.108 dolichol kinase; dolichol phosphokinase +ec:2.7.1.109 Transferred to 2.7.11.31 +ec:2.7.1.110 Transferred to 2.7.11.3 +ec:2.7.1.111 Deleted entry +ec:2.7.1.112 Transferred to 2.7.10.2 +ec:2.7.1.113 deoxyguanosine kinase; deoxyguanosine kinase (phosphorylating); (dihydroxypropoxymethyl)guanine kinase; 2'-deoxyguanosine kinase; NTP-deoxyguanosine 5'-phosphotransferase +ec:2.7.1.114 AMP---thymidine kinase; adenylate-nucleoside phosphotransferase +ec:2.7.1.115 Transferred to 2.7.11.4 +ec:2.7.1.116 Transferred to 2.7.11.5 +ec:2.7.1.117 Transferred to 2.7.11.18 +ec:2.7.1.118 ADP---thymidine kinase; ADP:dThd phosphotransferase; adenosine diphosphate-thymidine phosphotransferase +ec:2.7.1.119 hygromycin-B 7''-O-kinase; hygromycin B phosphotransferase; hygromycin-B kinase (ambiguous) +ec:2.7.1.120 Transferred to 2.7.11.17 +ec:2.7.1.121 phosphoenolpyruvate---glycerone phosphotransferase +ec:2.7.1.122 xylitol kinase +ec:2.7.1.123 Transferred to 2.7.11.17 +ec:2.7.1.124 Transferred to 2.7.11.6 +ec:2.7.1.125 Transferred to 2.7.11.14 +ec:2.7.1.126 Transferred to 2.7.11.15 +ec:2.7.1.127 inositol-trisphosphate 3-kinase; 1D-myo-inositol-trisphosphate 3-kinase; Ins(1,4,5)P3 3-kinase +ec:2.7.1.128 Transferred to 2.7.11.27 +ec:2.7.1.129 Transferred to 2.7.11.7 +ec:2.7.1.130 tetraacyldisaccharide 4'-kinase; lpxK (gene name); lipid-A 4'-kinase; ATP:2,2',3,3'-tetrakis[(3R)-3-hydroxytetradecanoyl]-beta-D-glucosaminyl-(1->6)-alpha-D-glucosaminyl-phosphate 4'-O-phosphotransferase +ec:2.7.1.131 Transferred to 2.7.11.29 +ec:2.7.1.132 Transferred to 2.7.11.28 +ec:2.7.1.133 Deleted entry +ec:2.7.1.134 inositol-tetrakisphosphate 1-kinase; 1D-myo-inositol-tetrakisphosphate 1-kinase; inositol-trisphosphate 6-kinase; 1D-myo-inositol-trisphosphate 6-kinase; ATP:1D-myo-inositol-1,3,4-trisphosphate 6-phosphotransferase; inositol-trisphosphate 5-kinase; 1D-myo-inositol-trisphosphate 5-kinase; ATP:1D-myo-inositol-1,3,4-trisphosphate 5-phosphotransferase +ec:2.7.1.135 Transferred to 2.7.11.26 +ec:2.7.1.136 macrolide 2'-kinase +ec:2.7.1.137 phosphatidylinositol 3-kinase; 1-phosphatidylinositol 3-kinase; type III phosphoinositide 3-kinase; Vps34p; type I phosphatidylinositol kinase +ec:2.7.1.138 ceramide kinase; acylsphingosine kinase +ec:2.7.1.139 Deleted entry +ec:2.7.1.140 inositol-tetrakisphosphate 5-kinase; 1D-myo-inositol-tetrakisphosphate 5-kinase +ec:2.7.1.141 Transferred to 2.7.11.23 +ec:2.7.1.142 glycerol-3-phosphate---glucose phosphotransferase +ec:2.7.1.143 diphosphate-purine nucleoside kinase; pyrophosphate-purine nucleoside kinase +ec:2.7.1.144 tagatose-6-phosphate kinase +ec:2.7.1.145 deoxynucleoside kinase; multispecific deoxynucleoside kinase; ms-dNK; multisubstrate deoxyribonucleoside kinase; multifunctional deoxynucleoside kinase; D. melanogaster deoxynucleoside kinase; Dm-dNK; ATP:deoxynucleoside 5'-phosphotransferase +ec:2.7.1.146 ADP-specific phosphofructokinase; ADP-6-phosphofructokinase; ADP-dependent phosphofructokinase +ec:2.7.1.147 ADP-specific glucose/glucosamine kinase; ADP-specific glucokinase; ADP-dependent glucokinase +ec:2.7.1.148 4-(cytidine 5'-diphospho)-2-C-methyl-D-erythritol kinase; CDP-ME kinase +ec:2.7.1.149 1-phosphatidylinositol-5-phosphate 4-kinase; type II PIP kinase +ec:2.7.1.150 1-phosphatidylinositol-3-phosphate 5-kinase; type III PIP kinase; phosphatidylinositol 3-phosphate 5-kinase +ec:2.7.1.151 inositol-polyphosphate multikinase; IpK2; IP3/IP4 6-/3-kinase; IP3/IP4 dual-specificity 6-/3-kinase; IpmK; ArgRIII; AtIpk2alpha; AtIpk2beta; inositol polyphosphate 6-/3-/5-kinase +ec:2.7.1.152 Transferred to 2.7.4.21 +ec:2.7.1.153 phosphatidylinositol-4,5-bisphosphate 3-kinase; type I phosphoinositide 3-kinase +ec:2.7.1.154 phosphatidylinositol-4-phosphate 3-kinase; type II phosphoinositide 3-kinase; C2-domain-containing phosphoinositide 3-kinase; phosphoinositide 3-kinase +ec:2.7.1.155 Transferred to 2.7.4.24 +ec:2.7.1.156 adenosylcobinamide kinase; CobU; adenosylcobinamide kinase/adenosylcobinamide-phosphate guanylyltransferase; AdoCbi kinase/AdoCbi-phosphate guanylyltransferase +ec:2.7.1.157 N-acetylgalactosamine kinase; GALK2; GK2; GalNAc kinase; N-acetylgalactosamine (GalNAc)-1-phosphate kinase; ATP:N-acetyl-D-galactosamine 1-phosphotransferase +ec:2.7.1.158 inositol-pentakisphosphate 2-kinase; IP5 2-kinase; Gsl1p; Ipk1p; inositol polyphosphate kinase; inositol 1,3,4,5,6-pentakisphosphate 2-kinase; Ins(1,3,4,5,6)P5 2-kinase +ec:2.7.1.159 inositol-1,3,4-trisphosphate 5/6-kinase; Ins(1,3,4)P3 5/6-kinase; inositol trisphosphate 5/6-kinase +ec:2.7.1.160 2'-phosphotransferase; yeast 2'-phosphotransferase; Tpt1; Tpt1p; 2'-phospho-tRNA:NAD+ phosphotransferase +ec:2.7.1.161 CTP-dependent riboflavin kinase; Methanocaldococcus jannaschii Mj0056; Mj0056 +ec:2.7.1.162 N-acetylhexosamine 1-kinase; NahK; LnpB; N-acetylgalactosamine/N-acetylglucosamine 1-kinase +ec:2.7.1.163 hygromycin B 4-O-kinase; hygromycin-B kinase (ambiguous) +ec:2.7.1.164 O-phosphoseryl-tRNASec kinase; PSTK; phosphoseryl-tRNA[Ser]Sec kinase; phosphoseryl-tRNASec kinase +ec:2.7.1.165 glycerate 2-kinase; D-glycerate-2-kinase; glycerate kinase (2-phosphoglycerate forming); ATP:(R)-glycerate 2-phosphotransferase +ec:2.7.1.166 3-deoxy-D-manno-octulosonic acid kinase; kdkA (gene name); Kdo kinase +ec:2.7.1.167 D-glycero-beta-D-manno-heptose-7-phosphate kinase; heptose 7-phosphate kinase; D-beta-D-heptose 7-phosphotransferase; D-beta-D-heptose-7-phosphate kinase; HldE1 heptokinase; glycero-manno-heptose 7-phosphate kinase; D-beta-D-heptose 7-phosphate kinase/D-beta-D-heptose 1-phosphate adenylyltransferase; hldE (gene name); rfaE (gene name) +ec:2.7.1.168 D-glycero-alpha-D-manno-heptose-7-phosphate kinase; D-alpha-D-heptose-7-phosphate kinase; hdda (gene name) +ec:2.7.1.169 pantoate kinase; PoK; TK2141 protein +ec:2.7.1.170 anhydro-N-acetylmuramic acid kinase; anhMurNAc kinase; AnmK +ec:2.7.1.171 protein-fructosamine 3-kinase; FN3K; fructosamine 3-kinase +ec:2.7.1.172 protein-ribulosamine 3-kinase; Fn3KRP; FN3K-related protein; FN3K-RP; ketosamine 3-kinase 2; fructosamine-3-kinase-related protein; ribulosamine/erythrulosamine 3-kinase; ribulosamine 3-kinase +ec:2.7.1.173 nicotinate riboside kinase; ribosylnicotinic acid kinase; nicotinic acid riboside kinase; NRK1 (ambiguous) +ec:2.7.1.174 diacylglycerol kinase (CTP); DAG kinase; CTP-dependent diacylglycerol kinase; diglyceride kinase (ambiguous); DGK1 (gene name); diacylglycerol kinase (CTP dependent) +ec:2.7.1.175 maltokinase +ec:2.7.1.176 UDP-N-acetylglucosamine kinase; UNAG kinase; zeta toxin; toxin PezT; ATP:UDP-N-acetyl-D-glucosamine 3'-phosphotransferase +ec:2.7.1.177 L-threonine kinase; PduX +ec:2.7.1.178 2-dehydro-3-deoxyglucono/galactono-kinase; KDG kinase (ambiguous); KDGK (ambiguous); 2-keto-3-deoxy-D-gluconate kinase (ambiguous) +ec:2.7.1.179 kanosamine kinase; rifN (gene name) +ec:2.7.1.180 FAD:protein FMN transferase; flavin transferase; apbE (gene name) +ec:2.7.1.181 polymannosyl GlcNAc-diphospho-ditrans,octacis-undecaprenol kinase; WbdD; ATP:alpha-D-Man-(1->2)-alpha-D-Man-(1->2)-alpha-D-Man-(1->3)-alpha-D-Man-(1->3)-[alpha-D-Man-(1->2)-alpha-D-Man-(1->2)-alpha-D-Man-(1->3)-alpha-D-Man-(1->3)]n-alpha-D-Man-(1->3)-alpha-D-Man-(1->3)-alpha-D-GlcNAc-diphospho-ditrans,octacis-undecaprenol 3-phosphotransferase +ec:2.7.1.182 phytol kinase; VTE5 (gene name) +ec:2.7.1.183 glycoprotein-mannosyl O6-kinase; SGK196; protein O-mannose kinase +ec:2.7.1.184 sulfofructose kinase; yihV (gene name) +ec:2.7.1.185 mevalonate 3-kinase; ATP:(R)-MVA 3-phosphotransferase +ec:2.7.1.186 mevalonate-3-phosphate 5-kinase +ec:2.7.1.187 acarbose 7IV-phosphotransferase; acarbose 7-kinase; AcbK +ec:2.7.1.188 2-epi-5-epi-valiolone 7-kinase; AcbM +ec:2.7.1.189 autoinducer-2 kinase; lsrK (gene name) +ec:2.7.1.190 aminoglycoside 2''-phosphotransferase; aphD (gene name); APH(2''); aminoglycoside (2'') kinase; gentamicin kinase (ambiguous); gentamicin phosphotransferase (ambiguous) +ec:2.7.1.191 protein-Npi-phosphohistidine---D-mannose phosphotransferase; manXYZ (gene names); mannose PTS permease; EIIMan; Enzyme IIMan +ec:2.7.1.192 protein-Npi-phosphohistidine---N-acetylmuramate phosphotransferase; murP (gene name); N-acetylmuramic acid PTS permease; EIINAcMur; Enzyme IINAcMur +ec:2.7.1.193 protein-Npi-phosphohistidine---N-acetyl-D-glucosamine phosphotransferase; nagE (gene name); N-acetyl-D-glucosamine PTS permease; EIINag; Enzyme IINag; EIICBANag +ec:2.7.1.194 protein-Npi-phosphohistidine---L-ascorbate phosphotransferase; ulaABC (gene names); L-ascorbate PTS permease; EIISga; Enzyme IISga; Enzyme IIUla +ec:2.7.1.195 protein-Npi-phosphohistidine---2-O-alpha-mannosyl-D-glycerate phosphotransferase; mngA (gene names); 2-O-alpha-mannosyl-D-glycerate PTS permease; EIIMngA; Enzyme IIMngA; Enzyme IIHrsA; EIImannosylglycerate; Frx +ec:2.7.1.196 protein-Npi-phosphohistidine---N,N'-diacetylchitobiose phosphotransferase; chbABC (gene names); N,N'-diacetylchitobiose PTS permease; chitobiose PTS permease; EIIcel; EIIchb; Enzyme IIcel; Enzyme IIchb +ec:2.7.1.197 protein-Npi-phosphohistidine---D-mannitol phosphotransferase; mtlA (gene name); D-mannitol PTS permease; EIIMtl +ec:2.7.1.198 protein-Npi-phosphohistidine---D-sorbitol phosphotransferase; srlABE (gene names); D-sorbitol PTS permease; sorbitol PTS permease; glucitol PTS permease; EIIGut; Enzyme IIGut +ec:2.7.1.199 protein-Npi-phosphohistidine---D-glucose phosphotransferase; ptsG (gene name); D-glucose PTS permease; EIIGlc; Enzyme IIGlc +ec:2.7.1.200 protein-Npi-phosphohistidine---galactitol phosphotransferase; gatABC (gene names); galactitol PTS permease; EIIGat; Enzyme IIGat +ec:2.7.1.201 protein-Npi-phosphohistidine---trehalose phosphotransferase; treB (gene name); trehalose PTS permease; EIITre; Enzyme IITre +ec:2.7.1.202 protein-Npi-phosphohistidine---D-fructose phosphotransferase; fruAB (gene names); fructose PTS permease; EIIFru; Enzyme IIFru +ec:2.7.1.203 protein-Npi-phosphohistidine---D-glucosaminate phosphotransferase; dgaABCD (gene names); 2-amino-2-deoxy-D-gluconate PTS permease +ec:2.7.1.204 protein-Npi-phosphohistidine---D-galactose phosphotransferase; D-galactose PTS permease; EIIGal; Enzyme IIGal +ec:2.7.1.205 protein-Npi-phosphohistidine---cellobiose phosphotransferase; celB (gene name); cellobiose PTS permease; EIICel; Enzyme IICel +ec:2.7.1.206 protein-Npi-phosphohistidine---L-sorbose phosphotransferase; sorABFM (gene names); L-sorbose PTS permease; EIISor; Enzyme IISor +ec:2.7.1.207 protein-Npi-phosphohistidine---lactose phosphotransferase; lacEF (gene names); lactose PTS permease; EIILac; Enzyme IILac +ec:2.7.1.208 protein-Npi-phosphohistidine---maltose phosphotransferase; malT (gene name); maltose PTS permease; EIIMal; Enzyme IIMal +ec:2.7.1.209 L-erythrulose 1-kinase; lerK (gene name); L-erythrulose 1-kinase [incorrect] +ec:2.7.1.210 D-erythrulose 4-kinase; derK (gene name) +ec:2.7.1.211 protein-Npi-phosphohistidine---sucrose phosphotransferase; scrAB (gene names); sucrose PTS permease; EIIScr; Enzyme IIScr +ec:2.7.1.212 alpha-D-ribose-1-phosphate 5-kinase (ADP) +ec:2.7.1.213 cytidine kinase +ec:2.7.1.214 C7-cyclitol 7-kinase; valC (gene name); vldC (gene name) +ec:2.7.1.215 erythritol kinase (D-erythritol 1-phosphate-forming); eryA (gene name) +ec:2.7.1.216 farnesol kinase; FOLK (gene name) +ec:2.7.1.217 3-dehydrotetronate 4-kinase; otnK (gene name) +ec:2.7.1.218 fructoselysine 6-kinase; frlD (gene name) +ec:2.7.1.219 D-threonate 4-kinase; dtnK (gene name) +ec:2.7.1.220 D-erythronate 4-kinase; denK (gene name) +ec:2.7.1.221 N-acetylmuramate 1-kinase; amgK (gene name) +ec:2.7.1.222 4-hydroxytryptamine kinase; PsiK +ec:2.7.1.223 aminoimidazole riboside kinase; STM4066 (locus name) +ec:2.7.1.224 cytidine diphosphoramidate kinase +ec:2.7.1.225 L-serine kinase (ATP); sbnI (gene name) +ec:2.7.1.226 L-serine kinase (ADP); serK (gene name) +ec:2.7.1.227 inositol phosphorylceramide synthase; AUR1 (gene name); KEI1 (gene name) +ec:2.7.1.228 mannosyl-inositol-phosphoceramide inositolphosphotransferase; IPT1 (gene name) +ec:2.7.1.229 deoxyribokinase; deoK (gene name) +ec:2.7.1.230 amicoumacin kinase; amiN (gene name); yerI (gene name) +ec:2.7.1.231 3-oxoisoapionate kinase; oiaK (gene name) +ec:2.7.1.232 levoglucosan kinase +ec:2.7.1.233 apulose kinase; aplK (gene name) +ec:2.7.1.234 D-tagatose-1-phosphate kinase; TagK +ec:2.7.1.235 lipopolysaccharide core heptose(I) kinase; WaaP; RfaP +ec:2.7.1.236 NAD+ 3'-kinase; AvrRxo1 +ec:2.7.1.237 GTP-dependent dephospho-CoA kinase +ec:2.7.1.238 phenol phosphorylase; phenylphosphate synthase +ec:2.7.2.1 acetate kinase; acetokinase; AckA; AK; acetic kinase; acetate kinase (phosphorylating) +ec:2.7.2.2 carbamate kinase; CKase; carbamoyl phosphokinase; carbamyl phosphokinase +ec:2.7.2.3 phosphoglycerate kinase; PGK; 3-PGK; ATP-3-phospho-D-glycerate-1-phosphotransferase; ATP:D-3-phosphoglycerate 1-phosphotransferase; 3-phosphoglycerate kinase; 3-phosphoglycerate phosphokinase; 3-phosphoglyceric acid kinase; 3-phosphoglyceric acid phosphokinase; 3-phosphoglyceric kinase; glycerate 3-phosphate kinase; glycerophosphate kinase; phosphoglyceric acid kinase; phosphoglyceric kinase; phosphoglycerokinase +ec:2.7.2.4 aspartate kinase; aspartokinase; AK; beta-aspartokinase; aspartic kinase +ec:2.7.2.5 Deleted entry +ec:2.7.2.6 formate kinase +ec:2.7.2.7 butyrate kinase +ec:2.7.2.8 acetylglutamate kinase; N-acetylglutamate 5-phosphotransferase; acetylglutamate phosphokinase; N-acetylglutamate phosphokinase; N-acetylglutamate kinase; N-acetylglutamic 5-phosphotransferase +ec:2.7.2.9 Transferred to 6.3.5.5 +ec:2.7.2.10 phosphoglycerate kinase (GTP) +ec:2.7.2.11 glutamate 5-kinase; ATP-L-glutamate 5-phosphotransferase; ATP:gamma-L-glutamate phosphotransferase; gamma-glutamate kinase; gamma-glutamyl kinase; glutamate kinase +ec:2.7.2.12 acetate kinase (diphosphate); pyrophosphate-acetate phosphotransferase +ec:2.7.2.13 Deleted entry +ec:2.7.2.14 branched-chain-fatty-acid kinase; isobutyrate kinase +ec:2.7.2.15 propionate kinase; PduW; TdcD; propionate/acetate kinase +ec:2.7.2.16 2-phosphoglycerate kinase; pgk2 (gene name) +ec:2.7.2.17 [amino-group carrier protein]-L-2-aminoadipate 6-kinase; lysZ (gene name); [amino group carrier protein]-C-terminal-N-(1,4-dicarboxybutan-1-yl)-L-glutamine 5-O-kinase; [amino group carrier protein]-L-2-aminoadipate 6-kinase +ec:2.7.2.18 fatty acid kinase; fakAB (gene names) +ec:2.7.2.19 [amino-group carrier protein]-L-glutamate 6-kinase; lysZ (gene name) +ec:2.7.3.1 guanidinoacetate kinase; glycocyamine kinase +ec:2.7.3.2 creatine kinase; ATP:creatine phosphotransferase; CK; MM-CK; MB-CK; BB-CK; creatine phosphokinase; creatine phosphotransferase; phosphocreatine kinase; adenosine triphosphate-creatine transphosphorylase; Mi-CK; CK-BB; CK-MM; CK-MB; CKMiMi; MiMi-CK +ec:2.7.3.3 arginine kinase; arginine phosphokinase; adenosine 5'-triphosphate: L-arginine phosphotransferase; adenosine 5'-triphosphate-arginine phosphotransferase; ATP:L-arginine N-phosphotransferasel ATP:L-arginine omega-N-phosphotransferase +ec:2.7.3.4 taurocyamine kinase; taurocyamine phosphotransferase; ATP:taurocyamine phosphotransferase +ec:2.7.3.5 lombricine kinase +ec:2.7.3.6 hypotaurocyamine kinase +ec:2.7.3.7 opheline kinase +ec:2.7.3.8 ammonia kinase; phosphoramidate-adenosine diphosphate phosphotransferase; phosphoramidate-ADP-phosphotransferase +ec:2.7.3.9 phosphoenolpyruvate---protein phosphotransferase; phosphoenolpyruvate sugar phosphotransferase enzyme I; phosphopyruvate-protein factor phosphotransferase; phosphopyruvate-protein phosphotransferase; sugar-PEP phosphotransferase enzyme I; phosphoenolpyruvate:protein-L-histidine N-pros-phosphotransferase +ec:2.7.3.10 agmatine kinase; phosphagen phosphokinase; ATP:agmatine 4-N-phosphotransferase +ec:2.7.3.11 Transferred to 2.7.13.1 +ec:2.7.3.12 Transferred to 2.7.13.2 +ec:2.7.3.13 glutamine kinase +ec:2.7.4.1 ATP-polyphosphate phosphotransferase; polyphosphate kinase 1; ppk1 (gene name); polyphosphate kinase (ambiguous); polyphosphoric acid kinase (ambiguous) +ec:2.7.4.2 phosphomevalonate kinase; ATP:5-phosphomevalonate phosphotransferase; 5-phosphomevalonate kinase; mevalonate phosphate kinase; mevalonate-5-phosphate kinase; mevalonic acid phosphate kinase +ec:2.7.4.3 adenylate kinase; myokinase; 5'-AMP-kinase; adenylic kinase; adenylokinase +ec:2.7.4.4 nucleoside-phosphate kinase; NMP-kinase +ec:2.7.4.5 Deleted entry +ec:2.7.4.6 nucleoside-diphosphate kinase; nucleoside 5'-diphosphate kinase; nucleoside diphosphate (UDP) kinase; nucleoside diphosphokinase; nucleotide phosphate kinase; UDP kinase; uridine diphosphate kinase +ec:2.7.4.7 phosphooxymethylpyrimidine kinase; hydroxymethylpyrimidine phosphokinase; ATP:4-amino-2-methyl-5-phosphooxymethylpyrimidine phosphotransferase; ATP:(4-amino-2-methylpyrimidin-5-yl)methyl-phosphate phosphotransferase; phosphomethylpyrimidine kinase +ec:2.7.4.8 guanylate kinase; deoxyguanylate kinase; 5'-GMP kinase; GMP kinase; guanosine monophosphate kinase; ATP:GMP phosphotransferase +ec:2.7.4.9 dTMP kinase; thymidine monophosphate kinase; thymidylate kinase; thymidylate monophosphate kinase; thymidylic acid kinase; thymidylic kinase; deoxythymidine 5'-monophosphate kinase; TMPK; thymidine 5'-monophosphate kinase +ec:2.7.4.10 nucleoside-triphosphate---adenylate kinase; guanosine triphosphate-adenylate kinase; nucleoside triphosphate-adenosine monophosphate transphosphorylase; GTP:AMP phosphotransferase; isozyme 3 of adenylate kinase +ec:2.7.4.11 (deoxy)adenylate kinase +ec:2.7.4.12 T2-induced deoxynucleotide kinase +ec:2.7.4.13 (deoxy)nucleoside-phosphate kinase; deoxynucleoside monophosphate kinase; deoxyribonucleoside monophosphokinase; deoxynucleoside-5'-monophosphate kinase; ATP:deoxynucleoside-phosphate phosphotransferase +ec:2.7.4.14 UMP/CMP kinase; cytidylate kinase (misleading); deoxycytidylate kinase (misleading); CTP:CMP phosphotransferase (misleading); dCMP kinase (misleading); deoxycytidine monophosphokinase (misleading); UMP-CMP kinase; ATP:UMP-CMP phosphotransferase; pyrimidine nucleoside monophosphate kinase; uridine monophosphate-cytidine monophosphate phosphotransferase +ec:2.7.4.15 thiamine-diphosphate kinase; ATP:thiamin-diphosphate phosphotransferase; TDP kinase; thiamin diphosphate kinase; thiamin diphosphate phosphotransferase; thiamin pyrophosphate kinase; thiamine diphosphate kinase; protein bound thiamin diphosphate:ATP phosphoryltransferase +ec:2.7.4.16 thiamine-phosphate kinase; thiamin-monophosphate kinase; thiamin monophosphatase; thiamin monophosphokinase +ec:2.7.4.17 3-phosphoglyceroyl-phosphate---polyphosphate phosphotransferase; diphosphoglycerate-polyphosphate phosphotransferase; 1,3-diphosphoglycerate-polyphosphate phosphotransferase +ec:2.7.4.18 farnesyl-diphosphate kinase; farnesyl pyrophosphate kinase +ec:2.7.4.19 5-methyldeoxycytidine-5'-phosphate kinase +ec:2.7.4.20 dolichyl-diphosphate---polyphosphate phosphotransferase; dolichylpyrophosphate:polyphosphate phosphotransferase +ec:2.7.4.21 inositol-hexakisphosphate 5-kinase; ATP:1D-myo-inositol-hexakisphosphate phosphotransferase; IP6K; inositol-hexakisphosphate kinase (ambiguous) +ec:2.7.4.22 UMP kinase; uridylate kinase; UMPK; uridine monophosphate kinase; PyrH; UMP-kinase; SmbA +ec:2.7.4.23 ribose 1,5-bisphosphate phosphokinase; ribose 1,5-bisphosphokinase; PhnN; ATP:ribose-1,5-bisphosphate phosphotransferase +ec:2.7.4.24 diphosphoinositol-pentakisphosphate 1-kinase; PP-IP5 kinase; diphosphoinositol pentakisphosphate kinase; ATP:5-diphospho-1D-myo-inositol-pentakisphosphate phosphotransferase; PP-InsP5 kinase; PPIP5K; PPIP5K1; PPIP5K2; VIP1; VIP2; diphosphoinositol-pentakisphosphate 1/3-kinase (incorrect); diphosphoinositol-pentakisphosphate kinase (ambiguous) +ec:2.7.4.25 (d)CMP kinase; cmk (gene name); prokaryotic cytidylate kinase; deoxycytidylate kinase (misleading); dCMP kinase (misleading); deoxycytidine monophosphokinase (misleading) +ec:2.7.4.26 isopentenyl phosphate kinase; ATP:isopentenyl phosphate phosphotransferase +ec:2.7.4.27 [pyruvate, phosphate dikinase]-phosphate phosphotransferase; PPDK regulatory protein (ambiguous); pyruvate, phosphate dikinase regulatory protein (ambiguous); bifunctional dikinase regulatory protein (ambiguous); PDRP1 (gene name) +ec:2.7.4.28 [pyruvate, water dikinase]-phosphate phosphotransferase; PSRP (ambiguous) +ec:2.7.4.29 Kdo2-lipid A phosphotransferase; lipid A undecaprenyl phosphotransferase; LpxT; YeiU +ec:2.7.4.30 Transferred to 2.7.8.43 +ec:2.7.4.31 [5-(aminomethyl)furan-3-yl]methyl phosphate kinase; MfnE +ec:2.7.4.32 farnesyl phosphate kinase +ec:2.7.4.33 AMP-polyphosphate phosphotransferase; PA3455 (locus name); PPK2D; PAP +ec:2.7.4.34 GDP-polyphosphate phosphotransferase; ppk2 (gene name); polyphosphate kinase 2 +ec:2.7.5.1 Transferred to 5.4.2.2 +ec:2.7.5.2 Transferred to 5.4.2.3 +ec:2.7.5.3 Transferred to 5.4.2.1 +ec:2.7.5.4 Transferred to 5.4.2.4 +ec:2.7.5.5 Transferred to 5.4.2.5 +ec:2.7.5.6 Transferred to 5.4.2.7 +ec:2.7.5.7 Transferred to 5.4.2.8 +ec:2.7.6.1 ribose-phosphate diphosphokinase; ribose-phosphate pyrophosphokinase; PRPP synthetase; phosphoribosylpyrophosphate synthetase; PPRibP synthetase; PP-ribose P synthetase; 5-phosphoribosyl-1-pyrophosphate synthetase; 5-phosphoribose pyrophosphorylase; 5-phosphoribosyl-alpha-1-pyrophosphate synthetase; phosphoribosyl-diphosphate synthetase; phosphoribosylpyrophosphate synthase; pyrophosphoribosylphosphate synthetase; ribophosphate pyrophosphokinase; ribose-5-phosphate pyrophosphokinase +ec:2.7.6.2 thiamine diphosphokinase; thiamin kinase; thiamine pyrophosphokinase; ATP:thiamin pyrophosphotransferase; thiamin pyrophosphokinase; thiamin pyrophosphotransferase; thiaminokinase; thiamin:ATP pyrophosphotransferase; TPTase +ec:2.7.6.3 2-amino-4-hydroxy-6-hydroxymethyldihydropteridine diphosphokinase; 2-amino-4-hydroxy-6-hydroxymethyldihydropteridine pyrophosphokinase; H2-pteridine-CH2OH pyrophosphokinase; 7,8-dihydroxymethylpterin-pyrophosphokinase; HPPK; 7,8-dihydro-6-hydroxymethylpterin pyrophosphokinase; hydroxymethyldihydropteridine pyrophosphokinase; ATP:2-amino-4-hydroxy-6-hydroxymethyl-7,8-dihydropteridine 6'-diphosphotransferase +ec:2.7.6.4 nucleotide diphosphokinase; nucleotide pyrophosphokinase; ATP:nucleotide pyrophosphotransferase; ATP nucleotide 3'-pyrophosphokinase; nucleotide 3'-pyrophosphokinase +ec:2.7.6.5 GTP diphosphokinase; stringent factor; guanosine 3',5'-polyphosphate synthase; GTP pyrophosphokinase; ATP-GTP 3'-diphosphotransferase; guanosine 5',3'-polyphosphate synthetase; (p)ppGpp synthetase I; (p)ppGpp synthetase II; guanosine pentaphosphate synthetase; GPSI; GPSII +ec:2.7.7.1 nicotinamide-nucleotide adenylyltransferase; NAD+ pyrophosphorylase; adenosine triphosphate-nicotinamide mononucleotide transadenylase; ATP:NMN adenylyltransferase; diphosphopyridine nucleotide pyrophosphorylase; nicotinamide adenine dinucleotide pyrophosphorylase; nicotinamide mononucleotide adenylyltransferase; NMN adenylyltransferase +ec:2.7.7.2 FAD synthase; FAD pyrophosphorylase; riboflavin mononucleotide adenylyltransferase; adenosine triphosphate-riboflavin mononucleotide transadenylase; adenosine triphosphate-riboflavine mononucleotide transadenylase; riboflavin adenine dinucleotide pyrophosphorylase; riboflavine adenine dinucleotide adenylyltransferase; flavin adenine dinucleotide synthetase; FADS; FMN adenylyltransferase; FAD synthetase (misleading) +ec:2.7.7.3 pantetheine-phosphate adenylyltransferase; dephospho-CoA pyrophosphorylase; pantetheine phosphate adenylyltransferase; dephospho-coenzyme A pyrophosphorylase; 3'-dephospho-CoA pyrophosphorylase +ec:2.7.7.4 sulfate adenylyltransferase; ATP-sulfurylase; adenosine-5'-triphosphate sulfurylase; adenosinetriphosphate sulfurylase; adenylylsulfate pyrophosphorylase; ATP sulfurylase; ATP-sulfurylase; sulfurylase +ec:2.7.7.5 sulfate adenylyltransferase (ADP); ADP-sulfurylase; sulfate (adenosine diphosphate) adenylyltransferase; adenosine diphosphate sulfurylase +ec:2.7.7.6 DNA-directed RNA polymerase; RNA polymerase; RNA nucleotidyltransferase (DNA-directed); RNA polymerase I; RNA polymerase II; RNA polymerase III; C RNA formation factors; deoxyribonucleic acid-dependent ribonucleic acid polymerase; DNA-dependent ribonucleate nucleotidyltransferase; DNA-dependent RNA nucleotidyltransferase; DNA-dependent RNA polymerase; ribonucleate nucleotidyltransferase; ribonucleate polymerase; C ribonucleic acid formation factors; ribonucleic acid nucleotidyltransferase; ribonucleic acid polymerase; ribonucleic acid transcriptase; ribonucleic polymerase; ribonucleic transcriptase; RNA nucleotidyltransferase; RNA transcriptase; transcriptase; RNA nucleotidyltransferase I +ec:2.7.7.7 DNA-directed DNA polymerase; DNA polymerase I; DNA polymerase II; DNA polymerase III; DNA polymerase alpha; DNA polymerase beta; DNA polymerase gamma; DNA nucleotidyltransferase (DNA-directed); deoxyribonucleate nucleotidyltransferase; deoxynucleate polymerase; deoxyribonucleic acid duplicase; deoxyribonucleic acid polymerase; deoxyribonucleic duplicase; deoxyribonucleic polymerase; deoxyribonucleic polymerase I; DNA duplicase; DNA nucleotidyltransferase; DNA polymerase; DNA replicase; DNA-dependent DNA polymerase; duplicase; Klenow fragment; sequenase; Taq DNA polymerase; Taq Pol I; Tca DNA polymerase +ec:2.7.7.8 polyribonucleotide nucleotidyltransferase; polynucleotide phosphorylase; PNPase (ambiguous); nucleoside diphosphate:polynucleotidyl transferase; polyribonucleotide phosphorylase +ec:2.7.7.9 UTP---glucose-1-phosphate uridylyltransferase; UDP glucose pyrophosphorylase; glucose-1-phosphate uridylyltransferase; UDPG phosphorylase; UDPG pyrophosphorylase; uridine 5'-diphosphoglucose pyrophosphorylase; uridine diphosphoglucose pyrophosphorylase; uridine diphosphate-D-glucose pyrophosphorylase; uridine-diphosphate glucose pyrophosphorylase +ec:2.7.7.10 UTP---hexose-1-phosphate uridylyltransferase; galactose-1-phosphate uridylyltransferase; galactose 1-phosphate uridylyltransferase; alpha-D-galactose 1-phosphate uridylyltransferase; galactose 1-phosphate uridyltransferase; UDPgalactose pyrophosphorylase; uridine diphosphate galactose pyrophosphorylase; uridine diphosphogalactose pyrophosphorylase +ec:2.7.7.11 UTP---xylose-1-phosphate uridylyltransferase; xylose-1-phosphate uridylyltransferase; uridylyltransferase, xylose 1-phosphate; UDP-xylose pyrophosphorylase; uridine diphosphoxylose pyrophosphorylase; xylose 1-phosphate uridylyltransferase +ec:2.7.7.12 UDP-glucose---hexose-1-phosphate uridylyltransferase; uridyl transferase; hexose-1-phosphate uridylyltransferase; uridyltransferase; hexose 1-phosphate uridyltransferase; UDP-glucose:alpha-D-galactose-1-phosphate uridylyltransferase +ec:2.7.7.13 mannose-1-phosphate guanylyltransferase; GTP-mannose-1-phosphate guanylyltransferase; PIM-GMP (phosphomannose isomerase-guanosine 5'-diphospho-D-mannose pyrophosphorylase); GDP-mannose pyrophosphorylase; guanosine 5'-diphospho-D-mannose pyrophosphorylase; guanosine diphosphomannose pyrophosphorylase; guanosine triphosphate-mannose 1-phosphate guanylyltransferase; mannose 1-phosphate guanylyltransferase (guanosine triphosphate) +ec:2.7.7.14 ethanolamine-phosphate cytidylyltransferase; phosphorylethanolamine transferase; ET; CTP-phosphoethanolamine cytidylyltransferase; phosphoethanolamine cytidylyltransferase; ethanolamine phosphate cytidylyltransferase +ec:2.7.7.15 choline-phosphate cytidylyltransferase; phosphorylcholine transferase; CDP-choline pyrophosphorylase; CDP-choline synthetase; choline phosphate cytidylyltransferase; CTP-phosphocholine cytidylyltransferase; CTP:phosphorylcholine cytidylyltransferase; cytidine diphosphocholine pyrophosphorylase; phosphocholine cytidylyltransferase; phosphorylcholine cytidylyltransferase; phosphorylcholine:CTP cytidylyltransferase +ec:2.7.7.16 Transferred to 3.1.27.5 +ec:2.7.7.17 Transferred to 3.1.27.1 +ec:2.7.7.18 nicotinate-nucleotide adenylyltransferase; deamido-NAD+ pyrophosphorylase; nicotinate mononucleotide adenylyltransferase; deamidonicotinamide adenine dinucleotide pyrophosphorylase; NaMN-ATase; nicotinic acid mononucleotide adenylyltransferase +ec:2.7.7.19 polynucleotide adenylyltransferase; NTP polymerase; RNA adenylating enzyme; AMP polynucleotidylexotransferase; ATP-polynucleotide adenylyltransferase; ATP:polynucleotidylexotransferase; poly(A) polymerase; poly(A) synthetase; polyadenylate nucleotidyltransferase; polyadenylate polymerase; polyadenylate synthetase; polyadenylic acid polymerase; polyadenylic polymerase; terminal riboadenylate transferase; poly(A) hydrolase; RNA formation factors, PF1; adenosine triphosphate:ribonucleic acid adenylyltransferase +ec:2.7.7.20 Deleted entry +ec:2.7.7.21 Transferred to 2.7.7.72 +ec:2.7.7.22 mannose-1-phosphate guanylyltransferase (GDP); GDP mannose phosphorylase; mannose 1-phosphate (guanosine diphosphate) guanylyltransferase; GDP mannose phosphorylase; GDP-mannose 1-phosphate guanylyltransferase; guanosine diphosphate-mannose 1-phosphate guanylyltransferase; guanosine diphosphomannose phosphorylase; mannose 1-phosphate guanylyltransferase; GDP:D-mannose-1-phosphate guanylyltransferase +ec:2.7.7.23 UDP-N-acetylglucosamine diphosphorylase; UDP-N-acetylglucosamine pyrophosphorylase; uridine diphosphoacetylglucosamine pyrophosphorylase; UTP:2-acetamido-2-deoxy-alpha-D-glucose-1-phosphate uridylyltransferase; UDP-GlcNAc pyrophosphorylase; GlmU uridylyltransferase; Acetylglucosamine 1-phosphate uridylyltransferase; UDP-acetylglucosamine pyrophosphorylase; uridine diphosphate-N-acetylglucosamine pyrophosphorylase; uridine diphosphoacetylglucosamine phosphorylase; acetylglucosamine 1-phosphate uridylyltransferase +ec:2.7.7.24 glucose-1-phosphate thymidylyltransferase; glucose 1-phosphate thymidylyltransferase; dTDP-glucose synthase; dTDP-glucose pyrophosphorylase; thymidine diphosphoglucose pyrophosphorylase; thymidine diphosphate glucose pyrophosphorylase; TDP-glucose pyrophosphorylase +ec:2.7.7.25 Transferred to 2.7.7.72 +ec:2.7.7.26 Transferred to 3.1.27.3 +ec:2.7.7.27 glucose-1-phosphate adenylyltransferase; ADP glucose pyrophosphorylase; glucose 1-phosphate adenylyltransferase; adenosine diphosphate glucose pyrophosphorylase; adenosine diphosphoglucose pyrophosphorylase; ADP-glucose pyrophosphorylase; ADP-glucose synthase; ADP-glucose synthetase; ADPG pyrophosphorylase; ADP:alpha-D-glucose-1-phosphate adenylyltransferase +ec:2.7.7.28 nucleoside-triphosphate-aldose-1-phosphate nucleotidyltransferase; NDP hexose pyrophosphorylase; hexose 1-phosphate nucleotidyltransferase; hexose nucleotidylating enzyme; nucleoside diphosphohexose pyrophosphorylase; hexose-1-phosphate guanylyltransferase; GTP:alpha-D-hexose-1-phosphate guanylyltransferase; GDP hexose pyrophosphorylase; guanosine diphosphohexose pyrophosphorylase; nucleoside-triphosphate-hexose-1-phosphate nucleotidyltransferase; NTP:hexose-1-phosphate nucleotidyltransferase +ec:2.7.7.29 Deleted entry +ec:2.7.7.30 fucose-1-phosphate guanylyltransferase; GDP fucose pyrophosphorylase; guanosine diphosphate L-fucose pyrophosphorylase; GDP-L-fucose pyrophosphorylase; GDP-fucose pyrophosphorylase; GTP:L-fucose-1-phosphate guanylyltransferase +ec:2.7.7.31 DNA nucleotidylexotransferase; terminal deoxyribonucleotidyltransferase; terminal addition enzyme; addase; deoxynucleotidyl terminal transferase; deoxyribonucleic acid nucleotidyltransferase; deoxyribonucleic nucleotidyltransferase; terminal deoxynucleotide transferase; TdT +ec:2.7.7.32 galactose-1-phosphate thymidylyltransferase; dTDP galactose pyrophosphorylase; galactose 1-phosphate thymidylyl transferase; thymidine diphosphogalactose pyrophosphorylase; thymidine triphosphate:alpha-D-galactose 1-phosphate thymidylyltransferase +ec:2.7.7.33 glucose-1-phosphate cytidylyltransferase; CDP glucose pyrophosphorylase; cytidine diphosphoglucose pyrophosphorylase; cytidine diphosphate glucose pyrophosphorylase; cytidine diphosphate-D-glucose pyrophosphorylase; CTP:D-glucose-1-phosphate cytidylyltransferase +ec:2.7.7.34 glucose-1-phosphate guanylyltransferase; GDP glucose pyrophosphorylase; guanosine diphosphoglucose pyrophosphorylase +ec:2.7.7.35 ADP ribose phosphorylase; ribose-5-phosphate adenylyltransferase (ambiguous); adenosine diphosphoribose phosphorylase (ambiguous) +ec:2.7.7.36 aldose-1-phosphate adenylyltransferase; sugar-1-phosphate adenylyltransferase; ADPaldose phosphorylase; adenosine diphosphosugar phosphorylase; ADP sugar phosphorylase; adenosine diphosphate glucose:orthophosphate adenylyltransferase; ADP:aldose-1-phosphate adenylyltransferase +ec:2.7.7.37 aldose-1-phosphate nucleotidyltransferase; sugar-1-phosphate nucleotidyltransferase; NDPaldose phosphorylase; glucose 1-phosphate inosityltransferase; NDP sugar phosphorylase; nucleoside diphosphosugar phosphorylase; sugar phosphate nucleotidyltransferase; nucleoside diphosphate sugar:orthophosphate nucleotidyltransferase; sugar nucleotide phosphorylase; NDP:aldose-1-phosphate nucleotidyltransferase +ec:2.7.7.38 3-deoxy-manno-octulosonate cytidylyltransferase; CMP-3-deoxy-D-manno-octulosonate pyrophosphorylase; 2-keto-3-deoxyoctonate cytidylyltransferase; 3-Deoxy-D-manno-octulosonate cytidylyltransferase; CMP-3-deoxy-D-manno-octulosonate synthetase; CMP-KDO synthetase; CTP:CMP-3-deoxy-D-manno-octulosonate cytidylyltransferase; cytidine monophospho-3-deoxy-D-manno-octulosonate pyrophosphorylase +ec:2.7.7.39 glycerol-3-phosphate cytidylyltransferase; CDP-glycerol pyrophosphorylase; cytidine diphosphoglycerol pyrophosphorylase; cytidine diphosphate glycerol pyrophosphorylase; CTP:glycerol 3-phosphate cytidylyltransferase; Gro-PCT; tagD (gene name); tarD (gene name) +ec:2.7.7.40 D-ribitol-5-phosphate cytidylyltransferase; CDP ribitol pyrophosphorylase; cytidine diphosphate ribitol pyrophosphorylase; ribitol 5-phosphate cytidylyltransferase; cytidine diphosphoribitol pyrophosphorylase +ec:2.7.7.41 phosphatidate cytidylyltransferase; CDP diglyceride pyrophosphorylase; CDP-diacylglycerol synthase; CDP-diacylglyceride synthetase; cytidine diphosphoglyceride pyrophosphorylase; phosphatidate cytidyltransferase; phosphatidic acid cytidylyltransferase; CTP:1,2-diacylglycerophosphate-cytidyl transferase; CTP-diacylglycerol synthetase; DAG synthetase; CDP-DG +ec:2.7.7.42 [glutamine synthetase] adenylyltransferase; glutamine-synthetase adenylyltransferase; ATP:glutamine synthetase adenylyltransferase; adenosine triphosphate:glutamine synthetase adenylyltransferase; ATP:[L-glutamate:ammonia ligase (ADP-forming)] adenylyltransferase; ATP:[L-glutamate:ammonia ligase (ADP-forming)]-L-tyrosine adenylyltransferase; [glutamate---ammonia-ligase] adenylyltransferase +ec:2.7.7.43 N-acylneuraminate cytidylyltransferase; CMP-sialate pyrophosphorylase; CMP-sialate synthase; cytidine 5'-monophosphosialic acid synthetase; CMP-Neu5Ac synthetase; CMP-NeuAc synthetase; acylneuraminate cytidyltransferase; CMP-N-acetylneuraminate synthetase; CMP-N-acetylneuraminate synthase; CMP-N-acetylneuraminic acid synthase; CMP-NANA synthetase; CMP-sialate synthetase; CMP-sialic synthetase; cytidine 5'-monophospho-N-acetylneuraminic acid synthetase; cytidine 5-monophosphate N-acetylneuraminic acid synthetase; cytidine monophosphosialic acid synthetase; cytidine monophosphoacetylneuraminic synthetase; cytidine monophosphosialate pyrophosphorylase; cytidine monophosphosialate synthetase; acetylneuraminate cytidylyltransferase +ec:2.7.7.44 glucuronate-1-phosphate uridylyltransferase; UDP-glucuronate pyrophosphorylase; UDP-D-glucuronic acid pyrophosphorylase; UDP-glucuronic acid pyrophosphorylase; uridine diphosphoglucuronic pyrophosphorylase +ec:2.7.7.45 guanosine-triphosphate guanylyltransferase; diguanosine tetraphosphate synthetase; GTP-GTP guanylyltransferase; Gp4G synthetase; guanosine triphosphate-guanose triphosphate guanylyltransferase +ec:2.7.7.46 gentamicin 2''-nucleotidyltransferase; gentamicin 2''-adenylyltransferase; aminoglycoside adenylyltransferase; gentamycin 2''-nucleotidyltransferase +ec:2.7.7.47 streptomycin 3''-adenylyltransferase; streptomycin adenylate synthetase; streptomycin adenyltransferase; streptomycin adenylylase; streptomycin adenylyltransferase; streptomycin-spectinomycin adenylyltransferase; AAD (3''); aminoglycoside 3''-adenylyltransferase +ec:2.7.7.48 RNA-directed RNA polymerase; RNA nucleotidyltransferase (RNA-directed); RNA nucleotidyltransferase (RNA-directed); RNA-dependent ribonucleate nucleotidyltransferase; 3D polymerase; PB1 proteins; PB2 proteins; phage f2 replicase; polymerase L; Q-beta replicase; phage f2 replicase; ribonucleic acid replicase; ribonucleic acid-dependent ribonucleate nucleotidyltransferase; ribonucleic acid-dependent ribonucleic acid polymerase; ribonucleic replicase; ribonucleic synthetase; RNA replicase; RNA synthetase; RNA transcriptase; RNA-dependent ribonucleate nucleotidyltransferase; RDRP; RNA-dependent RNA polymerase; RNA-dependent RNA replicase; transcriptase +ec:2.7.7.49 RNA-directed DNA polymerase; DNA nucleotidyltransferase (RNA-directed); reverse transcriptase; revertase; RNA-dependent deoxyribonucleate nucleotidyltransferase; RNA revertase; RNA-dependent DNA polymerase; RNA-instructed DNA polymerase; RT +ec:2.7.7.50 mRNA guanylyltransferase; RNGTT (gene name); CEG1 (gene name); mRNA capping enzyme; messenger RNA guanylyltransferase; Protein lambda2 +ec:2.7.7.51 adenylylsulfate---ammonia adenylyltransferase; APSAT; adenylylsulfate:ammonia adenylyltransferase +ec:2.7.7.52 RNA uridylyltransferase; terminal uridylyltransferase; TUT +ec:2.7.7.53 ATP adenylyltransferase; bis(5'-nucleosyl)-tetraphosphate phosphorylase (NDP-forming); diadenosinetetraphosphate alphabeta-phosphorylase; adenine triphosphate adenylyltransferase; diadenosine 5',5'"-P1,P4-tetraphosphate alphabeta-phosphorylase (ADP-forming); dinucleoside oligophosphate alphabeta-phosphorylase +ec:2.7.7.54 Deleted entry +ec:2.7.7.55 Deleted entry +ec:2.7.7.56 tRNA nucleotidyltransferase; phosphate-dependent exonuclease; RNase PH; ribonuclease PH +ec:2.7.7.57 N-methylphosphoethanolamine cytidylyltransferase; monomethylethanolamine phosphate cytidylyltransferase; CTP:P-MEA cytidylyltransferase +ec:2.7.7.58 Transferred to 6.2.1.71 +ec:2.7.7.59 [protein-PII] uridylyltransferase; PII uridylyl-transferase; uridyl removing enzyme +ec:2.7.7.60 2-C-methyl-D-erythritol 4-phosphate cytidylyltransferase; MEP cytidylyltransferase +ec:2.7.7.61 citrate lyase holo-[acyl-carrier protein] synthase; 2'-(5''-phosphoribosyl)-3'-dephospho-CoA transferase; 2'-(5''-triphosphoribosyl)-3'-dephospho-CoA:apo-citrate lyase; CitX; holo-ACP synthase (ambiguous); 2'-(5''-triphosphoribosyl)-3'-dephospho-CoA:apo-citrate lyase adenylyltransferase; 2'-(5''-triphosphoribosyl)-3'-dephospho-CoA:apo-citrate lyase 2'-(5''-triphosphoribosyl)-3'-dephospho-CoA transferase; 2'-(5''-triphosphoribosyl)-3'-dephospho-CoA:apo-citrate-lyase adenylyltransferase; holo-citrate lyase synthase (incorrect); 2'-(5-triphosphoribosyl)-3'-dephospho-CoA:apo-citrate-lyase 2'-(5-phosphoribosyl)-3'-dephospho-CoA-transferase +ec:2.7.7.62 adenosylcobinamide-phosphate guanylyltransferase; CobU; adenosylcobinamide kinase/adenosylcobinamide-phosphate guanylyltransferase; AdoCbi kinase/AdoCbi-phosphate guanylyltransferase +ec:2.7.7.63 Transferred to 6.3.1.20 +ec:2.7.7.64 UTP-monosaccharide-1-phosphate uridylyltransferase; UDP-sugar pyrophosphorylase; PsUSP +ec:2.7.7.65 diguanylate cyclase; DGC; PleD +ec:2.7.7.66 malonate decarboxylase holo-[acyl-carrier protein] synthase; holo ACP synthase (ambiguous); 2'-(5''-triphosphoribosyl)-3'-dephospho-CoA:apo ACP 2'-(5''-triphosphoribosyl)-3'-dephospho-CoA transferase; MdcG; 2'-(5''-triphosphoribosyl)-3'-dephospho-CoA:apo-malonate-decarboxylase adenylyltransferase; holo-malonate-decarboxylase synthase (incorrect) +ec:2.7.7.67 CDP-2,3-bis-(O-geranylgeranyl)-sn-glycerol synthase; carS (gene name); CDP-2,3-di-O-geranylgeranyl-sn-glycerol synthase; CTP:2,3-GG-GP ether cytidylyltransferase; CTP:2,3-di-O-geranylgeranyl-sn-glycero-1-phosphate cytidyltransferase; CDP-2,3-bis-O-(geranylgeranyl)-sn-glycerol synthase; CTP:2,3-bis-O-(geranylgeranyl)-sn-glycero-1-phosphate cytidylyltransferase; CDP-unsaturated archaeol synthase; CDP-archaeol synthase (incorrect) +ec:2.7.7.68 2-phospho-L-lactate guanylyltransferase; cofC (gene name) (ambiguous) +ec:2.7.7.69 GDP-L-galactose/GDP-D-glucose: hexose 1-phosphate guanylyltransferase; VTC2; VTC5; GDP-L-galactose phosphorylase +ec:2.7.7.70 D-glycero-beta-D-manno-heptose 1-phosphate adenylyltransferase; D-beta-D-heptose 7-phosphate kinase/D-beta-D-heptose 1-phosphate adenylyltransferase; D-glycero-D-manno-heptose-1beta-phosphate adenylyltransferase; hldE (gene name); rfaE (gene name) +ec:2.7.7.71 D-glycero-alpha-D-manno-heptose 1-phosphate guanylyltransferase; hddC (gene name); gmhD (gene name) +ec:2.7.7.72 CCA tRNA nucleotidyltransferase; CCA-adding enzyme; tRNA adenylyltransferase; tRNA cytidylyltransferase; tRNA CCA-pyrophosphorylase; tRNA-nucleotidyltransferase; transfer-RNA nucleotidyltransferase; transfer ribonucleic acid nucleotidyl transferase; CTP(ATP):tRNA nucleotidyltransferase; transfer ribonucleate adenylyltransferase; transfer ribonucleate adenyltransferase; transfer RNA adenylyltransferase; transfer ribonucleate nucleotidyltransferase; ATP (CTP):tRNA nucleotidyltransferase; ribonucleic cytidylic cytidylic adenylic pyrophosphorylase; transfer ribonucleic adenylyl (cytidylyl) transferase; transfer ribonucleic-terminal trinucleotide nucleotidyltransferase; transfer ribonucleate cytidylyltransferase; ribonucleic cytidylyltransferase; -C-C-A pyrophosphorylase; ATP(CTP)-tRNA nucleotidyltransferase; tRNA adenylyl(cytidylyl)transferase; CTP:tRNA cytidylyltransferase +ec:2.7.7.73 sulfur carrier protein ThiS adenylyltransferase; thiF (gene name) +ec:2.7.7.74 1L-myo-inositol 1-phosphate cytidylyltransferase; CTP:inositol-1-phosphate cytidylyltransferase (bifunctional CTP:inositol-1-phosphate cytidylyltransferase/CDP-inositol:inositol-1-phosphate transferase (IPCT/DIPPS)); IPCT (bifunctional CTP:inositol-1-phosphate cytidylyltransferase/CDP-inositol:inositol-1-phosphate transferase (IPCT/DIPPS)); L-myo-inositol-1-phosphate cytidylyltransferase +ec:2.7.7.75 molybdopterin adenylyltransferase; MogA; Cnx1 (ambiguous) +ec:2.7.7.76 molybdenum cofactor cytidylyltransferase; MocA; CTP:molybdopterin cytidylyltransferase; MoCo cytidylyltransferase; Mo-MPT cytidyltransferase +ec:2.7.7.77 molybdenum cofactor guanylyltransferase; MobA; MoCo guanylyltransferase +ec:2.7.7.78 GDP-D-glucose phosphorylase +ec:2.7.7.79 tRNAHis guanylyltransferase; histidine tRNA guanylyltransferase; Thg1p (ambiguous); Thg1 (ambiguous) +ec:2.7.7.80 molybdopterin-synthase adenylyltransferase; MoeB; adenylyltransferase and sulfurtransferase MOCS3 +ec:2.7.7.81 pseudaminic acid cytidylyltransferase; PseF +ec:2.7.7.82 CMP-N,N'-diacetyllegionaminic acid synthase; CMP-N,N'-diacetyllegionaminic acid synthetase; neuA (gene name); legF (gene name) +ec:2.7.7.83 UDP-N-acetylgalactosamine diphosphorylase +ec:2.7.7.84 2'-5' oligoadenylate synthase; OAS +ec:2.7.7.85 diadenylate cyclase; cyclic-di-AMP synthase; dacA (gene name); disA (gene name) +ec:2.7.7.86 cyclic GMP-AMP synthase; cGAMP synthase; cGAS +ec:2.7.7.87 L-threonylcarbamoyladenylate synthase; yrdC (gene name); Sua5; ywlC (gene name); ATP:L-threonyl,bicarbonate adenylyltransferase +ec:2.7.7.88 GDP polyribonucleotidyltransferase; PRNTase; 5'-triphospho-mRNA:GDP 5'-phosphopolyribonucleotidyltransferase [G(5')ppp-mRNA-forming] +ec:2.7.7.89 [glutamine synthetase]-adenylyl-L-tyrosine phosphorylase; adenylyl-[glutamine---synthetase]-deadenylase; [L-glutamate:ammonia ligase (ADP-forming)]-O4-(5'-adenylyl)-L-tyrosine:phosphate adenylyltransferase; [glutamate---ammonia ligase]-adenylyl-L-tyrosine phosphorylase +ec:2.7.7.90 8-amino-3,8-dideoxy-manno-octulosonate cytidylyltransferase; kdsB (gene name, ambiguous) +ec:2.7.7.91 valienol-1-phosphate guanylyltransferase; vldB (gene name) +ec:2.7.7.92 3-deoxy-D-glycero-D-galacto-nonulopyranosonate cytidylyltransferase +ec:2.7.7.93 phosphonoformate cytidylyltransferase; phpF (gene name) +ec:2.7.7.94 Transferred to 6.2.1.51 +ec:2.7.7.95 Transferred to 6.2.1.49 +ec:2.7.7.96 ADP-D-ribose pyrophosphorylase; NUDIX5; NUDT5 (gene name); diphosphate---ADP-D-ribose adenylyltransferase; diphosphate adenylyltransferase (ambiguous) +ec:2.7.7.97 3-hydroxy-4-methylanthranilate adenylyltransferase; acmA (gene name); sibE (gene name); actinomycin synthase I; 4-MHA-activating enzyme; ACMS I; actinomycin synthetase I; 4-MHA pentapeptide lactone synthase AcmA +ec:2.7.7.98 Transferred to 6.2.1.50 +ec:2.7.7.99 N-acetyl-alpha-D-muramate 1-phosphate uridylyltransferase; murU (gene name) +ec:2.7.7.100 SAMP-activating enzyme; UbaA (ambiguous); SAMP-activating enzyme E1 (ambiguous) +ec:2.7.7.101 DNA primase DnaG; DnaG +ec:2.7.7.102 DNA primase AEP; archaeo-eukaryotic primase; AEP; PrimPol +ec:2.7.7.103 L-glutamine-phosphate cytidylyltransferase +ec:2.7.7.104 2-hydroxyethylphosphonate cytidylyltransferase; Fom1 +ec:2.7.7.105 phosphoenolpyruvate guanylyltransferase; fbiD (gene name) +ec:2.7.7.106 3-phospho-D-glycerate guanylyltransferase; cofC (gene name) (ambiguous) +ec:2.7.7.107 (2-aminoethyl)phosphonate cytidylyltransferase; pntC (gene name) +ec:2.7.8.1 ethanolaminephosphotransferase; EPT; diacylglycerol ethanolaminephosphotransferase; CDPethanolamine diglyceride phosphotransferase; phosphorylethanolamine-glyceride transferase; CDP-ethanolamine:1,2-diacylglycerol ethanolaminephosphotransferase +ec:2.7.8.2 diacylglycerol cholinephosphotransferase; phosphorylcholine-glyceride transferase; alkylacylglycerol cholinephosphotransferase; 1-alkyl-2-acetylglycerol cholinephosphotransferase; cholinephosphotransferase; CPT (ambiguous); alkylacylglycerol choline phosphotransferase; diacylglycerol choline phosphotransferase; 1-alkyl-2-acetyl-m-glycerol:CDPcholine choline phosphotransferase; CDP-choline diglyceride phosphotransferase; cytidine diphosphocholine glyceride transferase; cytidine diphosphorylcholine diglyceride transferase; phosphocholine diacylglyceroltransferase; sn-1,2-diacylglycerol cholinephosphotransferase; 1-alkyl-2-acetyl-sn-glycerol cholinephosphotransferase; CDP choline:1,2-diacylglycerol cholinephosphotransferase; CDP-choline:1,2-diacylglycerol cholinephosphotransferase +ec:2.7.8.3 ceramide cholinephosphotransferase; phosphorylcholine-ceramide transferase +ec:2.7.8.4 serine-phosphoethanolamine synthase; serine ethanolamine phosphate synthetase; serine ethanolamine phosphodiester synthase; serine ethanolaminephosphotransferase; serine-phosphinico-ethanolamine synthase; serinephosphoethanolamine synthase +ec:2.7.8.5 CDP-diacylglycerol---glycerol-3-phosphate 1-phosphatidyltransferase; glycerophosphate phosphatidyltransferase; 3-phosphatidyl-1'-glycerol-3'-phosphate synthase; CDPdiacylglycerol:glycerol-3-phosphate phosphatidyltransferase; cytidine 5'-diphospho-1,2-diacyl-sn-glycerol (CDP-diglyceride):sn-glycerol-3-phosphate phosphatidyltransferase; phosphatidylglycerophosphate synthase; phosphatidylglycerolphosphate synthase; PGP synthase; CDP-diacylglycerol-sn-glycerol-3-phosphate 3-phosphatidyltransferase; CDP-diacylglycerol:sn-glycero-3-phosphate phosphatidyltransferase; glycerol phosphate phosphatidyltransferase; glycerol 3-phosphate phosphatidyltransferase; phosphatidylglycerol phosphate synthase; phosphatidylglycerol phosphate synthetase; phosphatidylglycerophosphate synthetase; sn-glycerol-3-phosphate phosphatidyltransferase +ec:2.7.8.6 undecaprenyl-phosphate galactose phosphotransferase; poly(isoprenol)-phosphate galactose phosphotransferase; poly(isoprenyl)phosphate galactosephosphatetransferase; undecaprenyl phosphate galactosyl-1-phosphate transferase; UDP-galactose:undecaprenyl-phosphate galactose phosphotransferase +ec:2.7.8.7 holo-[acyl-carrier-protein] synthase; acyl carrier protein holoprotein (holo-ACP) synthetase; holo-ACP synthetase; coenzyme A:fatty acid synthetase apoenzyme 4'-phosphopantetheine transferase; holosynthase; acyl carrier protein synthetase; holo-ACP synthase; PPTase; AcpS; ACPS; acyl carrier protein synthase; P-pant transferase; CoA:apo-[acyl-carrier-protein] pantetheinephosphotransferase; CoA-[4'-phosphopantetheine]:apo-[acyl-carrier-protein] 4'-pantetheinephosphotransferase +ec:2.7.8.8 CDP-diacylglycerol---serine O-phosphatidyltransferase; phosphatidylserine synthase; CDPdiglyceride-serine O-phosphatidyltransferase; PS synthase; cytidine 5'-diphospho-1,2-diacyl-sn-glycerol (CDPdiglyceride):L-serine O-phosphatidyltransferase; phosphatidylserine synthetase; CDP-diacylglycerol-L-serine O-phosphatidyltransferase; cytidine diphosphoglyceride-serine O-phosphatidyltransferase; CDP-diglyceride-L-serine phosphatidyltransferase; CDP-diglyceride:serine phosphatidyltransferase; cytidine 5'-diphospho-1,2-diacyl-sn-glycerol:L-serine O-phosphatidyltransferase; CDP-diacylglycerol:L-serine 3-O-phosphatidyltransferase +ec:2.7.8.9 phosphomannan mannosephosphotransferase +ec:2.7.8.10 sphingosine cholinephosphotransferase; CDP-choline-sphingosine cholinephosphotransferase; phosphorylcholine-sphingosine transferase; cytidine diphosphocholine-sphingosine cholinephosphotransferase; sphingosine choline phosphotransferase +ec:2.7.8.11 CDP-diacylglycerol---inositol 3-phosphatidyltransferase; CDP-diglyceride-inositol phosphatidyltransferase; phosphatidylinositol synthase; CDP-diacylglycerol-inositol phosphatidyltransferase; CDP-diglyceride:inositol transferase; cytidine 5'-diphospho-1,2-diacyl-sn-glycerol:myo-inositol 3-phosphatidyltransferase; CDP-DG:inositol transferase; cytidine diphosphodiglyceride-inositol phosphatidyltransferase; CDP-diacylglycerol:myo-inositol-3-phosphatidyltransferase; CDP-diglyceride-inositol transferase; cytidine diphosphoglyceride-inositol phosphatidyltransferase; cytidine diphosphoglyceride-inositol transferase +ec:2.7.8.12 teichoic acid poly(glycerol phosphate) polymerase; teichoic-acid synthase; cytidine diphosphoglycerol glycerophosphotransferase; poly(glycerol phosphate) polymerase; teichoic acid glycerol transferase; glycerophosphate synthetase; CGPTase; CDP-glycerol glycerophosphotransferase (ambiguous); Tag polymerase; CDP-glycerol:poly(glycerophosphate) glycerophosphotransferase; tagF (gene name); tarF (gene name) (ambiguous) +ec:2.7.8.13 phospho-N-acetylmuramoyl-pentapeptide-transferase; MraY transferase; UDP-MurNAc-L-Ala-D-gamma-Glu-L-Lys-D-Ala-D-Ala:C55-isoprenoid alcohol transferase; UDP-MurNAc-Ala-gammaDGlu-Lys-DAla-DAla:undecaprenylphosphate transferase; phospho-N-acetylmuramoyl pentapeptide translocase; phospho-MurNAc-pentapeptide transferase; phospho-NAc-muramoyl-pentapeptide translocase (UMP); phosphoacetylmuramoylpentapeptide translocase; phosphoacetylmuramoylpentapeptidetransferase +ec:2.7.8.14 CDP-ribitol ribitolphosphotransferase; teichoic-acid synthase (ambiguous); polyribitol phosphate synthetase (ambiguous); teichoate synthetase (ambiguous); poly(ribitol phosphate) synthetase (ambiguous); polyribitol phosphate polymerase (ambiguous); teichoate synthase (ambiguous); CDP-ribitol:poly(ribitol phosphate) ribitolphosphotransferase +ec:2.7.8.15 UDP-N-acetylglucosamine---dolichyl-phosphate N-acetylglucosaminephosphotransferase; UDP-D-N-acetylglucosamine N-acetylglucosamine 1-phosphate transferase; UDP-GlcNAc:dolichyl-phosphate GlcNAc-1-phosphate transferase; UDP-N-acetyl-D-glucosamine:dolichol phosphate N-acetyl-D-glucosamine-1-phosphate transferase; uridine diphosphoacetylglucosamine-dolichyl phosphate acetylglucosamine-1-phosphotransferase; chitobiosylpyrophosphoryldolichol synthase; dolichol phosphate N-acetylglucosamine-1-phosphotransferase; UDP-acetylglucosamine-dolichol phosphate acetylglucosamine phosphotransferase; UDP-acetylglucosamine-dolichol phosphate acetylglucosamine-1-phosphotransferase +ec:2.7.8.16 Deleted entry +ec:2.7.8.17 UDP-N-acetylglucosamine---lysosomal-enzyme N-acetylglucosaminephosphotransferase; N-acetylglucosaminylphosphotransferase; UDP-N-acetylglucosamine:lysosomal enzyme N-acetylglucosamine-1-phosphotransferase; UDP-GlcNAc:glycoprotein N-acetylglucosamine-1-phosphotransferase; uridine diphosphoacetylglucosamine-lysosomal enzyme precursor acetylglucosamine-1-phosphotransferase; uridine diphosphoacetylglucosamine-glycoprotein acetylglucosamine-1-phosphotransferase; lysosomal enzyme precursor acetylglucosamine-1-phosphotransferase; N-acetylglucosaminyl phosphotransferase; UDP-acetylglucosamine:lysosomal enzyme N-acetylglucosamine-1-phosphotransferase; UDP-GlcNAc:lysosomal enzyme N-acetylglucosamine-1-phosphotransferase; UDP-N-acetylglucosamine:glycoprotein N-acetylglucosamine-1-phosphotransferase; UDP-N-acetylglucosamine:glycoprotein N-acetylglucosaminyl-1-phosphotransferase +ec:2.7.8.18 UDP-galactose---UDP-N-acetylglucosamine galactose phosphotransferase; uridine diphosphogalactose-uridine diphosphoacetylglucosamine galactose-1-phosphotransferase; galactose-1-phosphotransferase; galactosyl phosphotransferase; UDP-galactose:UDP-N-acetyl-D-glucosamine galactose phosphotransferase +ec:2.7.8.19 UDP-glucose---glycoprotein glucose phosphotransferase; UDP-glucose:glycoprotein glucose-1-phosphotransferase; GlcPTase; Glc-phosphotransferase; uridine diphosphoglucose-glycoprotein glucose-1-phosphotransferase +ec:2.7.8.20 phosphatidylglycerol---membrane-oligosaccharide glycerophosphotransferase; phosphoglycerol transferase; oligosaccharide glycerophosphotransferase; phosphoglycerol transferase I +ec:2.7.8.21 membrane-oligosaccharide glycerophosphotransferase; periplasmic phosphoglycerotransferase; phosphoglycerol cyclase +ec:2.7.8.22 1-alkenyl-2-acylglycerol choline phosphotransferase; CDP-choline-1-alkenyl-2-acyl-glycerol phosphocholinetransferase +ec:2.7.8.23 carboxyvinyl-carboxyphosphonate phosphorylmutase +ec:2.7.8.24 phosphatidylcholine synthase; CDP-diglyceride-choline O-phosphatidyltransferase +ec:2.7.8.25 Transferred to 2.4.2.52 +ec:2.7.8.26 adenosylcobinamide-GDP ribazoletransferase; CobS; cobalamin synthase; cobalamin-5'-phosphate synthase; cobalamin (5'-phosphate) synthase +ec:2.7.8.27 sphingomyelin synthase; SM synthase; SMS1; SMS2 +ec:2.7.8.28 2-phospho-L-lactate transferase; cofD (gene name); fbiA (gene name); LPPG:Fo 2-phospho-L-lactate transferase; LPPG:7,8-didemethyl-8-hydroxy-5-deazariboflavin 2-phospho-L-lactate transferase; lactyl-2-diphospho-(5')guanosine:Fo 2-phospho-L-lactate transferase +ec:2.7.8.29 L-serine-phosphatidylethanolamine phosphatidyltransferase; phosphatidylserine synthase 2; serine-exchange enzyme II; PTDSS2 (gene name) +ec:2.7.8.30 Transferred to 2.4.2.53 +ec:2.7.8.31 undecaprenyl-phosphate glucose phosphotransferase; GumD; undecaprenylphosphate glucosylphosphate transferase +ec:2.7.8.32 3-O-alpha-D-mannopyranosyl-alpha-D-mannopyranose xylosylphosphotransferase; XPT1 +ec:2.7.8.33 UDP-N-acetylglucosamine---undecaprenyl-phosphate N-acetylglucosaminephosphotransferase; UDP-N-acetylglucosamine:undecaprenyl-phosphate GlcNAc-1-phosphate transferase; WecA; WecA transferase; UDP-GIcNAc:undecaprenyl phosphate N-acetylglucosaminyl 1-P transferase; GlcNAc-P-P-Und synthase; GPT (ambiguous); TagO; UDP-GlcNAc:undecaprenyl-phosphate GlcNAc-1-phosphate transferase; UDP-N-acetyl-D-glucosamine:ditrans,octacis-undecaprenyl phosphate N-acetylglucosaminephosphotransferase +ec:2.7.8.34 CDP-L-myo-inositol myo-inositolphosphotransferase; CDP-inositol:inositol-1-phosphate transferase (bifunctional CTP:inositol-1-phosphate cytidylyltransferase/CDP-inositol:inositol-1-phosphate transferase (IPCT/DIPPS)); DIPPS (bifunctional CTP:inositol-1-phosphate cytidylyltransferase/CDP-inositol:inositol-1-phosphate transferase (IPCT/DIPPS)) +ec:2.7.8.35 UDP-N-acetylglucosamine---decaprenyl-phosphate N-acetylglucosaminephosphotransferase; GlcNAc-1-phosphate transferase; UDP-GlcNAc:undecaprenyl phosphate GlcNAc-1-phosphate transferase; WecA; WecA transferase +ec:2.7.8.36 undecaprenyl phosphate N,N'-diacetylbacillosamine 1-phosphate transferase; PglC +ec:2.7.8.37 alpha-D-ribose 1-methylphosphonate 5-triphosphate synthase +ec:2.7.8.38 archaetidylserine synthase +ec:2.7.8.39 archaetidylinositol phosphate synthase; AIP synthase +ec:2.7.8.40 UDP-N-acetylgalactosamine-undecaprenyl-phosphate N-acetylgalactosaminephosphotransferase; WecP; UDP-GalNAc:polyprenol-P GalNAc-1-P transferase; UDP-GalNAc:undecaprenyl-phosphate GalNAc-1-phosphate transferase +ec:2.7.8.41 cardiolipin synthase (CMP-forming) +ec:2.7.8.42 Kdo2-lipid A phosphoethanolamine 7''-transferase; eptB (gene name) +ec:2.7.8.43 lipid A phosphoethanolamine transferase; lipid A PEA transferase; LptA +ec:2.7.8.44 teichoic acid glycerol-phosphate primase; Tag primase; CDP-glycerol:glycerophosphate glycerophosphotransferase; tagB (gene name); tarB (gene name) +ec:2.7.8.45 teichoic acid glycerol-phosphate transferase; tarF (gene name) (ambiguous); teichoic acid glycerol-phosphate primase +ec:2.7.8.46 teichoic acid ribitol-phosphate primase; Tar primase; tarK (gene name) +ec:2.7.8.47 teichoic acid ribitol-phosphate polymerase; Tar polymerase (ambiguous); tarL (gene name) (ambiguous) +ec:2.7.9.1 pyruvate, phosphate dikinase; pyruvate, orthophosphate dikinase; pyruvate-phosphate dikinase (phosphorylating); pyruvate, phosphate dikinase; pyruvate-inorganic phosphate dikinase; pyruvate-phosphate dikinase; pyruvate-phosphate ligase; pyruvic-phosphate dikinase; pyruvic-phosphate ligase; pyruvate, Pi dikinase; PPDK +ec:2.7.9.2 pyruvate, water dikinase; phosphoenolpyruvate synthase; pyruvate-water dikinase (phosphorylating); PEP synthetase; phosphoenolpyruvate synthase; phoephoenolpyruvate synthetase; phosphoenolpyruvic synthase; phosphopyruvate synthetase +ec:2.7.9.3 selenide, water dikinase; selenophosphate synthase +ec:2.7.9.4 alpha-glucan, water dikinase; starch-related R1 protein; GWD +ec:2.7.9.5 phosphoglucan, water dikinase; PWD; OK1 +ec:2.7.9.6 rifampicin phosphotransferase; rifampin phosphotransferase; RPH +ec:2.7.10.1 receptor protein-tyrosine kinase; AATK; AATYK; AATYK2; AATYK3; ACH; ALK; anaplastic lymphoma kinase; ARK; ATP:protein-tyrosine O-phosphotransferase (ambiguous); AXL; Bek; Bfgfr; BRT; Bsk; C-FMS; CAK; CCK4; CD115; CD135; CDw135; Cek1; Cek10; Cek11; Cek2; Cek3; Cek5; Cek6; Cek7; CFD1; CKIT; CSF1R; DAlk; DDR1; DDR2; Dek; DKFZp434C1418; Drosophila Eph kinase; DRT; DTK; Ebk; ECK; EDDR1; Eek; EGFR; Ehk2; Ehk3; Elk; EPH; EPHA1; EPHA2; EPHA6; EPHA7; EPHA8; EPHB1; EPHB2; EPHB3; EPHB4; EphB5; ephrin-B3 receptor tyrosine kinase; EPHT; EPHT2; EPHT3; EPHX; ERBB; ERBB1; ERBB2; ERBB3; ERBB4; ERK; Eyk; FGFR1; FGFR2; FGFR3; FGFR4; FLG; FLK1; FLK2; FLT1; FLT2; FLT3; FLT4; FMS; Fv2; HBGFR; HEK11; HEK2; HEK3; HEK5; HEK6; HEP; HER2; HER3; HER4; HGFR; HSCR1; HTK; IGF1R; INSR; INSRR; insulin receptor protein-tyrosine kinase; IR; IRR; JTK12; JTK13; JTK14; JWS; K-SAM; KDR; KGFR; KIA0641; KIAA1079; KIAA1459; Kil; Kin15; Kin16; KIT; KLG; LTK; MCF3; Mdk1; Mdk2; Mdk5; MEhk1; MEN2A/B; Mep; MER; MERTK; MET; Mlk1; Mlk2; Mrk; MST1R; MTC1; MUSK; Myk1; N-SAM; NEP; NET; Neu; neurite outgrowth regulating kinase; NGL; NOK; nork; novel oncogene with kinase-domain; Nsk2; NTRK1; NTRK2; NTRK3; NTRK4; NTRKR1; NTRKR2; NTRKR3; Nuk; NYK; PCL; PDGFR; PDGFRA; PDGFRB; PHB6; protein-tyrosine kinase (ambiguous); protein tyrosine kinase (ambiguous); PTK; PTK3; PTK7; receptor protein tyrosine kinase; RET; RON; ROR1; ROR2; ROS1; RSE; RTK; RYK; SEA; Sek2; Sek3; Sek4; Sfr; SKY; STK (ambiguous); STK1; TEK; TIE; TIE1; TIE2; TIF; TKT; TRK; TRKA; TRKB; TRKC; TRKE; TYK1; TYRO10; Tyro11; TYRO3; Tyro5; Tyro6; TYRO7; UFO; VEGFR1; VEGFR2; VEGFR3; Vik; YK1; Yrk +ec:2.7.10.2 non-specific protein-tyrosine kinase; ABL; ABL1; ABL2; ABLL; ACK1; ACK2; AGMX1; ARG; ATK; ATP:protein-tyrosine O-phosphotransferase (ambiguous); BLK; Bmk; BMX; BRK; Bruton's tyrosine kinase; Bsk; BTK; BTKL; CAKb; Cdgip; CHK; CSK; CTK; CYL; cytoplasmic protein tyrosine kinase; EMT; ETK; Fadk; FAK; FAK2; FER; Fert1/2; FES; FGR; focal adhesion kinase; FPS; FRK; FYN; HCK; HCTK; HYL; IMD1; ITK; IYK; JAK1; JAK2; JAK3; Janus kinase 1; Janus kinase 2; Janus kinase 3; JTK1; JTK9; L-JAK; LCK; LSK; LYN; MATK; Ntk; p60c-src protein tyrosine kinase; PKB; protein-tyrosine kinase (ambiguous); PSCTK; PSCTK1; PSCTK2; PSCTK4; PSCTK5; PTK2; PTK2B; PTK6; PYK2; RAFTK; RAK; Rlk; Sik; SLK; SRC; SRC2; SRK; SRM; SRMS; STD; SYK; SYN; Tck; TEC; TNK1; Tsk; TXK; TYK2; TYK3; YES1; YK2; ZAP70 +ec:2.7.10.3 bacterial tyrosine kinase; BY-kinase; bacterial protein tyrosine kinase +ec:2.7.11.1 non-specific serine/threonine protein kinase; A-kinase; AP50 kinase; ATP-protein transphosphorylase; calcium-dependent protein kinase C; calcium/phospholipid-dependent protein kinase; cAMP-dependent protein kinase; cAMP-dependent protein kinase A; casein kinase; casein kinase (phosphorylating); casein kinase 2; casein kinase I; casein kinase II; cGMP-dependent protein kinase; CK-2; CKI; CKII; cyclic AMP-dependent protein kinase; cyclic AMP-dependent protein kinase A; cyclic monophosphate-dependent protein kinase; cyclic nucleotide-dependent protein kinase; cyclin-dependent kinase; cytidine 3',5'-cyclic monophosphate-responsive protein kinase; dsk1; glycogen synthase a kinase; glycogen synthase kinase; HIPK2; Hpr kinase; hydroxyalkyl-protein kinase; hydroxyalkyl-protein kinase; M phase-specific cdc2 kinase; mitogen-activated S6 kinase; p82 kinase; phosphorylase b kinase kinase; PKA; protein glutamyl kinase; protein kinase (phosphorylating); protein kinase A; protein kinase CK2; protein kinase p58; protein phosphokinase; protein serine kinase; protein serine-threonine kinase; protein-aspartyl kinase; protein-cysteine kinase; protein-serine kinase; Prp4 protein kinase; Raf kinase; Raf-1; ribosomal protein S6 kinase II; ribosomal S6 protein kinase; serine kinase; serine protein kinase; serine-specific protein kinase; serine(threonine) protein kinase; serine/threonine protein kinase; STK32; T-antigen kinase; threonine-specific protein kinase; twitchin kinase; type-2 casein kinase; betaIIPKC; epsilon PKC; Wee 1-like kinase; Wee-kinase; WEE1Hu +ec:2.7.11.2 [pyruvate dehydrogenase (acetyl-transferring)] kinase; PDH kinase; PDHK; PDK; PDK1; PDK2; PDK3; PDK4; pyruvate dehydrogenase kinase; pyruvate dehydrogenase kinase (phosphorylating); pyruvate dehydrogenase kinase activator protein; STK1 +ec:2.7.11.3 dephospho-[reductase kinase] kinase; AMP-activated kinase; AMP-activated protein kinase kinase; hydroxymethylglutaryl coenzyme A reductase kinase kinase; hydroxymethylglutaryl coenzyme A reductase kinase kinase (phosphorylating); reductase kinase; reductase kinase kinase; STK30 +ec:2.7.11.4 [3-methyl-2-oxobutanoate dehydrogenase (acetyl-transferring)] kinase; BCK; BCKD kinase; BCODH kinase; branched-chain alpha-ketoacid dehydrogenase kinase; branched-chain 2-oxo acid dehydrogenase kinase; branched-chain keto acid dehydrogenase kinase; branched-chain oxo acid dehydrogenase kinase (phosphorylating); STK2 +ec:2.7.11.5 [isocitrate dehydrogenase (NADP+)] kinase; [isocitrate dehydrogenase (NADP+)] kinase; ICDH kinase/phosphatase; IDH kinase; IDH kinase/phosphatase; IDH-K/P; IDHK/P; isocitrate dehydrogenase kinase (phosphorylating); isocitrate dehydrogenase kinase/phosphatase; STK3 +ec:2.7.11.6 [tyrosine 3-monooxygenase] kinase; pheochromocytoma tyrosine hydroxylase-associated kinase; STK4; tyrosine 3-monooxygenase kinase (phosphorylating) +ec:2.7.11.7 myosin-heavy-chain kinase; ATP:myosin-heavy-chain O-phosphotransferase; calmodulin-dependent myosin heavy chain kinase; MHCK; MIHC kinase; myosin heavy chain kinase; myosin I heavy-chain kinase; myosin II heavy-chain kinase; [myosin-heavy-chain] kinase; myosin heavy chain kinase A; STK6 +ec:2.7.11.8 Fas-activated serine/threonine kinase; FAST; FASTK; STK10 +ec:2.7.11.9 Goodpasture-antigen-binding protein kinase; GPBPK; GPBP kinase; STK11; Goodpasture antigen-binding protein kinase +ec:2.7.11.10 IkappaB kinase; CHUK; IKBKA; IKBKB; IKK; IKK-1; IKK-2; inhibitor of NFkappaB kinase; inhibitor of NF-kappaB kinase; STK12; TANK-binding kinase 1; TBK1 +ec:2.7.11.11 cAMP-dependent protein kinase; PKA; protein kinase A; PKA catalytic (C) subunit; A kinase; ATP:protein phosphotransferase (cAMP-dependent) +ec:2.7.11.12 cGMP-dependent protein kinase; 3':5'-cyclic GMP-dependent protein kinase; cGMP-dependent protein kinase Ibeta; guanosine 3':5'-cyclic monophosphate-dependent protein kinase; PKG; PKG 1alpha; PKG 1beta; PKG II; STK23 +ec:2.7.11.13 protein kinase C; calcium-dependent protein kinase C; calcium-independent protein kinase C; calcium/phospholipid dependent protein kinase; cPKCalpha; cPKCbeta; cPKCgamma; nPKCdelta; nPKCepsilon; nPKC; nPKC; PKC; PKCalpha; PKCbeta; PKCgamma; PKCdelta; PKCepsilon; PKCzeta; Pkc1p; protein kinase Cepsilon; STK24 +ec:2.7.11.14 rhodopsin kinase; cone opsin kinase; G-protein-coupled receptor kinase 1; GPCR kinase 1; GRK1; GRK7; opsin kinase; opsin kinase (phosphorylating); rhodopsin kinase (phosphorylating); RK; STK14 +ec:2.7.11.15 beta-adrenergic-receptor kinase; ATP:beta-adrenergic-receptor phosphotransferase; [beta-adrenergic-receptor] kinase; beta-adrenergic receptor-specific kinase; beta-AR kinase; beta-ARK; beta-ARK 1; beta-ARK 2; beta-receptor kinase; GRK2; GRK3; beta-adrenergic-receptor kinase (phosphorylating); beta2ARK; betaARK1; beta-adrenoceptor kinase; beta-adrenoceptor kinase 1; beta-adrenoceptor kinase 2; ADRBK1; BARK1; adrenergic receptor kinase; STK15 +ec:2.7.11.16 G-protein-coupled receptor kinase; G protein-coupled receptor kinase; GPCR kinase; GPCRK; GRK4; GRK5; GRK6; STK16 +ec:2.7.11.17 Ca2+/calmodulin-dependent protein kinase; ATP:caldesmon O-phosphotransferase; caldesmon kinase; caldesmon kinase (phosphorylating); Ca2+/calmodulin-dependent microtubule-associated protein 2 kinase; Ca2+/calmodulin-dependent protein kinase 1; Ca2+/calmodulin-dependent protein kinase II; Ca2+/calmodulin-dependent protein kinase IV; Ca2+/calmodulin-dependent protein kinase kinase; Ca2+/calmodulin-dependent protein kinase kinase beta; calmodulin-dependent kinase II; CaM kinase; CaM kinase II; CAM PKII; CaM-regulated serine/threonine kinase; CaMKI; CaMKII; CaMKIV; CaMKKalpha; CaMKKbeta; microtubule-associated protein 2 kinase; STK20 +ec:2.7.11.18 myosin-light-chain kinase; [myosin-light-chain] kinase; ATP:myosin-light-chain O-phosphotransferase; calcium/calmodulin-dependent myosin light chain kinase; MLCK; MLCKase; myosin kinase; myosin light chain kinase; myosin light chain protein kinase; myosin light-chain kinase (phosphorylating); smooth-muscle-myosin-light-chain kinase; STK18 +ec:2.7.11.19 phosphorylase kinase; dephosphophosphorylase kinase; glycogen phosphorylase kinase; PHK; phosphorylase b kinase; phosphorylase B kinase; phosphorylase kinase (phosphorylating); STK17 +ec:2.7.11.20 elongation factor 2 kinase; Ca/CaM-kinase III; calmodulin-dependent protein kinase III; CaM kinase III; eEF2 kinase; eEF2K; EF2K; STK19 +ec:2.7.11.21 polo kinase; Cdc5; Cdc5p; Plk; PLK; Plk1; Plo1; POLO kinase; polo serine-threonine kinase; polo-like kinase; polo-like kinase 1; serine/threonine-specific Drosophila kinase polo; STK21 +ec:2.7.11.22 cyclin-dependent kinase; Bur1; Bur1 Cdk; Cak1; Cak1p; cdc2; cdc2 kinase; Cdc28p; CDK; cdk-activating kinase; Cdk-activating protein kinase; cdk1; cdk2; Cdk2; cdk3; cdk4; cdk5; cdk6; cdk7; cdk8; cdk9; cyclin A-activated cdc2; cyclin A-activated cdk2; cyclin D-cdk6 kinase; cyclin D-dependent kinase; cyclin E kinase; cyclin-A associated kinase; cyclin-dependent kinase 6; cyclin-dependent kinase-2; cyclin-dependent kinase-4; cyclin-dependent protein kinase activating kinase; cyk; D-type cyclin kinase; nclk; neuronal cdc2-like kinase; PCTAIRE-1; STK25 +ec:2.7.11.23 [RNA-polymerase]-subunit kinase; CTD kinase; STK9 +ec:2.7.11.24 mitogen-activated protein kinase; c-Jun N-terminal kinase; Dp38; ERK; ERK1; ERK2; extracellular signal-regulated kinase; JNK; JNK3alpha1; LeMPK3; MAP kinase; MAP-2 kinase; MAPK; MBP kinase I; MBP kinase II; microtubule-associated protein 2 kinase; microtubule-associated protein kinase; myelin basic protein kinase; p38delta; p38-2; p42 mitogen-activated protein kinase; p42mapk; PMK-1; PMK-2; PMK-3; pp42; pp44mapk; p44mpk; SAPK; STK26; stress-activated protein kinase +ec:2.7.11.25 mitogen-activated protein kinase kinase kinase; cMos; cRaf; MAPKKK; MAP3K; MAP kinase kinase kinase; MEKK; MEKK1; MEKK2; MEKK3; MEK kinase; Mil/Raf; MLK-like mitogen-activated protein triple kinase; MLTK; MLTKa; MLTKb; REKS; STK28 +ec:2.7.11.26 tau-protein kinase; ATP:tau-protein O-hosphotransferase; brain protein kinase PK40erk; cdk5/p20; CDK5/p23; glycogen synthase kinase-3beta; GSK; protein tau kinase; STK31; tau kinase; [tau-protein] kinase; tau-protein kinase I; tau-protein kinase II; tau-tubulin kinase; TPK; TPK I; TPK II; TTK +ec:2.7.11.27 [acetyl-CoA carboxylase] kinase; acetyl coenzyme A carboxylase kinase (phosphorylating); acetyl-CoA carboxylase bound kinase; acetyl-CoA carboxylase kinase; acetyl-CoA carboxylase kinase (cAMP-independent); acetyl-CoA carboxylase kinase 2; acetyl-CoA carboxylase kinase-2; acetyl-CoA carboxylase kinase-3 (AMP-activated); acetyl-coenzyme A carboxylase kinase; ACK2; ACK3; AMPK; I-peptide kinase; STK5 +ec:2.7.11.28 tropomyosin kinase; tropomyosin kinase (phosphorylating); STK (ambiguous) +ec:2.7.11.29 low-density-lipoprotein receptor kinase; ATP:low-density-lipoprotein-L-serine O-phosphotransferase; LDL receptor kinase; [low-density-lipoprotein] kinase; low-density lipoprotein kinase; low-density-lipoprotein receptor kinase (phosphorylating); STK7 +ec:2.7.11.30 receptor protein serine/threonine kinase; activin receptor kinase; receptor type I serine/threonine protein kinase; receptor type II serine/threonine protein kinase; STK13; TGF-beta kinase; receptor serine/threonine protein kinase +ec:2.7.11.31 [hydroxymethylglutaryl-CoA reductase (NADPH)] kinase; AMPK; AMP-activated protein kinase; HMG-CoA reductase kinase; beta-hydroxy-beta-methylglutaryl-CoA reductase kinase; [hydroxymethylglutaryl-CoA reductase (NADPH2)] kinase; 3-hydroxy-3-methylglutaryl coenzyme A reductase kinase; 3-hydroxy-3-methylglutaryl-CoA reductase kinase; hydroxymethylglutaryl coenzyme A reductase kinase; hydroxymethylglutaryl coenzyme A reductase kinase (phosphorylating); hydroxymethylglutaryl-CoA reductase kinase; reductase kinase; STK29 +ec:2.7.11.32 [pyruvate, phosphate dikinase] kinase; PPDK regulatory protein (ambiguous); pyruvate; phosphate dikinase regulatory protein (ambiguous); bifunctional dikinase regulatory protein (ambiguous) +ec:2.7.11.33 [pyruvate, water dikinase] kinase; PSRP (ambiguous); PEPS kinase +ec:2.7.11.34 NEK6-subfamily protein kinase; NEK6; NEK7; nekl-3 +ec:2.7.12.1 dual-specificity kinase; ADK1; Arabidopsis dual specificity kinase 1; CLK1; dDYRK2; Mps1p +ec:2.7.12.2 mitogen-activated protein kinase kinase; MAP kinase kinase; MAP kinase kinase 4; MAP kinase kinase 7; MAP kinase or ERK kinase; MAP2K; MAPKK; MAPKK1; MEK; MEK1; MEK2; MKK; MKK2; MKK4; MKK6; MKK7; STK27 +ec:2.7.13.1 protein-histidine pros-kinase; ATP:protein-L-histidine N-pros-phosphotransferase; histidine kinase (ambiguous); histidine protein kinase (ambiguous); protein histidine kinase (ambiguous); protein kinase (histidine) (ambiguous); HK2 +ec:2.7.13.2 protein-histidine tele-kinase; ATP:protein-L-histidine N-tele-phosphotransferase; histidine kinase (ambiguous); histidine protein kinase (ambiguous); protein histidine kinase (ambiguous); protein kinase (histidine) (ambiguous); HK3 +ec:2.7.13.3 histidine kinase; EnvZ; histidine kinase (ambiguous); histidine protein kinase (ambiguous); protein histidine kinase (ambiguous); protein kinase (histidine) (ambiguous); HK1; HP165; Sln1p +ec:2.7.14.1 protein arginine kinase; McsB +ec:2.7.99.1 triphosphate---protein phosphotransferase; diphosphate:microsomal-membrane-protein O-phosphotransferase (erroneous); DiPPT (erroneous); pyrophosphate:protein phosphotransferase (erroneous); diphosphate---protein phosphotransferase (erroneous); diphosphate:[microsomal-membrane-protein] O-phosphotransferase (erroneous) +ec:2.8.1.1 thiosulfate sulfurtransferase; thiosulfate cyanide transsulfurase; thiosulfate thiotransferase; rhodanese; rhodanase +ec:2.8.1.2 3-mercaptopyruvate sulfurtransferase; beta-mercaptopyruvate sulfurtransferase; TUM1 (gene name); MPST (gene name); 3-mercaptopyruvate:cyanide sulfurtransferase +ec:2.8.1.3 thiosulfate---thiol sulfurtransferase; glutathione-dependent thiosulfate reductase; sulfane reductase; sulfane sulfurtransferase +ec:2.8.1.4 tRNA uracil 4-sulfurtransferase; thiI (gene name); transfer ribonucleate sulfurtransferase (ambiguous); RNA sulfurtransferase (ambiguous); ribonucleate sulfurtransferase (ambiguous); transfer RNA sulfurtransferase (ambiguous); transfer RNA thiolase (ambiguous); L-cysteine:tRNA sulfurtransferase (incorrect); tRNA sulfurtransferase (ambiguous) +ec:2.8.1.5 thiosulfate---dithiol sulfurtransferase; thiosulfate reductase; TSR +ec:2.8.1.6 biotin synthase; dethiobiotin:sulfur sulfurtransferase +ec:2.8.1.7 cysteine desulfurase; IscS; NIFS; NifS; SufS; cysteine desulfurylase +ec:2.8.1.8 lipoyl synthase; lipA (gene name); LS; lipoate synthase; protein 6-N-(octanoyl)lysine:sulfur sulfurtransferase; protein N6-(octanoyl)lysine:sulfur sulfurtransferase; protein N6-(octanoyl)lysine:sulfur-(sulfur carrier) sulfurtransferase +ec:2.8.1.9 molybdenum cofactor sulfurtransferase; molybdenum cofactor sulfurase; ABA3; HMCS; MoCo sulfurase; MoCo sulfurtransferase +ec:2.8.1.10 thiazole synthase; thiG (gene name) +ec:2.8.1.11 molybdopterin synthase sulfurtransferase; adenylyltransferase and sulfurtransferase MOCS3; Cnx5 (gene name); molybdopterin synthase sulfurylase +ec:2.8.1.12 molybdopterin synthase; MPT synthase +ec:2.8.1.13 tRNA-uridine 2-sulfurtransferase; mnmA (gene name) +ec:2.8.1.14 tRNA-5-taurinomethyluridine 2-sulfurtransferase; MTU1 (gene name); SLM3 (gene name); MTO2 (gene name) +ec:2.8.1.15 tRNA-5-methyluridine54 2-sulfurtransferase; TtuA +ec:2.8.1.16 L-aspartate semialdehyde sulfurtransferase; MA1821 (locus name); MJ0100 (locus name) +ec:2.8.2.1 aryl sulfotransferase; phenol sulfotransferase; sulfokinase; 1-naphthol phenol sulfotransferase; 2-naphtholsulfotransferase; 4-nitrocatechol sulfokinase; arylsulfotransferase; dopamine sulfotransferase; p-nitrophenol sulfotransferase; phenol sulfokinase; ritodrine sulfotransferase; PST; 3'-phosphoadenylyl-sulfate:phenol sulfotransferase +ec:2.8.2.2 alcohol sulfotransferase; hydroxysteroid sulfotransferase; 3beta-hydroxy steroid sulfotransferase; Delta5-3beta-hydroxysteroid sulfokinase; 3-hydroxysteroid sulfotransferase; HST; 5alpha-androstenol sulfotransferase; cholesterol sulfotransferase; dehydroepiandrosterone sulfotransferase; estrogen sulfokinase; estrogen sulfotransferase; steroid alcohol sulfotransferase; steroid sulfokinase; steroid sulfotransferase; sterol sulfokinase; sterol sulfotransferase; alcohol/hydroxysteroid sulfotransferase; 3beta-hydroxysteroid sulfotransferase; 3'-phosphoadenylyl-sulfate:alcohol sulfotransferase +ec:2.8.2.3 amine sulfotransferase; arylamine sulfotransferase; amine N-sulfotransferase; 3'-phosphoadenylyl-sulfate:amine N-sulfotransferase +ec:2.8.2.4 estrone sulfotransferase; 3'-phosphoadenylyl sulfate-estrone 3-sulfotransferase; estrogen sulfotransferase; estrogen sulphotransferase; oestrogen sulphotransferase; 3'-phosphoadenylylsulfate:oestrone sulfotransferase; 3'-phosphoadenylyl-sulfate:estrone 3-sulfotransferase +ec:2.8.2.5 chondroitin 4-sulfotransferase; chondroitin sulfotransferase; 3'-phosphoadenylyl-sulfate:chondroitin 4'-sulfotransferase +ec:2.8.2.6 choline sulfotransferase; choline sulphokinase; 3'-phosphoadenylyl-sulfate:choline sulfotransferase +ec:2.8.2.7 UDP-N-acetylgalactosamine-4-sulfate sulfotransferase; uridine diphosphoacetylgalactosamine 4-sulfate sulfotransferase; uridine diphospho-N-acetylgalactosamine 4-sulfate sulfotransferase; 3'-phosphoadenylyl-sulfate:UDP-N-acetyl-D-galactosamine-4-sulfate 6-sulfotransferase +ec:2.8.2.8 [heparan sulfate]-glucosamine N-sulfotransferase; heparin N-sulfotransferase; 3'-phosphoadenylylsulfate:N-desulfoheparin sulfotransferase; PAPS:N-desulfoheparin sulfotransferase; PAPS:DSH sulfotransferase; N-HSST; N-heparan sulfate sulfotransferase; heparan sulfate N-deacetylase/N-sulfotransferase; heparan sulfate 2-N-sulfotransferase; heparan sulfate N-sulfotransferase; heparan sulfate sulfotransferase; N-desulfoheparin sulfotransferase; desulfoheparin sulfotransferase; 3'-phosphoadenylyl-sulfate:N-desulfoheparin N-sulfotransferase; heparitin sulfotransferase; 3'-phosphoadenylyl-sulfate:heparitin N-sulfotransferase; 3'-phosphoadenylyl-sulfate:[heparan sulfate]-glucosamine N-sulfotransferase +ec:2.8.2.9 tyrosine-ester sulfotransferase; aryl sulfotransferase IV; L-tyrosine methyl ester sulfotransferase; 3'-phosphoadenylyl-sulfate:L-tyrosine-methyl-ester sulfotransferase +ec:2.8.2.10 Renilla-luciferin sulfotransferase; luciferin sulfotransferase; luciferin sulfokinase; luciferin sulfokinase (3'-phosphoadenylyl sulfate:luciferin sulfotransferase); 3'-phosphoadenylyl-sulfate:Renilla luciferin sulfotransferase +ec:2.8.2.11 galactosylceramide sulfotransferase; GSase; 3'-phosphoadenosine-5'-phosphosulfate-cerebroside sulfotransferase; galactocerebroside sulfotransferase; galactolipid sulfotransferase; glycolipid sulfotransferase; glycosphingolipid sulfotransferase; 3'-phosphoadenylyl-sulfate:galactosylceramide 3'-sulfotransferase +ec:2.8.2.12 Deleted entry +ec:2.8.2.13 psychosine sulfotransferase; PAPS:psychosine sulphotransferase; 3'-phosphoadenosine 5'-phosphosulfate-psychosine sulphotransferase; 3'-phosphoadenylyl-sulfate:galactosylsphingosine sulfotransferase +ec:2.8.2.14 bile-salt sulfotransferase; BAST I; bile acid:3'-phosphoadenosine-5'-phosphosulfate sulfotransferase; bile salt:3'phosphoadenosine-5'-phosphosulfate:sulfotransferase; bile acid sulfotransferase I; glycolithocholate sulfotransferase; 3'-phosphoadenylyl-sulfate:glycolithocholate sulfotransferase +ec:2.8.2.15 steroid sulfotransferase; steroid alcohol sulfotransferase; 3'-phosphoadenylyl-sulfate:phenolic-steroid sulfotransferase +ec:2.8.2.16 thiol sulfotransferase; phosphoadenylylsulfate-thiol sulfotransferase; PAPS sulfotransferase; adenosine 3'-phosphate 5'-sulphatophosphate sulfotransferase; 3'-phosphoadenylyl-sulfate:thiol S-sulfotransferase +ec:2.8.2.17 chondroitin 6-sulfotransferase; chondroitin 6-O-sulfotransferase; 3'-phosphoadenosine 5'-phosphosulfate (PAPS):chondroitin sulfate sulfotransferase; terminal 6-sulfotransferase; 3'-phosphoadenylyl-sulfate:chondroitin 6'-sulfotransferase +ec:2.8.2.18 cortisol sulfotransferase; glucocorticosteroid sulfotransferase; glucocorticoid sulfotransferase; 3'-phosphoadenylyl-sulfate:cortisol 21-sulfotransferase +ec:2.8.2.19 triglucosylalkylacylglycerol sulfotransferase; triglucosylmonoalkylmonoacyl sulfotransferase; 3'-phosphoadenylyl-sulfate:triglucosyl-1-O-alkyl-2-O-acylglycerol 6-sulfotransferase +ec:2.8.2.20 protein-tyrosine sulfotransferase; tyrosylprotein sulfotransferase; 3'-phosphoadenylyl-sulfate:protein-tyrosine O-sulfotransferase +ec:2.8.2.21 keratan sulfotransferase; 3'-phosphoadenylyl keratan sulfotransferase; keratan sulfate sulfotransferase; 3'-phosphoadenylylsulfate:keratan sulfotransferase; 3'-phosphoadenylyl-sulfate:keratan 6'-sulfotransferase +ec:2.8.2.22 aryl-sulfate sulfotransferase; arylsulfate-phenol sulfotransferase; arylsulfotransferase (ambiguous); ASST; arylsulfate sulfotransferase; arylsulfate:phenol sulfotransferase; astA (gene name); aryl-sulfate:phenol sulfotransferase +ec:2.8.2.23 [heparan sulfate]-glucosamine 3-sulfotransferase 1; heparin-glucosamine 3-O-sulfotransferase; 3'-phosphoadenylyl-sulfate:heparin-glucosamine 3-O-sulfotransferase; glucosaminyl 3-O-sulfotransferase; heparan sulfate D-glucosaminyl 3-O-sulfotransferase; isoform/isozyme 1 (3-OST-1, HS3ST1); 3'-phosphoadenylyl-sulfate:[heparan sulfate]-glucosamine 3-sulfotransferase +ec:2.8.2.24 aromatic desulfoglucosinolate sulfotransferase; desulfoglucosinolate sulfotransferase (ambiguous); PAPS-desulfoglucosinolate sulfotransferase (ambiguous); 3'-phosphoadenosine-5'-phosphosulfate:desulfoglucosinolate sulfotransferase (ambiguous); 3'-phosphoadenylyl-sulfate:aromatic desulfoglucosinolate sulfotransferase +ec:2.8.2.25 flavonol 3-sulfotransferase; 3'-phosphoadenylyl-sulfate:quercetin 3-sulfotransferase +ec:2.8.2.26 quercetin-3-sulfate 3'-sulfotransferase; flavonol 3'-sulfotransferase; 3'-Sulfotransferase; PAPS:flavonol 3-sulfate 3'-sulfotransferase; 3'-phosphoadenylyl-sulfate:quercetin-3-sulfate 3'-sulfotransferase +ec:2.8.2.27 quercetin-3-sulfate 4'-sulfotransferase; flavonol 4'-sulfotransferase; PAPS:flavonol 3-sulfate 4'-sulfotransferase; 3'-phosphoadenylyl-sulfate:quercetin-3-sulfate 4'-sulfotransferase +ec:2.8.2.28 quercetin-3,3'-bissulfate 7-sulfotransferase; flavonol 7-sulfotransferase; 7-sulfotransferase; PAPS:flavonol 3,3'/3,4'-disulfate 7-sulfotransferase; 3'-phosphoadenylyl-sulfate:quercetin-3,3'-bissulfate 7-sulfotransferase +ec:2.8.2.29 [heparan sulfate]-glucosamine 3-sulfotransferase 2; glucosaminyl 3-O-sulfotransferase; heparan sulfate D-glucosaminyl 3-O-sulfotransferase; isoform/isozyme 2 (3-OST-2, HS3ST2); 3'-phosphoadenylyl-sulfate:[heparan sulfate]-glucosamine 3-sulfotransferase +ec:2.8.2.30 [heparan sulfate]-glucosamine 3-sulfotransferase 3; 3'-phosphoadenylyl-sulfate:[heparan sulfate]-glucosamine 3-sulfotransferase +ec:2.8.2.31 petromyzonol sulfotransferase; PZ-SULT; 3'-phosphoadenylyl-sulfate:5alpha-cholan-3alpha,7alpha,12alpha,24-tetrol sulfotransferase +ec:2.8.2.32 scymnol sulfotransferase; 3'-phosphoadenylyl sulfate:5beta-scymnol sulfotransferase +ec:2.8.2.33 N-acetylgalactosamine 4-sulfate 6-O-sulfotransferase; GalNAc4S-6ST; CHST15 (gene name); 3'-phosphoadenylyl-sulfate:[dermatan]-4-O-sulfo-N-acetyl-D-galactosamine 6-O-sulfotransferase +ec:2.8.2.34 glycochenodeoxycholate sulfotransferase; bile acid:3'-phosphoadenosine-5'-phosphosulfate sulfotransferase; bile acid:PAPS:sulfotransferase; BAST; 3'-phosphoadenylyl-sulfate:glycochenodeoxycholate 7-sulfotransferase +ec:2.8.2.35 dermatan 4-sulfotransferase; dermatan-specific N-acetylgalactosamine 4-O-sulfotransferase; dermatan-4-sulfotransferase-1; dermatan-4-sulfotransferase 1; D4ST-1; dermatan N-acetylgalactosamine 4-O-sulfotransferase; CHST14 protein; CHST14; 3'-phospho-5'-adenylyl sulfate:[dermatan]-N-acetyl-D-galactosamine 4-sulfotransferase +ec:2.8.2.36 desulfo-A47934 sulfotransferase; StaL; 3'-phosphoadenylyl-sulfate:desulfo-A47934 sulfotransferase +ec:2.8.2.37 trehalose 2-sulfotransferase; Stf0 sulfotransferase; 3'-phosphoadenylyl-sulfate:alpha,alpha-trehalose 2-sulfotransferase +ec:2.8.2.38 aliphatic desulfoglucosinolate sulfotransferase; SOT17 (gene name); SOT18 (gene name); 3'-phosphoadenylyl-sulfate:aliphatic desulfoglucosinolate sulfotransferase +ec:2.8.2.39 hydroxyjasmonate sulfotransferase; ST2A (gene name); 3'-phosphoadenylyl-sulfate:12-hydroxyjasmonate sulfotransferase +ec:2.8.2.40 omega-hydroxy-beta-dihydromenaquinone-9 sulfotransferase; stf3 (gene name) +ec:2.8.3.1 propionate CoA-transferase; propionate coenzyme A-transferase; propionate-CoA:lactoyl-CoA transferase; propionyl CoA:acetate CoA transferase; propionyl-CoA transferase +ec:2.8.3.2 oxalate CoA-transferase; succinyl---beta-ketoacyl-CoA transferase; oxalate coenzyme A-transferase +ec:2.8.3.3 malonate CoA-transferase; malonate coenzyme A-transferase +ec:2.8.3.4 Deleted entry +ec:2.8.3.5 3-oxoacid CoA-transferase; 3-oxoacid coenzyme A-transferase; 3-ketoacid CoA-transferase; 3-ketoacid coenzyme A transferase; 3-oxo-CoA transferase; 3-oxoacid CoA dehydrogenase; acetoacetate succinyl-CoA transferase; acetoacetyl coenzyme A-succinic thiophorase; succinyl coenzyme A-acetoacetyl coenzyme A-transferase; succinyl-CoA transferase +ec:2.8.3.6 3-oxoadipate CoA-transferase; 3-oxoadipate coenzyme A-transferase; 3-oxoadipate succinyl-CoA transferase +ec:2.8.3.7 Deleted entry +ec:2.8.3.8 acetate CoA-transferase; acetate coenzyme A-transferase; butyryl CoA:acetate CoA transferase; butyryl coenzyme A transferase +ec:2.8.3.9 butyrate---acetoacetate CoA-transferase; butyryl coenzyme A-acetoacetate coenzyme A-transferase; butyryl-CoA-acetoacetate CoA-transferase +ec:2.8.3.10 citrate CoA-transferase +ec:2.8.3.11 citramalate CoA-transferase +ec:2.8.3.12 glutaconate CoA-transferase +ec:2.8.3.13 succinate---hydroxymethylglutarate CoA-transferase; hydroxymethylglutarate coenzyme A-transferase; dicarboxyl-CoA:dicarboxylic acid coenzyme A transferase +ec:2.8.3.14 5-hydroxypentanoate CoA-transferase; 5-hydroxyvalerate CoA-transferase; 5-hydroxyvalerate coenzyme A transferase +ec:2.8.3.15 succinyl-CoA:(R)-benzylsuccinate CoA-transferase; benzylsuccinate CoA-transferase +ec:2.8.3.16 formyl-CoA transferase; formyl-coenzyme A transferase; formyl-CoA oxalate CoA-transferase +ec:2.8.3.17 3-(aryl)acryloyl-CoA:(R)-3-(aryl)lactate CoA-transferase; FldA; cinnamoyl-CoA:phenyllactate CoA-transferase +ec:2.8.3.18 succinyl-CoA:acetate CoA-transferase; aarC (gene name); SCACT +ec:2.8.3.19 CoA:oxalate CoA-transferase; acetyl-coenzyme A transferase; acetyl-CoA oxalate CoA-transferase; ACOCT; YfdE; UctC +ec:2.8.3.20 succinyl-CoA---D-citramalate CoA-transferase; Sct +ec:2.8.3.21 L-carnitine CoA-transferase; CaiB; crotonobetainyl/gamma-butyrobetainyl-CoA:carnitine CoA-transferase +ec:2.8.3.22 succinyl-CoA---L-malate CoA-transferase; SmtAB +ec:2.8.3.23 caffeate CoA-transferase; CarA +ec:2.8.3.24 (R)-2-hydroxy-4-methylpentanoate CoA-transferase; hadA (gene name) +ec:2.8.3.25 bile acid CoA-transferase; baiF (gene name); baiK (gene name); bile acid coenzyme A transferase +ec:2.8.3.26 succinyl-CoA:mesaconate CoA transferase; mct (gene name) +ec:2.8.3.27 propanoyl-CoA:succinate CoA transferase; succinyl-CoA:propionate CoA-transferase; propionyl-CoA:succinyl-CoA transferase; ASCT; scpC (gene name) +ec:2.8.3.28 phenylsuccinyl-CoA transferase; iaaL (gene name) +ec:2.8.4.1 coenzyme-B sulfoethylthiotransferase; methyl-CoM reductase; methyl coenzyme M reductase +ec:2.8.4.2 arsenate-mycothiol transferase; ArsC1; ArsC2; mycothiol:arsenate transferase +ec:2.8.4.3 tRNA-2-methylthio-N6-dimethylallyladenosine synthase; MiaB; 2-methylthio-N-6-isopentenyl adenosine synthase; tRNA-i6A37 methylthiotransferase; tRNA (N6-dimethylallyladenosine37):sulfur-(sulfur carrier),S-adenosyl-L-methionine C2-methylthiotransferase +ec:2.8.4.4 [ribosomal protein S12] (aspartate89-C3)-methylthiotransferase; RimO; [ribosomal protein S12]-Asp89:sulfur-(sulfur carrier),S-adenosyl-L-methionine C3-methylthiotransferase; [ribosomal protein S12]-L-aspartate89:sulfur-(sulfur carrier),S-adenosyl-L-methionine C3-methylthiotransferase +ec:2.8.4.5 tRNA (N6-L-threonylcarbamoyladenosine37-C2)-methylthiotransferase; MtaB; methylthio-threonylcarbamoyl-adenosine transferase B; CDKAL1 (gene name); tRNA (N6-L-threonylcarbamoyladenosine37):sulfur-(sulfur carrier),S-adenosyl-L-methionine C2-methylthiotransferase +ec:2.8.4.6 S-methyl-1-thioxylulose 5-phosphate methylthiotransferase; 1-methylthioxylulose 5-phosphate sulfurylase (incorrect) +ec:2.8.5.1 S-sulfo-L-cysteine synthase (3-phospho-L-serine-dependent); cysK2 (gene name) +ec:2.8.5.2 L-cysteine S-thiosulfotransferase; SoxXA; thiosulfate:[SoxY protein]-L-cysteine thiosulfotransferase +ec:2.9.1.1 L-seryl-tRNASec selenium transferase; L-selenocysteinyl-tRNASel synthase; L-selenocysteinyl-tRNASec synthase selenocysteine synthase; cysteinyl-tRNASec-selenium transferase; cysteinyl-tRNASec-selenium transferase +ec:2.9.1.2 O-phospho-L-seryl-tRNASec:L-selenocysteinyl-tRNA synthase; MMPSepSecS; SepSecS; SLA/LP; O-phosphoseryl-tRNA:selenocysteinyl-tRNA synthase; O-phospho-L-seryl-tRNA:L-selenocysteinyl-tRNA synthase +ec:2.9.1.3 tRNA 2-selenouridine synthase; selU (gene name); mnmH (gene name); ybbB (gene name); sufY (gene name) +ec:2.10.1.1 molybdopterin molybdotransferase; MoeA; Cnx1 (ambiguous) +ec:3.1.1.1 carboxylesterase; ali-esterase; B-esterase; monobutyrase; cocaine esterase; procaine esterase; methylbutyrase; vitamin A esterase; butyryl esterase; carboxyesterase; carboxylate esterase; carboxylic esterase; methylbutyrate esterase; triacetin esterase; carboxyl ester hydrolase; butyrate esterase; methylbutyrase; alpha-carboxylesterase; propionyl esterase; nonspecific carboxylesterase; esterase D; esterase B; esterase A; serine esterase; carboxylic acid esterase; cocaine esterase +ec:3.1.1.2 arylesterase; A-esterase (ambiguous); paraoxonase (ambiguous); aromatic esterase +ec:3.1.1.3 triacylglycerol lipase; lipase (ambiguous); butyrinase; tributyrinase; Tween hydrolase; steapsin; triacetinase; tributyrin esterase; Tweenase; amno N-AP; Takedo 1969-4-9; Meito MY 30; Tweenesterase; GA 56; capalase L; triglyceride hydrolase; triolein hydrolase; tween-hydrolyzing esterase; amano CE; cacordase; triglyceridase; triacylglycerol ester hydrolase; amano P; amano AP; PPL; glycerol-ester hydrolase; GEH; meito Sangyo OF lipase; hepatic lipase; lipazin; post-heparin plasma protamine-resistant lipase; salt-resistant post-heparin lipase; heparin releasable hepatic lipase; amano CES; amano B; tributyrase; triglyceride lipase; liver lipase; hepatic monoacylglycerol acyltransferase; PNLIP (gene name); LIPF (gene name) +ec:3.1.1.4 phospholipase A2; lecithinase A; phosphatidase; phosphatidolipase; phospholipase A +ec:3.1.1.5 lysophospholipase; lecithinase B; lysolecithinase; phospholipase B; lysophosphatidase; lecitholipase; phosphatidase B; lysophosphatidylcholine hydrolase; lysophospholipase A1; lysophopholipase L2; lysophospholipase transacylase; neuropathy target esterase; NTE; NTE-LysoPLA; NTE-lysophospholipase +ec:3.1.1.6 acetylesterase; C-esterase (in animal tissues); acetic ester hydrolase; chloroesterase; p-nitrophenyl acetate esterase; Citrus acetylesterase +ec:3.1.1.7 acetylcholinesterase; true cholinesterase; choline esterase I; cholinesterase; acetylthiocholinesterase; acetylcholine hydrolase; acetyl.beta-methylcholinesterase; AcCholE +ec:3.1.1.8 cholinesterase; pseudocholinesterase; butyrylcholine esterase; non-specific cholinesterase; choline esterase II (unspecific); benzoylcholinesterase; choline esterase; butyrylcholinesterase; propionylcholinesterase; BtChoEase +ec:3.1.1.9 Deleted entry +ec:3.1.1.10 tropinesterase; tropine esterase; atropinase; atropine esterase +ec:3.1.1.11 pectinesterase; pectin demethoxylase; pectin methoxylase; pectin methylesterase; pectase; pectin methyl esterase; pectinoesterase +ec:3.1.1.12 Deleted entry +ec:3.1.1.13 sterol esterase; cholesterol esterase; cholesteryl ester synthase; triterpenol esterase; cholesteryl esterase; cholesteryl ester hydrolase; sterol ester hydrolase; cholesterol ester hydrolase; cholesterase; acylcholesterol lipase +ec:3.1.1.14 chlorophyllase; CLH; Chlase +ec:3.1.1.15 L-arabinonolactonase +ec:3.1.1.16 Deleted entry +ec:3.1.1.17 gluconolactonase; lactonase; aldonolactonase; glucono-delta-lactonase; gulonolactonase +ec:3.1.1.18 Deleted entry +ec:3.1.1.19 uronolactonase; glucuronolactonase +ec:3.1.1.20 tannase; tannase S; tannin acetylhydrolase +ec:3.1.1.21 Deleted entry +ec:3.1.1.22 hydroxybutyrate-dimer hydrolase; D-(-)-3-hydroxybutyrate-dimer hydrolase +ec:3.1.1.23 acylglycerol lipase; monoacylglycerol lipase; monoacylglycerolipase; monoglyceride lipase; monoglyceride hydrolase; fatty acyl monoester lipase; monoacylglycerol hydrolase; monoglyceridyllipase; monoglyceridase +ec:3.1.1.24 3-oxoadipate enol-lactonase; carboxymethylbutenolide lactonase; beta-ketoadipic enol-lactone hydrolase; 3-ketoadipate enol-lactonase; 3-oxoadipic enol-lactone hydrolase; beta-ketoadipate enol-lactone hydrolase +ec:3.1.1.25 1,4-lactonase; gamma-lactonase +ec:3.1.1.26 galactolipase; galactolipid lipase; polygalactolipase; galactolipid acylhydrolase +ec:3.1.1.27 4-pyridoxolactonase +ec:3.1.1.28 acylcarnitine hydrolase; high activity acylcarnitine hydrolase; HACH; carnitine ester hydrolase; palmitoylcarnitine hydrolase; palmitoyl-L-carnitine hydrolase; long-chain acyl-L-carnitine hydrolase; palmitoyl carnitine hydrolase +ec:3.1.1.29 aminoacyl-tRNA hydrolase; aminoacyl-transfer ribonucleate hydrolase; N-substituted aminoacyl transfer RNA hydrolase; peptidyl-tRNA hydrolase +ec:3.1.1.30 D-arabinonolactonase +ec:3.1.1.31 6-phosphogluconolactonase; phosphogluconolactonase; 6-PGL +ec:3.1.1.32 phospholipase A1 +ec:3.1.1.33 6-acetylglucose deacetylase; 6-O-acetylglucose deacetylase +ec:3.1.1.34 lipoprotein lipase; clearing factor lipase; diacylglycerol lipase; postheparin esterase; diglyceride lipase; postheparin lipase; diacylglycerol hydrolase; lipemia-clearing factor; hepatic triacylglycerol lipase; LIPC (gene name); LPL (gene name); triacylglycero-protein acylhydrolase +ec:3.1.1.35 dihydrocoumarin hydrolase +ec:3.1.1.36 limonin-D-ring-lactonase; limonin-D-ring-lactone hydrolase; limonin lactone hydrolase +ec:3.1.1.37 steroid-lactonase +ec:3.1.1.38 triacetate-lactonase; triacetic lactone hydrolase; triacetic acid lactone hydrolase; TAL hydrolase; triacetate lactone hydrolase +ec:3.1.1.39 actinomycin lactonase +ec:3.1.1.40 orsellinate-depside hydrolase; lecanorate hydrolase +ec:3.1.1.41 cephalosporin-C deacetylase; cephalosporin C acetyl-hydrolase; cephalosporin C acetylase; cephalosporin acetylesterase; cephalosporin C acetylesterase; cephalosporin C acetyl-esterase; cephalosporin C deacetylase +ec:3.1.1.42 chlorogenate hydrolase; chlorogenase; chlorogenic acid esterase +ec:3.1.1.43 alpha-amino-acid esterase; alpha-amino acid ester hydrolase +ec:3.1.1.44 4-methyloxaloacetate esterase +ec:3.1.1.45 carboxymethylenebutenolidase; maleylacetate enol-lactonase; dienelactone hydrolase; carboxymethylene butenolide hydrolase +ec:3.1.1.46 deoxylimonate A-ring-lactonase +ec:3.1.1.47 1-alkyl-2-acetylglycerophosphocholine esterase; 1-alkyl-2-acetyl-sn-glycero-3-phosphocholine acetylhydrolase; alkylacetyl-GPC:acetylhydrolase +ec:3.1.1.48 fusarinine-C ornithinesterase; ornithine esterase; 5-N-acyl-L-ornithine-ester hydrolase +ec:3.1.1.49 sinapine esterase; aromatic choline esterase +ec:3.1.1.50 wax-ester hydrolase; jojoba wax esterase; WEH +ec:3.1.1.51 phorbol-diester hydrolase; diacylphorbate 12-hydrolase; diacylphorbate 12-hydrolase; phorbol-12,13-diester 12-ester hydrolase; PDEH +ec:3.1.1.52 phosphatidylinositol deacylase; phosphatidylinositol phospholipase A2; phospholipase A2 +ec:3.1.1.53 sialate O-acetylesterase; N-acetylneuraminate acetyltransferase; sialate 9(4)-O-acetylesterase; sialidase +ec:3.1.1.54 acetoxybutynylbithiophene deacetylase; acetoxybutynylbithiophene esterase; 5-(4-acetoxy-1-butynyl)-2,2'-bithiophene:acetate esterase +ec:3.1.1.55 acetylsalicylate deacetylase; aspirin esterase; aspirin esterase; acetylsalicylic acid esterase; aspirin hydrolase +ec:3.1.1.56 methylumbelliferyl-acetate deacetylase; esterase D +ec:3.1.1.57 2-pyrone-4,6-dicarboxylate lactonase; 2-pyrone-4,6-dicarboxylate hydrolase; 2-pyrone-4,6-dicarboxylate lactonohydrolase +ec:3.1.1.58 N-acetylgalactosaminoglycan deacetylase; polysaccharide deacetylase (misleading); Vi-polysaccharide deacetylase; N-acetyl galactosaminoglycan deacetylase +ec:3.1.1.59 juvenile-hormone esterase; JH-esterase; juvenile hormone analog esterase; juvenile hormone carboxyesterase; methyl-(2E,6E)-(10R,11S)-10,11-epoxy-3,7,11-trimethyltrideca-2,6-dienoate acylhydrolase +ec:3.1.1.60 bis(2-ethylhexyl)phthalate esterase; DEHP esterase +ec:3.1.1.61 protein-glutamate methylesterase; chemotaxis-specific methylesterase; methyl-accepting chemotaxis protein methyl-esterase; CheB methylesterase; methylesterase CheB; protein methyl-esterase; protein carboxyl methylesterase; PME; protein methylesterase; protein-L-glutamate-5-O-methyl-ester acylhydrolase +ec:3.1.1.62 Deleted entry +ec:3.1.1.63 11-cis-retinyl-palmitate hydrolase; 11-cis-retinol palmitate esterase; RPH +ec:3.1.1.64 retinoid isomerohydrolase; all-trans-retinyl-palmitate hydrolase (ambiguous); retinol isomerase (ambiguous); all-trans-retinol isomerase:hydrolase (ambiguous); all-trans-retinylester 11-cis isomerohydrolase; RPE65 (gene name) +ec:3.1.1.65 L-rhamnono-1,4-lactonase; L-rhamno-gamma-lactonase; L-rhamnono-gamma-lactonase; L-rhamnonate dehydratase +ec:3.1.1.66 5-(3,4-diacetoxybut-1-ynyl)-2,2'-bithiophene deacetylase; diacetoxybutynylbithiophene acetate esterase; 3,4-diacetoxybutinylbithiophene:4-acetate esterase +ec:3.1.1.67 fatty-acyl-ethyl-ester synthase; FAEES +ec:3.1.1.68 xylono-1,4-lactonase; xylono-gamma-lactonase; xylonolactonase +ec:3.1.1.69 Transferred to 3.5.1.89 +ec:3.1.1.70 cetraxate benzylesterase +ec:3.1.1.71 acetylalkylglycerol acetylhydrolase; alkylacetylglycerol acetylhydrolase +ec:3.1.1.72 acetylxylan esterase +ec:3.1.1.73 feruloyl esterase; ferulic acid esterase; hydroxycinnamoyl esterase; hemicellulase accessory enzyme; FAE-III; cinnamoyl ester hydrolase; FAEA; cinnAE; FAE-I; FAE-II +ec:3.1.1.74 cutinase +ec:3.1.1.75 poly(3-hydroxybutyrate) depolymerase; PHB depolymerase; poly(3HB) depolymerase; poly[(R)-hydroxyalkanoic acid] depolymerase; poly(HA) depolymerase; poly(HASCL) depolymerase; poly[(R)-3-hydroxybutyrate] hydrolase +ec:3.1.1.76 poly(3-hydroxyoctanoate) depolymerase; PHO depolymerase; poly(3HO) depolymerase; poly[(R)-hydroxyalkanoic acid] depolymerase; poly(HA) depolymerase; poly(HAMCL) depolymerase; poly[(R)-3-hydroxyoctanoate] hydrolase +ec:3.1.1.77 acyloxyacyl hydrolase +ec:3.1.1.78 polyneuridine-aldehyde esterase; polyneuridine aldehyde esterase; PNAE +ec:3.1.1.79 hormone-sensitive lipase; HSL +ec:3.1.1.80 acetylajmaline esterase; AAE; 2beta(R)-17-O-acetylajmalan:acetylesterase; acetylajmalan esterase +ec:3.1.1.81 quorum-quenching N-acyl-homoserine lactonase; acyl homoserine degrading enzyme; acyl-homoserine lactone acylase; AHL lactonase; AHL-degrading enzyme; AHL-inactivating enzyme; AHLase; AhlD; AhlK; AiiA; AiiA lactonase; AiiA-like protein; AiiB; AiiC; AttM; delactonase; lactonase-like enzyme; N-acyl homoserine lactonase; N-acyl homoserine lactone hydrolase; N-acyl-homoserine lactone lactonase; N-acyl-L-homoserine lactone hydrolase; quorum-quenching lactonase; quorum-quenching N-acyl homoserine lactone hydrolase +ec:3.1.1.82 pheophorbidase; phedase; PPD +ec:3.1.1.83 monoterpene epsilon-lactone hydrolase; MLH +ec:3.1.1.84 cocaine esterase; CocE; hCE2; hCE-2; human carboxylesterase 2 +ec:3.1.1.85 pimelyl-[acyl-carrier protein] methyl ester esterase; BioH +ec:3.1.1.86 rhamnogalacturonan acetylesterase; RGAE +ec:3.1.1.87 fumonisin B1 esterase; fumD (gene name) +ec:3.1.1.88 pyrethroid hydrolase; pyrethroid-hydrolyzing carboxylesterase; pyrethroid-hydrolysing esterase; pyrethroid-hydrolyzing esterase; pyrethroid-selective esterase; pyrethroid-cleaving enzyme; permethrinase; PytH; EstP +ec:3.1.1.89 protein phosphatase methylesterase-1; PME-1; PPME1 +ec:3.1.1.90 all-trans-retinyl ester 13-cis isomerohydrolase +ec:3.1.1.91 2-oxo-3-(5-oxofuran-2-ylidene)propanoate lactonase; naaC (gene name) +ec:3.1.1.92 4-sulfomuconolactone hydrolase +ec:3.1.1.93 mycophenolic acid acyl-glucuronide esterase; mycophenolic acid acyl-glucuronide deglucuronidase; AcMPAG deglucuronidase +ec:3.1.1.94 versiconal hemiacetal acetate esterase; VHA esterase +ec:3.1.1.95 aclacinomycin methylesterase; RdmC; aclacinomycin methyl esterase +ec:3.1.1.96 D-aminoacyl-tRNA deacylase; Dtd2; D-Tyr-tRNA(Tyr) deacylase; D-Tyr-tRNATyr deacylase; D-tyrosyl-tRNATyr aminoacylhydrolase; dtdA (gene name) +ec:3.1.1.97 methylated diphthine methylhydrolase; Dph7; diphthine methylesterase (incorrect) +ec:3.1.1.98 [Wnt protein] O-palmitoleoyl-L-serine hydrolase; Notum +ec:3.1.1.99 6-deoxy-6-sulfogluconolactonase; SGL lactonase +ec:3.1.1.100 chlorophyllide a hydrolase; bciC (gene name) +ec:3.1.1.101 poly(ethylene terephthalate) hydrolase; PETase; PET hydrolase +ec:3.1.1.102 mono(ethylene terephthalate) hydrolase; MHET hydrolase; MHETase +ec:3.1.1.103 teichoic acid D-alanine hydrolase; fmtA (gene name) +ec:3.1.1.104 5-phospho-D-xylono-1,4-lactonase +ec:3.1.1.105 3-O-acetylpapaveroxine carboxylesterase; CXE1 (gene name) +ec:3.1.1.106 O-acetyl-ADP-ribose deacetylase; ymdB (gene name); MACROD1 (gene name) +ec:3.1.1.107 apo-salmochelin esterase; iroE (gene name) +ec:3.1.1.108 iron(III)-enterobactin esterase; fes (gene name); pfeE (gene name); enterochelin hydrolase; enterochelin esterase; ferric enterobactin esterase +ec:3.1.1.109 iron(III)-salmochelin esterase; iroD (gene name); ferric-salmochelin esterase +ec:3.1.1.110 xylono-1,5-lactonase; xylC (gene name); D-xylono-1,5-lactone lactonase +ec:3.1.1.111 phosphatidylserine sn-1 acylhydrolase; phosphatidylserine-specific phospholipase A1; PS-PLA1; PLA1A (gene name) +ec:3.1.1.112 isoamyl acetate esterase; IAH1 (gene name) +ec:3.1.1.113 ethyl acetate hydrolase; mekB (gene name); estZ (gene name) +ec:3.1.1.114 methyl acetate hydrolase; acmB (gene name) +ec:3.1.1.115 D-apionolactonase; apnL (gene name) +ec:3.1.1.116 sn-1-specific diacylglycerol lipase; DAGLA (gene name); DAGLB (gene name) +ec:3.1.1.117 (4-O-methyl)-D-glucuronate---lignin esterase; glucuronoyl esterase (ambiguous); 4-O-methyl-glucuronoyl methylesterase; glucuronoyl-lignin ester hydrolase +ec:3.1.1.118 phospholipid sn-1 acylhydrolase; phospholipase DDHD1; phosphatidic acid-preferring phospholipase A1; PA-PLA1; DDHD1 (gene name) +ec:3.1.1.119 Transferred to 3.2.1.217 +ec:3.1.2.1 acetyl-CoA hydrolase; acetyl-CoA deacylase; acetyl-CoA acylase; acetyl coenzyme A hydrolase; acetyl coenzyme A deacylase; acetyl coenzyme A acylase; acetyl-CoA thiol esterase +ec:3.1.2.2 palmitoyl-CoA hydrolase; long-chain fatty-acyl-CoA hydrolase; palmitoyl coenzyme A hydrolase; palmitoyl thioesterase; palmitoyl coenzyme A hydrolase; palmitoyl-CoA deacylase; palmityl thioesterase; palmityl-CoA deacylase; fatty acyl thioesterase I; palmityl thioesterase I +ec:3.1.2.3 succinyl-CoA hydrolase; succinyl-CoA acylase; succinyl coenzyme A hydrolase; succinyl coenzyme A deacylase +ec:3.1.2.4 3-hydroxyisobutyryl-CoA hydrolase; 3-hydroxy-isobutyryl CoA hydrolase; HIB CoA deacylase +ec:3.1.2.5 hydroxymethylglutaryl-CoA hydrolase; beta-hydroxy-beta-methylglutaryl coenzyme A hydrolase; beta-hydroxy-beta-methylglutaryl coenzyme A deacylase; hydroxymethylglutaryl coenzyme A hydrolase; hydroxymethylglutaryl coenzyme A deacylase; 3-hydroxy-3-methylglutaryl-CoA hydrolase +ec:3.1.2.6 hydroxyacylglutathione hydrolase; glyoxalase II; S-2-hydroxylacylglutathione hydrolase; hydroxyacylglutathione hydrolase; acetoacetylglutathione hydrolase +ec:3.1.2.7 glutathione thiolesterase; citryl-glutathione thioesterhydrolase +ec:3.1.2.8 Deleted entry +ec:3.1.2.9 Deleted entry +ec:3.1.2.10 formyl-CoA hydrolase; formyl coenzyme A hydrolase +ec:3.1.2.11 acetoacetyl-CoA hydrolase; acetoacetyl coenzyme A hydrolase; acetoacetyl CoA deacylase; acetoacetyl coenzyme A deacylase +ec:3.1.2.12 S-formylglutathione hydrolase +ec:3.1.2.13 S-succinylglutathione hydrolase +ec:3.1.2.14 oleoyl-[acyl-carrier-protein] hydrolase; acyl-[acyl-carrier-protein] hydrolase; acyl-ACP-hydrolase; acyl-acyl carrier protein hydrolase; oleoyl-ACP thioesterase; oleoyl-acyl carrier protein thioesterase; oleoyl-[acyl-carrier-protein] hydrolase +ec:3.1.2.15 Deleted entry +ec:3.1.2.16 citrate-lyase deacetylase; [citrate-(pro-3S)-lyase] thiolesterase; acetyl-S-(acyl-carrier protein) enzyme thioester hydrolase; citrate lyase deacetylase; [citrate-(pro-3S)-lyase](acetyl-form) hydrolase +ec:3.1.2.17 (S)-methylmalonyl-CoA hydrolase; D-methylmalonyl-coenzyme A hydrolase +ec:3.1.2.18 ADP-dependent short-chain-acyl-CoA hydrolase; short-chain acyl coenzyme A hydrolase; propionyl coenzyme A hydrolase; propionyl-CoA hydrolase; propionyl-CoA thioesterase; short-chain acyl-CoA hydrolase; short-chain acyl-CoA thioesterase +ec:3.1.2.19 ADP-dependent medium-chain-acyl-CoA hydrolase; medium-chain acyl coenzyme A hydrolase; medium-chain acyl-CoA hydrolase; medium-chain acyl-thioester hydrolase; medium-chain hydrolase; myristoyl-CoA thioesterase +ec:3.1.2.20 acyl-CoA hydrolase; acyl coenzyme A thioesterase; acyl-CoA thioesterase; acyl coenzyme A hydrolase; thioesterase B; thioesterase II; acyl-CoA thioesterase +ec:3.1.2.21 dodecanoyl-[acyl-carrier-protein] hydrolase; lauryl-acyl-carrier-protein hydrolase; dodecanoyl-acyl-carrier-protein hydrolase; dodecyl-acyl-carrier protein hydrolase; dodecanoyl-[acyl-carrier protein] hydrolase; dodecanoyl-[acyl-carrier-protein] hydrolase +ec:3.1.2.22 palmitoyl[protein] hydrolase; palmitoyl-protein thioesterase; palmitoyl-(protein) hydrolase +ec:3.1.2.23 4-hydroxybenzoyl-CoA thioesterase +ec:3.1.2.24 Transferred to 3.13.1.3 +ec:3.1.2.25 phenylacetyl-CoA hydrolase +ec:3.1.2.26 Transferred to 2.8.3.25 +ec:3.1.2.27 choloyl-CoA hydrolase; PTE-2 (ambiguous); choloyl-coenzyme A thioesterase; chenodeoxycholoyl-coenzyme A thioesterase; peroxisomal acyl-CoA thioesterase 2 +ec:3.1.2.28 1,4-dihydroxy-2-naphthoyl-CoA hydrolase; menI (gene name); ydiL (gene name) +ec:3.1.2.29 fluoroacetyl-CoA thioesterase +ec:3.1.2.30 (3S)-malyl-CoA thioesterase; mcl2 (gene name) +ec:3.1.2.31 dihydromonacolin L-[lovastatin nonaketide synthase] thioesterase; LovG +ec:3.1.2.32 2-aminobenzoylacetyl-CoA thioesterase; pqsE (gene name) +ec:3.1.3.1 alkaline phosphatase; alkaline phosphomonoesterase; phosphomonoesterase; glycerophosphatase; alkaline phosphohydrolase; alkaline phenyl phosphatase; orthophosphoric-monoester phosphohydrolase (alkaline optimum) +ec:3.1.3.2 acid phosphatase; acid phosphomonoesterase; phosphomonoesterase; glycerophosphatase; acid monophosphatase; acid phosphohydrolase; acid phosphomonoester hydrolase; uteroferrin; acid nucleoside diphosphate phosphatase; orthophosphoric-monoester phosphohydrolase (acid optimum) +ec:3.1.3.3 phosphoserine phosphatase +ec:3.1.3.4 phosphatidate phosphatase; phosphatic acid phosphatase; acid phosphatidyl phosphatase; phosphatic acid phosphohydrolase; PAP; Lipin +ec:3.1.3.5 5'-nucleotidase; uridine 5'-nucleotidase; 5'-adenylic phosphatase; adenosine 5'-phosphatase; AMP phosphatase; adenosine monophosphatase; 5'-mononucleotidase; AMPase; UMPase; snake venom 5'-nucleotidase; thimidine monophosphate nucleotidase; 5'-AMPase; 5'-AMP nucleotidase; AMP phosphohydrolase; IMP 5'-nucleotidase +ec:3.1.3.6 3'-nucleotidase; 3'-mononucleotidase; 3'-phosphatase; 3'-ribonucleotidase +ec:3.1.3.7 3'(2'),5'-bisphosphate nucleotidase; phosphoadenylate 3'-nucleotidase; 3'-phosphoadenylylsulfate 3'-phosphatase; 3'(2'),5'-bisphosphonucleoside 3'(2')-phosphohydrolase +ec:3.1.3.8 3-phytase; 1-phytase; phytase; phytate 1-phosphatase; phytate 6-phosphatase +ec:3.1.3.9 glucose-6-phosphatase; glucose 6-phosphate phosphatase +ec:3.1.3.10 glucose-1-phosphatase +ec:3.1.3.11 fructose-bisphosphatase; hexose diphosphatase; FBPase; fructose 1,6-diphosphatase; fructose 1,6-diphosphate phosphatase; D-fructose 1,6-diphosphatase; fructose 1,6-bisphosphatase; fructose diphosphatase; fructose diphosphate phosphatase; fructose bisphosphate phosphatase; fructose 1,6-bisphosphate 1-phosphatase; fructose 1,6-bisphosphate phosphatase; hexose bisphosphatase; D-fructose-1,6-bisphosphate phosphatase +ec:3.1.3.12 trehalose-phosphatase; trehalose 6-phosphatase; trehalose 6-phosphate phosphatase; trehalose-6-phosphate phosphohydrolase +ec:3.1.3.13 Deleted entry +ec:3.1.3.14 methylphosphothioglycerate phosphatase; methylthiophosphoglycerate phosphatase +ec:3.1.3.15 histidinol-phosphatase; histidinol phosphate phosphatase; L-histidinol phosphate phosphatase; histidinolphosphate phosphatase; HPpase; histidinolphosphatase +ec:3.1.3.16 protein-serine/threonine phosphatase; phosphoprotein phosphatase (ambiguous); protein phosphatase-1; protein phosphatase-2A; protein phosphatase-2B; protein phosphatase-2C; protein D phosphatase; phosphospectrin phosphatase; casein phosphatase; Aspergillus awamori acid protein phosphatase; calcineurin; phosphatase 2A; phosphatase 2B; phosphatase II; phosphatase IB; phosphatase C-II; polycation modulated (PCM-) phosphatase; phosphopyruvate dehydrogenase phosphatase; phosphatase SP; branched-chain alpha-keto acid dehydrogenase phosphatase; BCKDH phosphatase; 3-hydroxy 3-methylglutaryl coenzymeA reductase phosphatase; HMG-CoA reductase phosphatase; phosphatase H-II; phosphatase III; phosphatase I; protein phosphatase; phosphatase IV; phosphoprotein phosphohydrolase +ec:3.1.3.17 [phosphorylase] phosphatase; PR-enzyme; phosphorylase a phosphatase; glycogen phosphorylase phosphatase; protein phosphatase C; type 1 protein phosphatase +ec:3.1.3.18 phosphoglycolate phosphatase; phosphoglycolate hydrolase; 2-phosphoglycolate phosphatase; P-glycolate phosphatase; phosphoglycollate phosphatase +ec:3.1.3.19 glycerol-2-phosphatase; beta-glycerophosphatase; beta-glycerophosphate phosphatase; 2-glycerophosphatase +ec:3.1.3.20 phosphoglycerate phosphatase; D-2-phosphoglycerate phosphatase; glycerophosphate phosphatase +ec:3.1.3.21 glycerol-1-phosphatase; alpha-glycerophosphatase; alpha-glycerol phosphatase; glycerol 3-phosphatase; glycerol-3-phosphate phosphatase; glycerol 3-phosphate phosphohydrolase +ec:3.1.3.22 mannitol-1-phosphatase; mannitol-1-phosphate phosphatase +ec:3.1.3.23 sugar-phosphatase +ec:3.1.3.24 sucrose-phosphate phosphatase; sucrose 6-phosphate hydrolase; sucrose-phosphate hydrolase; sucrose-phosphate phosphohydrolase; sucrose-6-phosphatase; sucrose phosphatase; sucrose-6-phosphate phosphatase; SPP +ec:3.1.3.25 inositol-phosphate phosphatase; myo-inositol-1(or 4)-monophosphatase; inositol 1-phosphatase; L-myo-inositol-1-phosphate phosphatase; myo-inositol 1-phosphatase; inositol phosphatase; inositol monophosphate phosphatase; inositol-1(or 4)-monophosphatase; myo-inositol-1(or 4)-phosphate phosphohydrolase; myo-inositol monophosphatase; myo-inositol-1-phosphatase +ec:3.1.3.26 4-phytase; 6-phytase (name based on 1L-numbering system and not 1D-numbering); phytase; phytate 6-phosphatase; myo-inositol-hexakisphosphate 6-phosphohydrolase (name based on 1L-numbering system and not 1D-numbering) +ec:3.1.3.27 phosphatidylglycerophosphatase; phosphatidylglycerol phosphate phosphatase; phosphatidylglycerol phosphatase; PGP phosphatase +ec:3.1.3.28 ADP-phosphoglycerate phosphatase; adenosine diphosphate phosphoglycerate phosphatase +ec:3.1.3.29 N-acylneuraminate-9-phosphatase; acylneuraminate 9-phosphatase; N-acylneuraminic acid 9-phosphate phosphatase; N-acylneuraminic (sialic) acid 9-phosphatase +ec:3.1.3.30 Deleted entry +ec:3.1.3.31 Deleted entry +ec:3.1.3.32 polynucleotide 3'-phosphatase; 2'(3')-polynucleotidase; DNA 3'-phosphatase; deoxyribonucleate 3'-phosphatase; 5'-polynucleotidekinase 3'-phosphatase +ec:3.1.3.33 polynucleotide 5'-phosphatase; 5'-polynucleotidase +ec:3.1.3.34 deoxynucleotide 3'-phosphatase; 3'-deoxynucleotidase; 3'-deoxyribonucleotidase +ec:3.1.3.35 thymidylate 5'-phosphatase; thymidylate 5'-nucleotidase; deoxythymidylate 5'-nucleotidase; thymidylate nucleotidase; deoxythymidylic 5'-nucleotidase; deoxythymidylate phosphohydrolase; dTMPase +ec:3.1.3.36 phosphoinositide 5-phosphatase; type II inositol polyphosphate 5-phosphatase; triphosphoinositide phosphatase; IP3 phosphatase; PtdIns(4,5)P2 phosphatase; triphosphoinositide phosphomonoesterase; diphosphoinositide phosphatase; inositol 1,4,5-triphosphate 5-phosphomonoesterase; inositol triphosphate 5-phosphomonoesterase; phosphatidylinositol-bisphosphatase; phosphatidyl-myo-inositol-4,5-bisphosphate phosphatase; phosphatidylinositol 4,5-bisphosphate phosphatase; polyphosphoinositol lipid 5-phosphatase; phosphatidyl-inositol-bisphosphate phosphatase +ec:3.1.3.37 sedoheptulose-bisphosphatase; SBPase; sedoheptulose 1,7-diphospate phosphatase; sedoheptulose 1,7-diphosphatase; sedoheptulose diphosphatase; sedoheptulose bisphosphatase; sedoheptulose 1,7-bisphosphatase +ec:3.1.3.38 3-phosphoglycerate phosphatase; D-3-Phosphoglycerate phosphatase; 3-PGA phosphatase +ec:3.1.3.39 streptomycin-6-phosphatase; streptomycin 6-phosphate phosphatase; streptomycin 6-phosphate phosphohydrolase; streptomycin-6-P phosphohydrolase +ec:3.1.3.40 guanidinodeoxy-scyllo-inositol-4-phosphatase; 1-guanidino-scyllo-inositol 4-phosphatase; 1-guanidino-1-deoxy-scyllo-inositol-4-P phosphohydrolase +ec:3.1.3.41 4-nitrophenylphosphatase; nitrophenyl phosphatase; p-nitrophenylphosphatase; para-nitrophenyl phosphatase; K-pNPPase; NPPase; PNPPase; Ecto-p-nitrophenyl phosphatase; p-nitrophenylphosphate phosphohydrolase +ec:3.1.3.42 [glycogen-synthase-D] phosphatase; uridine diphosphoglucose-glycogen glucosyltransferase phosphatase; UDP-glycogen glucosyltransferase phosphatase; UDPglucose-glycogen glucosyltransferase phosphatase; glycogen glucosyltransferase phosphatase; glycogen synthetase phosphatase; glycogen synthase phosphatase; glycogen synthase D phosphatase; Mg2+ dependent glycogen synthase phosphatase; phosphatase type 2_degree_C +ec:3.1.3.43 [pyruvate dehydrogenase (acetyl-transferring)]-phosphatase; pyruvate dehydrogenase phosphatase; phosphopyruvate dehydrogenase phosphatase; [pyruvate dehydrogenase (lipoamide)]-phosphatase; [pyruvate dehydrogenase (lipoamide)]-phosphate phosphohydrolase +ec:3.1.3.44 [acetyl-CoA carboxylase]-phosphatase +ec:3.1.3.45 3-deoxy-manno-octulosonate-8-phosphatase +ec:3.1.3.46 fructose-2,6-bisphosphate 2-phosphatase; fructose-2,6-bisphosphatase; D-fructose-2,6-bisphosphate 2-phosphohydrolase +ec:3.1.3.47 [hydroxymethylglutaryl-CoA reductase (NADPH)]-phosphatase; reductase phosphatase +ec:3.1.3.48 protein-tyrosine-phosphatase; phosphotyrosine phosphatase; phosphoprotein phosphatase (phosphotyrosine); phosphotyrosine histone phosphatase; protein phosphotyrosine phosphatase; tyrosylprotein phosphatase; phosphotyrosine protein phosphatase; phosphotyrosylprotein phosphatase; tyrosine O-phosphate phosphatase; PPT-phosphatase; PTPase; [phosphotyrosine]protein phosphatase; PTP-phosphatase +ec:3.1.3.49 [pyruvate kinase]-phosphatase; pyruvate kinase phosphatase +ec:3.1.3.50 sorbitol-6-phosphatase; sorbitol-6-phosphate phosphatase +ec:3.1.3.51 dolichyl-phosphatase; dolichol phosphate phosphatase; dolichol phosphatase; dolichol monophosphatase; dolichyl monophosphate phosphatase; dolichyl phosphate phosphatase; polyisoprenyl phosphate phosphatase; polyprenylphosphate phosphatase; Dol-P phosphatase +ec:3.1.3.52 [3-methyl-2-oxobutanoate dehydrogenase (2-methylpropanoyl-transferring)]-phosphatase; branched-chain oxo-acid dehydrogenase phosphatase; branched-chain 2-keto acid dehydrogenase phosphatase; branched-chain alpha-keto acid dehydrogenase phosphatase; BCKDH (ambiguous); [3-methyl-2-oxobutanoate dehydrogenase (lipoamide)]-phosphatase; [3-methyl-2-oxobutanoate dehydrogenase (lipoamide)]-phosphate phosphohydrolase +ec:3.1.3.53 [myosin-light-chain] phosphatase; myosin light chain kinase phosphatase; myosin phosphatase; myosin phosphatase; protein phosphatase 2A; myosin-light-chain-phosphatase +ec:3.1.3.54 fructose-2,6-bisphosphate 6-phosphatase; fructose 2,6-bisphosphate-6-phosphohydrolase; fructose-2,6-bisphosphate 6-phosphohydrolase; D-fructose-2,6-bisphosphate 6-phosphohydrolase +ec:3.1.3.55 caldesmon-phosphatase; SMP-I; smooth muscle caldesmon phosphatase +ec:3.1.3.56 inositol-polyphosphate 5-phosphatase; type I inositol-polyphosphate phosphatase; inositol trisphosphate phosphomonoesterase; InsP3/Ins(1,3,4,5)P4 5-phosphatase; inosine triphosphatase; D-myo-inositol 1,4,5-triphosphate 5-phosphatase; D-myo-inositol 1,4,5-trisphosphate 5-phosphatase; L-myo-inositol 1,4,5-trisphosphate-monoesterase; inositol phosphate 5-phosphomonoesterase; inositol-1,4,5-trisphosphate/1,3,4,5-tetrakisphosphate 5-phosphatase; Ins(1,4,5)P3 5-phosphatase; D-myo-inositol(1,4,5)/(1,3,4,5)-polyphosphate 5-phosphatase; inositol 1,4,5-trisphosphate phosphatase; inositol polyphosphate-5-phosphatase; myo-inositol-1,4,5-trisphosphate 5-phosphatase; inositol-1,4,5-trisphosphate 5-phosphatase +ec:3.1.3.57 inositol-1,4-bisphosphate 1-phosphatase; inositol-polyphosphate 1-phosphatase +ec:3.1.3.58 sugar-terminal-phosphatase; xylitol-5-phosphatase +ec:3.1.3.59 alkylacetylglycerophosphatase; 1-alkyl-2-lyso-sn-glycero-3-P:acetyl-CoA acetyltransferase; alkylacetylglycerophosphate phosphatase +ec:3.1.3.60 phosphoenolpyruvate phosphatase; PEP phosphatase +ec:3.1.3.61 Deleted entry +ec:3.1.3.62 multiple inositol-polyphosphate phosphatase; inositol (1,3,4,5)-tetrakisphosphate 3-phosphatase; inositol 1,3,4,5-tetrakisphosphate 3-phosphomonoesterase; inositol 1,3,4,5-tetrakisphosphate-5-phosphomonoesterase; inositol tetrakisphosphate phosphomonoesterase; inositol-1,3,4,5-tetrakisphosphate 3-phosphatase; MIPP +ec:3.1.3.63 2-carboxy-D-arabinitol-1-phosphatase; 2-carboxyarabinitol 1-phosphatase; 2-carboxy-D-arabinitol 1-phosphate phosphohydrolase +ec:3.1.3.64 phosphatidylinositol-3-phosphatase; inositol-1,3-bisphosphate 3-phosphatase; inositol 1,3-bisphosphate phosphatase; inositol-polyphosphate 3-phosphatase; D-myo-inositol-1,3-bisphosphate 3-phosphohydrolase; phosphatidyl-3-phosphate 3-phosphohydrolase +ec:3.1.3.65 Deleted entry +ec:3.1.3.66 phosphatidylinositol-3,4-bisphosphate 4-phosphatase; inositol-3,4-bisphosphate 4-phosphatase; D-myo-inositol-3,4-bisphosphate 4-phosphohydrolase; phosphoinositide 4-phosphatase; inositol polyphosphate 4-phosphatase; inositol polyphosphate 4-phosphatase type II +ec:3.1.3.67 phosphatidylinositol-3,4,5-trisphosphate 3-phosphatase; PTEN; MMAC1; phosphatidylinositol-3,4,5-trisphosphate 3-phosphohydrolase +ec:3.1.3.68 2-deoxyglucose-6-phosphatase; 2-deoxyglucose-6-phosphate phosphatase +ec:3.1.3.69 glucosylglycerol 3-phosphatase; salt tolerance protein A; StpA; 2-(beta-D-glucosyl)-sn-glycerol-3-phosphate phosphohydrolase (incorrect) +ec:3.1.3.70 mannosyl-3-phosphoglycerate phosphatase +ec:3.1.3.71 2-phosphosulfolactate phosphatase; (2R)-phosphosulfolactate phosphohydrolase; ComB phosphatase +ec:3.1.3.72 5-phytase +ec:3.1.3.73 adenosylcobalamin/alpha-ribazole phosphatase; CobC; adenosylcobalamin phosphatase; alpha-ribazole phosphatase +ec:3.1.3.74 pyridoxal phosphatase; vitamine B6 (pyridoxine) phosphatase; PLP phosphatase; vitamin B6-phosphate phosphatase; PNP phosphatase +ec:3.1.3.75 phosphoethanolamine/phosphocholine phosphatase; PHOSPHO1; 3X11A +ec:3.1.3.76 lipid-phosphate phosphatase; hydroxy fatty acid phosphatase; dihydroxy fatty acid phosphatase; hydroxy lipid phosphatase; sEH (ambiguous); soluble epoxide hydrolase (ambiguous); (9S,10S)-10-hydroxy-9-(phosphonooxy)octadecanoate phosphohydrolase +ec:3.1.3.77 acireductone synthase; E1; E-1 enolase-phosphatase; 5-(methylthio)-2,3-dioxopentyl-phosphate phosphohydrolase (isomerizing) +ec:3.1.3.78 phosphatidylinositol-4,5-bisphosphate 4-phosphatase; phosphatidylinositol-4,5-bisphosphate 4-phosphatase I; phosphatidylinositol-4,5-bisphosphate 4-phosphatase II; type I PtdIns-4,5-P2 4-Ptase; type II PtdIns-4,5-P2 4-Ptase; IpgD; PtdIns-4,5-P2 4-phosphatase type I; PtdIns-4,5-P2 4-phosphatase type II; type I phosphatidylinositol-4,5-bisphosphate 4-phosphatase; type 1 4-phosphatase +ec:3.1.3.79 mannosylfructose-phosphate phosphatase; mannosylfructose-6-phosphate phosphatase; MFPP +ec:3.1.3.80 2,3-bisphosphoglycerate 3-phosphatase; MIPP1; 2,3-BPG 3-phosphatase +ec:3.1.3.81 diacylglycerol diphosphate phosphatase; DGPP phosphatase; DGPP phosphohydrolase; DPP1; DPPL1; DPPL2; PAP2; pyrophosphate phosphatase +ec:3.1.3.82 D-glycero-beta-D-manno-heptose 1,7-bisphosphate 7-phosphatase; gmhB (gene name); yaeD (gene name) +ec:3.1.3.83 D-glycero-alpha-D-manno-heptose 1,7-bisphosphate 7-phosphatase; gmhB (gene name) +ec:3.1.3.84 ADP-ribose 1''-phosphate phosphatase; POA1; Appr1p phosphatase; Poa1p; ADP-ribose 1''-phosphate phosphohydrolase +ec:3.1.3.85 glucosyl-3-phosphoglycerate phosphatase; GpgP protein +ec:3.1.3.86 phosphatidylinositol-3,4,5-trisphosphate 5-phosphatase; SHIP1; SHIP2; SHIP; p150Ship +ec:3.1.3.87 2-hydroxy-3-keto-5-methylthiopentenyl-1-phosphate phosphatase; HK-MTPenyl-1-P phosphatase; MtnX; YkrX; 2-hydroxy-5-(methylthio)-3-oxopent-1-enyl phosphate phosphohydrolase; 2-hydroxy-5-(methylsulfanyl)-3-oxopent-1-enyl phosphate phosphohydrolase +ec:3.1.3.88 5''-phosphoribostamycin phosphatase; btrP (gene name); neoI (gene name) +ec:3.1.3.89 5'-deoxynucleotidase; yfbR (gene name) +ec:3.1.3.90 maltose 6'-phosphate phosphatase; maltose 6'-P phosphatase; mapP (gene name) +ec:3.1.3.91 7-methylguanosine nucleotidase; cytosolic nucleotidase III-like; cNIII-like; N7-methylguanylate 5'-phosphatase +ec:3.1.3.92 kanosamine-6-phosphate phosphatase; ntdB (gene name) +ec:3.1.3.93 L-galactose 1-phosphate phosphatase; VTC4 (gene name) (ambiguous); IMPL2 (gene name) (ambiguous) +ec:3.1.3.94 D-galactose 1-phosphate phosphatase +ec:3.1.3.95 phosphatidylinositol-3,5-bisphosphate 3-phosphatase; MTMR; PtdIns-3,5-P2 3-Ptase +ec:3.1.3.96 pseudouridine 5'-phosphatase; pseudouridine 5'-monophosphatase; 5'-PsiMPase; HDHD1 +ec:3.1.3.97 3',5'-nucleoside bisphosphate phosphatase +ec:3.1.3.98 Transferred to 3.6.1.68 +ec:3.1.3.99 IMP-specific 5'-nucleotidase; ISN1 (gene name) +ec:3.1.3.100 thiamine phosphate phosphatase +ec:3.1.3.101 validoxylamine A 7'-phosphate phosphatase; vldH (gene name) +ec:3.1.3.102 FMN hydrolase; FMN phosphatase; AtcpFHy1 +ec:3.1.3.103 3-deoxy-D-glycero-D-galacto-nonulopyranosonate 9-phosphatase; 3-deoxy-D-glycero-D-galacto-non-2-ulopyranosonate-9-phosphate phosphatase +ec:3.1.3.104 5-amino-6-(5-phospho-D-ribitylamino)uracil phosphatase; 5-amino-6-ribitylamino-2,4(1H,3H)-pyrimidinedione 5'-phosphate phosphatase +ec:3.1.3.105 N-acetyl-D-muramate 6-phosphate phosphatase; mupP (gene name) +ec:3.1.3.106 2-lysophosphatidate phosphatase; 1-acyl-sn-glycerol 3-phosphatase; CPC3 (gene name); PHM8 (gene name) +ec:3.1.3.107 amicoumacin phosphatase; amiO (gene name) +ec:3.1.3.108 nocturnin; NOCT (gene name); nocturnin (curled); MJ0109 (gene name); NADP phosphatase; NADPase +ec:3.1.4.1 phosphodiesterase I; 5'-exonuclease; 5'-phosphodiesterase; 5'-nucleotide phosphodiesterase; oligonucleate 5'-nucleotidohydrolase; 5' nucleotide phosphodiesterase/alkaline phosphodiesterase I; 5'-NPDase; 5'-PDase; 5'-PDE; 5'NPDE; alkaline phosphodiesterase; nucleotide pyrophosphatase/phosphodiesterase I; orthophosphoric diester phosphohydrolase; PDE I; phosphodiesterase (ambiguous); exonuclease I +ec:3.1.4.2 glycerophosphocholine phosphodiesterase; glycerophosphinicocholine diesterase; glycerylphosphorylcholinediesterase; sn-glycero-3-phosphorylcholine diesterase; glycerolphosphorylcholine phosphodiesterase; glycerophosphohydrolase +ec:3.1.4.3 phospholipase C; lipophosphodiesterase I; lecithinase C; Clostridium welchii alpha-toxin; Clostridium oedematiens beta- and gamma-toxins; lipophosphodiesterase C; phosphatidase C; heat-labile hemolysin; alpha-toxin +ec:3.1.4.4 phospholipase D; lipophosphodiesterase II; lecithinase D; choline phosphatase +ec:3.1.4.5 Transferred to 3.1.21.1 +ec:3.1.4.6 Transferred to 3.1.22.1 +ec:3.1.4.7 Transferred to 3.1.31.1 +ec:3.1.4.8 Transferred to 3.1.27.3 +ec:3.1.4.9 Transferred to 3.1.30.2 +ec:3.1.4.10 Transferred to 4.6.1.13 +ec:3.1.4.11 phosphoinositide phospholipase C; triphosphoinositide phosphodiesterase; phosphoinositidase C; 1-phosphatidylinositol-4,5-bisphosphate phosphodiesterase; monophosphatidylinositol phosphodiesterase; phosphatidylinositol phospholipase C; PI-PLC; 1-phosphatidyl-D-myo-inositol-4,5-bisphosphate inositoltrisphosphohydrolase +ec:3.1.4.12 sphingomyelin phosphodiesterase; neutral sphingomyelinase +ec:3.1.4.13 serine-ethanolaminephosphate phosphodiesterase; serine ethanolamine phosphodiester phosphodiesterase; SEP diesterase +ec:3.1.4.14 [acyl-carrier-protein] phosphodiesterase; ACP hydrolyase; ACP phosphodiesterase; AcpH; [acyl-carrier-protein] 4'-pantetheine-phosphohydrolase; holo-[acyl-carrier-protein] 4'-pantetheine-phosphohydrolase +ec:3.1.4.15 Transferred to 2.7.7.89 +ec:3.1.4.16 2',3'-cyclic-nucleotide 2'-phosphodiesterase; ribonucleoside 2',3'-cyclic phosphate diesterase; 2',3 '-cyclic AMP phosphodiesterase; 2',3'-cyclic nucleotidase; cyclic 2',3'-nucleotide 2'-phosphodiesterase; cyclic 2',3'-nucleotide phosphodiesterase; 2',3'-cyclic nucleoside monophosphate phosphodiesterase; 2',3'-cyclic AMP 2'-phosphohydrolase; cyclic phosphodiesterase:3'-nucleotidase; 2',3'-cyclic nucleotide phosphohydrolase; 2':3'-cyclic phosphodiesterase; 2':3'-cyclic nucleotide phosphodiesterase:3'-nucleotidase +ec:3.1.4.17 3',5'-cyclic-nucleotide phosphodiesterase; cyclic 3',5'-mononucleotide phosphodiesterase; PDE; cyclic 3',5'-nucleotide phosphodiesterase; cyclic 3',5'-phosphodiesterase; 3',5'-nucleotide phosphodiesterase; 3':5'-cyclic nucleotide 5'-nucleotidohydrolase; 3',5'-cyclonucleotide phosphodiesterase; cyclic nucleotide phosphodiesterase; 3', 5'-cyclic nucleoside monophosphate phosphodiesterase; 3': 5'-monophosphate phosphodiesterase (cyclic CMP); cytidine 3':5'-monophosphate phosphodiesterase (cyclic CMP); cyclic 3',5-nucleotide monophosphate phosphodiesterase; nucleoside 3',5'-cyclic phosphate diesterase; nucleoside-3',5-monophosphate phosphodiesterase +ec:3.1.4.18 Transferred to 3.1.16.1 +ec:3.1.4.19 Transferred to 3.1.13.3 +ec:3.1.4.20 Transferred to 3.1.13.1 +ec:3.1.4.21 Transferred to 3.1.30.1 +ec:3.1.4.22 Transferred to 3.1.27.5 +ec:3.1.4.23 Transferred to 3.1.27.1 +ec:3.1.4.24 Deleted entry +ec:3.1.4.25 Transferred to 3.1.11.1 +ec:3.1.4.26 Deleted entry +ec:3.1.4.27 Transferred to 3.1.11.2 +ec:3.1.4.28 Transferred to 3.1.11.3 +ec:3.1.4.29 Deleted entry +ec:3.1.4.30 Transferred to 3.1.21.2 +ec:3.1.4.31 Transferred to 3.1.11.4 +ec:3.1.4.32 Deleted entry +ec:3.1.4.33 Deleted entry +ec:3.1.4.34 Deleted entry +ec:3.1.4.35 3',5'-cyclic-GMP phosphodiesterase; guanosine cyclic 3',5'-phosphate phosphodiesterase; cyclic GMP phosphodiesterase; cyclic 3',5'-GMP phosphodiesterase; cyclic guanosine 3',5'-monophosphate phosphodiesterase; cyclic guanosine 3',5'-phosphate phosphodiesterase; cGMP phosphodiesterase; cGMP-PDE +ec:3.1.4.36 Deleted entry +ec:3.1.4.37 2',3'-cyclic-nucleotide 3'-phosphodiesterase; cyclic-CMP phosphodiesterase; 2',3'-cyclic AMP phosphodiesterase; cyclic 2',3'-nucleotide 3'-phosphodiesterase; cyclic 2',3'-nucleotide phosphodiesterase; 2',3'-cyclic nucleoside monophosphate phosphodiesterase; 2',3'-cyclic nucleotide 3'-phosphohydrolase; CNPase; 2',3'-cyclic nucleotide phosphohydrolase; 2':3'-cyclic nucleotide 3'-phosphodiesterase; 2':3'-CNMP-3'-ase +ec:3.1.4.38 glycerophosphocholine cholinephosphodiesterase; L-3-glycerylphosphinicocholine cholinephosphohydrolase +ec:3.1.4.39 alkylglycerophosphoethanolamine phosphodiesterase; lysophospholipase D +ec:3.1.4.40 CMP-N-acylneuraminate phosphodiesterase; CMP-sialate hydrolase; CMP-sialic acid hydrolase; CMP-N-acylneuraminic acid hydrolase; cytidine monophosphosialic hydrolase; cytidine monophosphosialate hydrolase; cytidine monophosphate-N-acetylneuraminic acid hydrolase; CMP-N-acetylneuraminate hydrolase +ec:3.1.4.41 sphingomyelin phosphodiesterase D; sphingomyelinase D +ec:3.1.4.42 glycerol-1,2-cyclic-phosphate 2-phosphodiesterase; rac-glycerol 1:2-cyclic phosphate 2-phosphodiesterase +ec:3.1.4.43 glycerophosphoinositol inositolphosphodiesterase; 1,2-cyclic-inositol-phosphate phosphodiesterase; D-myo-inositol 1:2-cyclic phosphate 2-phosphohydrolase; D-inositol 1,2-cyclic phosphate 2-phosphohydrolase; D-myo-inositol 1,2-cyclic phosphate 2-phosphohydrolase; 1-D-myo-inositol-1,2-cyclic-phosphate 2-inositolphosphohydrolase; inositol-1,2-cyclic-phosphate 2-inositolphosphohydrolase +ec:3.1.4.44 glycerophosphoinositol glycerophosphodiesterase; sn-glycero(3)phosphoinositol glycerophosphohydrolase; sn-glycero-3-phospho-1-inositol glycerophosphohydrolase +ec:3.1.4.45 N-acetylglucosamine-1-phosphodiester alpha-N-acetylglucosaminidase; alpha-N-acetylglucosaminyl phosphodiesterase; lysosomal alpha-N-acetylglucosaminidase; phosphodiester glycosidase; alpha-N-acetyl-D-glucosamine-1-phosphodiester N-acetylglucosaminidase; 2-acetamido-2-deoxy-alpha-D-glucose 1-phosphodiester acetamidodeoxyglucohydrolase +ec:3.1.4.46 glycerophosphodiester phosphodiesterase; gene hpd protein; glycerophosphoryl diester phosphodiesterase; IgD-binding protein D +ec:3.1.4.47 Transferred to 4.6.1.14 +ec:3.1.4.48 dolichylphosphate-glucose phosphodiesterase; dolichol phosphoglucose phosphodiesterase; Dol-P-Glc phosphodiesterase +ec:3.1.4.49 dolichylphosphate-mannose phosphodiesterase; mannosylphosphodolichol phosphodiesterase +ec:3.1.4.50 glycosylphosphatidylinositol phospholipase D; GPI-PLD; glycoprotein phospholipase D; phosphatidylinositol phospholipase D; phosphatidylinositol-specific phospholipase D +ec:3.1.4.51 glucose-1-phospho-D-mannosylglycoprotein phosphodiesterase; alpha-glucose-1-phosphate phosphodiesterase +ec:3.1.4.52 cyclic-guanylate-specific phosphodiesterase; cyclic bis(3'->5')diguanylate phosphodiesterase; c-di-GMP-specific phosphodiesterase; c-di-GMP phosphodiesterase; phosphodiesterase (misleading); phosphodiesterase A1; PDEA1; VieA +ec:3.1.4.53 3',5'-cyclic-AMP phosphodiesterase; cAMP-specific phosphodiesterase; cAMP-specific PDE; PDE1; PDE2A; PDE2B; PDE4; PDE7; PDE8; PDEB1; PDEB2 +ec:3.1.4.54 N-acetylphosphatidylethanolamine-hydrolysing phospholipase D; NAPE-PLD; anandamide-generating phospholipase D; N-acyl phosphatidylethanolamine phospholipase D; NAPE-hydrolyzing phospholipase D +ec:3.1.4.55 phosphoribosyl 1,2-cyclic phosphate phosphodiesterase; phnP (gene name) +ec:3.1.4.56 7,8-dihydroneopterin 2',3'-cyclic phosphate phosphodiesterase; MptB +ec:3.1.4.57 phosphoribosyl 1,2-cyclic phosphate 1,2-diphosphodiesterase; cyclic phosphate dihydrolase; phnPP (gene name) +ec:3.1.4.58 RNA 2',3'-cyclic 3'-phosphodiesterase; thpR (gene name); ligT (gene name) +ec:3.1.4.59 cyclic-di-AMP phosphodiesterase; gdpP (gene name) +ec:3.1.4.60 pApA phosphodiesterase; pde2 (gene name); pApA hydrolase +ec:3.1.4.61 cyclic 2,3-diphosphoglycerate hydrolase +ec:3.1.5.1 dGTPase; deoxy-GTPase; deoxyguanosine 5-triphosphate triphosphohydrolase; deoxyguanosine triphosphatase; deoxyguanosine triphosphate triphosphohydrolase +ec:3.1.6.1 arylsulfatase (type I); sulfatase; nitrocatechol sulfatase; phenolsulfatase; phenylsulfatase; p-nitrophenyl sulfatase; arylsulfohydrolase; 4-methylumbelliferyl sulfatase; estrogen sulfatase; type I sulfatase; arylsulfatase +ec:3.1.6.2 steryl-sulfatase; arylsulfatase; steroid sulfatase; sterol sulfatase; dehydroepiandrosterone sulfate sulfatase; arylsulfatase C; steroid 3-sulfatase; steroid sulfate sulfohydrolase; dehydroepiandrosterone sulfatase; pregnenolone sulfatase; phenolic steroid sulfatase; 3-beta-hydroxysteroid sulfate sulfatase +ec:3.1.6.3 glycosulfatase; glucosulfatase +ec:3.1.6.4 N-acetylgalactosamine-6-sulfatase; chondroitin sulfatase; chondroitinase; galactose-6-sulfate sulfatase; acetylgalactosamine 6-sulfatase; N-acetylgalactosamine-6-sulfate sulfatase; N-acetylgalactosamine 6-sulfatase +ec:3.1.6.5 Deleted entry +ec:3.1.6.6 choline-sulfatase +ec:3.1.6.7 cellulose-polysulfatase +ec:3.1.6.8 cerebroside-sulfatase; arylsulfatase A; cerebroside sulfate sulfatase +ec:3.1.6.9 chondro-4-sulfatase; chondroitin-4-sulfatase; 4-deoxy-beta-D-gluc-4-enuronosyl-(1,3)-N-acetyl-D-galactosamine-4-sulfate 4-sulfohydrolase +ec:3.1.6.10 chondro-6-sulfatase; 4-deoxy-beta-D-gluc-4-enuronosyl-(1,3)-N-acetyl-D-galactosamine-6-sulfate 6-sulfohydrolase +ec:3.1.6.11 disulfoglucosamine-6-sulfatase; N-sulfoglucosamine-6-sulfatase; 6,N-disulfoglucosamine 6-O-sulfohydrolase; N,6-O-disulfo-D-glucosamine 6-sulfohydrolase +ec:3.1.6.12 N-acetylgalactosamine-4-sulfatase; chondroitinsulfatase; chondroitinase; arylsulfatase B; acetylgalactosamine 4-sulfatase; N-acetylgalactosamine 4-sulfate sulfohydrolase +ec:3.1.6.13 iduronate-2-sulfatase; chondroitinsulfatase; idurono-2-sulfatase; iduronide-2-sulfate sulfatase; L-iduronosulfatase; L-idurono sulfate sulfatase; iduronate sulfatase; sulfo-L-iduronate sulfatase; L-iduronate 2-sulfate sulfatase; sulfoiduronate sulfohydrolase; 2-sulfo-L-iduronate 2-sulfatase; iduronate-2-sulfate sulfatase; iduronate sulfate sulfatase +ec:3.1.6.14 N-acetylglucosamine-6-sulfatase; chondroitinsulfatase; O,N-disulfate O-sulfohydrolase; acetylglucosamine 6-sulfatase; N-acetylglucosamine 6-sulfate sulfatase; acetylglucosamine 6-sulfatase; 2-acetamido-2-deoxy-D-glucose 6-sulfate sulfatase +ec:3.1.6.15 N-sulfoglucosamine-3-sulfatase; chondroitinsulfatase +ec:3.1.6.16 monomethyl-sulfatase +ec:3.1.6.17 D-lactate-2-sulfatase; (S)-2-O-sulfolactate 2-sulfohydrolase (incorrect stereochemistry) +ec:3.1.6.18 glucuronate-2-sulfatase; glucurono-2-sulfatase +ec:3.1.6.19 (R)-specific secondary-alkylsulfatase (type III); S3 secondary alkylsulphohydrolase; Pisa1; secondary alkylsulphohydrolase; (R)-specific sec-alkylsulfatase; sec-alkylsulfatase; (R)-specific secondary-alkylsulfatase; type III (R)-specific secondary-alkylsulfatase +ec:3.1.6.20 S-sulfosulfanyl-L-cysteine sulfohydrolase; SoxB +ec:3.1.6.21 linear primary-alkylsulfatase; sdsA1 (gene name); yjcS (gene name); type III linear primary-alkylsulfatase +ec:3.1.6.22 branched primary-alkylsulfatase; DP1 (gene name); type III branched primary-alkylsulfatase +ec:3.1.7.1 prenyl-diphosphatase; prenyl-pyrophosphatase; prenol pyrophosphatase; prenylphosphatase +ec:3.1.7.2 guanosine-3',5'-bis(diphosphate) 3'-diphosphatase; guanosine-3',5'-bis(diphosphate) 3'-pyrophosphatase; PpGpp-3'-pyrophosphohydrolase; PpGpp phosphohydrolase +ec:3.1.7.3 monoterpenyl-diphosphatase; bornyl pyrophosphate hydrolase; monoterpenyl-pyrophosphatase +ec:3.1.7.4 Deleted entry +ec:3.1.7.5 geranylgeranyl diphosphate diphosphatase; geranylgeranyl diphosphate phosphatase +ec:3.1.7.6 farnesyl diphosphatase; FPP phosphatase +ec:3.1.7.7 Transferred to 4.2.3.194 +ec:3.1.7.8 Transferred to 2.5.1.153 +ec:3.1.7.9 Transferred to 2.5.1.153 +ec:3.1.7.10 (13E)-labda-7,13-dien-15-ol synthase; labda-7,13E-dien-15-ol synthase +ec:3.1.7.11 geranyl diphosphate diphosphatase; geraniol synthase; geranyl pyrophosphate pyrophosphatase; GES; CtGES +ec:3.1.7.12 (+)-kolavelool synthase; Haur_2146 +ec:3.1.7.13 neryl diphosphate diphosphatase; NES (gene name); nerol synthase +ec:3.1.8.1 aryldialkylphosphatase; organophosphate hydrolase; paraoxonase; A-esterase; aryltriphosphatase; organophosphate esterase; esterase B1; esterase E4; paraoxon esterase; pirimiphos-methyloxon esterase; OPA anhydrase (ambiguous); organophosphorus hydrolase; phosphotriesterase; paraoxon hydrolase; OPH; organophosphorus acid anhydrase +ec:3.1.8.2 diisopropyl-fluorophosphatase; DFPase; tabunase; somanase; organophosphorus acid anhydrolase; organophosphate acid anhydrase; OPA anhydrase (ambiguous); diisopropylphosphofluoridase; dialkylfluorophosphatase; diisopropyl phosphorofluoridate hydrolase; isopropylphosphorofluoridase; diisopropylfluorophosphonate dehalogenase +ec:3.1.11.1 exodeoxyribonuclease I; Escherichia coli exonuclease I; E. coli exonuclease I; exonuclease I +ec:3.1.11.2 exodeoxyribonuclease III; Escherichia coli exonuclease III; E. coli exonuclease III; endoribonuclease III +ec:3.1.11.3 exodeoxyribonuclease (lambda-induced); lambda exonuclease; phage lambda-induced exonuclease; Escherichia coli exonuclease IV; E. coli exonuclease IV; exodeoxyribonuclease IV; exonuclease IV +ec:3.1.11.4 exodeoxyribonuclease (phage SP3-induced); phage SP3 DNase; DNA 5'-dinucleotidohydrolase; deoxyribonucleate 5'-dinucleotidase; deoxyribonucleic 5'-dinucleotidohydrolase; bacteriophage SP3 deoxyribonuclease; deoxyribonucleate 5'-dinucleotidase +ec:3.1.11.5 exodeoxyribonuclease V; Escherichia coli exonuclease V; E. coli exonuclease V; gene recBC endoenzyme; RecBC deoxyribonuclease; gene recBC DNase; exonuclease V; gene recBCD enzymes +ec:3.1.11.6 exodeoxyribonuclease VII; Escherichia coli exonuclease VII; E. coli exonuclease VII; endodeoxyribonuclease VII; exonuclease VII +ec:3.1.11.7 Transferred to 3.6.1.71 +ec:3.1.11.8 Transferred to 3.6.1.70 +ec:3.1.12.1 5' to 3' exodeoxyribonuclease (nucleoside 3'-phosphate-forming); Cas4; 5' to 3' single stranded DNA exonuclease +ec:3.1.12.2 Transferred to 3.6.1.72 +ec:3.1.13.1 exoribonuclease II; ribonuclease II; ribonuclease Q; BN ribonuclease; Escherichia coli exo-RNase II; RNase II; exoribonuclease (misleading); 5'-exoribonuclease (misleading) +ec:3.1.13.2 exoribonuclease H +ec:3.1.13.3 oligonucleotidase; oligoribonuclease +ec:3.1.13.4 poly(A)-specific ribonuclease; 3'-exoribonuclease; 2',3'-exoribonuclease +ec:3.1.13.5 ribonuclease D; RNase D +ec:3.1.14.1 yeast ribonuclease +ec:3.1.15.1 venom exonuclease; venom phosphodiesterase +ec:3.1.16.1 spleen exonuclease; 3'-exonuclease; spleen phosphodiesterase; 3'-nucleotide phosphodiesterase; phosphodiesterase II +ec:3.1.21.1 deoxyribonuclease I; pancreatic DNase; DNase; thymonuclease, dornase; dornava; dornavac; pancreatic deoxyribonuclease; pancreatic dornase; deoxyribonuclease (pancreatic); pancreatic DNase; DNAase; deoxyribonucleic phosphatase; DNase I; alkaline deoxyribonuclease; alkaline DNase; endodeoxyribonuclease I; DNA depolymerase; Escherichia coli endonuclease I; deoxyribonuclease A; DNA endonuclease; DNA nuclease +ec:3.1.21.2 deoxyribonuclease IV; deoxyribonuclease IV (phage-T4-induced) (misleading); endodeoxyribonuclease IV (phage T4-induced) (misleading); E. coli endonuclease IV; endodeoxyribonuclease (misleading); redoxyendonuclease; deoxriboendonuclease (misleading); endonuclease II; endonuclease IV; DNA-adenine-transferase; nfo (gene name) +ec:3.1.21.3 type I site-specific deoxyribonuclease; type I restriction enzyme; deoxyribonuclease (ATP- and S-adenosyl-L-methionine-dependent); restriction-modification system; deoxyribonuclease (adenosine triphosphate-hydrolyzing); adenosine triphosphate-dependent deoxyribonuclease; ATP-dependent DNase; type 1 site-specific deoxyribonuclease +ec:3.1.21.4 type II site-specific deoxyribonuclease; type II restriction enzyme +ec:3.1.21.5 type III site-specific deoxyribonuclease; type III restriction enzyme; restriction-modification system +ec:3.1.21.6 CC-preferring endodeoxyribonuclease; Streptomyces glaucescens exocytoplasmic dodeoxyribonuclease +ec:3.1.21.7 deoxyribonuclease V; endodeoxyribonuclease V; DNase V; Escherichia coli endodeoxyribonuclease V +ec:3.1.21.8 T4 deoxyribonuclease II; T4 endonuclease II; EndoII (ambiguous); denA (gene name) +ec:3.1.21.9 T4 deoxyribonuclease IV; T4 endonuclease IV; EndoIV (ambiguous); denB (gene name) +ec:3.1.21.10 crossover junction endodeoxyribonuclease; Hje endonuclease; Holliday junction endonuclease CCE1; Holliday junction resolvase; Holliday junction-cleaving endonuclease; Holliday junction-resolving endoribonuclease; RusA Holliday junction resolvase; RusA endonuclease; RuvC endonuclease; SpCCe1 Holliday junction resolvase; crossover junction endoribonuclease; cruciform-cutting endonuclease; endo X3; endonuclease RuvC; endonuclease VII; endonuclease X3; resolving enzyme CCE1 +ec:3.1.22.1 deoxyribonuclease II; DNase II; pancreatic DNase II; deoxyribonucleate 3'-nucleotidohydrolase; DNase II; pancreatic DNase II; acid deoxyribonuclease; acid DNase +ec:3.1.22.2 Aspergillus deoxyribonuclease K1; Aspergillus DNase K1 +ec:3.1.22.3 Transferred to 3.1.21.7 +ec:3.1.22.4 Transferred to 3.1.21.10 +ec:3.1.22.5 deoxyribonuclease X; Escherichia coli endodeoxyribonuclease; Escherichia coli endodeoxyribonuclease X +ec:3.1.23.1 Transferred to 3.1.21.4 +ec:3.1.23.2 Transferred to 3.1.21.4 +ec:3.1.23.3 Transferred to 3.1.21.4 +ec:3.1.23.4 Transferred to 3.1.21.4 +ec:3.1.23.5 Transferred to 3.1.21.4 +ec:3.1.23.6 Transferred to 3.1.21.4 +ec:3.1.23.7 Transferred to 3.1.21.4 +ec:3.1.23.8 Transferred to 3.1.21.4 +ec:3.1.23.9 Transferred to 3.1.21.4 +ec:3.1.23.10 Transferred to 3.1.21.4 +ec:3.1.23.11 Transferred to 3.1.21.4 +ec:3.1.23.12 Transferred to 3.1.21.4 +ec:3.1.23.13 Transferred to 3.1.21.4 +ec:3.1.23.14 Transferred to 3.1.21.4 +ec:3.1.23.15 Transferred to 3.1.21.4 +ec:3.1.23.16 Transferred to 3.1.21.4 +ec:3.1.23.17 Transferred to 3.1.21.4 +ec:3.1.23.18 Transferred to 3.1.21.4 +ec:3.1.23.19 Transferred to 3.1.21.4 +ec:3.1.23.20 Transferred to 3.1.21.4 +ec:3.1.23.21 Transferred to 3.1.21.4 +ec:3.1.23.22 Transferred to 3.1.21.4 +ec:3.1.23.23 Transferred to 3.1.21.4 +ec:3.1.23.24 Transferred to 3.1.21.4 +ec:3.1.23.25 Transferred to 3.1.21.4 +ec:3.1.23.26 Transferred to 3.1.21.4 +ec:3.1.23.27 Transferred to 3.1.21.4 +ec:3.1.23.28 Transferred to 3.1.21.4 +ec:3.1.23.29 Transferred to 3.1.21.4 +ec:3.1.23.30 Transferred to 3.1.21.4 +ec:3.1.23.31 Transferred to 3.1.21.4 +ec:3.1.23.32 Transferred to 3.1.21.4 +ec:3.1.23.33 Transferred to 3.1.21.4 +ec:3.1.23.34 Transferred to 3.1.21.4 +ec:3.1.23.35 Transferred to 3.1.21.4 +ec:3.1.23.36 Transferred to 3.1.21.4 +ec:3.1.23.37 Transferred to 3.1.21.4 +ec:3.1.23.38 Transferred to 3.1.21.4 +ec:3.1.23.39 Transferred to 3.1.21.4 +ec:3.1.23.40 Transferred to 3.1.21.4 +ec:3.1.23.41 Transferred to 3.1.21.4 +ec:3.1.23.42 Transferred to 3.1.21.4 +ec:3.1.23.43 Transferred to 3.1.21.4 +ec:3.1.23.44 Transferred to 3.1.21.4 +ec:3.1.23.45 Transferred to 3.1.21.4 +ec:3.1.23.46 Transferred to 3.1.21.4 +ec:3.1.23.47 Transferred to 3.1.21.4 +ec:3.1.23.48 Transferred to 3.1.21.4 +ec:3.1.23.49 Transferred to 3.1.21.4 +ec:3.1.23.50 Transferred to 3.1.21.4 +ec:3.1.23.51 Transferred to 3.1.21.4 +ec:3.1.23.52 Transferred to 3.1.21.4 +ec:3.1.23.53 Transferred to 3.1.21.4 +ec:3.1.23.54 Transferred to 3.1.21.4 +ec:3.1.23.55 Transferred to 3.1.21.4 +ec:3.1.23.56 Transferred to 3.1.21.4 +ec:3.1.23.57 Transferred to 3.1.21.4 +ec:3.1.23.58 Transferred to 3.1.21.4 +ec:3.1.23.59 Transferred to 3.1.21.4 +ec:3.1.23.60 Transferred to 3.1.21.4 +ec:3.1.23.61 Transferred to 3.1.21.4 +ec:3.1.23.62 Transferred to 3.1.21.4 +ec:3.1.23.63 Transferred to 3.1.21.4 +ec:3.1.23.64 Transferred to 3.1.21.4 +ec:3.1.23.65 Transferred to 3.1.21.4 +ec:3.1.23.66 Transferred to 3.1.21.4 +ec:3.1.23.67 Transferred to 3.1.21.4 +ec:3.1.23.68 Transferred to 3.1.21.4 +ec:3.1.23.69 Transferred to 3.1.21.4 +ec:3.1.23.70 Transferred to 3.1.21.4 +ec:3.1.23.71 Transferred to 3.1.21.4 +ec:3.1.23.72 Transferred to 3.1.21.4 +ec:3.1.23.73 Transferred to 3.1.21.4 +ec:3.1.23.74 Transferred to 3.1.21.4 +ec:3.1.23.75 Transferred to 3.1.21.4 +ec:3.1.23.76 Transferred to 3.1.21.4 +ec:3.1.23.77 Transferred to 3.1.21.4 +ec:3.1.23.78 Transferred to 3.1.21.4 +ec:3.1.23.79 Transferred to 3.1.21.4 +ec:3.1.23.80 Transferred to 3.1.21.4 +ec:3.1.23.81 Transferred to 3.1.21.4 +ec:3.1.23.82 Transferred to 3.1.21.4 +ec:3.1.23.83 Transferred to 3.1.21.4 +ec:3.1.23.84 Transferred to 3.1.21.4 +ec:3.1.23.85 Transferred to 3.1.21.4 +ec:3.1.23.86 Transferred to 3.1.21.4 +ec:3.1.23.87 Transferred to 3.1.21.4 +ec:3.1.23.88 Transferred to 3.1.21.4 +ec:3.1.23.89 Transferred to 3.1.21.4 +ec:3.1.23.90 Transferred to 3.1.21.4 +ec:3.1.23.91 Transferred to 3.1.21.4 +ec:3.1.23.92 Transferred to 3.1.21.4 +ec:3.1.23.93 Transferred to 3.1.21.4 +ec:3.1.23.94 Transferred to 3.1.21.4 +ec:3.1.23.95 Transferred to 3.1.21.4 +ec:3.1.23.96 Transferred to 3.1.21.4 +ec:3.1.23.97 Transferred to 3.1.21.4 +ec:3.1.23.98 Transferred to 3.1.21.4 +ec:3.1.23.99 Transferred to 3.1.21.4 +ec:3.1.23.100 Transferred to 3.1.21.4 +ec:3.1.23.101 Transferred to 3.1.21.4 +ec:3.1.23.102 Transferred to 3.1.21.4 +ec:3.1.23.103 Transferred to 3.1.21.4 +ec:3.1.23.104 Transferred to 3.1.21.4 +ec:3.1.23.105 Transferred to 3.1.21.4 +ec:3.1.23.106 Transferred to 3.1.21.4 +ec:3.1.23.107 Transferred to 3.1.21.4 +ec:3.1.23.108 Transferred to 3.1.21.4 +ec:3.1.23.109 Transferred to 3.1.21.4 +ec:3.1.24.1 Transferred to 3.1.21.3 +ec:3.1.24.2 Transferred to 3.1.21.3 +ec:3.1.24.3 Transferred to 3.1.21.5 +ec:3.1.24.4 Transferred to 3.1.21.5 +ec:3.1.25.1 deoxyribonuclease (pyrimidine dimer); endodeoxyribonuclease (pyrimidine dimer); endodeoxyribonuclease (pyrimidine dimer); bacteriophage T4 endodeoxyribonuclease V; T4 endonuclease V +ec:3.1.25.2 Transferred to 4.2.99.18 +ec:3.1.26.1 Physarum polycephalum ribonuclease +ec:3.1.26.2 ribonuclease alpha; 2'-O-methyl RNase +ec:3.1.26.3 ribonuclease III; RNase III; ribonuclease 3 +ec:3.1.26.4 ribonuclease H; endoribonuclease H (calf thymus); RNase H; RNA*DNA hybrid ribonucleotidohydrolase; hybrid ribonuclease; hybridase; hybridase (ribonuclease H); ribonuclease H; hybrid nuclease; calf thymus ribonuclease H +ec:3.1.26.5 ribonuclease P; RNase P +ec:3.1.26.6 ribonuclease IV; endoribonuclease IV; poly(A)-specific ribonuclease +ec:3.1.26.7 ribonuclease P4 +ec:3.1.26.8 ribonuclease M5; RNase M5; 5S ribosomal maturation nuclease; 5S ribosomal RNA maturation endonuclease +ec:3.1.26.9 ribonuclease [poly-(U)-specific]; ribonuclease (uracil-specific); uracil-specific endoribonuclease; uracil-specific RNase +ec:3.1.26.10 ribonuclease IX; poly(U)- and poly(C)-specific endoribonuclease +ec:3.1.26.11 tRNase Z; 3 tRNase; tRNA 3 endonuclease; RNase Z; 3' tRNase +ec:3.1.26.12 ribonuclease E; endoribonuclease E; RNase E; Rne protein +ec:3.1.26.13 retroviral ribonuclease H; RT/RNase H; retroviral reverse transcriptase RNaseH; HIV RNase H +ec:3.1.27.1 Transferred to 4.6.1.19 +ec:3.1.27.2 Transferred to 4.6.1.22 +ec:3.1.27.3 Transferred to 4.6.1.24 +ec:3.1.27.4 Transferred to 4.6.1.20 +ec:3.1.27.5 Transferred to 4.6.1.18 +ec:3.1.27.6 Transferred to 4.6.1.21 +ec:3.1.27.7 ribonuclease F; ribonuclease F (E. coli) +ec:3.1.27.8 ribonuclease V; endoribonuclease V +ec:3.1.27.9 Transferred to 4.6.1.16 +ec:3.1.27.10 Transferred to 4.6.1.23 +ec:3.1.30.1 Aspergillus nuclease S1; endonuclease S1 (Aspergillus); single-stranded-nucleate endonuclease; deoxyribonuclease S1; deoxyribonuclease S1; nuclease S1; Neurospora crassa single-strand specific endonuclease; S1 nuclease; single-strand endodeoxyribonuclease; single-stranded DNA specific endonuclease; single-strand-specific endodeoxyribonuclease; single strand-specific DNase; Aspergillus oryzae S1 nuclease +ec:3.1.30.2 Serratia marcescens nuclease; endonuclease (Serratia marcescens); barley nuclease; plant nuclease I; nucleate endonuclease +ec:3.1.31.1 micrococcal nuclease; spleen endonuclease; thermonuclease; nuclease T; micrococcal endonuclease; nuclease T'; staphylococcal nuclease; spleen phosphodiesterase; Staphylococcus aureus nuclease; Staphylococcus aureus nuclease B; ribonucleate (deoxynucleate) 3'-nucleotidohydrolase +ec:3.2.1.1 alpha-amylase; glycogenase; alpha amylase; endoamylase; Taka-amylase A; 1,4-alpha-D-glucan glucanohydrolase +ec:3.2.1.2 beta-amylase; saccharogen amylase; glycogenase; beta amylase; 1,4-alpha-D-glucan maltohydrolase +ec:3.2.1.3 glucan 1,4-alpha-glucosidase; glucoamylase; amyloglucosidase; gamma-amylase; lysosomal alpha-glucosidase; acid maltase; exo-1,4-alpha-glucosidase; glucose amylase; gamma-1,4-glucan glucohydrolase; acid maltase; 1,4-alpha-D-glucan glucohydrolase +ec:3.2.1.4 cellulase; endo-1,4-beta-D-glucanase; beta-1,4-glucanase; beta-1,4-endoglucan hydrolase; celluase A; cellulosin AP; endoglucanase D; alkali cellulase; cellulase A 3; celludextrinase; 9.5 cellulase; avicelase; pancellase SS; 1,4-(1,3;1,4)-beta-D-glucan 4-glucanohydrolase +ec:3.2.1.5 Deleted entry +ec:3.2.1.6 endo-1,3(4)-beta-glucanase; endo-1,3-beta-D-glucanase; laminarinase; laminaranase; beta-1,3-glucanase; beta-1,3-1,4-glucanase; endo-1,3-beta-glucanase; endo-beta-1,3(4)-glucanase; endo-beta-1,3-1,4-glucanase; endo-beta-(1->3)-D-glucanase; endo-1,3-1,4-beta-D-glucanase; endo-beta-(1-3)-D-glucanase; endo-beta-1,3-glucanase IV; endo-1,3-beta-D-glucanase; 1,3-(1,3;1,4)-beta-D-glucan 3(4)-glucanohydrolase +ec:3.2.1.7 inulinase; inulase; indoinulinase; endo-inulinase; exoinulinase; 2,1-beta-D-fructan fructanohydrolase +ec:3.2.1.8 endo-1,4-beta-xylanase; endo-(1->4)-beta-xylan 4-xylanohydrolase; endo-1,4-xylanase; xylanase; beta-1,4-xylanase; endo-1,4-xylanase; endo-beta-1,4-xylanase; endo-1,4-beta-D-xylanase; 1,4-beta-xylan xylanohydrolase; beta-xylanase; beta-1,4-xylan xylanohydrolase; endo-1,4-beta-xylanase; beta-D-xylanase +ec:3.2.1.9 Deleted entry +ec:3.2.1.10 oligo-1,6-glucosidase; limit dextrinase (erroneous); isomaltase; sucrase-isomaltase; exo-oligo-1,6-glucosidase; dextrin 6alpha-glucanohydrolase; alpha-limit dextrinase; dextrin 6-glucanohydrolase; oligosaccharide alpha-1,6-glucohydrolase; alpha-methylglucosidase +ec:3.2.1.11 dextranase; dextran hydrolase; endodextranase; dextranase DL 2; DL 2; endo-dextranase; alpha-D-1,6-glucan-6-glucanohydrolase; 1,6-alpha-D-glucan 6-glucanohydrolase +ec:3.2.1.12 Deleted entry +ec:3.2.1.13 Deleted entry +ec:3.2.1.14 chitinase; ChiC; chitodextrinase (ambiguous); 1,4-beta-poly-N-acetylglucosaminidase; poly-beta-glucosaminidase; beta-1,4-poly-N-acetyl glucosamidinase; poly[1,4-(N-acetyl-beta-D-glucosaminide)] glycanohydrolase +ec:3.2.1.15 endo-polygalacturonase; pectin depolymerase (ambiguous); pectinase (ambiguous); endopolygalacturonase; pectolase (ambiguous); pectin hydrolase (ambiguous); pectin polygalacturonase (ambiguous); polygalacturonase (ambiguous); poly-alpha-1,4-galacturonide glycanohydrolase (ambiguous); endogalacturonase; endo-D-galacturonase; poly(1,4-alpha-D-galacturonide) glycanohydrolase (ambiguous) +ec:3.2.1.16 Deleted entry +ec:3.2.1.17 lysozyme; muramidase; globulin G; mucopeptide glucohydrolase; globulin G1; N,O-diacetylmuramidase; lysozyme g; L-7001; 1,4-N-acetylmuramidase; mucopeptide N-acetylmuramoylhydrolase; PR1-lysozyme +ec:3.2.1.18 exo-alpha-sialidase; neuraminidase; sialidase; alpha-neuraminidase; acetylneuraminidase +ec:3.2.1.19 Deleted entry +ec:3.2.1.20 alpha-glucosidase; maltase; glucoinvertase; glucosidosucrase; maltase-glucoamylase; alpha-glucopyranosidase; glucosidoinvertase; alpha-D-glucosidase; alpha-glucoside hydrolase; alpha-1,4-glucosidase +ec:3.2.1.21 beta-glucosidase; gentiobiase; cellobiase; emulsin; elaterase; aryl-beta-glucosidase; beta-D-glucosidase; beta-glucoside glucohydrolase; arbutinase; amygdalinase; p-nitrophenyl beta-glucosidase; primeverosidase; amygdalase; linamarase; salicilinase; beta-1,6-glucosidase +ec:3.2.1.22 alpha-galactosidase; melibiase; alpha-D-galactosidase; alpha-galactosidase A; alpha-galactoside galactohydrolase +ec:3.2.1.23 beta-galactosidase; lactase (ambiguous); beta-lactosidase; maxilact; hydrolact; beta-D-lactosidase; S 2107; lactozym; trilactase; beta-D-galactanase; oryzatym; sumiklat +ec:3.2.1.24 alpha-mannosidase; alpha-D-mannosidase; p-nitrophenyl-alpha-mannosidase; alpha-D-mannopyranosidase; 1,2-alpha-mannosidase; 1,2-alpha-D-mannosidase; exo-alpha-mannosidase +ec:3.2.1.25 beta-mannosidase; mannanase; mannase; beta-D-mannosidase; beta-mannoside mannohydrolase; exo-beta-D-mannanase +ec:3.2.1.26 beta-fructofuranosidase; invertase; saccharase; glucosucrase; beta-h-fructosidase; beta-fructosidase; invertin; sucrase; maxinvert L 1000; fructosylinvertase; alkaline invertase; acid invertase +ec:3.2.1.27 Deleted entry +ec:3.2.1.28 alpha,alpha-trehalase; trehalase +ec:3.2.1.29 Deleted entry +ec:3.2.1.30 Deleted entry +ec:3.2.1.31 beta-glucuronidase; beta-glucuronide glucuronohydrolase glucuronidase; exo-beta-D-glucuronidase; ketodase +ec:3.2.1.32 endo-1,3-beta-xylanase; xylanase (ambiguous); endo-1,3-beta-xylosidase (misleading); 1,3-beta-xylanase; 1,3-xylanase; beta-1,3-xylanase; endo-beta-1,3-xylanase; 1,3-beta-D-xylan xylanohydrolase; xylan endo-1,3-beta-xylosidase +ec:3.2.1.33 amylo-alpha-1,6-glucosidase; amylo-1,6-glucosidase; dextrin 6-alpha-D-glucosidase; amylopectin 1,6-glucosidase; dextrin-1,6-glucosidase; glycogen phosphorylase-limit dextrin alpha-1,6-glucohydrolase +ec:3.2.1.34 Deleted entry +ec:3.2.1.35 hyaluronoglucosaminidase; hyaluronidase; hyaluronoglucosidase; chondroitinase; chondroitinase I +ec:3.2.1.36 hyaluronoglucuronidase; hyaluronidase; glucuronoglucosaminoglycan hyaluronate lyase; orgelase +ec:3.2.1.37 xylan 1,4-beta-xylosidase; xylobiase; beta-xylosidase; exo-1,4-beta-xylosidase; beta-D-xylopyranosidase; beta-xylosidase; beta-xylosidase; exo-1,4-xylosidase; exo-1,4-beta-D-xylosidase; 1,4-beta-D-xylan xylohydrolase +ec:3.2.1.38 beta-D-fucosidase; beta-fucosidase +ec:3.2.1.39 glucan endo-1,3-beta-D-glucosidase; endo-1,3-beta-glucanase; laminarinase; laminaranase; oligo-1,3-glucosidase; endo-1,3-beta-glucanase; callase; beta-1,3-glucanase; kitalase; 1,3-beta-D-glucan 3-glucanohydrolase; endo-(1,3)-beta-D-glucanase; (1->3)-beta-glucan 3-glucanohydrolase; endo-1,3-beta-D-glucanase; endo-1,3-beta-glucosidase; 1,3-beta-D-glucan glucanohydrolase +ec:3.2.1.40 alpha-L-rhamnosidase; alpha-L-rhamnosidase T; alpha-L-rhamnosidase N +ec:3.2.1.41 pullulanase; limit dextrinase (erroneous); amylopectin 6-glucanohydrolase; bacterial debranching enzyme; debranching enzyme; alpha-dextrin endo-1,6-alpha-glucosidase; R-enzyme; pullulan alpha-1,6-glucanohydrolase +ec:3.2.1.42 GDP-glucosidase; guanosine diphosphoglucosidase; guanosine diphosphate D-glucose glucohydrolase +ec:3.2.1.43 beta-L-rhamnosidase +ec:3.2.1.44 Transferred to 3.2.1.211 and 3.2.1.212 +ec:3.2.1.45 glucosylceramidase; psychosine hydrolase; glucosphingosine glucosylhydrolase; GlcCer-beta-glucosidase; beta-D-glucocerebrosidase; glucosylcerebrosidase; beta-glucosylceramidase; ceramide glucosidase; glucocerebrosidase; glucosylsphingosine beta-glucosidase; glucosylsphingosine beta-D-glucosidase +ec:3.2.1.46 galactosylceramidase; cerebroside galactosidase; galactocerebroside.beta-galactosidase; galactosylcerebrosidase; galactocerebrosidase; ceramide galactosidase; galactocerebroside galactosidase; galactosylceramide.beta-galactosidase; cerebroside beta-galactosidase; galactosylceramidase I; beta-galactosylceramidase; galactocerebroside-beta-D-galactosidase; lactosylceramidase I; beta-galactocerebrosidase; lactosylceramidase +ec:3.2.1.47 Deleted entry +ec:3.2.1.48 sucrose alpha-glucosidase; sucrose alpha-glucohydrolase; sucrase; sucrase-isomaltase; sucrose.alpha.-glucohydrolase; intestinal sucrase; sucrase(invertase) +ec:3.2.1.49 alpha-N-acetylgalactosaminidase; alpha-acetylgalactosaminidase; N-acetyl-alpha-D-galactosaminidase; N-acetyl-alpha-galactosaminidase; alpha-NAGAL; alpha-NAGA; alpha-GalNAcase +ec:3.2.1.50 alpha-N-acetylglucosaminidase; alpha-acetylglucosaminidase; N-acetyl-alpha-D-glucosaminidase; N-acetyl-alpha-glucosaminidase; alpha-D-2-acetamido-2-deoxyglucosidase +ec:3.2.1.51 alpha-L-fucosidase; alpha-fucosidase +ec:3.2.1.52 beta-N-acetylhexosaminidase; hexosaminidase; beta-acetylaminodeoxyhexosidase; N-acetyl-beta-D-hexosaminidase; N-acetyl-beta-hexosaminidase; beta-hexosaminidase; beta-acetylhexosaminidinase; beta-D-N-acetylhexosaminidase; beta-N-acetyl-D-hexosaminidase; beta-N-acetylglucosaminidase; hexosaminidase A; N-acetylhexosaminidase; beta-D-hexosaminidase +ec:3.2.1.53 beta-N-acetylgalactosaminidase; N-acetyl-beta-galactosaminidase; N-acetyl-beta-D-galactosaminidase; beta-acetylgalactosaminidase; beta-D-N-acetylgalactosaminidase; N-acetylgalactosaminidase +ec:3.2.1.54 cyclomaltodextrinase; cycloheptaglucanase; cyclohexaglucanase; cyclodextrinase; cyclomaltodextrin dextrin-hydrolase (decyclizing) +ec:3.2.1.55 non-reducing end alpha-L-arabinofuranosidase; arabinosidase (ambiguous); alpha-arabinosidase; alpha-L-arabinosidase; alpha-arabinofuranosidase; polysaccharide alpha-L-arabinofuranosidase; alpha-L-arabinofuranoside hydrolase; L-arabinosidase (ambiguous); alpha-L-arabinanase +ec:3.2.1.56 glucuronosyl-disulfoglucosamine glucuronidase; glycuronidase; 3-D-glucuronsyl-2-N,6-disulfo-beta-D-glucosamine glucuronohydrolase +ec:3.2.1.57 isopullulanase +ec:3.2.1.58 glucan 1,3-beta-glucosidase; exo-1,3-beta-glucosidase; beta-1,3-glucan exo-hydrolase; exo (1->3)-glucanohydrolase; 1,3-beta-glucan glucohydrolase +ec:3.2.1.59 glucan endo-1,3-alpha-glucosidase; endo-1,3-alpha-glucanase; mutanase; endo-(1->3)-alpha-glucanase; cariogenase; cariogenanase; endo-1,3-alpha-D-glucanase; 1,3(1,3;1,4)-alpha-D-glucan 3-glucanohydrolase +ec:3.2.1.60 glucan 1,4-alpha-maltotetraohydrolase; exo-maltotetraohydrolase; 1,4-alpha-D-glucan maltotetraohydrolase +ec:3.2.1.61 mycodextranase; 1,3-1,4-alpha-D-glucan 4-glucanohydrolase +ec:3.2.1.62 glycosylceramidase; phlorizin hydrolase; phloretin-glucosidase; glycosyl ceramide glycosylhydrolase; cerebrosidase; phloridzin beta-glucosidase; lactase-phlorizin hydrolase; phloridzin glucosidase; LPH (gene name); LCT (gene name); glycosyl-N-acylsphingosine glycohydrolase +ec:3.2.1.63 1,2-alpha-L-fucosidase; almond emulsin fucosidase; alpha-(1->2)-L-fucosidase +ec:3.2.1.64 2,6-beta-fructan 6-levanbiohydrolase; beta-2,6-fructan-6-levanbiohydrolase; 2,6-beta-D-fructan 6-levanbiohydrolase; levanbiose-producing levanase; 2,6-beta-D-fructan 6-beta-D-fructofuranosylfructohydrolase +ec:3.2.1.65 levanase; levan hydrolase; 2,6-beta-D-fructan fructanohydrolase +ec:3.2.1.66 Deleted entry +ec:3.2.1.67 galacturonan 1,4-alpha-galacturonidase; exo-polygalacturonase; poly(galacturonate) hydrolase (ambiguous); exo-D-galacturonase; exo-D-galacturonanase; exopoly-D-galacturonase; poly(1,4-alpha-D-galacturonide) galacturonohydrolase (ambiguous); pgaA (gene name); pgaB (gene name); pgaC (gene name); pgaD (gene name); pgaE (gene name); pgaI (gene name); pgaII (gene name); poly[(1->4)-alpha-D-galacturonide] galacturonohydrolase; galacturan 1,4-alpha-galacturonidase (incorrect) +ec:3.2.1.68 isoamylase; debranching enzyme; glycogen alpha-1,6-glucanohydrolase +ec:3.2.1.69 Deleted entry +ec:3.2.1.70 glucan 1,6-alpha-glucosidase; exo-1,6-beta-glucosidase; glucodextrinase; glucan alpha-1,6-D-glucohydrolase +ec:3.2.1.71 glucan endo-1,2-beta-glucosidase; endo-1,2-beta-glucanase; beta-D-1,2-glucanase; endo-(1->2)-beta-D-glucanase; 1,2-beta-D-glucan glucanohydrolase +ec:3.2.1.72 xylan 1,3-beta-xylosidase; 1,3-beta-D-xylosidase; exo-1,3-beta-xylosidase; beta-1,3'-xylanase; exo-beta-1,3'-xylanase; 1,3-beta-D-xylan xylohydrolase +ec:3.2.1.73 licheninase; lichenase; beta-(1->4)-D-glucan 4-glucanohydrolase; 1,3;1,4-beta-glucan endohydrolase; 1,3;1,4-beta-glucan 4-glucanohydrolase; 1,3-1,4-beta-D-glucan 4-glucanohydrolase +ec:3.2.1.74 glucan 1,4-beta-glucosidase; exo-1,4-beta-glucosidase; exocellulase; exo-beta-1,4-glucosidase; exo-beta-1,4-glucanase; beta-1,4-beta-glucanase; beta-glucosidase; exo-1,4-beta-glucanase; 1,4-beta-D-glucan glucohydrolase +ec:3.2.1.75 glucan endo-1,6-beta-glucosidase; endo-1,6-beta-glucanase; beta-1->6)-beta-D-glucanase; beta-1,6-glucanase-pustulanase; beta-1,6-glucan hydrolase; beta-1,6-glucan 6-glucanohydrolase; 1,6-beta-D-glucan glucanohydrolase +ec:3.2.1.76 L-iduronidase; alpha-L-iduronidase +ec:3.2.1.77 mannan 1,2-(1,3)-alpha-mannosidase; exo-1,2-1,3-alpha-mannosidase; 1,2-1,3-alpha-D-mannan mannohydrolase +ec:3.2.1.78 mannan endo-1,4-beta-mannosidase; endo-1,4-beta-mannanase; endo-beta-1,4-mannase; beta-mannanase B; beta-1,4-mannan 4-mannanohydrolase; endo-beta-mannanase; beta-D-mannanase; 1,4-beta-D-mannan mannanohydrolase +ec:3.2.1.79 Deleted entry +ec:3.2.1.80 fructan beta-fructosidase; exo-beta-D-fructosidase; exo-beta-fructosidase; polysaccharide beta-fructofuranosidase; fructan exohydrolase +ec:3.2.1.81 beta-agarase; agarase (ambiguous); AgaA; AgaB; endo-beta-agarase; agarose 3-glycanohydrolase (incorrect) +ec:3.2.1.82 exo-poly-alpha-digalacturonosidase; pehX (gene name); poly(1,4-alpha-D-galactosiduronate) digalacturonohydrolase; exopolygalacturonosidase (misleading); poly[(1->4)-alpha-D-galactosiduronate] digalacturonohydrolase; exo-poly-alpha-galacturonosidase +ec:3.2.1.83 kappa-carrageenase; kappa-carrageenan 4-beta-D-glycanohydrolase +ec:3.2.1.84 glucan 1,3-alpha-glucosidase; exo-1,3-alpha-glucanase; glucosidase II; 1,3-alpha-D-glucan 3-glucohydrolase +ec:3.2.1.85 6-phospho-beta-galactosidase; phospho-beta-galactosidase; beta-D-phosphogalactoside galactohydrolase; phospho-beta-D-galactosidase; 6-phospho-beta-D-galactosidase +ec:3.2.1.86 6-phospho-beta-glucosidase; phospho-beta-glucosidase A; phospho-beta-glucosidase; phosphocellobiase; 6-phospho-beta-D-glucosyl-(1,4)-D-glucose glucohydrolase +ec:3.2.1.87 capsular-polysaccharide endo-1,3-alpha-galactosidase; polysaccharide depolymerase; capsular polysaccharide galactohydrolase +ec:3.2.1.88 non-reducing end beta-L-arabinopyranosidase; vicianosidase; beta-L-arabinosidase (ambiguous); beta-L-arabinoside arabinohydrolase (ambiguous) +ec:3.2.1.89 arabinogalactan endo-beta-1,4-galactanase; endo-1,4-beta-galactanase; galactanase (ambiguous); arabinogalactanase; ganB (gene name) +ec:3.2.1.90 Deleted entry +ec:3.2.1.91 cellulose 1,4-beta-cellobiosidase (non-reducing end); exo-cellobiohydrolase; beta-1,4-glucan cellobiohydrolase; beta-1,4-glucan cellobiosylhydrolase; 1,4-beta-glucan cellobiosidase; exoglucanase; avicelase; CBH 1; C1 cellulase; cellobiohydrolase I; cellobiohydrolase; exo-beta-1,4-glucan cellobiohydrolase; 1,4-beta-D-glucan cellobiohydrolase; cellobiosidase +ec:3.2.1.92 peptidoglycan beta-N-acetylmuramidase; exo-beta-N-acetylmuramidase; exo-beta-acetylmuramidase; beta-2-acetamido-3-O-(D-1-carboxyethyl)-2-deoxy-D-glucoside acetamidodeoxyglucohydrolase +ec:3.2.1.93 alpha,alpha-phosphotrehalase; phosphotrehalase +ec:3.2.1.94 glucan 1,6-alpha-isomaltosidase; exo-isomaltohydrolase; isomalto-dextranase; isomaltodextranase; G2-dextranase; 1,6-alpha-D-glucan isomaltohydrolase +ec:3.2.1.95 dextran 1,6-alpha-isomaltotriosidase; exo-isomaltotriohydrolase; 1,6-alpha-D-glucan isomaltotriohydrolase +ec:3.2.1.96 mannosyl-glycoprotein endo-beta-N-acetylglucosaminidase; N,N'-diacetylchitobiosyl beta-N-acetylglucosaminidase; endo-beta-N-acetylglucosaminidase; mannosyl-glycoprotein endo-beta-N-acetylglucosamidase; di-N-acetylchitobiosyl beta-N-acetylglucosaminidase; endo-beta-acetylglucosaminidase; endo-beta-(1->4)-N-acetylglucosaminidase; mannosyl-glycoprotein 1,4-N-acetamidodeoxy-beta-D-glycohydrolase; endoglycosidase S; endo-N-acetyl-beta-D-glucosaminidase; endo-N-acetyl-beta-glucosaminidase; endo-beta-N-acetylglucosaminidase D; endo-beta-N-acetylglucosaminidase F; endo-beta-N-acetylglucosaminidase H; endo-beta-N-acetylglucosaminidase L; glycopeptide-D-mannosyl-4-N-(N-acetyl-D-glucosaminyl)2-asparagine 1,4-N-acetyl-beta-glucosaminohydrolase; endoglycosidase H +ec:3.2.1.97 endo-alpha-N-acetylgalactosaminidase; endo-alpha-acetylgalactosaminidase; endo-alpha-N-acetyl-D-galactosaminidase; mucinaminylserine mucinaminidase; D-galactosyl-3-(N-acetyl-alpha-D-galactosaminyl)-L-serine mucinaminohydrolase; endo-alpha-GalNAc-ase; glycopeptide alpha-N-acetylgalactosaminidase; D-galactosyl-N-acetyl-alpha-D-galactosamine D-galactosyl-N-acetyl-galactosaminohydrolase +ec:3.2.1.98 glucan 1,4-alpha-maltohexaosidase; exo-maltohexaohydrolase; 1,4-alpha-D-glucan maltohexaohydrolase +ec:3.2.1.99 arabinan endo-1,5-alpha-L-arabinanase; endo-1,5-alpha-L-arabinanase; endo-alpha-1,5-arabanase; endo-arabanase; 1,5-alpha-L-arabinan 1,5-alpha-L-arabinanohydrolase; arabinan endo-1,5-alpha-L-arabinosidase (misleading) +ec:3.2.1.100 mannan 1,4-mannobiosidase; 1,4-beta-D-mannan mannobiohydrolase; exo-beta-mannanase; exo-1,4-beta-mannobiohydrolase +ec:3.2.1.101 mannan endo-1,6-alpha-mannosidase; endo-alpha-1->6-D-mannanase; endo-1,6-beta-mannanase; mannan endo-1,6-beta-mannosidase; 1,6-alpha-D-mannan mannanohydrolase +ec:3.2.1.102 blood-group-substance endo-1,4-beta-galactosidase; endo-beta-galactosidase (ambiguous); blood-group-substance 1,4-beta-D-galactanohydrolase +ec:3.2.1.103 keratan-sulfate endo-1,4-beta-galactosidase; endo-beta-galactosidase (ambiguous); keratan sulfate endogalactosidase; keratanase; keratan-sulfate 1,4-beta-D-galactanohydrolase +ec:3.2.1.104 steryl-beta-glucosidase +ec:3.2.1.105 3alpha(S)-strictosidine beta-glucosidase +ec:3.2.1.106 mannosyl-oligosaccharide glucosidase; Glc3Man9NAc2 oligosaccharide glucosidase; trimming glucosidase I; CWH41 (gene name); MOGS (gene name); mannosyl-oligosaccharide glucohydrolase +ec:3.2.1.107 protein-glucosylgalactosylhydroxylysine glucosidase; PGGHG (gene name); 2-O-alpha-D-glucopyranosyl-5-O-alpha-D-galactopyranosylhydroxy-L-lysine glucohydrolase; protein-alpha-D-glucosyl-1,2-beta-D-galactosyl-L-hydroxylysine glucohydrolase; protein-alpha-D-glucosyl-(1->2)-beta-D-galactosyl-L-hydroxylysine glucohydrolase +ec:3.2.1.108 lactase; lactase-phlorizin hydrolase; LPH (gene name); LCT (gene name) +ec:3.2.1.109 endogalactosaminidase +ec:3.2.1.110 Deleted entry +ec:3.2.1.111 1,3-alpha-L-fucosidase; almond emulsin fucosidase I +ec:3.2.1.112 2-deoxyglucosidase; 2-deoxy-alpha-glucosidase; 2-deoxy-alpha-D-glucosidase +ec:3.2.1.113 mannosyl-oligosaccharide 1,2-alpha-mannosidase; mannosidase 1A; mannosidase 1B; 1,2-alpha-mannosidase; exo-alpha-1,2-mannanase; mannose-9 processing alpha-mannosidase; glycoprotein processing mannosidase I; mannosidase I; Man9-mannosidase; ManI; 1,2-alpha-mannosyl-oligosaccharide alpha-D-mannohydrolase; MAN1A1 (gene name); MAN1A2 (gene name); MAN1C1 (gene name); 2-alpha-mannosyl-oligosaccharide alpha-D-mannohydrolase +ec:3.2.1.114 mannosyl-oligosaccharide 1,3-1,6-alpha-mannosidase; MAN2A1 (gene name); MAN2A2 (gene name); mannosidase II; exo-1,3-1,6-alpha-mannosidase; alpha-D-mannosidase II; alpha-mannosidase II; alpha1-3,6-mannosidase; GlcNAc transferase I-dependent alpha1,3[alpha1,6]mannosidase; Golgi alpha-mannosidase II; ManII; 1,3(1,6)-alpha-D-mannosidase; 1,3-(1,6-)mannosyl-oligosaccharide alpha-D-mannohydrolase; (1->3)-(1->6)-mannosyl-oligosaccharide alpha-D-mannohydrolase +ec:3.2.1.115 branched-dextran exo-1,2-alpha-glucosidase; dextran 1,2-alpha-glucosidase; dextran alpha-1,2 debranching enzymel 1,2-alpha-D-glucosyl-branched-dextran 2-glucohydrolase +ec:3.2.1.116 glucan 1,4-alpha-maltotriohydrolase; exo-maltotriohydrolase; maltotriohydrolase; 1,4-alpha-D-glucan maltotriohydrolase +ec:3.2.1.117 amygdalin beta-glucosidase; amygdalase; amygdalinase; amygdalin hydrolase; amygdalin glucosidase +ec:3.2.1.118 prunasin beta-glucosidase; prunasin hydrolase +ec:3.2.1.119 vicianin beta-glucosidase; vicianin hydrolase +ec:3.2.1.120 oligoxyloglucan beta-glycosidase; isoprimeverose-producing oligoxyloglucan hydrolase; oligoxyloglucan hydrolase +ec:3.2.1.121 polymannuronate hydrolase; polymannuronic acid polymerase +ec:3.2.1.122 maltose-6'-phosphate glucosidase; phospho-alpha-glucosidase; maltose-6'-phosphate 6-phosphoglucohydrolase +ec:3.2.1.123 endoglycosylceramidase; endoglycoceramidase; EGCase; glycosyl-N-acetyl-sphingosine 1,1-beta-D-glucanohydrolase; oligoglycosylglucosylceramide glycohydrolase; oligoglycosylglucosyl(1<->1)ceramide glycohydrolase +ec:3.2.1.124 3-deoxy-2-octulosonidase; 2-keto-3-deoxyoctonate hydrolase; octulosylono hydrolase; octulofuranosylono hydrolase; octulopyranosylonohydrolase +ec:3.2.1.125 raucaffricine beta-glucosidase; raucaffricine beta-D-glucosidase; raucaffricine glucosidase +ec:3.2.1.126 coniferin beta-glucosidase; coniferin-hydrolyzing beta-glucosidase +ec:3.2.1.127 1,6-alpha-L-fucosidase; alpha-L-fucosidase; 1,6-L-fucosyl-N-acetyl-D-glucosaminylglycopeptide fucohydrolase +ec:3.2.1.128 glycyrrhizin hydrolase; glycyrrhizinate beta-glucuronidase; glycyrrhizin beta-hydrolase; glycyrrhizinic acid hydrolase +ec:3.2.1.129 endo-alpha-sialidase; endo-N-acylneuraminidase; endoneuraminidase; endo-N-acetylneuraminidase; poly(alpha-2,8-sialosyl) endo-N-acetylneuraminidase; poly(alpha-2,8-sialoside) alpha-2,8-sialosylhydrolase; endosialidase; endo-N +ec:3.2.1.130 glycoprotein endo-alpha-1,2-mannosidase; glucosylmannosidase; endo-alpha-D-mannosidase; endo-alpha-mannosidase; endomannosidase; glucosyl mannosidase; MANEA (gene name); glycoprotein glucosylmannohydrolase +ec:3.2.1.131 xylan alpha-1,2-glucuronosidase; 1,2-alpha-glucuronidase; alpha-(1->2)-glucuronidase; xylan alpha-D-1,2-(4-O-methyl)glucuronohydrolase +ec:3.2.1.132 chitosanase +ec:3.2.1.133 glucan 1,4-alpha-maltohydrolase; maltogenic alpha-amylase; 1,4-alpha-D-glucan alpha-maltohydrolase +ec:3.2.1.134 Transferred to 4.2.1.179 +ec:3.2.1.135 neopullulanase; pullulanase II +ec:3.2.1.136 glucuronoarabinoxylan endo-1,4-beta-xylanase; feraxan endoxylanase; feraxanase; endoarabinoxylanase; glucuronoxylan xylohydrolase; glucuronoxylanase; glucuronoxylan xylanohydrolase; glucuronoarabinoxylan 1,4-beta-D-xylanohydrolase +ec:3.2.1.137 mannan exo-1,2-1,6-alpha-mannosidase; exo-1,2-1,6-alpha-mannosidase; 1,2-1,6-alpha-D-mannan D-mannohydrolase +ec:3.2.1.138 Transferred to 4.2.2.15 +ec:3.2.1.139 alpha-glucuronidase; alpha-glucosiduronase +ec:3.2.1.140 lacto-N-biosidase +ec:3.2.1.141 4-alpha-D-{(1->4)-alpha-D-glucano}trehalose trehalohydrolase; malto-oligosyltrehalose trehalohydrolase +ec:3.2.1.142 limit dextrinase; R-enzyme; amylopectin-1,6-glucosidase; dextrin alpha-1,6-glucanohydrolase +ec:3.2.1.143 poly(ADP-ribose) glycohydrolase +ec:3.2.1.144 3-deoxyoctulosonase; alpha-Kdo-ase +ec:3.2.1.145 galactan 1,3-beta-galactosidase; galactan (1->3)-beta-D-galactosidase +ec:3.2.1.146 beta-galactofuranosidase; exo-beta-galactofuranosidase; exo-beta-D-galactofuranosidase; beta-D-galactofuranosidase +ec:3.2.1.147 thioglucosidase; myrosinase; sinigrinase; sinigrase +ec:3.2.1.148 Deleted entry +ec:3.2.1.149 beta-primeverosidase +ec:3.2.1.150 oligoxyloglucan reducing-end-specific cellobiohydrolase +ec:3.2.1.151 xyloglucan-specific endo-beta-1,4-glucanase; XEG; xyloglucan endo-beta-1,4-glucanase; xyloglucanase; xyloglucanendohydrolase; XH; 1,4-beta-D-glucan glucanohydrolase +ec:3.2.1.152 mannosylglycoprotein endo-beta-mannosidase; endo-beta-mannosidase +ec:3.2.1.153 fructan beta-(2,1)-fructosidase; beta-(2-1)-D-fructan fructohydrolase; beta-(2-1)fructan exohydrolase; inulinase; 1-FEH II; 1-fructan exohydrolase; 1-FEH w1; 1-FEH w2; beta-(2-1)-linkage-specific fructan-beta-fructosidase; beta-(2,1)-D-fructan fructohydrolase +ec:3.2.1.154 fructan beta-(2,6)-fructosidase; beta-(2-6)-fructan exohydrolase; levanase; 6-FEH; beta-(2,6)-D-fructan fructohydrolase +ec:3.2.1.155 xyloglucan-specific endo-processive beta-1,4-glucanase; Cel74A; [(1->6)-alpha-D-xylo]-(1->4)-beta-D-glucan exo-glucohydrolase (ambiguous); xyloglucan-specific exo-beta-1,4-glucanase (ambiguous) +ec:3.2.1.156 oligosaccharide reducing-end xylanase; Rex; reducing end xylose-releasing exo-oligoxylanase +ec:3.2.1.157 iota-carrageenase +ec:3.2.1.158 alpha-agarase; agarase (ambiguous); agaraseA33 +ec:3.2.1.159 alpha-neoagaro-oligosaccharide hydrolase; alpha-neoagarooligosaccharide hydrolase; alpha-NAOS hydrolase +ec:3.2.1.160 Deleted entry +ec:3.2.1.161 beta-apiosyl-beta-glucosidase; isoflavonoid-7-O-beta[D-apiosyl-(1->6)-beta-D-glucoside] disaccharidase; isoflavonoid 7-O-beta-apiosyl-glucoside beta-glucosidase; furcatin hydrolase +ec:3.2.1.162 lambda-carrageenase; endo-beta-1,4-carrageenose 2,6,2'-trisulfate-hydrolase +ec:3.2.1.163 1,6-alpha-D-mannosidase +ec:3.2.1.164 galactan endo-1,6-beta-galactosidase; endo-1,6-beta-galactanase +ec:3.2.1.165 exo-1,4-beta-D-glucosaminidase; CsxA; GlcNase; exochitosanase; GlmA; exo-beta-D-glucosaminidase; chitosan exo-1,4-beta-D-glucosaminidase +ec:3.2.1.166 heparanase; Hpa1 heparanase; Hpa1; heparanase 1; heparanase-1; C1A heparanase; HPSE +ec:3.2.1.167 baicalin-beta-D-glucuronidase; baicalinase +ec:3.2.1.168 hesperidin 6-O-alpha-L-rhamnosyl-beta-D-glucosidase +ec:3.2.1.169 protein O-GlcNAcase; OGA; glycoside hydrolase O-GlcNAcase; O-GlcNAcase; BtGH84; O-GlcNAc hydrolase +ec:3.2.1.170 mannosylglycerate hydrolase; MgH +ec:3.2.1.171 rhamnogalacturonan hydrolase; rhamnogalacturonase A; RGase A; RG-hydrolase +ec:3.2.1.172 unsaturated rhamnogalacturonyl hydrolase; YteR; YesR +ec:3.2.1.173 rhamnogalacturonan galacturonohydrolase; RG-galacturonohydrolase +ec:3.2.1.174 rhamnogalacturonan rhamnohydrolase; RG-rhamnohydrolase; RG alpha-L-rhamnopyranohydrolase +ec:3.2.1.175 beta-D-glucopyranosyl abscisate beta-glucosidase; AtBG1; ABA-beta-D-glucosidase; ABA-specific beta-glucosidase; ABA-GE hydrolase; beta-D-glucopyranosyl abscisate hydrolase +ec:3.2.1.176 cellulose 1,4-beta-cellobiosidase (reducing end); CelS; CelSS; endoglucanase SS; cellulase SS; cellobiohydrolase CelS; Cel48A +ec:3.2.1.177 alpha-D-xyloside xylohydrolase; alpha-xylosidase +ec:3.2.1.178 beta-porphyranase; porphyranase; PorA; PorB; endo-beta-porphyranase +ec:3.2.1.179 gellan tetrasaccharide unsaturated glucuronosyl hydrolase; UGL (ambiguous); unsaturated glucuronyl hydrolase (ambiguous); gellan tetrasaccharide unsaturated glucuronyl hydrolase +ec:3.2.1.180 unsaturated chondroitin disaccharide hydrolase; UGL (ambiguous); unsaturated glucuronyl hydrolase (ambiguous) +ec:3.2.1.181 galactan endo-beta-1,3-galactanase; endo-beta-1,3-galactanase +ec:3.2.1.182 4-hydroxy-7-methoxy-3-oxo-3,4-dihydro-2H-1,4-benzoxazin-2-yl glucoside beta-D-glucosidase; DIMBOAGlc hydrolase; DIMBOA glucosidase +ec:3.2.1.183 UDP-N-acetylglucosamine 2-epimerase (hydrolysing); UDP-N-acetylglucosamine 2-epimerase (ambiguous); GNE (gene name); siaA (gene name); neuC (gene name) +ec:3.2.1.184 UDP-N,N'-diacetylbacillosamine 2-epimerase (hydrolysing); UDP-Bac2Ac4Ac 2-epimerase; NeuC +ec:3.2.1.185 non-reducing end beta-L-arabinofuranosidase; HypBA1 +ec:3.2.1.186 protodioscin 26-O-beta-D-glucosidase; F26G; torvosidase; CSF26G1; furostanol glycoside 26-O-beta-D-glucosidase; furostanol 26-O-beta-D-glucoside glucohydrolase +ec:3.2.1.187 (Ara-f)3-Hyp beta-L-arabinobiosidase; hypBA2 (gene name); beta-L-arabinobiosidase +ec:3.2.1.188 avenacosidase; As-P60 +ec:3.2.1.189 dioscin glycosidase (diosgenin-forming); dioscin glycosidase (aglycone-forming) +ec:3.2.1.190 dioscin glycosidase (3-O-beta-D-Glc-diosgenin-forming); dioscin-alpha-L-rhamnosidase +ec:3.2.1.191 ginsenosidase type III +ec:3.2.1.192 ginsenoside Rb1 beta-glucosidase +ec:3.2.1.193 ginsenosidase type I +ec:3.2.1.194 ginsenosidase type IV +ec:3.2.1.195 20-O-multi-glycoside ginsenosidase; ginsenosidase type II (erroneous) +ec:3.2.1.196 limit dextrin alpha-1,6-maltotetraose-hydrolase; glgX (gene name); glycogen debranching enzyme (ambiguous) +ec:3.2.1.197 beta-1,2-mannosidase +ec:3.2.1.198 alpha-mannan endo-1,2-alpha-mannanase +ec:3.2.1.199 sulfoquinovosidase; yihQ (gene name); 6-sulfo-alpha-D-quinovosyl diacylglycerol 6-sulfo-D-quinovohydrolase +ec:3.2.1.200 exo-chitinase (non-reducing end); chiB (gene name) +ec:3.2.1.201 exo-chitinase (reducing end); chiA (gene name) +ec:3.2.1.202 endo-chitodextinase; endo I (gene name); chitodextrinase (ambiguous); endolytic chitodextrinase; periplasmic chitodextrinase +ec:3.2.1.203 carboxymethylcellulase; CMCase +ec:3.2.1.204 1,3-alpha-isomaltosidase +ec:3.2.1.205 isomaltose glucohydrolase +ec:3.2.1.206 oleuropein beta-glucosidase; OeGLU (gene name) +ec:3.2.1.207 mannosyl-oligosaccharide alpha-1,3-glucosidase; ER glucosidase II; alpha-glucosidase II; trimming glucosidase II; ROT2 (gene name); GTB1 (gene name); GANAB (gene name); PRKCSH (gene name) +ec:3.2.1.208 glucosylglycerate hydrolase; GG hydrolase; GgH +ec:3.2.1.209 endoplasmic reticulum Man9GlcNAc2 1,2-alpha-mannosidase; MAN1B1 (gene name); MNS1 (gene name); MNS3 (gene name) +ec:3.2.1.210 endoplasmic reticulum Man8GlcNAc2 1,2-alpha-mannosidase; MNL1 (gene name) +ec:3.2.1.211 endo-(1->3)-fucoidanase; alpha-L-fucosidase (incorrect); poly(1,3-alpha-L-fucoside-2/4-sulfate) glycanohydrolase +ec:3.2.1.212 endo-(1->4)-fucoidanase; alpha-L-fucosidase (incorrect); poly(1,4-alpha-L-fucoside-2/3-sulfate) glycanohydrolase +ec:3.2.1.213 galactan exo-1,6-beta-galactobiohydrolase (non-reducing end); exo-beta-1,6-galactobiohydrolase; 1,6Gal (gene name) +ec:3.2.1.214 exo beta-1,2-glucooligosaccharide sophorohydrolase (non-reducing end) +ec:3.2.1.215 arabinogalactan exo alpha-(1,3)-alpha-D-galactosyl-(1->3)-L-arabinofuranosidase (non-reducing end); 3-O-alpha-D-galactosyl-alpha-L-arabinofuranosidase +ec:3.2.1.216 kojibiose hydrolase; kojibiase +ec:3.2.1.217 exo-acting protein-alpha-N-acetylgalactosaminidase; Nag31 +ec:3.2.2.1 purine nucleosidase; nucleosidase (misleading); purine beta-ribosidase; purine nucleoside hydrolase; purine ribonucleosidase; ribonucleoside hydrolase (misleading); nucleoside hydrolase (misleading); N-ribosyl purine ribohydrolase; nucleosidase g; N-D-ribosylpurine ribohydrolase; inosine-adenosine-guanosine preferring nucleoside hydrolase; purine-specific nucleoside N-ribohydrolase; IAG-nucleoside hydrolase; IAG-NH +ec:3.2.2.2 inosine nucleosidase; inosinase; inosine-guanosine nucleosidase +ec:3.2.2.3 uridine nucleosidase; uridine hydrolase +ec:3.2.2.4 AMP nucleosidase; adenylate nucleosidase; adenosine monophosphate nucleosidase +ec:3.2.2.5 NAD+ glycohydrolase; NAD glycohydrolase; nicotinamide adenine dinucleotide glycohydrolase; beta-NAD+ glycohydrolase; DPNase (ambiguous); NAD hydrolase (ambiguous); diphosphopyridine nucleosidase (ambiguous); nicotinamide adenine dinucleotide nucleosidase (ambiguous); NAD nucleosidase (ambiguous); DPN hydrolase (ambiguous); NADase (ambiguous); nga (gene name); NAD+ nucleosidase +ec:3.2.2.6 ADP-ribosyl cyclase/cyclic ADP-ribose hydrolase; NAD+ nucleosidase; NADase (ambiguous); DPNase (ambiguous); DPN hydrolase (ambiguous); NAD hydrolase (ambiguous); nicotinamide adenine dinucleotide nucleosidase (ambiguous); NAD glycohydrolase (misleading); NAD nucleosidase (ambiguous); nicotinamide adenine dinucleotide glycohydrolase (misleading); CD38 (gene name); BST1 (gene name) +ec:3.2.2.7 adenosine nucleosidase; adenosinase; N-ribosyladenine ribohydrolase; adenosine hydrolase; ANase +ec:3.2.2.8 ribosylpyrimidine nucleosidase; N-ribosylpyrimidine nucleosidase; pyrimidine nucleosidase; N-ribosylpyrimidine ribohydrolase; pyrimidine nucleoside hydrolase; RihB; YeiK; nucleoside ribohydrolase +ec:3.2.2.9 adenosylhomocysteine nucleosidase; S-adenosylhomocysteine hydrolase (ambiguous); S-adenosylhomocysteine nucleosidase; 5'-methyladenosine nucleosidase; S-adenosylhomocysteine/5'-methylthioadenosine nucleosidase; AdoHcy/MTA nucleosidase; MTN2 (gene name); mtnN (gene name) +ec:3.2.2.10 pyrimidine-5'-nucleotide nucleosidase; pyrimidine nucleotide N-ribosidase; Pyr5N +ec:3.2.2.11 beta-aspartyl-N-acetylglucosaminidase; beta-aspartylacetylglucosaminidase +ec:3.2.2.12 inosinate nucleosidase; 5'-inosinate phosphoribohydrolase +ec:3.2.2.13 1-methyladenosine nucleosidase; 1-methyladenosine hydrolase +ec:3.2.2.14 NMN nucleosidase; NMNase; nicotinamide mononucleotide nucleosidase; nicotinamide mononucleotidase; NMN glycohydrolase; NMNGhase +ec:3.2.2.15 DNA-deoxyinosine glycosylase; DNA(hypoxanthine) glycohydrolase; deoxyribonucleic acid glycosylase; hypoxanthine-DNA glycosylase +ec:3.2.2.16 methylthioadenosine nucleosidase; 5'-methylthioadenosine nucleosidase; MTA nucleosidase; MeSAdo nucleosidase; methylthioadenosine methylthioribohydrolase; MTN1 (gene name) +ec:3.2.2.17 deoxyribodipyrimidine endonucleosidase; pyrimidine dimer DNA-glycosylase; endonuclease V; deoxyribonucleate pyrimidine dimer glycosidase; pyrimidine dimer DNA glycosylase; T4-induced UV endonuclease; PD-DNA glycosylase +ec:3.2.2.18 Deleted entry +ec:3.2.2.19 [protein ADP-ribosylarginine] hydrolase; ADP-ribose-L-arginine cleavage enzyme; ADP-ribosylarginine hydrolase; Nomega-(ADP-D-ribosyl)-L-arginine ADP-ribosylhydrolase; protein-omega-N-(ADP-D-ribosyl)-L-arginine ADP-ribosylhydrolase +ec:3.2.2.20 DNA-3-methyladenine glycosylase I; deoxyribonucleate 3-methyladenine glycosidase I; 3-methyladenine DNA glycosylase I; DNA-3-methyladenine glycosidase I +ec:3.2.2.21 DNA-3-methyladenine glycosylase II; deoxyribonucleate 3-methyladenine glycosidase II; 3-methyladenine DNA glycosylase II; DNA-3-methyladenine glycosidase II; AlkA +ec:3.2.2.22 rRNA N-glycosylase; ribosomal ribonucleate N-glycosidase; nigrin b; RNA N-glycosidase; rRNA N-glycosidase; ricin; momorcochin-S; Mirabilis antiviral protein; momorcochin-S; gelonin; saporins +ec:3.2.2.23 DNA-formamidopyrimidine glycosylase; Fapy-DNA glycosylase; deoxyribonucleate glycosidase; 2,6-diamino-4-hydroxy-5N-formamidopyrimidine-DNA glycosylase; 2,6-diamino-4-hydroxy-5(N-methyl)formamidopyrimidine-DNA glycosylase; formamidopyrimidine-DNA glycosylase; DNA-formamidopyrimidine glycosidase; Fpg protein +ec:3.2.2.24 ADP-ribosyl-[dinitrogen reductase] hydrolase; azoferredoxin glycosidase; azoferredoxin-activating enzymes; dinitrogenase reductase-activating glycohydrolase; ADP-ribosyl glycohydrolase; draG (gene name) +ec:3.2.2.25 N-methyl nucleosidase; 7-methylxanthosine nucleosidase; N-MeNase; N-methyl nucleoside hydrolase; methylpurine nucleosidase +ec:3.2.2.26 futalosine hydrolase; futalosine nucleosidase; MqnB (ambiguous) +ec:3.2.2.27 uracil-DNA glycosylase; UdgB (ambiguous); uracil-DNA N-glycosylase; UDG (ambiguous); uracil DNA glycohydrolase +ec:3.2.2.28 double-stranded uracil-DNA glycosylase; Mug; double-strand uracil-DNA glycosylase; Dug; dsUDG; double-stranded DNA specific UDG; dsDNA specific UDG; UdgB (ambiguous); G:T/U mismatch-specific DNA glycosylase; UDG (ambiguous) +ec:3.2.2.29 thymine-DNA glycosylase; mismatch-specific thymine-DNA glycosylase; mismatch-specific thymine-DNA N-glycosylase; hTDG; hsTDG; TDG; thymine DNA glycosylase; G/T glycosylase; uracil/thymine DNA glycosylase; T:G mismatch-specific thymidine-DNA glycosylase; G:T mismatch-specific thymine DNA-glycosylase +ec:3.2.2.30 aminodeoxyfutalosine nucleosidase; AFL nucleosidase; aminofutalosine nucleosidase; methylthioadenosine nucleosidase; MqnB (ambiguous) +ec:3.2.2.31 adenine glycosylase; mutY (gene name); A/G-specific adenine glycosylase +ec:3.2.3.1 Transferred to 3.2.1.147 +ec:3.3.1.1 Transferred to 3.13.2.1 +ec:3.3.1.2 Transferred to 3.13.2.2 +ec:3.3.1.3 Deleted entry +ec:3.3.2.1 isochorismatase; 2,3-dihydro-2,3-dihydroxybenzoate synthase; 2,3-dihydroxy-2,3-dihydrobenzoate synthase; 2,3-dihydroxy-2,3-dihydrobenzoic synthase +ec:3.3.2.2 lysoplasmalogenase; alkenylglycerophosphocholine hydrolase; alkenylglycerophosphoethanolamine hydrolase; 1-(1-alkenyl)-sn-glycero-3-phosphocholine aldehydohydrolase +ec:3.3.2.3 Transferred to 3.3.2.9 and 3.3.2.10 +ec:3.3.2.4 trans-epoxysuccinate hydrolase; trans-epoxysuccinate hydratase; tartrate epoxydase +ec:3.3.2.5 Transferred to 3.3.2.2 +ec:3.3.2.6 leukotriene-A4 hydrolase; LTA4 hydrolase; LTA4H; leukotriene A4 hydrolase +ec:3.3.2.7 hepoxilin-epoxide hydrolase; hepoxilin epoxide hydrolase; hepoxylin hydrolase; hepoxilin A3 hydrolase +ec:3.3.2.8 limonene-1,2-epoxide hydrolase; limonene oxide hydrolase +ec:3.3.2.9 microsomal epoxide hydrolase; microsomal oxirane/oxetane hydrolase; epoxide hydratase (ambiguous); microsomal epoxide hydratase (ambiguous); epoxide hydrase; microsomal epoxide hydrase; arene-oxide hydratase (ambiguous); benzo[a]pyrene-4,5-oxide hydratase; benzo(a)pyrene-4,5-epoxide hydratase; aryl epoxide hydrase (ambiguous); cis-epoxide hydrolase; mEH; EPHX1 (gene name) +ec:3.3.2.10 soluble epoxide hydrolase; epoxide hydrase (ambiguous); epoxide hydratase (ambiguous); arene-oxide hydratase (ambiguous); aryl epoxide hydrase (ambiguous); trans-stilbene oxide hydrolase; sEH; cytosolic epoxide hydrolase +ec:3.3.2.11 cholesterol-5,6-oxide hydrolase; cholesterol-epoxide hydrolase; ChEH +ec:3.3.2.12 oxepin-CoA hydrolase; paaZ (gene name) +ec:3.3.2.13 chorismatase; chorismate/3,4-dihydroxycyclohexa-1,5-dienoate synthase; fkbO (gene name); rapK (gene name) +ec:3.3.2.14 2,4-dinitroanisole O-demethylase; 2,4-dinitroanisole ether hydrolase; dnhA (gene name); dnhB (gene name); DNAN demethylase +ec:3.3.2.15 trans-2,3-dihydro-3-hydroxyanthranilic acid synthase; isochorismatase (ambiguous); phzD (gene name) +ec:3.4.1.1 Transferred to 3.4.11.1 +ec:3.4.1.2 Transferred to 3.4.11.2 +ec:3.4.1.3 Transferred to 3.4.11.4 +ec:3.4.1.4 Transferred to 3.4.11.5 +ec:3.4.2.1 Transferred to 3.4.17.1 +ec:3.4.2.2 Transferred to 3.4.17.2 +ec:3.4.2.3 Transferred to 3.4.17.4 +ec:3.4.3.1 Transferred to 3.4.13.18 +ec:3.4.3.2 Transferred to 3.4.13.18 +ec:3.4.3.3 Transferred to 3.4.13.3 +ec:3.4.3.4 Transferred to 3.4.13.5 +ec:3.4.3.5 Transferred to 3.4.11.2 +ec:3.4.3.6 Transferred to 3.4.13.18 +ec:3.4.3.7 Transferred to 3.4.13.9 +ec:3.4.4.1 Transferred to 3.4.23.1 +ec:3.4.4.2 Transferred to 3.4.23.2 +ec:3.4.4.3 Transferred to 3.4.23.4 +ec:3.4.4.4 Transferred to 3.4.21.4 +ec:3.4.4.5 Transferred to 3.4.21.1 +ec:3.4.4.6 Transferred to 3.4.21.1 +ec:3.4.4.7 Transferred to 3.4.21.36 and 3.4.21.37 +ec:3.4.4.8 Transferred to 3.4.21.9 +ec:3.4.4.9 Transferred to 3.4.14.1 +ec:3.4.4.10 Transferred to 3.4.22.2 +ec:3.4.4.11 Transferred to 3.4.22.6 +ec:3.4.4.12 Transferred to 3.4.22.3 +ec:3.4.4.13 Transferred to 3.4.21.5 +ec:3.4.4.14 Transferred to 3.4.21.7 +ec:3.4.4.15 Transferred to 3.4.23.15 +ec:3.4.4.16 Transferred to 3.4.21.62 and 3.4.21.63 and 3.4.21.64 and 3.4.21.65 and 3.4.21.66 and 3.4.21.67 +ec:3.4.4.17 Transferred to 3.4.23.20 and 3.4.23.21 and 3.4.23.22 and 3.4.23.23 and 3.4.23.24 and 3.4.23.25 and 3.4.23.26 and 3.4.21.103 and 3.4.23.28 and 3.4.23.29 and 3.4.23.30 +ec:3.4.4.18 Transferred to 3.4.22.10 +ec:3.4.4.19 Transferred to 3.4.24.3 +ec:3.4.4.20 Transferred to 3.4.22.8 +ec:3.4.4.21 Transferred to 3.4.21.34 and 3.4.21.35 +ec:3.4.4.22 Transferred to 3.4.23.3 +ec:3.4.4.23 Transferred to 3.4.23.5 +ec:3.4.4.24 Transferred to 3.4.22.32 and 3.4.22.33 +ec:3.4.4.25 Deleted entry +ec:3.4.11.1 leucyl aminopeptidase; leucine aminopeptidase; leucyl peptidase; peptidase S; cytosol aminopeptidase; cathepsin III; L-leucine aminopeptidase; leucinaminopeptidase; leucinamide aminopeptidase; FTBL proteins; proteinates FTBL; aminopeptidase II; aminopeptidase III; aminopeptidase I +ec:3.4.11.2 membrane alanyl aminopeptidase; microsomal aminopeptidase; aminopeptidase M; aminopeptidase N; particle-bound aminopeptidase; amino-oligopeptidase; alanine aminopeptidase; membrane aminopeptidase I; pseudo leucine aminopeptidase; alanyl aminopeptidase; alanine-specific aminopeptidase; cysteinylglycine dipeptidase; cysteinylglycinase; L-alanine aminopeptidase; CD13 +ec:3.4.11.3 cystinyl aminopeptidase; cystyl-aminopeptidase; oxytocinase; cystine aminopeptidase; L-cystine aminopeptidase; oxytocin peptidase; vasopresssinase +ec:3.4.11.4 tripeptide aminopeptidase; tripeptidase; aminotripeptidase; aminoexotripeptidase; lymphopeptidase; imidoendopeptidase; peptidase B; alanine-phenylalanine-proline arylamidase; peptidase T +ec:3.4.11.5 prolyl aminopeptidase; proline aminopeptidase; Pro-X aminopeptidase; cytosol aminopeptidase V; proline iminopeptidase +ec:3.4.11.6 aminopeptidase B; arylamidase II; arginine aminopeptidase; arginyl aminopeptidase; Cl--activated arginine aminopeptidase; cytosol aminopeptidase IV; L-arginine aminopeptidase +ec:3.4.11.7 glutamyl aminopeptidase; aminopeptidase A; aspartate aminopeptidase; angiotensinase A; glutamyl peptidase; Ca2+-activated glutamate aminopeptidase; membrane aminopeptidase II; antigen BP-1/6C3 of mouse B lymphocytes; L-aspartate aminopeptidase; angiotensinase A2 +ec:3.4.11.8 Transferred to 3.4.19.3 +ec:3.4.11.9 Xaa-Pro aminopeptidase; proline aminopeptidase; aminopeptidase P; aminoacylproline aminopeptidase; X-Pro aminopeptidase +ec:3.4.11.10 bacterial leucyl aminopeptidase; Aeromonas proteolytica aminopeptidase +ec:3.4.11.11 Deleted entry +ec:3.4.11.12 Deleted entry +ec:3.4.11.13 clostridial aminopeptidase; Clostridium histolyticum aminopeptidase +ec:3.4.11.14 cytosol alanyl aminopeptidase; arylamidase; aminopolypeptidase; thiol-activated aminopeptidase; human liver aminopeptidase; puromycin-sensitive aminopeptidase; soluble alanyl aminopeptidase; cytosol aminopeptidase III; alanine aminopeptidase +ec:3.4.11.15 aminopeptidase Y; aminopeptidase Co; aminopeptidase (cobalt-activated); lysyl aminopeptidase +ec:3.4.11.16 Xaa-Trp aminopeptidase; aminopeptidase W; aminopeptidase X-Trp; X-Trp aminopeptidase +ec:3.4.11.17 tryptophanyl aminopeptidase; tryptophan aminopeptidase; L-tryptophan aminopeptidase +ec:3.4.11.18 methionyl aminopeptidase; methionine aminopeptidase; peptidase M; L-methionine aminopeptidase; MAP +ec:3.4.11.19 D-stereospecific aminopeptidase; D-aminopeptidase +ec:3.4.11.20 aminopeptidase Ey +ec:3.4.11.21 aspartyl aminopeptidase +ec:3.4.11.22 aminopeptidase I; aminopeptidase III; aminopeptidase yscI (gene name); leucine aminopeptidase IV; yeast aminopeptidase I +ec:3.4.11.23 PepB aminopeptidase; Salmonella enterica serovar Typhimurium peptidase B +ec:3.4.11.24 aminopeptidase S; Mername-AA022 peptidase; SGAP; aminopeptidase (Streptomyces griseus); Streptomyces griseus aminopeptidase; S. griseus AP; double-zinc aminopeptidase +ec:3.4.11.25 beta-peptidyl aminopeptidase; BapA (ambiguous) +ec:3.4.11.26 intermediate cleaving peptidase 55; Icp55; mitochondrial intermediate cleaving peptidase 55 kDa +ec:3.4.12.1 Transferred to 3.4.16.5 and 3.4.16.6 +ec:3.4.12.2 Transferred to 3.4.17.1 +ec:3.4.12.3 Transferred to 3.4.17.2 +ec:3.4.12.4 Transferred to 3.4.16.2 +ec:3.4.12.5 Transferred to 3.5.1.28 +ec:3.4.12.6 Transferred to 3.4.17.8 +ec:3.4.12.7 Transferred to 3.4.17.3 +ec:3.4.12.8 Transferred to 3.4.17.4 +ec:3.4.12.9 Deleted entry +ec:3.4.12.10 Transferred to 3.4.19.9 +ec:3.4.12.11 Transferred to 3.4.17.6 +ec:3.4.12.12 Transferred to 3.4.16.5 and 3.4.16.6 +ec:3.4.12.13 Deleted entry +ec:3.4.13.1 Transferred to 3.4.13.18 +ec:3.4.13.2 Transferred to 3.4.13.18 +ec:3.4.13.3 Deleted entry +ec:3.4.13.4 Xaa-Arg dipeptidase; aminoacyl-lysine dipeptidase; N2-(4-amino-butyryl)-L-lysine hydrolase; X-Arg dipeptidase +ec:3.4.13.5 Xaa-methyl-His dipeptidase; anserinase; aminoacyl-methylhistidine dipeptidase; acetylhistidine deacetylase; N-acetylhistidine deacetylase; alpha-N-acetyl-L-histidine aminohydrolase; X-methyl-His dipeptidase +ec:3.4.13.6 Transferred to 3.4.11.2 +ec:3.4.13.7 Glu-Glu dipeptidase; alpha-glutamyl-glutamate dipeptidase; glutamylglutamic arylamidase +ec:3.4.13.8 Transferred to 3.4.13.18 +ec:3.4.13.9 Xaa-Pro dipeptidase; prolidase; imidodipeptidase; proline dipeptidase; peptidase D; gamma-peptidase; X-Pro dipeptidase +ec:3.4.13.10 Transferred to 3.4.19.5 +ec:3.4.13.11 Transferred to 3.4.13.19 +ec:3.4.13.12 Met-Xaa dipeptidase; methionyl dipeptidase; dipeptidase M; Met-X dipeptidase +ec:3.4.13.13 Transferred to 3.4.13.3 +ec:3.4.13.14 Deleted entry +ec:3.4.13.15 Transferred to 3.4.13.18 +ec:3.4.13.16 Deleted entry +ec:3.4.13.17 non-stereospecific dipeptidase; peptidyl-D-amino acid hydrolase; D-(or L-)aminoacyl-dipeptidase +ec:3.4.13.18 cytosol nonspecific dipeptidase; N2-beta-alanylarginine dipeptidase; glycyl-glycine dipeptidase; glycyl-leucine dipeptidase; iminodipeptidase; peptidase A; Pro-X dipeptidase; prolinase; prolyl dipeptidase; prolylglycine dipeptidase; iminodipeptidase; prolinase; L-prolylglycine dipeptidase; prolylglycine dipeptidase; diglycinase; Gly-Leu hydrolase; glycyl-L-leucine dipeptidase; glycyl-L-leucine hydrolase; glycyl-L-leucine peptidase; L-amino-acyl-L-amino-acid hydrolase; glycylleucine peptidase; glycylleucine hydrolase; glycylleucine dipeptide hydrolase; non-specific dipeptidase; human cytosolic non-specific dipeptidase; glycyl-L-leucine hydrolase; glycyl-glycine dipeptidase +ec:3.4.13.19 membrane dipeptidase; renal dipeptidase; dehydropeptidase I (DPH I); dipeptidase (ambiguous); aminodipeptidase; dipeptide hydrolase (ambiguous); dipeptidyl hydrolase (ambiguous); nonspecific dipeptidase; glycosyl-phosphatidylinositol-anchored renal dipeptidase; MDP +ec:3.4.13.20 beta-Ala-His dipeptidase; serum carnosinase +ec:3.4.13.21 dipeptidase E; aspartyl dipeptidase; peptidase E; PepE gene product (Salmonella typhimurium) +ec:3.4.13.22 D-Ala-D-Ala dipeptidase; D-alanyl-D-alanine dipeptidase; vanX D-Ala-D-Ala dipeptidase; VanX +ec:3.4.13.23 cysteinylglycine-S-conjugate dipeptidase; tpdA (gene name); LAP3 (gene name) +ec:3.4.14.1 dipeptidyl-peptidase I; cathepsin C; dipeptidyl aminopeptidase I; dipeptidyl transferase; dipeptide arylamidase I; DAP I +ec:3.4.14.2 dipeptidyl-peptidase II; dipeptidyl aminopeptidase II; dipeptidyl arylamidase II; carboxytripeptidase; dipeptidyl peptidase II; DAP II; dipeptidyl(amino)peptidase II; dipeptidylarylamidase +ec:3.4.14.3 Transferred to 3.4.19.1 +ec:3.4.14.4 dipeptidyl-peptidase III; dipeptidyl aminopeptidase III; dipeptidyl arylamidase III; enkephalinase B; red cell angiotensinase +ec:3.4.14.5 dipeptidyl-peptidase IV; dipeptidyl aminopeptidase IV; Xaa-Pro-dipeptidyl-aminopeptidase; Gly-Pro naphthylamidase; postproline dipeptidyl aminopeptidase IV; lymphocyte antigen CD26; glycoprotein GP110; dipeptidyl peptidase IV; glycylproline aminopeptidase; X-prolyl dipeptidyl aminopeptidase; pep X; leukocyte antigen CD26; glycylprolyl dipeptidylaminopeptidase; dipeptidyl-peptide hydrolase; glycylprolyl aminopeptidase; dipeptidyl-aminopeptidase IV; DPP IV/CD26; amino acyl-prolyl dipeptidyl aminopeptidase; T cell triggering molecule Tp103; X-PDAP +ec:3.4.14.6 dipeptidyl-dipeptidase; dipeptidyl tetrapeptide hydrolase; dipeptidyl ligase; tetrapeptide dipeptidase +ec:3.4.14.7 Deleted entry +ec:3.4.14.8 Transferred to 3.4.14.10 +ec:3.4.14.9 tripeptidyl-peptidase I; tripeptidyl aminopeptidase; tripeptidyl peptidase +ec:3.4.14.10 tripeptidyl-peptidase II; tripeptidyl aminopeptidase; tripeptidyl peptidase; tripeptidyl aminopeptidase II; tripeptidyl peptidase II; TPP +ec:3.4.14.11 Xaa-Pro dipeptidyl-peptidase; X-prolyl dipeptidyl aminopeptidase; PepX; X-prolyl dipeptidyl peptidase; X-Pro dipeptidyl-peptidase +ec:3.4.14.12 Xaa-Xaa-Pro tripeptidyl-peptidase; prolyltripeptidyl amino peptidase; prolyl tripeptidyl peptidase; prolyltripeptidyl aminopeptidase; PTP-A; TPP +ec:3.4.14.13 gamma-D-glutamyl-L-lysine dipeptidyl-peptidase; YkfC +ec:3.4.14.14 [mycofactocin precursor peptide] peptidase; mftE (gene name) +ec:3.4.15.1 peptidyl-dipeptidase A; dipeptidyl carboxypeptidase I; peptidase P; dipeptide hydrolase (ambiguous); peptidyl dipeptidase; angiotensin converting enzyme; kininase II; angiotensin I-converting enzyme; carboxycathepsin; dipeptidyl carboxypeptidase; peptidyl dipeptidase I; peptidyl-dipeptide hydrolase; peptidyldipeptide hydrolase; endothelial cell peptidyl dipeptidase; ACE; peptidyl dipeptidase-4; PDH; peptidyl dipeptide hydrolase; DCP +ec:3.4.15.2 Transferred to 3.4.19.2 +ec:3.4.15.3 Transferred to 3.4.15.5 +ec:3.4.15.4 peptidyl-dipeptidase B; dipeptidyl carboxyhydrolase; atriopeptin convertase; atrial di-(tri)peptidyl carboxyhydrolase; peptidyldipeptidase B; atrial dipeptidyl carboxyhydrolase; atrial peptide convertase +ec:3.4.15.5 peptidyl-dipeptidase Dcp; dipeptidyl carboxypeptidase (Dcp); dipeptidyl carboxypeptidase +ec:3.4.15.6 cyanophycinase; cyanophycin degrading enzyme; beta-Asp-Arg hydrolysing enzyme; CGPase; CphB; CphE; cyanophycin granule polypeptidase; extracellular CGPase +ec:3.4.16.1 Transferred to 3.4.16.6 +ec:3.4.16.2 lysosomal Pro-Xaa carboxypeptidase; angiotensinase C; lysosomal carboxypeptidase C; peptidylprolylamino acid carboxypeptidase; aminoacylproline carboxypeptidase; prolyl carboxypeptidase; carboxypeptidase P; proline-specific carboxypeptidase P; PCP +ec:3.4.16.3 Transferred to 3.4.16.5 +ec:3.4.16.4 serine-type D-Ala-D-Ala carboxypeptidase; DD-peptidase; D-alanyl-D-alanine-carboxypeptidase; D-alanyl-D-alanine-cleaving-peptidase; D-alanyl-D-alanine-cleaving peptidase; DD-transpeptidase; D-alanine carboxypeptidase; DD-carboxypeptidase; D-alanyl carboxypeptidase +ec:3.4.16.5 carboxypeptidase C; carboxypeptidase Y; serine carboxypeptidase I; cathepsin A; lysosomal protective protein; deamidase; lysosomal carboxypeptidase A; phaseolin +ec:3.4.16.6 carboxypeptidase D; cereal serine carboxypeptidase II; Saccharomyces cerevisiae KEX1 gene product; carboxypeptidase Kex1; gene KEX1 serine carboxypeptidase; KEX1 carboxypeptidase; KEX1 proteinase; KEX1DELTAp; CPDW-II; serine carboxypeptidase (misleading); Phaseolus proteinase +ec:3.4.17.1 carboxypeptidase A; carboxypolypeptidase; pancreatic carboxypeptidase A; tissue carboxypeptidase A +ec:3.4.17.2 carboxypeptidase B; protaminase; pancreatic carboxypeptidase B; tissue carboxypeptidase B; peptidyl-L-lysine [L-arginine]hydrolase +ec:3.4.17.3 lysine carboxypeptidase; carboxypeptidase N; arginine carboxypeptidase; kininase I; anaphylatoxin inactivator; plasma carboxypeptidase B; creatine kinase conversion factor; bradykinase; kininase Ia; hippuryllysine hydrolase; bradykinin-decomposing enzyme; protaminase; CPase N; creatinine kinase convertase; peptidyl-L-lysine(-L-arginine) hydrolase; CPN +ec:3.4.17.4 Gly-Xaa carboxypeptidase; glycine carboxypeptidase; carboxypeptidase a; carboxypeptidase S; peptidase alpha; yeast carboxypeptidase; Gly-X carboxypeptidase +ec:3.4.17.5 Deleted entry +ec:3.4.17.6 alanine carboxypeptidase; N-benzoyl-L-alanine-amidohydrolase +ec:3.4.17.7 Transferred to 3.5.1.28 +ec:3.4.17.8 muramoylpentapeptide carboxypeptidase; D-alanine carboxypeptidase I; DD-carboxypeptidase; D-alanine carboxypeptidase; D-alanyl-D-alanine carboxypeptidase; D-alanine-D-alanine-carboxypeptidase; carboxypeptidase D-alanyl-D-alanine; carboxypeptidase I; UDP-N-acetylmuramoyl-tetrapeptidyl-D-alanine alanine-hydrolase; D-alanyl-D-alanine peptidase; DD-peptidase; penicillin binding protein 5; PBP5; PdcA; VanY +ec:3.4.17.9 Transferred to 3.4.17.4 +ec:3.4.17.10 carboxypeptidase E; carboxypeptidase H; enkephalin convertase; cobalt-stimulated chromaffin granule carboxypeptidase; insulin granule-associated carboxypeptidase; enkephalin convertase; membrane-bound carboxypeptidase; carboxypeptidase E; enkephalin-precursor endopeptidase; enkephalin precursor carboxypeptidase; peptidyl-L-lysine(-L-arginine) hydrolase +ec:3.4.17.11 glutamate carboxypeptidase; carboxypeptidase G; carboxypeptidase G1; carboxypeptidase G2; glutamyl carboxypeptidase; N-pteroyl-L-glutamate hydrolase +ec:3.4.17.12 carboxypeptidase M; CPM +ec:3.4.17.13 muramoyltetrapeptide carboxypeptidase; carboxypeptidase IIW; carboxypeptidase II; lysyl-D-alanine carboxypeptidase; L-lysyl-D-alanine carboxypeptidase; LD-carboxypeptidase +ec:3.4.17.14 zinc D-Ala-D-Ala carboxypeptidase; Zn2+ G peptidase; D-alanyl-D-alanine hydrolase; D-alanyl-D-alanine-cleaving carboxypeptidase; DD-carboxypeptidase; G enzyme; DD-carboxypeptidase-transpeptidase +ec:3.4.17.15 carboxypeptidase A2; CPA2 +ec:3.4.17.16 membrane Pro-Xaa carboxypeptidase; carboxypeptidase P; microsomal carboxypeptidase; membrane Pro-X carboxypeptidase +ec:3.4.17.17 tubulinyl-Tyr carboxypeptidase; carboxypeptidase-tubulin; soluble carboxypeptidase; tubulin-tyrosine carboxypeptidase; tubulin carboxypeptidase; tubulinyltyrosine carboxypeptidase; tyrosinotubulin carboxypeptidase; tyrosyltubulin carboxypeptidase; TTCPase; brain I carboxypeptidase +ec:3.4.17.18 carboxypeptidase T; CPT (ambiguous) +ec:3.4.17.19 carboxypeptidase Taq +ec:3.4.17.20 carboxypeptidase U; arginine carboxypeptidase; carboxypeptidase R; plasma carboxypeptidase B (misleading, since the term carboxypeptidase B is used for other enzymes); thrombin-activatable fibrinolysis inhibitor +ec:3.4.17.21 glutamate carboxypeptidase II; N-acetylated-gamma-linked-acidic dipeptidase (NAALADase); folate hydrolase; prostate-specific membrane antigen; pteroylpoly-gamma-glutamate carboxypeptidase; microsomal gamma-glutamyl carboxypeptidase; pteroylpolyglutamate hydrolase; folylpolyglutamate hydrolase; pteroylpoly-gamma-glutamate hydrolase; pteroylpolygammaglutamyl hydrolase; pteroylpolyglutamic acid hydrolase; PSM antigen; acetylaspartylglutamate dipeptidase; NAALA dipeptidase; rat NAAG peptidase; mGCP; membrane glutamate carboxypeptidase; N-acetylated-alpha-linked-amino dipeptidase; prostrate-specific membrane antigen; N-Acetylated alpha-linked acidic dipeptidase; PSMA +ec:3.4.17.22 metallocarboxypeptidase D; carboxypeptidase D (cattle, human, mouse, rat); gp180 (duck) +ec:3.4.17.23 angiotensin-converting enzyme 2; ACE-2; ACE2; hACE2; angiotensin converting enzyme 2; angiotensin converting enzyme-2; Tmem27 +ec:3.4.17.24 tubulin-glutamate carboxypeptidase; cytosolic carboxypeptidase 1; cytosolic carboxypeptidase 5; CCP1; CCP5; Agtpbp1 (gene name); AGBL5 (gene name) +ec:3.4.17.25 glutathione-S-conjugate glycine hydrolase; PCS1 (gene name); PRC1 (gene name); CPC (gene name); ATG42 (gene name); alr0975 (locus name) +ec:3.4.18.1 cathepsin X; cathepsin B2; cysteine-type carboxypeptidase; cathepsin IV; cathepsin Z; acid carboxypeptidase; lysosomal carboxypeptidase B +ec:3.4.19.1 acylaminoacyl-peptidase; acylamino-acid-releasing enzyme; N-acylpeptide hydrolase; N-formylmethionine (fMet) aminopeptidase; alpha-N-acylpeptide hydrolase +ec:3.4.19.2 peptidyl-glycinamidase; carboxyamidase; peptidyl carboxy-amidase; peptidyl-aminoacylamidase; carboxamidopeptidase; peptidyl amino acid amide hydrolase +ec:3.4.19.3 pyroglutamyl-peptidase I; 5-oxoprolyl-peptidase; pyrase; pyroglutamate aminopeptidase; pyroglutamyl aminopeptidase; L-pyroglutamyl peptide hydrolase; pyrrolidone-carboxyl peptidase; pyrrolidone-carboxylate peptidase; pyrrolidonyl peptidase; L-pyrrolidonecarboxylate peptidase; pyroglutamidase; pyrrolidonecarboxylyl peptidase +ec:3.4.19.4 Deleted entry +ec:3.4.19.5 beta-aspartyl-peptidase; beta-aspartyl dipeptidase; beta-aspartyl peptidase; beta-aspartyldipeptidase +ec:3.4.19.6 pyroglutamyl-peptidase II; thyroliberinase; pyroglutamyl aminopeptidase II; thyrotropin-releasing factor pyroglutamate aminopeptidase; pyroglutamate aminopeptidase II; pyroglutamyl peptidase II; thyroliberin-hydrolyzing pyroglutamate aminopeptidase; thyrotropin-releasing hormone-degrading pyroglutamate aminopeptidase; thyrotropin-releasing hormone-degrading peptidase; TRH aminopeptidase +ec:3.4.19.7 N-formylmethionyl-peptidase; (fMet)-releasing enzyme; formylmethionine aminopeptidase +ec:3.4.19.8 Transferred to 3.4.17.21 +ec:3.4.19.9 folate gamma-glutamyl hydrolase; GGH (gene name); conjugase; folate conjugase; lysosomal gamma-glutamyl carboxypeptidase; gamma-Glu-X carboxypeptidase; pteroyl-poly-gamma-glutamate hydrolase; carboxypeptidase G; folic acid conjugase; poly(gamma-glutamic acid) endohydrolase; polyglutamate hydrolase; poly(glutamic acid) hydrolase II; pteroylpoly-gamma-glutamyl hydrolase; gamma-glutamyl hydrolase +ec:3.4.19.10 Transferred to 3.5.1.28 +ec:3.4.19.11 gamma-D-glutamyl-meso-diaminopimelate peptidase; endopeptidase I; gamma-D-glutamyldiaminopimelate endopeptidase; gamma-D-glutamyl-L-meso-diaminopimelate peptidoglycan hydrolase; gamma-glutamyl-L-meso-diaminopimelyl endopeptidase; gamma-D-glutamyl-meso-diaminopimelate endopeptidase; gamma-D-glutamyl-meso-diaminopimelic peptidoglycan hydrolase; gamma-D-glutamyl-meso-diaminopimelic endopeptidase; gamma-D-glutamyl-meso-D-aminopimelic endopeptidase +ec:3.4.19.12 ubiquitinyl hydrolase 1; ubiquitin C-terminal hydrolase; yeast ubiquitin hydrolase +ec:3.4.19.13 glutathione gamma-glutamate hydrolase; glutathionase; gamma-glutamyltranspeptidase (ambiguous); glutathione hydrolase; GGT (gene name); ECM38 (gene name) +ec:3.4.19.14 leukotriene-C4 hydrolase; gamma-glutamyl leukotrienase; GGT5 +ec:3.4.19.15 desampylase; SAMP-protein conjugate cleaving protease; HvJAMM1 +ec:3.4.19.16 glucosinolate gamma-glutamyl hydrolase; GGP1 (gene name); GGP3 (gene name) +ec:3.4.21.1 chymotrypsin; chymotrypsins A and B; alpha-chymar ophth; avazyme; chymar; chymotest; enzeon; quimar; quimotrase; alpha-chymar; alpha-chymotrypsin A; alpha-chymotrypsin +ec:3.4.21.2 chymotrypsin C +ec:3.4.21.3 metridin; Metridium proteinase A; sea anemone protease A; sea anemone proteinase A +ec:3.4.21.4 trypsin; alpha-trypsin; beta-trypsin; cocoonase; parenzyme; parenzymol; tryptar; trypure; pseudotrypsin; tryptase; tripcellim; sperm receptor hydrolase +ec:3.4.21.5 thrombin; fibrinogenase; thrombase; thrombofort; topical; thrombin-C; tropostasin; activated blood-coagulation factor II; blood-coagulation factor IIa; factor IIa; E thrombin; beta-thrombin; gamma-thrombin +ec:3.4.21.6 coagulation factor Xa; thrombokinase; prothrombase; prothrombinase; activated blood-coagulation factor X; autoprothrombin C; thromboplastin; plasma thromboplastin; factor Xa; activated Stuart-Prower factor; activated factor X +ec:3.4.21.7 plasmin; fibrinase; fibrinolysin; actase; serum tryptase; thrombolysin +ec:3.4.21.8 Transferred to 3.4.21.34 and 3.4.21.35 +ec:3.4.21.9 enteropeptidase; enterokinase +ec:3.4.21.10 acrosin; acrosomal proteinase; acrozonase; alpha-acrosin; beta-acrosin; upsilon-acrosin; acrosomal protease; acrosin amidase +ec:3.4.21.11 Transferred to 3.4.21.37 +ec:3.4.21.12 alpha-lytic endopeptidase; myxobacter alpha-lytic proteinase; alpha-lytic proteinase; alpha-lytic protease; Mycobacterium sorangium alpha-lytic proteinase; Myxobacter 495 alpha-lytic proteinase; Myxobacter alpha-lytic proteinase +ec:3.4.21.13 Transferred to 3.4.16.6 +ec:3.4.21.14 Transferred to 3.4.21.67 +ec:3.4.21.15 Transferred to 3.4.21.63 +ec:3.4.21.16 Deleted entry +ec:3.4.21.17 Deleted entry +ec:3.4.21.18 Deleted entry +ec:3.4.21.19 glutamyl endopeptidase; V8 proteinase; endoproteinase Glu-C; staphylococcal serine proteinase +ec:3.4.21.20 cathepsin G; chymotrypsin-like proteinase; neutral proteinase +ec:3.4.21.21 coagulation factor VIIa; blood-coagulation factor VIIa; activated blood coagulation factor VII +ec:3.4.21.22 coagulation factor IXa; activated Christmas factor; blood-coagulation factor IXa; activated blood-coagulation factor IX; autoprothrombin II; blood platelet cofactor II; activated blood coagulation factor XI +ec:3.4.21.23 Deleted entry +ec:3.4.21.24 Deleted entry +ec:3.4.21.25 cucumisin; euphorbain; solanain; hurain; tabernamontanain +ec:3.4.21.26 prolyl oligopeptidase; post-proline cleaving enzyme; proline-specific endopeptidase; post-proline endopeptidase; proline endopeptidase; endoprolylpeptidase; prolyl endopeptidase +ec:3.4.21.27 coagulation factor XIa; blood-coagulation factor XIa; activated blood-coagulation factor XI; activated plasma thromboplastin antecedent +ec:3.4.21.28 Transferred to 3.4.21.74 +ec:3.4.21.29 Transferred to 3.4.21.74 +ec:3.4.21.30 Transferred to 3.4.21.74 +ec:3.4.21.31 Transferred to 3.4.21.73 +ec:3.4.21.32 brachyurin; Uca pugilator collagenolytic proteinase; crab protease I; crab protease II +ec:3.4.21.33 Deleted entry +ec:3.4.21.34 plasma kallikrein; serum kallikrein; kininogenin; kallikrein I; kallikrein II; kininogenase; kallikrein; callicrein; glumorin; padreatin; padutin; kallidinogenase; bradykininogenase; panceatic kallikrein; onokrein P; dilminal D; depot-Padutin; urokallikrein; urinary kallikrein +ec:3.4.21.35 tissue kallikrein; glandular kallikrein; pancreatic kallikrein; submandibular kallikrein; submaxillary kallikrein; kidney kallikrein; urinary kallikrein; kallikrein; salivary kallikrein; kininogenin; kininogenase; callicrein; glumorin; padreatin; padutin; kallidinogenase; bradykininogenase; depot-padutin; urokallikrein; dilminal D; onokrein P +ec:3.4.21.36 pancreatic elastase; pancreatopeptidase E; pancreatic elastase I; elastase; elaszym; serine elastase +ec:3.4.21.37 leukocyte elastase; lysosomal elastase; neutrophil elastase; polymorphonuclear leukocyte elastase; elastase; elaszym; serine elastase; granulocyte elastase +ec:3.4.21.38 coagulation factor XIIa; Hageman factor (activated); blood-coagulation factor XIIf; activated beta blood-coagulation factor XII; prealbumin activator; Hageman factor beta-fragment; Hageman factor fragment HFf; blood-coagulation factor XIIabeta; prekallikrein activator; kallikreinogen activator +ec:3.4.21.39 chymase; mast cell protease I; skeletal muscle protease; skin chymotryptic proteinase; mast cell serine proteinase; skeletal muscle (SK) protease +ec:3.4.21.40 Deleted entry +ec:3.4.21.41 complement subcomponent C_overbar_1r_; activated complement C1r; C_overbar_1r_ esterase +ec:3.4.21.42 complement subcomponent C_overbar_1s_; C1 esterase; activated complement C1s; complement C_overbar_1r_ +ec:3.4.21.43 classical-complement-pathway C3/C5 convertase; C3 convertase; C_overbar_42_; C4b,2a; C5 convertase; C_overbar_423_; C4b,2a,3b; C42; C423; complement C.hivin.4.hivin2; complement C3 convertase +ec:3.4.21.44 Transferred to 3.4.21.43 +ec:3.4.21.45 complement factor I; complement component C3b inactivator; C3b inactivator; C3b/C4b inactivator; C3bINA; complement C3b/C4b inactivator; complement C4b inactivator; conglutinogen-activating factor C; complement C3b inactivator; factor I; complement C4bi +ec:3.4.21.46 complement factor D; C3 proactivator convertase; properdin factor D esterase; factor D; factor D (complement) +ec:3.4.21.47 alternative-complement-pathway C3/C5 convertase; complement component C3/C5 convertase (alternative); proenzyme factor B; properdin factor B; C3 proactivator; glycine-rich beta-glycoprotein; heat-labile factor; C3 convertase; C3b,Bb,CVF,Bb,C5 convertase; (C3b)n,Bb; complement C 3(C 5) convertase (amplification); alternative complement pathway C3(C5) convertase; C5 convertase; CVF,Bb; (CVF)-dependent glycine-rich-beta-glucoprotein; cobra venom factor-dependent C3 convertase +ec:3.4.21.48 cerevisin; yeast proteinase B; proteinase yscB (gene name); baker's yeast proteinase B; brewer's yeast proteinase; peptidase beta +ec:3.4.21.49 hypodermin C; Hypoderma collagenase +ec:3.4.21.50 lysyl endopeptidase; Achromobacter proteinase I (also see Comment); Achromobacter lyticus alkaline proteinase I; protease I; achromopeptidase; lysyl bond specific proteinase +ec:3.4.21.51 Deleted entry +ec:3.4.21.52 Deleted entry +ec:3.4.21.53 endopeptidase La; ATP-dependent serine proteinase; lon proteinase; protease La; proteinase La; ATP-dependent lon proteinase; ATP-dependent protease La; Escherichia coli proteinase La; Escherichia coli serine proteinase La; gene lon protease; gene lon proteins; PIM1 protease; PIM1 proteinase; serine protease La +ec:3.4.21.54 gamma-renin +ec:3.4.21.55 venombin AB; gabonase; okinaxobin II; Bitis gabonica venom serine proteinase; afaacytin +ec:3.4.21.56 Deleted entry +ec:3.4.21.57 leucyl endopeptidase; plant Leu-proteinase; leucine-specific serine proteinase; leucine endopeptidase; spinach serine proteinase (leucine specific); spinach leucine-specific serine proteinase; Leu-proteinase +ec:3.4.21.58 Deleted entry +ec:3.4.21.59 tryptase; mast cell tryptase; mast cell protease II; skin tryptase; lung tryptase; pituitary tryptase; mast cell neutral proteinase; mast cell serine proteinase II; mast cell proteinase II; mast cell serine proteinase tryptase; rat mast cell protease II; tryptase M +ec:3.4.21.60 scutelarin; taipan activator; Oxyuranus scutellatus prothrombin-activating proteinase +ec:3.4.21.61 kexin; yeast KEX2 protease; proteinase yscF (gene name); prohormone-processing endoprotease; paired-basic endopeptidase; yeast cysteine proteinase F (misleading); andrenorphin-Gly-generating enzyme; endoproteinase Kex2p; gene KEX2 dibasic proteinase; Kex 2p proteinase; Kex2 endopeptidase; Kex2 endoprotease; Kex2 endoproteinase; Kex2 protease; proteinase Kex2p; Kex2-like precursor protein processing endoprotease; prohormone-processing KEX2 proteinase; prohormone-processing proteinase; proprotein convertase; protease KEX2; Kex2 proteinase; Kex2-like endoproteinase +ec:3.4.21.62 subtilisin; alcalase; alcalase 0.6L; alcalase 2.5L; ALK-enzyme; bacillopeptidase A; bacillopeptidase B; Bacillus subtilis alkaline proteinase bioprase; bioprase AL 15; bioprase APL 30; colistinase; (see also comments); subtilisin J; subtilisin S41; subtilisin Sendai; subtilisin GX; subtilisin E; subtilisin BL; genenase I; esperase; maxatase; thermoase PC 10; protease XXVII; thermoase; superase; subtilisin DY; subtilopeptidase; SP 266; savinase 8.0L; savinase 4.0T; kazusase; protease VIII; opticlean; Bacillus subtilis alkaline proteinase; protin A 3L; savinase; savinase 16.0L; savinase 32.0 L EX; orientase 10B; protease S +ec:3.4.21.63 oryzin; Aspergillus alkaline proteinase; aspergillopeptidase B; API 21; aspergillopepsin B; aspergillopepsin F; Aspergillus candidus alkaline proteinase; Aspergillus flavus alkaline proteinase; Aspergillus melleus semi-alkaline proteinase; Aspergillus oryzae alkaline proteinase; Aspergillus parasiticus alkaline proteinase; Aspergillus serine proteinase; Aspergillus sydowi alkaline proteinase; Aspergillus soya alkaline proteinase; Aspergillus melleus alkaline proteinase; Aspergillus sulphureus alkaline proteinase; prozyme; P 5380; kyorinase; seaprose S; semi-alkaline protease; sumizyme MP; prozyme 10; onoprose; onoprose SA; protease P; promelase +ec:3.4.21.64 peptidase K; Tritirachium alkaline proteinase; Tritirachium album serine proteinase; proteinase K; Tritirachium album proteinase K; endopeptidase K +ec:3.4.21.65 thermomycolin; thermomycolase +ec:3.4.21.66 thermitase; thermophilic Streptomyces serine proteinase; Thermoactinomyces vulgaris serine proteinase +ec:3.4.21.67 endopeptidase So; E. coli cytoplasmic proteinase; proteinase So; Escherichia coli serine proteinase So +ec:3.4.21.68 t-plasminogen activator; tissue plasminogen activator; plasminogen activator, tissue-type; tissue-type plasminogen activator; tPA; t-PA +ec:3.4.21.69 protein C (activated); blood-coagulation factor XIVa; activated blood coagulation factor XIV; activated protein C; autoprothrombin II-A; protein Ca; APC; GSAPC +ec:3.4.21.70 pancreatic endopeptidase E; cholesterol-binding proteinase; proteinase E; cholesterol-binding serine proteinase; pancreatic protease E; pancreatic proteinase E; cholesterol-binding pancreatic proteinase; CBPP; pancreas E proteinase +ec:3.4.21.71 pancreatic elastase II; pancreatic elastase 2 +ec:3.4.21.72 IgA-specific serine endopeptidase; IgA protease; IgA proteinase; IgA-specific proteinase; immunoglobulin A protease; immunoglobulin A proteinase +ec:3.4.21.73 u-plasminogen activator; urokinase; urinary plasminogen activator; cellular plasminogen activator; urokinase-type plasminogen activator; double-chain urokinase-type plasminogen activator; two-chain urokinase-type plasminogen activator; urokinase plasminogen activator; uPA; u-PA; abbokinase; urinary esterase A +ec:3.4.21.74 venombin A; alpha-fibrinogenase; habutobin; zinc metalloproteinase Cbfib1.1; zinc metalloproteinase Cbfib1.2; zinc metalloproteinase Cbfib2; ancrod; (see also Comments) +ec:3.4.21.75 furin; prohormone convertase; dibasic processing enzyme; PACE; paired basic amino acid cleaving enzyme; paired basic amino acid converting enzyme; serine proteinase PACE; PC1; SPC3; proprotein convertase +ec:3.4.21.76 myeloblastin; leukocyte proteinase 3; leukocyte proteinase 4; Wegener's granulomatosis autoantigen; proteinase PR-3; proteinase-3; PMNL proteinase +ec:3.4.21.77 semenogelase; prostate-specific antigen; alpha-seminoprotein; seminin; P-30 antigen; antigen (human clone HPSA-1 prostate-specific protein moiety reduced); gamma-seminoglycoprotein (human protein moiety reduced); gamma-SM; antigen PSA (human prostate-specific); human glandular kallikrein; antigen PSA (human clone 5P1 protein moiety reduced) +ec:3.4.21.78 granzyme A; CTLA3; HuTPS; T-cell associated protease 1; cytotoxic T lymphocyte serine protease; TSP-1; T-cell derived serine proteinase +ec:3.4.21.79 granzyme B; CTLA1; CCPII; cytotoxic cell proteinase-1; granzyme G; granzyme H; CCP1 proteinase +ec:3.4.21.80 streptogrisin A; Streptomyces griseus protease A; protease A; proteinase A; Streptomyces griseus proteinase A; Streptomyces griseus serine proteinase 3; Streptomyces griseus serine proteinase A +ec:3.4.21.81 streptogrisin B; Streptomyces griseus protease B; pronase B; serine proteinase B; Streptomyces griseus proteinase B; Streptomyces griseus proteinase 1; Streptomyces griseus serine proteinase B +ec:3.4.21.82 glutamyl endopeptidase II; GluSGP +ec:3.4.21.83 oligopeptidase B; protease II; Escherichia coli alkaline proteinase II +ec:3.4.21.84 limulus clotting factor _overbar_C_; factor C; limulus factor C +ec:3.4.21.85 limulus clotting factor _overbar_B_ +ec:3.4.21.86 limulus clotting enzyme; clotting enzyme +ec:3.4.21.87 Transferred to 3.4.23.49 +ec:3.4.21.88 repressor LexA; LexA repressor +ec:3.4.21.89 signal peptidase I; leader peptidase I; signal proteinase; Escherichia coli leader peptidase; eukaryotic signal peptidase; eukaryotic signal proteinase; leader peptidase; leader peptide hydrolase; leader proteinase; signal peptidase; pilin leader peptidase; SPC; prokaryotic signal peptidase; prokaryotic leader peptidase; HOSP; prokaryotic signal proteinase; propeptidase; PuIO prepilin peptidase; signal peptide hydrolase; signal peptide peptidase; signalase; bacterial leader peptidase 1 +ec:3.4.21.90 togavirin; Sindbis virus protease; Sindbis virus core protein; NsP2 proteinase +ec:3.4.21.91 flavivirin; Yellow fever virus (flavivirus) protease; NS2B-3 proteinase +ec:3.4.21.92 endopeptidase Clp; endopeptidase Ti; caseinolytic protease; protease Ti; ATP-dependent Clp protease; ClpP; Clp protease +ec:3.4.21.93 proprotein convertase 1; prohormone convertase 3; neuroendocrine convertase 1; PC1 +ec:3.4.21.94 proprotein convertase 2; neuroendocrine convertase 2; PC2 +ec:3.4.21.95 snake venom factor V activator +ec:3.4.21.96 lactocepin; CEP; extracellular lactococcal proteinase; lactococcal cell wall-associated proteinase; lactococcal cell envelope-associated proteinase; lactococcal proteinase; PrtP +ec:3.4.21.97 assemblin +ec:3.4.21.98 hepacivirin; Cpro-2; hepatitis C virus NS3 serine proteinase; NS3-4A serine proteinase complex +ec:3.4.21.99 spermosin +ec:3.4.21.100 sedolisin; Pseudomonas sp. pepstatin-insensitive carboxyl proteinase; pseudomonapepsin; pseudomonalisin; sedolysin +ec:3.4.21.101 xanthomonalisin; Xanthomonas aspartic proteinase; xanthomonapepsin; sedolisin-B +ec:3.4.21.102 C-terminal processing peptidase; CtpA gene product (Synechocystis sp.); photosystem II D1 protein processing peptidase; protease Re; tail-specific protease; Tsp protease +ec:3.4.21.103 physarolisin; Dictyostelium discoideum aspartic proteinase; Dictyostelium discoideum aspartic proteinase E; Physarum flavicomum aspartic proteinase; Physarum polycephalum acid proteinase; Physarum aspartic proteinase; physaropepsin +ec:3.4.21.104 mannan-binding lectin-associated serine protease-2; MASP-2; MASP2; MBP-associated serine protease-2; mannose-binding lectin-associated serine protease-2; p100; mannan-binding lectin-associated serine peptidase 2 +ec:3.4.21.105 rhomboid protease +ec:3.4.21.106 hepsin +ec:3.4.21.107 peptidase Do; DegP; DegP protease; HtrA; high temperature requirement protease A; HrtA heat shock protein; protease Do; Do protease +ec:3.4.21.108 HtrA2 peptidase; high temperature requirement protein A2; HtrA2; Omi stress-regulated endoprotease; serine proteinase OMI; HtrA2 protease; OMI/HtrA2 protease; HtrA2/Omi; Omi/HtrA2 +ec:3.4.21.109 matriptase; serine protease 14; membrane-type serine protease 1; MT-SP1; prostamin; serine protease TADG-15; tumor-associated differentially-expressed gene 15 protein; ST14; breast cancer 80 kDa protease; epithin; serine endopeptidase SNC19; matriptase-1; matriptase-2; matriptase-3; TMPRSS6 (gene name) +ec:3.4.21.110 C5a peptidase; streptococcal C5a peptidase; ScpA; ScpB; SCPA +ec:3.4.21.111 aqualysin 1; caldolysin +ec:3.4.21.112 site-1 protease; mammalian subtilisin/kexin isozyme 1; membrane-bound transcription factor site-1 protease; proprotein convertase SKI-1; proprotein convertase SKI-1/S1PPS1; S1P endopeptidase; S1P protease; site-1 peptidase; site-1 protease; SKI-1; SREBP proteinase; SREBP S1 protease; SREBP-1 proteinase; SREBP-2 proteinase; sterol regulatory element-binding protein proteinase; sterol regulatory element-binding protein site 1 protease; sterol-regulated luminal protease; subtilase SKI-1; subtilase SKI-1/S1P; subtilisin/kexin-isozyme 1 +ec:3.4.21.113 pestivirus NS3 polyprotein peptidase; border disease virus NS3 endopeptidase; BDV NS3 endopeptidase; bovine viral diarrhea virus NS3 endopeptidase; BVDV NS3 endopeptidase; classical swine fever virus NS3 endopeptidase; CSFV NS3 endopeptidase; p80 +ec:3.4.21.114 equine arterivirus serine peptidase +ec:3.4.21.115 infectious pancreatic necrosis birnavirus Vp4 peptidase; infectious pancreatic necrosis virus protease; IPNV Vp4 protease; IPNV Vp4 peptidase; NS protease; NS-associated protease; Vp4 protease +ec:3.4.21.116 SpoIVB peptidase; sporulation factor IV B protease +ec:3.4.21.117 stratum corneum chymotryptic enzyme; kallikrein 7; SCCE; KLK7; PRSS6; hK7 +ec:3.4.21.118 kallikrein 8; KLK8; PRSS19; human kallikrein 8; hK8; mK8; ovasin; tumor-associated differentially expressed gene 14; TADG-14; NP; neuropsin +ec:3.4.21.119 kallikrein 13; KLK13; kallikrein mK13; mGK-13; mK13; mKLK13; prorenin converting enzyme 1; PRECE-1; prorenin-converting enzyme; PRECE; proteinase P +ec:3.4.21.120 oviductin; oviductal protease +ec:3.4.21.121 Lys-Lys/Arg-Xaa endopeptidase; ASP (Aeromonas sobria)-type peptidase; Aeromonas extracellular serine protease +ec:3.4.21.122 transmembrane protease serine 2; TMPRSS2 (gene name); epitheliasin +ec:3.4.22.1 cathepsin B; cathepsin B1 (obsolete); cathepsin II +ec:3.4.22.2 papain; papayotin; summetrin; velardon; papaine; Papaya peptidase I +ec:3.4.22.3 ficain; ficin; debricin; higueroxyl delabarre +ec:3.4.22.4 Transferred to 3.4.22.32 and 3.4.22.33 +ec:3.4.22.5 Transferred to 3.4.22.32 and 3.4.22.33 +ec:3.4.22.6 chymopapain; chymopapain A; chymopapain B; chymopapain S +ec:3.4.22.7 asclepain +ec:3.4.22.8 clostripain; clostridiopeptidase B; clostridium histolyticum proteinase B; alpha-clostridipain; clostridiopeptidase +ec:3.4.22.9 Transferred to 3.4.21.48 +ec:3.4.22.10 streptopain; Streptococcus peptidase A; streptococcal cysteine proteinase; Streptococcus protease +ec:3.4.22.11 Transferred to 3.4.24.56 +ec:3.4.22.12 Transferred to 3.4.19.9 +ec:3.4.22.13 Deleted entry +ec:3.4.22.14 actinidain; actinidin; Actinidia anionic protease; proteinase A2 of Actinidia chinensis +ec:3.4.22.15 cathepsin L; Aldrichina grahami cysteine proteinase +ec:3.4.22.16 cathepsin H; cathepsin B3; benzoylarginine-naphthylamide (BANA) hydrolase (obsolete); cathepsin Ba; aleurain; N-benzoylarginine-beta-naphthylamide hydrolase +ec:3.4.22.17 Transferred to 3.4.22.53 +ec:3.4.22.18 Transferred to 3.4.21.26 +ec:3.4.22.19 Transferred to 3.4.24.15 +ec:3.4.22.20 Deleted entry +ec:3.4.22.21 Transferred to 3.4.25.1 +ec:3.4.22.22 Transferred to 3.4.24.37 +ec:3.4.22.23 Transferred to 3.4.21.61 +ec:3.4.22.24 cathepsin T +ec:3.4.22.25 glycyl endopeptidase; papaya peptidase B; papaya proteinase IV; glycine-specific proteinase; chymopapain; Papaya proteinase 4; PPIV; chymopapain M +ec:3.4.22.26 cancer procoagulant +ec:3.4.22.27 cathepsin S +ec:3.4.22.28 picornain 3C; picornavirus endopeptidase 3C; poliovirus protease 3C; rhinovirus protease 3C; foot-and-mouth protease 3C; poliovirus proteinase 3C; rhinovirus proteinase 3C; coxsackievirus 3C proteinase; foot-and-mouth-disease virus proteinase 3C; 3C protease; 3C proteinase; cysteine proteinase 3C; hepatitis A virus 3C proteinase; protease 3C; tomato ringspot nepovirus 3C-related protease +ec:3.4.22.29 picornain 2A; picornavirus endopeptidase 2A; poliovirus protease 2A; rhinovirus protease 2A; 2A protease; 2A proteinase; protease 2A; proteinase 2Apro; picornaviral 2A proteinase; Y-G proteinase 2A; poliovirus proteinase 2A; poliovirus protease 2Apro +ec:3.4.22.30 caricain; papaya peptidase A; papaya peptidase II; papaya proteinase; papaya proteinase III; papaya proteinase 3; proteinase omega; papaya proteinase A; chymopapain S; Pp +ec:3.4.22.31 ananain; stem bromelain; fruit bromelain +ec:3.4.22.32 stem bromelain; bromelain; pineapple stem bromelain +ec:3.4.22.33 fruit bromelain; juice bromelain; ananase; bromelase; bromelin; extranase; pinase; pineapple enzyme; traumanase; fruit bromelain FA2 +ec:3.4.22.34 legumain; asparaginyl endopeptidase; citvac; proteinase B (ambiguous); hemoglobinase (ambiguous); PRSC1 gene product (Homo sapiens); vicilin peptidohydrolase; bean endopeptidase +ec:3.4.22.35 histolysain; histolysin; Entamoeba histolytica cysteine proteinase; amebapain; Entamoeba histolytica cysteine protease; Entamoeba histolytica neutral thiol proteinase +ec:3.4.22.36 caspase-1; interleukin 1beta-converting enzyme; protease VII; protease A; interleukin 1beta precursor proteinase; interleukin 1 converting enzyme; interleukin 1beta-converting endopeptidase; interleukin-1beta convertase; interleukin-1beta converting enzyme; interleukin-1beta precursor proteinase; prointerleukin 1beta protease; precursor interleukin-1beta converting enzyme; pro-interleukin 1beta proteinase; ICE +ec:3.4.22.37 gingipain R; Arg-gingipain; gingipain-1; argingipain; Arg-gingivain-55 proteinase; Arg-gingivain-70 proteinase; Arg-gingivain-75 proteinase; arginine-specific cysteine protease; arginine-specific gingipain; arginine-specific gingivain; RGP-1; RGP +ec:3.4.22.38 cathepsin K; cathepsin O and cathepsin X (both misleading, having been used for other enzymes); cathepsin O2 +ec:3.4.22.39 adenain +ec:3.4.22.40 bleomycin hydrolase; aminopeptidase C (Lactococcus lactis) [4] +ec:3.4.22.41 cathepsin F +ec:3.4.22.42 cathepsin O +ec:3.4.22.43 cathepsin V; Cathepsin L2; cathepsin U +ec:3.4.22.44 nuclear-inclusion-a endopeptidase; potyvirus NIa protease +ec:3.4.22.45 helper-component proteinase; HC-Pro +ec:3.4.22.46 L-peptidase +ec:3.4.22.47 gingipain K; Lys-gingipain; PrtP proteinase +ec:3.4.22.48 staphopain; staphylopain +ec:3.4.22.49 separase; separin +ec:3.4.22.50 V-cath endopeptidase; AcNPV protease; BmNPV protease; NPV protease; baculovirus cathepsin; nucleopolyhedrosis virus protease; viral cathepsin +ec:3.4.22.51 cruzipain; congopain; cruzain; evansain; trypanopain +ec:3.4.22.52 calpain-1; mu-calpain; calcium-activated neutral protease I +ec:3.4.22.53 calpain-2; calcium-activated neutral protease II; m-calpain; milli-calpain +ec:3.4.22.54 calpain-3; p94; calpain p94; CAPN3; muscle calpain; calpain 3; calcium-activated neutral proteinase 3; muscle-specific calcium-activated neutral protease 3; CANP 3; calpain L3 +ec:3.4.22.55 caspase-2; ICH-1; NEDD-2; caspase-2L; caspase-2S; neural precursor cell expressed developmentally down-regulated protein 2; CASP-2; NEDD2 protein +ec:3.4.22.56 caspase-3; CPP32; apopain; yama protein +ec:3.4.22.57 caspase-4; ICErelII; ICErel-II; Ich-2; transcript X; TX; TX protease; caspase 4; CASP-4 +ec:3.4.22.58 caspase-5; ICErel-III; Ich-3; ICH-3 protease; transcript Y; TY; CASP-5 +ec:3.4.22.59 caspase-6; CASP-6; apoptotic protease Mch-2; Mch2 +ec:3.4.22.60 caspase-7; CASP-7; ICE-like apoptotic protease 3; ICE-LAP3; apoptotic protease Mch-3; Mch3; CMH-1 +ec:3.4.22.61 caspase-8; FLICE; FADD-like ICE; MACH; MORT1-associated CED-3 homolog; Mch5; mammalian Ced-3 homolog 5; CASP-8; ICE-like apoptotic protease 5; FADD-homologous ICE/CED-3-like protease; apoptotic cysteine protease; apoptotic protease Mch-5; CAP4 +ec:3.4.22.62 caspase-9; CASP-9; ICE-like apoptotic protease 6; ICE-LAP6; apoptotic protease Mch-6; apoptotic protease-activating factor 3; APAF-3 +ec:3.4.22.63 caspase-10; FLICE2; Mch4; CASP-10; ICE-like apoptotic protease 4; apoptotic protease Mch-4; FAS-associated death domain protein interleukin-1beta-converting enzyme 2 +ec:3.4.22.64 caspase-11; CASP-11 +ec:3.4.22.65 peptidase 1 (mite); allergen Der f 1; allergen Der p 1; antigen Der p 1; antigen Eur m 1; antigen Pso o 1; major mite fecal allergen Der p 1; Der p 1; Der f 1; Eur m 1; endopeptidase 1 (mite) +ec:3.4.22.66 calicivirin; Camberwell virus processing peptidase; Chiba virus processing peptidase; Norwalk virus processing peptidase; Southampton virus processing peptidase; Southampton virus; norovirus virus processing peptidase; calicivirus trypsin-like cysteine protease; calicivirus TCP; calicivirus 3C-like protease; calicivirus endopeptidase; rabbit hemorrhagic disease virus 3C endopeptidase +ec:3.4.22.67 zingipain; ginger protease; GP-I; GP-II; ginger protease II (Zingiber officinale); zingibain +ec:3.4.22.68 Ulp1 peptidase; Smt3-protein conjugate proteinase; Ubl-specific protease 1; Ulp1; Ulp1 endopeptidase; Ulp1 protease +ec:3.4.22.69 SARS coronavirus main proteinase; 3cLpro; 3C-like protease; coronavirus 3C-like protease; Mpro; SARS 3C-like protease; SARS coronavirus 3CL protease; SARS coronavirus main peptidase; SARS coronavirus main protease; SARS-CoV 3CLpro enzyme; SARS-CoV main protease; SARS-CoV Mpro; severe acute respiratory syndrome coronavirus main protease +ec:3.4.22.70 sortase A; SrtA; SrtA protein; SrtA sortase +ec:3.4.22.71 sortase B; SrtB +ec:3.4.23.1 pepsin A; pepsin; lactated pepsin; pepsin fortior; fundus-pepsin; elixir lactate of pepsin; P I; lactated pepsin elixir; P II; pepsin R; pepsin D +ec:3.4.23.2 pepsin B; parapepsin I; pig gelatinase +ec:3.4.23.3 gastricsin; pepsin C; pig parapepsin II; parapepsin II +ec:3.4.23.4 chymosin; rennin (but this should be avoided since it leads to confusion with renin) +ec:3.4.23.5 cathepsin D +ec:3.4.23.6 Transferred to 3.4.23.30 +ec:3.4.23.7 Transferred to 3.4.23.20 +ec:3.4.23.8 Transferred to 3.4.23.25 +ec:3.4.23.9 Transferred to 3.4.23.21 +ec:3.4.23.10 Transferred to 3.4.23.22 +ec:3.4.23.11 Deleted entry +ec:3.4.23.12 nepenthesin; Nepenthes aspartic proteinase; Nepenthes acid proteinase; nepenthacin; nepenthasin; aspartyl endopeptidase +ec:3.4.23.13 Deleted entry +ec:3.4.23.14 Deleted entry +ec:3.4.23.15 renin; angiotensin-forming enzyme; angiotensinogenase +ec:3.4.23.16 HIV-1 retropepsin; human immunodeficiency virus type 1 protease; gag protease; HIV aspartyl protease; HIV proteinase; retroproteinase; HIV-1 protease; HIV-2 protease +ec:3.4.23.17 pro-opiomelanocortin converting enzyme; prohormone converting enzyme; pro-opiomelanocortin-converting enzyme; proopiomelanocortin proteinase; PCE +ec:3.4.23.18 aspergillopepsin I; Aspergillus acid protease; Aspergillus acid proteinase; Aspergillus aspartic proteinase; Aspergillus awamori acid proteinase; Aspergillus carboxyl proteinase; (see also Comments); carboxyl proteinase; Aspergillus kawachii aspartic proteinase; Aspergillus saitoi acid proteinase; pepsin-type aspartic proteinase; Aspergillus niger acid proteinase; sumizyme AP; proctase P; denapsin; denapsin XP 271; proctase +ec:3.4.23.19 aspergillopepsin II; proteinase A; proctase A; Aspergillus niger var. macrosporus aspartic proteinase +ec:3.4.23.20 penicillopepsin; peptidase A; Penicillium janthinellum aspartic proteinase; acid protease A; Penicillium citrinum acid proteinase; Penicillium cyclopium acid proteinase; Penicillium expansum acid proteinase; Penicillium janthinellum acid proteinase; Penicillium expansum aspartic proteinase; Penicillium aspartic proteinase; Penicillium caseicolum aspartic proteinase; Penicillium roqueforti acid proteinase; Penicillium duponti aspartic proteinase; Penicillium citrinum aspartic proteinase +ec:3.4.23.21 rhizopuspepsin; Rhizopus aspartic proteinase; neurase; Rhizopus acid protease; Rhizopus acid proteinase +ec:3.4.23.22 endothiapepsin; Endothia aspartic proteinase; Endothia acid proteinase; Endothia parasitica acid proteinase; Endothia parasitica aspartic proteinase +ec:3.4.23.23 mucorpepsin; Mucor rennin; Mucor aspartic proteinase; Mucor acid proteinase; Mucor acid protease; Mucor miehei aspartic proteinase; Mucor miehei aspartic protease; Mucor pusillus emporase; Fromase 100; Mucor pusillus rennin; Fromase 46TL; Mucor miehei rennin +ec:3.4.23.24 candidapepsin; Candida albicans aspartic proteinase; Candida albicans carboxyl proteinase; Candida albicans secretory acid proteinase; Candida olea acid proteinase; Candida aspartic proteinase; Candida olea aspartic proteinase +ec:3.4.23.25 saccharopepsin; yeast endopeptidase A; Saccharomyces aspartic proteinase; aspartic proteinase yscA (gene name); proteinase A; proteinase yscA (gene name); yeast proteinase A; Saccharomyces cerevisiae aspartic proteinase A; PRA +ec:3.4.23.26 rhodotorulapepsin; Rhodotorula aspartic proteinase; Cladosporium acid protease; Cladosporium acid proteinase; Paecilomyces proteinase; Cladosporium aspartic proteinase; Paecilomyces proteinase; Rhodotorula glutinis aspartic proteinase; Rhodotorula glutinis acid proteinase; Rhodotorula glutinis aspartic proteinase II; Rhodotorula acid proteinase +ec:3.4.23.27 Transferred to 3.4.21.103 +ec:3.4.23.28 acrocylindropepsin; Acrocylindrium proteinase; Acrocylindrium acid proteinase +ec:3.4.23.29 polyporopepsin; Polyporus aspartic proteinase; Irpex lacteus aspartic proteinase; Irpex lacteus carboxyl proteinase B +ec:3.4.23.30 pycnoporopepsin; proteinase Ia; Pycnoporus coccineus aspartic proteinase; Trametes acid proteinase +ec:3.4.23.31 scytalidopepsin A; Scytalidium aspartic proteinase A; Scytalidium lignicolum aspartic proteinase; Scytalidium lignicolum aspartic proteinase A-2; Scytalidium lignicolum aspartic proteinase A-I; Scytalidium lignicolum aspartic proteinase C; Scytalidium lignicolum carboxyl proteinase; Scytalidium lignicolum acid proteinase +ec:3.4.23.32 scytalidopepsin B; Scytalidium aspartic proteinase B; Ganoderma lucidum carboxyl proteinase; Ganoderma lucidum aspartic proteinase; Scytalidium lignicolum aspartic proteinase B; SLB +ec:3.4.23.33 Transferred to 3.4.21.101 +ec:3.4.23.34 cathepsin E; slow-moving proteinase; erythrocyte membrane aspartic proteinase; SMP; EMAP; non-pepsin proteinase; cathepsin D-like acid proteinase; cathepsin E-like acid proteinase; cathepsin D-type proteinase +ec:3.4.23.35 barrierpepsin; barrier proteinase; Bar proteinase +ec:3.4.23.36 signal peptidase II; premurein-leader peptidase; prolipoprotein signal peptidase; leader peptidase II; premurein leader proteinase +ec:3.4.23.37 Transferred to 3.4.21.100 +ec:3.4.23.38 plasmepsin I; aspartic hemoglobinase I; PFAPG; malaria aspartic hemoglobinase +ec:3.4.23.39 plasmepsin II; aspartic hemoglobinase II; PFAPD +ec:3.4.23.40 phytepsin +ec:3.4.23.41 yapsin 1; yeast aspartic protease 3; Yap3 gene product (Saccharomyces cerevisiae) +ec:3.4.23.42 thermopsin +ec:3.4.23.43 prepilin peptidase +ec:3.4.23.44 nodavirus endopeptidase; Black Beetle virus endopeptidase; Flock House virus endopeptidase +ec:3.4.23.45 memapsin 1; beta-secretase; beta-site Alzheimer's amyloid precursor protein cleaving enzyme 2 (BACE2); ASP1; Down region aspartic protease +ec:3.4.23.46 memapsin 2; beta-secretase; beta-site Alzheimer's amyloid precursor protein cleaving enzyme 1 (BACE1) +ec:3.4.23.47 HIV-2 retropepsin +ec:3.4.23.48 plasminogen activator Pla +ec:3.4.23.49 omptin; protease VII; protease A; gene ompT proteins; ompT protease; protein a; Pla; OmpT +ec:3.4.23.50 human endogenous retrovirus K endopeptidase; human endogenous retrovirus K10 endopeptidase; endogenous retrovirus HERV-K10 putative protease; human endogenous retrovirus K retropepsin; HERV K10 endopeptidase; HERV K10 retropepsin; HERV-K PR; HERV-K protease; HERV-K113 protease; human endogenous retrovirus K113 protease; human retrovirus K10 retropepsin +ec:3.4.23.51 HycI peptidase; HycI; HycE processing protein +ec:3.4.23.52 preflagellin peptidase; FlaK +ec:3.4.24.1 atrolysin A; Crotalus atrox metalloendopeptidase a; hemorrhagic toxin a; Crotalus atrox alpha-proteinase; Crotalus atrox proteinase; bothropasin +ec:3.4.24.2 Deleted entry +ec:3.4.24.3 microbial collagenase; Clostridium histolyticum collagenase; clostridiopeptidase A; collagenase A; collagenase I; Achromobacter iophagus collagenase; collagenase; aspergillopeptidase C; nucleolysin; azocollase; metallocollagenase; soycollagestin; Clostridium histolyticum proteinase A; clostridiopeptidase II; MMP-8; clostridiopeptidase I; collagen peptidase; collagen protease; collagenase MMP-1; metalloproteinase-1; kollaza; matrix metalloproteinase-1; MMP-1; matrix metalloproteinase-8; matirx metalloproteinase-18; interstitial collagenase +ec:3.4.24.4 Transferred to 3.4.24.40 +ec:3.4.24.5 Deleted entry +ec:3.4.24.6 leucolysin; Leucostoma neutral proteinase; Leucostoma peptidase A +ec:3.4.24.7 interstitial collagenase; vertebrate collagenase; matrix metalloproteinase 1 +ec:3.4.24.8 Transferred to 3.4.24.3 +ec:3.4.24.9 Deleted entry +ec:3.4.24.10 Deleted entry +ec:3.4.24.11 neprilysin; neutral endopeptidase; endopeptidase 24.11; kidney-brush-border neutral peptidase; enkephalinase (misleading); endopeptidase-2; CALLA (common acute lymphoblastic leukemia-associated) antigens; CALLA antigen; endopeptidase; membrane metalloendopeptidase; kidney-brush-border neutral endopeptidase; kidney-brush-border neutral proteinase; CALLA glycoprotein; CALLA; common acute lymphoblastic leukemia antigen; CALLA glycoproteins; common acute lymphoblastic leukemia-associated antigens; neutral metallendopeptidase; NEP; neutral endopeptidase 24.11; CD10; acute lymphoblastic leukemia antigen +ec:3.4.24.12 envelysin; sea-urchin-hatching proteinase; hatching enzyme; chorionase; chorion-digesting proteinase; chymostrypsin; sea urchin embryo hatching enzyme +ec:3.4.24.13 IgA-specific metalloendopeptidase; immunoglobulin A1 proteinase; IgA protease; IgA1-specific proteinase; IgA1 protease; IgA1 proteinase +ec:3.4.24.14 procollagen N-endopeptidase; procollagen N-terminal peptidase; procollagen aminopeptidase; aminoprocollagen peptidase; aminoterminal procollagen peptidase; procollagen aminoterminal protease; procollagen N-terminal proteinase; type I/II procollagen N-proteinase; type III procollagen +ec:3.4.24.15 thimet oligopeptidase; Pz-peptidase; soluble metalloendopeptidase; endo-oligopeptidase A; tissue-endopeptidase degrading collagenase-synthetic-substrate +ec:3.4.24.16 neurolysin; neurotensin endopeptidase; endopeptidase 24.16; endo-oligopeptidase B (proline-endopeptidase) +ec:3.4.24.17 stromelysin 1; matrix metalloproteinase 3; proteoglycanase; collagenase activating protein; procollagenase activator; transin; MMP-3; neutral proteoglycanase; stromelysin; collagen-activating protein +ec:3.4.24.18 meprin A; endopeptidase-2; meprin-a; meprin; N-benzoyl-L-tyrosyl-p-aminobenzoic acid hydrolase; PABA-peptide hydrolase; PPH +ec:3.4.24.19 procollagen C-endopeptidase; procollagen C-terminal proteinase; carboxyprocollagen peptidase; procollagen C-terminal peptidase; procollagen C-proteinase; procollagen carboxypeptidase; procollagen carboxy-terminal proteinase; procollagen peptidase +ec:3.4.24.20 peptidyl-Lys metalloendopeptidase; Armillaria mellea neutral proteinase; peptidyllysine metalloproteinase +ec:3.4.24.21 astacin; Astacus proteinase; crayfish small-molecule proteinase +ec:3.4.24.22 stromelysin 2; matrix metalloproteinase 10; transin 2; proteoglycanase 2 +ec:3.4.24.23 matrilysin; matrin; uterine metalloendopeptidase; matrix metalloproteinase 7; putative (or punctuated) metalloproteinase-1; matrix metalloproteinase pump 1; MMP 7; PUMP-1 proteinase; PUMP; metalloproteinase pump-1; putative metalloproteinase; MMP +ec:3.4.24.24 gelatinase A; 72-kDa gelatinase; matrix metalloproteinase 2; type IV collagenase (ambiguous); 3/4 collagenase (obsolete); matrix metalloproteinase 5 (obsolete); 72 kDa gelatinase type A; collagenase IV (ambiguous); collagenase type IV (ambiguous); MMP 2; type IV collagen metalloproteinase (ambiguous); type IV collagenase/gelatinase (ambiguous) +ec:3.4.24.25 vibriolysin; Aeromonas proteolytica neutral proteinase; aeromonolysin +ec:3.4.24.26 pseudolysin; Pseudomonas elastase; Pseudomonas aeruginosa neutral metalloproteinase +ec:3.4.24.27 thermolysin; Bacillus thermoproteolyticus neutral proteinase; thermoase; thermoase Y10; TLN +ec:3.4.24.28 bacillolysin; Bacillus metalloendopeptidase; Bacillus subtilis neutral proteinase; anilozyme P 10; Bacillus metalloproteinase; Bacillus neutral proteinase; megateriopeptidase +ec:3.4.24.29 aureolysin; Staphylococcus aureus neutral proteinase; Staphylococcus aureus neutral protease +ec:3.4.24.30 coccolysin; Streptococcus thermophilus intracellular proteinase; EM 19000 +ec:3.4.24.31 mycolysin; pronase component; Streptomyces griseus neutral proteinase; actinase E; SGNPI +ec:3.4.24.32 beta-lytic metalloendopeptidase; Myxobacter beta-lytic proteinase; achromopeptidase component; beta-lytic metalloproteinase; beta-lytic protease; Myxobacterium sorangium beta-lytic proteinase; Myxobacter495 beta-lytic proteinase +ec:3.4.24.33 peptidyl-Asp metalloendopeptidase; endoproteinase Asp-N; peptidyl-Asp metalloproteinase +ec:3.4.24.34 neutrophil collagenase; matrix metalloproteinase 8; PMNL collagenase; MMP-8 +ec:3.4.24.35 gelatinase B; 92-kDa gelatinase; matrix metalloproteinase 9; type V collagenase; 92-kDa type IV collagenase; macrophage gelatinase; 95 kDa type IV collagenase/gelatinase; collagenase IV (ambiguous); collagenase type IV (ambiguous); gelatinase MMP 9; MMP 9; type IV collagen metalloproteinase (ambiguous) +ec:3.4.24.36 leishmanolysin; promastigote surface endopeptidase; glycoprotein gp63; Leishmania metalloproteinase; surface acid proteinase; promastigote surface protease +ec:3.4.24.37 saccharolysin; proteinase yscD (gene name) (gene name); yeast cysteine proteinase D (Misleading); Saccharomyces cerevisiae proteinase yscD (gene name) +ec:3.4.24.38 gametolysin; autolysin; Chlamydomonas cell wall degrading protease; lysin; Chlamydomonas reinhardtii metalloproteinase; gamete lytic enzyme; gamete autolysin +ec:3.4.24.39 deuterolysin; Penicillium roqueforti protease II; microbial neutral proteinase II; acid metalloproteinase; neutral proteinase II; Penicillium roqueforti metalloproteinase +ec:3.4.24.40 serralysin; Pseudomonas aeruginosa alkaline proteinase; Escherichia freundii proteinase; Serratia marcescens extracellular proteinase; Serratia marcescens metalloproteinase; Pseudomonas aeruginosa alk. protease; Serratia marcescens metalloprotease +ec:3.4.24.41 atrolysin B; Crotalus atrox metalloendopeptidase b; hemorrhagic toxin b; Ht-b +ec:3.4.24.42 atrolysin C; Crotalus atrox metalloendopeptidase c; hemorrhagic toxin c and d +ec:3.4.24.43 atroxase +ec:3.4.24.44 atrolysin E; Crotalus atrox metalloendopeptidase e; hemorrhagic toxin e +ec:3.4.24.45 atrolysin F; Crotalus atrox metalloendopeptidase; hemorrhagic toxin f; Crotalus atrox metalloendopeptidase f +ec:3.4.24.46 adamalysin; Crotalus adamanteus metalloendopeptidase; proteinase I and II; Crotalus adamanteus venom proteinase II; adamalysin II +ec:3.4.24.47 horrilysin; Crotalus horridus metalloendopeptidase; hemorrhagic proteinase IV; Crotalus horridus horridus venom hemorrhagic proteinase +ec:3.4.24.48 ruberlysin; Crotalus ruber metalloendopeptidase II; hemorrhagic toxin II +ec:3.4.24.49 bothropasin; Bothrops jararaca venom metalloproteinase +ec:3.4.24.50 bothrolysin; Bothrops metalloendopeptidase J; J protease +ec:3.4.24.51 ophiolysin; Ophiophagus metalloendopeptidase +ec:3.4.24.52 trimerelysin I; Trimeresurus metalloendopeptidase I; hemorrhagic proteinase HR1A; hemorrhagic metalloproteinase HR1A; metalloproteinase HR1A +ec:3.4.24.53 trimerelysin II; Trimeresurus metalloendopeptidase II; proteinase H2; H2-proteinase +ec:3.4.24.54 mucrolysin; Trimeresurus metalloendopeptidase A; mucrotoxin A +ec:3.4.24.55 pitrilysin; Escherichia coli protease III; protease Pi; proteinase Pi; PTR; Escherichia coli metalloproteinase Pi +ec:3.4.24.56 insulysin; insulinase; insulin-degrading enzyme; insulin protease; insulin proteinase; insulin-degrading neutral proteinase; insulin-specific protease; insulin-glucagon protease; metalloinsulinase; IDE +ec:3.4.24.57 O-sialoglycoprotein endopeptidase; glycoprotease; glycophorin A proteinase; glycoproteinase; sialoglycoprotease; sialoglycoproteinase +ec:3.4.24.58 russellysin; Russell's viper venom factor X activator; RVV-X; blood-coagulation factor X activating enzyme; metalloproteinase RVV-x; Vipera russelli proteinase; Russell's viper blood coagulation factor X activator; RVV-V +ec:3.4.24.59 mitochondrial intermediate peptidase; mitochondrial intermediate precursor-processing proteinase; MIP +ec:3.4.24.60 dactylysin; peptide hormone inactivating endopeptidase; PHIE +ec:3.4.24.61 nardilysin; N-arginine dibasic convertase; NRD-convertase +ec:3.4.24.62 magnolysin; bovine neurosecretory granule protease cleaving pro-oxytocin/neurophysin; pro-oxytocin/neurophysin convertase; prooxyphysin proteinase; pro-oxytocin convertase +ec:3.4.24.63 meprin B; meprin-b +ec:3.4.24.64 mitochondrial processing peptidase; processing enhancing peptidase (for one of two subunits); mitochondrial protein precursor-processing proteinase; matrix peptidase; matrix processing peptidase; matrix processing proteinase; MPP +ec:3.4.24.65 macrophage elastase; metalloelastase; human macrophage metalloelastase (HME) +ec:3.4.24.66 choriolysin L; teleost hatching enzyme (component); low choriolytic enzyme (LCE) +ec:3.4.24.67 choriolysin H; teleost hatching enzyme (component); high choriolytic enzyme (HCE) +ec:3.4.24.68 tentoxilysin; tetanus neurotoxin +ec:3.4.24.69 bontoxilysin; botulinum neurotoxin; BoNT +ec:3.4.24.70 oligopeptidase A; 68000-M signalpeptide hydrolase +ec:3.4.24.71 endothelin-converting enzyme 1; endothelin-converting enzyme; ECE-1 +ec:3.4.24.72 fibrolase; fibrinolytic proteinase; Agkistrodon contortrix contortrix metalloproteinase; Agkistrodon contortrix contortrix venom metalloproteinase +ec:3.4.24.73 jararhagin; HF2-proteinase; JF1 +ec:3.4.24.74 fragilysin; Bacteroides fragilis (entero)toxin +ec:3.4.24.75 lysostaphin; glycyl-glycine endopeptidase +ec:3.4.24.76 flavastacin +ec:3.4.24.77 snapalysin; small neutral protease; SnpA gene product (Streptomyces lividans) +ec:3.4.24.78 gpr endopeptidase; germination proteinase +ec:3.4.24.79 pappalysin-1; insulin-like growth factor binding protein-4 protease; pregnancy-associated plasma protein-A +ec:3.4.24.80 membrane-type matrix metalloproteinase-1; matrix metalloproteinase 14 +ec:3.4.24.81 ADAM10 endopeptidase; Kuzbanian protein; myelin-associated disintegrin metalloproteinase +ec:3.4.24.82 ADAMTS-4 endopeptidase; aggrecanase-1 +ec:3.4.24.83 anthrax lethal factor endopeptidase; lethal toxin +ec:3.4.24.84 Ste24 endopeptidase +ec:3.4.24.85 S2P endopeptidase +ec:3.4.24.86 ADAM 17 endopeptidase; tumor necrosis factor alpha-converting enzyme; TACE +ec:3.4.24.87 ADAMTS13 endopeptidase; ADAMTS VWF cleaving metalloprotease; ADAMTS-13; ADAMTS13; vWF-cleaving protease; VWF-CP; vWF-degrading protease; Upshaw factor; von Willebrand factor cleaving protease; ADAMTS13 peptidase +ec:3.4.24.88 Transferred to 3.4.19.15 +ec:3.4.24.89 Pro-Pro endopeptidase; metalloprotease CD2830 +ec:3.4.25.1 proteasome endopeptidase complex; ingensin; macropain; multicatalytic endopeptidase complex; prosome; multicatalytic proteinase (complex); MCP; proteasome; large multicatalytic protease; multicatalytic proteinase; proteasome organelle; alkaline protease; 26S protease; tricorn proteinase; tricorn protease +ec:3.4.25.2 HslU---HslV peptidase; HslUV; HslV-HslU; HslV peptidase; ATP-dependent HslV-HslU proteinase; caseinolytic protease X; caseinolytic proteinase X; ClpXP ATP-dependent protease; ClpXP protease; ClpXP serine proteinase; Escherichia coli ClpXP serine proteinase; HslUV protease; HslUV proteinase; HslVU protease; HslVU proteinase; protease HslVU; proteinase HslUV +ec:3.4.99.1 Transferred to 3.4.23.28 +ec:3.4.99.2 Deleted entry +ec:3.4.99.3 Deleted entry +ec:3.4.99.4 Transferred to 3.4.23.12 +ec:3.4.99.5 Transferred to 3.4.24.3 +ec:3.4.99.6 Transferred to 3.4.24.21 +ec:3.4.99.7 Deleted entry +ec:3.4.99.8 Deleted entry +ec:3.4.99.9 Deleted entry +ec:3.4.99.10 Transferred to 3.4.24.56 +ec:3.4.99.11 Deleted entry +ec:3.4.99.12 Deleted entry +ec:3.4.99.13 Transferred to 3.4.24.32 +ec:3.4.99.14 Deleted entry +ec:3.4.99.15 Deleted entry +ec:3.4.99.16 Deleted entry +ec:3.4.99.17 Deleted entry +ec:3.4.99.18 Deleted entry +ec:3.4.99.19 Transferred to 3.4.23.15 +ec:3.4.99.20 Deleted entry +ec:3.4.99.21 Deleted entry +ec:3.4.99.22 Transferred to 3.4.24.29 +ec:3.4.99.23 Deleted entry +ec:3.4.99.24 Deleted entry +ec:3.4.99.25 Transferred to 3.4.23.21 +ec:3.4.99.26 Transferred to 3.4.21.68 +ec:3.4.99.27 Deleted entry +ec:3.4.99.28 Transferred to 3.4.21.60 +ec:3.4.99.29 Deleted entry +ec:3.4.99.30 Transferred to 3.4.24.20 +ec:3.4.99.31 Transferred to 3.4.24.15 +ec:3.4.99.32 Transferred to 3.4.24.20 +ec:3.4.99.33 Deleted entry +ec:3.4.99.34 Deleted entry +ec:3.4.99.35 Transferred to 3.4.23.36 +ec:3.4.99.36 Transferred to 3.4.21.89 +ec:3.4.99.37 Deleted entry +ec:3.4.99.38 Transferred to 3.4.23.17 +ec:3.4.99.39 Deleted entry +ec:3.4.99.40 Deleted entry +ec:3.4.99.41 Transferred to 3.4.24.64 +ec:3.4.99.42 Deleted entry +ec:3.4.99.43 Transferred to 3.4.23.42 +ec:3.4.99.44 Transferred to 3.4.24.55 +ec:3.4.99.45 Transferred to 3.4.24.56 +ec:3.4.99.46 Transferred to 3.4.25.1 +ec:3.5.1.1 asparaginase; asparaginase II; L-asparaginase; colaspase; elspar; leunase; crasnitin; alpha-asparaginase +ec:3.5.1.2 glutaminase; glutaminase I; L-glutaminase; glutamine aminohydrolase +ec:3.5.1.3 omega-amidase; alpha-keto acid-omega-amidase +ec:3.5.1.4 amidase; acylamidase; acylase (misleading); amidohydrolase (ambiguous); deaminase (ambiguous); fatty acylamidase; N-acetylaminohydrolase (ambiguous) +ec:3.5.1.5 urease +ec:3.5.1.6 beta-ureidopropionase; N-carbamoyl-beta-alanine amidohydrolase +ec:3.5.1.7 ureidosuccinase +ec:3.5.1.8 formylaspartate deformylase; formylaspartic formylase (formylase I, formylase II) +ec:3.5.1.9 arylformamidase; kynurenine formamidase; formylase; formylkynureninase; formylkynurenine formamidase; formamidase I; formamidase II +ec:3.5.1.10 formyltetrahydrofolate deformylase +ec:3.5.1.11 penicillin amidase; penicillin acylase; benzylpenicillin acylase; novozym 217; semacylase; alpha-acylamino-beta-lactam acylhydrolase; ampicillin acylase +ec:3.5.1.12 biotinidase; amidohydrolase biotinidase +ec:3.5.1.13 aryl-acylamidase; AAA-1; AAA-2; brain acetylcholinesterase (is associated with AAA-2); pseudocholinesterase (associated with arylacylamidase) +ec:3.5.1.14 N-acyl-aliphatic-L-amino acid amidohydrolase; aminoacylase 1; aminoacylase I; dehydropeptidase II; histozyme; hippuricase; benzamidase; acylase I; hippurase; amido acid deacylase; L-aminoacylase; acylase; aminoacylase; L-amino-acid acylase; alpha-N-acylaminoacid hydrolase; long acyl amidoacylase; short acyl amidoacylase; ACY1 (gene name); N-acyl-L-amino-acid amidohydrolase +ec:3.5.1.15 aspartoacylase; aminoacylase II; N-acetylaspartate amidohydrolase; acetyl-aspartic deaminase; acylase II +ec:3.5.1.16 acetylornithine deacetylase; acetylornithinase; N-acetylornithinase; 2-N-acetyl-L-ornithine amidohydrolase +ec:3.5.1.17 acyl-lysine deacylase; epsilon-lysine acylase; 6-N-acyl-L-lysine amidohydrolase +ec:3.5.1.18 succinyl-diaminopimelate desuccinylase; N-succinyl-L-alpha,epsilon-diaminopimelic acid deacylase +ec:3.5.1.19 nicotinamidase; nicotinamide deaminase; nicotinamide amidase; YNDase +ec:3.5.1.20 citrullinase; citrulline ureidase; citrulline hydrolase; L-citrulline 5-N-carbamoyldihydrolase +ec:3.5.1.21 N-acetyl-beta-alanine deacetylase +ec:3.5.1.22 pantothenase; pantothenate hydrolase; pantothenate amidohydrolase +ec:3.5.1.23 ceramidase; acylsphingosine deacylase; glycosphingolipid ceramide deacylase +ec:3.5.1.24 choloylglycine hydrolase; glycocholase; bile salt hydrolase; choloyltaurine hydrolase; 3alpha,7alpha,12alpha-trihydroxy-5beta-cholan-24-oylglycine amidohydrolase +ec:3.5.1.25 N-acetylglucosamine-6-phosphate deacetylase; acetylglucosamine phosphate deacetylase; acetylaminodeoxyglucosephosphate acetylhydrolase; 2-acetamido-2-deoxy-D-glucose-6-phosphate amidohydrolase +ec:3.5.1.26 N4-(beta-N-acetylglucosaminyl)-L-asparaginase; aspartylglucosylamine deaspartylase; aspartylglucosylaminase; aspartylglucosaminidase; aspartylglycosylamine amidohydrolase; N-aspartyl-beta-glucosaminidase; glucosylamidase; beta-aspartylglucosylamine amidohydrolase; 4-N-(beta-N-acetyl-D-glucosaminyl)-L-asparagine amidohydrolase +ec:3.5.1.27 Deleted entry +ec:3.5.1.28 N-acetylmuramoyl-L-alanine amidase; acetylmuramyl-L-alanine amidase; N-acetylmuramyl-L-alanine amidase; N-acylmuramyl-L-alanine amidase; acetylmuramoyl-alanine amidase; N-acetylmuramic acid L-alanine amidase; acetylmuramyl-alanine amidase; N-acetylmuramylalanine amidase; murein hydrolase; N-acetylmuramoyl-L-alanine amidase type I; N-acetylmuramoyl-L-alanine amidase type II +ec:3.5.1.29 2-(acetamidomethylene)succinate hydrolase; alpha-(N-acetylaminomethylene)succinic acid hydrolase +ec:3.5.1.30 5-aminopentanamidase; 5-aminovaleramidase; 5-aminonorvaleramidase +ec:3.5.1.31 formylmethionine deformylase +ec:3.5.1.32 hippurate hydrolase +ec:3.5.1.33 N-acetylglucosamine deacetylase; acetylaminodeoxyglucose acetylhydrolase; N-acetyl-D-glucosaminyl N-deacetylase +ec:3.5.1.34 Deleted entry +ec:3.5.1.35 D-glutaminase +ec:3.5.1.36 N-methyl-2-oxoglutaramate hydrolase; 5-hydroxy-N-methylpyroglutamate synthase +ec:3.5.1.37 Deleted entry +ec:3.5.1.38 glutamin-(asparagin-)ase; glutaminase-asparaginase; ansB (gene name); L-asparagine/L-glutamine amidohydrolase; L-ASNase/L-GLNase +ec:3.5.1.39 alkylamidase +ec:3.5.1.40 acylagmatine amidase; acylagmatine amidohydrolase; acylagmatine deacylase +ec:3.5.1.41 chitin deacetylase +ec:3.5.1.42 nicotinamide-nucleotide amidase; NMN deamidase; nicotinamide mononucleotide deamidase; nicotinamide mononucleotide amidohydrolase +ec:3.5.1.43 peptidyl-glutaminase; peptidoglutaminase I; peptideglutaminase; peptidoglutaminase +ec:3.5.1.44 protein-glutamine glutaminase; peptidoglutaminase II; glutaminyl-peptide glutaminase; destabilase; peptidylglutaminase II +ec:3.5.1.45 Deleted entry +ec:3.5.1.46 6-aminohexanoate-oligomer exohydrolase; 6-aminohexanoate-dimer hydrolase; nylB (gene name); 6-aminohexanoic acid oligomer hydrolase (ambiguous); N-(6-aminohexanoyl)-6-aminohexanoate amidohydrolase; nylon-6 hydrolase (ambiguous) +ec:3.5.1.47 N-acetyldiaminopimelate deacetylase; N-acetyl-L-diaminopimelic acid deacylase; N-acetyl-LL-diaminopimelate deacylase; 6-N-acetyl-LL-2,6-diaminoheptanedioate amidohydrolase +ec:3.5.1.48 acetylspermidine deacetylase; N8-monoacetylspermidine deacetylase; N8-acetylspermidine deacetylase; N-acetylspermidine deacetylase; N1-acetylspermidine amidohydrolase (incorrect); 8-N-acetylspermidine amidohydrolase +ec:3.5.1.49 formamidase +ec:3.5.1.50 pentanamidase; valeramidase +ec:3.5.1.51 4-acetamidobutyryl-CoA deacetylase; aminobutyryl-CoA thiolesterase; deacetylase-thiolesterase +ec:3.5.1.52 peptide-N4-(N-acetyl-beta-glucosaminyl)asparagine amidase; glycopeptide N-glycosidase; glycopeptidase; N-oligosaccharide glycopeptidase; N-glycanase; Jack-bean glycopeptidase; PNGase A; PNGase F +ec:3.5.1.53 N-carbamoylputrescine amidase; carbamoylputrescine hydrolase; NCP +ec:3.5.1.54 allophanate hydrolase; allophanate lyase; AtzF; TrzF +ec:3.5.1.55 long-chain-fatty-acyl-glutamate deacylase; long-chain aminoacylase; long-chain-fatty-acyl-glutamate deacylase; long-chain acylglutamate amidase; N-acyl-D-glutamate deacylase +ec:3.5.1.56 N,N-dimethylformamidase; dimethylformamidase; DMFase +ec:3.5.1.57 tryptophanamidase; tryptophan aminopeptidase; L-tryptophan aminopeptidase +ec:3.5.1.58 N-benzyloxycarbonylglycine hydrolase; benzyloxycarbonylglycine hydrolase; Nalpha-carbobenzoxyamino acid amidohydrolase; Nalpha-benzyloxycarbonyl amino acid urethane hydrolase; Nalpha-benzyloxycarbonyl amino acid urethane hydrolase I +ec:3.5.1.59 N-carbamoylsarcosine amidase; carbamoylsarcosine amidase +ec:3.5.1.60 N-(long-chain-acyl)ethanolamine deacylase; NAAA (gene name); N-acylethanolamine amidohydrolase; acylethanolamine amidase +ec:3.5.1.61 mimosinase +ec:3.5.1.62 acetylputrescine deacetylase +ec:3.5.1.63 4-acetamidobutyrate deacetylase +ec:3.5.1.64 Nalpha-benzyloxycarbonylleucine hydrolase; benzyloxycarbonylleucine hydrolase; Nalpha-benzyloxycarbonyl amino acid urethane hydrolase IV; alpha-N-benzyloxycarbonyl-L-leucine urethanehydrolase +ec:3.5.1.65 theanine hydrolase; L-theanine amidohydrolase; 5-N-ethyl-L-glutamine amidohydrolase +ec:3.5.1.66 2-(hydroxymethyl)-3-(acetamidomethylene)succinate hydrolase; compound B hydrolase; alpha-hydroxymethyl-alpha'-(N-acetylaminomethylene)succinic acid hydrolase +ec:3.5.1.67 4-methyleneglutaminase; 4-methyleneglutamine deamidase; 4-methyleneglutamine amidohydrolase +ec:3.5.1.68 N-formylglutamate deformylase; beta-citryl-L-glutamate hydrolase; formylglutamate deformylase; N-formylglutamate hydrolase; beta-citrylglutamate amidase; beta-citryl-L-glutamate amidohydrolase; beta-citryl-L-glutamate amidase; beta-citryl-L-glutamate-hydrolyzing enzyme +ec:3.5.1.69 glycosphingolipid deacylase; glycosphingolipid ceramide deacylase +ec:3.5.1.70 aculeacin-A deacylase; aculeacin A acylase +ec:3.5.1.71 N-feruloylglycine deacylase; N-feruloylglycine hydrolase +ec:3.5.1.72 D-benzoylarginine-4-nitroanilide amidase; benzoyl-D-arginine arylamidase; D-BAPA-ase +ec:3.5.1.73 carnitinamidase; L-carnitinamidase; carnitine amidase; L-carnitine amidase +ec:3.5.1.74 chenodeoxycholoyltaurine hydrolase +ec:3.5.1.75 urethanase; urethane hydrolase +ec:3.5.1.76 arylalkyl acylamidase; aralkyl acylamidase +ec:3.5.1.77 N-carbamoyl-D-amino-acid hydrolase; D-N-carbamoylase; N-carbamoylase (ambiguous); N-carbamoyl-D-amino acid hydrolase +ec:3.5.1.78 glutathionylspermidine amidase; glutathionylspermidine amidohydrolase (spermidine-forming) +ec:3.5.1.79 phthalyl amidase +ec:3.5.1.80 Deleted entry +ec:3.5.1.81 N-acyl-D-amino-acid deacylase +ec:3.5.1.82 N-acyl-D-glutamate deacylase +ec:3.5.1.83 N-acyl-D-aspartate deacylase +ec:3.5.1.84 biuret amidohydrolase; biuH (gene name) +ec:3.5.1.85 (S)-N-acetyl-1-phenylethylamine hydrolase +ec:3.5.1.86 mandelamide amidase; Pseudomonas mandelamide hydrolase +ec:3.5.1.87 N-carbamoyl-L-amino-acid hydrolase; N-carbamyl L-amino acid amidohydrolase; N-carbamoyl-L-amino acid amidohydrolase; L-N-carbamoylase; N-carbamoylase (ambiguous) +ec:3.5.1.88 peptide deformylase; N-formylmethionylaminoacyl-tRNA deformylase +ec:3.5.1.89 N-acetylglucosaminylphosphatidylinositol deacetylase; N-acetyl-D-glucosaminylphosphatidylinositol acetylhydrolase; N-acetylglucosaminylphosphatidylinositol de-N-acetylase; GlcNAc-PI de-N-acetylase; GlcNAc-PI deacetylase; acetylglucosaminylphosphatidylinositol deacetylase +ec:3.5.1.90 adenosylcobinamide hydrolase; CbiZ; AdoCbi amidohydrolase +ec:3.5.1.91 N-substituted formamide deformylase; NfdA +ec:3.5.1.92 pantetheine hydrolase; pantetheinase; vanin; vanin-1 +ec:3.5.1.93 glutaryl-7-aminocephalosporanic-acid acylase; 7beta-(4-carboxybutanamido)cephalosporanic acid acylase; cephalosporin C acylase; glutaryl-7-ACA acylase; CA; GCA; GA; cephalosporin acylase; glutaryl-7-aminocephalosporanic acid acylase; GL-7-ACA acylase +ec:3.5.1.94 gamma-glutamyl-gamma-aminobutyrate hydrolase; gamma-glutamyl-GABA hydrolase; PuuD; YcjL; 4-(gamma-glutamylamino)butanoate amidohydrolase; 4-(L-gamma-glutamylamino)butanoate amidohydrolase +ec:3.5.1.95 N-malonylurea hydrolase; ureidomalonase +ec:3.5.1.96 succinylglutamate desuccinylase; N2-succinylglutamate desuccinylase; SGDS; AstE +ec:3.5.1.97 acyl-homoserine-lactone acylase; acyl-homoserine lactone acylase; AHL-acylase; AiiD; N-acyl-homoserine lactone acylase; PA2385 protein; quorum-quenching AHL acylase; quorum-quenching enzyme; QuiP +ec:3.5.1.98 histone deacetylase; HDAC +ec:3.5.1.99 fatty acid amide hydrolase; FAAH; oleamide hydrolase; anandamide amidohydrolase +ec:3.5.1.100 (R)-amidase; R-stereospecific amidase; R-amidase +ec:3.5.1.101 L-proline amide hydrolase; S-stereoselective piperazine-2-tert-butylcarboxamide hydrolase; LaaA; L-amino acid amidase +ec:3.5.1.102 2-amino-5-formylamino-6-ribosylaminopyrimidin-4(3H)-one 5'-monophosphate deformylase; ArfB +ec:3.5.1.103 N-acetyl-1-D-myo-inositol-2-amino-2-deoxy-alpha-D-glucopyranoside deacetylase; MshB +ec:3.5.1.104 peptidoglycan-N-acetylglucosamine deacetylase; HP310; PgdA; SpPgdA; BC1960; peptidoglycan deacetylase; N-acetylglucosamine deacetylase; peptidoglycan GlcNAc deacetylase; peptidoglycan N-acetylglucosamine deacetylase; PG N-deacetylase +ec:3.5.1.105 chitin disaccharide deacetylase; chitobiose amidohydolase; COD; chitin oligosaccharide deacetylase; chitin oligosaccharide amidohydolase; 2-(acetylamino)-4-O-[2-(acetylamino)-2-deoxy-beta-D-glucopyranosyl]-2-deoxy-D-glucopyranose acetylhydrolase +ec:3.5.1.106 N-formylmaleamate deformylase; NicD +ec:3.5.1.107 maleamate amidohydrolase; NicF +ec:3.5.1.108 UDP-3-O-acyl-N-acetylglucosamine deacetylase; LpxC protein; LpxC enzyme; LpxC deacetylase; deacetylase LpxC; UDP-3-O-acyl-GlcNAc deacetylase; UDP-3-O-((R)-3-hydroxymyristoyl)-N-acetylglucosamine deacetylase; UDP-(3-O-acyl)-N-acetylglucosamine deacetylase; UDP-3-O-(R-3-hydroxymyristoyl)-N-acetylglucosamine deacetylase; UDP-(3-O-(R-3-hydroxymyristoyl))-N-acetylglucosamine deacetylase; UDP-3-O-[(3R)-3-hydroxymyristoyl]-N-acetylglucosamine amidohydrolase +ec:3.5.1.109 sphingomyelin deacylase; SM deacylase; GcSM deacylase; glucosylceramide sphingomyelin deacylase; sphingomyelin glucosylceramide deacylase; SM glucosylceramide GCer deacylase; SM-GCer deacylase; SMGCer deacylase +ec:3.5.1.110 ureidoacrylate amidohydrolase; peroxyureidoacrylate/ureidoacrylate amidohydrolase; rutB (gene name); (Z)-3-ureidoacrylate peracid amidohydrolase +ec:3.5.1.111 2-oxoglutaramate amidase; omega-amidase (ambiguous) +ec:3.5.1.112 2'-N-acetylparomamine deacetylase; btrD (gene name); neoL (gene name); kanN (gene name) +ec:3.5.1.113 2'''-acetyl-6'''-hydroxyneomycin C deacetylase; neoL (gene name) +ec:3.5.1.114 N-acyl-aromatic-L-amino acid amidohydrolase; aminoacylase 3; aminoacylase III; ACY3 (gene name) +ec:3.5.1.115 mycothiol S-conjugate amidase; MCA +ec:3.5.1.116 ureidoglycolate amidohydrolase; ureidoglycolate hydrolase; UAH (gene name) +ec:3.5.1.117 6-aminohexanoate-oligomer endohydrolase; endo-type 6-aminohexanoate oligomer hydrolase; Ahx endo-type-oligomer hydrolase; 6-aminohexanoate oligomer hydrolase; Ahx-oligomer hydrolase; nylon hydrolase; nylon-oligomer hydrolase; NylC; nylon-6 hydrolase (ambiguous) +ec:3.5.1.118 gamma-glutamyl hercynylcysteine S-oxide hydrolase; EgtC +ec:3.5.1.119 Pup amidohydrolase; dop (gene name); Pup deamidase; depupylase/deamidase; DPUP; depupylase +ec:3.5.1.120 Transferred to 3.5.99.11 +ec:3.5.1.121 protein N-terminal asparagine amidohydrolase; NTAN1 (gene name) +ec:3.5.1.122 protein N-terminal glutamine amidohydrolase; NTAQ1 (gene name) +ec:3.5.1.123 gamma-glutamylanilide hydrolase; atdA2 (gene name) +ec:3.5.1.124 protein deglycase; PARK7 (gene name); DJ-1 protein; yhbO (gene name); yajL (gene name); glyoxylase III (incorrect) +ec:3.5.1.125 N2-acetyl-L-2,4-diaminobutanoate deacetylase; doeB (gene name) +ec:3.5.1.126 oxamate amidohydrolase; HpxW +ec:3.5.1.127 jasmonoyl-L-amino acid hydrolase; IAR3 (gene name); ILL4 (gene name); ILL6 (gene name) +ec:3.5.1.128 deaminated glutathione amidase; dGSH deaminase; NIT1 (gene name) +ec:3.5.1.129 N5-(cytidine 5'-diphosphoramidyl)-L-glutamine hydrolase; N5-(cytidine 5'-diphosphoramidyl)-L-glutamine deacylase +ec:3.5.1.130 [amino group carrier protein]-lysine hydrolase; lysK (gene name) +ec:3.5.1.131 1-carboxybiuret hydrolase; atzEG (gene names) +ec:3.5.1.132 [amino group carrier protein]-ornithine hydrolase; lysK (gene name) +ec:3.5.1.133 Nalpha-acyl-L-glutamine aminoacylase; agaA (gene name); axillary malodor releasing enzyme; AMRE +ec:3.5.1.134 (indol-3-yl)acetyl-L-aspartate hydrolase; indole-3-acetyl-L-aspartate hydrolase; iaaspH (gene name) +ec:3.5.1.135 N4-acetylcytidine amidohydrolase; yqfB (gene name) +ec:3.5.1.136 N,N'-diacetylchitobiose non-reducing end deacetylase; diacetylchitobiose deacetylase (ambiguous); cda (gene name) +ec:3.5.1.137 N-methylcarbamate hydrolase; mcbA (gene name); cehA (gene name); cfdJ (gene name); carbaryl hydrolase; carbofuran hydrolase +ec:3.5.2.1 barbiturase +ec:3.5.2.2 dihydropyrimidinase; hydantoinase; hydropyrimidine hydrase; hydantoin peptidase; pyrimidine hydrase; D-hydantoinase +ec:3.5.2.3 dihydroorotase; carbamoylaspartic dehydrase; dihydroorotate hydrolase +ec:3.5.2.4 carboxymethylhydantoinase; hydantoin hydrolase +ec:3.5.2.5 allantoinase +ec:3.5.2.6 beta-lactamase; penicillinase; cephalosporinase; neutrapen; penicillin beta-lactamase; exopenicillinase; ampicillinase; penicillin amido-beta-lactamhydrolase; penicillinase I; penicillinase II; beta-lactamase I; beta-lactamase II; beta-lactamase III; beta-lactamase A; beta-lactamase B; beta-lactamase C; beta-lactamase AME I; cephalosporin-beta-lactamase; carbapenemase +ec:3.5.2.7 imidazolonepropionase; 4(5)-imidazolone-5(4)-propionic acid hydrolase; imidazolone propionic acid hydrolase +ec:3.5.2.8 Deleted entry +ec:3.5.2.9 5-oxoprolinase (ATP-hydrolysing); pyroglutamase (ATP-hydrolysing); oxoprolinase; pyroglutamase; 5-oxoprolinase; pyroglutamate hydrolase; pyroglutamic hydrolase; L-pyroglutamate hydrolase; 5-oxo-L-prolinase; pyroglutamase +ec:3.5.2.10 creatininase; creatinine hydrolase +ec:3.5.2.11 L-lysine-lactamase; L-alpha-aminocaprolactam hydrolase; L-lysinamidase; L-lysine-1,6-lactam lactamhydrolase +ec:3.5.2.12 6-aminohexanoate-cyclic-dimer hydrolase +ec:3.5.2.13 2,5-dioxopiperazine hydrolase; cyclo(Gly-Gly) hydrolase; cyclo(glycylglycine) hydrolase +ec:3.5.2.14 N-methylhydantoinase (ATP-hydrolysing); N-methylhydantoin amidohydrolase; methylhydantoin amidase; N-methylhydantoin hydrolase; N-methylhydantoinase; N-methylimidazolidine-2,4-dione amidohydrolase (ATP-hydrolysing) +ec:3.5.2.15 cyanuric acid amidohydrolase; atzD (gene name); trzD (gene name) +ec:3.5.2.16 maleimide hydrolase; imidase; cyclic imide hydrolase; cyclic-imide amidohydrolase (decyclicizing) [misprint]; cyclic-imide amidohydrolase (decyclizing) +ec:3.5.2.17 hydroxyisourate hydrolase; HIUHase; 5-hydroxyisourate hydrolase +ec:3.5.2.18 enamidase +ec:3.5.2.19 streptothricin hydrolase; sttH (gene name) +ec:3.5.2.20 isatin hydrolase +ec:3.5.3.1 arginase; arginine amidinase; canavanase; L-arginase; arginine transamidinase +ec:3.5.3.2 guanidinoacetase; glycocyaminase +ec:3.5.3.3 creatinase +ec:3.5.3.4 allantoicase +ec:3.5.3.5 formimidoylaspartate deiminase; formiminoaspartate deiminase +ec:3.5.3.6 arginine deiminase; arginine dihydrolase; citrulline iminase; L-arginine deiminase +ec:3.5.3.7 guanidinobutyrase; gamma-guanidobutyrase; 4-guanidinobutyrate amidinobutyrase; gamma-guanidinobutyrate amidinohydrolase; G-Base; GBH; guanidinobutyrate ureahydrolase +ec:3.5.3.8 formimidoylglutamase; formiminoglutamase; N-formiminoglutamate hydrolase; N-formimino-L-glutamate formiminohydrolase +ec:3.5.3.9 allantoate deiminase; allantoate amidohydrolase +ec:3.5.3.10 D-arginase +ec:3.5.3.11 agmatinase; agmatine ureohydrolase; SpeB +ec:3.5.3.12 agmatine deiminase; agmatine amidinohydrolase +ec:3.5.3.13 formimidoylglutamate deiminase; formiminoglutamate deiminase; formiminoglutamic iminohydrolase +ec:3.5.3.14 amidinoaspartase; amidinoaspartic amidinohydrolase +ec:3.5.3.15 protein-arginine deiminase; peptidylarginine deiminase; PAD +ec:3.5.3.16 methylguanidinase; methylguanidine hydrolase +ec:3.5.3.17 guanidinopropionase; GPase; GPH +ec:3.5.3.18 dimethylargininase; dimethylarginine dimethylaminohydrolase; NG,NG-dimethylarginine dimethylaminohydrolase; NG,NG-dimethyl-L-arginine dimethylamidohydrolase; omega,omega'-di-N-methyl-L-arginine dimethylamidohydrolase; Nomega,Nomega'-methyl-L-arginine dimethylamidohydrolase (incorrect) +ec:3.5.3.19 Transferred to 3.5.1.116 +ec:3.5.3.20 diguanidinobutanase +ec:3.5.3.21 methylenediurea deaminase; methylenediurease +ec:3.5.3.22 proclavaminate amidinohydrolase; PAH; proclavaminate amidino hydrolase +ec:3.5.3.23 N-succinylarginine dihydrolase; N2-succinylarginine dihydrolase; arginine succinylhydrolase; SADH; AruB; AstB; 2-N-succinyl-L-arginine iminohydrolase (decarboxylating) +ec:3.5.3.24 N1-aminopropylagmatine ureohydrolase +ec:3.5.3.25 Nomega-hydroxy-L-arginine amidinohydrolase; dcsB (gene name) +ec:3.5.3.26 (S)-ureidoglycine aminohydrolase; UGlyAH; UGHY; ylbA (gene name) +ec:3.5.4.1 cytosine deaminase; isocytosine deaminase +ec:3.5.4.2 adenine deaminase; adenase; adenine aminase; ADase +ec:3.5.4.3 guanine deaminase; guanase; guanine aminase; GAH +ec:3.5.4.4 adenosine deaminase; deoxyadenosine deaminase +ec:3.5.4.5 cytidine deaminase; cytosine nucleoside deaminase; (deoxy)cytidine deaminase; cdd (gene name); CDA (gene name) +ec:3.5.4.6 AMP deaminase; adenylic acid deaminase; AMP aminase; adenylic deaminase; adenylate deaminase; 5-AMP deaminase; adenosine 5-monophosphate deaminase; 5-adenylate deaminase; adenyl deaminase; 5-adenylic acid deaminase; adenosine monophosphate deaminase; adenylate aminohydrolase; adenylate desaminase; adenosine 5-phosphate aminohydrolase; 5-adenylate deaminase +ec:3.5.4.7 ADP deaminase; adenosine diphosphate deaminase; adenosinepyrophosphate deaminase +ec:3.5.4.8 aminoimidazolase; 4-aminoimidazole hydrolase; 4-aminoimidazole deaminase +ec:3.5.4.9 methenyltetrahydrofolate cyclohydrolase; Citrovorum factor cyclodehydrase; cyclohydrolase; formyl-methenyl-methylenetetrahydrofolate synthetase (combined); 5,10-methenyltetrahydrofolate 5-hydrolase (decyclizing) +ec:3.5.4.10 IMP cyclohydrolase; inosinicase; inosinate cyclohydrolase; IMP 1,2-hydrolase (decyclizing) +ec:3.5.4.11 pterin deaminase; acrasinase +ec:3.5.4.12 dCMP deaminase; deoxycytidylate deaminase; deoxy-CMP-deaminase; deoxycytidylate aminohydrolase; deoxycytidine monophosphate deaminase; deoxycytidine-5'-phosphate deaminase; deoxycytidine-5'-monophosphate aminohydrolase +ec:3.5.4.13 dCTP deaminase; deoxycytidine triphosphate deaminase; 5-methyl-dCTP deaminase +ec:3.5.4.14 Transferred to 3.5.4.5 +ec:3.5.4.15 guanosine deaminase; guanosine aminase +ec:3.5.4.16 GTP cyclohydrolase I; GTP cyclohydrolase; guanosine triphosphate cyclohydrolase; guanosine triphosphate 8-deformylase; dihydroneopterin triphosphate synthase; GTP 8-formylhydrolase +ec:3.5.4.17 adenosine-phosphate deaminase; adenylate deaminase; adenine nucleotide deaminase; adenosine (phosphate) deaminase +ec:3.5.4.18 ATP deaminase; adenosine triphosphate deaminase +ec:3.5.4.19 phosphoribosyl-AMP cyclohydrolase; PRAMP-cyclohydrolase; phosphoribosyladenosine monophosphate cyclohydrolase; 1-(5-phospho-D-ribosyl)-AMP 1,6-hydrolase +ec:3.5.4.20 pyrithiamine deaminase; 1-(4-amino-2-methylpyrimid-5-ylmethyl)-3-(beta-hydroxyethyl)-2-methylpyridinium-bromide aminohydrolase +ec:3.5.4.21 creatinine deaminase; creatinine hydrolase; creatinine desiminase +ec:3.5.4.22 1-pyrroline-4-hydroxy-2-carboxylate deaminase; HPC deaminase; 1-pyrroline-4-hydroxy-2-carboxylate aminohydrolase (decyclizing) +ec:3.5.4.23 blasticidin-S deaminase +ec:3.5.4.24 sepiapterin deaminase +ec:3.5.4.25 GTP cyclohydrolase II; guanosine triphosphate cyclohydrolase II; GTP-8-formylhydrolase; ribA (gene name); GTP 7,8-8,9-dihydrolase (diphosphate-forming) +ec:3.5.4.26 diaminohydroxyphosphoribosylaminopyrimidine deaminase +ec:3.5.4.27 methenyltetrahydromethanopterin cyclohydrolase; 5,10-methenyltetrahydromethanopterin cyclohydrolase; N5,N10-methenyltetrahydromethanopterin cyclohydrolase; methenyl-H4MPT cyclohydrolase; 5,10-methenyltetrahydromethanopterin 10-hydrolase (decyclizing) +ec:3.5.4.28 S-adenosylhomocysteine deaminase; adenosylhomocysteine deaminase +ec:3.5.4.29 GTP cyclohydrolase IIa +ec:3.5.4.30 dCTP deaminase (dUMP-forming) +ec:3.5.4.31 S-methyl-5'-thioadenosine deaminase; MTA deaminase; 5-methylthioadenosine deaminase +ec:3.5.4.32 8-oxoguanine deaminase; 8-OGD +ec:3.5.4.33 tRNA(adenine34) deaminase; tRNA:A34 deaminase; tadA protein; ADAT2-ADAT3 complex; TADA; tRNA adenosine deaminase arginine; AtTadA; tadA/ecADAT2; tRNA A:34 deaminase +ec:3.5.4.34 tRNAAla(adenine37) deaminase; ADAT1; Tad1p +ec:3.5.4.35 tRNA(cytosine8) deaminase; CDAT8 +ec:3.5.4.36 mRNA(cytosine6666) deaminase; APOBEC-1 (catalytic component of an RNA-editing complex); APOBEC1 (catalytic subunit); apolipoprotein B mRNA-editing enzyme 1 (catalytic component of an RNA-editing complex); apoB mRNA-editing enzyme catalytic polypeptide 1 (catalytic component of an RNA-editing complex); apoB mRNA editing complex; apolipoprotein B mRNA editing enzyme; REPR +ec:3.5.4.37 double-stranded RNA adenine deaminase; ADAR; double-stranded RNA adenosine deaminase; dsRAD; dsRNA adenosine deaminase; DRADA1; double-stranded RNA-specific adenosine deaminase +ec:3.5.4.38 single-stranded DNA cytosine deaminase; AID; activation-induced deaminase; AICDA (gene name); activation-induced cytidine deaminase +ec:3.5.4.39 GTP cyclohydrolase IV; MptA; GTP cyclohydrolase MptA +ec:3.5.4.40 aminodeoxyfutalosine deaminase; AFL deaminase; aminofutalosine deaminase; mqnX (gene name) +ec:3.5.4.41 5'-deoxyadenosine deaminase; MJ1541 (gene name); DadD +ec:3.5.4.42 N-isopropylammelide isopropylaminohydrolase; atzC (gene name) +ec:3.5.4.43 hydroxydechloroatrazine ethylaminohydrolase; atzB (gene name); 2,4-dihydroxy-6-(isopropylamino)-1,3,5-triazine ethylaminohydrolase +ec:3.5.4.44 ectoine hydrolase; doeA (gene name) +ec:3.5.4.45 melamine deaminase; triA (gene name) +ec:3.5.4.46 cAMP deaminase; cyclic adenylate deaminase; CadD +ec:3.5.5.1 nitrilase; acetonitrilase; benzonitrilase +ec:3.5.5.2 ricinine nitrilase +ec:3.5.5.3 Transferred to 4.2.1.104 +ec:3.5.5.4 cyanoalanine nitrilase; beta-cyanoalanine nitrilase +ec:3.5.5.5 arylacetonitrilase +ec:3.5.5.6 bromoxynil nitrilase +ec:3.5.5.7 aliphatic nitrilase +ec:3.5.5.8 thiocyanate hydrolase +ec:3.5.99.1 riboflavinase +ec:3.5.99.2 aminopyrimidine aminohydrolase; thiaminase (ambiguous); thiaminase II; tenA (gene name) +ec:3.5.99.3 Transferred to 3.5.4.43 +ec:3.5.99.4 Transferred to 3.5.4.42 +ec:3.5.99.5 2-aminomuconate deaminase; amnD (gene name); nbaF (gene name) +ec:3.5.99.6 glucosamine-6-phosphate deaminase; glucosaminephosphate isomerase (ambiguous); glucosamine-6-phosphate isomerase (ambiguous); phosphoglucosaminisomerase (ambiguous); glucosamine phosphate deaminase; aminodeoxyglucosephosphate isomerase (ambiguous); phosphoglucosamine isomerase (ambiguous); 2-amino-2-deoxy-D-glucose-6-phosphate aminohydrolase (ketol isomerizing) +ec:3.5.99.7 1-aminocyclopropane-1-carboxylate deaminase; 1-aminocyclopropane-1-carboxylate endolyase (deaminating); ACC deaminase; 1-aminocyclopropane carboxylic acid deaminase +ec:3.5.99.8 5-nitroanthranilic acid aminohydrolase; naaA (gene name); 5NAA deaminase +ec:3.5.99.9 2-nitroimidazole nitrohydrolase; NnhA; 2NI nitrohydrolase; 2NI denitrase +ec:3.5.99.10 2-iminobutanoate/2-iminopropanoate deaminase; yjgF (gene name); ridA (gene name); enamine/imine deaminase (ambiguous) +ec:3.5.99.11 2-aminomuconate deaminase (2-hydroxymuconate-forming); cnbZ (gene name) +ec:3.6.1.1 inorganic diphosphatase +ec:3.6.1.2 trimetaphosphatase; inorganic trimetaphosphatase +ec:3.6.1.3 Deleted entry +ec:3.6.1.4 Deleted entry +ec:3.6.1.5 apyrase; ATP-diphosphatase (ambiguous); adenosine diphosphatase; ADPase; ATP diphosphohydrolase [ambiguous] +ec:3.6.1.6 nucleoside diphosphate phosphatase; nucleoside-diphosphatase; thiaminpyrophosphatase; UDPase; inosine diphosphatase; adenosine diphosphatase; IDPase; ADPase; adenosinepyrophosphatase; guanosine diphosphatase; guanosine 5'-diphosphatase; inosine 5'-diphosphatase; uridine diphosphatase; uridine 5'-diphosphatase; type B nucleoside diphosphatase; GDPase; CDPase; nucleoside 5'-diphosphatase; type L nucleoside diphosphatase; NDPase; nucleoside diphosphate phosphohydrolase +ec:3.6.1.7 acylphosphatase; acetylphosphatase; 1,3-diphosphoglycerate phosphatase; acetic phosphatase; Ho 1-3; GP 1-3 +ec:3.6.1.8 ATP diphosphatase; ATPase (ambiguous); ATP pyrophosphatase; adenosine triphosphate pyrophosphatase; ATP diphosphohydrolase (ambiguous) +ec:3.6.1.9 nucleotide diphosphatase; ENPP1 (gene name); nucleotide pyrophosphatase; nucleotide-sugar pyrophosphatase; nucleoside-triphosphate diphosphatase +ec:3.6.1.10 endopolyphosphatase; polyphosphate depolymerase; metaphosphatase; polyphosphatase; polymetaphosphatase +ec:3.6.1.11 exopolyphosphatase; metaphosphatase; acid phosphoanhydride phosphohydrolase; Gra-Pase +ec:3.6.1.12 dCTP diphosphatase; DCTPP1 (gene name); deoxycytidine-triphosphatase; dCTPase; dCTP pyrophosphatase; deoxycytidine triphosphatase; deoxy-CTPase +ec:3.6.1.13 ADP-ribose diphosphatase; ADPribose pyrophosphatase; adenosine diphosphoribose pyrophosphatase; ADPR-PPase; ADP-ribose ribophosphohydrolase +ec:3.6.1.14 adenosine-tetraphosphatase +ec:3.6.1.15 nucleoside-triphosphate phosphatase; nucleoside-triphosphatase; nucleoside triphosphate phosphohydrolase; nucleoside-5-triphosphate phosphohydrolase; nucleoside 5-triphosphatase; unspecific diphosphate phosphohydrolase +ec:3.6.1.16 CDP-glycerol diphosphatase; CDP-glycerol pyrophosphatase; cytidine diphosphoglycerol pyrophosphatase +ec:3.6.1.17 bis(5'-nucleosyl)-tetraphosphatase (asymmetrical); bis(5'-guanosyl)-tetraphosphatase; bis(5'-adenosyl)-tetraphosphatase; diguanosinetetraphosphatase (asymmetrical); dinucleosidetetraphosphatase (asymmetrical); diadenosine P1,P4-tetraphosphatase; dinucleoside tetraphosphatase; 1-P,4-P-bis(5'-nucleosyl)-tetraphosphate nucleotidohydrolase +ec:3.6.1.18 FAD diphosphatase; FAD pyrophosphatase; riboflavin adenine dinucleotide pyrophosphatase; flavin adenine dinucleotide pyrophosphatase; riboflavine adenine dinucleotide pyrophosphatase; flavine adenine dinucleotide pyrophosphatase +ec:3.6.1.19 Transferred to 3.6.1.9 +ec:3.6.1.20 5'-acylphosphoadenosine hydrolase; 5-phosphoadenosine hydrolase +ec:3.6.1.21 ADP-sugar diphosphatase; ADP-sugar pyrophosphatase; adenosine diphosphosugar pyrophosphatase +ec:3.6.1.22 NAD+ diphosphatase; NPY1 (gene name); nudC (gene name); NUDT7 (gene name); nicotinamide adenine dinucleotide pyrophosphatase; NADP pyrophosphatase; NADH pyrophosphatase; NAD+ phosphohydrolase +ec:3.6.1.23 dUTP diphosphatase; DUT (gene name); deoxyuridine-triphosphatase; dUTPase; dUTP pyrophosphatase; desoxyuridine 5'-triphosphate nucleotidohydrolase; desoxyuridine 5'-triphosphatase +ec:3.6.1.24 nucleoside phosphoacylhydrolase +ec:3.6.1.25 triphosphatase; inorganic triphosphatase +ec:3.6.1.26 CDP-diacylglycerol diphosphatase; cytidine diphosphodiacylglycerol pyrophosphatase; CDP diacylglycerol hydrolase +ec:3.6.1.27 undecaprenyl-diphosphate phosphatase; C55-isoprenyl diphosphatase; C55-isoprenyl pyrophosphatase; isoprenyl pyrophosphatase (ambiguous); undecaprenyl pyrophosphate phosphatase; undecaprenyl pyrophosphate pyrophosphatase; UPP phosphatase; Und-PP pyrophosphatase; UppP (ambiguous); BacA; undecaprenyl-diphosphate phosphohydrolase; undecaprenyl-diphosphatase +ec:3.6.1.28 thiamine-triphosphatase +ec:3.6.1.29 bis(5'-adenosyl)-triphosphatase; dinucleosidetriphosphatase; diadenosine 5,5-P1,P3-triphosphatase; 1-P,3-P-bis(5'-adenosyl)-triphosphate adenylohydrolase +ec:3.6.1.30 Deleted entry +ec:3.6.1.31 phosphoribosyl-ATP diphosphatase; phosphoribosyl-ATP pyrophosphatase; phosphoribosyladenosine triphosphate pyrophosphatase; 1-(5-phosphoribosyl)-ATP diphosphohydrolase +ec:3.6.1.32 Transferred to 3.6.4.1 +ec:3.6.1.33 Transferred to 3.6.4.2 +ec:3.6.1.34 Transferred to 3.6.3.14 +ec:3.6.1.35 Transferred to 3.6.3.6 +ec:3.6.1.36 Transferred to 3.6.3.10 +ec:3.6.1.37 Transferred to 3.6.3.9 +ec:3.6.1.38 Transferred to 3.6.3.8 +ec:3.6.1.39 thymidine-triphosphatase; thymidine triphosphate nucleotidohydrolase; dTTPase; deoxythymidine-5'-triphosphatase +ec:3.6.1.40 guanosine-5'-triphosphate,3'-diphosphate phosphatase; pppGpp 5'-phosphohydrolase; guanosine 5'-triphosphate-3'-diphosphate 5'-phosphohydrolase; guanosine pentaphosphatase; guanosine pentaphosphate phosphatase; guanosine 5'-triphosphate 3'-diphosphate 5'-phosphatase; guanosine pentaphosphate phosphohydrolase +ec:3.6.1.41 bis(5'-nucleosyl)-tetraphosphatase (symmetrical); diadenosinetetraphosphatase (symmetrical); dinucleosidetetraphosphatasee (symmetrical); symmetrical diadenosine tetraphosphate hydrolase; adenosine tetraphosphate phosphodiesterase; Ap4A hydrolase; bis(5'-adenosyl) tetraphosphatase; diadenosine tetraphosphate hydrolase; diadenosine polyphosphate hydrolase; diadenosine 5',5'''-P1,P4-tetraphosphatase; diadenosinetetraphosphatase (symmetrical); 1-P,4-P-bis(5'-nucleosyl)-tetraphosphate nucleosidebisphosphohydrolase +ec:3.6.1.42 guanosine-diphosphatase; GDPase +ec:3.6.1.43 dolichyldiphosphatase; dolichol diphosphatase; dolichyl pyrophosphatase; dolichyl pyrophosphate phosphatase; dolichyl diphosphate phosphohydrolase; Dol-P-P phosphohydrolase +ec:3.6.1.44 oligosaccharide-diphosphodolichol diphosphatase; oligosaccharide-diphosphodolichol pyrophosphatase +ec:3.6.1.45 UDP-sugar diphosphatase; nucleosidediphosphate-sugar pyrophosphatase; nucleosidediphosphate-sugar diphosphatase; UDP-sugar hydrolase; UDP-sugar pyrophosphatase +ec:3.6.1.46 Transferred to 3.6.5.1 +ec:3.6.1.47 Transferred to 3.6.5.2 +ec:3.6.1.48 Transferred to 3.6.5.3 +ec:3.6.1.49 Transferred to 3.6.5.4 +ec:3.6.1.50 Transferred to 3.6.5.5 +ec:3.6.1.51 Transferred to 3.6.5.6 +ec:3.6.1.52 diphosphoinositol-polyphosphate diphosphatase; diphosphoinositol-polyphosphate phosphohydrolase; DIPP +ec:3.6.1.53 Mn2+-dependent ADP-ribose/CDP-alcohol diphosphatase; Mn2+-dependent ADP-ribose/CDP-alcohol pyrophosphatase; ADPRibase-Mn +ec:3.6.1.54 UDP-2,3-diacylglucosamine diphosphatase; lpxH (gene name); UDP-2,3-diacylglucosamine hydrolase; UDP-2,3-diacylglucosamine pyrophosphatase; ybbF (gene name); UDP-2,3-bis[(3R)-3-hydroxymyristoyl]-alpha-D-glucosamine 2,3-bis[(3R)-3-hydroxymyristoyl]-beta-D-glucosaminyl 1-phosphate phosphohydrolase (incorrect); UDP-2-N,3-O-bis[(3R)-3-hydroxytetradecanoyl]-alpha-D-glucosamine 2-N,3-O-bis[(3R)-3-hydroxytetradecanoyl]-alpha-D-glucosaminyl 1-phosphate phosphohydrolase +ec:3.6.1.55 8-oxo-dGTP diphosphatase; MutT; 7,8-dihydro-8-oxoguanine triphosphatase; 8-oxo-dGTPase; 7,8-dihydro-8-oxo-dGTP pyrophosphohydrolase +ec:3.6.1.56 2-hydroxy-dATP diphosphatase; NUDT1; MTH1; MTH2; oxidized purine nucleoside triphosphatase; (2'-deoxy) ribonucleoside 5'-triphosphate pyrophosphohydrolase +ec:3.6.1.57 UDP-2,4-diacetamido-2,4,6-trideoxy-beta-L-altropyranose hydrolase; PseG; UDP-6-deoxy-AltdiNAc hydrolase; Cj1312; UDP-2,4-bis(acetamido)-2,4,6-trideoxy-beta-L-altropyranose hydrolase +ec:3.6.1.58 8-oxo-dGDP phosphatase; NUDT5; MTH3 (gene name); NUDT18 +ec:3.6.1.59 5'-(N7-methyl 5'-triphosphoguanosine)-[mRNA] diphosphatase; DcpS; m7GpppX pyrophosphatase; m7GpppN m7GMP phosphohydrolase; m7GpppX diphosphatase; m7G5'ppp5'N m7GMP phosphohydrolase +ec:3.6.1.60 diadenosine hexaphosphate hydrolase (AMP-forming); hAps1; NUDT11 (gene name); hAps2; NUDT10 (gene name) +ec:3.6.1.61 diadenosine hexaphosphate hydrolase (ATP-forming); Ndx1 +ec:3.6.1.62 5'-(N7-methylguanosine 5'-triphospho)-[mRNA] hydrolase; Dcp2; NUDT16; D10 protein; D9 protein; D10 decapping enzyme; decapping enzyme; m7GpppN-mRNA hydrolase; m7GpppN-mRNA m7GDP phosphohydrolase +ec:3.6.1.63 alpha-D-ribose 1-methylphosphonate 5-triphosphate diphosphatase; phnM (gene name) +ec:3.6.1.64 inosine diphosphate phosphatase; (deoxy)inosine diphosphatase; NUDT16 +ec:3.6.1.65 (d)CTP diphosphatase; (d)CTP pyrophosphohydrolase; (d)CTP diphosphohydrolase; nudG (gene name) +ec:3.6.1.66 XTP/dITP diphosphatase; hypoxanthine/xanthine dNTP pyrophosphatase; rdgB (gene name) +ec:3.6.1.67 dihydroneopterin triphosphate diphosphatase; folQ (gene name); nudB (gene name); NUDT1 (gene name); dihydroneopterin triphosphate pyrophosphohydrolase +ec:3.6.1.68 geranyl diphosphate phosphohydrolase; NUDX1 (gene name) +ec:3.6.1.69 8-oxo-(d)GTP phosphatase; mutT1 (gene name) +ec:3.6.1.70 guanosine-5'-diphospho-5'-[DNA] diphosphatase; aprataxin; pp5'G5'DNA diphosphatase; pp5'G5'-DNA guanylate hydrolase; APTX (gene name); HNT3 (gene name) +ec:3.6.1.71 adenosine-5'-diphospho-5'-[DNA] diphosphatase; aprataxin; 5'-App5'-DNA adenylate hydrolase; APTX (gene name); HNT3 (gene name) +ec:3.6.1.72 DNA-3'-diphospho-5'-guanosine diphosphatase; aprataxin; DNA-3'pp5'G guanylate hydrolase; APTX (gene name); HNT3 (gene name) +ec:3.6.1.73 inosine/xanthosine triphosphatase; yjjX (gene name) +ec:3.6.1.74 mRNA 5'-phosphatase; 5'-polynucleotidase; polynucleotide 5'-phosphohydrolase; RNGTT (gene name); CET1 (gene name); mRNA 5'-triphosphate monophosphatase +ec:3.6.2.1 adenylylsulfatase; adenosine 5-phosphosulfate sulfohydrolase; adenylylsulfate sulfohydrolase +ec:3.6.2.2 phosphoadenylylsulfatase; 3-phosphoadenylyl sulfatase; 3-phosphoadenosine 5-phosphosulfate sulfatase; PAPS sulfatase; 3'-phosphoadenylylsulfate sulfohydrolase +ec:3.6.3.1 Transferred to 7.6.2.1 +ec:3.6.3.2 Transferred to 7.2.2.14 +ec:3.6.3.3 Transferred to 7.2.2.21 +ec:3.6.3.4 Transferred to 7.2.2.9 +ec:3.6.3.5 Transferred to 7.2.2.12 +ec:3.6.3.6 Transferred to 7.1.2.1 +ec:3.6.3.7 Transferred to 7.2.2.3 +ec:3.6.3.8 Transferred to 7.2.2.10 +ec:3.6.3.9 Transferred to 7.2.2.13 +ec:3.6.3.10 Transferred to 7.2.2.19 +ec:3.6.3.11 Deleted entry +ec:3.6.3.12 Transferred to 7.2.2.6 +ec:3.6.3.13 Deleted entry +ec:3.6.3.14 Transferred to 7.1.2.2 +ec:3.6.3.15 Transferred to 7.2.2.1 +ec:3.6.3.16 Transferred to 7.3.2.7 +ec:3.6.3.17 Transferred to +ec:3.6.3.18 Transferred to 7.5.2.2 +ec:3.6.3.19 Transferred to 7.5.2.1 +ec:3.6.3.20 Transferred to 7.6.2.10 +ec:3.6.3.21 Transferred to 7.4.2.1 +ec:3.6.3.22 Transferred to 7.4.2.2 +ec:3.6.3.23 Transferred to 7.4.2.6 +ec:3.6.3.24 Transferred to 7.2.2.11 +ec:3.6.3.25 Transferred to 7.3.2.3 +ec:3.6.3.26 Transferred to 7.3.2.4 +ec:3.6.3.27 Transferred to 7.3.2.1 +ec:3.6.3.28 Transferred to 7.3.2.2 +ec:3.6.3.29 Transferred to 7.3.2.5 +ec:3.6.3.30 Transferred to 7.2.2.7 +ec:3.6.3.31 Transferred to 7.6.2.11 +ec:3.6.3.32 Transferred to 7.6.2.9 +ec:3.6.3.33 Transferred to 7.6.2.8 +ec:3.6.3.34 Transferred to 7.2.2.16 and 7.2.2.17 and 7.2.2.18 +ec:3.6.3.35 Transferred to 7.2.2.5 +ec:3.6.3.36 Transferred to 7.6.2.7 +ec:3.6.3.37 Transferred to 7.6.2.6 +ec:3.6.3.38 Transferred to 7.6.2.12 +ec:3.6.3.39 Transferred to 7.5.2.5 +ec:3.6.3.40 Transferred to 7.5.2.4 +ec:3.6.3.41 Transferred to 7.6.2.5 +ec:3.6.3.42 Transferred to 7.5.2.3 +ec:3.6.3.43 Transferred to 7.4.2.5 +ec:3.6.3.44 Transferred to 7.6.2.2 +ec:3.6.3.45 Deleted entry +ec:3.6.3.46 Transferred to 7.2.2.2 +ec:3.6.3.47 Transferred to 7.6.2.4 +ec:3.6.3.48 Transferred to 7.4.2.7 +ec:3.6.3.49 Transferred to 5.6.1.6 +ec:3.6.3.50 Transferred to 7.4.2.8 +ec:3.6.3.51 Transferred to 7.4.2.3 +ec:3.6.3.52 Transferred to 7.4.2.4 +ec:3.6.3.53 Transferred to 7.2.2.15 +ec:3.6.3.54 Transferred to 7.2.2.8 +ec:3.6.3.55 Transferred to 7.3.2.6 +ec:3.6.4.1 Transferred to 5.6.1.8 +ec:3.6.4.2 Transferred to 5.6.1.2 +ec:3.6.4.3 Transferred to 5.6.1.1 +ec:3.6.4.4 Transferred to 5.6.1.3 +ec:3.6.4.5 Transferred to 5.6.1.4 +ec:3.6.4.6 vesicle-fusing ATPase +ec:3.6.4.7 peroxisome-assembly ATPase; peroxisome assembly factor-2 +ec:3.6.4.8 Transferred to 5.6.1.5 +ec:3.6.4.9 Transferred to 5.6.1.7 +ec:3.6.4.10 non-chaperonin molecular chaperone ATPase; molecular chaperone Hsc70 ATPase +ec:3.6.4.11 Deleted entry +ec:3.6.4.12 Transferred to 5.6.2.3 and 5.6.2.4 +ec:3.6.4.13 RNA helicase; CSFV NS3 helicase; DBP2; DbpA; DDX17; DDX25; DDX3; DDX3X; DDX3Y; DDX4; DDX5; DEAD-box protein DED1; DEAD-box RNA helicase; DEAH-box protein 2; DEAH-box RNA helicase; DED1; Dex(H/D) RNA helicase; EhDEAD1; EhDEAD1 RNA helicase; eIF4A helicase; KOKV helicase; Mtr4p; nonstructural protein 3 helicase; NPH-II; RHA; RNA helicase A; RNA helicase DDX3; RNA helicase Hera; RNA-dependent ATPase; TGBp1 NTPase/helicase domain; VRH1; GRTH/DDX25 +ec:3.6.5.1 heterotrimeric G-protein GTPase +ec:3.6.5.2 small monomeric GTPase +ec:3.6.5.3 protein-synthesizing GTPase; elongation factor (EF); initiation factor (IF); peptide-release or termination factor +ec:3.6.5.4 signal-recognition-particle GTPase +ec:3.6.5.5 dynamin GTPase +ec:3.6.5.6 tubulin GTPase +ec:3.7.1.1 oxaloacetase; oxalacetic hydrolase +ec:3.7.1.2 fumarylacetoacetase; beta-diketonase; fumarylacetoacetate hydrolase +ec:3.7.1.3 kynureninase +ec:3.7.1.4 phloretin hydrolase; ErPhy; lactase-phlorerin hydrolase; C-acylphenol hydrolase; 2',4,4',6'-tetrahydroxydehydrochalcone 1,3,5-trihydroxybenzenehydrolase (incorrect) +ec:3.7.1.5 acylpyruvate hydrolase +ec:3.7.1.6 acetylpyruvate hydrolase +ec:3.7.1.7 beta-diketone hydrolase; oxidized PVA hydrolase +ec:3.7.1.8 2,6-dioxo-6-phenylhexa-3-enoate hydrolase; HOHPDA hydrolase +ec:3.7.1.9 2-hydroxymuconate-6-semialdehyde hydrolase; 2-hydroxy-6-oxohepta-2,4-dienoate hydrolase; 2-hydroxymuconic semialdehyde hydrolase; HMSH; HOD hydrolase; xylF (gene name); 2-hydroxymuconate-semialdehyde formylhydrolase; 2-hydroxymuconate-semialdehyde hydrolase +ec:3.7.1.10 cyclohexane-1,3-dione hydrolase; 1,3-cyclohexanedione hydrolase; cyclohexane-1,3-dione acylhydrolase (decyclizing) +ec:3.7.1.11 cyclohexane-1,2-dione hydrolase; cyclohexane-1,2-dione acylhydrolase (decyclizing) +ec:3.7.1.12 cobalt-precorrin 5A hydrolase; CbiG +ec:3.7.1.13 2-hydroxy-6-oxo-6-(2-aminophenyl)hexa-2,4-dienoate hydrolase; CarC +ec:3.7.1.14 2-hydroxy-6-oxonona-2,4-dienedioate hydrolase; mhpC (gene name) +ec:3.7.1.15 Transferred to 4.2.1.138 +ec:3.7.1.16 Transferred to 3.3.2.12 +ec:3.7.1.17 4,5:9,10-diseco-3-hydroxy-5,9,17-trioxoandrosta-1(10),2-diene-4-oate hydrolase; tesD (gene name); hsaD (gene name) +ec:3.7.1.18 6-oxocamphor hydrolase; OCH; camK (gene name) +ec:3.7.1.19 2,6-dihydroxypseudooxynicotine hydrolase +ec:3.7.1.20 3-fumarylpyruvate hydrolase; nagK (gene name); naaD (gene name) +ec:3.7.1.21 6-oxocyclohex-1-ene-1-carbonyl-CoA hydratase; 6-oxocyclohex-1-ene-1-carbonyl-CoA hydrolase; 6-oxocyclohex-1-ene-1-carbonyl-CoA hydrolase (decyclizing) +ec:3.7.1.22 3D-(3,5/4)-trihydroxycyclohexane-1,2-dione acylhydrolase (ring-opening); IolD; THcHDO hydrolase; 3D-3,5/4-trihydroxycyclohexa-1,2-dione hydrolase (decyclizing); 3D-(3,5/4)-trihydroxycyclohexane-1,2-dione acylhydrolase (decyclizing) +ec:3.7.1.23 maleylpyruvate hydrolase; hbzF (gene name) +ec:3.7.1.24 2,4-diacetylphloroglucinol hydrolase; PhlG +ec:3.7.1.25 2-hydroxy-6-oxohepta-2,4-dienoate hydrolase; todF (gene name) +ec:3.7.1.26 2,4-didehydro-3-deoxy-L-rhamnonate hydrolase; L-2,4-diketo-3-deoxyrhamnonate hydrolase; lra6 (gene name) +ec:3.7.1.27 Transferred to 3.1.7.13 +ec:3.7.1.28 3-oxoisoapionate-4-phosphate transcarboxylase/hydrolase; oiaT (gene name) +ec:3.8.1.1 Deleted entry +ec:3.8.1.2 (S)-2-haloacid dehalogenase; 2-haloacid dehalogenase[ambiguous]; 2-haloacid halidohydrolase [ambiguous][ambiguous]; 2-haloalkanoic acid dehalogenase; 2-haloalkanoid acid halidohydrolase; 2-halocarboxylic acid dehalogenase II; DL-2-haloacid dehalogenase[ambiguous]; L-2-haloacid dehalogenase; L-DEX +ec:3.8.1.3 haloacetate dehalogenase; monohaloacetate dehalogenase +ec:3.8.1.4 Transferred to 1.97.1.10 +ec:3.8.1.5 haloalkane dehalogenase; 1-chlorohexane halidohydrolase; 1-haloalkane dehalogenase +ec:3.8.1.6 4-chlorobenzoate dehalogenase; halobenzoate dehalogenase +ec:3.8.1.7 4-chlorobenzoyl-CoA dehalogenase +ec:3.8.1.8 atrazine chlorohydrolase; AtzA +ec:3.8.1.9 (R)-2-haloacid dehalogenase; 2-haloalkanoic acid dehalogenase[ambiguous]; 2-haloalkanoid acid halidohydrolase[ambiguous]; D-2-haloacid dehalogenase; D-DEX +ec:3.8.1.10 2-haloacid dehalogenase (configuration-inverting); 2-haloalkanoic acid dehalogenase; 2-haloalkanoid acid halidohydrolase; DL-2-haloacid dehalogenase; DL-2-haloacid dehalogenase (inversion of configuration); DL-2-haloacid halidohydrolase (inversion of configuration); DL-DEXi; (R,S)-2-haloacid dehalogenase (configuration-inverting) +ec:3.8.1.11 2-haloacid dehalogenase (configuration-retaining); 2-haloalkanoic acid dehalogenase; 2-haloalkanoid acid halidohydrolase; DL-2-haloacid dehalogenase; DL-DEXr +ec:3.8.2.1 Transferred to 3.1.8.2 +ec:3.9.1.1 phosphoamidase; creatine phosphatase +ec:3.9.1.2 protein arginine phosphatase; YwlE +ec:3.9.1.3 phosphohistidine phosphatase; PHPT1 (gene name); protein histidine phosphatase; PHP +ec:3.10.1.1 N-sulfoglucosamine sulfohydrolase; sulfoglucosamine sulfamidase; heparin sulfamidase; 2-desoxy-D-glucoside-2-sulphamate sulphohydrolase (sulphamate sulphohydrolase) +ec:3.10.1.2 cyclamate sulfohydrolase; cyclamate sulfamatase; cyclamate sulfamidase; cyclohexylsulfamate sulfamidase +ec:3.11.1.1 phosphonoacetaldehyde hydrolase; phosphonatase; 2-phosphonoacetylaldehyde phosphonohydrolase +ec:3.11.1.2 phosphonoacetate hydrolase +ec:3.11.1.3 phosphonopyruvate hydrolase; PPH +ec:3.12.1.1 trithionate hydrolase +ec:3.13.1.1 UDP-sulfoquinovose synthase; sulfite:UDP-glucose sulfotransferase; UDPsulfoquinovose synthase; UDP-6-sulfo-6-deoxyglucose sulfohydrolase +ec:3.13.1.2 Deleted entry +ec:3.13.1.3 2'-hydroxybiphenyl-2-sulfinate desulfinase; gene dszB-encoded hydrolase; 2-(2-hydroxyphenyl) benzenesulfinate:H2O hydrolase; DszB; HBPSi desulfinase; 2-(2-hydroxyphenyl) benzenesulfinate sulfohydrolase; HPBS desulfinase; 2-(2-hydroxyphenyl)benzenesulfinate hydrolase; 2-(2'-hydroxyphenyl)benzenesulfinate desulfinase; 2-(2-hydroxyphenyl)benzenesulfinate desulfinase +ec:3.13.1.4 3-sulfinopropanoyl-CoA desulfinase; 3SP-CoA desulfinase; AcdDPN7; 3-sulfinopropionyl-CoA desulfinase +ec:3.13.1.5 carbon disulfide hydrolase; CS2 hydrolase (misleading); carbon disulfide lyase; CS2-converting enzyme; carbon disulphide-lyase (decarboxylating) +ec:3.13.1.6 [CysO sulfur-carrier protein]-S-L-cysteine hydrolase; mec (gene name) +ec:3.13.1.7 carbonyl sulfide hydrolase; COSase; COS hydrolase; cos (gene name) +ec:3.13.1.8 Transferred to 3.13.2.3 +ec:3.13.1.9 S-inosyl-L-homocysteine hydrolase; SIHH +ec:3.13.2.1 adenosylhomocysteinase; S-adenosylhomocysteine synthase; S-adenosylhomocysteine hydrolase (ambiguous); adenosylhomocysteine hydrolase; S-adenosylhomocysteinase; SAHase; AdoHcyase +ec:3.13.2.2 S-adenosyl-L-methionine hydrolase (L-homoserine-forming); S-adenosylmethionine cleaving enzyme; methylmethionine-sulfonium-salt hydrolase; adenosylmethionine lyase; adenosylmethionine hydrolase; S-adenosylmethionine hydrolase; S-adenosyl-L-methionine hydrolase +ec:3.13.2.3 (R)-S-adenosyl-L-methionine hydrolase (adenosine-forming); SAM hydroxide adenosyltransferase +ec:4.1.1.1 pyruvate decarboxylase; alpha-carboxylase (ambiguous); pyruvic decarboxylase; alpha-ketoacid carboxylase; 2-oxo-acid carboxy-lyase +ec:4.1.1.2 oxalate decarboxylase; oxalate carboxy-lyase +ec:4.1.1.3 Transferred to 7.2.4.2 and 4.1.1.112 +ec:4.1.1.4 acetoacetate decarboxylase; acetoacetic acid decarboxylase; acetoacetate carboxy-lyase +ec:4.1.1.5 acetolactate decarboxylase; alpha-acetolactate decarboxylase; (S)-2-hydroxy-2-methyl-3-oxobutanoate carboxy-lyase; (S)-2-hydroxy-2-methyl-3-oxobutanoate carboxy-lyase [(R)-2-acetoin-forming]; (S)-2-hydroxy-2-methyl-3-oxobutanoate carboxy-lyase [(3R)-3-hydroxybutan-2-one-forming] +ec:4.1.1.6 cis-aconitate decarboxylase; cis-aconitic decarboxylase; cis-aconitate carboxy-lyase; CAD1 (gene name); IRG1 (gene name) +ec:4.1.1.7 benzoylformate decarboxylase; phenylglyoxylate decarboxylase; benzoylformate carboxy-lyase; benzoylformate carboxy-lyase (benzaldehyde-forming) +ec:4.1.1.8 oxalyl-CoA decarboxylase; oxalyl coenzyme A decarboxylase; oxalyl-CoA carboxy-lyase +ec:4.1.1.9 malonyl-CoA decarboxylase; malonyl coenzyme A decarboxylase; malonyl-CoA carboxy-lyase +ec:4.1.1.10 Deleted entry +ec:4.1.1.11 aspartate 1-decarboxylase; aspartate alpha-decarboxylase; L-aspartate alpha-decarboxylase; aspartic alpha-decarboxylase; L-aspartate 1-carboxy-lyase +ec:4.1.1.12 aspartate 4-decarboxylase; desulfinase; aminomalonic decarboxylase; aspartate beta-decarboxylase; aspartate omega-decarboxylase; aspartic omega-decarboxylase; aspartic beta-decarboxylase; L-aspartate beta-decarboxylase; cysteine sulfinic desulfinase; L-cysteine sulfinate acid desulfinase; L-aspartate 4-carboxy-lyase +ec:4.1.1.13 Deleted entry +ec:4.1.1.14 valine decarboxylase; leucine decarboxylase; L-valine carboxy-lyase +ec:4.1.1.15 glutamate decarboxylase; L-glutamic acid decarboxylase; L-glutamic decarboxylase; cysteic acid decarboxylase; L-glutamate alpha-decarboxylase; aspartate 1-decarboxylase; aspartic alpha-decarboxylase; L-aspartate-alpha-decarboxylase; gamma-glutamate decarboxylase; L-glutamate 1-carboxy-lyase +ec:4.1.1.16 hydroxyglutamate decarboxylase; 3-hydroxy-L-glutamate 1-carboxy-lyase +ec:4.1.1.17 ornithine decarboxylase; SpeC; L-ornithine carboxy-lyase +ec:4.1.1.18 lysine decarboxylase; L-lysine carboxy-lyase +ec:4.1.1.19 arginine decarboxylase; SpeA; L-arginine carboxy-lyase +ec:4.1.1.20 diaminopimelate decarboxylase; diaminopimelic acid decarboxylase; meso-diaminopimelate decarboxylase; DAP-decarboxylase; meso-2,6-diaminoheptanedioate carboxy-lyase +ec:4.1.1.21 phosphoribosylaminoimidazole carboxylase; 5-phosphoribosyl-5-aminoimidazole carboxylase; 5-amino-1-ribosylimidazole 5-phosphate carboxylase; AIR carboxylase; 1-(5-phosphoribosyl)-5-amino-4-imidazolecarboxylate carboxy-lyase; ADE2; class II PurE; 5-amino-1-(5-phospho-D-ribosyl)imidazole-4-carboxylate carboxy-lyase +ec:4.1.1.22 histidine decarboxylase; L-histidine decarboxylase; L-histidine carboxy-lyase +ec:4.1.1.23 orotidine-5'-phosphate decarboxylase; orotidine-5'-monophosphate decarboxylase; orotodylate decarboxylase; orotidine phosphate decarboxylase; OMP decarboxylase; orotate monophosphate decarboxylase; orotidine monophosphate decarboxylase; orotidine phosphate decarboxylase; OMP-DC; orotate decarboxylase; orotidine 5'-phosphate decarboxylase; orotidylic decarboxylase; orotidylic acid decarboxylase; orotodylate decarboxylase; ODCase; orotic decarboxylase; orotidine-5'-phosphate carboxy-lyase +ec:4.1.1.24 aminobenzoate decarboxylase +ec:4.1.1.25 tyrosine decarboxylase; L-tyrosine decarboxylase; L-(-)-tyrosine apodecarboxylase; L-tyrosine carboxy-lyase +ec:4.1.1.26 Deleted entry +ec:4.1.1.27 Deleted entry +ec:4.1.1.28 aromatic-L-amino-acid decarboxylase; DOPA decarboxylase; tryptophan decarboxylase; hydroxytryptophan decarboxylase; L-DOPA decarboxylase; aromatic amino acid decarboxylase; 5-hydroxytryptophan decarboxylase; aromatic-L-amino-acid carboxy-lyase (tryptamine-forming) +ec:4.1.1.29 sulfinoalanine decarboxylase; cysteine-sulfinate decarboxylase; L-cysteinesulfinic acid decarboxylase; cysteine-sulfinate decarboxylase; CADCase/CSADCase; CSAD; cysteic decarboxylase; cysteinesulfinic acid decarboxylase; cysteinesulfinate decarboxylase; sulfoalanine decarboxylase; 3-sulfino-L-alanine carboxy-lyase +ec:4.1.1.30 pantothenoylcysteine decarboxylase; pantothenylcysteine decarboxylase; N-[(R)-pantothenoyl]-L-cysteine carboxy-lyase +ec:4.1.1.31 phosphoenolpyruvate carboxylase; phosphopyruvate (phosphate) carboxylase; PEP carboxylase; phosphoenolpyruvic carboxylase; PEPC; PEPCase; phosphate:oxaloacetate carboxy-lyase (phosphorylating) +ec:4.1.1.32 phosphoenolpyruvate carboxykinase (GTP); phosphoenolpyruvate carboxylase (ambiguous); phosphopyruvate carboxylase (ambiguous); phosphopyruvate (guanosine triphosphate) carboxykinase; phosphoenolpyruvic carboxykinase (GTP); phosphopyruvate carboxylase (GTP); phosphoenolpyruvic carboxylase (GTP); phosphoenolpyruvic carboxykinase (ambiguous); phosphoenolpyruvate carboxykinase (ambiguous); PEP carboxylase (ambiguous); GTP:oxaloacetate carboxy-lyase (transphosphorylating) +ec:4.1.1.33 diphosphomevalonate decarboxylase; pyrophosphomevalonate decarboxylase; mevalonate-5-pyrophosphate decarboxylase; pyrophosphomevalonic acid decarboxylase; 5-pyrophosphomevalonate decarboxylase; mevalonate 5-diphosphate decarboxylase; ATP:(R)-5-diphosphomevalonate carboxy-lyase (dehydrating) +ec:4.1.1.34 dehydro-L-gulonate decarboxylase; keto-L-gulonate decarboxylase; 3-keto-L-gulonate decarboxylase; 3-dehydro-L-gulonate carboxy-lyase +ec:4.1.1.35 UDP-glucuronate decarboxylase; uridine-diphosphoglucuronate decarboxylase; UDP-D-glucuronate carboxy-lyase +ec:4.1.1.36 phosphopantothenoylcysteine decarboxylase; 4-phosphopantotheoylcysteine decarboxylase; 4-phosphopantothenoyl-L-cysteine decarboxylase; PPC-decarboxylase; N-[(R)-4'-phosphopantothenoyl]-L-cysteine carboxy-lyase +ec:4.1.1.37 uroporphyrinogen decarboxylase; uroporphyrinogen III decarboxylase; porphyrinogen carboxy-lyase; porphyrinogen decarboxylase; uroporphyrinogen-III carboxy-lyase +ec:4.1.1.38 phosphoenolpyruvate carboxykinase (diphosphate); phosphopyruvate carboxylase (ambiguous); PEP carboxyphosphotransferase (ambiguous); PEP carboxykinase (ambiguous); phosphopyruvate carboxykinase (pyrophosphate); PEP carboxylase (ambiguous); phosphopyruvate carboxykinase (ambiguous); phosphoenolpyruvic carboxykinase (ambiguous); phosphoenolpyruvic carboxylase (ambiguous); phosphoenolpyruvate carboxytransphosphorylase (ambiguous); phosphoenolpyruvate carboxykinase (ambiguous); phosphoenolpyruvic carboxykinase; phosphoenolpyruvic carboxylase; PEPCTrP; phosphoenolpyruvic carboxykinase (pyrophosphate); phosphoenolpyruvic carboxylase (pyrophosphate); phosphoenolpyruvate carboxylase (ambiguous); phosphoenolpyruvate carboxyphosphotransferase (ambiguous); phosphoenolpyruvic carboxytransphosphorylase (ambiguous); phosphoenolpyruvate carboxylase (pyrophosphate); phosphopyruvate carboxylase (pyrophosphate); diphosphate:oxaloacetate carboxy-lyase (transphosphorylating) +ec:4.1.1.39 ribulose-bisphosphate carboxylase; D-ribulose 1,5-diphosphate carboxylase; D-ribulose-1,5-bisphosphate carboxylase; RuBP carboxylase; carboxydismutase; diphosphoribulose carboxylase; ribulose 1,5-bisphosphate carboxylase; ribulose 1,5-bisphosphate carboxylase/oxygenase; ribulose 1,5-diphosphate carboxylase; ribulose 1,5-diphosphate carboxylase/oxygenase; ribulose bisphosphate carboxylase/oxygenase; ribulose diphosphate carboxylase; ribulose diphosphate carboxylase/oxygenase; rubisco; 3-phospho-D-glycerate carboxy-lyase (dimerizing) +ec:4.1.1.40 hydroxypyruvate decarboxylase; hydroxypyruvate carboxy-lyase +ec:4.1.1.41 Transferred to 7.2.4.3 +ec:4.1.1.42 carnitine decarboxylase; carnitine carboxy-lyase +ec:4.1.1.43 phenylpyruvate decarboxylase; phenylpyruvate carboxy-lyase; phenylpyruvate carboxy-lyase (phenylacetaldehyde-forming) +ec:4.1.1.44 4-carboxymuconolactone decarboxylase; gamma-4-carboxymuconolactone decarboxylase; 4-carboxymuconolactone carboxy-lyase; 2-carboxy-2,5-dihydro-5-oxofuran-2-acetate carboxy-lyase (4,5-dihydro-5-oxofuran-2-acetate-forming) +ec:4.1.1.45 aminocarboxymuconate-semialdehyde decarboxylase; picolinic acid carboxylase; picolinic acid decarboxylase; alpha-amino-beta-carboxymuconate-epsilon-semialdehade decarboxylase; alpha-amino-beta-carboxymuconate-epsilon-semialdehyde beta-decarboxylase; 2-amino-3-(3-oxoprop-2-enyl)but-2-enedioate carboxy-lyase; 2-amino-3-(3-oxoprop-1-en-1-yl)but-2-enedioate carboxy-lyase +ec:4.1.1.46 o-pyrocatechuate decarboxylase; 2,3-dihydroxybenzoate carboxy-lyase +ec:4.1.1.47 tartronate-semialdehyde synthase; tartronate semialdehyde carboxylase; glyoxylate carbo-ligase; glyoxylic carbo-ligase; hydroxymalonic semialdehyde carboxylase; tartronic semialdehyde carboxylase; glyoxalate carboligase; glyoxylate carboxy-lyase (dimerizing); glyoxylate carboxy-lyase (dimerizing; tartronate-semialdehyde-forming) +ec:4.1.1.48 indole-3-glycerol-phosphate synthase; indoleglycerol phosphate synthetase; indoleglycerol phosphate synthase; indole-3-glycerophosphate synthase; 1-(2-carboxyphenylamino)-1-deoxy-D-ribulose-5-phosphate carboxy-lyase (cyclizing) +ec:4.1.1.49 phosphoenolpyruvate carboxykinase (ATP); phosphopyruvate carboxylase (ATP); phosphoenolpyruvate carboxylase (ambiguous); phosphoenolpyruvate carboxykinase (ambiguous); phosphopyruvate carboxykinase (adenosine triphosphate); PEP carboxylase (ambiguous); PEP carboxykinase (ambiguous); PEPCK (ATP); PEPK; PEPCK; phosphoenolpyruvic carboxylase (ambiguous); phosphoenolpyruvic carboxykinase (ambiguous); phosphoenolpyruvate carboxylase (ATP); phosphopyruvate carboxykinase (ambiguous); ATP:oxaloacetate carboxy-lyase (transphosphorylating) +ec:4.1.1.50 adenosylmethionine decarboxylase; S-adenosylmethionine decarboxylase; S-adenosyl-L-methionine decarboxylase; S-adenosyl-L-methionine carboxy-lyase; S-adenosyl-L-methionine carboxy-lyase [(5-deoxy-5-adenosyl)(3-aminopropyl)methylsulfonium-salt-forming] +ec:4.1.1.51 3-hydroxy-2-methylpyridine-4,5-dicarboxylate 4-decarboxylase; 3-hydroxy-2-methylpyridine-4,5-dicarboxylate 4-carboxy-lyase +ec:4.1.1.52 6-methylsalicylate decarboxylase; 6-methylsalicylic acid (2,6-cresotic acid) decarboxylase; 6-MSA decarboxylase; 6-methylsalicylate carboxy-lyase +ec:4.1.1.53 phenylalanine decarboxylase; L-phenylalanine decarboxylase; aromatic L-amino acid decarboxylase (ambiguous); L-phenylalanine carboxy-lyase +ec:4.1.1.54 dihydroxyfumarate decarboxylase; dihydroxyfumarate carboxy-lyase; dihydroxyfumarate carboxy-lyase (tartronate-semialdehyde-forming) +ec:4.1.1.55 4,5-dihydroxyphthalate decarboxylase; 4,5-dihydroxyphthalate carboxy-lyase +ec:4.1.1.56 3-oxolaurate decarboxylase; beta-ketolaurate decarboxylase; beta-ketoacyl decarboxylase; 3-oxododecanoate carboxy-lyase +ec:4.1.1.57 methionine decarboxylase; L-methionine decarboxylase; L-methionine carboxy-lyase; L-methionine carboxy-lyase (3-methylthiopropanamine-forming) +ec:4.1.1.58 orsellinate decarboxylase; orsellinate carboxy-lyase +ec:4.1.1.59 gallate decarboxylase; gallic acid decarboxylase; gallate carboxy-lyase; 3,4,5-trihydroxybenzoate carboxy-lyase (pyrogallol-forming) +ec:4.1.1.60 stipitatonate decarboxylase; stipitatonate carboxy-lyase (decyclizing); stipitatonate carboxy-lyase (decyclizing, stipitatate-forming) +ec:4.1.1.61 4-hydroxybenzoate decarboxylase; p-hydroxybenzoate decarboxylase; 4-hydroxybenzoate carboxy-lyase +ec:4.1.1.62 gentisate decarboxylase; 2,5-dihydroxybenzoate decarboxylase; gentisate carboxy-lyase +ec:4.1.1.63 protocatechuate decarboxylase; 3,4-dihydrobenzoate decarboxylase; protocatechuate carboxy-lyase +ec:4.1.1.64 2,2-dialkylglycine decarboxylase (pyruvate); dialkyl amino acid (pyruvate) decarboxylase; alpha-dialkyl amino acid transaminase; 2,2-dialkyl-2-amino acid-pyruvate aminotransferase; L-alanine-alpha-ketobutyrate aminotransferase; dialkylamino-acid decarboxylase (pyruvate); 2,2-dialkylglycine carboxy-lyase (amino-transferring) +ec:4.1.1.65 phosphatidylserine decarboxylase; PS decarboxylase; phosphatidyl-L-serine carboxy-lyase +ec:4.1.1.66 uracil-5-carboxylate decarboxylase; uracil-5-carboxylic acid decarboxylase; uracil-5-carboxylate carboxy-lyase +ec:4.1.1.67 UDP-galacturonate decarboxylase; UDP-galacturonic acid decarboxylase; UDPGalUA carboxy lyase; UDP-D-galacturonate carboxy-lyase +ec:4.1.1.68 5-oxopent-3-ene-1,2,5-tricarboxylate decarboxylase; 5-carboxymethyl-2-oxo-hex-3-ene-1,6-dioate decarboxylase; 5-oxopent-3-ene-1,2,5-tricarboxylate carboxy-lyase; 5-oxopent-3-ene-1,2,5-tricarboxylate carboxy-lyase (2-oxohept-3-enedioate-forming) +ec:4.1.1.69 3,4-dihydroxyphthalate decarboxylase; 3,4-dihydroxyphthalate carboxy-lyase +ec:4.1.1.70 Transferred to 7.2.4.5 +ec:4.1.1.71 2-oxoglutarate decarboxylase; oxoglutarate decarboxylase; alpha-ketoglutarate decarboxylase; alpha-ketoglutaric decarboxylase; pre-2-oxoglutarate decarboxylase; 2-oxoglutarate carboxy-lyase +ec:4.1.1.72 branched-chain-2-oxoacid decarboxylase; branched-chain oxo acid decarboxylase; branched-chain alpha-keto acid decarboxylase; branched-chain keto acid decarboxylase; BCKA; (3S)-3-methyl-2-oxopentanoate carboxy-lyase +ec:4.1.1.73 tartrate decarboxylase; (R,R)-tartrate carboxy-lyase +ec:4.1.1.74 indolepyruvate decarboxylase; indol-3-yl-pyruvate carboxy-lyase; 3-(indol-3-yl)pyruvate carboxy-lyase +ec:4.1.1.75 5-guanidino-2-oxopentanoate decarboxylase; alpha-ketoarginine decarboxylase; 2-oxo-5-guanidinopentanoate carboxy-lyase +ec:4.1.1.76 arylmalonate decarboxylase; AMDASE; 2-aryl-2-methylmalonate carboxy-lyase; 2-aryl-2-methylmalonate carboxy-lyase (2-arylpropionate-forming) +ec:4.1.1.77 2-oxo-3-hexenedioate decarboxylase; 4-oxalocrotonate carboxy-lyase (misleading); 4-oxalocrotonate decarboxylase (misleading); cnbF (gene name); praD (gene name); amnE (gene name); nbaG (gene name); xylI (gene name) +ec:4.1.1.78 acetylenedicarboxylate decarboxylase; acetylenedicarboxylate hydratase; acetylenedicarboxylate hydrase; acetylenedicarboxylate carboxy-lyase +ec:4.1.1.79 sulfopyruvate decarboxylase; sulfopyruvate carboxy-lyase +ec:4.1.1.80 4-hydroxyphenylpyruvate decarboxylase; 4-hydroxyphenylpyruvate carboxy-lyase +ec:4.1.1.81 threonine-phosphate decarboxylase; L-threonine-O-3-phosphate decarboxylase; CobD; L-threonine-O-3-phosphate carboxy-lyase +ec:4.1.1.82 phosphonopyruvate decarboxylase; 3-phosphonopyruvate carboxy-lyase +ec:4.1.1.83 4-hydroxyphenylacetate decarboxylase; p-hydroxyphenylacetate decarboxylase; p-Hpd; 4-Hpd; 4-hydroxyphenylacetate carboxy-lyase +ec:4.1.1.84 D-dopachrome decarboxylase; phenylpyruvate tautomerase II; D-tautomerase; D-dopachrome tautomerase; D-dopachrome carboxy-lyase +ec:4.1.1.85 3-dehydro-L-gulonate-6-phosphate decarboxylase; 3-keto-L-gulonate 6-phosphate decarboxylase; UlaD; SgaH; SgbH; KGPDC; 3-dehydro-L-gulonate-6-phosphate carboxy-lyase +ec:4.1.1.86 diaminobutyrate decarboxylase; DABA DC; L-2,4-diaminobutyrate decarboxylase; L-2,4-diaminobutanoate carboxy-lyase +ec:4.1.1.87 malonyl-S-ACP decarboxylase; malonyl-S-acyl-carrier protein decarboxylase; MdcD/MdcE; MdcD,E +ec:4.1.1.88 biotin-independent malonate decarboxylase; malonate decarboxylase (without biotin); malonate decarboxylase (ambiguous); MDC +ec:4.1.1.89 Transferred to 7.2.4.4 +ec:4.1.1.90 peptidyl-glutamate 4-carboxylase; vitamin K-dependent carboxylase; gamma-glutamyl carboxylase; peptidyl-glutamate 4-carboxylase (2-methyl-3-phytyl-1,4-naphthoquinone-epoxidizing) +ec:4.1.1.91 salicylate decarboxylase; salicylic acid decarboxylase; Scd +ec:4.1.1.92 indole-3-carboxylate decarboxylase +ec:4.1.1.93 pyrrole-2-carboxylate decarboxylase +ec:4.1.1.94 ethylmalonyl-CoA decarboxylase +ec:4.1.1.95 L-glutamyl-[BtrI acyl-carrier protein] decarboxylase; btrK (gene name) +ec:4.1.1.96 carboxynorspermidine decarboxylase; carboxyspermidine decarboxylase; CANSDC; VC1623 (gene name) +ec:4.1.1.97 2-oxo-4-hydroxy-4-carboxy-5-ureidoimidazoline decarboxylase; OHCU decarboxylase; hpxQ (gene name); PRHOXNB (gene name) +ec:4.1.1.98 4-hydroxy-3-polyprenylbenzoate decarboxylase; ubiD (gene name); 4-hydroxy-3-solanesylbenzoate decarboxylase; 3-octaprenyl-4-hydroxybenzoate decarboxylase +ec:4.1.1.99 phosphomevalonate decarboxylase +ec:4.1.1.100 prephenate decarboxylase; BacA; AerD; SalX; non-aromatizing prephenate decarboxylase +ec:4.1.1.101 malolactic enzyme; mleA (gene name); mleS (gene name) +ec:4.1.1.102 phenacrylate decarboxylase; FDC1 (gene name); ferulic acid decarboxylase +ec:4.1.1.103 gamma-resorcylate decarboxylase; graF (gene name); tsdA (gene name) +ec:4.1.1.104 3-dehydro-4-phosphotetronate decarboxylase; otnC (gene name) +ec:4.1.1.105 L-tryptophan decarboxylase; psiD (gene name); TDC (gene name) +ec:4.1.1.106 fatty acid photodecarboxylase; FAP (gene name) +ec:4.1.1.107 3,4-dihydroxyphenylacetaldehyde synthase; DHPAA synthase +ec:4.1.1.108 4-hydroxyphenylacetaldehyde synthase; TYRDC-2 (gene name) +ec:4.1.1.109 phenylacetaldehyde synthase; PAAS (gene name) +ec:4.1.1.110 bisphosphomevalonate decarboxylase; mevalonate 3,5-bisphosphate decarboxylase +ec:4.1.1.111 siroheme decarboxylase; sirohaem decarboxylase; nirDLHG (gene name); ahbAB (gene name) +ec:4.1.1.112 oxaloacetate decarboxylase; oxaloacetate beta-decarboxylase; oxalacetic acid decarboxylase; oxalate beta-decarboxylase; oxaloacetate carboxy-lyase +ec:4.1.1.113 trans-aconitate decarboxylase; TAD1 (gene name) +ec:4.1.1.114 cis-3-alkyl-4-alkyloxetan-2-one decarboxylase; oleB (gene name) +ec:4.1.1.115 indoleacetate decarboxylase; IAD +ec:4.1.1.116 D-ornithine/D-lysine decarboxylase; dokD (gene name); DOKDC +ec:4.1.1.117 2-[(L-alanin-3-ylcarbamoyl)methyl]-2-hydroxybutanedioate decarboxylase; sbnH (gene name) +ec:4.1.1.118 isophthalyl-CoA decarboxylase; IPCD +ec:4.1.1.119 phenylacetate decarboxylase; phdB (gene name) +ec:4.1.1.120 3-oxoisoapionate decarboxylase; oiaC (gene name) +ec:4.1.1.121 3-oxoisoapionate-4-phosphate decarboxylase; oiaX (gene name) +ec:4.1.1.122 L-cysteate decarboxylase; CAD +ec:4.1.1.123 phenyl-phosphate phosphatase/carboxylase; phenyl phosphate carboxylase +ec:4.1.2.1 Deleted entry +ec:4.1.2.2 ketotetrose-phosphate aldolase; phosphoketotetrose aldolase; erythrulose-1-phosphate synthetase; erythrose-1-phosphate synthase; erythrulose-1-phosphate formaldehyde-lyase +ec:4.1.2.3 Deleted entry +ec:4.1.2.4 deoxyribose-phosphate aldolase; phosphodeoxyriboaldolase; deoxyriboaldolase; deoxyribose-5-phosphate aldolase; 2-deoxyribose-5-phosphate aldolase; 2-deoxy-D-ribose-5-phosphate acetaldehyde-lyase +ec:4.1.2.5 L-threonine aldolase; L-threonine acetaldehyde-lyase +ec:4.1.2.6 Deleted entry +ec:4.1.2.7 Deleted entry +ec:4.1.2.8 indole-3-glycerol-phosphate lyase; tryptophan synthase alpha; TSA; indoleglycerolphosphate aldolase; indole glycerol phosphate hydrolase; indole synthase; indole-3-glycerolphosphate D-glyceraldehyde-3-phosphate-lyase; indole-3-glycerol phosphate lyase; IGL; BX1; (1S,2R)-1-C-(indol-3-yl)glycerol 3-phosphate D-glyceraldehyde-3-phosphate-lyase +ec:4.1.2.9 phosphoketolase; D-xylulose-5-phosphate D-glyceraldehyde-3-phosphate-lyase (phosphate-acetylating) +ec:4.1.2.10 (R)-mandelonitrile lyase; (R)-oxynitrilase; oxynitrilase; D-oxynitrilase; D-alpha-hydroxynitrile lyase; mandelonitrile benzaldehyde-lyase; PaHNL; AtHNL; PhaMDL; (R)-HNL; (R)-PeHNL; (R)-hydroxynitrile lyase; R-selective hydroxynitrile lyase; R-selective HNL; (R)-(+)-mandelonitrile lyase +ec:4.1.2.11 hydroxymandelonitrile lyase; hydroxynitrile lyase; oxynitrilase; Sorghum hydroxynitrile lyase; (S)-4-hydroxymandelonitrile hydroxybenzaldehyde-lyase +ec:4.1.2.12 2-dehydropantoate aldolase; ketopantoaldolase; 2-dehydropantoate formaldehyde-lyase +ec:4.1.2.13 fructose-bisphosphate aldolase; aldolase; fructose-1,6-bisphosphate triosephosphate-lyase; fructose diphosphate aldolase; diphosphofructose aldolase; fructose 1,6-diphosphate aldolase; ketose 1-phosphate aldolase; phosphofructoaldolase; zymohexase; fructoaldolase; fructose 1-phosphate aldolase; fructose 1-monophosphate aldolase; 1,6-diphosphofructose aldolase; SMALDO; D-fructose-1,6-bisphosphate D-glyceraldehyde-3-phosphate-lyase +ec:4.1.2.14 2-dehydro-3-deoxy-phosphogluconate aldolase; phospho-2-keto-3-deoxygluconate aldolase; KDPG aldolase; phospho-2-keto-3-deoxygluconic aldolase; 2-keto-3-deoxy-6-phosphogluconic aldolase; 2-keto-3-deoxy-6-phosphogluconate aldolase; 6-phospho-2-keto-3-deoxygluconate aldolase; ODPG aldolase; 2-oxo-3-deoxy-6-phosphogluconate aldolase; 2-keto-3-deoxygluconate-6-P-aldolase; 2-keto-3-deoxygluconate-6-phosphate aldolase; 2-dehydro-3-deoxy-D-gluconate-6-phosphate D-glyceraldehyde-3-phosphate-lyase; 2-dehydro-3-deoxy-D-gluconate-6-phosphate D-glyceraldehyde-3-phosphate-lyase (pyruvate-forming) +ec:4.1.2.15 Transferred to 2.5.1.54 +ec:4.1.2.16 Transferred to 2.5.1.55 +ec:4.1.2.17 L-fuculose-phosphate aldolase; L-fuculose 1-phosphate aldolase; fuculose aldolase; L-fuculose-1-phosphate lactaldehyde-lyase +ec:4.1.2.18 2-dehydro-3-deoxy-L-pentonate aldolase; 2-keto-3-deoxy-L-pentonate aldolase; 2-keto-3-deoxy-L-arabonate aldolase; 2-keto-3-deoxy-D-xylonate aldolase; 3-deoxy-D-pentulosonic acid aldolase; 2-dehydro-3-deoxy-L-pentonate glycolaldehyde-lyase +ec:4.1.2.19 rhamnulose-1-phosphate aldolase; rhamnulose phosphate aldolase; L-rhamnulose 1-phosphate aldolase; L-rhamnulose-phosphate aldolase; L-rhamnulose-1-phosphate lactaldehyde-lyase +ec:4.1.2.20 2-dehydro-3-deoxyglucarate aldolase; 2-keto-3-deoxyglucarate aldolase; alpha-keto-beta-deoxy-D-glucarate aldolase; 2-dehydro-3-deoxy-D-glucarate tartronate-semialdehyde-lyase; 2-dehydro-3-deoxy-D-glucarate tartronate-semialdehyde-lyase (pyruvate-forming) +ec:4.1.2.21 2-dehydro-3-deoxy-6-phosphogalactonate aldolase; 6-phospho-2-keto-3-deoxygalactonate aldolase; phospho-2-keto-3-deoxygalactonate aldolase; 2-keto-3-deoxy-6-phosphogalactonic aldolase; phospho-2-keto-3-deoxygalactonic aldolase; 2-keto-3-deoxy-6-phosphogalactonic acid aldolase; (KDPGal)aldolase; 2-dehydro-3-deoxy-D-galactonate-6-phosphate D-glyceraldehyde-3-phosphate-lyase; 2-dehydro-3-deoxy-D-galactonate-6-phosphate D-glyceraldehyde-3-phosphate-lyase (pyruvate-forming) +ec:4.1.2.22 fructose-6-phosphate phosphoketolase; D-fructose-6-phosphate D-erythrose-4-phosphate-lyase (phosphate-acetylating) +ec:4.1.2.23 3-deoxy-D-manno-octulosonate aldolase; 2-keto-3-deoxyoctonate aldolase; KDOaldolase; 3-deoxyoctulosonic aldolase; 2-keto-3-deoxyoctonic aldolase; 3-deoxy-D-manno-octulosonic aldolase; 3-deoxy-D-manno-octulosonate D-arabinose-lyase +ec:4.1.2.24 dimethylaniline-N-oxide aldolase; microsomal oxidase II; microsomal N-oxide dealkylase; N,N-dimethylaniline-N-oxide formaldehyde-lyase +ec:4.1.2.25 dihydroneopterin aldolase; 7,8-dihydroneopterin aldolase; 2-amino-4-hydroxy-6-(D-erythro-1,2,3-trihydroxypropyl)-7,8-dihydropteridine glycolaldehyde-lyase; 2-amino-4-hydroxy-6-(D-erythro-1,2,3-trihydroxypropyl)-7,8-dihydropteridine glycolaldehyde-lyase (2-amino-4-hydroxy-6-hydroxymethyl-7,8-dihydropteridine-forming); DHNA; mptD (gene name); folB (gene name) +ec:4.1.2.26 phenylserine aldolase; L-threo-3-phenylserine benzaldehyde-lyase +ec:4.1.2.27 sphinganine-1-phosphate aldolase; dihydrosphingosine 1-phosphate aldolase; sphinganine-1-phosphate alkanal-lyase; sphinganine-1-phosphate lyase; sphinganine-1-phosphate palmitaldehyde-lyase +ec:4.1.2.28 2-dehydro-3-deoxy-D-pentonate aldolase; 2-keto-3-deoxy-D-pentonate aldolase; 3-deoxy-D-pentulosonic acid aldolase; 2-dehydro-3-deoxy-D-pentonate glycolaldehyde-lyase +ec:4.1.2.29 5-dehydro-2-deoxyphosphogluconate aldolase; phospho-5-keto-2-deoxygluconate aldolase; 5-dehydro-2-deoxy-D-gluconate-6-phosphate malonate-semialdehyde-lyase +ec:4.1.2.30 Transferred to 1.14.14.32 +ec:4.1.2.31 Deleted entry +ec:4.1.2.32 trimethylamine-oxide aldolase; trimethylamine N-oxide formaldehyde-lyase; trimethylamine N-oxide aldolase; trimethylamine N-oxide demethylase; trimethylamine-N-oxide formaldehyde-lyase +ec:4.1.2.33 fucosterol-epoxide lyase; (24R,24'R)-fucosterol-epoxide acetaldehyde-lyase; (24R,24'R)-fucosterol-epoxide acetaldehyde-lyase (desmosterol-forming) +ec:4.1.2.34 4-(2-carboxyphenyl)-2-oxobut-3-enoate aldolase; 2'-carboxybenzalpyruvate aldolase; (3E)-4-(2-carboxyphenyl)-2-oxobut-3-enoate 2-carboxybenzaldehyde-lyase; (3Z)-4-(2-carboxyphenyl)-2-oxobut-3-enoate 2-formylbenzoate-lyase +ec:4.1.2.35 propioin synthase; 4-hydroxy-3-hexanone aldolase; 4-hydroxy-3-hexanone propanal-lyase +ec:4.1.2.36 lactate aldolase; lactate synthase; (S)-lactate acetaldehyde-lyase +ec:4.1.2.37 Deleted entry +ec:4.1.2.38 benzoin aldolase; benzaldehyde lyase; 2-hydroxy-1,2-diphenylethanone benzaldehyde-lyase +ec:4.1.2.39 Deleted entry +ec:4.1.2.40 tagatose-bisphosphate aldolase; D-tagatose-1,6-bisphosphate triosephosphate lyase +ec:4.1.2.41 Transferred to 4.1.2.61 +ec:4.1.2.42 D-threonine aldolase; D-TA; DTA; low specificity D-TA; low specificity D-threonine aldolase +ec:4.1.2.43 3-hexulose-6-phosphate synthase; D-arabino-3-hexulose 6-phosphate formaldehyde-lyase; 3-hexulosephosphate synthase; 3-hexulose phosphate synthase; HPS +ec:4.1.2.44 2,3-epoxybenzoyl-CoA dihydrolase; 2,3-dihydro-2,3-dihydroxybenzoyl-CoA lyase/hydrolase (deformylating); BoxC; dihydrodiol transforming enzyme; benzoyl-CoA oxidation component C; 2,3-dihydro-2,3-dihydroxybenzoyl-CoA 3,4-didehydroadipyl-CoA semialdehyde-lyase (formate-forming); benzoyl-CoA-dihydrodiol lyase (incorrect); 2,3-dihydro-2,3-dihydroxybenzoyl-CoA 3,4-didehydroadipyl-CoA-semialdehyde-lyase (formate-forming) +ec:4.1.2.45 trans-o-hydroxybenzylidenepyruvate hydratase-aldolase; 2'-hydroxybenzalpyruvate aldolase; NsaE; tHBPA hydratase-aldolase +ec:4.1.2.46 aliphatic (R)-hydroxynitrile lyase; (R)-HNL; (R)-oxynitrilase; (R)-hydroxynitrile lyase; LuHNL +ec:4.1.2.47 (S)-hydroxynitrile lyase; (S)-cyanohydrin producing hydroxynitrile lyase; (S)-oxynitrilase; (S)-HbHNL; (S)-MeHNL; hydroxynitrile lyase; oxynitrilase; HbHNL; MeHNL; (S)-selective hydroxynitrile lyase; (S)-cyanohydrin carbonyl-lyase (cyanide forming) +ec:4.1.2.48 low-specificity L-threonine aldolase; LtaE +ec:4.1.2.49 L-allo-threonine aldolase +ec:4.1.2.50 6-carboxytetrahydropterin synthase; CPH4 synthase; queD (gene name); ToyB; ykvK (gene name) +ec:4.1.2.51 2-dehydro-3-deoxy-D-gluconate aldolase; Pto1279 (gene name); KDGA; KDG-specific aldolase +ec:4.1.2.52 4-hydroxy-2-oxoheptanedioate aldolase; 2,4-dihydroxyhept-2-enedioate aldolase; HHED aldolase; 4-hydroxy-2-ketoheptanedioate aldolase; HKHD aldolase; HpcH; HpaI; 4-hydroxy-2-oxoheptanedioate succinate semialdehyde lyase (pyruvate-forming) +ec:4.1.2.53 2-keto-3-deoxy-L-rhamnonate aldolase; KDR aldolase; 2-dehydro-3-deoxyrhamnonate aldolase; 2-keto-3-deoxy acid sugar aldolase; YfaU; 2-dehydro-3-deoxy-L-rhamnonate (S)-lactaldehyde lyase (pyruvate-forming); 2-dehydro-3-deoxy-L-rhamnonate (R)-lactaldehyde lyase (pyruvate-forming) +ec:4.1.2.54 L-threo-3-deoxy-hexylosonate aldolase; GAAC; LGA1 +ec:4.1.2.55 2-dehydro-3-deoxy-phosphogluconate/2-dehydro-3-deoxy-6-phosphogalactonate aldolase; 2-keto-3-deoxygluconate aldolase (ambiguous); KDGA (ambiguous) +ec:4.1.2.56 2-amino-4,5-dihydroxy-6-oxo-7-(phosphooxy)heptanoate synthase; griI (gene name) +ec:4.1.2.57 sulfofructosephosphate aldolase; yihT (gene name) +ec:4.1.2.58 2-dehydro-3,6-dideoxy-6-sulfogluconate aldolase; KDSG aldolase +ec:4.1.2.59 dihydroneopterin phosphate aldolase; H2NMP aldolase +ec:4.1.2.60 dihydroneopterin triphosphate aldolase; PTPS-III +ec:4.1.2.61 feruloyl-CoA hydratase/lyase; hydroxycinnamoyl-CoA hydratase lyase; enoyl-CoA hydratase/aldolase; HCHL; ferB (gene name); couA (gene name) +ec:4.1.2.62 5-deoxyribulose 1-phosphate aldolase; 5-(methylthio)ribulose-1-phosphate aldolase; ald2 (gene name) +ec:4.1.2.63 2-hydroxyacyl-CoA lyase; HACL1 (gene name); 2-hydroxyphytanoyl-CoA lyase; 2-HPCL +ec:4.1.3.1 isocitrate lyase; isocitrase; isocitritase; isocitratase; threo-Ds-isocitrate glyoxylate-lyase; isocitrate glyoxylate-lyase +ec:4.1.3.2 Transferred to 2.3.3.9 +ec:4.1.3.3 N-acetylneuraminate lyase; N-acetylneuraminic acid aldolase; acetylneuraminate lyase; sialic aldolase; sialic acid aldolase; sialate lyase; N-acetylneuraminic aldolase; neuraminic aldolase; N-acetylneuraminate aldolase; neuraminic acid aldolase; neuraminate aldolase; N-acetylneuraminic lyase; N-acetylneuraminic acid lyase; NPL; NALase; NANA lyase; acetylneuraminate pyruvate-lyase; N-acetylneuraminate pyruvate-lyase; NanA; N-acetylneuraminate pyruvate-lyase (N-acetyl-D-mannosamine-forming) +ec:4.1.3.4 hydroxymethylglutaryl-CoA lyase; hydroxymethylglutaryl coenzyme A-cleaving enzyme; hydroxymethylglutaryl coenzyme A lyase; 3-hydroxy-3-methylglutaryl coenzyme A lyase; 3-hydroxy-3-methylglutaryl CoA cleaving enzyme; 3-hydroxy-3-methylglutaryl-CoA lyase; (S)-3-hydroxy-3-methylglutaryl-CoA acetoacetate-lyase +ec:4.1.3.5 Transferred to 2.3.3.10 +ec:4.1.3.6 citrate (pro-3S)-lyase; citrase; citratase; citritase; citridesmolase; citrate aldolase; citric aldolase; citrate lyase; citrate oxaloacetate-lyase; citrate oxaloacetate-lyase [(pro-3S)-CH2COO-->acetate] +ec:4.1.3.7 Transferred to 2.3.3.1 +ec:4.1.3.8 Transferred to 2.3.3.8 +ec:4.1.3.9 Transferred to 2.3.3.11 +ec:4.1.3.10 Transferred to 2.3.3.7 +ec:4.1.3.11 Transferred to 2.3.3.12 +ec:4.1.3.12 Transferred to 2.3.3.13 +ec:4.1.3.13 oxalomalate lyase; 3-oxalomalate glyoxylate-lyase +ec:4.1.3.14 L-erythro-3-hydroxyaspartate aldolase; L-erythro-beta-hydroxyaspartate aldolase; L-erythro-beta-hydroxyaspartate glycine-lyase; erythro-3-hydroxy-Ls-aspartate glyoxylate-lyase +ec:4.1.3.15 Transferred to 2.2.1.5 +ec:4.1.3.16 4-hydroxy-2-oxoglutarate aldolase; 2-oxo-4-hydroxyglutarate aldolase; hydroxyketoglutaric aldolase; 4-hydroxy-2-ketoglutaric aldolase; 2-keto-4-hydroxyglutaric aldolase; 4-hydroxy-2-ketoglutarate aldolase; 2-keto-4-hydroxyglutarate aldolase; 2-oxo-4-hydroxyglutaric aldolase; DL-4-hydroxy-2-ketoglutarate aldolase; hydroxyketoglutarate aldolase; 2-keto-4-hydroxybutyrate aldolase; 4-hydroxy-2-oxoglutarate glyoxylate-lyase; KHGA +ec:4.1.3.17 4-hydroxy-4-methyl-2-oxoglutarate aldolase; pyruvate aldolase; gamma-methyl-gamma-hydroxy-alpha-ketoglutaric aldolase; 4-hydroxy-4-methyl-2-ketoglutarate aldolase; 4-hydroxy-4-methyl-2-oxoglutarate pyruvate-lyase; HMG aldolase; CHA aldolase; 4-carboxy-4-hydroxy-2-oxoadipate aldolase +ec:4.1.3.18 Transferred to 2.2.1.6 +ec:4.1.3.19 Transferred to 2.5.1.56 +ec:4.1.3.20 Transferred to 2.5.1.57 +ec:4.1.3.21 Transferred to 2.3.3.14 +ec:4.1.3.22 citramalate lyase; citramalate pyruvate-lyase; citramalate synthase; citramalic-condensing enzyme; citramalate synthetase; citramalic synthase; (S)-citramalate lyase; (+)-citramalate pyruvate-lyase; citramalate pyruvate lyase; (3S)-citramalate pyruvate-lyase; (2S)-2-hydroxy-2-methylbutanedioate pyruvate-lyase +ec:4.1.3.23 Transferred to 2.3.3.2 +ec:4.1.3.24 malyl-CoA lyase; malyl-coenzyme A lyase; (3S)-3-carboxy-3-hydroxypropanoyl-CoA glyoxylate-lyase; mclA (gene name); mcl1 (gene name); (3S)-3-carboxy-3-hydroxypropanoyl-CoA glyoxylate-lyase (acetyl-CoA-forming); L-malyl-CoA lyase +ec:4.1.3.25 (S)-citramalyl-CoA lyase; citramalyl coenzyme A lyase (ambiguous); (+)-CMA-CoA lyase; (3S)-citramalyl-CoA pyruvate-lyase; Mcl (ambiguous); citramalyl-CoA lyase (ambiguous) +ec:4.1.3.26 3-hydroxy-3-isohexenylglutaryl-CoA lyase; beta-hydroxy-beta-isohexenylglutaryl CoA-lyase; hydroxyisohexenylglutaryl-CoA:acetatelyase; 3-hydroxy-3-isohexenylglutaryl coenzyme A lyase; 3-hydroxy-3-isohexenylglutaryl-CoA isopentenylacetoacetyl-CoA-lyase; 3-hydroxy-3-(4-methylpent-3-en-1-yl)glutaryl-CoA acetate-lyase +ec:4.1.3.27 anthranilate synthase; anthranilate synthetase; chorismate lyase; chorismate pyruvate-lyase (amino-accepting); TrpE +ec:4.1.3.28 Transferred to 2.3.3.3 +ec:4.1.3.29 Transferred to 2.3.3.4 +ec:4.1.3.30 methylisocitrate lyase; 2-methylisocitrate lyase; MICL; (2S,3R)-3-hydroxybutane-1,2,3-tricarboxylate pyruvate-lyase +ec:4.1.3.31 Transferred to 2.3.3.5 +ec:4.1.3.32 2,3-dimethylmalate lyase; 2,3-dimethylmalate pyruvate-lyase; (2R,3S)-2,3-dimethylmalate pyruvate-lyase +ec:4.1.3.33 Transferred to 2.3.3.6 +ec:4.1.3.34 citryl-CoA lyase; (3S)-citryl-CoA oxaloacetate-lyase +ec:4.1.3.35 (1-hydroxycyclohexan-1-yl)acetyl-CoA lyase; (1-hydroxycyclohexan-1-yl)acetyl-CoA cyclohexanone-lyase +ec:4.1.3.36 1,4-dihydroxy-2-naphthoyl-CoA synthase; naphthoate synthase; 1,4-dihydroxy-2-naphthoate synthase; dihydroxynaphthoate synthase; o-succinylbenzoyl-CoA 1,4-dihydroxy-2-naphthoate-lyase (cyclizing); MenB; o-succinylbenzoyl-CoA dehydratase (cyclizing) +ec:4.1.3.37 Transferred to 2.2.1.7 +ec:4.1.3.38 aminodeoxychorismate lyase; enzyme X; 4-amino-4-deoxychorismate lyase; 4-amino-4-deoxychorismate pyruvate-lyase +ec:4.1.3.39 4-hydroxy-2-oxovalerate aldolase; 4-hydroxy-2-ketovalerate aldolase; HOA; DmpG; 4-hydroxy-2-oxovalerate pyruvate-lyase; 4-hydroxy-2-oxopentanoate pyruvate-lyase; BphI; 4-hydroxy-2-oxopentanoate pyruvate-lyase (acetaldehyde-forming) +ec:4.1.3.40 chorismate lyase; CL; CPL; UbiC +ec:4.1.3.41 3-hydroxy-D-aspartate aldolase; D-3-hydroxyaspartate aldolase +ec:4.1.3.42 (4S)-4-hydroxy-2-oxoglutarate aldolase; 2-oxo-4-hydroxyglutarate aldolase (ambiguous); hydroxyketoglutaric aldolase (ambiguous); 4-hydroxy-2-ketoglutaric aldolase (ambiguous); 2-keto-4-hydroxyglutaric aldolase (ambiguous); 4-hydroxy-2-ketoglutarate aldolase (ambiguous); 2-keto-4-hydroxyglutarate aldolase (ambiguous); 2-oxo-4-hydroxyglutaric aldolase (ambiguous); hydroxyketoglutarate aldolase (ambiguous); 2-keto-4-hydroxybutyrate aldolase (ambiguous); 4-hydroxy-2-oxoglutarate glyoxylate-lyase (ambiguous); eda (gene name) +ec:4.1.3.43 4-hydroxy-2-oxohexanoate aldolase; BphI +ec:4.1.3.44 tRNA 4-demethylwyosine synthase (AdoMet-dependent); TYW1 +ec:4.1.3.45 3-hydroxybenzoate synthase; chorismatase/3-hydroxybenzoate synthase; hyg5 (gene name); bra8 (gene name); XanB2 +ec:4.1.3.46 (R)-citramalyl-CoA lyase; Ccl +ec:4.1.99.1 tryptophanase; L-tryptophanase; L-tryptophan indole-lyase (deaminating); TNase +ec:4.1.99.2 tyrosine phenol-lyase; beta-tyrosinase; L-tyrosine phenol-lyase (deaminating) +ec:4.1.99.3 deoxyribodipyrimidine photo-lyase; photoreactivating enzyme; DNA photolyase; DNA-photoreactivating enzyme; DNA cyclobutane dipyrimidine photolyase; DNA photolyase; deoxyribonucleic photolyase; deoxyribodipyrimidine photolyase; photolyase; PRE; PhrB photolyase; deoxyribonucleic cyclobutane dipyrimidine photolyase; phr A photolyase; dipyrimidine photolyase (photosensitive); deoxyribonucleate pyrimidine dimer lyase (photosensitive) +ec:4.1.99.4 Transferred to 3.5.99.7 +ec:4.1.99.5 aldehyde oxygenase (deformylating); decarbonylase; aldehyde decarbonylase; octadecanal decarbonylase; octadecanal alkane-lyase +ec:4.1.99.6 Transferred to 4.2.3.6 +ec:4.1.99.7 Transferred to 4.2.3.9 +ec:4.1.99.8 Transferred to 4.2.3.14 +ec:4.1.99.9 Transferred to 4.2.3.15 +ec:4.1.99.10 Transferred to 4.2.3.16 +ec:4.1.99.11 benzylsuccinate synthase; benzylsuccinate fumarate-lyase +ec:4.1.99.12 3,4-dihydroxy-2-butanone-4-phosphate synthase; DHBP synthase; L-3,4-dihydroxybutan-2-one-4-phosphate synthase +ec:4.1.99.13 (6-4)DNA photolyase; DNA photolyase; H64PRH; NF-10; phr (6-4); PL-(6-4); OtCPF1; (6-4) PHR; At64PHR +ec:4.1.99.14 spore photoproduct lyase; SAM; SP lyase; SPL; SplB; SplG +ec:4.1.99.15 Deleted entry +ec:4.1.99.16 geosmin synthase +ec:4.1.99.17 phosphomethylpyrimidine synthase; thiC (gene name) +ec:4.1.99.18 Transferred to 4.1.99.22 and 4.6.1.17 +ec:4.1.99.19 2-iminoacetate synthase; thiH (gene name) +ec:4.1.99.20 3-amino-4-hydroxybenzoate synthase; 3,4-AHBA synthase; griH (gene name) +ec:4.1.99.21 Transferred to 4.2.3.153 +ec:4.1.99.22 GTP 3',8-cyclase; MOCS1A (gene name); moaA (gene name); cnx2 (gene name) +ec:4.1.99.23 5-hydroxybenzimidazole synthase; bzaF (gene name); HBI synthase +ec:4.1.99.24 L-tyrosine isonitrile synthase; pvcA (gene name) +ec:4.1.99.25 L-tryptophan isonitrile synthase; isnA (gene name); ambI1 (gene name); well1 (gene name) +ec:4.1.99.26 3-amino-5-[(4-hydroxyphenyl)methyl]-4,4-dimethylpyrrolidin-2-one synthase; mftC (gene name) +ec:4.2.1.1 carbonic anhydrase; carbonate dehydratase; anhydrase; carbonate anhydrase; carbonic acid anhydrase; carboxyanhydrase; carbonic anhydrase A; carbonate hydro-lyase; carbonate hydro-lyase (carbon-dioxide-forming) +ec:4.2.1.2 fumarate hydratase; fumarase; L-malate hydro-lyase; (S)-malate hydro-lyase +ec:4.2.1.3 aconitate hydratase; cis-aconitase; aconitase; AcnB; 2-methylaconitate hydratase; citrate(isocitrate) hydro-lyase +ec:4.2.1.4 Deleted entry +ec:4.2.1.5 arabinonate dehydratase; D-arabinonate hydro-lyase +ec:4.2.1.6 galactonate dehydratase; D-galactonate dehydrase; D-galactonate dehydratase; D-galactonate hydro-lyase +ec:4.2.1.7 altronate dehydratase; D-altronate hydro-lyase +ec:4.2.1.8 mannonate dehydratase; mannonic hydrolase; mannonate hydrolyase; altronic hydro-lyase; altronate hydrolase; D-mannonate hydrolyase; D-mannonate hydro-lyase +ec:4.2.1.9 dihydroxy-acid dehydratase; acetohydroxyacid dehydratase; alpha,beta-dihydroxyacid dehydratase; 2,3-dihydroxyisovalerate dehydratase; alpha,beta-dihydroxyisovalerate dehydratase; dihydroxy acid dehydrase; DHAD; 2,3-dihydroxy-acid hydro-lyase +ec:4.2.1.10 3-dehydroquinate dehydratase; 3-dehydroquinate hydrolase; DHQase; dehydroquinate dehydratase; 3-dehydroquinase; 5-dehydroquinase; dehydroquinase; 5-dehydroquinate dehydratase; 5-dehydroquinate hydro-lyase; 3-dehydroquinate hydro-lyase +ec:4.2.1.11 phosphopyruvate hydratase; enolase; 2-phosphoglycerate dehydratase; 14-3-2-protein; nervous-system specific enolase; phosphoenolpyruvate hydratase; 2-phosphoglycerate dehydratase; 2-phosphoglyceric dehydratase; 2-phosphoglycerate enolase; gamma-enolase; 2-phospho-D-glycerate hydro-lyase +ec:4.2.1.12 phosphogluconate dehydratase; 6-phosphogluconate dehydratase; 6-phosphogluconic dehydrase; gluconate-6-phosphate dehydratase; gluconate 6-phosphate dehydratase; 6-phosphogluconate dehydrase; 6-phospho-D-gluconate hydro-lyase +ec:4.2.1.13 Transferred to 4.3.1.17 +ec:4.2.1.14 Transferred to 4.3.1.18 +ec:4.2.1.15 Deleted entry +ec:4.2.1.16 Transferred to 4.3.1.19 +ec:4.2.1.17 enoyl-CoA hydratase; enoyl hydrase; unsaturated acyl-CoA hydratase; beta-hydroxyacyl-CoA dehydrase; beta-hydroxyacid dehydrase; acyl coenzyme A hydrase; crotonase; crotonyl hydrase; 2-octenoyl coenzyme A hydrase; enoyl coenzyme A hydratase; 2-enoyl-CoA hydratase; short-chain enoyl-CoA hydratase; ECH; trans-2-enoyl-CoA hydratase; enoyl coenzyme A hydrase (D); enoyl coenzyme A hydrase (L); short chain enoyl coenzyme A hydratase; D-3-hydroxyacyl-CoA dehydratase; enol-CoA hydratase +ec:4.2.1.18 methylglutaconyl-CoA hydratase; methylglutaconyl coenzyme A hydratase; 3-methylglutaconyl CoA hydratase; methylglutaconase; (S)-3-hydroxy-3-methylglutaryl-CoA hydro-lyase +ec:4.2.1.19 imidazoleglycerol-phosphate dehydratase; IGP dehydratase; D-erythro-1-(imidazol-4-yl)glycerol 3-phosphate hydro-lyase +ec:4.2.1.20 tryptophan synthase; L-tryptophan synthetase; indoleglycerol phosphate aldolase; tryptophan desmolase; tryptophan synthetase; L-serine hydro-lyase (adding indoleglycerol-phosphate); L-serine hydro-lyase [adding 1-C-(indol-3-yl)glycerol 3-phosphate, L-tryptophan and glyceraldehyde-3-phosphate-forming] +ec:4.2.1.21 Deleted entry +ec:4.2.1.22 cystathionine beta-synthase; serine sulfhydrase; beta-thionase; methylcysteine synthase; cysteine synthase (incorrect); serine sulfhydrylase; L-serine hydro-lyase (adding homocysteine) +ec:4.2.1.23 Deleted entry +ec:4.2.1.24 porphobilinogen synthase; aminolevulinate dehydratase; delta-aminolevulinate dehydratase; delta-aminolevulinic acid dehydrase; delta-aminolevulinic acid dehydratase; aminolevulinic dehydratase; delta-aminolevulinic dehydratase; 5-levulinic acid dehydratase; 5-aminolevulinate hydro-lyase (adding 5-aminolevulinate and cyclizing); hemB (gene name) +ec:4.2.1.25 L-arabinonate dehydratase; L-arabonate dehydrase; L-arabonate dehydratase; L-arabinonate hydro-lyase +ec:4.2.1.26 Deleted entry +ec:4.2.1.27 acetylenecarboxylate hydratase; acetylenemonocarboxylate hydratase; alkynoate hydratase; acetylenemonocarboxylate hydrase; acetylenemonocarboxylic acid hydrase; malonate-semialdehyde dehydratase; 3-oxopropanoate hydro-lyase +ec:4.2.1.28 propanediol dehydratase; meso-2,3-butanediol dehydrase; diol dehydratase; DL-1,2-propanediol hydro-lyase; diol dehydrase; adenosylcobalamin-dependent diol dehydratase; propanediol dehydrase; coenzyme B12-dependent diol dehydrase; 1,2-propanediol dehydratase; dioldehydratase; propane-1,2-diol hydro-lyase; RiDD +ec:4.2.1.29 Transferred to 4.99.1.6 +ec:4.2.1.30 glycerol dehydratase; glycerol dehydrase; glycerol hydro-lyase; dhaB (gene name) +ec:4.2.1.31 maleate hydratase; D-malate hydro-lyase; malease; (R)-malate hydro-lyase +ec:4.2.1.32 L(+)-tartrate dehydratase; tartrate dehydratase; tartaric acid dehydrase; L-tartrate dehydratase; L-(+)-tartaric acid dehydratase; (R,R)-tartrate hydro-lyase +ec:4.2.1.33 3-isopropylmalate dehydratase; (2R,3S)-3-isopropylmalate hydro-lyase; beta-isopropylmalate dehydratase; isopropylmalate isomerase; alpha-isopropylmalate isomerase; 3-isopropylmalate hydro-lyase +ec:4.2.1.34 (S)-2-methylmalate dehydratase; mesaconate hydratase; (+)-citramalate hydro-lyase; L-citramalate hydrolase; citramalate dehydratase; (+)-citramalic hydro-lyase; mesaconate mesaconase; mesaconase; (S)-2-methylmalate hydro-lyase +ec:4.2.1.35 (R)-2-methylmalate dehydratase; citraconate hydratase; citraconase; citramalate hydro-lyase; (-)-citramalate hydro-lyase; (R)-2-methylmalate hydro-lyase +ec:4.2.1.36 homoaconitate hydratase; homoaconitase; cis-homoaconitase; HACN; Lys4; LysF; 2-hydroxybutane-1,2,4-tricarboxylate hydro-lyase (incorrect) +ec:4.2.1.37 Transferred to 3.3.2.4 +ec:4.2.1.38 Transferred to 4.3.1.20 +ec:4.2.1.39 gluconate dehydratase; D-gluconate dehydratase; D-gluconate hydro-lyase +ec:4.2.1.40 glucarate dehydratase; D-glucarate dehydratase; D-glucarate hydro-lyase +ec:4.2.1.41 5-dehydro-4-deoxyglucarate dehydratase; 5-keto-4-deoxy-glucarate dehydratase; 5-keto-4-deoxy-glucarate dehydratase; deoxyketoglucarate dehydratase; D-4-deoxy-5-ketoglucarate hydro-lyase; 5-dehydro-4-deoxy-D-glucarate hydro-lyase (decarboxylating) +ec:4.2.1.42 galactarate dehydratase; D-galactarate hydro-lyase; D-galactarate hydro-lyase (5-dehydro-4-deoxy-D-glucarate-forming); talrD (gene name)/galrD (gene name); galactarate dehydratase (L-threo-forming) +ec:4.2.1.43 2-dehydro-3-deoxy-L-arabinonate dehydratase; 2-keto-3-deoxy-L-arabinonate dehydratase; 2-dehydro-3-deoxy-L-arabinonate hydro-lyase +ec:4.2.1.44 myo-inosose-2 dehydratase; inosose 2,3-dehydratase; ketoinositol dehydratase; 2,4,6/3,5-pentahydroxycyclohexanone hydro-lyase +ec:4.2.1.45 CDP-glucose 4,6-dehydratase; cytidine diphosphoglucose oxidoreductase; CDP-glucose 4,6-hydro-lyase +ec:4.2.1.46 dTDP-glucose 4,6-dehydratase; thymidine diphosphoglucose oxidoreductase; TDP-glucose oxidoreductase; dTDP-glucose 4,6-hydro-lyase; dTDP-glucose 4,6-hydro-lyase (dTDP-4-dehydro-6-deoxy-alpha-D-glucose-forming) +ec:4.2.1.47 GDP-mannose 4,6-dehydratase; guanosine 5'-diphosphate-D-mannose oxidoreductase; guanosine diphosphomannose oxidoreductase; guanosine diphosphomannose 4,6-dehydratase; GDP-D-mannose dehydratase; GDP-D-mannose 4,6-dehydratase; Gmd; GDP-mannose 4,6-hydro-lyase; GDP-mannose 4,6-hydro-lyase (GDP-4-dehydro-6-deoxy-D-mannose-forming) +ec:4.2.1.48 D-glutamate cyclase; D-glutamate hydro-lyase (cyclizing) +ec:4.2.1.49 urocanate hydratase; urocanase; 3-(5-oxo-4,5-dihydro-3H-imidazol-4-yl)propanoate hydro-lyase +ec:4.2.1.50 pyrazolylalanine synthase; beta-pyrazolylalaninase; beta-(1-pyrazolyl)alanine synthase; L-serine hydro-lyase (adding pyrazole) +ec:4.2.1.51 prephenate dehydratase; prephenate hydro-lyase (decarboxylating) +ec:4.2.1.52 Transferred to 4.3.3.7 +ec:4.2.1.53 oleate hydratase; (R)-10-hydroxystearate 10-hydro-lyase +ec:4.2.1.54 lactoyl-CoA dehydratase; lactoyl coenzyme A dehydratase; lactyl-coenzyme A dehydrase; lactyl CoA dehydratase; acrylyl coenzyme A hydratase; lactoyl-CoA hydro-lyase +ec:4.2.1.55 3-hydroxybutyryl-CoA dehydratase; D-3-hydroxybutyryl coenzyme A dehydratase; D-3-hydroxybutyryl-CoA dehydratase; enoyl coenzyme A hydrase (D); (3R)-3-hydroxybutanoyl-CoA hydro-lyase +ec:4.2.1.56 itaconyl-CoA hydratase; itaconyl coenzyme A hydratase; citramalyl-CoA hydro-lyase +ec:4.2.1.57 isohexenylglutaconyl-CoA hydratase; 3-hydroxy-3-isohexenylglutaryl-CoA-hydrolase; isohexenylglutaconyl coenzyme A hydratase; beta-isohexenylglutaconyl-CoA-hydratase; 3-hydroxy-3-(4-methylpent-3-en-1-yl)glutaryl-CoA hydro-lyase +ec:4.2.1.58 Deleted entry +ec:4.2.1.59 3-hydroxyacyl-[acyl-carrier-protein] dehydratase; fabZ (gene name); fabA (gene name); D-3-hydroxyoctanoyl-[acyl carrier protein] dehydratase; D-3-hydroxyoctanoyl-acyl carrier protein dehydratase; beta-hydroxyoctanoyl-acyl carrier protein dehydrase; beta-hydroxyoctanoyl thioester dehydratase; beta-hydroxyoctanoyl-ACP-dehydrase; (3R)-3-hydroxyoctanoyl-[acyl-carrier-protein] hydro-lyase; (3R)-3-hydroxyoctanoyl-[acyl-carrier-protein] hydro-lyase (oct-2-enoyl-[acyl-carrier protein]-forming); 3-hydroxyoctanoyl-[acyl-carrier-protein] dehydratase +ec:4.2.1.60 Deleted entry +ec:4.2.1.61 Deleted entry +ec:4.2.1.62 5alpha-hydroxysteroid dehydratase; 5alpha-ergosta-7,22-diene-3beta,5-diol 5,6-hydro-lyase +ec:4.2.1.63 Transferred to 3.3.2.9 and 3.3.2.10 +ec:4.2.1.64 Transferred to 3.3.2.9 and 3.3.2.10 +ec:4.2.1.65 3-cyanoalanine hydratase; beta-cyanoalanine hydrolase; beta-cyanoalanine hydratase; beta-CNAla hydrolase; beta-CNA nitrilase; L-asparagine hydro-lyase +ec:4.2.1.66 cyanide hydratase; formamide dehydratase; formamide hydro-lyase +ec:4.2.1.67 D-fuconate dehydratase; D-fuconate hydro-lyase +ec:4.2.1.68 L-fuconate dehydratase; L-fuconate hydro-lyase +ec:4.2.1.69 cyanamide hydratase; urea hydro-lyase +ec:4.2.1.70 pseudouridylate synthase; pseudouridylic acid synthetase; pseudouridine monophosphate synthetase; 5-ribosyluracil 5-phosphate synthetase; pseudouridylate synthetase; upsilonUMP synthetase; uracil hydro-lyase (adding D-ribose 5-phosphate); YeiN; pseudouridine-5'-phosphate glycosidase +ec:4.2.1.71 Deleted entry +ec:4.2.1.72 Transferred to 4.1.1.78 +ec:4.2.1.73 protoaphin-aglucone dehydratase (cyclizing); protoaphin dehydratase; protoaphin dehydratase (cyclizing); protoaphin-aglucone hydro-lyase (cyclizing) +ec:4.2.1.74 medium-chain-enoyl-CoA hydratase; long-chain enoyl coenzyme A hydratase (incorrect); long-chain-enoyl-CoA hydratase (incorrect); long-chain-(3S)-3-hydroxyacyl-CoA hydro-lyase (incorrect) +ec:4.2.1.75 uroporphyrinogen-III synthase; porphobilinogenase; uroporphyrinogen isomerase; uroporphyrinogen III cosynthase; URO-synthase; hydroxymethylbilane hydro-lyase (cyclizing) +ec:4.2.1.76 UDP-glucose 4,6-dehydratase; UDP-D-glucose-4,6-hydrolyase; UDP-D-glucose oxidoreductase; UDP-glucose 4,6-hydro-lyase +ec:4.2.1.77 trans-L-3-hydroxyproline dehydratase; trans-L-3-hydroxyproline hydro-lyase +ec:4.2.1.78 (S)-norcoclaurine synthase; (S)-norlaudanosoline synthase; 4-hydroxyphenylacetaldehyde hydro-lyase (adding dopamine) +ec:4.2.1.79 2-methylcitrate dehydratase; 2-methylcitrate hydro-lyase; PrpD; 2-hydroxybutane-1,2,3-tricarboxylate hydro-lyase +ec:4.2.1.80 2-oxopent-4-enoate hydratase; 2-keto-4-pentenoate hydratase; OEH; 2-keto-4-pentenoate (vinylpyruvate)hydratase; 4-hydroxy-2-oxopentanoate hydro-lyase; 4-hydroxy-2-oxopentanoate hydro-lyase (2-oxopent-4-enoate-forming); mhpD (gene name); ahdF (gene name); todG (gene name); cmtF (gene name); xylJ (gene name); cnbE (gene name) +ec:4.2.1.81 D(-)-tartrate dehydratase; D-tartrate dehydratase; (S,S)-tartrate hydro-lyase +ec:4.2.1.82 xylonate dehydratase; D-xylo-aldonate dehydratase; D-xylonate dehydratase; D-xylonate hydro-lyase +ec:4.2.1.83 4-oxalomesaconate hydratase; 4-oxalmesaconate hydratase; 4-carboxy-2-oxohexenedioate hydratase; 4-carboxy-2-oxobutane-1,2,4-tricarboxylate 2,3-hydro-lyase; oxalmesaconate hydratase; gamma-oxalmesaconate hydratase; 2-hydroxy-4-oxobutane-1,2,4-tricarboxylate 2,3-hydro-lyase; LigJ; GalB +ec:4.2.1.84 nitrile hydratase; nitrilase (ambiguous); 3-cyanopyridine hydratase; NHase; L-NHase; H-NHase; acrylonitrile hydratase; aliphatic nitrile hydratase; nitrile hydro-lyase +ec:4.2.1.85 dimethylmaleate hydratase; (2R,3S)-2,3-dimethylmalate hydro-lyase +ec:4.2.1.86 Deleted entry +ec:4.2.1.87 octopamine dehydratase; octopamine hydrolyase; octopamine hydro-lyase (deaminating) +ec:4.2.1.88 synephrine dehydratase; syringinase +ec:4.2.1.89 Deleted entry +ec:4.2.1.90 L-rhamnonate dehydratase; L-rhamnonate hydro-lyase +ec:4.2.1.91 arogenate dehydratase; carboxycyclohexadienyl dehydratase; L-arogenate hydro-lyase (decarboxylating) +ec:4.2.1.92 hydroperoxide dehydratase; hydroperoxide isomerase; linoleate hydroperoxide isomerase; linoleic acid hydroperoxide isomerase; HPI; (9Z,11E,14Z)-(13S)-hydroperoxyoctadeca-9,11,14-trienoate 12,13-hydro-lyase; (9Z,11E,14Z)-(13S)-hydroperoxyoctadeca-9,11,14-trienoate 12,13-hydro-lyase [(9Z)-(13S)-12,13-epoxyoctadeca-9,11-dienoate-forming]; allene oxide synthase; AOS +ec:4.2.1.93 ATP-dependent NAD(P)H-hydrate dehydratase; reduced nicotinamide adenine dinucleotide hydrate dehydratase; ATP-dependent H4NAD(P)+OH dehydratase; (6S)-beta-6-hydroxy-1,4,5,6-tetrahydronicotinamide-adenine-dinucleotide hydro-lyase(ATP-hydrolysing); (6S)-6-beta-hydroxy-1,4,5,6-tetrahydronicotinamide-adenine-dinucleotide hydro-lyase (ATP-hydrolysing; NADH-forming) +ec:4.2.1.94 scytalone dehydratase; scytalone 7,8-hydro-lyase +ec:4.2.1.95 kievitone hydratase; KHase; kievitone-hydrate hydro-lyase +ec:4.2.1.96 4a-hydroxytetrahydrobiopterin dehydratase; 4alpha-hydroxy-tetrahydropterin dehydratase; 4a-carbinolamine dehydratase; pterin-4alpha-carbinolamine dehydratase; 4a-hydroxytetrahydrobiopterin hydro-lyase +ec:4.2.1.97 phaseollidin hydratase; phaseollidin-hydrate hydro-lyase +ec:4.2.1.98 16alpha-hydroxyprogesterone dehydratase; hydroxyprogesterone dehydroxylase; 16alpha-hydroxyprogesterone dehydroxylase; 16alpha-dehydroxylase; 16alpha-hydroxyprogesterone hydro-lyase +ec:4.2.1.99 2-methylisocitrate dehydratase; (2S,3R)-3-hydroxybutane-1,2,3-tricarboxylate hydro-lyase +ec:4.2.1.100 cyclohexa-1,5-dienecarbonyl-CoA hydratase; cyclohexa-1,5-diene-1-carbonyl-CoA hydratase; dienoyl-CoA hydratase; cyclohexa-1,5-dienecarbonyl-CoA hydro-lyase (incorrect); 6-hydroxycyclohex-1-enecarbonyl-CoA hydro-lyase (cyclohexa-1,5-dienecarbonyl-CoA-forming) +ec:4.2.1.101 Transferred to 4.1.2.61 +ec:4.2.1.102 Transferred to 4.2.1.100 +ec:4.2.1.103 cyclohexyl-isocyanide hydratase; isonitrile hydratase; N-cyclohexylformamide hydro-lyase +ec:4.2.1.104 cyanase; cyanate lyase; cyanate hydrolase; cyanate aminohydrolase; cyanate C-N-lyase; cyanate hydratase +ec:4.2.1.105 2-hydroxyisoflavanone dehydratase; 2,7,4'-trihydroxyisoflavanone hydro-lyase; 2,7,4'-trihydroxyisoflavanone hydro-lyase (daidzein-forming) +ec:4.2.1.106 bile-acid 7alpha-dehydratase; baiE (gene name); 7alpha,12alpha-dihydroxy-3-oxochol-4-enoate hydro-lyase; 7alpha,12alpha-dihydroxy-3-oxochol-4-enoate hydro-lyase (12alpha-hydroxy-3-oxochola-4,6-dienoate-forming); BA7 alpha dehydratase +ec:4.2.1.107 3alpha,7alpha,12alpha-trihydroxy-5beta-cholest-24-enoyl-CoA hydratase; 46 kDa hydratase 2; (24R,25R)-3alpha,7alpha,12alpha,24-tetrahydroxy-5beta-cholestanoyl-CoA hydro-lyase +ec:4.2.1.108 ectoine synthase; ectC (gene name); N-acetyldiaminobutyrate dehydratase; N-acetyldiaminobutanoate dehydratase; L-ectoine synthase; 4-N-acetyl-L-2,4-diaminobutanoate hydro-lyase (L-ectoine-forming); N4-acetyl-L-2,4-diaminobutanoate hydro-lyase (L-ectoine-forming) +ec:4.2.1.109 methylthioribulose 1-phosphate dehydratase; 1-PMT-ribulose dehydratase; S-methyl-5-thio-D-ribulose-1-phosphate hydro-lyase; S-methyl-5-thio-D-ribulose-1-phosphate 4-hydro-lyase [5-(methylthio)-2,3-dioxopentyl-phosphate-forming] +ec:4.2.1.110 aldos-2-ulose dehydratase; pyranosone dehydratase; AUDH; 1,5-anhydro-D-fructose dehydratase (microthecin-forming) +ec:4.2.1.111 1,5-anhydro-D-fructose dehydratase; 1,5-anhydro-D-fructose 4-dehydratase; 1,5-anhydro-D-fructose hydrolyase; 1,5-anhydro-D-arabino-hex-2-ulose dehydratase; AFDH; AF dehydratase; 1,5-anhydro-D-fructose hydro-lyase +ec:4.2.1.112 acetylene hydratase; AH; acetaldehyde hydro-lyase +ec:4.2.1.113 o-succinylbenzoate synthase; o-succinylbenzoic acid synthase; OSB synthase; OSBS; 2-succinylbenzoate synthase; MenC +ec:4.2.1.114 methanogen homoaconitase; methanogen HACN +ec:4.2.1.115 UDP-N-acetylglucosamine 4,6-dehydratase (configuration-inverting); FlaA1; UDP-N-acetylglucosamine 5-inverting 4,6-dehydratase; PseB; UDP-N-acetylglucosamine hydro-lyase (inverting; UDP-2-acetamido-2,6-dideoxy-beta-L-arabino-hex-4-ulose-forming) +ec:4.2.1.116 3-hydroxypropionyl-CoA dehydratase; 3-hydroxypropionyl-CoA hydro-lyase; 3-hydroxypropanoyl-CoA dehydratase +ec:4.2.1.117 2-methylcitrate dehydratase (2-methyl-trans-aconitate forming) +ec:4.2.1.118 3-dehydroshikimate dehydratase +ec:4.2.1.119 enoyl-CoA hydratase 2; 2-enoyl-CoA hydratase 2; AtECH2; ECH2; MaoC; MFE-2; PhaJAc; D-3-hydroxyacyl-CoA hydro-lyase; D-specific 2-trans-enoyl-CoA hydratase +ec:4.2.1.120 4-hydroxybutanoyl-CoA dehydratase +ec:4.2.1.121 colneleate synthase; 9-divinyl ether synthase; 9-DES; CYP74D; CYP74D1; CYP74 cytochrome P-450; DES1; (8E)-9-[(1E,3E)-nona-1,3-dien-1-yloxy]non-8-enoate synthase +ec:4.2.1.122 tryptophan synthase (indole-salvaging); tryptophan synthase beta2 +ec:4.2.1.123 tetrahymanol synthase +ec:4.2.1.124 arabidiol synthase; PEN1 (gene name); (S)-squalene-2,3-epoxide hydro-lyase (arabidiol forming) +ec:4.2.1.125 dammarenediol II synthase; dammarenediol synthase; 2,3-oxidosqualene (20S)-dammarenediol cyclase; DDS; (S)-squalene-2,3-epoxide hydro-lyase (dammarenediol-II forming) +ec:4.2.1.126 N-acetylmuramic acid 6-phosphate etherase; MurNAc-6-P etherase; MurQ +ec:4.2.1.127 linalool dehydratase; linalool hydro-lyase (myrcene-forming) +ec:4.2.1.128 lupan-3beta,20-diol synthase; LUP1 (gene name) +ec:4.2.1.129 squalene---hopanol cyclase; squalene---hopene cyclase (ambiguous) +ec:4.2.1.130 D-lactate dehydratase; glyoxylase III; GLO3 +ec:4.2.1.131 carotenoid 1,2-hydratase; CrtC +ec:4.2.1.132 2-hydroxyhexa-2,4-dienoate hydratase; tesE (gene name); hsaE (gene name) +ec:4.2.1.133 copal-8-ol diphosphate hydratase; CcCLS +ec:4.2.1.134 very-long-chain (3R)-3-hydroxyacyl-CoA dehydratase; PHS1 (gene name); PAS2 (gene name) +ec:4.2.1.135 UDP-N-acetylglucosamine 4,6-dehydratase (configuration-retaining); PglF +ec:4.2.1.136 ADP-dependent NAD(P)H-hydrate dehydratase; (6S)-beta-6-hydroxy-1,4,5,6-tetrahydronicotinamide-adenine-dinucleotide hydro-lyase(ADP-hydrolysing); (6S)-6-beta-hydroxy-1,4,5,6-tetrahydronicotinamide-adenine-dinucleotide hydro-lyase (ADP-hydrolysing; NADH-forming) +ec:4.2.1.137 sporulenol synthase; sqhC (gene name) +ec:4.2.1.138 (+)-caryolan-1-ol synthase; GcoA +ec:4.2.1.139 pterocarpan synthase; medicarpin synthase; medicarpan synthase; 7,2'-dihydroxy-4'-methoxyisoflavanol dehydratase; 2',7-dihydroxy-4'-methoxyisoflavanol dehydratase; DMI dehydratase; DMID; 2'-hydroxyisoflavanol 4,2'-dehydratase; PTS (gene name); 4'-methoxyisoflavan-2',4,7-triol hydro-lyase [(-)-medicarpin-forming] +ec:4.2.1.140 gluconate/galactonate dehydratase; gluconate dehydratase (ambiguous); Sso3198 (gene name); Pto0485 (gene name) +ec:4.2.1.141 2-dehydro-3-deoxy-D-arabinonate dehydratase +ec:4.2.1.142 5'-oxoaverantin cyclase; OAVN cyclase; 5'-oxoaverantin hydro-lyase [(2'S,5'S)-averufin forming] +ec:4.2.1.143 versicolorin B synthase; versiconal cyclase; VBS +ec:4.2.1.144 3-amino-5-hydroxybenzoate synthase; AHBA synthase; rifK (gene name) +ec:4.2.1.145 capreomycidine synthase; VioD (ambiguous) +ec:4.2.1.146 L-galactonate dehydratase; LGD1 +ec:4.2.1.147 5,6,7,8-tetrahydromethanopterin hydro-lyase; formaldehyde-activating enzyme +ec:4.2.1.148 2-methylfumaryl-CoA hydratase; Mcd; erythro-beta-methylmalonyl-CoA hydrolyase; mesaconyl-coenzyme A hydratase (ambiguous); mesaconyl-C1-CoA hydratase +ec:4.2.1.149 crotonobetainyl-CoA hydratase; CaiD; L-carnityl-CoA dehydratase +ec:4.2.1.150 short-chain-enoyl-CoA hydratase; 3-hydroxybutyryl-CoA dehydratase; crotonase; crt (gene name) +ec:4.2.1.151 chorismate dehydratase; MqnA +ec:4.2.1.152 hydroperoxy icosatetraenoate dehydratase; epidermal lipoxygenase-3 (ambiguous); eLOX3 (ambiguous) +ec:4.2.1.153 3-methylfumaryl-CoA hydratase; Meh; mesaconyl-C4-CoA hydratase; mesaconyl-coenzyme A hydratase (ambiguous) +ec:4.2.1.154 tetracenomycin F2 cyclase; tcmI (gene name) +ec:4.2.1.155 (methylthio)acryloyl-CoA hydratase; DmdD +ec:4.2.1.156 L-talarate dehydratase; L-talarate hydro-lyase +ec:4.2.1.157 (R)-2-hydroxyisocaproyl-CoA dehydratase; 2-hydroxyisocaproyl-CoA dehydratase; HadBC +ec:4.2.1.158 galactarate dehydratase (D-threo-forming) +ec:4.2.1.159 dTDP-4-dehydro-6-deoxy-alpha-D-glucopyranose 2,3-dehydratase; jadO (gene name); evaA (gene name); megBVI (gene name); eryBV (gene name); mtmV (gene name); oleV (gene name); spnO (gene name); TDP-4-keto-6-deoxy-D-glucose 2,3-dehydratase; dTDP-4-dehydro-6-deoxy-alpha-D-glucopyranose hydro-lyase (dTDP-(2R,6S)-2,4-dihydroxy-6-methyl-2,6-dihydropyran-3-one-forming) +ec:4.2.1.160 2,5-diamino-6-(5-phospho-D-ribosylamino)pyrimidin-4(3H)-one isomerase/dehydratase +ec:4.2.1.161 bisanhydrobacterioruberin hydratase; CruF; C50 carotenoid 2'',3''-hydratase +ec:4.2.1.162 6-deoxy-6-sulfo-D-gluconate dehydratase; SG dehydratase +ec:4.2.1.163 2-oxo-hept-4-ene-1,7-dioate hydratase; HpcG +ec:4.2.1.164 dTDP-4-dehydro-2,6-dideoxy-D-glucose 3-dehydratase; SpnQ; TDP-4-keto-2,6-dideoxy-D-glucose 3-dehydrase +ec:4.2.1.165 chlorophyllide a 31-hydratase; bchF (gene name) +ec:4.2.1.166 phosphinomethylmalate isomerase; pmi (gene name) +ec:4.2.1.167 (R)-2-hydroxyglutaryl-CoA dehydratase; hgdAB (gene names) +ec:4.2.1.168 GDP-4-dehydro-6-deoxy-alpha-D-mannose 3-dehydratase; colD (gene name) +ec:4.2.1.169 3-vinyl bacteriochlorophyllide d 31-hydratase; bchV (gene name) +ec:4.2.1.170 2-(omega-methylthio)alkylmalate dehydratase; IPMI (gene name); 2-[(omega-methylthio)alkyl]malate hydro-lyase (2-[(omega-methylthio)alkyl]maleate-forming) +ec:4.2.1.171 cis-L-3-hydroxyproline dehydratase; cis-L-3-hydroxyproline hydro-lyase; c3LHypD +ec:4.2.1.172 trans-4-hydroxy-L-proline dehydratase +ec:4.2.1.173 ent-8alpha-hydroxylabd-13-en-15-yl diphosphate synthase; SmCPS4 +ec:4.2.1.174 peregrinol diphosphate synthase; MvCPS1 +ec:4.2.1.175 (R)-3-(aryl)lactoyl-CoA dehydratase; fldBC (gene names); (R)-phenyllactoyl-CoA dehydratase; aryllactyl-CoA dehydratase +ec:4.2.1.176 L-lyxonate dehydratase; lyxD (gene name) +ec:4.2.1.177 (2S)-3-sulfopropanediol dehydratase; hpfG (gene name); (S)-DHPS dehydratase +ec:4.2.1.178 difructose-dianhydride-III synthase; DFA-IIIase; difructose anhydride III hydrolase +ec:4.2.1.179 difructose-anhydride-I synthase; DFAIase; inulobiose hydrolase; bis-D-fructose 2',1:2,1'-dianhydride fructohydrolase +ec:4.2.1.180 (E)-benzylidenesuccinyl-CoA hydratase; bbsH (gene name) +ec:4.2.2.1 hyaluronate lyase; hyaluronidase (ambiguous); glucuronoglycosaminoglycan lyase (ambiguous); spreading factor; mucinase (ambiguous) +ec:4.2.2.2 pectate lyase; polygalacturonic transeliminase; pectic acid transeliminase; polygalacturonate lyase; endopectin methyltranseliminase; pectate transeliminase; endogalacturonate transeliminase; pectic acid lyase; pectic lyase; alpha-1,4-D-endopolygalacturonic acid lyase; PGA lyase; PPase-N; endo-alpha-1,4-polygalacturonic acid lyase; polygalacturonic acid lyase; pectin trans-eliminase; Polygalacturonic acid trans-eliminase +ec:4.2.2.3 mannuronate-specific alginate lyase; alginate lyase I; alginate lyase; alginase I; alginase II; alginase; poly(beta-D-1,4-mannuronide) lyase; poly(beta-D-mannuronate) lyase; aly (gene name) (ambiguous); poly[(1->4)-beta-D-mannuronide] lyase +ec:4.2.2.4 Transferred to 4.2.2.20 and 4.2.2.21 +ec:4.2.2.5 chondroitin AC lyase; chondroitinase (ambiguous); chondroitin sulfate lyase; chondroitin AC eliminase; chondroitinase AC; ChnAC +ec:4.2.2.6 oligogalacturonide lyase; oligogalacturonate lyase; unsaturated oligogalacturonate transeliminase; OGTE +ec:4.2.2.7 heparin lyase; heparin eliminase; heparinase +ec:4.2.2.8 heparin-sulfate lyase; heparin-sulfate eliminase; heparitin-sulfate lyase; heparitinase I; heparitinase II +ec:4.2.2.9 pectate disaccharide-lyase; pectate exo-lyase; exopectic acid transeliminase; exopectate lyase; exopolygalacturonic acid-trans-eliminase; PATE; exo-PATE; exo-PGL; exopolygalacturonate lyase (ambiguous); pelW (gene name); pelX (gene name) +ec:4.2.2.10 pectin lyase; pectin trans-eliminase; endo-pectin lyase; polymethylgalacturonic transeliminase; pectin methyltranseliminase; pectolyase; PL; PNL; PMGL +ec:4.2.2.11 guluronate-specific alginate lyase; alginase II; guluronate lyase; L-guluronan lyase; L-guluronate lyase; poly-alpha-L-guluronate lyase; polyguluronate-specific alginate lyase; poly(alpha-L-1,4-guluronide) exo-lyase; poly(alpha-L-guluronate) lyase; poly[(1->4)-alpha-L-guluronide] exo-lyase +ec:4.2.2.12 xanthan lyase +ec:4.2.2.13 exo-(1->4)-alpha-D-glucan lyase; alpha-(1->4)-glucan 1,5-anhydro-D-fructose eliminase; alpha-1,4-glucan exo-lyase; alpha-1,4-glucan lyase; GLase +ec:4.2.2.14 glucuronan lyase; (1,4)-beta-D-glucuronan lyase +ec:4.2.2.15 anhydrosialidase; anhydroneuraminidase; sialglycoconjugate N-acylneuraminylhydrolase (2,7-cyclizing); sialidase L +ec:4.2.2.16 levan fructotransferase (DFA-IV-forming); 2,6-beta-D-fructan D-fructosyl-D-fructosyltransferase (forming di-beta-D-fructofuranose 2,6':2',6-dianhydride); levan fructotransferase; 2,6-beta-D-fructan lyase (di-beta-D-fructofuranose-2,6':2',6-dianhydride-forming) +ec:4.2.2.17 inulin fructotransferase (DFA-I-forming); inulin fructotransferase (DFA-I-producing); inulin fructotransferase (depolymerizing, difructofuranose-1,2':2',1-dianhydride-forming); inulin D-fructosyl-D-fructosyltransferase (1,2':1',2-dianhydride-forming); inulin D-fructosyl-D-fructosyltransferase (forming alpha-D-fructofuranose beta-D-fructofuranose 1,2':1',2-dianhydride); 2,1-beta-D-fructan lyase (alpha-D-fructofuranose-beta-D-fructofuranose-1,2':2,1'-dianhydride-forming) +ec:4.2.2.18 inulin fructotransferase (DFA-III-forming); inulin fructotransferase (DFA-III-producing); inulin fructotransferase (depolymerizing); inulase II; inulinase II; inulin fructotransferase (depolymerizing, difructofuranose-1,2':2,3'-dianhydride-forming); inulin D-fructosyl-D-fructosyltransferase (1,2':2,3'-dianhydride-forming); inulin D-fructosyl-D-fructosyltransferase (forming alpha-D-fructofuranose beta-D-fructofuranose 1,2':2,3'-dianhydride); 2,1-beta-D-fructan lyase (alpha-D-fructofuranose-beta-D-fructofuranose-1,2':2,3'-dianhydride-forming) +ec:4.2.2.19 chondroitin B lyase; chondroitinase B; ChonB; ChnB +ec:4.2.2.20 chondroitin-sulfate-ABC endolyase; chondroitinase (ambiguous); chondroitin ABC eliminase (ambiguous); chondroitinase ABC (ambiguous); chondroitin ABC lyase (ambiguous); chondroitin sulfate ABC lyase (ambiguous); ChS ABC lyase (ambiguous); chondroitin sulfate ABC endoeliminase; chondroitin sulfate ABC endolyase; ChS ABC lyase I +ec:4.2.2.21 chondroitin-sulfate-ABC exolyase; chondroitinase (ambiguous); chondroitin ABC eliminase (ambiguous); chondroitinase ABC (ambiguous); chondroitin ABC lyase (ambiguous); chondroitin sulfate ABC lyase (ambiguous); ChS ABC lyase (ambiguous); chondroitin sulfate ABC exoeliminase; chondroitin sulfate ABC exolyase; ChS ABC lyase II +ec:4.2.2.22 pectate trisaccharide-lyase; exopectate-lyase; pectate lyase A; PelA +ec:4.2.2.23 rhamnogalacturonan endolyase; rhamnogalacturonase B; alpha-L-rhamnopyranosyl-(1->4)-alpha-D-galactopyranosyluronide lyase; Rgase B; rhamnogalacturonan alpha-L-rhamnopyranosyl-(1,4)-alpha-D-galactopyranosyluronide lyase; RG-lyase; YesW; RGL4; Rgl11A; Rgl11Y; RhiE +ec:4.2.2.24 rhamnogalacturonan exolyase; YesX +ec:4.2.2.25 gellan lyase +ec:4.2.2.26 oligo-alginate lyase; aly (gene name) (ambiguous); oalS17 (gene name); oligoalginate lyase; exo-oligoalginate lyase +ec:4.2.2.27 pectin monosaccharide-lyase; exo-pectin lyase; PLIII +ec:4.2.3.1 threonine synthase; threonine synthetase; O-phospho-L-homoserine phospho-lyase (adding water) +ec:4.2.3.2 ethanolamine-phosphate phospho-lyase; O-phosphoethanolamine-phospholyase; amino alcohol O-phosphate phospholyase; O-phosphorylethanol-amine phospho-lyase; ethanolamine-phosphate phospho-lyase (deaminating) +ec:4.2.3.3 methylglyoxal synthase; methylglyoxal synthetase; glycerone-phosphate phospho-lyase +ec:4.2.3.4 3-dehydroquinate synthase; 5-dehydroquinate synthase; 5-dehydroquinic acid synthetase; dehydroquinate synthase; 3-dehydroquinate synthetase; 3-deoxy-arabino-heptulosonate-7-phosphate phosphate-lyase (cyclizing); 3-deoxy-arabino-heptulonate-7-phosphate phosphate-lyase (cyclizing); 3-deoxy-arabino-heptulonate-7-phosphate phosphate-lyase (cyclizing; 3-dehydroquinate-forming) +ec:4.2.3.5 chorismate synthase; 5-O-(1-carboxyvinyl)-3-phosphoshikimate phosphate-lyase +ec:4.2.3.6 trichodiene synthase; trichodiene synthetase; sesquiterpene cyclase; trans,trans-farnesyl-diphosphate sesquiterpenoid-lyase +ec:4.2.3.7 pentalenene synthase; pentalenene synthetase +ec:4.2.3.8 casbene synthase; casbene synthetase; geranylgeranyl-diphosphate diphosphate-lyase (cyclizing) +ec:4.2.3.9 aristolochene synthase; sesquiterpene cyclase; trans,trans-farnesyl diphosphate aristolochene-lyase; trans,trans-farnesyl-diphosphate diphosphate-lyase (cyclizing, aristolochene-forming) +ec:4.2.3.10 (-)-endo-fenchol synthase; (-)-endo-fenchol cyclase; geranyl pyrophosphate:(-)-endo-fenchol cyclase +ec:4.2.3.11 sabinene-hydrate synthase; sabinene hydrate cyclase +ec:4.2.3.12 6-pyruvoyltetrahydropterin synthase; 2-amino-4-oxo-6-[(1S,2R)-1,2-dihydroxy-3-triphosphooxypropyl]-7,8-dihydroxypteridine triphosphate lyase; 6-[(1S,2R)-1,2-dihydroxy-3-triphosphooxypropyl]-7,8-dihydropterin triphosphate-lyase (6-pyruvoyl-5,6,7,8-tetrahydropterin-forming) +ec:4.2.3.13 (+)-delta-cadinene synthase +ec:4.2.3.14 Deleted entry +ec:4.2.3.15 myrcene synthase +ec:4.2.3.16 (4S)-limonene synthase; (-)-(4S)-limonene synthase; 4S-(-)-limonene synthase; geranyldiphosphate diphosphate lyase (limonene forming); geranyldiphosphate diphosphate lyase [cyclizing, (4S)-limonene-forming]; geranyl-diphosphate diphosphate-lyase [cyclizing; (-)-(4S)-limonene-forming] +ec:4.2.3.17 taxadiene synthase; geranylgeranyl-diphosphate diphosphate-lyase (cyclizing, taxadiene-forming) +ec:4.2.3.18 abieta-7,13-diene synthase; copalyl-diphosphate diphosphate-lyase (cyclizing) (ambiguous); abietadiene synthase (ambiguous) +ec:4.2.3.19 ent-kaurene synthase; ent-kaurene synthase B; ent-kaurene synthetase B, ent-copalyl-diphosphate diphosphate-lyase (cyclizing) +ec:4.2.3.20 (R)-limonene synthase; (+)-limonene synthase; geranyldiphosphate diphosphate lyase [(+)-(R)-limonene-forming]; geranyl-diphosphate diphosphate-lyase [cyclizing, (+)-(4R)-limonene-forming] +ec:4.2.3.21 vetispiradiene synthase; vetispiradiene-forming farnesyl pyrophosphate cyclase; pemnaspirodiene synthase; HVS; vetispiradiene cyclase +ec:4.2.3.22 germacradienol synthase; germacradienol/germacrene-D synthase; 2-trans,6-trans-farnesyl-diphosphate diphosphate-lyase [(1E,4S,5E,7R)-germacra-1(10),5-dien-11-ol-forming] +ec:4.2.3.23 germacrene-A synthase; germacrene A synthase; (+)-germacrene A synthase; (+)-(10R)-germacrene A synthase; GAS; 2-trans,6-trans-farnesyl-diphosphate diphosphate-lyase (germacrene-A-forming) +ec:4.2.3.24 amorpha-4,11-diene synthase; amorphadiene synthase +ec:4.2.3.25 S-linalool synthase; LIS; Lis; 3S-linalool synthase +ec:4.2.3.26 R-linalool synthase; (3R)-linalool synthase; (-)-3R-linalool synthase +ec:4.2.3.27 isoprene synthase; ISPC; ISPS; dimethylallyl-diphosphate diphosphate-lyase (isoprene-forming) +ec:4.2.3.28 ent-cassa-12,15-diene synthase; OsDTC1; OsKS7 +ec:4.2.3.29 ent-sandaracopimaradiene synthase; OsKS10; ent-sandaracopimara-8(14),15-diene synthase +ec:4.2.3.30 ent-pimara-8(14),15-diene synthase; OsKS5 +ec:4.2.3.31 ent-pimara-9(11),15-diene synthase; PMD synthase +ec:4.2.3.32 levopimaradiene synthase; PtTPS-LAS; LPS; copalyl-diphosphate diphosphate-lyase [abieta-8(14),12-diene-forming] +ec:4.2.3.33 stemar-13-ene synthase; OsDTC2; OsK8; OsKL8; OsKS8; stemarene synthase; syn-stemar-13-ene synthase +ec:4.2.3.34 stemod-13(17)-ene synthase; OsKSL11; stemodene synthase +ec:4.2.3.35 syn-pimara-7,15-diene synthase; 9beta-pimara-7,15-diene synthase; OsDTS2; OsKS4 +ec:4.2.3.36 terpentetriene synthase; Cyc2 (ambiguous) +ec:4.2.3.37 epi-isozizaene synthase; SCO5222 protein +ec:4.2.3.38 alpha-bisabolene synthase; bisabolene synthase +ec:4.2.3.39 epi-cedrol synthase; 8-epicedrol synthase; epicedrol synthase +ec:4.2.3.40 (Z)-gamma-bisabolene synthase +ec:4.2.3.41 elisabethatriene synthase; elisabethatriene cyclase +ec:4.2.3.42 aphidicolan-16beta-ol synthase; PbACS +ec:4.2.3.43 fusicocca-2,10(14)-diene synthase; fusicoccadiene synthase; PaFS; PaDC4 +ec:4.2.3.44 isopimara-7,15-diene synthase; PaTPS-Iso; copalyl diphosphate-lyase (isopimara-7,15-diene-forming) +ec:4.2.3.45 phyllocladan-16alpha-ol synthase; PaDC1 +ec:4.2.3.46 alpha-farnesene synthase; (E,E)-alpha-farnesene synthase; AFS1; MdAFS1 +ec:4.2.3.47 beta-farnesene synthase; farnesene synthase; terpene synthase 10; terpene synthase 10-B73; TPS10 +ec:4.2.3.48 (3S,6E)-nerolidol synthase; (E)-nerolidol synthase; nerolidol synthase; (3S)-(E)-nerolidol synthase; FaNES1 +ec:4.2.3.49 (3R,6E)-nerolidol synthase; terpene synthase 1 +ec:4.2.3.50 (+)-alpha-santalene synthase [(2Z,6Z)-farnesyl diphosphate cyclizing]; SBS (ambiguous) +ec:4.2.3.51 beta-phellandrene synthase (neryl-diphosphate-cyclizing); phellandrene synthase 1; PHS1; monoterpene synthase PHS1 +ec:4.2.3.52 (4S)-beta-phellandrene synthase (geranyl-diphosphate-cyclizing); phellandrene synthase; (-)-beta-phellandrene synthase; (-)-(4S)-beta-phellandrene synthase +ec:4.2.3.53 (+)-endo-beta-bergamotene synthase [(2Z,6Z)-farnesyl diphosphate cyclizing]; SBS (ambiguous) +ec:4.2.3.54 (-)-endo-alpha-bergamotene synthase [(2Z,6Z)-farnesyl diphosphate cyclizing]; SBS (ambiguous) +ec:4.2.3.55 (S)-beta-bisabolene synthase +ec:4.2.3.56 gamma-humulene synthase; humulene cyclase +ec:4.2.3.57 (-)-beta-caryophyllene synthase; beta-caryophyllene synthase; (2E,6E)-farnesyl-diphosphate diphosphate-lyase (caryophyllene-forming) +ec:4.2.3.58 longifolene synthase +ec:4.2.3.59 (E)-gamma-bisabolene synthase +ec:4.2.3.60 germacrene C synthase +ec:4.2.3.61 5-epiaristolochene synthase; 5-epi-aristolochene synthase; tobacco epiaristolochene synthase; farnesyl pyrophosphate cyclase (ambiguous); EAS; TEAS +ec:4.2.3.62 (-)-gamma-cadinene synthase [(2Z,6E)-farnesyl diphosphate cyclizing]; (-)-gamma-cadinene cyclase +ec:4.2.3.63 (+)-cubenene synthase +ec:4.2.3.64 (+)-epicubenol synthase; farnesyl pyrophosphate cyclase (ambiguous) +ec:4.2.3.65 zingiberene synthase; alpha-zingiberene synthase; ZIS +ec:4.2.3.66 beta-selinene cyclase +ec:4.2.3.67 cis-muuroladiene synthase; MxpSS1 +ec:4.2.3.68 beta-eudesmol synthase +ec:4.2.3.69 (+)-alpha-barbatene synthase; AtBS +ec:4.2.3.70 patchoulol synthase +ec:4.2.3.71 (E,E)-germacrene B synthase +ec:4.2.3.72 alpha-gurjunene synthase +ec:4.2.3.73 valencene synthase +ec:4.2.3.74 presilphiperfolanol synthase; BcBOT2; CND15 +ec:4.2.3.75 (-)-germacrene D synthase +ec:4.2.3.76 (+)-delta-selinene synthase +ec:4.2.3.77 (+)-germacrene D synthase +ec:4.2.3.78 beta-chamigrene synthase +ec:4.2.3.79 thujopsene synthase +ec:4.2.3.80 alpha-longipinene synthase +ec:4.2.3.81 exo-alpha-bergamotene synthase; trans-alpha-bergamotene synthase; LaBERS (gene name) +ec:4.2.3.82 alpha-santalene synthase +ec:4.2.3.83 beta-santalene synthase +ec:4.2.3.84 10-epi-gamma-eudesmol synthase +ec:4.2.3.85 alpha-eudesmol synthase +ec:4.2.3.86 7-epi-alpha-selinene synthase +ec:4.2.3.87 alpha-guaiene synthase; PatTps177 (gene name) +ec:4.2.3.88 viridiflorene synthase; TPS31 +ec:4.2.3.89 (+)-beta-caryophyllene synthase; GcoA +ec:4.2.3.90 5-epi-alpha-selinene synthase; 8a-epi-alpha-selinene synthase; NP1 +ec:4.2.3.91 cubebol synthase; Cop4 +ec:4.2.3.92 (+)-gamma-cadinene synthase +ec:4.2.3.93 delta-guaiene synthase +ec:4.2.3.94 gamma-curcumene synthase; PatTpsA (gene name) +ec:4.2.3.95 (-)-alpha-cuprenene synthase; Cop6 +ec:4.2.3.96 avermitilol synthase +ec:4.2.3.97 (-)-delta-cadinene synthase +ec:4.2.3.98 (+)-T-muurolol synthase +ec:4.2.3.99 labdatriene synthase; OsKSL10 (gene name) +ec:4.2.3.100 bicyclogermacrene synthase; Ov-TPS4 +ec:4.2.3.101 7-epi-sesquithujene synthase; TPS4-B73 +ec:4.2.3.102 sesquithujene synthase; TPS5-Del1 +ec:4.2.3.103 ent-isokaurene synthase; OsKSL5i; OsKSL6 +ec:4.2.3.104 alpha-humulene synthase; ZSS1 +ec:4.2.3.105 tricyclene synthase; TPS3 +ec:4.2.3.106 (E)-beta-ocimene synthase; beta-ocimene synthase; AtTPS03; ama0a23; LjEbetaOS; MtEBOS +ec:4.2.3.107 (+)-car-3-ene synthase; 3-carene cyclase; 3-carene synthase; 3CAR; (+)-3-carene synthase +ec:4.2.3.108 1,8-cineole synthase; 1,8-cineole cyclase; geranyl pyrophoshate:1,8-cineole cyclase; 1,8-cineole synthetase +ec:4.2.3.109 (-)-sabinene synthase +ec:4.2.3.110 (+)-sabinene synthase; SS +ec:4.2.3.111 (-)-alpha-terpineol synthase +ec:4.2.3.112 (+)-alpha-terpineol synthase +ec:4.2.3.113 terpinolene synthase; ag9; PmeTPS2; LaLIMS_RR +ec:4.2.3.114 gamma-terpinene synthase; OvTPS2; ClcTS +ec:4.2.3.115 alpha-terpinene synthase +ec:4.2.3.116 (+)-camphene synthase +ec:4.2.3.117 (-)-camphene synthase; CS +ec:4.2.3.118 2-methylisoborneol synthase; sco7700; 2-MIB cyclase; MIB synthase; MIBS +ec:4.2.3.119 (-)-alpha-pinene synthase; (-)-alpha-pinene/(-)-camphene synthase; (-)-alpha-pinene cyclase +ec:4.2.3.120 (-)-beta-pinene synthase; beta-geraniolene synthase; (-)-(1S,5S)-pinene synthase; geranyldiphosphate diphosphate lyase (pinene forming) +ec:4.2.3.121 (+)-alpha-pinene synthase; (+)-alpha-pinene cyclase; cyclase I +ec:4.2.3.122 (+)-beta-pinene synthase; (+)-pinene cyclase; cyclase III +ec:4.2.3.123 beta-sesquiphellandrene synthase; Tps1; Os08g07100 (gene name) +ec:4.2.3.124 2-deoxy-scyllo-inosose synthase; btrC (gene name); neoC (gene name); kanC (gene name) +ec:4.2.3.125 alpha-muurolene synthase; Cop3 +ec:4.2.3.126 gamma-muurolene synthase; Cop3 +ec:4.2.3.127 beta-copaene synthase; cop4 +ec:4.2.3.128 beta-cubebene synthase; cop4; Mg25 +ec:4.2.3.129 (+)-sativene synthase; cop4 +ec:4.2.3.130 tetraprenyl-beta-curcumene synthase; ytpB (gene name) +ec:4.2.3.131 miltiradiene synthase; SmMDS; SmiKSL; RoKSL +ec:4.2.3.132 neoabietadiene synthase; TPS-LAS +ec:4.2.3.133 alpha-copaene synthase +ec:4.2.3.134 5-phosphooxy-L-lysine phospho-lyase; 5-phosphohydroxy-L-lysine ammoniophospholyase; AGXT2L2 (gene name); (5R)-5-phosphonooxy-L-lysine phosphate-lyase (deaminating; (S)-2-amino-6-oxohexanoate-forming); 5-phosphonooxy-L-lysine phospho-lyase +ec:4.2.3.135 Delta6-protoilludene synthase; 6-protoilludene synthase +ec:4.2.3.136 alpha-isocomene synthase; MrTPS2 +ec:4.2.3.137 (E)-2-epi-beta-caryophyllene synthase; 2-epi-(E)-beta-caryophyllene synthase; SmMTPSL26 +ec:4.2.3.138 (+)-epi-alpha-bisabolol synthase +ec:4.2.3.139 valerena-4,7(11)-diene synthase; VoTPS2; VoTPS7 +ec:4.2.3.140 cis-abienol synthase; Z-abienol synthase; CAS; ABS +ec:4.2.3.141 sclareol synthase; SS +ec:4.2.3.142 7-epizingiberene synthase [(2Z,6Z)-farnesyl diphosphate cyclizing]; ShZIS (gene name) +ec:4.2.3.143 kunzeaol synthase; TgTPS2 (gene name) +ec:4.2.3.144 geranyllinalool synthase; TPS04/GES; GES +ec:4.2.3.145 ophiobolin F synthase +ec:4.2.3.146 cyclooctat-9-en-7-ol synthase; cotB2 +ec:4.2.3.147 pimaradiene synthase; PbmPIM1; PcmPIM1 +ec:4.2.3.148 cembrene C synthase; DtcycA (gene name) +ec:4.2.3.149 nephthenol synthase; DtcycA (gene name); DtcycB (gene name) +ec:4.2.3.150 cembrene A synthase; DtcycB (gene name) +ec:4.2.3.151 pentamethylcyclopentadecatrienol synthase; DtcycB (gene name) +ec:4.2.3.152 2-epi-5-epi-valiolone synthase; AcbC; ValA; CetA; SalQ; C7-cyclitol synthase +ec:4.2.3.153 (5-formylfuran-3-yl)methyl phosphate synthase; mfnB (gene name); 4-HFC-P synthase; 4-(hydroxymethyl)-2-furaldehyde phosphate synthase +ec:4.2.3.154 demethyl-4-deoxygadusol synthase; Nos2 (gene name); Anb2 (gene name) +ec:4.2.3.155 2-epi-valiolone synthase +ec:4.2.3.156 hydroxysqualene synthase; hpnC (gene name) +ec:4.2.3.157 (+)-isoafricanol synthase +ec:4.2.3.158 (-)-spiroviolene synthase +ec:4.2.3.159 tsukubadiene synthase +ec:4.2.3.160 (2S,3R,6S,9S)-(-)-protoillud-7-ene synthase; TPS6 (gene name) +ec:4.2.3.161 (3S)-(+)-asterisca-2(9),6-diene synthase; TPS2 (gene name) +ec:4.2.3.162 (-)-alpha-amorphene synthase +ec:4.2.3.163 (+)-corvol ether B synthase +ec:4.2.3.164 (+)-eremophilene synthase; STC3 (gene name); geoA (gene name) +ec:4.2.3.165 (1R,4R,5S)-(-)-guaia-6,10(14)-diene synthase; STC5 (gene name) +ec:4.2.3.166 (+)-(1E,4E,6S,7R)-germacra-1(10),4-dien-6-ol synthase +ec:4.2.3.167 dolabella-3,7-dien-18-ol synthase; TPS20 (gene name) +ec:4.2.3.168 dolathalia-3,7,11-triene synthase; TPS20 (gene name) +ec:4.2.3.169 7-epi-alpha-eudesmol synthase +ec:4.2.3.170 4-epi-cubebol synthase +ec:4.2.3.171 (+)-corvol ether A synthase +ec:4.2.3.172 10-epi-juneol synthase +ec:4.2.3.173 tau-cadinol synthase +ec:4.2.3.174 (2E,6E)-hedycaryol synthase +ec:4.2.3.175 10-epi-cubebol synthase; sce6369 +ec:4.2.3.176 sesterfisherol synthase; NfSS +ec:4.2.3.177 beta-thujene synthase; CoTPS1 +ec:4.2.3.178 stellata-2,6,19-triene synthase +ec:4.2.3.179 guaia-4,6-diene synthase; XsTPS2 +ec:4.2.3.180 pseudolaratriene synthase; PxaTPS8 +ec:4.2.3.181 selina-4(15),7(11)-diene synthase; SdS +ec:4.2.3.182 pristinol synthase +ec:4.2.3.183 nezukol synthase; TPS2 +ec:4.2.3.184 5-hydroxy-alpha-gurjunene synthase; MpMTPSL4 +ec:4.2.3.185 ent-atiserene synthase; IrKSL4 +ec:4.2.3.186 ent-13-epi-manoyl oxide synthase; SmKSL2; ent-LDPP synthase +ec:4.2.3.187 (2Z,6E)-hedycaryol synthase; HcS +ec:4.2.3.188 beta-geranylfarnesene synthase; Bcl-TS +ec:4.2.3.189 9,13-epoxylabd-14-ene synthase; ELS (gene name); TPS2 (gene name) (ambiguous); peregrinol-diphosphate diphosphate-lyase (9,13-epoxylabd-14-ene-forming) +ec:4.2.3.190 manoyl oxide synthase; GrTPS6; CfTPS3; CfTPS4; MvELS +ec:4.2.3.191 cycloaraneosene synthase; SdnA +ec:4.2.3.192 labda-7,13(16),14-triene synthase; SCLAV_p0491 +ec:4.2.3.193 (12E)-labda-8(17),12,14-triene synthase; CldD +ec:4.2.3.194 (-)-drimenol synthase; PhDS; VoTPS3; farnesyl pyrophosphate:drimenol cyclase; drimenol cyclase; (2E,6E)-farnesyl-diphosphate diphosphohydrolase (drimenol-forming) +ec:4.2.3.195 rhizathalene A synthase; TPS08 (gene name) +ec:4.2.3.196 dolabradiene synthase; KSL4 (gene name) +ec:4.2.3.197 eudesmane-5,11-diol synthase; ZmEDS (gene name) +ec:4.2.3.198 alpha-selinene synthase; LfTPS2 (gene name) +ec:4.2.3.199 (-)-5-epieremophilene synthase; STPS1 (gene name); STP2 (gene name); STP3 (gene name) +ec:4.2.3.200 beta-pinacene synthase; PcS +ec:4.2.3.201 hydropyrene synthase; HpS +ec:4.2.3.202 hydropyrenol synthase; HpS +ec:4.2.3.203 isoelisabethatriene synthase; HpS (ambiguous) +ec:4.2.3.204 valerianol synthase; ChTPS1 (gene name); CsiTPS8 (gene name) +ec:4.2.3.205 sodorifen synthase; sodD (gene name) +ec:4.2.99.1 Transferred to 4.2.2.1 +ec:4.2.99.2 Transferred to 4.2.3.1 +ec:4.2.99.3 Transferred to 4.2.2.2 +ec:4.2.99.4 Transferred to 4.2.2.3 +ec:4.2.99.5 Deleted entry +ec:4.2.99.6 Deleted entry +ec:4.2.99.7 Transferred to 4.2.3.2 +ec:4.2.99.8 Transferred to 2.5.1.47 +ec:4.2.99.9 Transferred to 2.5.1.48 +ec:4.2.99.10 Transferred to 2.5.1.49 +ec:4.2.99.11 Transferred to 4.2.3.3 +ec:4.2.99.12 carboxymethyloxysuccinate lyase; carbon-oxygen lyase; carboxymethyloxysuccinate glycolate-lyase +ec:4.2.99.13 Transferred to 2.5.1.50 +ec:4.2.99.14 Transferred to 2.5.1.51 +ec:4.2.99.15 Transferred to 2.5.1.52 +ec:4.2.99.16 Transferred to 2.5.1.53 +ec:4.2.99.17 Deleted entry +ec:4.2.99.18 DNA-(apurinic or apyrimidinic site) lyase; AP lyase; AP endonuclease class I; endodeoxyribonuclease (apurinic or apyrimidinic); deoxyribonuclease (apurinic or apyrimidinic); E. coli endonuclease III; phage-T4 UV endonuclease; Micrococcus luteus UV endonuclease; AP site-DNA 5'-phosphomonoester-lyase; X-ray endonuclease III +ec:4.2.99.19 Transferred to 4.4.1.23 +ec:4.2.99.20 2-succinyl-6-hydroxy-2,4-cyclohexadiene-1-carboxylate synthase; 2-succinyl-6-hydroxy-2,4-cyclohexadiene-1-carboxylic acid synthase; 6-hydroxy-2-succinylcyclohexa-2,4-diene-1-carboxylate synthase; SHCHC synthase; MenH; YfbB +ec:4.2.99.21 isochorismate lyase; salicylate biosynthesis protein pchB; pyochelin biosynthetic protein PchB; isochorismate pyruvate lyase +ec:4.2.99.22 tuliposide A-converting enzyme; tuliposide-converting enzyme; 6-O-(4'-hydroxy-2'-methylenebutyryl)-D-glucose acyltransferase (lactone-forming); TCA; TCEA +ec:4.2.99.23 tuliposide B-converting enzyme +ec:4.2.99.24 thebaine synthase; THS +ec:4.3.1.1 aspartate ammonia-lyase; aspartase; fumaric aminase; L-aspartase; L-aspartate ammonia-lyase +ec:4.3.1.2 methylaspartate ammonia-lyase; beta-methylaspartase; 3-methylaspartase; L-threo-3-methylaspartate ammonia-lyase +ec:4.3.1.3 histidine ammonia-lyase; histidase; histidinase; histidine alpha-deaminase; L-histidine ammonia-lyase +ec:4.3.1.4 formimidoyltetrahydrofolate cyclodeaminase; formiminotetrahydrofolate cyclodeaminase; 5-formimidoyltetrahydrofolate ammonia-lyase (cyclizing) +ec:4.3.1.5 Transferred to 4.3.1.23 and 4.3.1.24 and 4.3.1.25 +ec:4.3.1.6 beta-alanyl-CoA ammonia-lyase; beta-alanyl coenzyme A ammonia-lyase +ec:4.3.1.7 ethanolamine ammonia-lyase; ethanolamine deaminase +ec:4.3.1.8 Transferred to 2.5.1.61 +ec:4.3.1.9 glucosaminate ammonia-lyase; glucosaminic dehydrase; D-glucosaminate dehydratase; D-glucosaminic acid dehydrase; aminodeoxygluconate dehydratase; 2-amino-2-deoxy-D-gluconate hydro-lyase (deaminating); aminodeoxygluconate ammonia-lyase; 2-amino-2-deoxy-D-gluconate ammonia-lyase; D-glucosaminate ammonia-lyase; D-glucosaminate ammonia-lyase (isomerizing; 2-dehydro-3-deoxy-D-gluconate-forming) +ec:4.3.1.10 serine-sulfate ammonia-lyase; (L-SOS)lyase +ec:4.3.1.11 Deleted entry +ec:4.3.1.12 ornithine cyclodeaminase; ornithine cyclase; ornithine cyclase (deaminating); L-ornithine ammonia-lyase (cyclizing) +ec:4.3.1.13 carbamoyl-serine ammonia-lyase; O-carbamoyl-L-serine deaminase; carbamoylserine deaminase; O-carbamoyl-L-serine ammonia-lyase (pyruvate-forming) +ec:4.3.1.14 3-aminobutyryl-CoA ammonia-lyase; L-3-aminobutyryl-CoA deaminase; L-3-aminobutyryl-CoA ammonia-lyase +ec:4.3.1.15 diaminopropionate ammonia-lyase; diaminopropionatase; alpha,beta-diaminopropionate ammonia-lyase; 2,3-diaminopropionate ammonia-lyase; 2,3-diaminopropanoate ammonia-lyase; 2,3-diaminopropanoate ammonia-lyase (adding H2O; pyruvate-forming) +ec:4.3.1.16 threo-3-hydroxy-L-aspartate ammonia-lyase; L-threo-3-hydroxyaspartate dehydratase; threo-3-hydroxyaspartate ammonia-lyase +ec:4.3.1.17 L-serine ammonia-lyase; serine deaminase; L-hydroxyaminoacid dehydratase; L-serine deaminase; L-serine dehydratase; L-serine hydro-lyase (deaminating) +ec:4.3.1.18 D-serine ammonia-lyase; D-hydroxyaminoacid dehydratase; D-serine dehydrase; D-hydroxy amino acid dehydratase; D-serine hydrolase; D-serine dehydratase (deaminating); D-serine deaminase; D-serine hydro-lyase (deaminating) +ec:4.3.1.19 threonine ammonia-lyase; threonine deaminase; L-serine dehydratase; serine deaminase; L-threonine dehydratase; threonine dehydrase; L-threonine deaminase; threonine dehydratase; L-threonine hydro-lyase (deaminating); L-threonine ammonia-lyase +ec:4.3.1.20 erythro-3-hydroxy-L-aspartate ammonia-lyase; erythro-beta-hydroxyaspartate dehydratase; erythro-3-hydroxyaspartate dehydratase; erythro-3-hydroxy-Ls-aspartate hydro-lyase (deaminating); erythro-3-hydroxy-Ls-aspartate ammonia-lyase +ec:4.3.1.21 Deleted entry +ec:4.3.1.22 3,4-dihydroxyphenylalanine reductive deaminase; reductive deaminase; DOPA-reductive deaminase; DOPARDA +ec:4.3.1.23 tyrosine ammonia-lyase; TAL; tyrase; L-tyrosine ammonia-lyase +ec:4.3.1.24 phenylalanine ammonia-lyase; phenylalanine deaminase; phenylalanine ammonium-lyase; PAL; L-phenylalanine ammonia-lyase; Phe ammonia-lyase +ec:4.3.1.25 phenylalanine/tyrosine ammonia-lyase; PTAL; bifunctional PAL +ec:4.3.1.26 Transferred to 1.21.3.9 +ec:4.3.1.27 threo-3-hydroxy-D-aspartate ammonia-lyase; D-threo-3-hydroxyaspartate dehydratase +ec:4.3.1.28 L-lysine cyclodeaminase; rapL (gene name); fkbL (gene name); tubZ (gene name); visC (gene name) +ec:4.3.1.29 D-glucosaminate-6-phosphate ammonia-lyase; DgaE; 6-phospho-D-glucosaminate ammonia-lyase (2-dehydro-3-deoxy-6-phospho-D-gluconate-forming) +ec:4.3.1.30 dTDP-4-amino-4,6-dideoxy-D-glucose ammonia-lyase; desII (gene name); eryCV (gene name); MegCV +ec:4.3.1.31 L-tryptophan ammonia lyase; WAL +ec:4.3.1.32 7,8-didemethyl-8-hydroxy-5-deazariboflavin synthase; FO synthase; fbiC (gene name) (ambiguous); cofG (gene name) +ec:4.3.2.1 argininosuccinate lyase; arginosuccinase; argininosuccinic acid lyase; arginine-succinate lyase; N-(L-argininosuccinate) arginine-lyase; omega-N-(L-arginino)succinate arginine-lyase; 2-(omega-N-L-arginino)succinate arginine-lyase (fumarate-forming) +ec:4.3.2.2 adenylosuccinate lyase; adenylosuccinase; succino AMP-lyase; 6-N-(1,2-dicarboxyethyl)AMP AMP-lyase; 6-N-(1,2-dicarboxyethyl)AMP AMP-lyase (fumarate-forming) +ec:4.3.2.3 ureidoglycolate lyase; ureidoglycolatase (ambiguous); ureidoglycolase (ambiguous); ureidoglycolate hydrolase (misleading); (S)-ureidoglycolate urea-lyase +ec:4.3.2.4 purine imidazole-ring cyclase; DNA-4,6-diamino-5-formamidopyrimidine 8-C,9-N-lyase (cyclizing); DNA-4,6-diamino-5-formamidopyrimidine 8-C,9-N-lyase (cyclizing; DNA-adenine-forming) +ec:4.3.2.5 peptidylamidoglycolate lyase; alpha-hydroxyglycine amidating dealkylase; peptidyl-alpha-hydroxyglycine alpha-amidating lyase; HGAD; PGL; PAL; peptidylamidoglycolate peptidylamide-lyase +ec:4.3.2.6 gamma-L-glutamyl-butirosin B gamma-glutamyl cyclotransferase; btrG (gene name); gamma-L-glutamyl-butirosin B gamma-glutamyl cyclotransferase (5-oxoproline producing) +ec:4.3.2.7 glutathione-specific gamma-glutamylcyclotransferase; gamma-GCG; CHAC (gene name); CHAC1 (gene name); CHAC2 (gene name) +ec:4.3.2.8 gamma-glutamylamine cyclotransferase; GGACT +ec:4.3.2.9 gamma-glutamylcyclotransferase; gamma-glutamyl-amino acid cyclotransferase; gamma-L-glutamylcyclotransferase; L-glutamic cyclase; (5-L-glutamyl)-L-amino-acid 5-glutamyltransferase (cyclizing); GGCT +ec:4.3.2.10 imidazole glycerol-phosphate synthase; IGP synthase; hisFH (gene names); HIS7 (gene name) +ec:4.3.3.1 3-ketovalidoxylamine C-N-lyase; 3-ketovalidoxylamine A C-N-lyase; p-nitrophenyl-3-ketovalidamine p-nitroaniline lyase; 4-nitrophenyl-3-ketovalidamine 4-nitroaniline-lyase +ec:4.3.3.2 strictosidine synthase; strictosidine synthetase; STR; 3-alpha(S)-strictosidine tryptamine-lyase +ec:4.3.3.3 deacetylisoipecoside synthase; deacetylisoipecoside dopamine-lyase +ec:4.3.3.4 deacetylipecoside synthase; deacetylipecoside dopamine-lyase +ec:4.3.3.5 4'-demethylrebeccamycin synthase; arcyriaflavin A N-glycosyltransferase; RebG +ec:4.3.3.6 pyridoxal 5'-phosphate synthase (glutamine hydrolysing); PdxST +ec:4.3.3.7 4-hydroxy-tetrahydrodipicolinate synthase; dihydrodipicolinate synthase (incorrect); dihydropicolinate synthetase (incorrect); dihydrodipicolinic acid synthase (incorrect); L-aspartate-4-semialdehyde hydro-lyase (adding pyruvate and cyclizing); dapA (gene name). +ec:4.3.99.1 Transferred to 4.2.1.104 +ec:4.3.99.2 Transferred to 7.2.4.1 +ec:4.3.99.3 7-carboxy-7-deazaguanine synthase; 7-carboxy-7-carbaguanine synthase; queE (gene name) +ec:4.3.99.4 choline trimethylamine-lyase; cutC (gene name) +ec:4.3.99.5 nitrosuccinate lyase; creD (gene name) +ec:4.4.1.1 cystathionine gamma-lyase; homoserine deaminase; homoserine dehydratase; cystine desulfhydrase; cysteine desulfhydrase; gamma-cystathionase; cystathionase; homoserine deaminase-cystathionase; gamma-CTL; cystalysin; cysteine lyase; L-cystathionine cysteine-lyase (deaminating); CGL +ec:4.4.1.2 homocysteine desulfhydrase; homocysteine desulfurase; L-homocysteine hydrogen-sulfide-lyase (deaminating) +ec:4.4.1.3 dimethylpropiothetin dethiomethylase; desulfhydrase; S,S-dimethyl-beta-propiothetin dimethyl-sulfide-lyase +ec:4.4.1.4 alliin lyase; alliinase; cysteine sulfoxide lyase; alkylcysteine sulfoxide lyase; S-alkylcysteine sulfoxide lyase; L-cysteine sulfoxide lyase; S-alkyl-L-cysteine sulfoxide lyase; alliin alkyl-sulfenate-lyase +ec:4.4.1.5 lactoylglutathione lyase; methylglyoxalase; aldoketomutase; ketone-aldehyde mutase; glyoxylase I; (R)-S-lactoylglutathione methylglyoxal-lyase (isomerizing) +ec:4.4.1.6 Transferred to 4.4.1.13 +ec:4.4.1.7 Deleted entry +ec:4.4.1.8 Transferred to 4.4.1.13 +ec:4.4.1.9 L-3-cyanoalanine synthase; beta-cyanoalanine synthase; beta-cyanoalanine synthetase; beta-cyano-L-alanine synthase; L-cysteine hydrogen-sulfide-lyase (adding HCN) +ec:4.4.1.10 cysteine lyase; cysteine (sulfite) lyase; L-cysteine hydrogen-sulfide-lyase (adding sulfite) +ec:4.4.1.11 methionine gamma-lyase; L-methioninase; methionine lyase; methioninase; methionine dethiomethylase; L-methionine gamma-lyase; L-methionine methanethiol-lyase (deaminating) +ec:4.4.1.12 Deleted entry +ec:4.4.1.13 cysteine-S-conjugate beta-lyase; cysteine conjugate beta-lyase; glutamine transaminase K/cysteine conjugate beta-lyase; L-cysteine-S-conjugate thiol-lyase (deaminating); cystathionine beta-lyase; beta-cystathionase; cystine lyase; cystathionine L-homocysteine-lyase (deaminating); L-cystathionine L-homocysteine-lyase (deaminating); CBL; S-alkylcysteine lyase; S-alkylcysteinase; alkylcysteine lyase; S-alkyl-L-cysteine lyase; S-alkyl-L-cysteinase; alkyl cysteine lyase; S-alkyl-L-cysteine alkylthiol-lyase (deaminating) +ec:4.4.1.14 1-aminocyclopropane-1-carboxylate synthase; 1-aminocyclopropanecarboxylate synthase; 1-aminocyclopropane-1-carboxylic acid synthase; 1-aminocyclopropane-1-carboxylate synthetase; aminocyclopropanecarboxylic acid synthase; aminocyclopropanecarboxylate synthase; ACC synthase; S-adenosyl-L-methionine methylthioadenosine-lyase; S-adenosyl-L-methionine methylthioadenosine-lyase (1-aminocyclopropane-1-carboxylate-forming) +ec:4.4.1.15 D-cysteine desulfhydrase; D-cysteine lyase; D-cysteine sulfide-lyase (deaminating) +ec:4.4.1.16 selenocysteine lyase; selenocysteine reductase; selenocysteine beta-lyase +ec:4.4.1.17 holocytochrome-c synthase; cytochrome c heme-lyase; holocytochrome c synthetase; holocytochrome-c apocytochrome-c-lyase +ec:4.4.1.18 Transferred to 1.8.3.5 +ec:4.4.1.19 phosphosulfolactate synthase; (2R)-phospho-3-sulfolactate synthase; (2R)-O-phospho-3-sulfolactate sulfo-lyase +ec:4.4.1.20 leukotriene-C4 synthase; leukotriene C4 synthetase; LTC4 synthase; LTC4 synthetase; leukotriene A4:glutathione S-leukotrienyltransferase; (7E,9E,11Z,14Z)-(5S,6R)-5,6-epoxyicosa-7,9,11,14-tetraenoate:glutathione leukotriene-transferase (epoxide-ring-opening); (7E,9E,11Z,14Z)-(5S,6R)-6-(glutathion-S-yl)-5-hydroxyicosa-7,9,11,14-tetraenoate glutathione-lyase (epoxide-forming) +ec:4.4.1.21 S-ribosylhomocysteine lyase; S-ribosylhomocysteinase; LuxS +ec:4.4.1.22 S-(hydroxymethyl)glutathione synthase; glutathione-dependent formaldehyde-activating enzyme; Gfa; S-(hydroxymethyl)glutathione formaldehyde-lyase +ec:4.4.1.23 2-hydroxypropyl-CoM lyase; epoxyalkane:coenzyme M transferase; epoxyalkane:CoM transferase; epoxyalkane:2-mercaptoethanesulfonate transferase; coenzyme M-epoxyalkane ligase; epoxyalkyl:CoM transferase; epoxypropane:coenzyme M transferase; epoxypropyl:CoM transferase; EaCoMT; 2-hydroxypropyl-CoM:2-mercaptoethanesulfonate lyase (epoxyalkane-ring-forming); (R)-2-hydroxypropyl-CoM 2-mercaptoethanesulfonate lyase (cyclizing; (R)-1,2-epoxypropane-forming) +ec:4.4.1.24 (2R)-sulfolactate sulfo-lyase; Suy; SuyAB; 3-sulfolactate bisulfite-lyase; sulfolactate sulfo-lyase (ambigious); (2R)-3-sulfolactate bisulfite-lyase (pyruvate-forming) +ec:4.4.1.25 L-cysteate sulfo-lyase; L-cysteate sulfo-lyase (deaminating); CuyA; L-cysteate bisulfite-lyase (deaminating; pyruvate-forming) +ec:4.4.1.26 olivetolic acid cyclase; OAC +ec:4.4.1.27 Transferred to 3.13.1.5 +ec:4.4.1.28 L-cysteine desulfidase; L-cysteine desulfhydrase +ec:4.4.1.29 phycobiliprotein cysteine-84 phycobilin lyase; cpcS (gene name); cpeS (gene name); cpcS1 (gene name); cpcU (gene name); phycocyanobilin:Cys-beta84-phycobiliprotein lyase +ec:4.4.1.30 phycobiliprotein beta-cysteine-155 phycobilin lyase; cpcT (gene name); cpeT1 (gene name); cpcT1 (gene name) +ec:4.4.1.31 phycoerythrocyanin alpha-cysteine-84 phycoviolobilin lyase/isomerase; pecE (gene name); pecF (gene name); phycoviolobilin phycoerythrocyanin-alpha84-cystein-lyase; PecE/PecF; PEC-Cys-R84 PCB lyase/isomerase +ec:4.4.1.32 C-phycocyanin alpha-cysteine-84 phycocyanobilin lyase; cpcE (gene name); cpcF (gene name) +ec:4.4.1.33 R-phycocyanin alpha-cysteine-84 phycourobilin lyase/isomerase; rpcG (gene name) +ec:4.4.1.34 isoprene-epoxide---glutathione S-transferase; isoI (gene name) +ec:4.4.1.35 L-cystine beta-lyase; CORI3 (gene name) +ec:4.4.1.36 hercynylcysteine S-oxide lyase; egtE (gene name) +ec:4.4.1.37 pyridinium-3,5-bisthiocarboxylic acid mononucleotide synthase; LarE; P2CMN sulfurtransferase; pyridinium-3,5-biscarboxylic acid mononucleotide sulfurtransferase; P2TMN synthase +ec:4.4.1.38 isethionate sulfite-lyase; islA (gene name) +ec:4.4.1.39 C-phycoerythrin alpha-cysteine-82 phycoerythrobilin lyase; cpeY (gene name) +ec:4.4.1.40 C-phycoerythrin beta-cysteine-48/59 phycoerythrobilin lyase; cpeF (gene name) +ec:4.4.1.41 (2S)-3-sulfopropanediol sulfolyase; DHPS sulfolyase; hpsG (gene name) +ec:4.5.1.1 DDT-dehydrochlorinase; DDT-ase; 1,1,1-trichloro-2,2-bis(4-chlorophenyl)ethane chloride-lyase; DDTase +ec:4.5.1.2 3-chloro-D-alanine dehydrochlorinase; beta-chloro-D-alanine dehydrochlorinase; 3-chloro-D-alanine chloride-lyase (deaminating) +ec:4.5.1.3 dichloromethane dehalogenase; dichloromethane chloride-lyase (chloride-hydrolysing) +ec:4.5.1.4 L-2-amino-4-chloropent-4-enoate dehydrochlorinase; L-2-amino-4-chloro-4-pentenoate dehalogenase; L-2-amino-4-chloropent-4-enoate chloride-lyase (deaminating); L-2-amino-4-chloropent-4-enoate chloride-lyase (adding H2O; deaminating; 2-oxopent-4-enoate-forming) +ec:4.5.1.5 S-carboxymethylcysteine synthase; S-carboxymethyl-L-cysteine synthase +ec:4.6.1.1 adenylate cyclase; adenylylcyclase; adenyl cyclase; 3',5'-cyclic AMP synthetase; ATP diphosphate-lyase (cyclizing) +ec:4.6.1.2 guanylate cyclase; guanylyl cyclase; guanyl cyclase; GTP diphosphate-lyase (cyclizing) +ec:4.6.1.3 Transferred to 4.2.3.4 +ec:4.6.1.4 Transferred to 4.2.3.5 +ec:4.6.1.5 Transferred to 4.2.3.7 +ec:4.6.1.6 cytidylate cyclase; 3',5'-cyclic-CMP synthase; cytidylyl cyclase; cytidyl cyclase; CTP diphosphate-lyase (cyclizing); pycC (gene name) (ambiguous) +ec:4.6.1.7 Transferred to 4.2.3.8 +ec:4.6.1.8 Transferred to 4.2.3.10 +ec:4.6.1.9 Transferred to 4.2.3.11 +ec:4.6.1.10 Transferred to 4.2.3.12 +ec:4.6.1.11 Transferred to 4.2.3.13 +ec:4.6.1.12 2-C-methyl-D-erythritol 2,4-cyclodiphosphate synthase; MECDP-synthase; 2-phospho-4-(cytidine 5'-diphospho)-2-C-methyl-D-erythritol CMP-lyase (cyclizing) +ec:4.6.1.13 phosphatidylinositol diacylglycerol-lyase; monophosphatidylinositol phosphodiesterase; phosphatidylinositol phospholipase C; 1-phosphatidylinositol phosphodiesterase; 1-phosphatidyl-D-myo-inositol inositolphosphohydrolase (cyclic-phosphate-forming); 1-phosphatidyl-1D-myo-inositol diacylglycerol-lyase (1,2-cyclic-phosphate-forming) +ec:4.6.1.14 glycosylphosphatidylinositol diacylglycerol-lyase; (glycosyl)phosphatidylinositol-specific phospholipase C; GPI-PLC; GPI-specific phospholipase C; VSG-lipase; glycosyl inositol phospholipid anchor-hydrolyzing enzyme; glycosylphosphatidylinositol-phospholipase C; glycosylphosphatidylinositol-specific phospholipase C; variant-surface-glycoprotein phospholipase C; 6-(alpha-D-glucosaminyl)-1-phosphatidyl-1D-myo-inositol diacylglycerol-lyase (1,2-cyclic-phosphate-forming) +ec:4.6.1.15 FAD-AMP lyase (cyclizing); FMN cyclase; FAD AMP-lyase (cyclic-FMN-forming) +ec:4.6.1.16 tRNA-intron lyase; transfer ribonucleate intron endoribonuclease; tRNA splicing endonuclease; splicing endonuclease; tRNATRPintron endonuclease; transfer splicing endonuclease +ec:4.6.1.17 cyclic pyranopterin monophosphate synthase; MOCS1B (gene name); moaC (gene name); cnx3 (gene name) +ec:4.6.1.18 pancreatic ribonuclease; RNase; RNase I; RNase A; pancreatic RNase; ribonuclease I; endoribonuclease I; ribonucleic phosphatase; alkaline ribonuclease; ribonuclease; gene S glycoproteins; Ceratitis capitata alkaline ribonuclease; SLSG glycoproteins; gene S locus-specific glycoproteins; S-genotype-asssocd. glycoproteins; ribonucleate 3'-pyrimidino-oligonucleotidohydrolase +ec:4.6.1.19 ribonuclease T2; ribonuclease II; base-non-specific ribonuclease; nonbase-specific RNase; RNase (non-base specific); non-base specific ribonuclease; nonspecific RNase; RNase Ms; RNase M; RNase II; Escherichia coli ribonuclease II; ribonucleate nucleotido-2'-transferase (cyclizing); acid ribonuclease; RNAase CL; Escherichia coli ribonuclease I' ribonuclease PP2; ribonuclease N2; ribonuclease M; acid RNase; ribonnuclease (non-base specific); ribonuclease (non-base specific); RNase T2; ribonuclease PP3; ribonucleate 3'-oligonucleotide hydrolase; ribonuclease U4 +ec:4.6.1.20 ribonuclease U2; purine specific endoribonuclease; ribonuclease U3; RNase U3; RNase U2; purine-specific ribonuclease; purine-specific RNase; Pleospora RNase; Trichoderma koningi RNase III; ribonuclease (purine) +ec:4.6.1.21 Enterobacter ribonuclease +ec:4.6.1.22 Bacillus subtilis ribonuclease; Proteus mirabilis RNase; ribonucleate nucleotido-2'-transferase (cyclizing); bacterial RNA lyase; Bacillus subtilis intracellular ribonuclease +ec:4.6.1.23 ribotoxin; alpha-sarcin; rRNA endonuclease (ambiguous) +ec:4.6.1.24 ribonuclease T1; barnase; bacterial ribonuclease Sa; guanyloribonuclease; Aspergillus oryzae ribonuclease; RNase N1; RNase N2; ribonuclease N3; ribonuclease U1; ribonuclease F1; ribonuclease Ch; ribonuclease PP1; ribonuclease SA; RNase F1; ribonuclease C2; binase; RNase Sa; guanyl-specific RNase; RNase G; RNase T1; ribonuclease guaninenucleotido-2'-transferase (cyclizing); ribonuclease N1 +ec:4.6.1.25 bacteriophage T4 restriction endoribonuclease RegB; RegB +ec:4.6.1.26 uridylate cyclase; pycC (gene name) (ambiguous) +ec:4.7.1.1 alpha-D-ribose 1-methylphosphonate 5-phosphate C-P-lyase; phnJ (gene name) +ec:4.8.1.1 L-piperazate synthase; ktzT (gene name) +ec:4.8.1.2 aliphatic aldoxime dehydratase; OxdA; aliphatic aldoxime hydro-lyase +ec:4.8.1.3 indoleacetaldoxime dehydratase; indoleacetaldoxime hydro-lyase; 3-indoleacetaldoxime hydro-lyase; indole-3-acetaldoxime hydro-lyase; indole-3-acetaldehyde-oxime hydro-lyase; (indol-3-yl)acetaldehyde-oxime hydro-lyase +ec:4.8.1.4 phenylacetaldoxime dehydratase; PAOx dehydratase; arylacetaldoxime dehydratase; OxdB; (Z)-phenylacetaldehyde-oxime hydro-lyase +ec:4.98.1.1 protoporphyrin ferrochelatase; ferro-protoporphyrin chelatase; iron chelatase (ambiguous); heme synthetase (ambiguous); heme synthase (ambiguous); protoheme ferro-lyase; ferrochelatase (ambiguous) +ec:4.99.1.1 Transferred to 4.98.1.1 +ec:4.99.1.2 alkylmercury lyase; organomercury lyase; organomercurial lyase; alkylmercury mercuric-lyase +ec:4.99.1.3 sirohydrochlorin cobaltochelatase; CbiK; CbiX; CbiXS; anaerobic cobalt chelatase; cobaltochelatase [ambiguous]; sirohydrochlorin cobalt-lyase +ec:4.99.1.4 sirohydrochlorin ferrochelatase; CysG; Met8P; SirB; sirohydrochlorin ferro-lyase (incorrect) +ec:4.99.1.5 Transferred to 4.8.1.2 +ec:4.99.1.6 Transferred to 4.8.1.3 +ec:4.99.1.7 Transferred to 4.8.1.4 +ec:4.99.1.8 heme ligase; heme detoxification protein; HDP; hemozoin synthase +ec:4.99.1.9 coproporphyrin ferrochelatase; hemH (gene name) +ec:4.99.1.10 magnesium dechelatase; SGR (gene name); SGRL (gene name); Mg-dechelatase +ec:4.99.1.11 sirohydrochlorin nickelchelatase; cfbA (gene name) +ec:4.99.1.12 pyridinium-3,5-bisthiocarboxylic acid mononucleotide nickel chelatase; LarC; P2TMN nickel chelatase +ec:5.1.1.1 alanine racemase; L-alanine racemase +ec:5.1.1.2 methionine racemase +ec:5.1.1.3 glutamate racemase +ec:5.1.1.4 proline racemase +ec:5.1.1.5 lysine racemase +ec:5.1.1.6 threonine racemase +ec:5.1.1.7 diaminopimelate epimerase +ec:5.1.1.8 4-hydroxyproline epimerase; hydroxyproline epimerase; hydroxyproline 2-epimerase; L-hydroxyproline epimerase +ec:5.1.1.9 arginine racemase +ec:5.1.1.10 amino-acid racemase; L-amino acid racemase +ec:5.1.1.11 phenylalanine racemase (ATP-hydrolysing); phenylalanine racemase; phenylalanine racemase (adenosine triphosphate-hydrolysing); gramicidin S synthetase I +ec:5.1.1.12 ornithine racemase +ec:5.1.1.13 aspartate racemase; D-aspartate racemase; McyF +ec:5.1.1.14 nocardicin A epimerase; isonocardicin A epimerase; nocJ (gene name) +ec:5.1.1.15 2-aminohexano-6-lactam racemase; alpha-amino-epsilon-caprolactam racemase +ec:5.1.1.16 protein-serine epimerase; protein-serine racemase +ec:5.1.1.17 isopenicillin-N epimerase +ec:5.1.1.18 serine racemase; SRR +ec:5.1.1.19 O-ureido-serine racemase; dcsC (gene name) +ec:5.1.1.20 L-Ala-D/L-Glu epimerase; YkfB; YcjG; AEE; AE epimerase +ec:5.1.1.21 isoleucine 2-epimerase; BCAA racemase +ec:5.1.1.22 4-hydroxyproline betaine 2-epimerase; hpbD (gene name); Hyp-B 2-epimerase; (4R)-4-hydroxyproline betaine 2-epimerase +ec:5.1.1.23 UDP-N-acetyl-alpha-D-muramoyl-L-alanyl-L-glutamate epimerase; murL (gene name); UDP-MurNAc-L-Ala-L-Glu epimerase +ec:5.1.1.24 histidine racemase; cntK (gene name) +ec:5.1.2.1 lactate racemase; lacticoracemase; hydroxyacid racemase; lactic acid racemase; larA (gene name) +ec:5.1.2.2 mandelate racemase +ec:5.1.2.3 3-hydroxybutyryl-CoA epimerase; 3-hydroxybutyryl coenzyme A epimerase; 3-hydroxyacyl-CoA epimerase +ec:5.1.2.4 acetoin racemase; acetylmethylcarbinol racemase +ec:5.1.2.5 tartrate epimerase; tartaric racemase +ec:5.1.2.6 isocitrate epimerase +ec:5.1.2.7 tagaturonate epimerase; fructuronate epimerase; tagaturonate/fructuronate epimerase; UxaE +ec:5.1.3.1 ribulose-phosphate 3-epimerase; phosphoribulose epimerase; erythrose-4-phosphate isomerase; phosphoketopentose 3-epimerase; xylulose phosphate 3-epimerase; phosphoketopentose epimerase; ribulose 5-phosphate 3-epimerase; D-ribulose phosphate-3-epimerase; D-ribulose 5-phosphate epimerase; D-ribulose-5-P 3-epimerase; D-xylulose-5-phosphate 3-epimerase; pentose-5-phosphate 3-epimerase +ec:5.1.3.2 UDP-glucose 4-epimerase; UDP-galactose 4-epimerase; uridine diphosphoglucose epimerase; galactowaldenase; UDPG-4-epimerase; uridine diphosphate galactose 4-epimerase; uridine diphospho-galactose-4-epimerase; UDP-glucose epimerase; 4-epimerase; uridine diphosphoglucose 4-epimerase; uridine diphosphate glucose 4-epimerase; UDP-D-galactose 4-epimerase +ec:5.1.3.3 aldose 1-epimerase; mutarotase; aldose mutarotase; galactose mutarotase; galactose 1-epimerase; D-galactose 1-epimerase +ec:5.1.3.4 L-ribulose-5-phosphate 4-epimerase; phosphoribulose isomerase; ribulose phosphate 4-epimerase; L-ribulose-phosphate 4-epimerase; L-ribulose 5-phosphate 4-epimerase; AraD; L-Ru5P +ec:5.1.3.5 UDP-arabinose 4-epimerase; uridine diphosphoarabinose epimerase; UDP arabinose epimerase; uridine 5'-diphosphate-D-xylose 4-epimerase; UDP-D-xylose 4-epimerase +ec:5.1.3.6 UDP-glucuronate 4-epimerase; uridine diphospho-D-galacturonic acid; UDP glucuronic epimerase; uridine diphosphoglucuronic epimerase; UDP-galacturonate 4-epimerase; uridine diphosphoglucuronate epimerase; UDP-D-galacturonic acid 4-epimerase +ec:5.1.3.7 UDP-N-acetylglucosamine 4-epimerase; UDP acetylglucosamine epimerase; uridine diphosphoacetylglucosamine epimerase; uridine diphosphate N-acetylglucosamine-4-epimerase; uridine 5'-diphospho-N-acetylglucosamine-4-epimerase; UDP-N-acetyl-D-glucosamine 4-epimerase +ec:5.1.3.8 N-acylglucosamine 2-epimerase; acylglucosamine 2-epimerase; N-acetylglucosamine 2-epimerase +ec:5.1.3.9 N-acylglucosamine-6-phosphate 2-epimerase; acylglucosamine-6-phosphate 2-epimerase; acylglucosamine phosphate 2-epimerase +ec:5.1.3.10 CDP-paratose 2-epimerase; CDP-paratose epimerase; cytidine diphosphoabequose epimerase; cytidine diphosphodideoxyglucose epimerase; cytidine diphosphoparatose epimerase; cytidine diphosphate paratose-2-epimerase; CDP-abequose epimerase (incorrect); CDP-D-abequose 2-epimerase (incorrect); CDP-tyvelose 2-epimerase, +ec:5.1.3.11 cellobiose epimerase +ec:5.1.3.12 Deleted entry +ec:5.1.3.13 dTDP-4-dehydrorhamnose 3,5-epimerase; dTDP-L-rhamnose synthetase; dTDP-L-rhamnose synthase; thymidine diphospho-4-ketorhamnose 3,5-epimerase; TDP-4-ketorhamnose 3,5-epimerase; dTDP-4-dehydro-6-deoxy-D-glucose 3,5-epimerase; TDP-4-keto-L-rhamnose-3,5-epimerase +ec:5.1.3.14 UDP-N-acetylglucosamine 2-epimerase (non-hydrolysing); UDP-N-acetylglucosamine 2'-epimerase (ambiguous); uridine diphosphoacetylglucosamine 2'-epimerase (ambiguous); uridine diphospho-N-acetylglucosamine 2'-epimerase (ambiguous); uridine diphosphate-N-acetylglucosamine-2'-epimerase (ambiguous); rffE (gene name); mnaA (gene name); UDP-N-acetyl-D-glucosamine 2-epimerase +ec:5.1.3.15 glucose-6-phosphate 1-epimerase +ec:5.1.3.16 UDP-glucosamine 4-epimerase +ec:5.1.3.17 heparosan-N-sulfate-glucuronate 5-epimerase; heparosan epimerase; heparosan-N-sulfate-D-glucuronosyl 5-epimerase; C-5 uronosyl epimerase; polyglucuronate epimerase; D-glucuronyl C-5 epimerase; poly[(1,4)-beta-D-glucuronosyl-(1,4)-N-sulfo-alpha-D-glucosaminyl] glucurono-5-epimerase +ec:5.1.3.18 GDP-mannose 3,5-epimerase; GME (gene name); GDP-D-mannose:GDP-L-galactose epimerase; guanosine 5'-diphosphate D-mannose:guanosine 5'-diphosphate L-galactose epimerase +ec:5.1.3.19 chondroitin-glucuronate 5-epimerase; polyglucuronate 5-epimerase; dermatan-sulfate 5-epimerase; urunosyl C-5 epimerase; chondroitin D-glucuronosyl 5-epimerase +ec:5.1.3.20 ADP-glyceromanno-heptose 6-epimerase +ec:5.1.3.21 maltose epimerase +ec:5.1.3.22 L-ribulose-5-phosphate 3-epimerase; L-xylulose 5-phosphate 3-epimerase; UlaE; SgaU +ec:5.1.3.23 UDP-2,3-diacetamido-2,3-dideoxyglucuronic acid 2-epimerase; UDP-GlcNAc3NAcA 2-epimerase; UDP-alpha-D-GlcNAc3NAcA 2-epimerase; 2,3-diacetamido-2,3-dideoxy-alpha-D-glucuronic acid 2-epimerase; WbpI; WlbD +ec:5.1.3.24 N-acetylneuraminate epimerase; sialic acid epimerase; N-acetylneuraminate mutarotase; NanM; NanQ +ec:5.1.3.25 dTDP-L-rhamnose 4-epimerase; dTDP-4-L-rhamnose 4-epimerase; wbiB (gene name) +ec:5.1.3.26 N-acetyl-alpha-D-glucosaminyl-diphospho-ditrans,octacis-undecaprenol 4-epimerase; GlcNAc-P-P-Und epimerase; GlcNAc-P-P-Und 4-epimerase; gne (gene name) +ec:5.1.3.27 dTDP-4-dehydro-6-deoxy-D-glucose 3-epimerase; dTDP-deoxyglucose 3-epimerase; dTDP-4-keto-6-deoxy-D-glucose 3-epimerase; dTDP-4-keto-6-deoxyglucose 3-epimerase; gerF (gene name); tylJ (gene name); chmJ (gene name); mydH (gene name) +ec:5.1.3.28 UDP-N-acetyl-L-fucosamine synthase; WbjD; Cap5G +ec:5.1.3.29 L-fucose mutarotase; FucU; fucose mutarotase; FucM +ec:5.1.3.30 D-psicose 3-epimerase; D-allulose 3-epimerase; DPEase (ambiguous) +ec:5.1.3.31 D-tagatose 3-epimerase; L-ribulose 3-epimerase; ketose 3-epimerase +ec:5.1.3.32 L-rhamnose mutarotase; rhamnose 1-epimerase; type-3 mutarotase; YiiL +ec:5.1.3.33 2-epi-5-epi-valiolone epimerase; CetB; EVE +ec:5.1.3.34 monoglucosyldiacylglycerol epimerase; glucolipid epimerase; mgdE (gene name) +ec:5.1.3.35 2-epi-5-epi-valiolone 7-phosphate 2-epimerase; AcbO +ec:5.1.3.36 heparosan-glucuronate 5-epimerase; HG-5epi +ec:5.1.3.37 mannuronan 5-epimerase; algG (gene name); alginate epimerase; C5-mannuronan epimerase; mannuronan C-5-epimerase +ec:5.1.3.38 D-erythrulose 1-phosphate 3-epimerase; eryC (gene name) +ec:5.1.3.39 Deleted entry +ec:5.1.3.40 D-tagatose 6-phosphate 4-epimerase +ec:5.1.3.41 fructoselysine 3-epimerase; frlC (gene name) +ec:5.1.3.42 D-glucosamine-6-phosphate 4-epimerase; ST2245 (locus name) +ec:5.1.3.43 sulfoquinovose mutarotase +ec:5.1.3.44 mannose 2-epimerase +ec:5.1.99.1 methylmalonyl-CoA epimerase; methylmalonyl-CoA racemase; methylmalonyl coenzyme A racemase; DL-methylmalonyl-CoA racemase; 2-methyl-3-oxopropanoyl-CoA 2-epimerase [incorrect] +ec:5.1.99.2 16-hydroxysteroid epimerase +ec:5.1.99.3 allantoin racemase +ec:5.1.99.4 alpha-methylacyl-CoA racemase +ec:5.1.99.5 hydantoin racemase; 5'-monosubstituted-hydantoin racemase; HyuA; HyuE +ec:5.1.99.6 NAD(P)H-hydrate epimerase; NAD(P)HX epimerase +ec:5.1.99.7 dihydroneopterin triphosphate 2'-epimerase; D-erythro-7,8-dihydroneopterin triphosphate epimerase; folX (gene name) +ec:5.1.99.8 7,8-dihydroneopterin epimerase +ec:5.2.1.1 maleate isomerase +ec:5.2.1.2 maleylacetoacetate isomerase; maleylacetoacetic isomerase; maleylacetone isomerase; maleylacetone cis-trans-isomerase +ec:5.2.1.3 Deleted entry +ec:5.2.1.4 maleylpyruvate isomerase +ec:5.2.1.5 linoleate isomerase; linoleic acid isomerase +ec:5.2.1.6 furylfuramide isomerase +ec:5.2.1.7 Transferred to 3.1.1.64 +ec:5.2.1.8 peptidylprolyl isomerase; PPIase; cyclophilin [misleading, see comments]; peptide bond isomerase; peptidyl-prolyl cis-trans isomerase +ec:5.2.1.9 farnesol 2-isomerase; farnesol isomerase +ec:5.2.1.10 2-chloro-4-carboxymethylenebut-2-en-1,4-olide isomerase; 2-chlorocarboxymethylenebutenolide isomerase; chlorodienelactone isomerase +ec:5.2.1.11 Deleted entry +ec:5.2.1.12 zeta-carotene isomerase; Z-ISO; 15-cis-zeta-carotene isomerase +ec:5.2.1.13 prolycopene isomerase; CRTISO; carotene cis-trans isomerase; ZEBRA2 (gene name); carotene isomerase; carotenoid isomerase +ec:5.2.1.14 beta-carotene isomerase; DWARF27 (gene name) +ec:5.3.1.1 triose-phosphate isomerase; phosphotriose isomerase; triose phosphoisomerase; triose phosphate mutase; D-glyceraldehyde-3-phosphate ketol-isomerase +ec:5.3.1.2 Deleted entry +ec:5.3.1.3 D-arabinose isomerase; D-arabinose(L-fucose) isomerase; L-fucose isomerase; D-arabinose ketol-isomerase; arabinose isomerase (misleading) +ec:5.3.1.4 L-arabinose isomerase; L-arabinose ketol-isomerase; araA (gene name) +ec:5.3.1.5 xylose isomerase; D-xylose isomerase; D-xylose ketoisomerase; D-xylose ketol-isomerase; D-xylose aldose-ketose-isomerase +ec:5.3.1.6 ribose-5-phosphate isomerase; phosphopentosisomerase; phosphoriboisomerase; ribose phosphate isomerase; 5-phosphoribose isomerase; D-ribose 5-phosphate isomerase; D-ribose-5-phosphate ketol-isomerase +ec:5.3.1.7 mannose isomerase; D-mannose isomerase; D-mannose ketol-isomerase +ec:5.3.1.8 mannose-6-phosphate isomerase; phosphomannose isomerase; phosphohexomutase; phosphohexoisomerase; mannose phosphate isomerase; phosphomannoisomerase; D-mannose-6-phosphate ketol-isomerase +ec:5.3.1.9 glucose-6-phosphate isomerase; phosphohexose isomerase; phosphohexomutase; oxoisomerase; hexosephosphate isomerase; phosphosaccharomutase; phosphoglucoisomerase; phosphohexoisomerase; phosphoglucose isomerase; glucose phosphate isomerase; hexose phosphate isomerase; D-glucose-6-phosphate ketol-isomerase +ec:5.3.1.10 Transferred to 3.5.99.6 +ec:5.3.1.11 Deleted entry +ec:5.3.1.12 glucuronate isomerase; uronic isomerase; uronate isomerase; D-glucuronate isomerase; uronic acid isomerase; D-glucuronate ketol-isomerase +ec:5.3.1.13 arabinose-5-phosphate isomerase; kdsD (gene name); gutQ (gene name); arabinose phosphate isomerase; phosphoarabinoisomerase; D-arabinose-5-phosphate ketol-isomerase +ec:5.3.1.14 L-rhamnose isomerase; rhamnose isomerase; L-rhamnose ketol-isomerase +ec:5.3.1.15 D-lyxose ketol-isomerase; D-lyxose isomerase; D-lyxose ketol-isomerase +ec:5.3.1.16 1-(5-phosphoribosyl)-5-[(5-phosphoribosylamino)methylideneamino]imidazole-4-carboxamide isomerase; N-(5'-phospho-D-ribosylformimino)-5-amino-1-(5''-phosphoribosyl)-4-imidazolecarboxamide isomerase; phosphoribosylformiminoaminophosphoribosylimidazolecarboxamide isomerase; N-(phosphoribosylformimino) aminophosphoribosylimidazolecarboxamide isomerase; 1-(5-phosphoribosyl)-5-[(5-phosphoribosylamino)methylideneamino]imidazole-4-carboxamide ketol-isomerase; 1-(5-phosphoribosyl)-5-[(5-phosphoribosylamino)methylideneamino]imidazole-4-carboxamide aldose-ketose-isomerase +ec:5.3.1.17 5-dehydro-4-deoxy-D-glucuronate isomerase; 4-deoxy-L-threo-5-hexulose uronate isomerase; 4-deoxy-L-threo-5-hexosulose-uronate ketol-isomerase; kduI (gene name) +ec:5.3.1.18 Deleted entry +ec:5.3.1.19 Transferred to 2.6.1.16 +ec:5.3.1.20 ribose isomerase; D-ribose isomerase; D-ribose ketol-isomerase +ec:5.3.1.21 corticosteroid side-chain-isomerase +ec:5.3.1.22 hydroxypyruvate isomerase +ec:5.3.1.23 S-methyl-5-thioribose-1-phosphate isomerase; methylthioribose 1-phosphate isomerase; 1-PMTR isomerase; 5-methylthio-5-deoxy-D-ribose-1-phosphate ketol-isomerase; S-methyl-5-thio-5-deoxy-D-ribose-1-phosphate ketol-isomerase; S-methyl-5-thio-5-deoxy-D-ribose-1-phosphate aldose-ketose-isomerase; 1-phospho-5'-S-methylthioribose isomerase; S-methyl-5-thio-D-ribose-1-phosphate aldose-ketose-isomerase +ec:5.3.1.24 phosphoribosylanthranilate isomerase; PRA isomerase; PRAI; IGPS:PRAI (indole-3-glycerol-phosphate synthetase/N-5'-phosphoribosylanthranilate isomerase complex); N-(5-phospho-beta-D-ribosyl)anthranilate ketol-isomerase +ec:5.3.1.25 L-fucose isomerase +ec:5.3.1.26 galactose-6-phosphate isomerase +ec:5.3.1.27 6-phospho-3-hexuloisomerase; 3-hexulose-6-phosphate isomerase; phospho-3-hexuloisomerase; PHI; 6-phospho-3-hexulose isomerase; YckF +ec:5.3.1.28 D-sedoheptulose-7-phosphate isomerase; sedoheptulose-7-phosphate isomerase; phosphoheptose isomerase; gmhA (gene name); lpcA (gene name) +ec:5.3.1.29 ribose-1,5-bisphosphate isomerase; R15P isomerase; ribulose 1,5-bisphosphate synthase; RuBP synthase +ec:5.3.1.30 5-deoxy-glucuronate isomerase; 5DG isomerase; IolB +ec:5.3.1.31 sulfoquinovose isomerase; yihS (gene name) +ec:5.3.1.32 (4S)-4-hydroxy-5-phosphooxypentane-2,3-dione isomerase; lsrG (gene name); phospho-AI-2 isomerase; (4S)-4-hydroxy-5-phosphonooxypentane-2,3-dione aldose-ketose-isomerase; (4S)-4-hydroxy-5-phosphonooxypentane-2,3-dione isomerase; (4S)-4-hydroxy-5-phosphooxypentane-2,3-dione aldose-ketose-isomerase +ec:5.3.1.33 L-erythrulose-1-phosphate isomerase; eryH (gene name) +ec:5.3.1.34 D-erythrulose 4-phosphate isomerase; eryI (gene name) +ec:5.3.1.35 2-dehydrotetronate isomerase; otnI (gene name) +ec:5.3.1.36 D-apiose isomerase; apsI (gene name) +ec:5.3.1.37 4-deoxy-4-sulfo-D-erythrose isomerase; sqwI (gene name) +ec:5.3.2.1 phenylpyruvate tautomerase; phenylpyruvic keto-enol isomerase +ec:5.3.2.2 oxaloacetate tautomerase; oxalacetic keto-enol isomerase +ec:5.3.2.3 TDP-4-oxo-6-deoxy-alpha-D-glucose-3,4-oxoisomerase (dTDP-3-dehydro-6-deoxy-alpha-D-galactopyranose-forming); dTDP-6-deoxy-hex-4-ulose isomerase; TDP-6-deoxy-hex-4-ulose isomerase; FdtA +ec:5.3.2.4 TDP-4-oxo-6-deoxy-alpha-D-glucose-3,4-oxoisomerase (dTDP-3-dehydro-6-deoxy-alpha-D-glucopyranose-forming); TDP-4-keto-6-deoxy-D-glucose-3,4-ketoisomerase (ambiguous); Tyl1a; dTDP-4-keto-6-deoxy-D-glucose-3,4-ketoisomerase (ambiguous) +ec:5.3.2.5 2,3-diketo-5-methylthiopentyl-1-phosphate enolase; DK-MTP-1-P enolase; MtnW; YkrW; RuBisCO-like protein; RLP; 2,3-diketo-5-methylthiopentyl-1-phosphate keto---enol-isomerase +ec:5.3.2.6 2-hydroxymuconate tautomerase; 4-oxalocrotonate tautomerase (misleading); 4-oxalocrotonate isomerase (misleading); cnbG (gene name); praC (gene name); xylH (gene name) +ec:5.3.2.7 ascopyrone tautomerase; ascopyrone isomerase; ascopyrone intramolecular oxidoreductase; 1,5-anhydro-D-glycero-hex-3-en-2-ulose tautomerase; APM tautomerase; ascopyrone P tautomerase; APTM +ec:5.3.2.8 4-oxalomesaconate tautomerase; GalD +ec:5.3.3.1 steroid Delta-isomerase; hydroxysteroid isomerase; steroid isomerase; Delta5-ketosteroid isomerase; Delta5(or Delta4)-3-keto steroid isomerase; Delta5-steroid isomerase; 3-oxosteroid isomerase; Delta5-3-keto steroid isomerase; Delta5-3-oxosteroid isomerase +ec:5.3.3.2 isopentenyl-diphosphate Delta-isomerase; isopentenylpyrophosphate Delta-isomerase; methylbutenylpyrophosphate isomerase; isopentenylpyrophosphate isomerase; isopentenyl-diphosphate Delta3-Delta2-isomerase +ec:5.3.3.3 vinylacetyl-CoA Delta-isomerase; vinylacetyl coenzyme A Delta-isomerase; vinylacetyl coenzyme A isomerase; Delta3-cis-Delta2-trans-enoyl-CoA isomerase +ec:5.3.3.4 muconolactone Delta-isomerase; muconolactone isomerase; 5-oxo-4,5-dihydrofuran-2-acetate Delta3-Delta2-isomerase +ec:5.3.3.5 cholestenol Delta-isomerase +ec:5.3.3.6 methylitaconate Delta-isomerase; methylitaconate isomerase +ec:5.3.3.7 aconitate Delta-isomerase; aconitate isomerase +ec:5.3.3.8 Delta3-Delta2-enoyl-CoA isomerase; ECI (gene name); dodecenoyl-CoA isomerase; dodecenoyl-CoA Delta-isomerase; Delta3-cis-Delta2-trans-enoyl-CoA isomerase; acetylene-allene isomerase; dodecenoyl-CoA Delta3-cis-Delta2-trans-isomerase; dodecenoyl-CoA (3Z)-(2E)-isomerase +ec:5.3.3.9 prostaglandin-A1 Delta-isomerase; prostaglandin A isomerase +ec:5.3.3.10 5-carboxymethyl-2-hydroxymuconate Delta-isomerase; CHM isomerase; 5-carboxymethyl-2-hydroxymuconic acid isomerase +ec:5.3.3.11 isopiperitenone Delta-isomerase +ec:5.3.3.12 L-dopachrome isomerase; dopachrome tautomerase; tyrosinase-related protein 2; TRP-1; TRP2; TRP-2; tyrosinase-related protein-2; dopachrome Delta7,Delta2-isomerase; dopachrome Delta-isomerase; dopachrome conversion factor; dopachrome isomerase; dopachrome oxidoreductase; dopachrome-rearranging enzyme; DCF; DCT; dopachrome keto-enol isomerase; L-dopachrome-methyl ester tautomerase +ec:5.3.3.13 polyenoic fatty acid isomerase; PFI; eicosapentaenoate cis-Delta5,8,11,14,17-eicosapentaenoate cis-Delta5-trans-Delta7,9-cis-Delta14,17 isomerase; (5Z,8Z,11Z,14Z,17Z)-eicosapentaenoate Delta8,11-Delta7,8-isomerase (incorrect); (5Z,8Z,11Z,14Z,17Z)-eicosapentaenoate Delta8,11-Delta7,9-isomerase (trans-double-bond-forming) +ec:5.3.3.14 trans-2-decenoyl-[acyl-carrier protein] isomerase; beta-hydroxydecanoyl thioester dehydrase; trans-2-cis-3-decenoyl-ACP isomerase; trans-2,cis-3-decenoyl-ACP isomerase; trans-2-decenoyl-ACP isomerase; FabM; decenoyl-[acyl-carrier-protein] Delta2-trans-Delta3-cis-isomerase +ec:5.3.3.15 Transferred to 5.3.2.7 +ec:5.3.3.16 Transferred to 5.3.2.8 +ec:5.3.3.17 trans-2,3-dihydro-3-hydroxyanthranilate isomerase; phzF (gene name); (5S,6S)-6-amino-5-hydroxycyclohexane-1,3-diene-1-carboxyate isomerase (incorrect) +ec:5.3.3.18 2-(1,2-epoxy-1,2-dihydrophenyl)acetyl-CoA isomerase; paaG (gene name); 1,2-epoxyphenylacetyl-CoA isomerase (misleading) +ec:5.3.3.19 3-[(4R)-4-hydroxycyclohexa-1,5-dien-1-yl]-2-oxopropanoate isomerase; BacB +ec:5.3.3.20 Transferred to 5.4.99.64 +ec:5.3.3.21 Delta3,5-Delta2,4-dienoyl-CoA isomerase; 3,5-tetradecadienoyl-CoA isomerase; DCI1 (gene name) +ec:5.3.3.22 lutein isomerase; RPE65 (gene name); meso-zeaxanthin isomerase +ec:5.3.3.23 S-methyl-5-thioribulose 1-phosphate isomerase; rlp (gene name); 5-methylthioribulose-1-phosphate isomerase (incorrect) +ec:5.3.4.1 protein disulfide-isomerase; S-S rearrangase +ec:5.3.99.1 Deleted entry +ec:5.3.99.2 prostaglandin-D synthase; prostaglandin-H2 Delta-isomerase; prostaglandin-R-prostaglandin D isomerase; PGH-PGD isomerase(5,13)-(15S)-9alpha,11alpha-epidioxy-15-hydroxyprosta-5,13-dienoate Delta-isomerase (incorrect); (5,13)-(15S)-9alpha,11alpha-epidioxy-15-hydroxyprosta-5,13-dienoate D-isomerase; prostaglandin endoperoxide Delta-isomerase; prostaglandin D synthetase +ec:5.3.99.3 prostaglandin-E synthase; prostaglandin-H2 E-isomerase; endoperoxide isomerase; endoperoxide isomerase; prostaglandin R-prostaglandin E isomerase; prostaglandin endoperoxide E isomerase; PGE isomerase; PGH-PGE isomerase; PGE2 isomerase; prostaglandin endoperoxide E2 isomerase; prostaglandin H-E isomerase +ec:5.3.99.4 prostaglandin-I synthase; prostacyclin synthase; prostacycline synthetase; prostagladin I2 synthetase; PGI2 synthase; PGI2 synthetase; (5Z,13E)-(15S)-9alpha,11alpha-epidioxy-15-hydroxyprosta-5,13-dienoate 6-isomerase +ec:5.3.99.5 thromboxane-A synthase; thromboxane synthase; (5Z,13E)-(15S)-9alpha,11alpha-epidioxy-15-hydroxyprosta-5,13-dienoate thromboxane-A2-isomerase +ec:5.3.99.6 allene-oxide cyclase +ec:5.3.99.7 styrene-oxide isomerase; SOI +ec:5.3.99.8 capsanthin/capsorubin synthase; CCS; ketoxanthophyll synthase; capsanthin-capsorubin synthase +ec:5.3.99.9 neoxanthin synthase; NSY +ec:5.3.99.10 thiazole tautomerase; tenI (gene name) +ec:5.3.99.11 2-keto-myo-inositol isomerase; IolI; inosose isomerase; 2KMI isomerase. +ec:5.3.99.12 lachrymatory-factor synthase; LFS +ec:5.4.1.1 lysolecithin acylmutase; lysolecithin migratase +ec:5.4.1.2 Transferred to 5.4.99.61 +ec:5.4.1.3 2-methylfumaryl-CoA isomerase; mesaconyl-CoA C1-C4 CoA transferase; Mct +ec:5.4.1.4 D-galactarolactone isomerase; GLI +ec:5.4.2.1 Transferred to 5.4.2.11 and 5.4.2.12 +ec:5.4.2.2 phosphoglucomutase (alpha-D-glucose-1,6-bisphosphate-dependent); glucose phosphomutase (ambiguous); phosphoglucose mutase (ambiguous) +ec:5.4.2.3 phosphoacetylglucosamine mutase; acetylglucosamine phosphomutase; acetylglucosamine phosphomutase; acetylaminodeoxyglucose phosphomutase; phospho-N-acetylglucosamine mutase; N-acetyl-D-glucosamine 1,6-phosphomutase +ec:5.4.2.4 bisphosphoglycerate mutase; diphosphoglycerate mutase; glycerate phosphomutase; bisphosphoglycerate synthase; bisphosphoglyceromutase; biphosphoglycerate synthase; diphosphoglyceric mutase; 2,3-diphosphoglycerate mutase; phosphoglyceromutase; 2,3-diphosphoglycerate synthase; DPGM; 2,3-bisphosphoglycerate mutase; BPGM; diphosphoglyceromutase; 2,3-diphosphoglyceromutase +ec:5.4.2.5 phosphoglucomutase (glucose-cofactor); glucose phosphomutase (ambiguous); glucose-1-phosphate phosphotransferase +ec:5.4.2.6 beta-phosphoglucomutase; beta-pgm (gene name) +ec:5.4.2.7 phosphopentomutase; phosphodeoxyribomutase; deoxyribose phosphomutase; deoxyribomutase; phosphoribomutase; alpha-D-glucose-1,6-bisphosphate:deoxy-D-ribose-1-phosphate phosphotransferase; D-ribose 1,5-phosphomutase +ec:5.4.2.8 phosphomannomutase; mannose phosphomutase; phosphomannose mutase; D-mannose 1,6-phosphomutase +ec:5.4.2.9 phosphoenolpyruvate mutase; phosphoenolpyruvate-phosphonopyruvate phosphomutase; PEP phosphomutase; phosphoenolpyruvate phosphomutase; PEPPM; PEP phosphomutase +ec:5.4.2.10 phosphoglucosamine mutase +ec:5.4.2.11 phosphoglycerate mutase (2,3-diphosphoglycerate-dependent); glycerate phosphomutase (diphosphoglycerate cofactor); 2,3-diphosphoglycerate dependent phosphoglycerate mutase; cofactor dependent phosphoglycerate mutase; phosphoglycerate phosphomutase (ambiguous); phosphoglyceromutase (ambiguous); monophosphoglycerate mutase (ambiguous); monophosphoglyceromutase (ambiguous); GriP mutase (ambiguous); PGA mutase (ambiguous); MPGM; PGAM; PGAM-d; PGM; dPGM +ec:5.4.2.12 phosphoglycerate mutase (2,3-diphosphoglycerate-independent); cofactor independent phosphoglycerate mutase; 2,3-diphosphoglycerate-independent phosphoglycerate mutase; phosphoglycerate phosphomutase (ambiguous); phosphoglyceromutase (ambiguous); monophosphoglycerate mutase (ambiguous); monophosphoglyceromutase (ambiguous); GriP mutase (ambiguous); PGA mutase (ambiguous); iPGM; iPGAM; PGAM-i +ec:5.4.2.13 phosphogalactosamine mutase; ST0242 (locus name) +ec:5.4.3.1 Deleted entry +ec:5.4.3.2 lysine 2,3-aminomutase +ec:5.4.3.3 lysine 5,6-aminomutase; beta-lysine 5,6-aminomutase; beta-lysine mutase; L-beta-lysine 5,6-aminomutase; D-lysine 5,6-aminomutase; D-alpha-lysine mutase; adenosylcobalamin-dependent D-lysine 5,6-aminomutase +ec:5.4.3.4 Transferred to 5.4.3.3 +ec:5.4.3.5 D-ornithine 4,5-aminomutase; D-alpha-ornithine 5,4-aminomutase; D-ornithine aminomutase +ec:5.4.3.6 tyrosine 2,3-aminomutase; tyrosine alpha,beta-mutase +ec:5.4.3.7 leucine 2,3-aminomutase +ec:5.4.3.8 glutamate-1-semialdehyde 2,1-aminomutase; glutamate-1-semialdehyde aminotransferase +ec:5.4.3.9 glutamate 2,3-aminomutase +ec:5.4.3.10 phenylalanine aminomutase (L-beta-phenylalanine forming) +ec:5.4.3.11 phenylalanine aminomutase (D-beta-phenylalanine forming); admH (gene name); L-phenylalanine 2,3-aminomutase [(S)-3-amino-3-phenylpropanoate] +ec:5.4.4.1 (hydroxyamino)benzene mutase; HAB mutase; hydroxylaminobenzene hydroxymutase; hydroxylaminobenzene mutase +ec:5.4.4.2 isochorismate synthase; MenF +ec:5.4.4.3 3-(hydroxyamino)phenol mutase; 3-hydroxylaminophenol mutase; 3HAP mutase +ec:5.4.4.4 geraniol isomerase +ec:5.4.4.5 9,12-octadecadienoate 8-hydroperoxide 8R-isomerase; 5,8-LDS (bifunctional enzyme); 5,8-linoleate diol synthase (bifunctional enzyme); 8-hydroperoxide isomerase; (8R,9Z,12Z)-8-hydroperoxy-9,12-octadecadienoate mutase ((5S,8R,9Z,12Z)-5,8-dihydroxy-9,12-octadecadienoate-forming); PpoA +ec:5.4.4.6 9,12-octadecadienoate 8-hydroperoxide 8S-isomerase; 8-hydroperoxide isomerase (ambiguous); (8R,9Z,12Z)-8-hydroperoxy-9,12-octadecadienoate mutase ((7S,8S,9Z,12Z)-7,8-dihydroxy-9,12-octadecadienoate-forming) +ec:5.4.4.7 hydroperoxy icosatetraenoate isomerase; epidermal lipoxygenase-3 (ambiguous); eLOX3 (ambiguous) +ec:5.4.4.8 linalool isomerase; 3,1-hydroxyl-Delta1-Delta2-mutase (linalool isomerase) +ec:5.4.99.1 methylaspartate mutase; glutamate mutase; glutamic mutase; glutamic isomerase; glutamic acid mutase; glutamic acid isomerase; methylaspartic acid mutase; beta-methylaspartate-glutamate mutase; glutamate isomerase +ec:5.4.99.2 methylmalonyl-CoA mutase; methylmalonyl-CoA CoA-carbonyl mutase; methylmalonyl coenzyme A mutase; methylmalonyl coenzyme A carbonylmutase; (S)-methylmalonyl-CoA mutase; (R)-2-methyl-3-oxopropanoyl-CoA CoA-carbonylmutase [incorrect] +ec:5.4.99.3 2-acetolactate mutase; acetolactate mutase; acetohydroxy acid isomerase +ec:5.4.99.4 2-methyleneglutarate mutase; alpha-methyleneglutarate mutase +ec:5.4.99.5 chorismate mutase; hydroxyphenylpyruvate synthase +ec:5.4.99.6 Transferred to 5.4.4.2 +ec:5.4.99.7 lanosterol synthase; 2,3-epoxysqualene lanosterol cyclase; squalene-2,3-oxide-lanosterol cyclase; lanosterol 2,3-oxidosqualene cyclase; squalene 2,3-epoxide:lanosterol cyclase; 2,3-oxidosqualene sterol cyclase; oxidosqualene cyclase; 2,3-oxidosqualene cyclase; 2,3-oxidosqualene-lanosterol cyclase; oxidosqualene-lanosterol cyclase; squalene epoxidase-cyclase; (S)-2,3-epoxysqualene mutase (cyclizing, lanosterol-forming) +ec:5.4.99.8 cycloartenol synthase; 2,3-epoxysqualene cycloartenol-cyclase; squalene-2,3-epoxide-cycloartenol cyclase; 2,3-epoxysqualene-cycloartenol cyclase; 2,3-oxidosqualene-cycloartenol cyclase; (S)-2,3-epoxysqualene mutase (cyclizing, cycloartenol-forming) +ec:5.4.99.9 UDP-galactopyranose mutase; UGM; UDP-D-galactopyranose furanomutase +ec:5.4.99.10 Deleted entry +ec:5.4.99.11 isomaltulose synthase; isomaltulose synthetase; sucrose alpha-glucosyltransferase; trehalulose synthase +ec:5.4.99.12 tRNA pseudouridine38-40 synthase; TruA; tRNA pseudouridine synthase I; PSUI; hisT (gene name) +ec:5.4.99.13 isobutyryl-CoA mutase; isobutyryl coenzyme A mutase; butyryl-CoA:isobutyryl-CoA mutase; icmA (gene name); icmB (gene name); icmF (gene name) +ec:5.4.99.14 4-carboxymethyl-4-methylbutenolide mutase; 4-methyl-2-enelactone isomerase; 4-methylmuconolactone methylisomerase; 4-methyl-3-enelactone methyl isomerase +ec:5.4.99.15 (1->4)-alpha-D-glucan 1-alpha-D-glucosylmutase; malto-oligosyltrehalose synthase; maltodextrin alpha-D-glucosyltransferase +ec:5.4.99.16 maltose alpha-D-glucosyltransferase; trehalose synthase; maltose glucosylmutase +ec:5.4.99.17 squalene---hopene cyclase +ec:5.4.99.18 5-(carboxyamino)imidazole ribonucleotide mutase; N5-CAIR mutase; PurE; N5-carboxyaminoimidazole ribonucleotide mutase; class I PurE +ec:5.4.99.19 16S rRNA pseudouridine516 synthase; 16S RNA pseudouridine516 synthase; 16S PsiI516 synthase; 16S RNA Psi516 synthase; RNA pseudouridine synthase RsuA; RsuA; 16S RNA pseudouridine 516 synthase +ec:5.4.99.20 23S rRNA pseudouridine2457 synthase; RluE; YmfC +ec:5.4.99.21 23S rRNA pseudouridine2604 synthase; RluF; YjbC +ec:5.4.99.22 23S rRNA pseudouridine2605 synthase; RluB; YciL +ec:5.4.99.23 23S rRNA pseudouridine1911/1915/1917 synthase; RluD; pseudouridine synthase RluD +ec:5.4.99.24 23S rRNA pseudouridine955/2504/2580 synthase; RluC; pseudouridine synthase RluC +ec:5.4.99.25 tRNA pseudouridine55 synthase; TruB; aCbf5; Pus4; YNL292w (gene name); Psi55 tRNA pseudouridine synthase; tRNA:Psi55-synthase; tRNA pseudouridine 55 synthase; tRNA:pseudouridine-55 synthase; Psi55 synthase; tRNA Psi55 synthase; tRNA:Psi55 synthase; tRNA-uridine55 uracil mutase; Pus10; tRNA-uridine54/55 uracil mutase +ec:5.4.99.26 tRNA pseudouridine65 synthase; TruC; YqcB +ec:5.4.99.27 tRNA pseudouridine13 synthase; TruD; YgbO; tRNA PSI13 synthase; RNA:PSI-synthase Pus7p; Pus7p; RNA:pseudouridine-synthase Pus7p; Pus7 protein +ec:5.4.99.28 tRNA pseudouridine32 synthase; RluA (ambiguous); pseudouridine synthase RluA (ambiguous); Pus9p; Rib2/Pus8p +ec:5.4.99.29 23S rRNA pseudouridine746 synthase; RluA (ambiguous); 23S RNA PSI746 synthase; 23S rRNA pseudouridine synthase; pseudouridine synthase RluA (ambiguous) +ec:5.4.99.30 UDP-arabinopyranose mutase; Os03g40270 protein; UAM1; UAM3; RGP1; RGP3; OsUAM1; OsUAM2; Os03g0599800 protein; Os07g41360 protein +ec:5.4.99.31 thalianol synthase; (S)-2,3-epoxysqualene mutase (cyclizing, thalianol-forming) +ec:5.4.99.32 protostadienol synthase; PdsA; (S)-2,3-epoxysqualene mutase [cyclizing, (17Z)-protosta-17(20),24-dien-3beta-ol-forming] +ec:5.4.99.33 cucurbitadienol synthase; CPQ (gene name); (S)-2,3-epoxysqualene mutase (cyclizing, cucurbitadienol-forming) +ec:5.4.99.34 germanicol synthase; RsM1; (S)-2,3-epoxysqualene mutase (cyclizing, germanicol-forming) +ec:5.4.99.35 taraxerol synthase; RsM2; (S)-2,3-epoxysqualene mutase (cyclizing, taraxerol-forming) +ec:5.4.99.36 isomultiflorenol synthase; LcIMS1; (S)-2,3-epoxysqualene mutase (cyclizing, isomultiflorenol-forming) +ec:5.4.99.37 dammaradiene synthase +ec:5.4.99.38 camelliol C synthase; CAMS1; LUP3 (gene name) +ec:5.4.99.39 beta-amyrin synthase; 2,3-oxidosqualene beta-amyrin cyclase; AsbAS1; BPY; EtAS; GgbAS1; LjAMY1; MtAMY1; PNY; BgbAS +ec:5.4.99.40 alpha-amyrin synthase; 2,3-oxidosqualene alpha-amyrin cyclase; mixed amyrin synthase +ec:5.4.99.41 lupeol synthase; LUPI; BPW; RcLUS +ec:5.4.99.42 tRNA pseudouridine31 synthase; Pus6p +ec:5.4.99.43 21S rRNA pseudouridine2819 synthase; Pus5p +ec:5.4.99.44 mitochondrial tRNA pseudouridine27/28 synthase; Pus2; Pus2p; RNA:pseudouridine synthases 2 +ec:5.4.99.45 tRNA pseudouridine38/39 synthase; Deg1; Pus3p; pseudouridine synthase 3 +ec:5.4.99.46 shionone synthase +ec:5.4.99.47 parkeol synthase +ec:5.4.99.48 achilleol B synthase +ec:5.4.99.49 glutinol synthase +ec:5.4.99.50 friedelin synthase +ec:5.4.99.51 baccharis oxide synthase +ec:5.4.99.52 alpha-seco-amyrin synthase +ec:5.4.99.53 marneral synthase +ec:5.4.99.54 beta-seco-amyrin synthase +ec:5.4.99.55 delta-amyrin synthase; SlTTS2 (gene name) +ec:5.4.99.56 tirucalladienol synthase; PEN3 +ec:5.4.99.57 baruol synthase; BARS1 +ec:5.4.99.58 methylornithine synthase; PylB +ec:5.4.99.59 dTDP-fucopyranose mutase; Fcf2 +ec:5.4.99.60 cobalt-precorrin-8 methylmutase; cbiC (gene name) +ec:5.4.99.61 precorrin-8X methylmutase; precorrin isomerase; hydrogenobyrinic acid-binding protein; cobH (gene name) +ec:5.4.99.62 D-ribose pyranase; RbsD +ec:5.4.99.63 ethylmalonyl-CoA mutase; Ecm +ec:5.4.99.64 2-hydroxyisobutanoyl-CoA mutase; hcmAB (gene names) +ec:5.4.99.65 pre-alpha-onocerin synthase; LCC +ec:5.4.99.66 alpha-onocerin synthase; LCD +ec:5.4.99.67 4-amino-4-deoxychorismate mutase; cmlD (gene name); papB (gene name) +ec:5.5.1.1 muconate cycloisomerase; muconate cycloisomerase I; cis,cis-muconate-lactonizing enzyme; cis,cis-muconate cycloisomerase; muconate lactonizing enzyme; 4-carboxymethyl-4-hydroxyisocrotonolactone lyase (decyclizing); CatB; MCI; 2,5-dihydro-5-oxofuran-2-acetate lyase (decyclizing); 2,5-dihydro-5-oxofuran-2-acetate lyase (ring-opening) +ec:5.5.1.2 3-carboxy-cis,cis-muconate cycloisomerase; beta-carboxymuconate lactonizing enzyme; 3-carboxymuconolactone hydrolase; 2-carboxy-2,5-dihydro-5-oxofuran-2-acetate lyase (decyclizing) +ec:5.5.1.3 tetrahydroxypteridine cycloisomerase +ec:5.5.1.4 inositol-3-phosphate synthase; myo-inositol-1-phosphate synthase; D-glucose 6-phosphate cycloaldolase; inositol 1-phosphate synthatase; glucose 6-phosphate cyclase; inositol 1-phosphate synthetase; glucose-6-phosphate inositol monophosphate cycloaldolase; glucocycloaldolase; 1L-myo-inositol-1-phosphate lyase (isomerizing) +ec:5.5.1.5 carboxy-cis,cis-muconate cyclase; 3-carboxymuconate cyclase; 3-carboxy-2,5-dihydro-5-oxofuran-2-acetate lyase (decyclizing) +ec:5.5.1.6 chalcone isomerase; chalcone-flavanone isomerase; flavanone lyase (decyclizing) +ec:5.5.1.7 chloromuconate cycloisomerase; muconate cycloisomerase II; 2-chloro-2,5-dihydro-5-oxofuran-2-acetate lyase (decyclizing); 2-chloro-2,5-dihydro-5-oxofuran-2-acetate lyase (ring-opening) +ec:5.5.1.8 (+)-bornyl diphosphate synthase; bornyl pyrophosphate synthase (ambiguous); bornyl pyrophosphate synthetase (ambiguous); (+)-bornylpyrophosphate cyclase; geranyl-diphosphate cyclase (ambiguous); (+)-bornyl-diphosphate lyase (decyclizing) +ec:5.5.1.9 cycloeucalenol cycloisomerase; cycloeucalenol---obtusifoliol isomerase; cycloeucalenol lyase (cyclopropane-decyclizing) +ec:5.5.1.10 alpha-pinene-oxide decyclase; alpha-pinene oxide lyase; alpha-pinene-oxide lyase (decyclizing) +ec:5.5.1.11 dichloromuconate cycloisomerase; 2,4-dichloro-2,5-dihydro-5-oxofuran-2-acetate lyase (decyclizing) +ec:5.5.1.12 copalyl diphosphate synthase; (+)-copalyl-diphosphate lyase (decyclizing) +ec:5.5.1.13 ent-copalyl diphosphate synthase; ent-kaurene synthase A; ent-kaurene synthetase A; ent-CDP synthase; ent-copalyl-diphosphate lyase (decyclizing) +ec:5.5.1.14 syn-copalyl-diphosphate synthase; OsCyc1; OsCPSsyn; syn-CPP synthase; syn-copalyl diphosphate synthase; 9alpha-copalyl-diphosphate lyase (decyclizing) +ec:5.5.1.15 terpentedienyl-diphosphate synthase; terpentedienol diphosphate synthase; Cyc1; clerodadienyl diphosphate synthase; terpentedienyl-diphosphate lyase (decyclizing) +ec:5.5.1.16 halimadienyl-diphosphate synthase; Rv3377c; halimadienyl diphosphate synthase; tuberculosinol diphosphate synthase; halima-5(6),13-dien-15-yl-diphosphate lyase (cyclizing); halima-5,13-dien-15-yl-diphosphate lyase (decyclizing) +ec:5.5.1.17 (S)-beta-macrocarpene synthase; TPS6; TPS11; (S)-beta-macrocarpene lyase (decyclizing) +ec:5.5.1.18 lycopene epsilon-cyclase; CrtL-e; LCYe; carotenoid psi-end group lyase (decyclizing) +ec:5.5.1.19 lycopene beta-cyclase; CrtL; CrtL-b; CrtY; LCYb; carotenoid beta-end group lyase (decyclizing) +ec:5.5.1.20 prosolanapyrone-III cycloisomerase; Sol5 (ambiguous); SPS (ambiguous); solanapyrone synthase (bifunctional enzyme: prosolanapyrone II oxidase/prosolanapyrone III cyclosiomerase) +ec:5.5.1.21 Transferred to 4.2.1.133 +ec:5.5.1.22 (-)-bornyl diphosphate synthase; bornyl pyrophosphate synthase (ambiguous); bornyl pyrophosphate synthetase (ambiguous); (-)-bornyl pyrophosphate cyclase; bornyl diphosphate synthase; geranyl-diphosphate cyclase (ambiguous); (-)-bornyl-diphosphate lyase (decyclizing) +ec:5.5.1.23 aklanonic acid methyl ester cyclase; dauD (gene name); aknH (gene name); dnrD (gene name); methyl aklanonate cyclase; methyl aklanonate-aklaviketone isomerase (cyclizing); aklaviketone lyase (decyclizing) +ec:5.5.1.24 tocopherol cyclase; VTE1 (gene name); SXD1 (gene name); delta/gamma-tocopherol lyase (decyclizing) +ec:5.5.1.25 3,6-anhydro-L-galactonate cycloisomerase; 3,6-anhydro-alpha-L-galactonate lyase (ring-opening); 3,6-anhydro-alpha-L-galactonate cycloisomerase +ec:5.5.1.26 nogalonic acid methyl ester cyclase; methyl nogalonate cyclase; SnoaL (gene name); methyl nogalonate lyase (cyclizing) +ec:5.5.1.27 D-galactarolactone cycloisomerase; GCI +ec:5.5.1.28 (-)-kolavenyl diphosphate synthase; SdKPS; TwTPS14; TwTPS10/KPS; SdCPS2; clerodienyl diphosphate synthase; CLPP +ec:5.5.1.29 (+)-kolavenyl diphosphate synthase +ec:5.5.1.30 labda-7,13-dienyl diphosphate synthase; SCLAV_p0490 +ec:5.5.1.31 hapalindole H synthase; famC2 (gene name); famC3 (gene name) +ec:5.5.1.32 12-epi-hapalindole U synthase; famC1 (gene name); HpiC1 (gene name) +ec:5.5.1.33 12-epi-fischerindole U synthase; fisC (gene name); fimC5 (gene name) +ec:5.5.1.34 (+)-cis,trans-nepetalactol synthase; NEPS1 (gene name); NEPS2 (gene name) +ec:5.5.1.35 (+)-cis,cis-nepetalactol synthase; NEPS3 (gene name) +ec:5.6.1.1 microtubule-severing ATPase; katanin +ec:5.6.1.2 dynein ATPase; dynein adenosine 5'-triphosphatase +ec:5.6.1.3 plus-end-directed kinesin ATPase; kinesin +ec:5.6.1.4 minus-end-directed kinesin ATPase; non-claret disjunctional; ncd (gene name) +ec:5.6.1.5 proteasome ATPase +ec:5.6.1.6 channel-conductance-controlling ATPase; cystic fibrosis transmembrane conductance regulator; CFTR (gene name) +ec:5.6.1.7 chaperonin ATPase; chaperonin +ec:5.6.1.8 myosin ATPase +ec:5.6.1.9 (R)-2-hydroxyacyl-CoA dehydratase activating ATPase; archerase; (R)-2-hydroxyacyl-CoA dehydratase activator; (R)-2-hydroxyacyl-CoA dehydratase activase; fldI (gene name); hgdC (gene name); hadI (gene name); lcdC (gene name) +ec:5.6.2.1 DNA topoisomerase; type I DNA topoisomerase; untwisting enzyme; relaxing enzyme; nicking-closing enzyme; swivelase; omega-protein; deoxyribonucleate topoisomerase; topoisomerase +ec:5.6.2.2 DNA topoisomerase (ATP-hydrolysing); type II DNA topoisomerase; DNA-gyrase; deoxyribonucleate topoisomerase; deoxyribonucleic topoisomerase; topoisomerase; DNA topoisomerase II +ec:5.6.2.3 DNA 5'-3' helicase; DnaB helicase; replication fork helicase; 5' to 3' DNA helicase; BACH1 helicase; BcMCM; BLM protein; BRCA1-associated C-terminal helicase; CeWRN-1; Dbp9p; DNA helicase A; DNA helicase E; DNA helicase II; DNA helicase III; DNA helicase VI; dnaB (gene name); DnaB helicase E1; helicase HDH IV; Hel E; helicase DnaB; helicase domain of bacteriophage T7 gene 4 protein helicase; PcrA helicase; hHcsA; Hmi1p; hPif1; MCM helicase; MCM protein; MPH1; PcrA; PfDH A; Pfh1p; PIF1; replicative DNA helicase +ec:5.6.2.4 DNA 3'-5' helicase; uvrD (gene name); rep (gene name); RECQ (gene name); MER3 (gene name); Holliday junction DNA helicase +ec:5.99.1.1 thiocyanate isomerase; isothiocyanate isomerase +ec:5.99.1.2 Transferred to 5.6.2.1 +ec:5.99.1.3 Transferred to 5.6.2.2 +ec:5.99.1.4 2-hydroxychromene-2-carboxylate isomerase; HCCA isomerase; 2HC2CA isomerase; 2-hydroxychromene-2-carboxylic acid isomerase +ec:6.1.1.1 tyrosine---tRNA ligase +ec:6.1.1.2 tryptophan---tRNA ligase; tryptophanyl-tRNA synthetase; L-tryptophan-tRNATrp ligase (AMP-forming); tryptophanyl-transfer ribonucleate synthetase; tryptophanyl-transfer ribonucleic acid synthetase; tryptophanyl-transfer RNA synthetase; tryptophanyl ribonucleic synthetase; tryptophanyl-transfer ribonucleic synthetase; tryptophanyl-tRNA synthase; tryptophan translase; TrpRS +ec:6.1.1.3 threonine---tRNA ligase; threonyl-tRNA synthetase; threonyl-transfer ribonucleate synthetase; threonyl-transfer RNA synthetase; threonyl-transfer ribonucleic acid synthetase; threonyl ribonucleic synthetase; threonine-transfer ribonucleate synthetase; threonine translase; threonyl-tRNA synthetase; TRS +ec:6.1.1.4 leucine---tRNA ligase; leucyl-tRNA synthetase; leucyl-transfer ribonucleate synthetase; leucyl-transfer RNA synthetase; leucyl-transfer ribonucleic acid synthetase; leucine-tRNA synthetase; leucine translase +ec:6.1.1.5 isoleucine---tRNA ligase; isoleucyl-tRNA synthetase; isoleucyl-transfer ribonucleate synthetase; isoleucyl-transfer RNA synthetase; isoleucine-transfer RNA ligase; isoleucine-tRNA synthetase; isoleucine translase +ec:6.1.1.6 lysine---tRNA ligase; lysyl-tRNA synthetase; lysyl-transfer ribonucleate synthetase; lysyl-transfer RNA synthetase; L-lysine-transfer RNA ligase; lysine-tRNA synthetase; lysine translase +ec:6.1.1.7 alanine---tRNA ligase; alanyl-tRNA synthetase; alanyl-transfer ribonucleate synthetase; alanyl-transfer RNA synthetase; alanyl-transfer ribonucleic acid synthetase; alanine-transfer RNA ligase; alanine transfer RNA synthetase; alanine tRNA synthetase; alanine translase; alanyl-transfer ribonucleate synthase; AlaRS; Ala-tRNA synthetase +ec:6.1.1.8 Deleted entry +ec:6.1.1.9 valine---tRNA ligase; valyl-tRNA synthetase; valyl-transfer ribonucleate synthetase; valyl-transfer RNA synthetase; valyl-transfer ribonucleic acid synthetase; valine transfer ribonucleate ligase; valine translase +ec:6.1.1.10 methionine---tRNA ligase; methionyl-tRNA synthetase; methionyl-transfer ribonucleic acid synthetase; methionyl-transfer ribonucleate synthetase; methionyl-transfer RNA synthetase; methionine translase; MetRS +ec:6.1.1.11 serine---tRNA ligase; seryl-tRNA synthetase; SerRS; seryl-transfer ribonucleate synthetase; seryl-transfer RNA synthetase; seryl-transfer ribonucleic acid synthetase; serine translase +ec:6.1.1.12 aspartate---tRNA ligase; aspartyl-tRNA synthetase; aspartyl ribonucleic synthetase; aspartyl-transfer RNA synthetase; aspartic acid translase; aspartyl-transfer ribonucleic acid synthetase; aspartyl ribonucleate synthetase +ec:6.1.1.13 D-alanine---poly(phosphoribitol) ligase; D-alanyl-poly(phosphoribitol) synthetase; D-alanine: membrane acceptor ligase; D-alanine-D-alanyl carrier protein ligase; D-alanine-membrane acceptor ligase; D-alanine-activating enzyme +ec:6.1.1.14 glycine---tRNA ligase; glycyl-tRNA synthetase; glycyl-transfer ribonucleate synthetase; glycyl-transfer RNA synthetase; glycyl-transfer ribonucleic acid synthetase; glycyl translase +ec:6.1.1.15 proline---tRNA ligase; prolyl-tRNA synthetase; prolyl-transferRNA synthetase; prolyl-transfer ribonucleate synthetase; proline translase; prolyl-transfer ribonucleic acid synthetase; prolyl-s-RNA synthetase; prolinyl-tRNA ligase +ec:6.1.1.16 cysteine---tRNA ligase; cysteinyl-tRNA synthetase; cysteinyl-transferRNA synthetase; cysteinyl-transfer ribonucleate synthetase; cysteine translase +ec:6.1.1.17 glutamate---tRNA ligase; glutamyl-tRNA synthetase; glutamyl-transfer ribonucleate synthetase; glutamyl-transfer RNA synthetase; glutamyl-transfer ribonucleic acid synthetase; glutamate-tRNA synthetase; glutamic acid translase +ec:6.1.1.18 glutamine---tRNA ligase; glutaminyl-tRNA synthetase; glutaminyl-transfer RNA synthetase; glutaminyl-transfer ribonucleate synthetase; glutamine-tRNA synthetase; glutamine translase; glutamate-tRNA ligase; glutaminyl ribonucleic acid; GlnRS +ec:6.1.1.19 arginine---tRNA ligase; arginyl-tRNA synthetase; arginyl-transfer ribonucleate synthetase; arginyl-transfer RNA synthetase; arginyl transfer ribonucleic acid synthetase; arginine-tRNA synthetase; arginine translase +ec:6.1.1.20 phenylalanine---tRNA ligase; phenylalanyl-tRNA synthetase; phenylalanyl-transfer ribonucleate synthetase; phenylalanine-tRNA synthetase; phenylalanyl-transfer RNA synthetase; phenylalanyl-tRNA ligase; phenylalanyl-transfer RNA ligase; L-phenylalanyl-tRNA synthetase; phenylalanine translase +ec:6.1.1.21 histidine---tRNA ligase; histidyl-tRNA synthetase; histidyl-transfer ribonucleate synthetase; histidine translase +ec:6.1.1.22 asparagine---tRNA ligase; asparaginyl-tRNA synthetase; asparaginyl-transfer ribonucleate synthetase; asparaginyl transfer RNA synthetase; asparaginyl transfer ribonucleic acid synthetase; asparagyl-transfer RNA synthetase; asparagine translase +ec:6.1.1.23 aspartate---tRNAAsn ligase; nondiscriminating aspartyl-tRNA synthetase +ec:6.1.1.24 glutamate---tRNAGln ligase; nondiscriminating glutamyl-tRNA synthetase +ec:6.1.1.25 Deleted entry +ec:6.1.1.26 pyrrolysine---tRNAPyl ligase; PylS; pyrrolysyl-tRNA synthetase +ec:6.1.1.27 O-phospho-L-serine---tRNA ligase; O-phosphoseryl-tRNA ligase; non-canonical O-phosphoseryl-tRNA synthetase; SepRS +ec:6.1.1.28 Deleted entry +ec:6.1.2.1 D-alanine---(R)-lactate ligase; VanA; VanB; VanD +ec:6.1.2.2 nebramycin 5' synthase; tobramycin carbamoyltransferase; TobZ +ec:6.1.3.1 olefin beta-lactone synthetase; oleC (gene name) +ec:6.2.1.1 acetate---CoA ligase; acetyl-CoA synthetase; acetyl activating enzyme; acetate thiokinase; acyl-activating enzyme; acetyl coenzyme A synthetase; acetic thiokinase; acetyl CoA ligase; acetyl CoA synthase; acetyl-coenzyme A synthase; short chain fatty acyl-CoA synthetase; short-chain acyl-coenzyme A synthetase; ACS +ec:6.2.1.2 medium-chain acyl-CoA ligase; fadK (gene name); lvaE (gene name); butyryl-CoA synthetase; fatty acid thiokinase (medium chain); acyl-activating enzyme; fatty acid elongase; fatty acid activating enzyme; fatty acyl coenzyme A synthetase; butyrate---CoA ligase; butyryl-coenzyme A synthetase; L-(+)-3-hydroxybutyryl CoA ligase; short-chain acyl-CoA synthetase; medium-chain acyl-CoA synthetase; butanoate:CoA ligase (AMP-forming) +ec:6.2.1.3 long-chain-fatty-acid---CoA ligase; acyl-CoA synthetase; fatty acid thiokinase (long chain); acyl-activating enzyme; palmitoyl-CoA synthase; lignoceroyl-CoA synthase; arachidonyl-CoA synthetase; acyl coenzyme A synthetase; acyl-CoA ligase; palmitoyl coenzyme A synthetase; thiokinase; palmitoyl-CoA ligase; acyl-coenzyme A ligase; fatty acid CoA ligase; long-chain fatty acyl coenzyme A synthetase; oleoyl-CoA synthetase; stearoyl-CoA synthetase; long chain fatty acyl-CoA synthetase; long-chain acyl CoA synthetase; fatty acid elongase; LCFA synthetase; pristanoyl-CoA synthetase; ACS3; long-chain acyl-CoA synthetase I; long-chain acyl-CoA synthetase II; fatty acyl-coenzyme A synthetase; long-chain acyl-coenzyme A synthetase; FAA1 +ec:6.2.1.4 succinate---CoA ligase (GDP-forming); succinyl-CoA synthetase (GDP-forming); succinyl coenzyme A synthetase (guanosine diphosphate-forming); succinate thiokinase (ambiguous); succinic thiokinase (ambiguous); succinyl coenzyme A synthetase (ambiguous); succinate-phosphorylating enzyme (ambiguous); P-enzyme; SCS (ambiguous); G-STK; succinyl coenzyme A synthetase (GDP-forming); succinyl CoA synthetase (ambiguous) +ec:6.2.1.5 succinate---CoA ligase (ADP-forming); succinyl-CoA synthetase (ADP-forming); succinic thiokinase (ambiguous); succinate thiokinase (ambiguous); succinyl-CoA synthetase (ambiguous); succinyl coenzyme A synthetase (adenosine diphosphate-forming); succinyl coenzyme A synthetase (ambiguous); A-STK (adenin nucleotide-linked succinate thiokinase); STK (ambiguous); A-SCS +ec:6.2.1.6 glutarate---CoA ligase; glutaryl-CoA synthetase; glutaryl coenzyme A synthetase +ec:6.2.1.7 cholate---CoA ligase; BAL; bile acid CoA ligase; bile acid coenzyme A ligase; choloyl-CoA synthetase; choloyl coenzyme A synthetase; cholic thiokinase; cholate thiokinase; cholic acid:CoA ligase; 3alpha,7alpha,12alpha-trihydroxy-5beta-cholestanoyl coenzyme A synthetase; 3alpha,7alpha,12alpha-trihydroxy-5beta-cholestanoate-CoA ligase; 3alpha,7alpha,12alpha-trihydroxy-5beta-cholestanoate-CoA synthetase; THCA-CoA ligase; 3alpha,7alpha,12alpha-trihydroxy-5beta-cholestanate---CoA ligase; 3alpha,7alpha,12alpha-trihydroxy-5beta-cholestanate:CoA ligase (AMP-forming); cholyl-CoA synthetase; trihydroxycoprostanoyl-CoA synthetase +ec:6.2.1.8 oxalate---CoA ligase; oxalyl-CoA synthetase; oxalyl coenzyme A synthetase +ec:6.2.1.9 malate---CoA ligase; malyl-CoA synthetase; malyl coenzyme A synthetase; malate thiokinase +ec:6.2.1.10 carboxylic acid---CoA ligase (GDP-forming); acyl-CoA synthetase (GDP-forming); acyl coenzyme A synthetase (guanosine diphosphate forming) +ec:6.2.1.11 biotin---CoA ligase; biotinyl-CoA synthetase; biotin CoA synthetase; biotinyl coenzyme A synthetase +ec:6.2.1.12 4-coumarate---CoA ligase; 4-coumaroyl-CoA synthetase; p-coumaroyl CoA ligase; p-coumaryl coenzyme A synthetase; p-coumaryl-CoA synthetase; p-coumaryl-CoA ligase; feruloyl CoA ligase; hydroxycinnamoyl CoA synthetase; 4-coumarate:coenzyme A ligase; caffeolyl coenzyme A synthetase; p-hydroxycinnamoyl coenzyme A synthetase; feruloyl coenzyme A synthetase; sinapoyl coenzyme A synthetase; 4-coumaryl-CoA synthetase; hydroxycinnamate:CoA ligase; p-coumaryl-CoA ligase; p-hydroxycinnamic acid:CoA ligase; 4CL +ec:6.2.1.13 acetate---CoA ligase (ADP-forming); acetyl-CoA synthetase (ADP-forming); acetyl coenzyme A synthetase (adenosine diphosphate-forming); acetate thiokinase +ec:6.2.1.14 6-carboxyhexanoate---CoA ligase; 6-carboxyhexanoyl-CoA synthetase; pimelyl-CoA synthetase +ec:6.2.1.15 arachidonate---CoA ligase; arachidonoyl-CoA synthetase +ec:6.2.1.16 acetoacetate---CoA ligase; acetoacetyl-CoA synthetase +ec:6.2.1.17 propionate---CoA ligase; propionyl-CoA synthetase +ec:6.2.1.18 citrate---CoA ligase; citryl-CoA synthetase; citrate:CoA ligase; citrate thiokinase +ec:6.2.1.19 long-chain-fatty-acid---protein ligase; luxE (gene name); acyl-protein synthetase; long-chain-fatty-acid---luciferin-component ligase +ec:6.2.1.20 long-chain-fatty-acid---[acyl-carrier-protein] ligase; acyl-[acyl-carrier-protein] synthetase (ambiguous); acyl-ACP synthetase (ambiguous); stearoyl-ACP synthetase; acyl-acyl carrier protein synthetase (ambiguous); long-chain-fatty-acid:[acyl-carrier-protein] ligase (AMP-forming) +ec:6.2.1.21 Deleted entry +ec:6.2.1.22 [citrate (pro-3S)-lyase] ligase; citrate lyase ligase; citrate lyase synthetase; acetate: SH-[acyl-carrier-protein] enzyme ligase (AMP); acetate:HS-citrate lyase ligase; acetate:citrate-(pro-3S)-lyase(thiol-form) ligase (AMP-forming); acetate:[citrate-(pro-3S)-lyase](thiol-form) ligase (AMP-forming) +ec:6.2.1.23 dicarboxylate---CoA ligase; carboxylyl-CoA synthetase; dicarboxylyl-CoA synthetase +ec:6.2.1.24 phytanate---CoA ligase; phytanoyl-CoA ligase +ec:6.2.1.25 benzoate---CoA ligase; benzoate---coenzyme A ligase; benzoyl-coenzyme A synthetase; benzoyl CoA synthetase (AMP forming) +ec:6.2.1.26 o-succinylbenzoate---CoA ligase; o-succinylbenzoyl-coenzyme A synthetase; o-succinylbenzoate:CoA ligase (AMP-forming) +ec:6.2.1.27 4-hydroxybenzoate---CoA ligase; 4-hydroxybenzoate-CoA synthetase; 4-hydroxybenzoate---coenzyme A ligase (AMP-forming); 4-hydroxybenzoyl coenzyme A synthetase; 4-hydroxybenzoyl-CoA ligase +ec:6.2.1.28 3alpha,7alpha-dihydroxy-5beta-cholestanate---CoA ligase; 3alpha,7alpha-dihydroxy-5beta-cholestanoyl coenzyme A synthetase; DHCA-CoA ligase; 3alpha,7alpha-dihydroxy-5beta-cholestanate:CoA ligase (AMP-forming) +ec:6.2.1.29 Deleted entry +ec:6.2.1.30 phenylacetate---CoA ligase; phenacyl coenzyme A synthetase; phenylacetyl-CoA ligase; PA-CoA ligase; phenylacetyl-CoA ligase (AMP-forming) +ec:6.2.1.31 2-furoate---CoA ligase; 2-furoyl coenzyme A synthetase +ec:6.2.1.32 anthranilate---CoA ligase; anthraniloyl coenzyme A synthetase; 2-aminobenzoate---CoA ligase; 2-aminobenzoate---coenzyme A ligase; 2-aminobenzoate coenzyme A ligase +ec:6.2.1.33 4-chlorobenzoate---CoA ligase +ec:6.2.1.34 trans-feruloyl-CoA synthase; trans-feruloyl-CoA synthetase; trans-ferulate:CoASH ligase (ATP-hydrolysing); ferulate:CoASH ligase (ATP-hydrolysing) +ec:6.2.1.35 acetate---[acyl-carrier protein] ligase; HS-acyl-carrier protein:acetate ligase; [acyl-carrier protein]:acetate ligase; MadH; ACP-SH:acetate ligase +ec:6.2.1.36 3-hydroxypropionyl-CoA synthase; 3-hydroxypropionyl-CoA synthetase (AMP-forming); 3-hydroxypropionate---CoA ligase +ec:6.2.1.37 3-hydroxybenzoate---CoA ligase; 3-hydroxybenzoyl-CoA synthetase; 3-hydroxybenzoate---coenzyme A ligase (AMP-forming); 3-hydroxybenzoyl coenzyme A synthetase; 3-hydroxybenzoyl-CoA ligase +ec:6.2.1.38 (2,2,3-trimethyl-5-oxocyclopent-3-enyl)acetyl-CoA synthase; 2-oxo-Delta3-4,5,5-trimethylcyclopentenylacetyl-CoA synthetase +ec:6.2.1.39 [butirosin acyl-carrier protein]---L-glutamate ligase; [BtrI acyl-carrier protein]---L-glutamate ligase; BtrJ +ec:6.2.1.40 4-hydroxybutyrate---CoA ligase (AMP-forming); 4-hydroxybutyrate-CoA synthetase (ambiguous); 4-hydroxybutyrate:CoA ligase (ambiguous); hbs (gene name); 4-hydroxybutyrate---CoA ligase +ec:6.2.1.41 3-[(3aS,4S,7aS)-7a-methyl-1,5-dioxo-octahydro-1H-inden-4-yl]propanoate---CoA ligase; fadD3 (gene name); HIP---CoA ligase +ec:6.2.1.42 3-oxocholest-4-en-26-oate---CoA ligase; fadD19 (gene name) +ec:6.2.1.43 2-hydroxy-7-methoxy-5-methyl-1-naphthoate---CoA ligase; NcsB2 +ec:6.2.1.44 3-(methylthio)propionyl---CoA ligase; DmdB; MMPA-CoA ligase; methylmercaptopropionate-coenzyme A ligase; 3-methylmercaptopropionyl-CoA ligase; 3-(methylthio)propanoate:CoA ligase (AMP-forming) +ec:6.2.1.45 E1 ubiquitin-activating enzyme; ubiquitin activating enzyme; E1; ubiquitin-activating enzyme E1 +ec:6.2.1.46 L-allo-isoleucine---holo-[CmaA peptidyl-carrier protein] ligase; CmaA +ec:6.2.1.47 medium-chain-fatty-acid---[acyl-carrier-protein] ligase; jamA (gene name) +ec:6.2.1.48 carnitine---CoA ligase; caiC (gene name) +ec:6.2.1.49 long-chain fatty acid adenylyltransferase FadD28; fadD28 (gene name) +ec:6.2.1.50 4-hydroxybenzoate adenylyltransferase FadD22; fadD22 (gene name); 4-hydroxybenzoate adenylase +ec:6.2.1.51 4-hydroxyphenylalkanoate adenylyltransferase FadD29; fadD29 (gene name); 4-hydroxyphenylalkanoate adenylase +ec:6.2.1.52 L-firefly luciferin---CoA ligase; LUC +ec:6.2.1.53 L-proline---[L-prolyl-carrier protein] ligase; pltF (gene name); bmp4 (gene name); pigI (gene name) +ec:6.2.1.54 D-alanine---[D-alanyl-carrier protein] ligase; dltA (gene name); Dcl +ec:6.2.1.55 E1 SAMP-activating enzyme; UbaA; SAMP-activating enzyme E1 +ec:6.2.1.56 4-hydroxybutyrate---CoA ligase (ADP-forming); Nmar_0206 (locus name) +ec:6.2.1.57 long-chain fatty acid adenylase/transferase FadD23; fadD23 (gene name); long-chain fatty acid adenylyltransferase FadD23 +ec:6.2.1.58 isophthalate---CoA ligase; IPCL +ec:6.2.1.59 long-chain fatty acid adenylase/transferase FadD26; FadD26 +ec:6.2.1.60 marinolic acid---CoA ligase; tmlU (gene name) +ec:6.2.1.61 salicylate---[aryl-carrier protein] ligase; pmsE (gene name); pchD (gene name) +ec:6.2.1.62 3,4-dihydroxybenzoate---[aryl-carrier protein] ligase; asbC (gene name) +ec:6.2.1.63 L-arginine---[L-arginyl-carrier protein] ligase; vabF (gene name) +ec:6.2.1.64 E1 NEDD8-activating enzyme; NEDD-activating enzyme E1; NAE1 (gene name); UBA3 (gene name) +ec:6.2.1.65 salicylate---CoA ligase; sdgA (gene name) +ec:6.2.1.66 glyine---[glycyl-carrier protein] ligase; dhbF (gene name); sfmB (gene name) +ec:6.2.1.67 L-alanine---[L-alanyl-carrier protein] ligase; ambB (gene name); phsB (gene name) +ec:6.2.1.68 L-glutamate---[L-glutamyl-carrier protein] ligase; ambE (gene name) +ec:6.2.1.69 L-cysteine---[L-cysteinyl-carrier protein] ligase; pchE (gene name); pchF (gene name); angR (gene name) +ec:6.2.1.70 L-threonine---[L-threonyl-carrier protein] ligase; dhbF (gene name); pmsD (gene name); syrB1 (gene name) +ec:6.2.1.71 2,3-dihydroxybenzoate---[aryl-carrier protein] ligase; entE (gene name); vibE (gene name); dhbE (gene name); angE (gene name) +ec:6.2.1.72 L-serine---[L-seryl-carrier protein] ligase; entF (gene name); zmaJ (gene name); gdnB (gene name); serine-activating enzyme +ec:6.2.1.73 L-tryptophan---[L-tryptophyl-carrier protein] ligase; ecm13 (gene name); swb11 (gene name) +ec:6.2.1.74 3-amino-5-hydroxybenzoate---[acyl-carrier protein] ligase; rifA (gene name); mitE (gene name) +ec:6.2.1.75 indoleacetate---CoA ligase; iaaB (gene name) +ec:6.2.2.1 thioglycine synthase; ycaO (gene name) (ambiguous) +ec:6.2.2.2 oxazoline synthase; cyanobactin heterocyclase; cyanobactin cyclodehydratase; patD (gene name); balhD (gene name); micD (gene name) +ec:6.2.2.3 thiazoline synthase +ec:6.3.1.1 aspartate---ammonia ligase; asparagine synthetase; L-asparagine synthetase +ec:6.3.1.2 glutamine synthetase; glutamate---ammonia ligase; glutamylhydroxamic synthetase; L-glutamine synthetase; GS +ec:6.3.1.3 Transferred to 6.3.4.13 +ec:6.3.1.4 aspartate---ammonia ligase (ADP-forming); asparagine synthetase (ADP-forming); asparagine synthetase (adenosine diphosphate-forming) +ec:6.3.1.5 NAD+ synthase; NAD synthetase; NAD synthase; nicotinamide adenine dinucleotide synthetase; diphosphopyridine nucleotide synthetase +ec:6.3.1.6 glutamate---ethylamine ligase; N5-ethyl-L-glutamine synthetase; theanine synthetase; N5-ethylglutamine synthetase +ec:6.3.1.7 4-methyleneglutamate---ammonia ligase; 4-methyleneglutamine synthetase +ec:6.3.1.8 glutathionylspermidine synthase; glutathione:spermidine ligase (ADP-forming) +ec:6.3.1.9 trypanothione synthase; glutathionylspermidine:glutathione ligase (ADP-forming) +ec:6.3.1.10 adenosylcobinamide-phosphate synthase; CbiB +ec:6.3.1.11 glutamate---putrescine ligase; gamma-glutamylputrescine synthetase; YcjK +ec:6.3.1.12 D-aspartate ligase; Aslfm; UDP-MurNAc-pentapeptide:D-aspartate ligase; D-aspartic acid-activating enzyme +ec:6.3.1.13 L-cysteine:1D-myo-inositol 2-amino-2-deoxy-alpha-D-glucopyranoside ligase; MshC; MshC ligase; Cys:GlcN-Ins ligase; mycothiol ligase +ec:6.3.1.14 diphthine---ammonia ligase; diphthamide synthase; diphthamide synthetase; DPH6 (gene name); ATPBD4 (gene name); diphthine:ammonia ligase (AMP-forming) +ec:6.3.1.15 8-demethylnovobiocic acid synthase; novL (gene name); novobiocin ligase; novobiocic acid synthetase (misleading); 8-desmethyl-novobiocic acid synthetase; 8-demethylnovobiocic acid synthetase; 3-dimethylallyl-4-hydroxybenzoate:3-amino-4,7-dihydroxycoumarin ligase (AMP-forming) +ec:6.3.1.16 Transferred to 6.3.3.6 +ec:6.3.1.17 beta-citrylglutamate synthase; NAAG synthetase I; NAAGS-I; RIMKLB (gene name) (ambiguous) +ec:6.3.1.18 gamma-glutamylanilide synthase; atdA1 (gene name); tdnQ (gene name); dcaQ (gene name) +ec:6.3.1.19 prokaryotic ubiquitin-like protein ligase; PafA (ambiguous); Pup ligase; proteasome accessory factor A +ec:6.3.1.20 lipoate---protein ligase; lplA (gene name); lplJ (gene name); lipoate protein ligase; lipoate-protein ligase A; LPL; LPL-B +ec:6.3.1.21 phosphoribosylglycinamide formyltransferase 2; purT (gene name); GAR transformylase 2; GART2; glycinamide ribonucleotide transformylase 2; 5'-phosphoribosylglycinamide transformylase 2; GAR transformylase T +ec:6.3.2.1 pantoate---beta-alanine ligase (AMP-forming); pantothenate synthetase; pantoate activating enzyme; pantoic-activating enzyme; D-pantoate:beta-alanine ligase (AMP-forming); pantoate---beta-alanine ligase (ambiguous) +ec:6.3.2.2 glutamate---cysteine ligase; gamma-glutamylcysteine synthetase; gamma-glutamyl-L-cysteine synthetase; gamma-glutamylcysteinyl synthetase +ec:6.3.2.3 glutathione synthase; glutathione synthetase; GSH synthetase +ec:6.3.2.4 D-alanine---D-alanine ligase; MurE synthetase [ambiguous]; alanine:alanine ligase (ADP-forming); alanylalanine synthetase +ec:6.3.2.5 phosphopantothenate---cysteine ligase (CTP); phosphopantothenoylcysteine synthetase (ambiguous); phosphopantothenate---cysteine ligase (ambiguous) +ec:6.3.2.6 phosphoribosylaminoimidazolesuccinocarboxamide synthase; phosphoribosylaminoimidazole-succinocarboxamide synthetase; PurC; SAICAR synthetase; 4-(N-succinocarboxamide)-5-aminoimidazole synthetase; 4-[(N-succinylamino)carbonyl]-5-aminoimidazole ribonucleotide synthetase; SAICARs; phosphoribosylaminoimidazolesuccinocarboxamide synthetase; 5-aminoimidazole-4-N-succinocarboxamide ribonucleotide synthetase +ec:6.3.2.7 UDP-N-acetylmuramoyl-L-alanyl-D-glutamate---L-lysine ligase; MurE synthetase; UDP-N-acetylmuramoyl-L-alanyl-D-glutamyl-L-lysine synthetase; uridine diphospho-N-acetylmuramoylalanyl-D-glutamyllysine synthetase; UPD-MurNAc-L-Ala-D-Glu:L-Lys ligase; UDP-N-acetylmuramoyl-L-alanyl-D-glutamate:L-lysine gamma-ligase (ADP-forming) +ec:6.3.2.8 UDP-N-acetylmuramate---L-alanine ligase; MurC synthetase; UDP-N-acetylmuramoyl-L-alanine synthetase; uridine diphospho-N-acetylmuramoylalanine synthetase; UDP-N-acetylmuramoylalanine synthetase; L-alanine-adding enzyme; UDP-acetylmuramyl-L-alanine synthetase; UDPMurNAc-L-alanine synthetase; L-Ala ligase; uridine diphosphate N-acetylmuramate:L-alanine ligase; uridine 5'-diphosphate-N-acetylmuramyl-L-alanine synthetase; uridine-diphosphate-N-acetylmuramate:L-alanine ligase; UDP-MurNAc:L-alanine ligase; alanine-adding enzyme; UDP-N-acetylmuramyl:L-alanine ligase; UDP-N-acetylmuramate:L-alanine ligase (ADP-forming) +ec:6.3.2.9 UDP-N-acetylmuramoyl-L-alanine---D-glutamate ligase; MurD synthetase; UDP-N-acetylmuramoyl-L-alanyl-D-glutamate synthetase; uridine diphospho-N-acetylmuramoylalanyl-D-glutamate synthetase; D-glutamate-adding enzyme; D-glutamate ligase; UDP-Mur-NAC-L-Ala:D-Glu ligase; UDP-N-acetylmuramoyl-L-alanine:glutamate ligase (ADP-forming); UDP-N-acetylmuramoylalanine---D-glutamate ligase; UDP-N-acetylmuramoyl-L-alanine:D-glutamate ligase (ADP-forming) +ec:6.3.2.10 UDP-N-acetylmuramoyl-tripeptide---D-alanyl-D-alanine ligase; MurF synthetase; UDP-N-acetylmuramoyl-L-alanyl-D-glutamyl-L-lysyl-D-alanyl-D-alanine synthetase; UDP-N-acetylmuramoylalanyl-D-glutamyl-lysine-D-alanyl-D-alanine ligase; uridine diphosphoacetylmuramoylpentapeptide synthetase; UDPacetylmuramoylpentapeptide synthetase; UDP-MurNAc-L-Ala-D-Glu-L-Lys:D-Ala-D-Ala ligase +ec:6.3.2.11 carnosine synthase; carnosine synthetase; carnosine-anserine synthetase; homocarnosine-carnosine synthetase; carnosine-homocarnosine synthetase; L-histidine:beta-alanine ligase (AMP-forming) (incorrect) +ec:6.3.2.12 dihydrofolate synthase; dihydrofolate synthetase; 7,8-dihydrofolate synthetase; H2-folate synthetase; 7,8-dihydropteroate:L-glutamate ligase (ADP); dihydropteroate:L-glutamate ligase (ADP-forming); DHFS +ec:6.3.2.13 UDP-N-acetylmuramoyl-L-alanyl-D-glutamate---2,6-diaminopimelate ligase; MurE synthetase [ambiguous]; UDP-N-acetylmuramoyl-L-alanyl-D-glutamate:meso-2,6-diamino-heptanedioate ligase (ADP-forming); UDP-N-acetylmuramoyl-L-alanyl-D-glutamyl-meso-2,6-diaminopimelate synthetase; UDP-N-acetylmuramoylalanyl-D-glutamate---2,6-diaminopimelate ligase; UDP-N-acetylmuramoyl-L-alanyl-D-glutamate:meso-2,6-diaminoheptanedioate gamma-ligase (ADP-forming) +ec:6.3.2.14 enterobactin synthase; N-(2,3-dihydroxybenzoyl)-serine synthetase; 2,3-dihydroxybenzoylserine synthetase; 2,3-dihydroxybenzoate---serine ligase +ec:6.3.2.15 Deleted entry +ec:6.3.2.16 D-alanine---alanyl-poly(glycerolphosphate) ligase; D-alanyl-alanyl-poly(glycerolphosphate) synthetase; D-alanine:membrane-acceptor ligase; D-alanylalanylpoly(phosphoglycerol) synthetase; D-alanyl-poly(phosphoglycerol) synthetase; D-alanine-membrane acceptor-ligase +ec:6.3.2.17 tetrahydrofolate synthase; folylpolyglutamate synthase; folate polyglutamate synthetase; formyltetrahydropteroyldiglutamate synthetase; N10-formyltetrahydropteroyldiglutamate synthetase; folylpoly-gamma-glutamate synthase; folylpolyglutamyl synthetase; folylpoly(gamma-glutamate) synthase; folylpolyglutamate synthetase; FPGS; tetrahydrofolylpolyglutamate synthase; tetrahydrofolate:L-glutamate gamma-ligase (ADP-forming); tetrahydropteroyl-[gamma-Glu]n:L-glutamate gamma-ligase (ADP-forming) +ec:6.3.2.18 gamma-glutamylhistamine synthase; gamma-glutaminylhistamine synthetase; gamma-GHA synthetase +ec:6.3.2.19 Deleted entry +ec:6.3.2.20 indoleacetate---lysine synthetase; indoleacetate:L-lysine ligase (ADP-forming) +ec:6.3.2.21 Deleted entry +ec:6.3.2.22 Transferred to 6.3.1.14 +ec:6.3.2.23 homoglutathione synthase; homoglutathione synthetase; beta-alanine specific hGSH synthetase +ec:6.3.2.24 tyrosine---arginine ligase; tyrosyl-arginine synthase; kyotorphin synthase; kyotorphin-synthesizing enzyme; kyotorphin synthetase +ec:6.3.2.25 tubulin---tyrosine ligase +ec:6.3.2.26 N-(5-amino-5-carboxypentanoyl)-L-cysteinyl-D-valine synthase; L-delta-(alpha-aminoadipoyl)-L-cysteinyl-D-valine synthetase; ACV synthetase; L-alpha-aminoadipyl-cysteinyl-valine synthetase +ec:6.3.2.27 Deleted entry +ec:6.3.2.28 Transferred to 6.3.2.49 +ec:6.3.2.29 cyanophycin synthase (L-aspartate-adding); CphA (ambiguous); CphA1 (ambiguous); CphA2 (ambiguous); cyanophycin synthetase (ambiguous); multi-L-arginyl-poly-L-aspartate synthase (ambiguous) +ec:6.3.2.30 cyanophycin synthase (L-arginine-adding); CphA (ambiguous); CphA1 (ambiguous); CphA2 (ambiguous); cyanophycin synthetase (ambiguous); multi-L-arginyl-poly-L-aspartate synthase (ambiguous) +ec:6.3.2.31 coenzyme F420-0:L-glutamate ligase; CofE-AF; MJ0768; CofE +ec:6.3.2.32 coenzyme gamma-F420-2:alpha-L-glutamate ligase; MJ1001; CofF protein; gamma-F420-2:alpha-L-glutamate ligase +ec:6.3.2.33 tetrahydrosarcinapterin synthase; H4MPT:alpha-L-glutamate ligase; MJ0620; MptN protein +ec:6.3.2.34 coenzyme F420-1:gamma-L-glutamate ligase; F420:gamma-glutamyl ligase; CofE-AF; MJ0768; CofE +ec:6.3.2.35 D-alanine---D-serine ligase; VanC; VanE; VanG +ec:6.3.2.36 4-phosphopantoate---beta-alanine ligase; phosphopantothenate synthetase; TK1686 protein +ec:6.3.2.37 UDP-N-acetylmuramoyl-L-alanyl-D-glutamate---D-lysine ligase; UDP-MurNAc-L-Ala-D-Glu:D-Lys ligase; D-lysine-adding enzyme +ec:6.3.2.38 N2-citryl-N6-acetyl-N6-hydroxylysine synthase; Nalpha-citryl-Nepsilon-acetyl-Nepsilon-hydroxylysine synthase; iucA (gene name) +ec:6.3.2.39 aerobactin synthase; iucC (gene name) +ec:6.3.2.40 cyclopeptine synthase +ec:6.3.2.41 N-acetylaspartylglutamate synthase; N-acetylaspartylglutamate synthetase; NAAG synthetase; NAAGS; RIMKLA (gene name) (ambiguous); RIMKLB (gene name) (ambiguous) +ec:6.3.2.42 N-acetylaspartylglutamylglutamate synthase; N-acetylaspartylglutamylglutamate synthetase; NAAG(2) synthase; NAAG synthetase II; NAAGS-II; RIMKLA (gene name) (ambiguous) +ec:6.3.2.43 [amino-group carrier protein]---L-2-aminoadipate ligase; alpha-aminoadipate-lysW ligase; lysX (gene name); LysX (ambiguous); AAA---LysW ligase; [lysine-biosynthesis-protein LysW]-C-terminal-L-glutamate:L-2-aminoadipate ligase (ADP-forming); [lysine-biosynthesis-protein LysW]---L-2-aminoadipate ligase +ec:6.3.2.44 pantoate---beta-alanine ligase (ADP-forming); pantothenate synthetase (ambiguous); pantoate---beta-alanine ligase (ambiguous) +ec:6.3.2.45 UDP-N-acetylmuramate---L-alanyl-gamma-D-glutamyl-meso-2,6-diaminoheptanedioate ligase; murein peptide ligase; Mpl; yjfG (gene name); UDP-MurNAc:L-Ala-gamma-D-Glu-meso-A2pm ligase; UDP-N-acetylmuramate:L-alanyl-gamma-D-glutamyl-meso-diaminopimelate ligase +ec:6.3.2.46 fumarate---(S)-2,3-diaminopropanoate ligase; DdaG; fumarate:(S)-2,3-diaminopropanoate ligase (AMP-forming) +ec:6.3.2.47 dapdiamide synthase; DdaF; dapdiamide A synthase +ec:6.3.2.48 L-arginine-specific L-amino acid ligase; RizA; L-amino acid ligase RizA +ec:6.3.2.49 L-alanine---L-anticapsin ligase; BacD; alanine-anticapsin ligase; L-Ala-L-anticapsin ligase; ywfE (gene name) +ec:6.3.2.50 tenuazonic acid synthetase; TAS1 (gene name) +ec:6.3.2.51 phosphopantothenate---cysteine ligase (ATP); phosphopantothenoylcysteine synthetase (ambiguous); PPCS (gene name) +ec:6.3.2.52 jasmonoyl---L-amino acid ligase; JAR1 (gene name); JAR4 (gene name); JAR6 (gene name); jasmonoyl---L-amino acid synthetase +ec:6.3.2.53 UDP-N-acetylmuramoyl-L-alanine---L-glutamate ligase; murD2 (gene name); UDP-N-acetyl-alpha-D-muramoyl-L-alanyl-L-glutamate synthetase; UDP-MurNAc-L-Ala-L-Glu synthetase +ec:6.3.2.54 L-2,3-diaminopropanoate---citrate ligase; sbnE (gene name); 2-[(L-alanin-3-ylcarbamoyl)methyl]-2-hydroxybutanedioate synthtase +ec:6.3.2.55 2-[(L-alanin-3-ylcarbamoyl)methyl]-3-(2-aminoethylcarbamoyl)-2-hydroxypropanoate synthase; sbnF (gene name) +ec:6.3.2.56 staphyloferrin B synthase; sbnC (gene name) +ec:6.3.2.57 staphyloferrin A synthase; sfnaB (gene name) +ec:6.3.2.58 D-ornithine---citrate ligase; sfnaD (gene name) +ec:6.3.2.59 3-methyl-D-ornithine---L-lysine ligase; N6-[(2R,3R)-3-methylornithyl]-L-lysine synthase; 3-methylornithine---L-lysine ligase; pylC (gene name) +ec:6.3.2.60 glutamate---[amino group carrier protein] ligase; argX (gene name) +ec:6.3.2.61 tubulin-glutamate ligase; alpha-tubulin-glutamate ligase; tubulin polyglutamylase; TTLL1 (ambiguous); TTLL5 (ambiguous); TTLL6 (ambiguous) +ec:6.3.2.62 beta-tubulin-glutamate ligase; beta-tubulin polyglutamylase; TTLL4 (ambiguous); TTLL7 (ambiguous) +ec:6.3.3.1 phosphoribosylformylglycinamidine cyclo-ligase; phosphoribosylaminoimidazole synthetase; AIR synthetase; 5'-aminoimidazole ribonucleotide synthetase; 2-(formamido)-1-N-(5-phosphoribosyl)acetamidine cyclo-ligase (ADP-forming) +ec:6.3.3.2 5-formyltetrahydrofolate cyclo-ligase; 5,10-methenyltetrahydrofolate synthetase; formyltetrahydrofolic cyclodehydrase; 5-formyltetrahydrofolate cyclodehydrase +ec:6.3.3.3 dethiobiotin synthase; desthiobiotin synthase +ec:6.3.3.4 (carboxyethyl)arginine beta-lactam-synthase; L-2-N-(2-carboxyethyl)arginine cyclo-ligase (AMP-forming) +ec:6.3.3.5 O-ureido-D-serine cyclo-ligase; dcsG (gene name) +ec:6.3.3.6 carbapenam-3-carboxylate synthase; CarA (ambiguous); CPS (ambiguous); carbapenam-3-carboxylate ligase; 6-methyl-(2S,5S)-5-carboxymethylproline cyclo-ligase (AMP-forming) +ec:6.3.3.7 Ni-sirohydrochlorin a,c-diamide reductive cyclase; cfbC (gene name); cfbD (gene name) +ec:6.3.4.1 Transferred to 6.3.5.2 +ec:6.3.4.2 CTP synthase (glutamine hydrolysing); UTP---ammonia ligase; cytidine triphosphate synthetase; uridine triphosphate aminase; cytidine 5'-triphosphate synthetase; CTPS (gene name); pyrG (gene name); CTP synthase; UTP:ammonia ligase (ADP-forming) +ec:6.3.4.3 formate---tetrahydrofolate ligase; formyltetrahydrofolate synthetase; 10-formyltetrahydrofolate synthetase; tetrahydrofolic formylase; tetrahydrofolate formylase +ec:6.3.4.4 adenylosuccinate synthase; IMP---aspartate ligase; adenylosuccinate synthetase; succinoadenylic kinosynthetase; succino-AMP synthetase +ec:6.3.4.5 argininosuccinate synthase; citrulline---aspartate ligase; argininosuccinate synthetase; arginine succinate synthetase; argininosuccinic acid synthetase; arginosuccinate synthetase +ec:6.3.4.6 urea carboxylase; urease (ATP-hydrolysing); urea carboxylase (hydrolysing); ATP---urea amidolyase; urea amidolyase; UALase; UCA +ec:6.3.4.7 ribose-5-phosphate---ammonia ligase; 5-phosphoribosylamine synthetase; ribose 5-phosphate aminotransferase; ammonia-ribose 5-phosphate aminotransferase +ec:6.3.4.8 imidazoleacetate---phosphoribosyldiphosphate ligase; 5-phosphoribosylimidazoleacetate synthetase +ec:6.3.4.9 biotin---[methylmalonyl-CoA-carboxytransferase] ligase; biotin-[methylmalonyl-CoA-carboxyltransferase] synthetase; biotin-methylmalonyl coenzyme A carboxyltransferase synthetase; biotin-transcarboxylase synthetase; methylmalonyl coenzyme A holotranscarboxylase synthetase; biotin---[methylmalonyl-CoA-carboxyltransferase] ligase; biotin:apo[methylmalonyl-CoA:pyruvate carboxyltransferase] ligase (AMP-forming) +ec:6.3.4.10 biotin---[propionyl-CoA-carboxylase (ATP-hydrolysing)] ligase; biotin-[propionyl-CoA-carboxylase (ATP-hydrolysing)] synthetase; biotin-propionyl coenzyme A carboxylase synthetase; propionyl coenzyme A holocarboxylase synthetase +ec:6.3.4.11 biotin---[methylcrotonoyl-CoA-carboxylase] ligase; biotin-[methylcrotonoyl-CoA-carboxylase] synthetase; biotin-beta-methylcrotonyl coenzyme A carboxylase synthetase; beta-methylcrotonyl coenzyme A holocarboxylase synthetase; holocarboxylase-synthetase +ec:6.3.4.12 glutamate---methylamine ligase; gamma-glutamylmethylamide synthetase +ec:6.3.4.13 phosphoribosylamine---glycine ligase; phosphoribosylglycinamide synthetase; glycinamide ribonucleotide synthetase; phosphoribosylglycineamide synthetase; glycineamide ribonucleotide synthetase; 2-amino-N-ribosylacetamide 5'-phosphate kinosynthase; 5'-phosphoribosylglycinamide synthetase; GAR +ec:6.3.4.14 biotin carboxylase; accC (gene name); biotin-carboxyl-carrier-protein:carbon-dioxide ligase (ADP-forming) +ec:6.3.4.15 biotin---[biotin carboxyl-carrier protein] ligase; birA (gene name); HLCS (gene name); HCS1 (gene name); biotin-[acetyl-CoA carboxylase] synthetase; biotin-[acetyl coenzyme A carboxylase] synthetase; acetyl coenzyme A holocarboxylase synthetase; acetyl CoA holocarboxylase synthetase; biotin:apocarboxylase ligase; Biotin holoenzyme synthetase; biotin:apo-[acetyl-CoA:carbon-dioxide ligase (ADP-forming)] ligase (AMP-forming); biotin---[acetyl-CoA-carboxylase] ligase +ec:6.3.4.16 carbamoyl-phosphate synthase (ammonia); carbon-dioxide---ammonia ligase; carbamoylphosphate synthase; carbamylphosphate synthetase; carbamoylphosphate synthase (ammonia); carbamoylphosphate synthetase; carbamylphosphate synthetase I; CPSI (gene name); carbon-dioxide:ammonia ligase (ADP-forming, carbamate-phosphorylating) +ec:6.3.4.17 formate---dihydrofolate ligase; formyltransferase, dihydrofolate; dihydrofolate formyltransferase; formyl dihydrofolate synthase +ec:6.3.4.18 5-(carboxyamino)imidazole ribonucleotide synthase; N5-CAIR synthetase; N5-carboxyaminoimidazole ribonucleotide synthetase; PurK +ec:6.3.4.19 tRNAIle-lysidine synthase; TilS; mesJ (gene name); yacA (gene name); isoleucine-specific transfer ribonucleate lysidine synthetase; tRNAIle-lysidine synthetase +ec:6.3.4.20 7-cyano-7-deazaguanine synthase; preQ0 synthase; 7-cyano-7-carbaguanine synthase; queC (gene name) +ec:6.3.4.21 nicotinate phosphoribosyltransferase; niacin ribonucleotidase; nicotinic acid mononucleotide glycohydrolase; nicotinic acid mononucleotide pyrophosphorylase; nicotinic acid phosphoribosyltransferase; nicotinate-nucleotide:diphosphate phospho-alpha-D-ribosyltransferase +ec:6.3.4.22 tRNAIle2-agmatinylcytidine synthase; TiaS; AF2259; tRNAIle-2-agmatinylcytidine synthetase; tRNAIle-agm2C synthetase; tRNAIle-agmatidine synthetase +ec:6.3.4.23 formate---phosphoribosylaminoimidazolecarboxamide ligase; 5-formaminoimidazole-4-carboxamide ribonucleotide synthetase; 5-formaminoimidazole-4-carboxamide-1-beta-D-ribofuranosyl 5'-monophosphate synthetase; purP (gene name) +ec:6.3.4.24 tyramine---L-glutamate ligase; mfnD (gene name) +ec:6.3.4.25 2-amino-2'-deoxyadenylo-succinate synthase; purZ (gene name) +ec:6.3.5.1 NAD+ synthase (glutamine-hydrolysing); NAD synthetase (glutamine-hydrolysing); nicotinamide adenine dinucleotide synthetase (glutamine); desamidonicotinamide adenine dinucleotide amidotransferase; DPN synthetase +ec:6.3.5.2 GMP synthase (glutamine-hydrolysing); GMP synthetase (glutamine-hydrolysing); guanylate synthetase (glutamine-hydrolyzing); guanosine monophosphate synthetase (glutamine-hydrolyzing); xanthosine 5'-phosphate amidotransferase; guanosine 5'-monophosphate synthetase +ec:6.3.5.3 phosphoribosylformylglycinamidine synthase; phosphoribosylformylglycinamidine synthetase; formylglycinamide ribonucleotide amidotransferase; phosphoribosylformylglycineamidine synthetase; FGAM synthetase; FGAR amidotransferase; 5'-phosphoribosylformylglycinamide:L-glutamine amido-ligase (ADP-forming); 2-N-formyl-1-N-(5-phospho-D-ribosyl)glycinamide:L-glutamine amido-ligase (ADP-forming) +ec:6.3.5.4 asparagine synthase (glutamine-hydrolysing); asparagine synthetase (glutamine-hydrolysing); glutamine-dependent asparagine synthetase; asparagine synthetase B; AS; AS-B +ec:6.3.5.5 carbamoyl-phosphate synthase (glutamine-hydrolysing); carbamoyl-phosphate synthetase (glutamine-hydrolysing); carbamyl phosphate synthetase (glutamine); carbamoylphosphate synthetase II; glutamine-dependent carbamyl phosphate synthetase; carbamoyl phosphate synthetase; CPS; carbon-dioxide:L-glutamine amido-ligase (ADP-forming, carbamate-phosphorylating); carA (gene name); carB (gene name); CAD (gene name); hydrogen-carbonate:L-glutamine amido-ligase (ADP-forming, carbamate-phosphorylating) +ec:6.3.5.6 asparaginyl-tRNA synthase (glutamine-hydrolysing); Asp-AdT; Asp-tRNAAsn amidotransferase; aspartyl-tRNAAsn amidotransferase; Asn-tRNAAsn:L-glutamine amido-ligase (ADP-forming); aspartyl-tRNAAsn:L-glutamine amido-ligase (ADP-forming); GatCAB +ec:6.3.5.7 glutaminyl-tRNA synthase (glutamine-hydrolysing); Glu-AdT; Glu-tRNAGln amidotransferase; glutamyl-tRNAGln amidotransferase; Glu-tRNAGln:L-glutamine amido-ligase (ADP-forming); GatCAB; GatFAB; GatDE +ec:6.3.5.8 Transferred to 2.6.1.85 +ec:6.3.5.9 hydrogenobyrinic acid a,c-diamide synthase (glutamine-hydrolysing); CobB +ec:6.3.5.10 adenosylcobyric acid synthase (glutamine-hydrolysing); CobQ; cobyric acid synthase; 5'-deoxy-5'-adenosylcobyrinic-acid-a,c-diamide:L-glutamine amido-ligase; Ado-cobyric acid synthase [glutamine hydrolyzing] +ec:6.3.5.11 cobyrinate a,c-diamide synthase; cobyrinic acid a,c-diamide synthetase; CbiA +ec:6.3.5.12 Ni-sirohydrochlorin a,c-diamide synthase; cfbB (gene name) +ec:6.3.5.13 lipid II isoglutaminyl synthase (glutamine-hydrolysing); MurT/GatD; MurT/GatD complex +ec:6.4.1.1 pyruvate carboxylase; pyruvic carboxylase +ec:6.4.1.2 acetyl-CoA carboxylase; HFA1 (gene name); ACC1 (gene name); acetyl coenzyme A carboxylase; acetyl-CoA:carbon-dioxide ligase (ADP-forming) +ec:6.4.1.3 propionyl-CoA carboxylase; propionyl coenzyme A carboxylase +ec:6.4.1.4 methylcrotonoyl-CoA carboxylase; methylcrotonyl coenzyme A carboxylase; beta-methylcrotonyl coenzyme A carboxylase; beta-methylcrotonyl CoA carboxylase; methylcrotonyl-CoA carboxylase +ec:6.4.1.5 geranoyl-CoA carboxylase; geranoyl coenzyme A carboxylase; geranyl-CoA carboxylase +ec:6.4.1.6 acetone carboxylase +ec:6.4.1.7 2-oxoglutarate carboxylase; oxalosuccinate synthetase; carboxylating factor for ICDH (incorrect); CFI; OGC +ec:6.4.1.8 acetophenone carboxylase +ec:6.4.1.9 coenzyme F430 synthetase; cfbE (gene name) +ec:6.5.1.1 DNA ligase (ATP); polydeoxyribonucleotide synthase (ATP); polynucleotide ligase (ambiguous); sealase; DNA repair enzyme (ambiguous); DNA joinase (ambiguous); DNA ligase (ambiguous); deoxyribonucleic ligase (ambiguous); deoxyribonucleate ligase (ambiguous); DNA-joining enzyme (ambiguous); deoxyribonucleic-joining enzyme (ambiguous); deoxyribonucleic acid-joining enzyme (ambiguous); deoxyribonucleic repair enzyme (ambiguous); deoxyribonucleic joinase (ambiguous); deoxyribonucleic acid ligase (ambiguous); deoxyribonucleic acid joinase (ambiguous); deoxyribonucleic acid repair enzyme (ambiguous); poly(deoxyribonucleotide):poly(deoxyribonucleotide) ligase (AMP-forming) +ec:6.5.1.2 DNA ligase (NAD+); polydeoxyribonucleotide synthase (NAD+); polynucleotide ligase (NAD+); DNA repair enzyme (ambiguous); DNA joinase (ambiguous); polynucleotide synthetase (nicotinamide adenine dinucleotide); deoxyribonucleic-joining enzyme (ambiguous); deoxyribonucleic ligase (ambiguous); deoxyribonucleic repair enzyme (ambiguous); deoxyribonucleic joinase (ambiguous); DNA ligase (ambiguous); deoxyribonucleate ligase (ambiguous); polynucleotide ligase (ambiguous); deoxyribonucleic acid ligase (ambiguous); polynucleotide synthetase (ambiguous); deoxyribonucleic acid joinase (ambiguous); DNA-joining enzyme (ambiguous); polynucleotide ligase (nicotinamide adenine dinucleotide); poly(deoxyribonucleotide):poly(deoxyribonucleotide) ligase (AMP-forming, NMN-forming) +ec:6.5.1.3 RNA ligase (ATP); polyribonucleotide synthase (ATP); RNA ligase; polyribonucleotide ligase; ribonucleic ligase; poly(ribonucleotide):poly(ribonucleotide) ligase (AMP-forming) +ec:6.5.1.4 RNA 3'-terminal-phosphate cyclase (ATP); rtcA (gene name); RNA cyclase (ambiguous); RNA-3'-phosphate cyclase (ambiguous) +ec:6.5.1.5 RNA 3'-terminal-phosphate cyclase (GTP); Pf-Rtc; RNA-3'-phosphate cyclase (GTP) +ec:6.5.1.6 DNA ligase (ATP or NAD+) +ec:6.5.1.7 DNA ligase (ATP, ADP or GTP); poly(deoxyribonucleotide):poly(deoxyribonucleotide) ligase (ATP, ADP or GTP) +ec:6.5.1.8 3'-phosphate/5'-hydroxy nucleic acid ligase; rtcB (gene name) +ec:6.5.1.9 cyclic 2,3-diphosphoglycerate synthase; cpgS (gene name) +ec:6.6.1.1 magnesium chelatase; protoporphyrin IX magnesium-chelatase; protoporphyrin IX Mg-chelatase; magnesium-protoporphyrin IX chelatase; magnesium-protoporphyrin chelatase; magnesium-chelatase; Mg-chelatase; Mg-protoporphyrin IX magnesio-lyase +ec:6.6.1.2 cobaltochelatase; hydrogenobyrinic acid a,c-diamide cobaltochelatase; CobNST; CobNCobST; hydrogenobyrinic-acid-a,c-diamide:cobalt cobalt-ligase (ADP-forming) +ec:6.7.1.1 3-amino-2-hydroxy-4-methoxybenzoate diazotase; creM (gene name) +ec:7.1.1.1 proton-translocating NAD(P)+ transhydrogenase; pntA (gene name); pntB (gene name); NNT (gene name) +ec:7.1.1.2 NADH:ubiquinone reductase (H+-translocating); ubiquinone reductase (ambiguous); type 1 dehydrogenase; complex 1 dehydrogenase; coenzyme Q reductase (ambiguous); complex I (electron transport chain); complex I (mitochondrial electron transport); complex I (NADH:Q1 oxidoreductase); dihydronicotinamide adenine dinucleotide-coenzyme Q reductase (ambiguous); DPNH-coenzyme Q reductase (ambiguous); DPNH-ubiquinone reductase (ambiguous); mitochondrial electron transport complex 1; mitochondrial electron transport complex I; NADH coenzyme Q1 reductase; NADH-coenzyme Q oxidoreductase (ambiguous); NADH-coenzyme Q reductase (ambiguous); NADH-CoQ oxidoreductase (ambiguous); NADH-dehydrogenase (ubiquinone) (ambiguous); NADH-CoQ reductase (ambiguous); NADH-ubiquinone reductase (ambiguous); NADH-ubiquinone oxidoreductase (ambiguous); NADH-ubiquinone-1 reductase; reduced nicotinamide adenine dinucleotide-coenzyme Q reductase (ambiguous); NADH:ubiquinone oxidoreductase complex; NADH-Q6 oxidoreductase (ambiguous); electron transfer complex I; NADH2 dehydrogenase (ubiquinone) +ec:7.1.1.3 ubiquinol oxidase (H+-transporting); cyoABCD (gene names); cytochrome bo3 oxidase; cytochrome bb3 oxidase; cytochrome bo oxidase; ubiquinol:O2 oxidoreductase (H+-transporting) +ec:7.1.1.4 caldariellaquinol oxidase (H+-transporting); SoxABCD quinol oxidase; SoxABCD complex; quinol oxidase SoxABCD; SoxM supercomplex; aa3-type quinol oxidase; aa3 quinol oxidase; cytochrome aa3; terminal quinol oxidase; terminal quinol:oxygen oxidoreductase; caldariella quinol:dioxygen oxidoreductase; cytochrome aa3-type oxidase; caldariellaquinol:O2 oxidoreductase (H+-transporting) +ec:7.1.1.5 menaquinol oxidase (H+-transporting); cytochrome aa3-600 oxidase; cytochrome bd oxidase; menaquinol:O2 oxidoreductase (H+-transporting) +ec:7.1.1.6 plastoquinol---plastocyanin reductase; plastoquinol/plastocyanin oxidoreductase; cytochrome f/b6 complex; cytochrome b6f complex +ec:7.1.1.7 quinol oxidase (electrogenic, proton-motive force generating); cydAB (gene names); appBC (gene names); cytochrome bd oxidase; cytochrome bd-I oxidase; cytochrome bd-II oxidase; ubiquinol:O2 oxidoreductase (electrogenic, non H+-transporting); ubiquinol oxidase (electrogenic, proton-motive force generating); ubiquinol oxidase (electrogenic, non H+-transporting) +ec:7.1.1.8 quinol---cytochrome-c reductase; ubiquinol---cytochrome-c reductase; coenzyme Q-cytochrome c reductase; dihydrocoenzyme Q-cytochrome c reductase; reduced ubiquinone-cytochrome c reductase; complex III (mitochondrial electron transport); ubiquinone-cytochrome c reductase; ubiquinol-cytochrome c oxidoreductase; reduced coenzyme Q-cytochrome c reductase; ubiquinone-cytochrome c oxidoreductase; reduced ubiquinone-cytochrome c oxidoreductase; mitochondrial electron transport complex III; ubiquinol-cytochrome c-2 oxidoreductase; ubiquinone-cytochrome b-c1 oxidoreductase; ubiquinol-cytochrome c2 reductase; ubiquinol-cytochrome c1 oxidoreductase; CoQH2-cytochrome c oxidoreductase; ubihydroquinol:cytochrome c oxidoreductase; coenzyme QH2-cytochrome c reductase; QH2:cytochrome c oxidoreductase; ubiquinol:ferricytochrome-c oxidoreductase +ec:7.1.1.9 cytochrome-c oxidase; cytochrome aa3; cytochrome caa3; cytochrome bb3; cytochrome cbb3; cytochrome ba3; cytochrome a3; Warburg's respiratory enzyme; indophenol oxidase; indophenolase; complex IV (mitochondrial electron transport); ferrocytochrome c oxidase; cytochrome oxidase (ambiguous); NADH cytochrome c oxidase (incorrect) +ec:7.1.1.10 ferredoxin---quinone oxidoreductase (H+-translocating); NDH-1L complex; NDH-1L' complex; NDH11 complex; NDH12 complex +ec:7.1.1.11 ferredoxin---NAD+ oxidoreductase (H+-transporting); Rnf complex (ambiguous); H+-translocating ferredoxin:NAD+ oxidoreductase +ec:7.1.1.12 succinate dehydrogenase (electrogenic, proton-motive force generating) +ec:7.1.2.1 P-type H+-exporting transporter; proton-translocating ATPase; yeast plasma membrane H+-ATPase; yeast plasma membrane ATPase; ATP phosphohydrolase (ambiguous); proton-exporting ATPase; proton transport ATPase; proton-translocating P-type ATPase; H+-transporting ATPase +ec:7.1.2.2 H+-transporting two-sector ATPase; ATP synthase; F1-ATPase; FoF1-ATPase; H+-transporting ATPase; mitochondrial ATPase; coupling factors (Fo, F1 and CF1); chloroplast ATPase; bacterial Ca2+/Mg2+ ATPase +ec:7.1.3.1 H+-exporting diphosphatase; H+-PPase; proton-pumping pyrophosphatase; vacuolar H+-pyrophosphatase; hydrogen-translocating pyrophosphatase; proton-pumping dihosphatase +ec:7.1.3.2 Na+-exporting diphosphatase; Na+-translocating membrane pyrophosphatase; sodium-translocating pyrophosphatase +ec:7.2.1.1 NADH:ubiquinone reductase (Na+-transporting); Na+-translocating NADH-quinone reductase; Na+-NQR +ec:7.2.1.2 ferredoxin---NAD+ oxidoreductase (Na+-transporting); Rnf complex (ambiguous); Na+-translocating ferredoxin:NAD+ oxidoreductase +ec:7.2.1.3 ascorbate ferrireductase (transmembrane); cytochrome b561 (ambiguous) +ec:7.2.2.1 Na+-transporting two-sector ATPase; sodium-transporting two-sector ATPase; Na+-translocating ATPase; Na+-translocating FoF1-ATPase; sodium ion specific ATP synthase +ec:7.2.2.2 ABC-type Cd2+ transporter; cadmium-transporting ATPase (ambiguous); ABC-type cadmium-transporter +ec:7.2.2.3 P-type Na+ transporter; Na+-exporting ATPase (ambiguous); ENA1 (gene name); ENA2 (gene name); ENA5 (gene name); sodium transport ATPase (ambiguous); sodium-translocating P-type ATPase +ec:7.2.2.4 ABC-type Na+ transporter; natAB (gene names) +ec:7.2.2.5 ABC-type Mn2+ transporter; ABC-type manganese permease complex; manganese-transporting ATPase (ambiguous); ABC-type manganese transporter +ec:7.2.2.6 P-type K+ transporter; K+-translocating Kdp-ATPase; multi-subunit K+-transport ATPase; K+-transporting ATPase; potassium-importing ATPase; K+-importing ATPase +ec:7.2.2.7 ABC-type Fe3+ transporter; Fe3+-transporting ATPase +ec:7.2.2.8 P-type Cu+ transporter; Cu+-exporting ATPase (ambiguous); copA (gene name); ATP7A (gene name); ATP7B (gene name) +ec:7.2.2.9 P-type Cu2+ transporter; Cu2+-exporting ATPase; copB (gene name) +ec:7.2.2.10 P-type Ca2+ transporter; sarcoplasmic reticulum ATPase; sarco(endo)plasmic reticulum Ca2+-ATPase; calcium pump; Ca2+-pumping ATPase; plasma membrane Ca-ATPase; Ca2+-transporting ATPaseP- +ec:7.2.2.11 ABC-type Ni2+ transporter; nickel ABC transporter; nickel-transporting ATPase; ABC-type nickel-transporter +ec:7.2.2.12 P-type Zn2+ transporter; Zn(II)-translocating P-type ATPase; Zn2+-exporting ATPase; P1B-type ATPase; HMA4 (gene name); zntA (gene name) +ec:7.2.2.13 Na+/K+-exchanging ATPase; (Na+ + K+)-activated ATPase; Na,K-activated ATPase; Na,K-pump; Na+,K+-ATPase; sodium/potassium-transporting ATPase; Na+/K+-exchanging ATPase +ec:7.2.2.14 P-type Mg2+ transporter; Mg2+-transporting P-type ATPase; Mg2+-transporting ATPase; Mg2+-importing ATPase; magnesium-translocating P-type ATPase; mgtA (gene name); mgtB (gene name) +ec:7.2.2.15 P-type Ag+ transporter; Ag+-exporting ATPase +ec:7.2.2.16 ABC-type ferric hydroxamate transporter; iron(III) hydroxamate transporting ATPase; iron(III) hydroxamate ABC transporter; fhuCDB (gene names) +ec:7.2.2.17 ABC-type ferric enterobactin transporter; ferric enterobactin transporting ATPase; ferric enterobactin ABC transporter; fepBCDG (gene names) +ec:7.2.2.18 ABC-type ferric citrate transporter; ferric citrate transporting ATPase; ferric citrate ABC transporter; fecBCDE (gene names) +ec:7.2.2.19 H+/K+-exchanging ATPase; H+-K+-ATPase; H,K-ATPase; (K+ + H+)-ATPase +ec:7.2.2.20 ABC-type Zn2+ transporter; Zn2+-transporting ATPase; Zn2+ ABC transporter; znuABC (gene names) +ec:7.2.2.21 Cd2+-exporting ATPase; cadmium-translocating P-type ATPase; cadmium-exporting ATPase +ec:7.2.2.22 P-type Mn2+ transporter; Mn(II)-translocating P-type ATPase; Mn2+-exporting ATPase; P1B-type ATPase (ambiguous); ctpC (gene name) +ec:7.2.4.1 carboxybiotin decarboxylase; MadB; carboxybiotin protein decarboxylase +ec:7.2.4.2 oxaloacetate decarboxylase (Na+ extruding); oxaloacetate beta-decarboxylase (ambiguous); oxalacetic acid decarboxylase (ambiguous); oxalate beta-decarboxylase (ambiguous); oxaloacetate carboxy-lyase (ambiguous) +ec:7.2.4.3 (S)-methylmalonyl-CoA decarboxylase (sodium-transporting); methylmalonyl-coenzyme A decarboxylase (ambiguous); (S)-2-methyl-3-oxopropanoyl-CoA carboxy-lyase (incorrect); (S)-methylmalonyl-CoA carboxy-lyase (ambiguous) +ec:7.2.4.4 biotin-dependent malonate decarboxylase; malonate decarboxylase (with biotin); malonate decarboxylase (ambiguous) +ec:7.2.4.5 glutaconyl-CoA decarboxylase; glutaconyl coenzyme A decarboxylase; pent-2-enoyl-CoA carboxy-lyase; 4-carboxybut-2-enoyl-CoA carboxy-lyase +ec:7.3.2.1 ABC-type phosphate transporter; phosphate ABC transporter; phosphate-transporting ATPase (ambiguous) +ec:7.3.2.2 ABC-type phosphonate transporter; phosphonate-transporting ATPase (ambiguous) +ec:7.3.2.3 ABC-type sulfate transporter; sulfate ABC transporter; sulfate-transporting ATPase (ambiguous) +ec:7.3.2.4 ABC-type nitrate transporter; nitrate-transporting ATPase (ambiguous) +ec:7.3.2.5 ABC-type molybdate transporter; molybdate ABC transporter; molybdate-transporting ATPase +ec:7.3.2.6 ABC-type tungstate transporter; tungstate transporter; tungstate-importing ATPase; tungstate-specific ABC transporter; WtpABC; TupABC +ec:7.3.2.7 arsenite-transporting ATPase; arsAB (gene names) +ec:7.4.2.1 ABC-type polar-amino-acid transporter; histidine permease; polar-amino-acid-transporting ATPase +ec:7.4.2.2 ABC-type nonpolar-amino-acid transporter; nonpolar-amino-acid-transporting ATPase +ec:7.4.2.3 mitochondrial protein-transporting ATPase +ec:7.4.2.4 chloroplast protein-transporting ATPase +ec:7.4.2.5 bacterial ABC-type protein transporter; PrtDEF (gene names); hasDEF (gene names); peptide-transporting ATPase (ambiguous) +ec:7.4.2.6 ABC-type oligopeptide transporter; oligopeptide permease; OppBCDF; oligopeptide ABC transporter; oligopeptide-transporting ATPase +ec:7.4.2.7 ABC-type alpha-factor-pheromone transporter; alpha-factor-transporting ATPase; alpha-factor-pheromone transporting ATPase +ec:7.4.2.8 protein-secreting ATPase +ec:7.4.2.9 ABC-type dipeptide transporter; dipeptide transporting ATPase; dipeptide ABC transporter; dppBCDF (gene names) +ec:7.4.2.10 ABC-type glutathione transporter; glutathione transporting ATPase; glutathione ABC transporter; gsiACD (gene names) +ec:7.4.2.11 ABC-type methionine transporter; methionine transporting ATPase; methionine ABC transporter; metNIQ (gene names) +ec:7.4.2.12 ABC-type cystine transporter; cystine transporting ATPase; cystine ABC transporter +ec:7.4.2.13 ABC-type tyrosine transporter +ec:7.4.2.14 ABC-type antigen peptide transporter; TAP1 (gene name); TAP2 (gene name) +ec:7.5.2.1 ABC-type maltose transporter; maltose ABC transporter; maltose-transporting ATPase +ec:7.5.2.2 ABC-type oligosaccharide transporter; oligosaccharide-transporting ATPase +ec:7.5.2.3 ABC-type beta-glucan transporter; beta-glucan-transporting ATPase +ec:7.5.2.4 ABC-type teichoic-acid transporter; teichoic-acid-transporting ATPase +ec:7.5.2.5 ABC-type lipopolysaccharide transporter; lptB (gene name); lipopolysaccharide transport system; lipopolysaccharide-transporting ATPase +ec:7.5.2.6 ABC-type lipid A-core oligosaccharide transporter; MsbA; lipid flippase; ATP-dependent lipid A-core flippase +ec:7.5.2.7 ABC-type D-ribose transporter; D-ribose transporting ATPase; D-ribose ABC transporter; rbsACB (gene names) +ec:7.5.2.8 ABC-type D-allose transporter; D-allose transporting ATPase; D-allose ABC transporter; alsBAC (gene names) +ec:7.5.2.9 ABC-type D-galactofuranose transporter; D-galactofuranose transporting ATPase; D-galactofuranose ABC transporter +ec:7.5.2.10 ABC-type D-xylose transporter; D-xylose transporting ATPase; D-xylose ABC transporter; xylFGH (gene names) +ec:7.5.2.11 ABC-type D-galactose transporter; D-galactose transporting ATPase; D-galactose ABC transporter; mglBAC (gene names) +ec:7.5.2.12 ABC-type L-arabinose transporter; L-arabinose transporting ATPase; L-arabinose ABC transporter; araFGH (gene names) +ec:7.5.2.13 ABC-type D-xylose/L-arabinose transporter +ec:7.6.2.1 P-type phospholipid transporter; Mg2+-ATPase (ambiguous); flippase (ambiguous); aminophospholipid-transporting ATPase (ambiguous); phospholipid-translocating ATPase (ambiguous); phospholipid-transporting ATPase (ambiguous) +ec:7.6.2.2 ABC-type xenobiotic transporter; xenobiotic-transporting ATPase; multidrug-resistance protein; MDR protein; P-glycoprotein; pleiotropic-drug-resistance protein; PDR protein; steroid-transporting ATPase; ATP phosphohydrolase (steroid-exporting) +ec:7.6.2.3 ABC-type glutathione-S-conjugate transporter; multidrug resistance-associated protein 1; glutathione-S-conjugate-translocating ATPase; MRP; MRP1; ABCC1 (gene name); YBT1 (gene name); YCF1 (gene name) +ec:7.6.2.4 ABC-type fatty-acyl-CoA transporter; fatty-acyl-CoA-transporting ATPase +ec:7.6.2.5 ABC-type heme transporter; heme-transporting ATPase +ec:7.6.2.6 ABC-type guanine transporter; guanine-transporting ATPase; white (gene name); brown (gene name) +ec:7.6.2.7 ABC-type taurine transporter; tauABC (gene names); taurine ABC transporter; taurine-transporting ATPase +ec:7.6.2.8 ABC-type vitamin B12 transporter; BtuCDF; vitamin B12 ABC transporter; vitamin B12-transporting ATPase +ec:7.6.2.9 ABC-type quaternary amine transporter; glycine betaine ABC transporter; ProVWX; quaternary-amine ABC transporter; quaternary-amine-transporting ATPase (ambiguous) +ec:7.6.2.10 ABC-type glycerol 3-phosphate transporter; glycerol-3-phosphate ABC transporter; glycerol-3-phosphate-transporting ATPase +ec:7.6.2.11 ABC-type polyamine transporter; polyamine ABC transporter; polyamine-transporting ATPase +ec:7.6.2.12 ABC-type capsular-polysaccharide transporter; capsular-polysaccharide-transporting ATPase +ec:7.6.2.13 ABC-type autoinducer-2 transporter; autoinducer-2 transporting ATPase; autoinducer-2 ABC transporter; LsrACDB (gene names) +ec:7.6.2.14 ABC-type aliphatic sulfonate transporter; aliphatic sulfonate transporting ATPase; alkane sulfonate ABC transporter; aliphatic sulfonate ABC transporter; ssuACB (gene names) +ec:7.6.2.15 ABC-type thiamine transporter; thiamin transporting ATPase; thiamine ABC transporter; thiamin ABC transporter; thiamine transporting ATPase; thiBPQ (gene names) +ec:7.6.2.16 ABC-type putrescine transporter; putrescine transporting ATPase; putrescine ABC transporter; potFGHI (gene names) diff --git a/utilities/ecs_entropy.py b/utilities/ecs_entropy.py new file mode 100644 index 0000000..282f842 --- /dev/null +++ b/utilities/ecs_entropy.py @@ -0,0 +1,190 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +#------------------------------ +# Name: ecs_entropy.py +# Purpose: Create an entropy based similarity (distance) matrix for EC numbers +# alignment. +# +# @uthor: acph - dragopoot@gmail.com +# +# Created: Aug 2017 +# Copyright: (c) acph 2017 +# Licence: GNU GENERAL PUBLIC LICENSE, Version 3, 29 June 2007 +#------------------------------ +"""Create an entropy based similarity (distance) matrix for EC alignment. +The similarity is calculated for the first 3 levels of EC classification""" + +import argparse +import numpy as np + + +def parser(): + """Command line argument parser""" + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('ecfile', + help="""KEGG EC numbers list. + This file can be downloaded with this link: + http://rest.kegg.jp/list/ec""") + parser.add_argument('-s', '--store-format', default='npz', + choices=['npz', 'txt'], metavar='npz|txt', + help='''Output file format. The default (npz) + format is as numpy binary file that can be used by + the ESS alignment program. txt option gets a tabular + separated text file''') + parser.add_argument('-p', '--plot', action='store_true', + help='''Plot the matrix in ent_matrix.png file''') + args = parser.parse_args() + return args + + +def load_ec_file(ecfile, ecl=3): + """Loads the EC numbers in the ecfile into a python list + + Keyword Arguments: + ecfile -- KEGG EC numbenrs list. + This file can be downloaded with this link: + http://rest.kegg.jp/list/ec + ecl -- Level of EC number classification. 2|[3]|4 . + Level of EC number classification to retrive. + """ + assert ecl in [2, 3, 4], "'ecl' must be int 2,3 or 4" + with open(ecfile) as inf: + ecs = [] + for line in inf: + ec = line.split()[0] + ec = ec.split(':')[1] + ecs.append(ec) + if ecl == 4: + ecs.sort() + return ecs + lecs = set([]) + for ec in ecs: + ec = ec.split('.')[:ecl] + ec = '.'.join(ec) + lecs.add(ec) + lecs = list(lecs) + lecs.sort() + return lecs + + +def _pair_entropy(ecs_pair): + """Calculates the entropy based similarity (distance) of a pair + of EC numbers. Returns the entropy (H) of the ec pair. + + DEPREACTED: This function does NOT reflect the hierarchy nature of + EC classification, use function pair_entropy_hierarchy() instead. + + Arguments: + - `ecs_pair`: a pair of EC numbers (tuple), EC3 (3 levels of clasification) + """ + f1, f2, f3 = 15., 10., 1. # factors to ponder the value of each level + ec1 = ecs_pair[0].split('.') + ec2 = ecs_pair[1].split('.') + entropies = [] + for i in range(len(ec1)): + if ec1[i] == ec2[i]: + entropies.append(0) # if both elements in the column are +# equal, H = 0 + else: + entropies.append(1) # if both elements in the column are +# dissimilar, H = 1 + # global normalized entropy of the ecs + H = (f1 * entropies[0] + f2 * entropies[1] + + f3 * entropies[2]) / (f1 + f2 + f3) + return H + + +def pair_entropy_hierarchy(ecs_pair): + """Calculates the entropy based similarity (distance) of a pair + of EC numbers.Returns the entropy (H) of the ec pair. This function + takes into account the hierarchy of EC classification. Therefore + if the first EC level do not coincide, the H=0, despite the coincidence + of the other levels. This is the prefered function to create the + EC similarity matrix. + + Arguments: + - `ecs_pair`: a pair of EC numbers (tuple), EC3 (3 levels of clasification) + """ + f1, f2, f3 = 15., 10., 1. + ec1 = ecs_pair[0].split('.') + ec2 = ecs_pair[1].split('.') + entropies = [] + if ec1[0] == ec2[0] and ec1[1] == ec2[1] and ec1[2] == ec2[2]: + entropies = [0, 0, 0] + elif ec1[0] == ec2[0] and ec1[1] == ec2[1]: + entropies = [0, 0, 1] + elif ec1[0] == ec2[0]: + entropies = [0, 1, 1] + else: + entropies = [1, 1, 1] + # global normalized entropy of the ecs + H = (f1 * entropies[0] + f2 * entropies[1] + + f3 * entropies[2]) / (f1 + f2 + f3) + return H + + +def build_entropy_matrix(ecs_list): + """Creates EC number entropy based similarity (distance) matrix from a + list of ec numbers. + + Arguments: + - `ecs_list`: List of no redundant ec numbers + """ + entropy = pair_entropy_hierarchy + num_ecs = len(ecs_list) + matrix = np.zeros((num_ecs, num_ecs)) + for i in range(num_ecs): + for j in range(num_ecs): + if i == j: + matrix[i, j] = 0 + break + ecs_pair = (ecs_list[i], ecs_list[j]) + H = entropy(ecs_pair) + matrix[i, j] = H + matrix[j, i] = H + return matrix + + +def save_matrix(sub_matrix, ecs_list, filename, format='npz'): + """Saves de similarity matrix into a file + + Arguments: + - `sub_matrix`: EC entropy based substitution matrix + - `ecs_list`: List of EC numbers included in the matrix, + index referenced un the matrix + - `filename`: Name of file to store matrix + - `format`: [npz] save to numpy binary file. txt: save + to text file, tabular separated + """ + assert format in ['npz', 'txt'], 'format= must be npz or txt' + if format == 'npz': + fname = filename + '.' + format + np.savez(fname, matrix=sub_matrix, ecs=ecs_list) + elif format == 'txt': + header = '\t'.join(ecs_list) + fname = filename + '.' + format + np.savetxt(fname, sub_matrix, fmt='%.5f', + header=header, delimiter='\t') + + +def main(): + args = parser() + print('Loading EC file...') + ecs = load_ec_file(args.ecfile, ecl=3) + ecs.append('9.9.9') # Add 9.9.9 fake EC number + print('Building matrix') + mat = build_entropy_matrix(ecs) + fname = 'h_ent_mat' + save_matrix(mat, ecs, fname, format=args.store_format) + if args.plot: + import matplotlib.pyplot as plt + plt.matshow(mat) + plt.colorbar(label='Entropy') + plt.savefig('ent_matrix.png', dpi=200) + plt.close() + print('Done!!! have a nice day =)') + + +if __name__ == '__main__': + main() diff --git a/utilities/ent_matrix.png b/utilities/ent_matrix.png new file mode 100644 index 0000000..2c0a5e9 Binary files /dev/null and b/utilities/ent_matrix.png differ diff --git a/utilities/get_align.py b/utilities/get_align.py new file mode 100644 index 0000000..2a4a1a7 --- /dev/null +++ b/utilities/get_align.py @@ -0,0 +1,47 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# ------------------------------ +# Name: +# Purpose: +# +# @uthor: acph - dragopoot@gmail.com +# +# Created: +# Copyright: (c) acph 2016 +# Licence: GNU GENERAL PUBLIC LICENSE, Version 3, 29 June 2007 +# ------------------------------ +"""DON't use Old utility script for recreating alignments for a list of EC ids and socores""" + +outf = open('alignments_localize.txt', 'w') + +for i, j, s in res: + ess1 = glyimp[0][i-1] + j_ = nrseq[1].index(str(j)) + ess2 = nrseq[0][j_] + ea1, ea2, s = alignESS.nwx.NW(hmat, decs, + ess1, ess2, + localize=True, strfmt=True) + ali = (f'{i}\t{ea1}\n' + f'{j}\t{ea2}\n' + f'score: {s}\n///\n\n') + outf.write(ali) + +outf.close() + + +outf = open('alignments_complete.txt', 'w') + +for i, j, s in res: + ess1 = glyimp[0][i-1] + j_ = nrseq[1].index(str(j)) + ess2 = nrseq[0][j_] + ea1, ea2, s = alignESS.nwx.NW(hmat, decs, + ess1, ess2, + localize=False, strfmt=True) + ali = (f'{i}\t{ea1}\n' + f'{j}\t{ea2}\n' + f'score: {s}\n///\n\n') + outf.write(ali) + +outf.close() diff --git a/utilities/h_ent_mat.npz b/utilities/h_ent_mat.npz new file mode 100644 index 0000000..4645b36 Binary files /dev/null and b/utilities/h_ent_mat.npz differ diff --git a/utilities/nw_ec_align.py b/utilities/nw_ec_align.py new file mode 100644 index 0000000..84711de --- /dev/null +++ b/utilities/nw_ec_align.py @@ -0,0 +1,572 @@ +#!/usr/bin/python +# +# @uthor: acph (dragopoot@gmail.com) +# + +"""LEGACY!!!! +- This file is no more developed +- Maintainded only for testing purposes +- New speed enhanced functions are in cython nw_ec_alignx.pyximport +- New api in alignESS.py + +Program to align a pair of enzimatic step sequences using an implementation of the Needleman-Wuncsh +dynamic programing algorithm """ + +import argparse +from numpy import zeros, arange, random, sign, mean, ones, load, uint16, array +import numpy as np +import re + + +# Load matrices +fol = __file__.split('/') +if len(fol) == 1: + fol = '.' +else: + fol = '/'.join(fol[:-1]) +#mat = load(fol + '/entropy_matrix.npz') +#mat = mat['matrix'] +# matfile = 'h_ent_mat.npz' # ecs_entropy.py generated file +#hmat = load(fol + '/entropy_matrix_hierarchy.npz') +hmat = load(fol + '/h_ent_mat.npz') +ecs = hmat['ecs'] +hmat = hmat['matrix'] +lecs = list(ecs) +decs = {} +for i, v in enumerate(lecs): + decs[v] = i + +# -- End load matrices + + +def scoring(mat, alp, seq1, seq2, gap=1, fhomo=0.95, fpengap=0.05, local=False): + """ This function evaluates an enzymatic step sequences pair alignment. The sequences need to be aligned. This function tries to recall the fitness function in Ortegon-Cano, 2011. + + Arguments: + - `mat`: score matrix + - `alp`: alphabet, index of score matrix + - `s1`: enzimatic step sequence 1, ':' delimited + - `s2`: enzimatic step sequence 2, ':' delimited + - `gap`: gap penalization + - `fhomo`: Weight factor to multiplicate the homogeneity fraction of score + - `fpengap`: Weight factor to multiplicate the gap penalization + - `local`: If True, evaluates the score in a local fassion, rather than global, i.e. eliminates from the alignment the initial and final gaps of the shortest sequence and the respective positions in the largest sequence. + """ + s1 = seq1.strip(' :\n\r') + s2 = seq2.strip(' :\n\r') + s1 = s1.split(":") + s2 = s2.split(":") + assert len(s1) == len( + s2), 'The sequences aligned must be of the same length' + + # -- Mean column homogeneity evaluation + if local: + length = len(s1) + ii = 0 + for i in range(length): + if s1[i] != '-.-.-' and s2[i] != '-.-.-': + ii = i # initial index + break + fi = length + for i in range(length)[::-1]: + if s1[i] != '-.-.-' and s2[i] != '-.-.-': + break + fi = i # final index + # trimming the sequences + s1 = s1[ii:fi] + s2 = s2[ii:fi] + + length = len(s1) # Alignment length + homo_col = [] + for i in range(length): + if s1[i] == '-.-.-' or s2[i] == '-.-.-': # and s1[i] != s2[1] + homo_col.append(gap) + elif s1[i] == '...' or s2[i] == '...': + pass + elif s1[i] == '' or s2[i] == '': + pass + else: + x = alp.index(s1[i]) + y = alp.index(s2[i]) + homo_col.append(mat[x, y]) # pondered by 0.6 as in + + homo = mean(homo_col) + # -- Column increment penalization > here isnt necesary,isn't it? + # ls1 = len([s for s in s1 if s != '-.-.-']) + # ls2 = len([s for s in s2 if s != '-.-.-']) + # incpen = (length - max(ls1, ls2))/10. + # -- Gap penalization + seq1 = seq1.strip('.-:') # remove initial and final gaps + seq2 = seq2.strip('.-:') + gap = re.compile(r"(:-.-.-)+") # gap regex + + gaps = 0 # gap penalty value + for s in (seq1, seq2): + sgaps = [] # list of gap blocks + for g in gap.finditer(s): + g = g.group() + g_lenght = g.count("-.-.-") + sgaps.append(g_lenght) + if sgaps == []: + gaps += 0 + else: + gaps += float(len(sgaps)) / sum(sgaps) # num of gap blocks / +# num of independent blocks per sequence + pengap = gaps / 2 # mean , between number of sequences + + # Final score calculation + score = (homo * fhomo) + (pengap * fpengap) # + incpen + return score + + +def diagonal_list(l1, l2): + """Creates a list of diagonals in a matrix. Index begin = 1. Used to + facilitate the calculation of the scoring and arrow matrices. + + Arguments: + - `l1`: lenght of sequence 1 + - `l2`: lenght of sequence 2 + """ + dlist = [] + for i in range(l1 + l2 - 1): + st1 = min(i + 1, l1) + sp1 = max(1, i - l2 + 2) + st2 = max(1, i - l1 + 2) + sp2 = min(i + 1, l2) + # print st1,sp1,st2,sp2 + dlist.append((arange(st1, sp1 - 1, -1), arange(st2, sp2 + 1))) + return dlist + + +def _diagonal_list(l1, l2): + """Creates a list of diagonals in a matrix. Index begin = 1. Used to + facilitate the calculation of the scoring and arrow matrices. + + Generator version + + Arguments: + - `l1`: lenght of sequence 1 + - `l2`: lenght of sequence 2 + """ + for i in range(l1 + l2 - 1): + st1 = min(i + 1, l1) + sp1 = max(1, i - l2 + 2) + st2 = max(1, i - l1 + 2) + sp2 = min(i + 1, l2) + # print st1,sp1,st2,sp2 + yield (arange(st1, sp1 - 1, -1), arange(st2, sp2 + 1)) + + +def FastSubValues(mat, alp, s1, s2): + """Creates a matrix with the same dimentions of scoring matrix and arrow matrix that contains the precomputed values of the alignment of each comparation in both sequences. + + Arguments: + - `mat`: substitution matrix + - `alp`: alphabeth list, index of the subvalue matrix + - `s1`: enzimatic step sequence 1, ':' delimited + - `s2`: enzimatic step sequence 2, ':' delimited + """ + s1 = s1.strip(': \n\r') + s2 = s2.strip(': \n\r') + s1 = s1.split(':') + s2 = s2.split(':') +# alp = tuple(alp) + l1, l2 = len(s1), len(s2) + subvals = zeros((l1 + 1, l2 + 1)) # substitution values matrix + # Convert the sequences to sequences of index + si1 = zeros(l1, int) + si2 = zeros(l2, int) + for i in range(l1): + si1[i] = alp.index(s1[i]) + for i in range(l2): + si2[i] = alp.index(s2[i]) + # Fills subvalue matrix, this initiates in the position (1,1) + # similar, to scoring and arrow matrices + for i in range(1, l1 + 1): + subvals[i, 1:] = mat[[si1[i - 1]] * l2, si2] + return subvals + + +def _FastSubValues(mat, alp, s1, s2): + """Creates a matrix with the same dimentions of scoring matrix and arrow matrix that contains the precomputed values of the alignment of each comparation in both sequences. + + Arguments: + - `mat`: substitution matrix + - `alp`: alphabeth list, index of the subvalue matrix + - `s1`: list, enzimatic step sequence 1 + - `s2`: list, enzimatic step sequence 2 + """ + l1, l2 = len(s1), len(s2) + subvals = np.zeros((l1 + 1, l2 + 1)) # substitution values matrix + # Convert the sequences to sequences of index + si2 = np.zeros(l2, int) + for i in range(l2): + si2[i] = alp.index(s2[i]) + # Fills subvalue matrix, this initiates in the position (1,1) + # similar, to scoring and arrow matrices + for i in range(1, l1 + 1): + si = i - 1 + subvals[i, 1:] = mat[alp.index(s1[si]), si2] + return subvals + + +def __FastSubValues(mat, alp, s1, s2): + """Creates a matrix with the same dimentions of scoring matrix and arrow matrix that contains the precomputed values of the alignment of each comparation in both sequences. + + Arguments: + - `mat`: substitution matrix + - `alp`: alphabeth dictionary, keys are elements, values are indices + in substitution mat. + - `s1`: list, enzimatic step sequence 1 + - `s2`: list, enzimatic step sequence 2 + """ + l1, l2 = len(s1), len(s2) + subvals = np.zeros((l1 + 1, l2 + 1)) # substitution values matrix + # Convert the sequences to sequences of index + si2 = [alp[ec] for ec in s2] + # Fills subvalue matrix, this initiates in the position (1,1) + # similar, to scoring and arrow matrices + for i in range(1, l1 + 1): + si = i - 1 + subvals[i, 1:] = mat[alp[s1[si]], si2] + return subvals + + +def FastNW(subvals, s1, s2, gap=0.9): + """Perform dynamic programing alignment of EC numbers sequences. Creates the scoring and arrow matrices using subvals matrix and diagonal arrays. + + Returns the dynamic programing matrix and the arrow matrix used to trace back the alignment. + + Arguments: + - `subvals`: matrix of precomputed values for the alignment of each pair of characters + - `s1`: enzymatic step sequence 1, ':' delimited + - `s2`: enzymatic step sequence 2, ':' delimited + - `gap`: gap penalties, default = 1 + """ + s1 = s1.strip(': \n\r') + s2 = s2.strip(': \n\r') + s1 = s1.split(':') + s2 = s2.split(':') + l1, l2 = len(s1), len(s2) + # Create the score and aroow matrices + scoremat = zeros((l1 + 1, l2 + 1)) + arrow = zeros((l1 + 1, l2 + 1)) + # Create first row and first column with gaps + scoremat[0] = arange(l2 + 1) * gap + scoremat[:, 0] = arange(l1 + 1) * gap + arrow[0] = ones(l2 + 1) + # Compute diagonal list + dlist = diagonal_list(l1, l2) + # fill the matrix + for i in dlist: + li = len(i[0]) + f = zeros((3, li)) # results of the tree posibles xhoices +# for each value in the diagonal + x, y = i[0], i[1] + f[0] = scoremat[x - 1, y] + gap + f[1] = scoremat[x, y - 1] + gap + f[2] = scoremat[x - 1, y - 1] + subvals[i] + f -= 0.001 * sign(f) * random.ranf(f.shape) # for randomly +# select from a tie + mini = f.min(0) + minpos = f.argmin(0) + scoremat[i] = mini + arrow[i] = minpos + return scoremat, arrow, mini + + +def _FastNW(subvals, s1, s2, gap=0.9): + """Perform dynamic programing alignment of EC numbers sequences. Creates the scoring and arrow matrices using subvals matrix and diagonal arrays. + + Returns the dynamic programing matrix and the arrow matrix used to trace back the alignment. + + Arguments: + - `subvals`: matrix of precomputed values for the alignment of each pair of characters + - `s1`: list, enzymatic step sequence 1 + - `s2`: list, enzymatic step sequence 2 + - `gap`: gap penalties, default = 1 + """ + l1, l2 = len(s1), len(s2) + # Create the score and aroow matrices + scoremat = zeros((l1 + 1, l2 + 1)) + arrow = zeros((l1 + 1, l2 + 1)) + # Create first row and first column with gaps + scoremat[0] = arange(l2 + 1) * gap + scoremat[:, 0] = arange(l1 + 1) * gap + arrow[0] = ones(l2 + 1) + # Compute diagonal list + dlist = _diagonal_list(l1, l2) + # fill the matrix + for i in dlist: + li = len(i[0]) + f = zeros((3, li)) # results of the tree posibles xhoices +# for each value in the diagonal + x = i[0] + y = i[1] + f[0] = scoremat[x - 1, y] + gap + f[1] = scoremat[x, y - 1] + gap + f[2] = scoremat[x - 1, y - 1] + subvals[i] + f -= 0.001 * sign(f) * random.ranf(f.shape) # for randomly +# select from a tie + mini = f.min(0) + minpos = f.argmin(0) + scoremat[i] = mini + arrow[i] = minpos + return scoremat, arrow, mini + + +def backtrace(arrow, s1, s2): + """Reads the arrow matrix and return the aligned sequences. Global, N-W + + Arguments: + - `arrow`: arrow matrix generated by dynamic programing + - `s1`: enzymatic step sequence, ':' delimited + - `s2`: enzymatic step sequence, ':' delimited + """ + # Transform the sequences strings into EC numbers lists + s1 = s1.strip(': \n\r') + s2 = s2.strip(': \n\r') + s1 = s1.split(':') + s2 = s2.split(':') + st1, st2 = [], [] # aligned sequences + ok = True + v, h = arrow.shape + v -= 1 + h -= 1 + while ok: + if arrow[v, h] == 0: # vertical best result, s1 + st1.append(s1[v - 1]) + st2.append('-.-.-') + v -= 1 + elif arrow[v, h] == 1: # horizontal best result, s2 + st1.append('-.-.-') + st2.append(s2[h - 1]) + h -= 1 + elif arrow[v, h] == 2: # diagonal best result, s1,s2 aligned + st1.append(s1[v - 1]) + st2.append(s2[h - 1]) + v -= 1 + h -= 1 + if v == 0 and h == 0: + ok = False + # reverse sequences + st1 = ':'.join(st1[::-1]) + st2 = ':'.join(st2[::-1]) + return st1, st2 + + +def NW(mat, ecs, s1, s2, gap=0.9, local=False, localize=False, nws=False): + """ + NW alignment function. Creates a pairwise alignment using a Needelman-Wunsh algorithm. + + Arguments: + - `mat`: EC number (3 levels) substitution matrix + - `ecs`: List of ec numbers that represent the labels of the matrix + - `s1`: EC numbers sequence 1, : delimited + - `s2`: EC numbers sequence 2, : delimited + - `gap`: gap penalty + - `local`: if local = True, then the score of the alignment is calculated + localy, i.e. only en the part of the alignment covered by the + shortest sequence + - `localize`: if localize = True, then, the function returns only the + fragment of the alignment covered by the shortest sequence + - `nws`: if true, the function returns the scores as is returned by the + NW algorithm + """ + submat = FastSubValues(mat, ecs, s1, s2) # create sub score matrix + sco, arr, mini = FastNW(submat, s1, s2, gap=gap) # create score and +# arrow matrices + s1, s2 = backtrace(arr, s1, s2) # backtrace alingment + # scoring : the scoring is doing using the entropy schema to + # normalize the score in a range 0 to 1 and to generate similar + # results to the genetic algorithm + if nws: # NW score + if localize: + s1 = s1.split(':') + s2 = s2.split(':') + length = len(s1) + ii = 0 + for i in range(length): + if s1[i] != '-.-.-' and s2[i] != '-.-.-': + ii = i # initial index + break + fi = length + for i in range(length)[::-1]: + if s1[i] != '-.-.-' and s2[i] != '-.-.-': + break + fi = i # final index + + s1 = s1[ii:fi] + s2 = s2[ii:fi] + s1 = ':'.join(s1) + s2 = ':'.join(s2) + return s1, s2, mini[0] + scoring_gap = 1 + score = scoring(mat, ecs, s1, s2, gap=scoring_gap, local=local) + if localize: + s1 = s1.split(':') + s2 = s2.split(':') + length = len(s1) + ii = 0 + for i in range(length): + if s1[i] != '-.-.-' and s2[i] != '-.-.-': + ii = i # initial index + break + fi = length + for i in range(length)[::-1]: + if s1[i] != '-.-.-' and s2[i] != '-.-.-': + break + fi = i # final index + + s1 = s1[ii:fi] + s2 = s2[ii:fi] + s1 = ':'.join(s1) + s2 = ':'.join(s2) + return s1, s2, score + + +################ +# # - # +# # --- legacy # +# # - # +################ + +def scoring_l(mat, alp, seq1, seq2, gap=1, fhomo=0.95, fpengap=0.05): + """ This function evaluates an enzymatic step sequences pair alignment. The sequences need to be aligned. This function tries to recall the fitness function in Ortegon-Cano, 2011. LEGACY + + Arguments: + - `mat`: score matrix + - `alp`: alphabeth, index of score matrix + - `s1`: enzimatic step sequence 1, ':' delimited + - `s2`: enzimatic step sequence 2, ':' delimited + - `gap`: gap penalization + - `fhomo`: Weight factor to multiplicate the homogeneity fraction of score + - `fpengap`: Weight factor to multiplicate the gap penalization + """ + s1 = seq1.strip(' :\n') + s2 = seq2.strip(' :\n') + s1 = s1.split(":") + s2 = s2.split(":") + assert len(s1) == len( + s2), 'The sequences aligned must be of the same length' + + length = len(s1) # Alignment length + + # -- Mean column homogeneity evaluation + homo_col = [] + for i in range(length): + if s1[i] == '-.-.-' or s2[i] == '-.-.-': # and s1[i] != s2[1]: + homo_col.append(gap) + elif s1[i] == '...' or s2[i] == '...': + pass + elif s1[i] == '' or s2[i] == '': + pass + else: + x = alp.index(s1[i]) + y = alp.index(s2[i]) + homo_col.append(mat[x, y]) # pondered by 0.6 as in +# Ortegon-Cano 2011.This value is taken from the multiple alignment AG + homo = mean(homo_col) + + # -- Column increment penalization > here isnt necesary + + # -- Gap penalization + seq1 = seq1.strip('.-:') # remove initial and final gaps + seq2 = seq2.strip('.-:') + gap = re.compile(r"(:-.-.-)+") # gap regex + + # gaps = [] # count of gaps blocks, + # # lenght = number of blocks in alignment + # # sum = number of individual gaps in the alignment + # for seq in (seq1,seq2): + # for g in gap.finditer(seq): + # g = g.group() + # g_lenght = g.count("-.-.-") + # gaps.append(g_lenght) + # total_gaps = sum(gaps) + # total_blocks = len(gaps) + # pengap = float(total_gaps)/total_blocks/total_gaps + # #to minimize + # pengap = 1 - pengap + + # alt + gaps = 0 # gap penalty value + for s in (seq1, seq2): + sgaps = [] # list of gap blocks + for g in gap.finditer(s): + g = g.group() + g_lenght = g.count("-.-.-") + sgaps.append(g_lenght) + if sgaps == []: + gaps += 0 + else: + gaps += float(len(sgaps)) / sum(sgaps) # num of gap blocks / +# num of independent blocks per sequence + pengap = gaps / 2 # mean + + # Final score calculation + + score = (homo * fhomo) + (pengap * fpengap) + return score + + +def NW_l(mat, ecs, s1, s2, gap=0.9): + """ + NW alignment function. Creates a pairwise alignment using a Needelman-Wunsh algorithm. LEGACY + + Arguments: + - `mat`: EC number (3 levels) substitution matrix + - `ecs`: List of ec numbers that represent the labels of the matrix + - `s1`: EC numbers sequence 1, : delimited + - `s2`: EC numbers sequence 2, : delimited + - `gap`: gap penalty + """ + submat = FastSubValues(mat, ecs, s1, s2) # create sub score matrix + sco, arr, mini = FastNW(submat, s1, s2, gap=gap) # create score and +# arrow matrices + s1, s2 = backtrace(arr, s1, s2) # backtrace alingment + # scoring : the scoring is doing using the entropy schema to + # normalize the score in a range 0 to 1 and to generate similar + # results to the genetic algorithm + scoring_gap = 1 + score = scoring(mat, ecs, s1, s2, gap=scoring_gap) + return s1, s2, score # , mini # uncoment mini to show the score +# frome the scoring matrix + + +def arg_parser(): + parser = argparse.ArgumentParser( + description='Needleman-Wuncsh algorithm for alignment of ESS (Enzymatic Step Sequence)') + parser.add_argument( + 'ess1', type=str, help='Sequence of 3 levels EC numbers. Colon separated. (1.2.3:3.5.-:...:9.9.9)') + parser.add_argument( + 'ess2', type=str, help='Sequence of 3 levels EC numbers. Colon separated. (1.2.3:3.5.-:...:9.9.9)') + parser.add_argument('--gap', type=float, default=0.9, + help='Gap penalization (from 0 to 1). Default = 0.9') + args = parser.parse_args() + return args + + +################## +# Test sequences # +################## +s1 = '6.2.1:2.3.1:1.2.4:2.7.1:4.2.1:5.4.2:2.7.2:1.2.1:4.1.2:2.7.1:5.3.1:5.4.2:3.1.3' +s1_ = '2.3.1:1.2.4:2.7.1:5.4.2:2.7.2:1.2.1' +s2 = '1.2.4:2.3.1:2.3.3:4.1.1' +s3 = '6.3.3:6.3.4:5.4.99:6.3.2:4.3.2:2.4.2:3.2.2' +ss1 = s1.split(':') +ss1_ = s1_.split(':') +ss2 = s2.split(':') +ss3 = s3.split(':') + + +if __name__ == '__main__': + from sys import stdout + + args = arg_parser() + ecs = list(ecs) + result = NW(hmat, ecs, args.ess1, args.ess2, gap=args.gap) + + stdout.write('ess1:\t{}\n'.format(result[0])) + stdout.write('ess2:\t{}\n'.format(result[1])) + stdout.write('score = {}\n'.format(result[2])) diff --git a/utilities/nw_ec_alignx.c b/utilities/nw_ec_alignx.c new file mode 100644 index 0000000..67aaaab --- /dev/null +++ b/utilities/nw_ec_alignx.c @@ -0,0 +1,24683 @@ +/* Generated by Cython 3.0.11 */ + +/* BEGIN: Cython Metadata +{ + "distutils": { + "define_macros": [ + [ + "NPY_NO_DEPRECATED_API", + "NPY_1_7_API_VERSION" + ] + ], + "depends": [ + "/Users/nandini.gadhia/miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/_core/include/numpy/arrayobject.h", + "/Users/nandini.gadhia/miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/_core/include/numpy/arrayscalars.h", + "/Users/nandini.gadhia/miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/_core/include/numpy/ndarrayobject.h", + "/Users/nandini.gadhia/miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/_core/include/numpy/ndarraytypes.h", + "/Users/nandini.gadhia/miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/_core/include/numpy/ufuncobject.h" + ], + "include_dirs": [ + "/Users/nandini.gadhia/miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/_core/include" + ], + "name": "nw_ec_alignx", + "sources": [ + "nw_ec_alignx.pyx" + ] + }, + "module_name": "nw_ec_alignx" +} +END: Cython Metadata */ + +#ifndef PY_SSIZE_T_CLEAN +#define PY_SSIZE_T_CLEAN +#endif /* PY_SSIZE_T_CLEAN */ +#if defined(CYTHON_LIMITED_API) && 0 + #ifndef Py_LIMITED_API + #if CYTHON_LIMITED_API+0 > 0x03030000 + #define Py_LIMITED_API CYTHON_LIMITED_API + #else + #define Py_LIMITED_API 0x03030000 + #endif + #endif +#endif + +#include "Python.h" + + #if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyFloat_FromString(obj) PyFloat_FromString(obj) + #else + #define __Pyx_PyFloat_FromString(obj) PyFloat_FromString(obj, NULL) + #endif + + + #if PY_MAJOR_VERSION <= 2 + #define PyDict_GetItemWithError _PyDict_GetItemWithError + #endif + + + #if (PY_VERSION_HEX < 0x030700b1 || (CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM < 0x07030600)) && !defined(PyContextVar_Get) + #define PyContextVar_Get(var, d, v) ((d) ? ((void)(var), Py_INCREF(d), (v)[0] = (d), 0) : ((v)[0] = NULL, 0) ) + #endif + +#ifndef Py_PYTHON_H + #error Python headers needed to compile C extensions, please install development version of Python. +#elif PY_VERSION_HEX < 0x02070000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) + #error Cython requires Python 2.7+ or Python 3.3+. +#else +#if defined(CYTHON_LIMITED_API) && CYTHON_LIMITED_API +#define __PYX_EXTRA_ABI_MODULE_NAME "limited" +#else +#define __PYX_EXTRA_ABI_MODULE_NAME "" +#endif +#define CYTHON_ABI "3_0_11" __PYX_EXTRA_ABI_MODULE_NAME +#define __PYX_ABI_MODULE_NAME "_cython_" CYTHON_ABI +#define __PYX_TYPE_MODULE_PREFIX __PYX_ABI_MODULE_NAME "." +#define CYTHON_HEX_VERSION 0x03000BF0 +#define CYTHON_FUTURE_DIVISION 1 +#include +#ifndef offsetof + #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) +#endif +#if !defined(_WIN32) && !defined(WIN32) && !defined(MS_WINDOWS) + #ifndef __stdcall + #define __stdcall + #endif + #ifndef __cdecl + #define __cdecl + #endif + #ifndef __fastcall + #define __fastcall + #endif +#endif +#ifndef DL_IMPORT + #define DL_IMPORT(t) t +#endif +#ifndef DL_EXPORT + #define DL_EXPORT(t) t +#endif +#define __PYX_COMMA , +#ifndef HAVE_LONG_LONG + #define HAVE_LONG_LONG +#endif +#ifndef PY_LONG_LONG + #define PY_LONG_LONG LONG_LONG +#endif +#ifndef Py_HUGE_VAL + #define Py_HUGE_VAL HUGE_VAL +#endif +#define __PYX_LIMITED_VERSION_HEX PY_VERSION_HEX +#if defined(GRAALVM_PYTHON) + /* For very preliminary testing purposes. Most variables are set the same as PyPy. + The existence of this section does not imply that anything works or is even tested */ + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 1 + #define CYTHON_COMPILING_IN_NOGIL 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3) + #endif + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 +#elif defined(PYPY_VERSION) + #define CYTHON_COMPILING_IN_PYPY 1 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3) + #endif + #if PY_VERSION_HEX < 0x03090000 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT) + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #endif + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1 && PYPY_VERSION_NUM >= 0x07030C00) + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 +#elif defined(CYTHON_LIMITED_API) + #ifdef Py_LIMITED_API + #undef __PYX_LIMITED_VERSION_HEX + #define __PYX_LIMITED_VERSION_HEX Py_LIMITED_API + #endif + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 1 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 + #undef CYTHON_CLINE_IN_TRACEBACK + #define CYTHON_CLINE_IN_TRACEBACK 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 1 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #endif + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 1 + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #endif + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 +#elif defined(Py_GIL_DISABLED) || defined(Py_NOGIL) + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 1 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #ifndef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #ifndef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #ifndef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 1 + #endif + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif + #ifndef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #endif + #ifndef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #endif + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 1 + #endif + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 + #endif + #ifndef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 + #endif +#else + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 1 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif + #ifndef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 1 + #endif + #if PY_MAJOR_VERSION < 3 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #ifndef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 1 + #endif + #ifndef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 1 + #endif + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #if PY_VERSION_HEX < 0x030300F0 || PY_VERSION_HEX >= 0x030B00A2 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #elif !defined(CYTHON_USE_UNICODE_WRITER) + #define CYTHON_USE_UNICODE_WRITER 1 + #endif + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #ifndef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 1 + #endif + #ifndef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL (PY_MAJOR_VERSION < 3 || PY_VERSION_HEX >= 0x03060000 && PY_VERSION_HEX < 0x030C00A6) + #endif + #ifndef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL (PY_VERSION_HEX >= 0x030700A1) + #endif + #ifndef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 1 + #endif + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT) + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #endif + #ifndef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #endif + #if PY_VERSION_HEX < 0x030400a1 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #elif !defined(CYTHON_USE_TP_FINALIZE) + #define CYTHON_USE_TP_FINALIZE 1 + #endif + #if PY_VERSION_HEX < 0x030600B1 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #elif !defined(CYTHON_USE_DICT_VERSIONS) + #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX < 0x030C00A5) + #endif + #if PY_VERSION_HEX < 0x030700A3 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #elif !defined(CYTHON_USE_EXC_INFO_STACK) + #define CYTHON_USE_EXC_INFO_STACK 1 + #endif + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 + #endif + #ifndef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 1 + #endif +#endif +#if !defined(CYTHON_FAST_PYCCALL) +#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) +#endif +#if !defined(CYTHON_VECTORCALL) +#define CYTHON_VECTORCALL (CYTHON_FAST_PYCCALL && PY_VERSION_HEX >= 0x030800B1) +#endif +#define CYTHON_BACKPORT_VECTORCALL (CYTHON_METH_FASTCALL && PY_VERSION_HEX < 0x030800B1) +#if CYTHON_USE_PYLONG_INTERNALS + #if PY_MAJOR_VERSION < 3 + #include "longintrepr.h" + #endif + #undef SHIFT + #undef BASE + #undef MASK + #ifdef SIZEOF_VOID_P + enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) }; + #endif +#endif +#ifndef __has_attribute + #define __has_attribute(x) 0 +#endif +#ifndef __has_cpp_attribute + #define __has_cpp_attribute(x) 0 +#endif +#ifndef CYTHON_RESTRICT + #if defined(__GNUC__) + #define CYTHON_RESTRICT __restrict__ + #elif defined(_MSC_VER) && _MSC_VER >= 1400 + #define CYTHON_RESTRICT __restrict + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_RESTRICT restrict + #else + #define CYTHON_RESTRICT + #endif +#endif +#ifndef CYTHON_UNUSED + #if defined(__cplusplus) + /* for clang __has_cpp_attribute(maybe_unused) is true even before C++17 + * but leads to warnings with -pedantic, since it is a C++17 feature */ + #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) + #if __has_cpp_attribute(maybe_unused) + #define CYTHON_UNUSED [[maybe_unused]] + #endif + #endif + #endif +#endif +#ifndef CYTHON_UNUSED +# if defined(__GNUC__) +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +#endif +#ifndef CYTHON_UNUSED_VAR +# if defined(__cplusplus) + template void CYTHON_UNUSED_VAR( const T& ) { } +# else +# define CYTHON_UNUSED_VAR(x) (void)(x) +# endif +#endif +#ifndef CYTHON_MAYBE_UNUSED_VAR + #define CYTHON_MAYBE_UNUSED_VAR(x) CYTHON_UNUSED_VAR(x) +#endif +#ifndef CYTHON_NCP_UNUSED +# if CYTHON_COMPILING_IN_CPYTHON +# define CYTHON_NCP_UNUSED +# else +# define CYTHON_NCP_UNUSED CYTHON_UNUSED +# endif +#endif +#ifndef CYTHON_USE_CPP_STD_MOVE + #if defined(__cplusplus) && (\ + __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1600)) + #define CYTHON_USE_CPP_STD_MOVE 1 + #else + #define CYTHON_USE_CPP_STD_MOVE 0 + #endif +#endif +#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None) +#ifdef _MSC_VER + #ifndef _MSC_STDINT_H_ + #if _MSC_VER < 1300 + typedef unsigned char uint8_t; + typedef unsigned short uint16_t; + typedef unsigned int uint32_t; + #else + typedef unsigned __int8 uint8_t; + typedef unsigned __int16 uint16_t; + typedef unsigned __int32 uint32_t; + #endif + #endif + #if _MSC_VER < 1300 + #ifdef _WIN64 + typedef unsigned long long __pyx_uintptr_t; + #else + typedef unsigned int __pyx_uintptr_t; + #endif + #else + #ifdef _WIN64 + typedef unsigned __int64 __pyx_uintptr_t; + #else + typedef unsigned __int32 __pyx_uintptr_t; + #endif + #endif +#else + #include + typedef uintptr_t __pyx_uintptr_t; +#endif +#ifndef CYTHON_FALLTHROUGH + #if defined(__cplusplus) + /* for clang __has_cpp_attribute(fallthrough) is true even before C++17 + * but leads to warnings with -pedantic, since it is a C++17 feature */ + #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) + #if __has_cpp_attribute(fallthrough) + #define CYTHON_FALLTHROUGH [[fallthrough]] + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_cpp_attribute(clang::fallthrough) + #define CYTHON_FALLTHROUGH [[clang::fallthrough]] + #elif __has_cpp_attribute(gnu::fallthrough) + #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] + #endif + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_attribute(fallthrough) + #define CYTHON_FALLTHROUGH __attribute__((fallthrough)) + #else + #define CYTHON_FALLTHROUGH + #endif + #endif + #if defined(__clang__) && defined(__apple_build_version__) + #if __apple_build_version__ < 7000000 + #undef CYTHON_FALLTHROUGH + #define CYTHON_FALLTHROUGH + #endif + #endif +#endif +#ifdef __cplusplus + template + struct __PYX_IS_UNSIGNED_IMPL {static const bool value = T(0) < T(-1);}; + #define __PYX_IS_UNSIGNED(type) (__PYX_IS_UNSIGNED_IMPL::value) +#else + #define __PYX_IS_UNSIGNED(type) (((type)-1) > 0) +#endif +#if CYTHON_COMPILING_IN_PYPY == 1 + #define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x030A0000) +#else + #define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000) +#endif +#define __PYX_REINTERPRET_FUNCION(func_pointer, other_pointer) ((func_pointer)(void(*)(void))(other_pointer)) + +#ifndef CYTHON_INLINE + #if defined(__clang__) + #define CYTHON_INLINE __inline__ __attribute__ ((__unused__)) + #elif defined(__GNUC__) + #define CYTHON_INLINE __inline__ + #elif defined(_MSC_VER) + #define CYTHON_INLINE __inline + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_INLINE inline + #else + #define CYTHON_INLINE + #endif +#endif + +#define __PYX_BUILD_PY_SSIZE_T "n" +#define CYTHON_FORMAT_SSIZE_T "z" +#if PY_MAJOR_VERSION < 3 + #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" + #define __Pyx_DefaultClassType PyClass_Type + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#else + #define __Pyx_BUILTIN_MODULE_NAME "builtins" + #define __Pyx_DefaultClassType PyType_Type +#if CYTHON_COMPILING_IN_LIMITED_API + static CYTHON_INLINE PyObject* __Pyx_PyCode_New(int a, int p, int k, int l, int s, int f, + PyObject *code, PyObject *c, PyObject* n, PyObject *v, + PyObject *fv, PyObject *cell, PyObject* fn, + PyObject *name, int fline, PyObject *lnos) { + PyObject *exception_table = NULL; + PyObject *types_module=NULL, *code_type=NULL, *result=NULL; + #if __PYX_LIMITED_VERSION_HEX < 0x030B0000 + PyObject *version_info; + PyObject *py_minor_version = NULL; + #endif + long minor_version = 0; + PyObject *type, *value, *traceback; + PyErr_Fetch(&type, &value, &traceback); + #if __PYX_LIMITED_VERSION_HEX >= 0x030B0000 + minor_version = 11; + #else + if (!(version_info = PySys_GetObject("version_info"))) goto end; + if (!(py_minor_version = PySequence_GetItem(version_info, 1))) goto end; + minor_version = PyLong_AsLong(py_minor_version); + Py_DECREF(py_minor_version); + if (minor_version == -1 && PyErr_Occurred()) goto end; + #endif + if (!(types_module = PyImport_ImportModule("types"))) goto end; + if (!(code_type = PyObject_GetAttrString(types_module, "CodeType"))) goto end; + if (minor_version <= 7) { + (void)p; + result = PyObject_CallFunction(code_type, "iiiiiOOOOOOiOO", a, k, l, s, f, code, + c, n, v, fn, name, fline, lnos, fv, cell); + } else if (minor_version <= 10) { + result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOiOO", a,p, k, l, s, f, code, + c, n, v, fn, name, fline, lnos, fv, cell); + } else { + if (!(exception_table = PyBytes_FromStringAndSize(NULL, 0))) goto end; + result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOOiOO", a,p, k, l, s, f, code, + c, n, v, fn, name, name, fline, lnos, exception_table, fv, cell); + } + end: + Py_XDECREF(code_type); + Py_XDECREF(exception_table); + Py_XDECREF(types_module); + if (type) { + PyErr_Restore(type, value, traceback); + } + return result; + } + #ifndef CO_OPTIMIZED + #define CO_OPTIMIZED 0x0001 + #endif + #ifndef CO_NEWLOCALS + #define CO_NEWLOCALS 0x0002 + #endif + #ifndef CO_VARARGS + #define CO_VARARGS 0x0004 + #endif + #ifndef CO_VARKEYWORDS + #define CO_VARKEYWORDS 0x0008 + #endif + #ifndef CO_ASYNC_GENERATOR + #define CO_ASYNC_GENERATOR 0x0200 + #endif + #ifndef CO_GENERATOR + #define CO_GENERATOR 0x0020 + #endif + #ifndef CO_COROUTINE + #define CO_COROUTINE 0x0080 + #endif +#elif PY_VERSION_HEX >= 0x030B0000 + static CYTHON_INLINE PyCodeObject* __Pyx_PyCode_New(int a, int p, int k, int l, int s, int f, + PyObject *code, PyObject *c, PyObject* n, PyObject *v, + PyObject *fv, PyObject *cell, PyObject* fn, + PyObject *name, int fline, PyObject *lnos) { + PyCodeObject *result; + PyObject *empty_bytes = PyBytes_FromStringAndSize("", 0); + if (!empty_bytes) return NULL; + result = + #if PY_VERSION_HEX >= 0x030C0000 + PyUnstable_Code_NewWithPosOnlyArgs + #else + PyCode_NewWithPosOnlyArgs + #endif + (a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, name, fline, lnos, empty_bytes); + Py_DECREF(empty_bytes); + return result; + } +#elif PY_VERSION_HEX >= 0x030800B2 && !CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_NewWithPosOnlyArgs(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#else + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#endif +#endif +#if PY_VERSION_HEX >= 0x030900A4 || defined(Py_IS_TYPE) + #define __Pyx_IS_TYPE(ob, type) Py_IS_TYPE(ob, type) +#else + #define __Pyx_IS_TYPE(ob, type) (((const PyObject*)ob)->ob_type == (type)) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_Is) + #define __Pyx_Py_Is(x, y) Py_Is(x, y) +#else + #define __Pyx_Py_Is(x, y) ((x) == (y)) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsNone) + #define __Pyx_Py_IsNone(ob) Py_IsNone(ob) +#else + #define __Pyx_Py_IsNone(ob) __Pyx_Py_Is((ob), Py_None) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsTrue) + #define __Pyx_Py_IsTrue(ob) Py_IsTrue(ob) +#else + #define __Pyx_Py_IsTrue(ob) __Pyx_Py_Is((ob), Py_True) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsFalse) + #define __Pyx_Py_IsFalse(ob) Py_IsFalse(ob) +#else + #define __Pyx_Py_IsFalse(ob) __Pyx_Py_Is((ob), Py_False) +#endif +#define __Pyx_NoneAsNull(obj) (__Pyx_Py_IsNone(obj) ? NULL : (obj)) +#if PY_VERSION_HEX >= 0x030900F0 && !CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyObject_GC_IsFinalized(o) PyObject_GC_IsFinalized(o) +#else + #define __Pyx_PyObject_GC_IsFinalized(o) _PyGC_FINALIZED(o) +#endif +#ifndef CO_COROUTINE + #define CO_COROUTINE 0x80 +#endif +#ifndef CO_ASYNC_GENERATOR + #define CO_ASYNC_GENERATOR 0x200 +#endif +#ifndef Py_TPFLAGS_CHECKTYPES + #define Py_TPFLAGS_CHECKTYPES 0 +#endif +#ifndef Py_TPFLAGS_HAVE_INDEX + #define Py_TPFLAGS_HAVE_INDEX 0 +#endif +#ifndef Py_TPFLAGS_HAVE_NEWBUFFER + #define Py_TPFLAGS_HAVE_NEWBUFFER 0 +#endif +#ifndef Py_TPFLAGS_HAVE_FINALIZE + #define Py_TPFLAGS_HAVE_FINALIZE 0 +#endif +#ifndef Py_TPFLAGS_SEQUENCE + #define Py_TPFLAGS_SEQUENCE 0 +#endif +#ifndef Py_TPFLAGS_MAPPING + #define Py_TPFLAGS_MAPPING 0 +#endif +#ifndef METH_STACKLESS + #define METH_STACKLESS 0 +#endif +#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL) + #ifndef METH_FASTCALL + #define METH_FASTCALL 0x80 + #endif + typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs); + typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args, + Py_ssize_t nargs, PyObject *kwnames); +#else + #if PY_VERSION_HEX >= 0x030d00A4 + # define __Pyx_PyCFunctionFast PyCFunctionFast + # define __Pyx_PyCFunctionFastWithKeywords PyCFunctionFastWithKeywords + #else + # define __Pyx_PyCFunctionFast _PyCFunctionFast + # define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords + #endif +#endif +#if CYTHON_METH_FASTCALL + #define __Pyx_METH_FASTCALL METH_FASTCALL + #define __Pyx_PyCFunction_FastCall __Pyx_PyCFunctionFast + #define __Pyx_PyCFunction_FastCallWithKeywords __Pyx_PyCFunctionFastWithKeywords +#else + #define __Pyx_METH_FASTCALL METH_VARARGS + #define __Pyx_PyCFunction_FastCall PyCFunction + #define __Pyx_PyCFunction_FastCallWithKeywords PyCFunctionWithKeywords +#endif +#if CYTHON_VECTORCALL + #define __pyx_vectorcallfunc vectorcallfunc + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET PY_VECTORCALL_ARGUMENTS_OFFSET + #define __Pyx_PyVectorcall_NARGS(n) PyVectorcall_NARGS((size_t)(n)) +#elif CYTHON_BACKPORT_VECTORCALL + typedef PyObject *(*__pyx_vectorcallfunc)(PyObject *callable, PyObject *const *args, + size_t nargsf, PyObject *kwnames); + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET ((size_t)1 << (8 * sizeof(size_t) - 1)) + #define __Pyx_PyVectorcall_NARGS(n) ((Py_ssize_t)(((size_t)(n)) & ~__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)) +#else + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET 0 + #define __Pyx_PyVectorcall_NARGS(n) ((Py_ssize_t)(n)) +#endif +#if PY_MAJOR_VERSION >= 0x030900B1 +#define __Pyx_PyCFunction_CheckExact(func) PyCFunction_CheckExact(func) +#else +#define __Pyx_PyCFunction_CheckExact(func) PyCFunction_Check(func) +#endif +#define __Pyx_CyOrPyCFunction_Check(func) PyCFunction_Check(func) +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_CyOrPyCFunction_GET_FUNCTION(func) (((PyCFunctionObject*)(func))->m_ml->ml_meth) +#elif !CYTHON_COMPILING_IN_LIMITED_API +#define __Pyx_CyOrPyCFunction_GET_FUNCTION(func) PyCFunction_GET_FUNCTION(func) +#endif +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_CyOrPyCFunction_GET_FLAGS(func) (((PyCFunctionObject*)(func))->m_ml->ml_flags) +static CYTHON_INLINE PyObject* __Pyx_CyOrPyCFunction_GET_SELF(PyObject *func) { + return (__Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_STATIC) ? NULL : ((PyCFunctionObject*)func)->m_self; +} +#endif +static CYTHON_INLINE int __Pyx__IsSameCFunction(PyObject *func, void *cfunc) { +#if CYTHON_COMPILING_IN_LIMITED_API + return PyCFunction_Check(func) && PyCFunction_GetFunction(func) == (PyCFunction) cfunc; +#else + return PyCFunction_Check(func) && PyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc; +#endif +} +#define __Pyx_IsSameCFunction(func, cfunc) __Pyx__IsSameCFunction(func, cfunc) +#if __PYX_LIMITED_VERSION_HEX < 0x030900B1 + #define __Pyx_PyType_FromModuleAndSpec(m, s, b) ((void)m, PyType_FromSpecWithBases(s, b)) + typedef PyObject *(*__Pyx_PyCMethod)(PyObject *, PyTypeObject *, PyObject *const *, size_t, PyObject *); +#else + #define __Pyx_PyType_FromModuleAndSpec(m, s, b) PyType_FromModuleAndSpec(m, s, b) + #define __Pyx_PyCMethod PyCMethod +#endif +#ifndef METH_METHOD + #define METH_METHOD 0x200 +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc) + #define PyObject_Malloc(s) PyMem_Malloc(s) + #define PyObject_Free(p) PyMem_Free(p) + #define PyObject_Realloc(p) PyMem_Realloc(p) +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) +#else + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno) +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyThreadState_Current PyThreadState_Get() +#elif !CYTHON_FAST_THREAD_STATE + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#elif PY_VERSION_HEX >= 0x030d00A1 + #define __Pyx_PyThreadState_Current PyThreadState_GetUnchecked() +#elif PY_VERSION_HEX >= 0x03060000 + #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet() +#elif PY_VERSION_HEX >= 0x03000000 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#else + #define __Pyx_PyThreadState_Current _PyThreadState_Current +#endif +#if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_INLINE void *__Pyx_PyModule_GetState(PyObject *op) +{ + void *result; + result = PyModule_GetState(op); + if (!result) + Py_FatalError("Couldn't find the module state"); + return result; +} +#endif +#define __Pyx_PyObject_GetSlot(obj, name, func_ctype) __Pyx_PyType_GetSlot(Py_TYPE(obj), name, func_ctype) +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyType_GetSlot(type, name, func_ctype) ((func_ctype) PyType_GetSlot((type), Py_##name)) +#else + #define __Pyx_PyType_GetSlot(type, name, func_ctype) ((type)->name) +#endif +#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT) +#include "pythread.h" +#define Py_tss_NEEDS_INIT 0 +typedef int Py_tss_t; +static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) { + *key = PyThread_create_key(); + return 0; +} +static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) { + Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t)); + *key = Py_tss_NEEDS_INIT; + return key; +} +static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) { + PyObject_Free(key); +} +static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) { + return *key != Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) { + PyThread_delete_key(*key); + *key = Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) { + return PyThread_set_key_value(*key, value); +} +static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { + return PyThread_get_key_value(*key); +} +#endif +#if PY_MAJOR_VERSION < 3 + #if CYTHON_COMPILING_IN_PYPY + #if PYPY_VERSION_NUM < 0x07030600 + #if defined(__cplusplus) && __cplusplus >= 201402L + [[deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")]] + #elif defined(__GNUC__) || defined(__clang__) + __attribute__ ((__deprecated__("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6"))) + #elif defined(_MSC_VER) + __declspec(deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")) + #endif + static CYTHON_INLINE int PyGILState_Check(void) { + return 0; + } + #else // PYPY_VERSION_NUM < 0x07030600 + #endif // PYPY_VERSION_NUM < 0x07030600 + #else + static CYTHON_INLINE int PyGILState_Check(void) { + PyThreadState * tstate = _PyThreadState_Current; + return tstate && (tstate == PyGILState_GetThisThreadState()); + } + #endif +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030d0000 || defined(_PyDict_NewPresized) +#define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n)) +#else +#define __Pyx_PyDict_NewPresized(n) PyDict_New() +#endif +#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION + #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) +#else + #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX > 0x030600B4 && PY_VERSION_HEX < 0x030d0000 && CYTHON_USE_UNICODE_INTERNALS +#define __Pyx_PyDict_GetItemStrWithError(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) +static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStr(PyObject *dict, PyObject *name) { + PyObject *res = __Pyx_PyDict_GetItemStrWithError(dict, name); + if (res == NULL) PyErr_Clear(); + return res; +} +#elif PY_MAJOR_VERSION >= 3 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07020000) +#define __Pyx_PyDict_GetItemStrWithError PyDict_GetItemWithError +#define __Pyx_PyDict_GetItemStr PyDict_GetItem +#else +static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStrWithError(PyObject *dict, PyObject *name) { +#if CYTHON_COMPILING_IN_PYPY + return PyDict_GetItem(dict, name); +#else + PyDictEntry *ep; + PyDictObject *mp = (PyDictObject*) dict; + long hash = ((PyStringObject *) name)->ob_shash; + assert(hash != -1); + ep = (mp->ma_lookup)(mp, name, hash); + if (ep == NULL) { + return NULL; + } + return ep->me_value; +#endif +} +#define __Pyx_PyDict_GetItemStr PyDict_GetItem +#endif +#if CYTHON_USE_TYPE_SLOTS + #define __Pyx_PyType_GetFlags(tp) (((PyTypeObject *)tp)->tp_flags) + #define __Pyx_PyType_HasFeature(type, feature) ((__Pyx_PyType_GetFlags(type) & (feature)) != 0) + #define __Pyx_PyObject_GetIterNextFunc(obj) (Py_TYPE(obj)->tp_iternext) +#else + #define __Pyx_PyType_GetFlags(tp) (PyType_GetFlags((PyTypeObject *)tp)) + #define __Pyx_PyType_HasFeature(type, feature) PyType_HasFeature(type, feature) + #define __Pyx_PyObject_GetIterNextFunc(obj) PyIter_Next +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_SetItemOnTypeDict(tp, k, v) PyObject_GenericSetAttr((PyObject*)tp, k, v) +#else + #define __Pyx_SetItemOnTypeDict(tp, k, v) PyDict_SetItem(tp->tp_dict, k, v) +#endif +#if CYTHON_USE_TYPE_SPECS && PY_VERSION_HEX >= 0x03080000 +#define __Pyx_PyHeapTypeObject_GC_Del(obj) {\ + PyTypeObject *type = Py_TYPE((PyObject*)obj);\ + assert(__Pyx_PyType_HasFeature(type, Py_TPFLAGS_HEAPTYPE));\ + PyObject_GC_Del(obj);\ + Py_DECREF(type);\ +} +#else +#define __Pyx_PyHeapTypeObject_GC_Del(obj) PyObject_GC_Del(obj) +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define CYTHON_PEP393_ENABLED 1 + #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GetLength(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_ReadChar(u, i) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((void)u, 1114111U) + #define __Pyx_PyUnicode_KIND(u) ((void)u, (0)) + #define __Pyx_PyUnicode_DATA(u) ((void*)u) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)k, PyUnicode_ReadChar((PyObject*)(d), i)) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GetLength(u)) +#elif PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) + #define CYTHON_PEP393_ENABLED 1 + #if PY_VERSION_HEX >= 0x030C0000 + #define __Pyx_PyUnicode_READY(op) (0) + #else + #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ + 0 : _PyUnicode_Ready((PyObject *)(op))) + #endif + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u) + #define __Pyx_PyUnicode_KIND(u) ((int)PyUnicode_KIND(u)) + #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) + #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, (Py_UCS4) ch) + #if PY_VERSION_HEX >= 0x030C0000 + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_LENGTH(u)) + #else + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03090000 + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : ((PyCompactUnicodeObject *)(u))->wstr_length)) + #else + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) + #endif + #endif +#else + #define CYTHON_PEP393_ENABLED 0 + #define PyUnicode_1BYTE_KIND 1 + #define PyUnicode_2BYTE_KIND 2 + #define PyUnicode_4BYTE_KIND 4 + #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535U : 1114111U) + #define __Pyx_PyUnicode_KIND(u) ((int)sizeof(Py_UNICODE)) + #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = (Py_UNICODE) ch) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u)) +#endif +#if CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) +#else + #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\ + PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) +#endif +#if CYTHON_COMPILING_IN_PYPY + #if !defined(PyUnicode_DecodeUnicodeEscape) + #define PyUnicode_DecodeUnicodeEscape(s, size, errors) PyUnicode_Decode(s, size, "unicode_escape", errors) + #endif + #if !defined(PyUnicode_Contains) || (PY_MAJOR_VERSION == 2 && PYPY_VERSION_NUM < 0x07030500) + #undef PyUnicode_Contains + #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) + #endif + #if !defined(PyByteArray_Check) + #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type) + #endif + #if !defined(PyObject_Format) + #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt) + #endif +#endif +#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) +#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) +#else + #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) +#endif +#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII) + #define PyObject_ASCII(o) PyObject_Repr(o) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBaseString_Type PyUnicode_Type + #define PyStringObject PyUnicodeObject + #define PyString_Type PyUnicode_Type + #define PyString_Check PyUnicode_Check + #define PyString_CheckExact PyUnicode_CheckExact +#ifndef PyObject_Unicode + #define PyObject_Unicode PyObject_Str +#endif +#endif +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) + #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) +#else + #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj)) + #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) +#endif +#if CYTHON_COMPILING_IN_CPYTHON + #define __Pyx_PySequence_ListKeepNew(obj)\ + (likely(PyList_CheckExact(obj) && Py_REFCNT(obj) == 1) ? __Pyx_NewRef(obj) : PySequence_List(obj)) +#else + #define __Pyx_PySequence_ListKeepNew(obj) PySequence_List(obj) +#endif +#ifndef PySet_CheckExact + #define PySet_CheckExact(obj) __Pyx_IS_TYPE(obj, &PySet_Type) +#endif +#if PY_VERSION_HEX >= 0x030900A4 + #define __Pyx_SET_REFCNT(obj, refcnt) Py_SET_REFCNT(obj, refcnt) + #define __Pyx_SET_SIZE(obj, size) Py_SET_SIZE(obj, size) +#else + #define __Pyx_SET_REFCNT(obj, refcnt) Py_REFCNT(obj) = (refcnt) + #define __Pyx_SET_SIZE(obj, size) Py_SIZE(obj) = (size) +#endif +#if CYTHON_ASSUME_SAFE_MACROS + #define __Pyx_PySequence_ITEM(o, i) PySequence_ITEM(o, i) + #define __Pyx_PySequence_SIZE(seq) Py_SIZE(seq) + #define __Pyx_PyTuple_SET_ITEM(o, i, v) (PyTuple_SET_ITEM(o, i, v), (0)) + #define __Pyx_PyList_SET_ITEM(o, i, v) (PyList_SET_ITEM(o, i, v), (0)) + #define __Pyx_PyTuple_GET_SIZE(o) PyTuple_GET_SIZE(o) + #define __Pyx_PyList_GET_SIZE(o) PyList_GET_SIZE(o) + #define __Pyx_PySet_GET_SIZE(o) PySet_GET_SIZE(o) + #define __Pyx_PyBytes_GET_SIZE(o) PyBytes_GET_SIZE(o) + #define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_GET_SIZE(o) +#else + #define __Pyx_PySequence_ITEM(o, i) PySequence_GetItem(o, i) + #define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq) + #define __Pyx_PyTuple_SET_ITEM(o, i, v) PyTuple_SetItem(o, i, v) + #define __Pyx_PyList_SET_ITEM(o, i, v) PyList_SetItem(o, i, v) + #define __Pyx_PyTuple_GET_SIZE(o) PyTuple_Size(o) + #define __Pyx_PyList_GET_SIZE(o) PyList_Size(o) + #define __Pyx_PySet_GET_SIZE(o) PySet_Size(o) + #define __Pyx_PyBytes_GET_SIZE(o) PyBytes_Size(o) + #define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_Size(o) +#endif +#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1 + #define __Pyx_PyImport_AddModuleRef(name) PyImport_AddModuleRef(name) +#else + static CYTHON_INLINE PyObject *__Pyx_PyImport_AddModuleRef(const char *name) { + PyObject *module = PyImport_AddModule(name); + Py_XINCREF(module); + return module; + } +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyIntObject PyLongObject + #define PyInt_Type PyLong_Type + #define PyInt_Check(op) PyLong_Check(op) + #define PyInt_CheckExact(op) PyLong_CheckExact(op) + #define __Pyx_Py3Int_Check(op) PyLong_Check(op) + #define __Pyx_Py3Int_CheckExact(op) PyLong_CheckExact(op) + #define PyInt_FromString PyLong_FromString + #define PyInt_FromUnicode PyLong_FromUnicode + #define PyInt_FromLong PyLong_FromLong + #define PyInt_FromSize_t PyLong_FromSize_t + #define PyInt_FromSsize_t PyLong_FromSsize_t + #define PyInt_AsLong PyLong_AsLong + #define PyInt_AS_LONG PyLong_AS_LONG + #define PyInt_AsSsize_t PyLong_AsSsize_t + #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask + #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask + #define PyNumber_Int PyNumber_Long +#else + #define __Pyx_Py3Int_Check(op) (PyLong_Check(op) || PyInt_Check(op)) + #define __Pyx_Py3Int_CheckExact(op) (PyLong_CheckExact(op) || PyInt_CheckExact(op)) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBoolObject PyLongObject +#endif +#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY + #ifndef PyUnicode_InternFromString + #define PyUnicode_InternFromString(s) PyUnicode_FromString(s) + #endif +#endif +#if PY_VERSION_HEX < 0x030200A4 + typedef long Py_hash_t; + #define __Pyx_PyInt_FromHash_t PyInt_FromLong + #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsHash_t +#else + #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t + #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsSsize_t +#endif +#if CYTHON_USE_ASYNC_SLOTS + #if PY_VERSION_HEX >= 0x030500B1 + #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods + #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async) + #else + #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved)) + #endif +#else + #define __Pyx_PyType_AsAsync(obj) NULL +#endif +#ifndef __Pyx_PyAsyncMethodsStruct + typedef struct { + unaryfunc am_await; + unaryfunc am_aiter; + unaryfunc am_anext; + } __Pyx_PyAsyncMethodsStruct; +#endif + +#if defined(_WIN32) || defined(WIN32) || defined(MS_WINDOWS) + #if !defined(_USE_MATH_DEFINES) + #define _USE_MATH_DEFINES + #endif +#endif +#include +#ifdef NAN +#define __PYX_NAN() ((float) NAN) +#else +static CYTHON_INLINE float __PYX_NAN() { + float value; + memset(&value, 0xFF, sizeof(value)); + return value; +} +#endif +#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL) +#define __Pyx_truncl trunc +#else +#define __Pyx_truncl truncl +#endif + +#define __PYX_MARK_ERR_POS(f_index, lineno) \ + { __pyx_filename = __pyx_f[f_index]; (void)__pyx_filename; __pyx_lineno = lineno; (void)__pyx_lineno; __pyx_clineno = __LINE__; (void)__pyx_clineno; } +#define __PYX_ERR(f_index, lineno, Ln_error) \ + { __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; } + +#ifdef CYTHON_EXTERN_C + #undef __PYX_EXTERN_C + #define __PYX_EXTERN_C CYTHON_EXTERN_C +#elif defined(__PYX_EXTERN_C) + #ifdef _MSC_VER + #pragma message ("Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead.") + #else + #warning Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead. + #endif +#else + #ifdef __cplusplus + #define __PYX_EXTERN_C extern "C" + #else + #define __PYX_EXTERN_C extern + #endif +#endif + +#define __PYX_HAVE__nw_ec_alignx +#define __PYX_HAVE_API__nw_ec_alignx +/* Early includes */ +#include +#include +#include +#include "pythread.h" + + /* Using NumPy API declarations from "numpy/__init__.cython-30.pxd" */ + +#include "numpy/arrayobject.h" +#include "numpy/ndarrayobject.h" +#include "numpy/ndarraytypes.h" +#include "numpy/arrayscalars.h" +#include "numpy/ufuncobject.h" +#include +#include +#include "limits.h" +#ifdef _OPENMP +#include +#endif /* _OPENMP */ + +#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS) +#define CYTHON_WITHOUT_ASSERTIONS +#endif + +typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding; + const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; + +#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8) +#define __PYX_DEFAULT_STRING_ENCODING "" +#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString +#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#define __Pyx_uchar_cast(c) ((unsigned char)c) +#define __Pyx_long_cast(x) ((long)x) +#define __Pyx_fits_Py_ssize_t(v, type, is_signed) (\ + (sizeof(type) < sizeof(Py_ssize_t)) ||\ + (sizeof(type) > sizeof(Py_ssize_t) &&\ + likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX) &&\ + (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\ + v == (type)PY_SSIZE_T_MIN))) ||\ + (sizeof(type) == sizeof(Py_ssize_t) &&\ + (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX))) ) +static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) { + return (size_t) i < (size_t) limit; +} +#if defined (__cplusplus) && __cplusplus >= 201103L + #include + #define __Pyx_sst_abs(value) std::abs(value) +#elif SIZEOF_INT >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) abs(value) +#elif SIZEOF_LONG >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) labs(value) +#elif defined (_MSC_VER) + #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value)) +#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define __Pyx_sst_abs(value) llabs(value) +#elif defined (__GNUC__) + #define __Pyx_sst_abs(value) __builtin_llabs(value) +#else + #define __Pyx_sst_abs(value) ((value<0) ? -value : value) +#endif +static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s); +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*); +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); +static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char*); +#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) +#define __Pyx_PyBytes_FromString PyBytes_FromString +#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); +#if PY_MAJOR_VERSION < 3 + #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#else + #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize +#endif +#define __Pyx_PyBytes_AsWritableString(s) ((char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableSString(s) ((signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableUString(s) ((unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyObject_AsWritableString(s) ((char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableSString(s) ((signed char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s) +#define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s) +#define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s) +#define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s) +#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s) +#define __Pyx_PyUnicode_FromOrdinal(o) PyUnicode_FromOrdinal((int)o) +#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode +#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj) +#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None) +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b); +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*); +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x); +#define __Pyx_PySequence_Tuple(obj)\ + (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj)) +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); +static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject*); +#if CYTHON_ASSUME_SAFE_MACROS +#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) +#else +#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) +#endif +#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) +#if PY_MAJOR_VERSION >= 3 +#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x)) +#else +#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x)) +#endif +#if CYTHON_USE_PYLONG_INTERNALS + #if PY_VERSION_HEX >= 0x030C00A7 + #ifndef _PyLong_SIGN_MASK + #define _PyLong_SIGN_MASK 3 + #endif + #ifndef _PyLong_NON_SIZE_BITS + #define _PyLong_NON_SIZE_BITS 3 + #endif + #define __Pyx_PyLong_Sign(x) (((PyLongObject*)x)->long_value.lv_tag & _PyLong_SIGN_MASK) + #define __Pyx_PyLong_IsNeg(x) ((__Pyx_PyLong_Sign(x) & 2) != 0) + #define __Pyx_PyLong_IsNonNeg(x) (!__Pyx_PyLong_IsNeg(x)) + #define __Pyx_PyLong_IsZero(x) (__Pyx_PyLong_Sign(x) & 1) + #define __Pyx_PyLong_IsPos(x) (__Pyx_PyLong_Sign(x) == 0) + #define __Pyx_PyLong_CompactValueUnsigned(x) (__Pyx_PyLong_Digits(x)[0]) + #define __Pyx_PyLong_DigitCount(x) ((Py_ssize_t) (((PyLongObject*)x)->long_value.lv_tag >> _PyLong_NON_SIZE_BITS)) + #define __Pyx_PyLong_SignedDigitCount(x)\ + ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * __Pyx_PyLong_DigitCount(x)) + #if defined(PyUnstable_Long_IsCompact) && defined(PyUnstable_Long_CompactValue) + #define __Pyx_PyLong_IsCompact(x) PyUnstable_Long_IsCompact((PyLongObject*) x) + #define __Pyx_PyLong_CompactValue(x) PyUnstable_Long_CompactValue((PyLongObject*) x) + #else + #define __Pyx_PyLong_IsCompact(x) (((PyLongObject*)x)->long_value.lv_tag < (2 << _PyLong_NON_SIZE_BITS)) + #define __Pyx_PyLong_CompactValue(x) ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * (Py_ssize_t) __Pyx_PyLong_Digits(x)[0]) + #endif + typedef Py_ssize_t __Pyx_compact_pylong; + typedef size_t __Pyx_compact_upylong; + #else + #define __Pyx_PyLong_IsNeg(x) (Py_SIZE(x) < 0) + #define __Pyx_PyLong_IsNonNeg(x) (Py_SIZE(x) >= 0) + #define __Pyx_PyLong_IsZero(x) (Py_SIZE(x) == 0) + #define __Pyx_PyLong_IsPos(x) (Py_SIZE(x) > 0) + #define __Pyx_PyLong_CompactValueUnsigned(x) ((Py_SIZE(x) == 0) ? 0 : __Pyx_PyLong_Digits(x)[0]) + #define __Pyx_PyLong_DigitCount(x) __Pyx_sst_abs(Py_SIZE(x)) + #define __Pyx_PyLong_SignedDigitCount(x) Py_SIZE(x) + #define __Pyx_PyLong_IsCompact(x) (Py_SIZE(x) == 0 || Py_SIZE(x) == 1 || Py_SIZE(x) == -1) + #define __Pyx_PyLong_CompactValue(x)\ + ((Py_SIZE(x) == 0) ? (sdigit) 0 : ((Py_SIZE(x) < 0) ? -(sdigit)__Pyx_PyLong_Digits(x)[0] : (sdigit)__Pyx_PyLong_Digits(x)[0])) + typedef sdigit __Pyx_compact_pylong; + typedef digit __Pyx_compact_upylong; + #endif + #if PY_VERSION_HEX >= 0x030C00A5 + #define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->long_value.ob_digit) + #else + #define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->ob_digit) + #endif +#endif +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII +#include +static int __Pyx_sys_getdefaultencoding_not_ascii; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + PyObject* ascii_chars_u = NULL; + PyObject* ascii_chars_b = NULL; + const char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + if (strcmp(default_encoding_c, "ascii") == 0) { + __Pyx_sys_getdefaultencoding_not_ascii = 0; + } else { + char ascii_chars[128]; + int c; + for (c = 0; c < 128; c++) { + ascii_chars[c] = (char) c; + } + __Pyx_sys_getdefaultencoding_not_ascii = 1; + ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); + if (!ascii_chars_u) goto bad; + ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); + if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { + PyErr_Format( + PyExc_ValueError, + "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", + default_encoding_c); + goto bad; + } + Py_DECREF(ascii_chars_u); + Py_DECREF(ascii_chars_b); + } + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + Py_XDECREF(ascii_chars_u); + Py_XDECREF(ascii_chars_b); + return -1; +} +#endif +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) +#else +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +#include +static char* __PYX_DEFAULT_STRING_ENCODING; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c) + 1); + if (!__PYX_DEFAULT_STRING_ENCODING) goto bad; + strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + return -1; +} +#endif +#endif + + +/* Test for GCC > 2.95 */ +#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))) + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) +#else /* !__GNUC__ or GCC < 2.95 */ + #define likely(x) (x) + #define unlikely(x) (x) +#endif /* __GNUC__ */ +static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; } + +#if !CYTHON_USE_MODULE_STATE +static PyObject *__pyx_m = NULL; +#endif +static int __pyx_lineno; +static int __pyx_clineno = 0; +static const char * __pyx_cfilenm = __FILE__; +static const char *__pyx_filename; + +/* Header.proto */ +#if !defined(CYTHON_CCOMPLEX) + #if defined(__cplusplus) + #define CYTHON_CCOMPLEX 1 + #elif (defined(_Complex_I) && !defined(_MSC_VER)) || ((defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) && !defined(__STDC_NO_COMPLEX__) && !defined(_MSC_VER)) + #define CYTHON_CCOMPLEX 1 + #else + #define CYTHON_CCOMPLEX 0 + #endif +#endif +#if CYTHON_CCOMPLEX + #ifdef __cplusplus + #include + #else + #include + #endif +#endif +#if CYTHON_CCOMPLEX && !defined(__cplusplus) && defined(__sun__) && defined(__GNUC__) + #undef _Complex_I + #define _Complex_I 1.0fj +#endif + +/* #### Code section: filename_table ### */ + +static const char *__pyx_f[] = { + "nw_ec_alignx.pyx", + "contextvars.pxd", + "__init__.cython-30.pxd", + "type.pxd", + "bool.pxd", + "complex.pxd", +}; +/* #### Code section: utility_code_proto_before_types ### */ +/* ForceInitThreads.proto */ +#ifndef __PYX_FORCE_INIT_THREADS + #define __PYX_FORCE_INIT_THREADS 0 +#endif + +/* BufferFormatStructs.proto */ +struct __Pyx_StructField_; +#define __PYX_BUF_FLAGS_PACKED_STRUCT (1 << 0) +typedef struct { + const char* name; + struct __Pyx_StructField_* fields; + size_t size; + size_t arraysize[8]; + int ndim; + char typegroup; + char is_unsigned; + int flags; +} __Pyx_TypeInfo; +typedef struct __Pyx_StructField_ { + __Pyx_TypeInfo* type; + const char* name; + size_t offset; +} __Pyx_StructField; +typedef struct { + __Pyx_StructField* field; + size_t parent_offset; +} __Pyx_BufFmt_StackElem; +typedef struct { + __Pyx_StructField root; + __Pyx_BufFmt_StackElem* head; + size_t fmt_offset; + size_t new_count, enc_count; + size_t struct_alignment; + int is_complex; + char enc_type; + char new_packmode; + char enc_packmode; + char is_valid_array; +} __Pyx_BufFmt_Context; + +/* #### Code section: numeric_typedefs ### */ + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":787 + * # in Cython to enable them only on the right systems. + * + * ctypedef npy_int8 int8_t # <<<<<<<<<<<<<< + * ctypedef npy_int16 int16_t + * ctypedef npy_int32 int32_t + */ +typedef npy_int8 __pyx_t_5numpy_int8_t; + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":788 + * + * ctypedef npy_int8 int8_t + * ctypedef npy_int16 int16_t # <<<<<<<<<<<<<< + * ctypedef npy_int32 int32_t + * ctypedef npy_int64 int64_t + */ +typedef npy_int16 __pyx_t_5numpy_int16_t; + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":789 + * ctypedef npy_int8 int8_t + * ctypedef npy_int16 int16_t + * ctypedef npy_int32 int32_t # <<<<<<<<<<<<<< + * ctypedef npy_int64 int64_t + * #ctypedef npy_int96 int96_t + */ +typedef npy_int32 __pyx_t_5numpy_int32_t; + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":790 + * ctypedef npy_int16 int16_t + * ctypedef npy_int32 int32_t + * ctypedef npy_int64 int64_t # <<<<<<<<<<<<<< + * #ctypedef npy_int96 int96_t + * #ctypedef npy_int128 int128_t + */ +typedef npy_int64 __pyx_t_5numpy_int64_t; + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":794 + * #ctypedef npy_int128 int128_t + * + * ctypedef npy_uint8 uint8_t # <<<<<<<<<<<<<< + * ctypedef npy_uint16 uint16_t + * ctypedef npy_uint32 uint32_t + */ +typedef npy_uint8 __pyx_t_5numpy_uint8_t; + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":795 + * + * ctypedef npy_uint8 uint8_t + * ctypedef npy_uint16 uint16_t # <<<<<<<<<<<<<< + * ctypedef npy_uint32 uint32_t + * ctypedef npy_uint64 uint64_t + */ +typedef npy_uint16 __pyx_t_5numpy_uint16_t; + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":796 + * ctypedef npy_uint8 uint8_t + * ctypedef npy_uint16 uint16_t + * ctypedef npy_uint32 uint32_t # <<<<<<<<<<<<<< + * ctypedef npy_uint64 uint64_t + * #ctypedef npy_uint96 uint96_t + */ +typedef npy_uint32 __pyx_t_5numpy_uint32_t; + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":797 + * ctypedef npy_uint16 uint16_t + * ctypedef npy_uint32 uint32_t + * ctypedef npy_uint64 uint64_t # <<<<<<<<<<<<<< + * #ctypedef npy_uint96 uint96_t + * #ctypedef npy_uint128 uint128_t + */ +typedef npy_uint64 __pyx_t_5numpy_uint64_t; + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":801 + * #ctypedef npy_uint128 uint128_t + * + * ctypedef npy_float32 float32_t # <<<<<<<<<<<<<< + * ctypedef npy_float64 float64_t + * #ctypedef npy_float80 float80_t + */ +typedef npy_float32 __pyx_t_5numpy_float32_t; + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":802 + * + * ctypedef npy_float32 float32_t + * ctypedef npy_float64 float64_t # <<<<<<<<<<<<<< + * #ctypedef npy_float80 float80_t + * #ctypedef npy_float128 float128_t + */ +typedef npy_float64 __pyx_t_5numpy_float64_t; + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":809 + * ctypedef double complex complex128_t + * + * ctypedef npy_longlong longlong_t # <<<<<<<<<<<<<< + * ctypedef npy_ulonglong ulonglong_t + * + */ +typedef npy_longlong __pyx_t_5numpy_longlong_t; + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":810 + * + * ctypedef npy_longlong longlong_t + * ctypedef npy_ulonglong ulonglong_t # <<<<<<<<<<<<<< + * + * ctypedef npy_intp intp_t + */ +typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t; + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":812 + * ctypedef npy_ulonglong ulonglong_t + * + * ctypedef npy_intp intp_t # <<<<<<<<<<<<<< + * ctypedef npy_uintp uintp_t + * + */ +typedef npy_intp __pyx_t_5numpy_intp_t; + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":813 + * + * ctypedef npy_intp intp_t + * ctypedef npy_uintp uintp_t # <<<<<<<<<<<<<< + * + * ctypedef npy_double float_t + */ +typedef npy_uintp __pyx_t_5numpy_uintp_t; + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":815 + * ctypedef npy_uintp uintp_t + * + * ctypedef npy_double float_t # <<<<<<<<<<<<<< + * ctypedef npy_double double_t + * ctypedef npy_longdouble longdouble_t + */ +typedef npy_double __pyx_t_5numpy_float_t; + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":816 + * + * ctypedef npy_double float_t + * ctypedef npy_double double_t # <<<<<<<<<<<<<< + * ctypedef npy_longdouble longdouble_t + * + */ +typedef npy_double __pyx_t_5numpy_double_t; + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":817 + * ctypedef npy_double float_t + * ctypedef npy_double double_t + * ctypedef npy_longdouble longdouble_t # <<<<<<<<<<<<<< + * + * ctypedef float complex cfloat_t + */ +typedef npy_longdouble __pyx_t_5numpy_longdouble_t; + +/* "nw_ec_alignx.pyx":33 + * + * DTYPE = np.int32 + * ctypedef np.int32_t DTYPE_t # <<<<<<<<<<<<<< + * DTYPEF = np.float64 + * ctypedef np.float64_t DTYPEF_t + */ +typedef __pyx_t_5numpy_int32_t __pyx_t_12nw_ec_alignx_DTYPE_t; + +/* "nw_ec_alignx.pyx":35 + * ctypedef np.int32_t DTYPE_t + * DTYPEF = np.float64 + * ctypedef np.float64_t DTYPEF_t # <<<<<<<<<<<<<< + * + * + */ +typedef __pyx_t_5numpy_float64_t __pyx_t_12nw_ec_alignx_DTYPEF_t; +/* #### Code section: complex_type_declarations ### */ +/* Declarations.proto */ +#if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) + #ifdef __cplusplus + typedef ::std::complex< float > __pyx_t_float_complex; + #else + typedef float _Complex __pyx_t_float_complex; + #endif +#else + typedef struct { float real, imag; } __pyx_t_float_complex; +#endif +static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float, float); + +/* Declarations.proto */ +#if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) + #ifdef __cplusplus + typedef ::std::complex< double > __pyx_t_double_complex; + #else + typedef double _Complex __pyx_t_double_complex; + #endif +#else + typedef struct { double real, imag; } __pyx_t_double_complex; +#endif +static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double, double); + +/* Declarations.proto */ +#if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) + #ifdef __cplusplus + typedef ::std::complex< long double > __pyx_t_long_double_complex; + #else + typedef long double _Complex __pyx_t_long_double_complex; + #endif +#else + typedef struct { long double real, imag; } __pyx_t_long_double_complex; +#endif +static CYTHON_INLINE __pyx_t_long_double_complex __pyx_t_long_double_complex_from_parts(long double, long double); + +/* #### Code section: type_declarations ### */ + +/*--- Type declarations ---*/ +struct __pyx_opt_args_7cpython_11contextvars_get_value; +struct __pyx_opt_args_7cpython_11contextvars_get_value_no_default; + +/* "cpython/contextvars.pxd":112 + * + * + * cdef inline object get_value(var, default_value=None): # <<<<<<<<<<<<<< + * """Return a new reference to the value of the context variable, + * or the default value of the context variable, + */ +struct __pyx_opt_args_7cpython_11contextvars_get_value { + int __pyx_n; + PyObject *default_value; +}; + +/* "cpython/contextvars.pxd":129 + * + * + * cdef inline object get_value_no_default(var, default_value=None): # <<<<<<<<<<<<<< + * """Return a new reference to the value of the context variable, + * or the provided default value if no such value was found. + */ +struct __pyx_opt_args_7cpython_11contextvars_get_value_no_default { + int __pyx_n; + PyObject *default_value; +}; + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1113 + * + * # Iterator API added in v1.6 + * ctypedef int (*NpyIter_IterNextFunc)(NpyIter* it) noexcept nogil # <<<<<<<<<<<<<< + * ctypedef void (*NpyIter_GetMultiIndexFunc)(NpyIter* it, npy_intp* outcoords) noexcept nogil + * + */ +typedef int (*__pyx_t_5numpy_NpyIter_IterNextFunc)(NpyIter *); + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1114 + * # Iterator API added in v1.6 + * ctypedef int (*NpyIter_IterNextFunc)(NpyIter* it) noexcept nogil + * ctypedef void (*NpyIter_GetMultiIndexFunc)(NpyIter* it, npy_intp* outcoords) noexcept nogil # <<<<<<<<<<<<<< + * + * cdef extern from "numpy/arrayobject.h": + */ +typedef void (*__pyx_t_5numpy_NpyIter_GetMultiIndexFunc)(NpyIter *, npy_intp *); +/* #### Code section: utility_code_proto ### */ + +/* --- Runtime support code (head) --- */ +/* Refnanny.proto */ +#ifndef CYTHON_REFNANNY + #define CYTHON_REFNANNY 0 +#endif +#if CYTHON_REFNANNY + typedef struct { + void (*INCREF)(void*, PyObject*, Py_ssize_t); + void (*DECREF)(void*, PyObject*, Py_ssize_t); + void (*GOTREF)(void*, PyObject*, Py_ssize_t); + void (*GIVEREF)(void*, PyObject*, Py_ssize_t); + void* (*SetupContext)(const char*, Py_ssize_t, const char*); + void (*FinishContext)(void**); + } __Pyx_RefNannyAPIStruct; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); + #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; +#ifdef WITH_THREAD + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + if (acquire_gil) {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\ + PyGILState_Release(__pyx_gilstate_save);\ + } else {\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\ + } + #define __Pyx_RefNannyFinishContextNogil() {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __Pyx_RefNannyFinishContext();\ + PyGILState_Release(__pyx_gilstate_save);\ + } +#else + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__)) + #define __Pyx_RefNannyFinishContextNogil() __Pyx_RefNannyFinishContext() +#endif + #define __Pyx_RefNannyFinishContextNogil() {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __Pyx_RefNannyFinishContext();\ + PyGILState_Release(__pyx_gilstate_save);\ + } + #define __Pyx_RefNannyFinishContext()\ + __Pyx_RefNanny->FinishContext(&__pyx_refnanny) + #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_XINCREF(r) do { if((r) == NULL); else {__Pyx_INCREF(r); }} while(0) + #define __Pyx_XDECREF(r) do { if((r) == NULL); else {__Pyx_DECREF(r); }} while(0) + #define __Pyx_XGOTREF(r) do { if((r) == NULL); else {__Pyx_GOTREF(r); }} while(0) + #define __Pyx_XGIVEREF(r) do { if((r) == NULL); else {__Pyx_GIVEREF(r);}} while(0) +#else + #define __Pyx_RefNannyDeclarations + #define __Pyx_RefNannySetupContext(name, acquire_gil) + #define __Pyx_RefNannyFinishContextNogil() + #define __Pyx_RefNannyFinishContext() + #define __Pyx_INCREF(r) Py_INCREF(r) + #define __Pyx_DECREF(r) Py_DECREF(r) + #define __Pyx_GOTREF(r) + #define __Pyx_GIVEREF(r) + #define __Pyx_XINCREF(r) Py_XINCREF(r) + #define __Pyx_XDECREF(r) Py_XDECREF(r) + #define __Pyx_XGOTREF(r) + #define __Pyx_XGIVEREF(r) +#endif +#define __Pyx_Py_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; Py_XDECREF(tmp);\ + } while (0) +#define __Pyx_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_XDECREF(tmp);\ + } while (0) +#define __Pyx_DECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_DECREF(tmp);\ + } while (0) +#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) +#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) + +/* PyErrExceptionMatches.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err) +static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err); +#else +#define __Pyx_PyErr_ExceptionMatches(err) PyErr_ExceptionMatches(err) +#endif + +/* PyThreadStateGet.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate; +#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current; +#if PY_VERSION_HEX >= 0x030C00A6 +#define __Pyx_PyErr_Occurred() (__pyx_tstate->current_exception != NULL) +#define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->current_exception ? (PyObject*) Py_TYPE(__pyx_tstate->current_exception) : (PyObject*) NULL) +#else +#define __Pyx_PyErr_Occurred() (__pyx_tstate->curexc_type != NULL) +#define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->curexc_type) +#endif +#else +#define __Pyx_PyThreadState_declare +#define __Pyx_PyThreadState_assign +#define __Pyx_PyErr_Occurred() (PyErr_Occurred() != NULL) +#define __Pyx_PyErr_CurrentExceptionType() PyErr_Occurred() +#endif + +/* PyErrFetchRestore.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) +#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A6 +#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) +#else +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#endif +#else +#define __Pyx_PyErr_Clear() PyErr_Clear() +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) +#endif + +/* PyObjectGetAttrStr.proto */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) +#endif + +/* PyObjectGetAttrStrNoError.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name); + +/* GetBuiltinName.proto */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name); + +/* GetTopmostException.proto */ +#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE +static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate); +#endif + +/* SaveResetException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_ExceptionSave(type, value, tb) __Pyx__ExceptionSave(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#define __Pyx_ExceptionReset(type, value, tb) __Pyx__ExceptionReset(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +#else +#define __Pyx_ExceptionSave(type, value, tb) PyErr_GetExcInfo(type, value, tb) +#define __Pyx_ExceptionReset(type, value, tb) PyErr_SetExcInfo(type, value, tb) +#endif + +/* GetException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_GetException(type, value, tb) __Pyx__GetException(__pyx_tstate, type, value, tb) +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); +#endif + +/* PyObjectCall.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); +#else +#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) +#endif + +/* RaiseException.proto */ +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); + +/* TupleAndListFromArray.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n); +static CYTHON_INLINE PyObject* __Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n); +#endif + +/* IncludeStringH.proto */ +#include + +/* BytesEquals.proto */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); + +/* UnicodeEquals.proto */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); + +/* fastcall.proto */ +#if CYTHON_AVOID_BORROWED_REFS + #define __Pyx_Arg_VARARGS(args, i) PySequence_GetItem(args, i) +#elif CYTHON_ASSUME_SAFE_MACROS + #define __Pyx_Arg_VARARGS(args, i) PyTuple_GET_ITEM(args, i) +#else + #define __Pyx_Arg_VARARGS(args, i) PyTuple_GetItem(args, i) +#endif +#if CYTHON_AVOID_BORROWED_REFS + #define __Pyx_Arg_NewRef_VARARGS(arg) __Pyx_NewRef(arg) + #define __Pyx_Arg_XDECREF_VARARGS(arg) Py_XDECREF(arg) +#else + #define __Pyx_Arg_NewRef_VARARGS(arg) arg + #define __Pyx_Arg_XDECREF_VARARGS(arg) +#endif +#define __Pyx_NumKwargs_VARARGS(kwds) PyDict_Size(kwds) +#define __Pyx_KwValues_VARARGS(args, nargs) NULL +#define __Pyx_GetKwValue_VARARGS(kw, kwvalues, s) __Pyx_PyDict_GetItemStrWithError(kw, s) +#define __Pyx_KwargsAsDict_VARARGS(kw, kwvalues) PyDict_Copy(kw) +#if CYTHON_METH_FASTCALL + #define __Pyx_Arg_FASTCALL(args, i) args[i] + #define __Pyx_NumKwargs_FASTCALL(kwds) PyTuple_GET_SIZE(kwds) + #define __Pyx_KwValues_FASTCALL(args, nargs) ((args) + (nargs)) + static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s); +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 + CYTHON_UNUSED static PyObject *__Pyx_KwargsAsDict_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues); + #else + #define __Pyx_KwargsAsDict_FASTCALL(kw, kwvalues) _PyStack_AsDict(kwvalues, kw) + #endif + #define __Pyx_Arg_NewRef_FASTCALL(arg) arg /* no-op, __Pyx_Arg_FASTCALL is direct and this needs + to have the same reference counting */ + #define __Pyx_Arg_XDECREF_FASTCALL(arg) +#else + #define __Pyx_Arg_FASTCALL __Pyx_Arg_VARARGS + #define __Pyx_NumKwargs_FASTCALL __Pyx_NumKwargs_VARARGS + #define __Pyx_KwValues_FASTCALL __Pyx_KwValues_VARARGS + #define __Pyx_GetKwValue_FASTCALL __Pyx_GetKwValue_VARARGS + #define __Pyx_KwargsAsDict_FASTCALL __Pyx_KwargsAsDict_VARARGS + #define __Pyx_Arg_NewRef_FASTCALL(arg) __Pyx_Arg_NewRef_VARARGS(arg) + #define __Pyx_Arg_XDECREF_FASTCALL(arg) __Pyx_Arg_XDECREF_VARARGS(arg) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS +#define __Pyx_ArgsSlice_VARARGS(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_VARARGS(args, start), stop - start) +#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_FASTCALL(args, start), stop - start) +#else +#define __Pyx_ArgsSlice_VARARGS(args, start, stop) PyTuple_GetSlice(args, start, stop) +#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) PyTuple_GetSlice(args, start, stop) +#endif + +/* RaiseArgTupleInvalid.proto */ +static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, + Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); + +/* RaiseDoubleKeywords.proto */ +static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); + +/* ParseKeywords.proto */ +static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject *const *kwvalues, + PyObject **argnames[], + PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, + const char* function_name); + +/* ArgTypeTest.proto */ +#define __Pyx_ArgTypeTest(obj, type, none_allowed, name, exact)\ + ((likely(__Pyx_IS_TYPE(obj, type) | (none_allowed && (obj == Py_None)))) ? 1 :\ + __Pyx__ArgTypeTest(obj, type, name, exact)) +static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact); + +/* IsLittleEndian.proto */ +static CYTHON_INLINE int __Pyx_Is_Little_Endian(void); + +/* BufferFormatCheck.proto */ +static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts); +static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx, + __Pyx_BufFmt_StackElem* stack, + __Pyx_TypeInfo* type); + +/* BufferGetAndValidate.proto */ +#define __Pyx_GetBufferAndValidate(buf, obj, dtype, flags, nd, cast, stack)\ + ((obj == Py_None || obj == NULL) ?\ + (__Pyx_ZeroBuffer(buf), 0) :\ + __Pyx__GetBufferAndValidate(buf, obj, dtype, flags, nd, cast, stack)) +static int __Pyx__GetBufferAndValidate(Py_buffer* buf, PyObject* obj, + __Pyx_TypeInfo* dtype, int flags, int nd, int cast, __Pyx_BufFmt_StackElem* stack); +static void __Pyx_ZeroBuffer(Py_buffer* buf); +static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info); +static Py_ssize_t __Pyx_minusones[] = { -1, -1, -1, -1, -1, -1, -1, -1 }; +static Py_ssize_t __Pyx_zeros[] = { 0, 0, 0, 0, 0, 0, 0, 0 }; + +/* PyDictVersioning.proto */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +#define __PYX_DICT_VERSION_INIT ((PY_UINT64_T) -1) +#define __PYX_GET_DICT_VERSION(dict) (((PyDictObject*)(dict))->ma_version_tag) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\ + (version_var) = __PYX_GET_DICT_VERSION(dict);\ + (cache_var) = (value); +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\ + (VAR) = __pyx_dict_cached_value;\ + } else {\ + (VAR) = __pyx_dict_cached_value = (LOOKUP);\ + __pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\ + }\ +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj); +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj); +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version); +#else +#define __PYX_GET_DICT_VERSION(dict) (0) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var) +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) (VAR) = (LOOKUP); +#endif + +/* GetModuleGlobalName.proto */ +#if CYTHON_USE_DICT_VERSIONS +#define __Pyx_GetModuleGlobalName(var, name) do {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\ + (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\ + __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} while(0) +#define __Pyx_GetModuleGlobalNameUncached(var, name) do {\ + PY_UINT64_T __pyx_dict_version;\ + PyObject *__pyx_dict_cached_value;\ + (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} while(0) +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value); +#else +#define __Pyx_GetModuleGlobalName(var, name) (var) = __Pyx__GetModuleGlobalName(name) +#define __Pyx_GetModuleGlobalNameUncached(var, name) (var) = __Pyx__GetModuleGlobalName(name) +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name); +#endif + +/* PyFunctionFastCall.proto */ +#if CYTHON_FAST_PYCALL +#if !CYTHON_VECTORCALL +#define __Pyx_PyFunction_FastCall(func, args, nargs)\ + __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL) +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs); +#endif +#define __Pyx_BUILD_ASSERT_EXPR(cond)\ + (sizeof(char [1 - 2*!(cond)]) - 1) +#ifndef Py_MEMBER_SIZE +#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member) +#endif +#if !CYTHON_VECTORCALL +#if PY_VERSION_HEX >= 0x03080000 + #include "frameobject.h" +#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API + #ifndef Py_BUILD_CORE + #define Py_BUILD_CORE 1 + #endif + #include "internal/pycore_frame.h" +#endif + #define __Pxy_PyFrame_Initialize_Offsets() + #define __Pyx_PyFrame_GetLocalsplus(frame) ((frame)->f_localsplus) +#else + static size_t __pyx_pyframe_localsplus_offset = 0; + #include "frameobject.h" + #define __Pxy_PyFrame_Initialize_Offsets()\ + ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\ + (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus))) + #define __Pyx_PyFrame_GetLocalsplus(frame)\ + (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset)) +#endif +#endif +#endif + +/* PyObjectCallMethO.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg); +#endif + +/* PyObjectFastCall.proto */ +#define __Pyx_PyObject_FastCall(func, args, nargs) __Pyx_PyObject_FastCallDict(func, args, (size_t)(nargs), NULL) +static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject **args, size_t nargs, PyObject *kwargs); + +/* ExtTypeTest.proto */ +static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); + +#define __Pyx_BufPtrStrided2d(type, buf, i0, s0, i1, s1) (type)((char*)buf + i0 * s0 + i1 * s1) +/* DictGetItem.proto */ +#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY +static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key); +#define __Pyx_PyObject_Dict_GetItem(obj, name)\ + (likely(PyDict_CheckExact(obj)) ?\ + __Pyx_PyDict_GetItem(obj, name) : PyObject_GetItem(obj, name)) +#else +#define __Pyx_PyDict_GetItem(d, key) PyObject_GetItem(d, key) +#define __Pyx_PyObject_Dict_GetItem(obj, name) PyObject_GetItem(obj, name) +#endif + +/* RaiseTooManyValuesToUnpack.proto */ +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); + +/* RaiseNeedMoreValuesToUnpack.proto */ +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); + +/* IterFinish.proto */ +static CYTHON_INLINE int __Pyx_IterFinish(void); + +/* UnpackItemEndCheck.proto */ +static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected); + +/* PySequenceContains.proto */ +static CYTHON_INLINE int __Pyx_PySequence_ContainsTF(PyObject* item, PyObject* seq, int eq) { + int result = PySequence_Contains(seq, item); + return unlikely(result < 0) ? result : (result == (eq == Py_EQ)); +} + +/* GetItemInt.proto */ +#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\ + (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\ + __Pyx_GetItemInt_Generic(o, to_py_func(i)))) +#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j); +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, + int is_list, int wraparound, int boundscheck); + +/* RaiseUnexpectedTypeError.proto */ +static int __Pyx_RaiseUnexpectedTypeError(const char *expected, PyObject *obj); + +/* AssertionsEnabled.proto */ +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag) + #define __Pyx_init_assertions_enabled() (0) + #define __pyx_assertions_enabled() (1) +#elif CYTHON_COMPILING_IN_LIMITED_API || (CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030C0000) + static int __pyx_assertions_enabled_flag; + #define __pyx_assertions_enabled() (__pyx_assertions_enabled_flag) + static int __Pyx_init_assertions_enabled(void) { + PyObject *builtins, *debug, *debug_str; + int flag; + builtins = PyEval_GetBuiltins(); + if (!builtins) goto bad; + debug_str = PyUnicode_FromStringAndSize("__debug__", 9); + if (!debug_str) goto bad; + debug = PyObject_GetItem(builtins, debug_str); + Py_DECREF(debug_str); + if (!debug) goto bad; + flag = PyObject_IsTrue(debug); + Py_DECREF(debug); + if (flag == -1) goto bad; + __pyx_assertions_enabled_flag = flag; + return 0; + bad: + __pyx_assertions_enabled_flag = 1; + return -1; + } +#else + #define __Pyx_init_assertions_enabled() (0) + #define __pyx_assertions_enabled() (!Py_OptimizeFlag) +#endif + +/* ListAppend.proto */ +#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS +static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) { + PyListObject* L = (PyListObject*) list; + Py_ssize_t len = Py_SIZE(list); + if (likely(L->allocated > len) & likely(len > (L->allocated >> 1))) { + Py_INCREF(x); + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 + L->ob_item[len] = x; + #else + PyList_SET_ITEM(list, len, x); + #endif + __Pyx_SET_SIZE(list, len + 1); + return 0; + } + return PyList_Append(list, x); +} +#else +#define __Pyx_PyList_Append(L,x) PyList_Append(L,x) +#endif + +/* PyObjectCallOneArg.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg); + +/* ObjectGetItem.proto */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject *key); +#else +#define __Pyx_PyObject_GetItem(obj, key) PyObject_GetItem(obj, key) +#endif + +/* SliceTupleAndList.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyList_GetSlice(PyObject* src, Py_ssize_t start, Py_ssize_t stop); +static CYTHON_INLINE PyObject* __Pyx_PyTuple_GetSlice(PyObject* src, Py_ssize_t start, Py_ssize_t stop); +#else +#define __Pyx_PyList_GetSlice(seq, start, stop) PySequence_GetSlice(seq, start, stop) +#define __Pyx_PyTuple_GetSlice(seq, start, stop) PySequence_GetSlice(seq, start, stop) +#endif + +/* SetItemInt.proto */ +#define __Pyx_SetItemInt(o, i, v, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_SetItemInt_Fast(o, (Py_ssize_t)i, v, is_list, wraparound, boundscheck) :\ + (is_list ? (PyErr_SetString(PyExc_IndexError, "list assignment index out of range"), -1) :\ + __Pyx_SetItemInt_Generic(o, to_py_func(i), v))) +static int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v); +static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v, + int is_list, int wraparound, int boundscheck); + +/* UnpackUnboundCMethod.proto */ +typedef struct { + PyObject *type; + PyObject **method_name; + PyCFunction func; + PyObject *method; + int flag; +} __Pyx_CachedCFunction; + +/* CallUnboundCMethod1.proto */ +static PyObject* __Pyx__CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg); +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg); +#else +#define __Pyx_CallUnboundCMethod1(cfunc, self, arg) __Pyx__CallUnboundCMethod1(cfunc, self, arg) +#endif + +/* PyIntBinop.proto */ +#if !CYTHON_COMPILING_IN_PYPY +static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check); +#else +#define __Pyx_PyInt_AddObjC(op1, op2, intval, inplace, zerodivision_check)\ + (inplace ? PyNumber_InPlaceAdd(op1, op2) : PyNumber_Add(op1, op2)) +#endif + +/* PyObjectCallNoArg.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func); + +/* PyObjectGetMethod.proto */ +static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method); + +/* PyObjectCallMethod0.proto */ +static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name); + +/* RaiseNoneIterError.proto */ +static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void); + +/* UnpackTupleError.proto */ +static void __Pyx_UnpackTupleError(PyObject *, Py_ssize_t index); + +/* UnpackTuple2.proto */ +#define __Pyx_unpack_tuple2(tuple, value1, value2, is_tuple, has_known_size, decref_tuple)\ + (likely(is_tuple || PyTuple_Check(tuple)) ?\ + (likely(has_known_size || PyTuple_GET_SIZE(tuple) == 2) ?\ + __Pyx_unpack_tuple2_exact(tuple, value1, value2, decref_tuple) :\ + (__Pyx_UnpackTupleError(tuple, 2), -1)) :\ + __Pyx_unpack_tuple2_generic(tuple, value1, value2, has_known_size, decref_tuple)) +static CYTHON_INLINE int __Pyx_unpack_tuple2_exact( + PyObject* tuple, PyObject** value1, PyObject** value2, int decref_tuple); +static int __Pyx_unpack_tuple2_generic( + PyObject* tuple, PyObject** value1, PyObject** value2, int has_known_size, int decref_tuple); + +/* dict_iter.proto */ +static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* dict, int is_dict, PyObject* method_name, + Py_ssize_t* p_orig_length, int* p_is_dict); +static CYTHON_INLINE int __Pyx_dict_iter_next(PyObject* dict_or_iter, Py_ssize_t orig_length, Py_ssize_t* ppos, + PyObject** pkey, PyObject** pvalue, PyObject** pitem, int is_dict); + +/* PyObjectFormatSimple.proto */ +#if CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + PyObject_Format(s, f)) +#elif PY_MAJOR_VERSION < 3 + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + likely(PyString_CheckExact(s)) ? PyUnicode_FromEncodedObject(s, NULL, "strict") :\ + PyObject_Format(s, f)) +#elif CYTHON_USE_TYPE_SLOTS + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + likely(PyLong_CheckExact(s)) ? PyLong_Type.tp_repr(s) :\ + likely(PyFloat_CheckExact(s)) ? PyFloat_Type.tp_repr(s) :\ + PyObject_Format(s, f)) +#else + #define __Pyx_PyObject_FormatSimple(s, f) (\ + likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\ + PyObject_Format(s, f)) +#endif + +/* JoinPyUnicode.proto */ +static PyObject* __Pyx_PyUnicode_Join(PyObject* value_tuple, Py_ssize_t value_count, Py_ssize_t result_ulength, + Py_UCS4 max_char); + +/* TypeImport.proto */ +#ifndef __PYX_HAVE_RT_ImportType_proto_3_0_11 +#define __PYX_HAVE_RT_ImportType_proto_3_0_11 +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L +#include +#endif +#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) || __cplusplus >= 201103L +#define __PYX_GET_STRUCT_ALIGNMENT_3_0_11(s) alignof(s) +#else +#define __PYX_GET_STRUCT_ALIGNMENT_3_0_11(s) sizeof(void*) +#endif +enum __Pyx_ImportType_CheckSize_3_0_11 { + __Pyx_ImportType_CheckSize_Error_3_0_11 = 0, + __Pyx_ImportType_CheckSize_Warn_3_0_11 = 1, + __Pyx_ImportType_CheckSize_Ignore_3_0_11 = 2 +}; +static PyTypeObject *__Pyx_ImportType_3_0_11(PyObject* module, const char *module_name, const char *class_name, size_t size, size_t alignment, enum __Pyx_ImportType_CheckSize_3_0_11 check_size); +#endif + +/* Import.proto */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); + +/* ImportDottedModule.proto */ +static PyObject *__Pyx_ImportDottedModule(PyObject *name, PyObject *parts_tuple); +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_ImportDottedModule_WalkParts(PyObject *module, PyObject *name, PyObject *parts_tuple); +#endif + +/* ImportFrom.proto */ +static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); + +/* IncludeStructmemberH.proto */ +#include + +/* FixUpExtensionType.proto */ +#if CYTHON_USE_TYPE_SPECS +static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type); +#endif + +/* FetchSharedCythonModule.proto */ +static PyObject *__Pyx_FetchSharedCythonABIModule(void); + +/* FetchCommonType.proto */ +#if !CYTHON_USE_TYPE_SPECS +static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type); +#else +static PyTypeObject* __Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases); +#endif + +/* PyMethodNew.proto */ +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) { + PyObject *typesModule=NULL, *methodType=NULL, *result=NULL; + CYTHON_UNUSED_VAR(typ); + if (!self) + return __Pyx_NewRef(func); + typesModule = PyImport_ImportModule("types"); + if (!typesModule) return NULL; + methodType = PyObject_GetAttrString(typesModule, "MethodType"); + Py_DECREF(typesModule); + if (!methodType) return NULL; + result = PyObject_CallFunctionObjArgs(methodType, func, self, NULL); + Py_DECREF(methodType); + return result; +} +#elif PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) { + CYTHON_UNUSED_VAR(typ); + if (!self) + return __Pyx_NewRef(func); + return PyMethod_New(func, self); +} +#else + #define __Pyx_PyMethod_New PyMethod_New +#endif + +/* PyVectorcallFastCallDict.proto */ +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw); +#endif + +/* CythonFunctionShared.proto */ +#define __Pyx_CyFunction_USED +#define __Pyx_CYFUNCTION_STATICMETHOD 0x01 +#define __Pyx_CYFUNCTION_CLASSMETHOD 0x02 +#define __Pyx_CYFUNCTION_CCLASS 0x04 +#define __Pyx_CYFUNCTION_COROUTINE 0x08 +#define __Pyx_CyFunction_GetClosure(f)\ + (((__pyx_CyFunctionObject *) (f))->func_closure) +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_CyFunction_GetClassObj(f)\ + (((__pyx_CyFunctionObject *) (f))->func_classobj) +#else + #define __Pyx_CyFunction_GetClassObj(f)\ + ((PyObject*) ((PyCMethodObject *) (f))->mm_class) +#endif +#define __Pyx_CyFunction_SetClassObj(f, classobj)\ + __Pyx__CyFunction_SetClassObj((__pyx_CyFunctionObject *) (f), (classobj)) +#define __Pyx_CyFunction_Defaults(type, f)\ + ((type *)(((__pyx_CyFunctionObject *) (f))->defaults)) +#define __Pyx_CyFunction_SetDefaultsGetter(f, g)\ + ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g) +typedef struct { +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject_HEAD + PyObject *func; +#elif PY_VERSION_HEX < 0x030900B1 + PyCFunctionObject func; +#else + PyCMethodObject func; +#endif +#if CYTHON_BACKPORT_VECTORCALL + __pyx_vectorcallfunc func_vectorcall; +#endif +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API + PyObject *func_weakreflist; +#endif + PyObject *func_dict; + PyObject *func_name; + PyObject *func_qualname; + PyObject *func_doc; + PyObject *func_globals; + PyObject *func_code; + PyObject *func_closure; +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + PyObject *func_classobj; +#endif + void *defaults; + int defaults_pyobjects; + size_t defaults_size; + int flags; + PyObject *defaults_tuple; + PyObject *defaults_kwdict; + PyObject *(*defaults_getter)(PyObject *); + PyObject *func_annotations; + PyObject *func_is_coroutine; +} __pyx_CyFunctionObject; +#undef __Pyx_CyOrPyCFunction_Check +#define __Pyx_CyFunction_Check(obj) __Pyx_TypeCheck(obj, __pyx_CyFunctionType) +#define __Pyx_CyOrPyCFunction_Check(obj) __Pyx_TypeCheck2(obj, __pyx_CyFunctionType, &PyCFunction_Type) +#define __Pyx_CyFunction_CheckExact(obj) __Pyx_IS_TYPE(obj, __pyx_CyFunctionType) +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc); +#undef __Pyx_IsSameCFunction +#define __Pyx_IsSameCFunction(func, cfunc) __Pyx__IsSameCyOrCFunction(func, cfunc) +static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject* op, PyMethodDef *ml, + int flags, PyObject* qualname, + PyObject *closure, + PyObject *module, PyObject *globals, + PyObject* code); +static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj); +static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m, + size_t size, + int pyobjects); +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m, + PyObject *tuple); +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m, + PyObject *dict); +static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m, + PyObject *dict); +static int __pyx_CyFunction_init(PyObject *module); +#if CYTHON_METH_FASTCALL +static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +#if CYTHON_BACKPORT_VECTORCALL +#define __Pyx_CyFunction_func_vectorcall(f) (((__pyx_CyFunctionObject*)f)->func_vectorcall) +#else +#define __Pyx_CyFunction_func_vectorcall(f) (((PyCFunctionObject*)f)->vectorcall) +#endif +#endif + +/* CythonFunction.proto */ +static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, + int flags, PyObject* qualname, + PyObject *closure, + PyObject *module, PyObject *globals, + PyObject* code); + +/* CLineInTraceback.proto */ +#ifdef CYTHON_CLINE_IN_TRACEBACK +#define __Pyx_CLineForTraceback(tstate, c_line) (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0) +#else +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line); +#endif + +/* CodeObjectCache.proto */ +#if !CYTHON_COMPILING_IN_LIMITED_API +typedef struct { + PyCodeObject* code_object; + int code_line; +} __Pyx_CodeObjectCacheEntry; +struct __Pyx_CodeObjectCache { + int count; + int max_count; + __Pyx_CodeObjectCacheEntry* entries; +}; +static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); +static PyCodeObject *__pyx_find_code_object(int code_line); +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); +#endif + +/* AddTraceback.proto */ +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename); + +/* BufferStructDeclare.proto */ +typedef struct { + Py_ssize_t shape, strides, suboffsets; +} __Pyx_Buf_DimInfo; +typedef struct { + size_t refcount; + Py_buffer pybuffer; +} __Pyx_Buffer; +typedef struct { + __Pyx_Buffer *rcbuffer; + char *data; + __Pyx_Buf_DimInfo diminfo[8]; +} __Pyx_LocalBuf_ND; + +#if PY_MAJOR_VERSION < 3 + static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags); + static void __Pyx_ReleaseBuffer(Py_buffer *view); +#else + #define __Pyx_GetBuffer PyObject_GetBuffer + #define __Pyx_ReleaseBuffer PyBuffer_Release +#endif + + +/* GCCDiagnostics.proto */ +#if !defined(__INTEL_COMPILER) && defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) +#define __Pyx_HAS_GCC_DIAGNOSTIC +#endif + +/* RealImag.proto */ +#if CYTHON_CCOMPLEX + #ifdef __cplusplus + #define __Pyx_CREAL(z) ((z).real()) + #define __Pyx_CIMAG(z) ((z).imag()) + #else + #define __Pyx_CREAL(z) (__real__(z)) + #define __Pyx_CIMAG(z) (__imag__(z)) + #endif +#else + #define __Pyx_CREAL(z) ((z).real) + #define __Pyx_CIMAG(z) ((z).imag) +#endif +#if defined(__cplusplus) && CYTHON_CCOMPLEX\ + && (defined(_WIN32) || defined(__clang__) || (defined(__GNUC__) && (__GNUC__ >= 5 || __GNUC__ == 4 && __GNUC_MINOR__ >= 4 )) || __cplusplus >= 201103) + #define __Pyx_SET_CREAL(z,x) ((z).real(x)) + #define __Pyx_SET_CIMAG(z,y) ((z).imag(y)) +#else + #define __Pyx_SET_CREAL(z,x) __Pyx_CREAL(z) = (x) + #define __Pyx_SET_CIMAG(z,y) __Pyx_CIMAG(z) = (y) +#endif + +/* Arithmetic.proto */ +#if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) + #define __Pyx_c_eq_float(a, b) ((a)==(b)) + #define __Pyx_c_sum_float(a, b) ((a)+(b)) + #define __Pyx_c_diff_float(a, b) ((a)-(b)) + #define __Pyx_c_prod_float(a, b) ((a)*(b)) + #define __Pyx_c_quot_float(a, b) ((a)/(b)) + #define __Pyx_c_neg_float(a) (-(a)) + #ifdef __cplusplus + #define __Pyx_c_is_zero_float(z) ((z)==(float)0) + #define __Pyx_c_conj_float(z) (::std::conj(z)) + #if 1 + #define __Pyx_c_abs_float(z) (::std::abs(z)) + #define __Pyx_c_pow_float(a, b) (::std::pow(a, b)) + #endif + #else + #define __Pyx_c_is_zero_float(z) ((z)==0) + #define __Pyx_c_conj_float(z) (conjf(z)) + #if 1 + #define __Pyx_c_abs_float(z) (cabsf(z)) + #define __Pyx_c_pow_float(a, b) (cpowf(a, b)) + #endif + #endif +#else + static CYTHON_INLINE int __Pyx_c_eq_float(__pyx_t_float_complex, __pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sum_float(__pyx_t_float_complex, __pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_diff_float(__pyx_t_float_complex, __pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prod_float(__pyx_t_float_complex, __pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quot_float(__pyx_t_float_complex, __pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_neg_float(__pyx_t_float_complex); + static CYTHON_INLINE int __Pyx_c_is_zero_float(__pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conj_float(__pyx_t_float_complex); + #if 1 + static CYTHON_INLINE float __Pyx_c_abs_float(__pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_pow_float(__pyx_t_float_complex, __pyx_t_float_complex); + #endif +#endif + +/* Arithmetic.proto */ +#if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) + #define __Pyx_c_eq_double(a, b) ((a)==(b)) + #define __Pyx_c_sum_double(a, b) ((a)+(b)) + #define __Pyx_c_diff_double(a, b) ((a)-(b)) + #define __Pyx_c_prod_double(a, b) ((a)*(b)) + #define __Pyx_c_quot_double(a, b) ((a)/(b)) + #define __Pyx_c_neg_double(a) (-(a)) + #ifdef __cplusplus + #define __Pyx_c_is_zero_double(z) ((z)==(double)0) + #define __Pyx_c_conj_double(z) (::std::conj(z)) + #if 1 + #define __Pyx_c_abs_double(z) (::std::abs(z)) + #define __Pyx_c_pow_double(a, b) (::std::pow(a, b)) + #endif + #else + #define __Pyx_c_is_zero_double(z) ((z)==0) + #define __Pyx_c_conj_double(z) (conj(z)) + #if 1 + #define __Pyx_c_abs_double(z) (cabs(z)) + #define __Pyx_c_pow_double(a, b) (cpow(a, b)) + #endif + #endif +#else + static CYTHON_INLINE int __Pyx_c_eq_double(__pyx_t_double_complex, __pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum_double(__pyx_t_double_complex, __pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff_double(__pyx_t_double_complex, __pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod_double(__pyx_t_double_complex, __pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot_double(__pyx_t_double_complex, __pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg_double(__pyx_t_double_complex); + static CYTHON_INLINE int __Pyx_c_is_zero_double(__pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj_double(__pyx_t_double_complex); + #if 1 + static CYTHON_INLINE double __Pyx_c_abs_double(__pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow_double(__pyx_t_double_complex, __pyx_t_double_complex); + #endif +#endif + +/* Arithmetic.proto */ +#if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) + #define __Pyx_c_eq_long__double(a, b) ((a)==(b)) + #define __Pyx_c_sum_long__double(a, b) ((a)+(b)) + #define __Pyx_c_diff_long__double(a, b) ((a)-(b)) + #define __Pyx_c_prod_long__double(a, b) ((a)*(b)) + #define __Pyx_c_quot_long__double(a, b) ((a)/(b)) + #define __Pyx_c_neg_long__double(a) (-(a)) + #ifdef __cplusplus + #define __Pyx_c_is_zero_long__double(z) ((z)==(long double)0) + #define __Pyx_c_conj_long__double(z) (::std::conj(z)) + #if 1 + #define __Pyx_c_abs_long__double(z) (::std::abs(z)) + #define __Pyx_c_pow_long__double(a, b) (::std::pow(a, b)) + #endif + #else + #define __Pyx_c_is_zero_long__double(z) ((z)==0) + #define __Pyx_c_conj_long__double(z) (conjl(z)) + #if 1 + #define __Pyx_c_abs_long__double(z) (cabsl(z)) + #define __Pyx_c_pow_long__double(a, b) (cpowl(a, b)) + #endif + #endif +#else + static CYTHON_INLINE int __Pyx_c_eq_long__double(__pyx_t_long_double_complex, __pyx_t_long_double_complex); + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_sum_long__double(__pyx_t_long_double_complex, __pyx_t_long_double_complex); + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_diff_long__double(__pyx_t_long_double_complex, __pyx_t_long_double_complex); + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_prod_long__double(__pyx_t_long_double_complex, __pyx_t_long_double_complex); + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_quot_long__double(__pyx_t_long_double_complex, __pyx_t_long_double_complex); + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_neg_long__double(__pyx_t_long_double_complex); + static CYTHON_INLINE int __Pyx_c_is_zero_long__double(__pyx_t_long_double_complex); + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_conj_long__double(__pyx_t_long_double_complex); + #if 1 + static CYTHON_INLINE long double __Pyx_c_abs_long__double(__pyx_t_long_double_complex); + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_pow_long__double(__pyx_t_long_double_complex, __pyx_t_long_double_complex); + #endif +#endif + +/* CIntFromPy.proto */ +static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_int(unsigned int value); + +/* CIntFromPy.proto */ +static CYTHON_INLINE unsigned int __Pyx_PyInt_As_unsigned_int(PyObject *); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_char(char value); + +/* CIntFromPy.proto */ +static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); + +/* FormatTypeName.proto */ +#if CYTHON_COMPILING_IN_LIMITED_API +typedef PyObject *__Pyx_TypeName; +#define __Pyx_FMT_TYPENAME "%U" +static __Pyx_TypeName __Pyx_PyType_GetName(PyTypeObject* tp); +#define __Pyx_DECREF_TypeName(obj) Py_XDECREF(obj) +#else +typedef const char *__Pyx_TypeName; +#define __Pyx_FMT_TYPENAME "%.200s" +#define __Pyx_PyType_GetName(tp) ((tp)->tp_name) +#define __Pyx_DECREF_TypeName(obj) +#endif + +/* FastTypeChecks.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) +#define __Pyx_TypeCheck2(obj, type1, type2) __Pyx_IsAnySubtype2(Py_TYPE(obj), (PyTypeObject *)type1, (PyTypeObject *)type2) +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2); +#else +#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) +#define __Pyx_TypeCheck2(obj, type1, type2) (PyObject_TypeCheck(obj, (PyTypeObject *)type1) || PyObject_TypeCheck(obj, (PyTypeObject *)type2)) +#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type) +#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2)) +#endif +#define __Pyx_PyErr_ExceptionMatches2(err1, err2) __Pyx_PyErr_GivenExceptionMatches2(__Pyx_PyErr_CurrentExceptionType(), err1, err2) +#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) + +/* CheckBinaryVersion.proto */ +static unsigned long __Pyx_get_runtime_version(void); +static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer); + +/* InitStrings.proto */ +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); + +/* #### Code section: module_declarations ### */ +static CYTHON_INLINE double __pyx_f_7cpython_7complex_7complex_4real_real(PyComplexObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE double __pyx_f_7cpython_7complex_7complex_4imag_imag(PyComplexObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE npy_intp __pyx_f_5numpy_5dtype_8itemsize_itemsize(PyArray_Descr *__pyx_v_self); /* proto*/ +static CYTHON_INLINE npy_intp __pyx_f_5numpy_5dtype_9alignment_alignment(PyArray_Descr *__pyx_v_self); /* proto*/ +static CYTHON_INLINE PyObject *__pyx_f_5numpy_5dtype_6fields_fields(PyArray_Descr *__pyx_v_self); /* proto*/ +static CYTHON_INLINE PyObject *__pyx_f_5numpy_5dtype_5names_names(PyArray_Descr *__pyx_v_self); /* proto*/ +static CYTHON_INLINE PyArray_ArrayDescr *__pyx_f_5numpy_5dtype_8subarray_subarray(PyArray_Descr *__pyx_v_self); /* proto*/ +static CYTHON_INLINE npy_uint64 __pyx_f_5numpy_5dtype_5flags_flags(PyArray_Descr *__pyx_v_self); /* proto*/ +static CYTHON_INLINE int __pyx_f_5numpy_9broadcast_7numiter_numiter(PyArrayMultiIterObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE npy_intp __pyx_f_5numpy_9broadcast_4size_size(PyArrayMultiIterObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE npy_intp __pyx_f_5numpy_9broadcast_5index_index(PyArrayMultiIterObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE int __pyx_f_5numpy_9broadcast_2nd_nd(PyArrayMultiIterObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE npy_intp *__pyx_f_5numpy_9broadcast_10dimensions_dimensions(PyArrayMultiIterObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE void **__pyx_f_5numpy_9broadcast_5iters_iters(PyArrayMultiIterObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE PyObject *__pyx_f_5numpy_7ndarray_4base_base(PyArrayObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE PyArray_Descr *__pyx_f_5numpy_7ndarray_5descr_descr(PyArrayObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE int __pyx_f_5numpy_7ndarray_4ndim_ndim(PyArrayObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_5shape_shape(PyArrayObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_7strides_strides(PyArrayObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE npy_intp __pyx_f_5numpy_7ndarray_4size_size(PyArrayObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE char *__pyx_f_5numpy_7ndarray_4data_data(PyArrayObject *__pyx_v_self); /* proto*/ + +/* Module declarations from "cython" */ + +/* Module declarations from "cpython.version" */ + +/* Module declarations from "__builtin__" */ + +/* Module declarations from "cpython.type" */ + +/* Module declarations from "libc.string" */ + +/* Module declarations from "libc.stdio" */ + +/* Module declarations from "cpython.object" */ + +/* Module declarations from "cpython.ref" */ + +/* Module declarations from "cpython.exc" */ + +/* Module declarations from "cpython.module" */ + +/* Module declarations from "cpython.mem" */ + +/* Module declarations from "cpython.tuple" */ + +/* Module declarations from "cpython.list" */ + +/* Module declarations from "cpython.sequence" */ + +/* Module declarations from "cpython.mapping" */ + +/* Module declarations from "cpython.iterator" */ + +/* Module declarations from "cpython.number" */ + +/* Module declarations from "cpython.int" */ + +/* Module declarations from "__builtin__" */ + +/* Module declarations from "cpython.bool" */ + +/* Module declarations from "cpython.long" */ + +/* Module declarations from "cpython.float" */ + +/* Module declarations from "__builtin__" */ + +/* Module declarations from "cpython.complex" */ + +/* Module declarations from "cpython.string" */ + +/* Module declarations from "libc.stddef" */ + +/* Module declarations from "cpython.unicode" */ + +/* Module declarations from "cpython.pyport" */ + +/* Module declarations from "cpython.dict" */ + +/* Module declarations from "cpython.instance" */ + +/* Module declarations from "cpython.function" */ + +/* Module declarations from "cpython.method" */ + +/* Module declarations from "cpython.weakref" */ + +/* Module declarations from "cpython.getargs" */ + +/* Module declarations from "cpython.pythread" */ + +/* Module declarations from "cpython.pystate" */ + +/* Module declarations from "cpython.cobject" */ + +/* Module declarations from "cpython.oldbuffer" */ + +/* Module declarations from "cpython.set" */ + +/* Module declarations from "cpython.buffer" */ + +/* Module declarations from "cpython.bytes" */ + +/* Module declarations from "cpython.pycapsule" */ + +/* Module declarations from "cpython.contextvars" */ + +/* Module declarations from "cpython" */ + +/* Module declarations from "numpy" */ + +/* Module declarations from "numpy" */ + +/* Module declarations from "libc.stdlib" */ + +/* Module declarations from "libc.math" */ + +/* Module declarations from "nw_ec_alignx" */ +static PyObject *__pyx_f_12nw_ec_alignx_minarg(float *); /*proto*/ +static PyObject *__pyx_f_12nw_ec_alignx_gappen(PyObject *, PyObject *); /*proto*/ +/* #### Code section: typeinfo ### */ +static __Pyx_TypeInfo __Pyx_TypeInfo_nn___pyx_t_12nw_ec_alignx_DTYPEF_t = { "DTYPEF_t", NULL, sizeof(__pyx_t_12nw_ec_alignx_DTYPEF_t), { 0 }, 0, 'R', 0, 0 }; +static __Pyx_TypeInfo __Pyx_TypeInfo_nn___pyx_t_12nw_ec_alignx_DTYPE_t = { "DTYPE_t", NULL, sizeof(__pyx_t_12nw_ec_alignx_DTYPE_t), { 0 }, 0, __PYX_IS_UNSIGNED(__pyx_t_12nw_ec_alignx_DTYPE_t) ? 'U' : 'I', __PYX_IS_UNSIGNED(__pyx_t_12nw_ec_alignx_DTYPE_t), 0 }; +/* #### Code section: before_global_var ### */ +#define __Pyx_MODULE_NAME "nw_ec_alignx" +extern int __pyx_module_is_main_nw_ec_alignx; +int __pyx_module_is_main_nw_ec_alignx = 0; + +/* Implementation of "nw_ec_alignx" */ +/* #### Code section: global_var ### */ +static PyObject *__pyx_builtin_range; +static PyObject *__pyx_builtin_AssertionError; +static PyObject *__pyx_builtin_open; +static PyObject *__pyx_builtin_ImportError; +/* #### Code section: string_decls ### */ +static const char __pyx_k_d[] = "d"; +static const char __pyx_k_f[] = "f"; +static const char __pyx_k_h[] = "h"; +static const char __pyx_k_i[] = "i"; +static const char __pyx_k_j[] = "j"; +static const char __pyx_k_k[] = "k"; +static const char __pyx_k_v[] = "v"; +static const char __pyx_k_w[] = "w"; +static const char __pyx_k_x[] = "x"; +static const char __pyx_k_y[] = "y"; +static const char __pyx_k_NW[] = "NW"; +static const char __pyx_k__3[] = "-.-.-"; +static const char __pyx_k__4[] = "..."; +static const char __pyx_k__5[] = ""; +static const char __pyx_k_fi[] = "fi"; +static const char __pyx_k_ii[] = "ii"; +static const char __pyx_k_l1[] = "l1"; +static const char __pyx_k_l2[] = "l2"; +static const char __pyx_k_li[] = "li"; +static const char __pyx_k_np[] = "np"; +static const char __pyx_k_ok[] = "ok"; +static const char __pyx_k__11[] = ":"; +static const char __pyx_k__26[] = "\t"; +static const char __pyx_k__27[] = "{}\t{}\n"; +static const char __pyx_k__28[] = "{}\t{}\t{}\n"; +static const char __pyx_k__29[] = "*"; +static const char __pyx_k__30[] = "."; +static const char __pyx_k__59[] = "?"; +static const char __pyx_k_arr[] = "arr"; +static const char __pyx_k_dic[] = "dic"; +static const char __pyx_k_ec1[] = "ec1"; +static const char __pyx_k_ec2[] = "ec2"; +static const char __pyx_k_eci[] = "eci"; +static const char __pyx_k_ecj[] = "ecj"; +static const char __pyx_k_ecs[] = "ecs"; +static const char __pyx_k_gap[] = "gap"; +static const char __pyx_k_ind[] = "ind"; +static const char __pyx_k_map[] = "map"; +static const char __pyx_k_mat[] = "mat"; +static const char __pyx_k_nws[] = "nws"; +static const char __pyx_k_sco[] = "sco"; +static const char __pyx_k_st1[] = "st1"; +static const char __pyx_k_st2[] = "st2"; +static const char __pyx_k_Pool[] = "Pool"; +static const char __pyx_k_decs[] = "decs"; +static const char __pyx_k_homo[] = "homo"; +static const char __pyx_k_ind1[] = "ind1"; +static const char __pyx_k_ind2[] = "ind2"; +static const char __pyx_k_line[] = "line"; +static const char __pyx_k_main[] = "__main__"; +static const char __pyx_k_mini[] = "mini"; +static const char __pyx_k_name[] = "__name__"; +static const char __pyx_k_open[] = "open"; +static const char __pyx_k_outf[] = "outf"; +static const char __pyx_k_pool[] = "pool"; +static const char __pyx_k_resd[] = "resd"; +static const char __pyx_k_seq1[] = "seq1"; +static const char __pyx_k_seq2[] = "seq2"; +static const char __pyx_k_seqs[] = "seqs"; +static const char __pyx_k_spec[] = "__spec__"; +static const char __pyx_k_test[] = "__test__"; +static const char __pyx_k_Array[] = "Array"; +static const char __pyx_k_DTYPE[] = "DTYPE"; +static const char __pyx_k_arrow[] = "arrow"; +static const char __pyx_k_aseq1[] = "aseq1"; +static const char __pyx_k_aseq2[] = "aseq2"; +static const char __pyx_k_binit[] = "binit"; +static const char __pyx_k_close[] = "close"; +static const char __pyx_k_dtype[] = "dtype"; +static const char __pyx_k_fhomo[] = "fhomo"; +static const char __pyx_k_fname[] = "fname"; +static const char __pyx_k_int32[] = "int32"; +static const char __pyx_k_items[] = "items"; +static const char __pyx_k_nproc[] = "nproc"; +static const char __pyx_k_numpy[] = "numpy"; +static const char __pyx_k_range[] = "range"; +static const char __pyx_k_rdict[] = "rdict"; +static const char __pyx_k_score[] = "score"; +static const char __pyx_k_seqs1[] = "seqs1"; +static const char __pyx_k_seqs2[] = "seqs2"; +static const char __pyx_k_thres[] = "thres"; +static const char __pyx_k_total[] = "total"; +static const char __pyx_k_write[] = "write"; +static const char __pyx_k_zeros[] = "zeros"; +static const char __pyx_k_DTYPEF[] = "DTYPEF"; +static const char __pyx_k_FastNW[] = "_FastNW"; +static const char __pyx_k_bblock[] = "bblock"; +static const char __pyx_k_ctypes[] = "ctypes"; +static const char __pyx_k_dotstr[] = "dotstr"; +static const char __pyx_k_format[] = "format"; +static const char __pyx_k_gapstr[] = "gapstr"; +static const char __pyx_k_import[] = "__import__"; +static const char __pyx_k_length[] = "length"; +static const char __pyx_k_minpos[] = "minpos"; +static const char __pyx_k_oscore[] = "oscore"; +static const char __pyx_k_pengap[] = "pengap"; +static const char __pyx_k_randum[] = "randum"; +static const char __pyx_k_resdic[] = "resdic"; +static const char __pyx_k_result[] = "result"; +static const char __pyx_k_scomat[] = "scomat"; +static const char __pyx_k_strfmt[] = "strfmt"; +static const char __pyx_k_update[] = "update"; +static const char __pyx_k_values[] = "values"; +static const char __pyx_k_c_float[] = "c_float"; +static const char __pyx_k_float32[] = "float32"; +static const char __pyx_k_float64[] = "float64"; +static const char __pyx_k_fpengap[] = "fpengap"; +static const char __pyx_k_get_obj[] = "get_obj"; +static const char __pyx_k_indices[] = "indices"; +static const char __pyx_k_partial[] = "partial"; +static const char __pyx_k_randnum[] = "randnum"; +static const char __pyx_k_resdict[] = "resdict"; +static const char __pyx_k_reshape[] = "reshape"; +static const char __pyx_k_scoring[] = "scoring"; +static const char __pyx_k_testval[] = "testval"; +static const char __pyx_k_wholedb[] = "wholedb"; +static const char __pyx_k_db_vs_db[] = "db_vs_db"; +static const char __pyx_k_fill_mat[] = "_fill_mat"; +static const char __pyx_k_indices2[] = "indices2"; +static const char __pyx_k_localize[] = "localize"; +static const char __pyx_k_scomat_2[] = "scomat_"; +static const char __pyx_k_scoremat[] = "scoremat"; +static const char __pyx_k_backtrace[] = "_backtrace"; +static const char __pyx_k_buffering[] = "buffering"; +static const char __pyx_k_chunksize[] = "chunksize"; +static const char __pyx_k_functools[] = "functools"; +static const char __pyx_k_processes[] = "processes"; +static const char __pyx_k_seq_vs_db[] = "seq_vs_db"; +static const char __pyx_k_align_func[] = "align_func"; +static const char __pyx_k_alldb_comp[] = "alldb_comp"; +static const char __pyx_k_frombuffer[] = "frombuffer"; +static const char __pyx_k_randfactor[] = "randfactor"; +static const char __pyx_k_store_dict[] = "store_dict"; +static const char __pyx_k_ImportError[] = "ImportError"; +static const char __pyx_k_scoring_gap[] = "scoring_gap"; +static const char __pyx_k_alldb_shared[] = "alldb_shared"; +static const char __pyx_k_ind_vs_alldb[] = "ind_vs_alldb"; +static const char __pyx_k_initializing[] = "_initializing"; +static const char __pyx_k_is_coroutine[] = "_is_coroutine"; +static const char __pyx_k_nw_ec_alignx[] = "nw_ec_alignx"; +static const char __pyx_k_class_getitem[] = "__class_getitem__"; +static const char __pyx_k_list_vs_alldb[] = "list_vs_alldb"; +static const char __pyx_k_AssertionError[] = "AssertionError"; +static const char __pyx_k_multiprocessing[] = "multiprocessing"; +static const char __pyx_k_shared_sco_base[] = "shared_sco_base"; +static const char __pyx_k_nw_ec_alignx_pyx[] = "nw_ec_alignx.pyx"; +static const char __pyx_k_create_global_arr[] = "_create_global_arr"; +static const char __pyx_k_asyncio_coroutines[] = "asyncio.coroutines"; +static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback"; +static const char __pyx_k_fhomo_fpengap_must_sum_aprox_1[] = "fhomo + fpengap must sum aprox. 1"; +static const char __pyx_k_Needelman_Wunsh_algorithm_for_EC[] = "Needelman-Wunsh algorithm for EC number alignment - Cython version.\nThis version performs ~30 times fastter than the original pure python/numpy\nimplementation."; +static const char __pyx_k_The_aligned_sequences_must_be_of[] = "The aligned sequences must be of the same length"; +static const char __pyx_k_numpy__core_multiarray_failed_to[] = "numpy._core.multiarray failed to import"; +static const char __pyx_k_numpy__core_umath_failed_to_impo[] = "numpy._core.umath failed to import"; +/* #### Code section: decls ### */ +static PyObject *__pyx_pf_12nw_ec_alignx__FastNW(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_mat, PyObject *__pyx_v_ecs, PyObject *__pyx_v_seq1, PyObject *__pyx_v_seq2, float __pyx_v_gap); /* proto */ +static PyObject *__pyx_pf_12nw_ec_alignx_2scoring(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_mat, PyObject *__pyx_v_ecs, PyObject *__pyx_v_seq1, PyObject *__pyx_v_seq2, float __pyx_v_gap, float __pyx_v_fhomo, float __pyx_v_fpengap); /* proto */ +static PyObject *__pyx_pf_12nw_ec_alignx_4_backtrace(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_arrow, PyObject *__pyx_v_seq1, PyObject *__pyx_v_seq2); /* proto */ +static PyObject *__pyx_pf_12nw_ec_alignx_6NW(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_mat, PyObject *__pyx_v_ecs, PyObject *__pyx_v_seq1, PyObject *__pyx_v_seq2, float __pyx_v_gap, PyBoolObject *__pyx_v_localize, PyBoolObject *__pyx_v_nws, PyBoolObject *__pyx_v_strfmt, PyBoolObject *__pyx_v_oscore); /* proto */ +static PyObject *__pyx_pf_12nw_ec_alignx_8ind_vs_alldb(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_ind, PyObject *__pyx_v_seqs, PyArrayObject *__pyx_v_mat, PyObject *__pyx_v_decs, float __pyx_v_thres, PyBoolObject *__pyx_v_wholedb, PyBoolObject *__pyx_v_localize, PyBoolObject *__pyx_v_oscore); /* proto */ +static PyObject *__pyx_pf_12nw_ec_alignx_10seq_vs_db(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_seq1, PyObject *__pyx_v_seqs, PyArrayObject *__pyx_v_mat, PyObject *__pyx_v_decs, float __pyx_v_thres, PyBoolObject *__pyx_v_localize, PyBoolObject *__pyx_v_oscore); /* proto */ +static PyObject *__pyx_pf_12nw_ec_alignx_12db_vs_db(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_seqs1, PyObject *__pyx_v_seqs2, PyArrayObject *__pyx_v_mat, PyObject *__pyx_v_decs, float __pyx_v_thres, PyBoolObject *__pyx_v_localize, PyBoolObject *__pyx_v_oscore, int __pyx_v_nproc); /* proto */ +static PyObject *__pyx_pf_12nw_ec_alignx_14alldb_comp(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_seqs, PyArrayObject *__pyx_v_mat, PyObject *__pyx_v_decs, float __pyx_v_thres, PyBoolObject *__pyx_v_localize, PyBoolObject *__pyx_v_oscore, int __pyx_v_nproc); /* proto */ +static PyObject *__pyx_pf_12nw_ec_alignx_16list_vs_alldb(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_seqs, PyArrayObject *__pyx_v_mat, PyObject *__pyx_v_decs, float __pyx_v_thres, PyBoolObject *__pyx_v_localize, PyBoolObject *__pyx_v_wholedb, PyBoolObject *__pyx_v_oscore, int __pyx_v_nproc); /* proto */ +static PyObject *__pyx_pf_12nw_ec_alignx_18alldb_shared(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_seqs, PyObject *__pyx_v_mat, PyObject *__pyx_v_decs, PyObject *__pyx_v_thres, PyObject *__pyx_v_localize, PyObject *__pyx_v_nproc); /* proto */ +static PyObject *__pyx_pf_12nw_ec_alignx_20_create_global_arr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_total); /* proto */ +static PyObject *__pyx_pf_12nw_ec_alignx_22_fill_mat(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_ind, PyObject *__pyx_v_seqs, PyObject *__pyx_v_mat, PyObject *__pyx_v_decs, PyObject *__pyx_v_localize, CYTHON_UNUSED float __pyx_v_thres); /* proto */ +static PyObject *__pyx_pf_12nw_ec_alignx_24store_dict(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_fname, PyObject *__pyx_v_rdict, PyObject *__pyx_v_indices, PyObject *__pyx_v_indices2); /* proto */ +static __Pyx_CachedCFunction __pyx_umethod_PyDict_Type_update = {0, 0, 0, 0, 0}; +/* #### Code section: late_includes ### */ +/* #### Code section: module_state ### */ +typedef struct { + PyObject *__pyx_d; + PyObject *__pyx_b; + PyObject *__pyx_cython_runtime; + PyObject *__pyx_empty_tuple; + PyObject *__pyx_empty_bytes; + PyObject *__pyx_empty_unicode; + #ifdef __Pyx_CyFunction_USED + PyTypeObject *__pyx_CyFunctionType; + #endif + #ifdef __Pyx_FusedFunction_USED + PyTypeObject *__pyx_FusedFunctionType; + #endif + #ifdef __Pyx_Generator_USED + PyTypeObject *__pyx_GeneratorType; + #endif + #ifdef __Pyx_IterableCoroutine_USED + PyTypeObject *__pyx_IterableCoroutineType; + #endif + #ifdef __Pyx_Coroutine_USED + PyTypeObject *__pyx_CoroutineAwaitType; + #endif + #ifdef __Pyx_Coroutine_USED + PyTypeObject *__pyx_CoroutineType; + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + PyTypeObject *__pyx_ptype_7cpython_4type_type; + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + PyTypeObject *__pyx_ptype_7cpython_4bool_bool; + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + PyTypeObject *__pyx_ptype_7cpython_7complex_complex; + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + PyTypeObject *__pyx_ptype_5numpy_dtype; + PyTypeObject *__pyx_ptype_5numpy_flatiter; + PyTypeObject *__pyx_ptype_5numpy_broadcast; + PyTypeObject *__pyx_ptype_5numpy_ndarray; + PyTypeObject *__pyx_ptype_5numpy_generic; + PyTypeObject *__pyx_ptype_5numpy_number; + PyTypeObject *__pyx_ptype_5numpy_integer; + PyTypeObject *__pyx_ptype_5numpy_signedinteger; + PyTypeObject *__pyx_ptype_5numpy_unsignedinteger; + PyTypeObject *__pyx_ptype_5numpy_inexact; + PyTypeObject *__pyx_ptype_5numpy_floating; + PyTypeObject *__pyx_ptype_5numpy_complexfloating; + PyTypeObject *__pyx_ptype_5numpy_flexible; + PyTypeObject *__pyx_ptype_5numpy_character; + PyTypeObject *__pyx_ptype_5numpy_ufunc; + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + PyObject *__pyx_n_s_Array; + PyObject *__pyx_n_s_AssertionError; + PyObject *__pyx_n_s_DTYPE; + PyObject *__pyx_n_s_DTYPEF; + PyObject *__pyx_n_s_FastNW; + PyObject *__pyx_n_s_ImportError; + PyObject *__pyx_n_s_NW; + PyObject *__pyx_n_s_Pool; + PyObject *__pyx_kp_u_The_aligned_sequences_must_be_of; + PyObject *__pyx_kp_u__11; + PyObject *__pyx_kp_u__26; + PyObject *__pyx_kp_u__27; + PyObject *__pyx_kp_u__28; + PyObject *__pyx_n_s__29; + PyObject *__pyx_kp_u__3; + PyObject *__pyx_kp_u__30; + PyObject *__pyx_kp_u__4; + PyObject *__pyx_kp_u__5; + PyObject *__pyx_n_s__59; + PyObject *__pyx_n_s_align_func; + PyObject *__pyx_n_s_alldb_comp; + PyObject *__pyx_n_s_alldb_shared; + PyObject *__pyx_n_s_arr; + PyObject *__pyx_n_s_arrow; + PyObject *__pyx_n_s_aseq1; + PyObject *__pyx_n_s_aseq2; + PyObject *__pyx_n_s_asyncio_coroutines; + PyObject *__pyx_n_s_backtrace; + PyObject *__pyx_n_s_bblock; + PyObject *__pyx_n_s_binit; + PyObject *__pyx_n_s_buffering; + PyObject *__pyx_n_s_c_float; + PyObject *__pyx_n_s_chunksize; + PyObject *__pyx_n_s_class_getitem; + PyObject *__pyx_n_s_cline_in_traceback; + PyObject *__pyx_n_s_close; + PyObject *__pyx_n_s_create_global_arr; + PyObject *__pyx_n_s_ctypes; + PyObject *__pyx_n_s_d; + PyObject *__pyx_n_s_db_vs_db; + PyObject *__pyx_n_s_decs; + PyObject *__pyx_n_s_dic; + PyObject *__pyx_n_s_dotstr; + PyObject *__pyx_n_s_dtype; + PyObject *__pyx_n_s_ec1; + PyObject *__pyx_n_s_ec2; + PyObject *__pyx_n_s_eci; + PyObject *__pyx_n_s_ecj; + PyObject *__pyx_n_s_ecs; + PyObject *__pyx_n_s_f; + PyObject *__pyx_n_s_fhomo; + PyObject *__pyx_kp_u_fhomo_fpengap_must_sum_aprox_1; + PyObject *__pyx_n_s_fi; + PyObject *__pyx_n_s_fill_mat; + PyObject *__pyx_n_s_float32; + PyObject *__pyx_n_s_float64; + PyObject *__pyx_n_s_fname; + PyObject *__pyx_n_s_format; + PyObject *__pyx_n_s_fpengap; + PyObject *__pyx_n_s_frombuffer; + PyObject *__pyx_n_s_functools; + PyObject *__pyx_n_s_gap; + PyObject *__pyx_n_s_gapstr; + PyObject *__pyx_n_s_get_obj; + PyObject *__pyx_n_s_h; + PyObject *__pyx_n_s_homo; + PyObject *__pyx_n_s_i; + PyObject *__pyx_n_s_ii; + PyObject *__pyx_n_s_import; + PyObject *__pyx_n_s_ind; + PyObject *__pyx_n_s_ind1; + PyObject *__pyx_n_s_ind2; + PyObject *__pyx_n_s_ind_vs_alldb; + PyObject *__pyx_n_s_indices; + PyObject *__pyx_n_s_indices2; + PyObject *__pyx_n_s_initializing; + PyObject *__pyx_n_s_int32; + PyObject *__pyx_n_s_is_coroutine; + PyObject *__pyx_n_s_items; + PyObject *__pyx_n_s_j; + PyObject *__pyx_n_s_k; + PyObject *__pyx_n_s_l1; + PyObject *__pyx_n_s_l2; + PyObject *__pyx_n_s_length; + PyObject *__pyx_n_s_li; + PyObject *__pyx_n_s_line; + PyObject *__pyx_n_s_list_vs_alldb; + PyObject *__pyx_n_s_localize; + PyObject *__pyx_n_s_main; + PyObject *__pyx_n_s_map; + PyObject *__pyx_n_s_mat; + PyObject *__pyx_n_s_mini; + PyObject *__pyx_n_s_minpos; + PyObject *__pyx_n_s_multiprocessing; + PyObject *__pyx_n_s_name; + PyObject *__pyx_n_s_np; + PyObject *__pyx_n_s_nproc; + PyObject *__pyx_n_s_numpy; + PyObject *__pyx_kp_u_numpy__core_multiarray_failed_to; + PyObject *__pyx_kp_u_numpy__core_umath_failed_to_impo; + PyObject *__pyx_n_s_nw_ec_alignx; + PyObject *__pyx_kp_s_nw_ec_alignx_pyx; + PyObject *__pyx_n_s_nws; + PyObject *__pyx_n_s_ok; + PyObject *__pyx_n_s_open; + PyObject *__pyx_n_s_oscore; + PyObject *__pyx_n_s_outf; + PyObject *__pyx_n_s_partial; + PyObject *__pyx_n_s_pengap; + PyObject *__pyx_n_s_pool; + PyObject *__pyx_n_s_processes; + PyObject *__pyx_n_s_randfactor; + PyObject *__pyx_n_s_randnum; + PyObject *__pyx_n_s_randum; + PyObject *__pyx_n_s_range; + PyObject *__pyx_n_s_rdict; + PyObject *__pyx_n_s_resd; + PyObject *__pyx_n_s_resdic; + PyObject *__pyx_n_s_resdict; + PyObject *__pyx_n_s_reshape; + PyObject *__pyx_n_s_result; + PyObject *__pyx_n_s_sco; + PyObject *__pyx_n_s_scomat; + PyObject *__pyx_n_s_scomat_2; + PyObject *__pyx_n_s_score; + PyObject *__pyx_n_s_scoremat; + PyObject *__pyx_n_s_scoring; + PyObject *__pyx_n_s_scoring_gap; + PyObject *__pyx_n_s_seq1; + PyObject *__pyx_n_s_seq2; + PyObject *__pyx_n_s_seq_vs_db; + PyObject *__pyx_n_s_seqs; + PyObject *__pyx_n_s_seqs1; + PyObject *__pyx_n_s_seqs2; + PyObject *__pyx_n_s_shared_sco_base; + PyObject *__pyx_n_s_spec; + PyObject *__pyx_n_s_st1; + PyObject *__pyx_n_s_st2; + PyObject *__pyx_n_s_store_dict; + PyObject *__pyx_n_s_strfmt; + PyObject *__pyx_n_s_test; + PyObject *__pyx_n_s_testval; + PyObject *__pyx_n_s_thres; + PyObject *__pyx_n_s_total; + PyObject *__pyx_n_s_update; + PyObject *__pyx_n_s_v; + PyObject *__pyx_n_s_values; + PyObject *__pyx_n_u_w; + PyObject *__pyx_n_s_wholedb; + PyObject *__pyx_n_s_write; + PyObject *__pyx_n_s_x; + PyObject *__pyx_n_s_y; + PyObject *__pyx_n_s_zeros; + PyObject *__pyx_float_1_0; + PyObject *__pyx_float_0_05; + PyObject *__pyx_float_0_95; + PyObject *__pyx_int_1; + PyObject *__pyx_int_2; + PyObject *__pyx_int_1000; + PyObject *__pyx_int_neg_1; + PyBoolObject *__pyx_k__7; + PyBoolObject *__pyx_k__8; + PyBoolObject *__pyx_k__9; + PyBoolObject *__pyx_k__10; + PyBoolObject *__pyx_k__12; + PyBoolObject *__pyx_k__13; + PyBoolObject *__pyx_k__14; + PyBoolObject *__pyx_k__15; + PyBoolObject *__pyx_k__16; + PyBoolObject *__pyx_k__17; + PyBoolObject *__pyx_k__18; + PyBoolObject *__pyx_k__19; + PyBoolObject *__pyx_k__20; + PyBoolObject *__pyx_k__21; + PyBoolObject *__pyx_k__22; + PyBoolObject *__pyx_k__23; + PyObject *__pyx_tuple_; + PyObject *__pyx_slice__6; + PyObject *__pyx_tuple__2; + PyObject *__pyx_slice__24; + PyObject *__pyx_tuple__25; + PyObject *__pyx_tuple__31; + PyObject *__pyx_tuple__33; + PyObject *__pyx_tuple__35; + PyObject *__pyx_tuple__37; + PyObject *__pyx_tuple__39; + PyObject *__pyx_tuple__41; + PyObject *__pyx_tuple__43; + PyObject *__pyx_tuple__45; + PyObject *__pyx_tuple__47; + PyObject *__pyx_tuple__49; + PyObject *__pyx_tuple__51; + PyObject *__pyx_tuple__52; + PyObject *__pyx_tuple__54; + PyObject *__pyx_tuple__56; + PyObject *__pyx_tuple__58; + PyObject *__pyx_codeobj__32; + PyObject *__pyx_codeobj__34; + PyObject *__pyx_codeobj__36; + PyObject *__pyx_codeobj__38; + PyObject *__pyx_codeobj__40; + PyObject *__pyx_codeobj__42; + PyObject *__pyx_codeobj__44; + PyObject *__pyx_codeobj__46; + PyObject *__pyx_codeobj__48; + PyObject *__pyx_codeobj__50; + PyObject *__pyx_codeobj__53; + PyObject *__pyx_codeobj__55; + PyObject *__pyx_codeobj__57; +} __pyx_mstate; + +#if CYTHON_USE_MODULE_STATE +#ifdef __cplusplus +namespace { + extern struct PyModuleDef __pyx_moduledef; +} /* anonymous namespace */ +#else +static struct PyModuleDef __pyx_moduledef; +#endif + +#define __pyx_mstate(o) ((__pyx_mstate *)__Pyx_PyModule_GetState(o)) + +#define __pyx_mstate_global (__pyx_mstate(PyState_FindModule(&__pyx_moduledef))) + +#define __pyx_m (PyState_FindModule(&__pyx_moduledef)) +#else +static __pyx_mstate __pyx_mstate_global_static = +#ifdef __cplusplus + {}; +#else + {0}; +#endif +static __pyx_mstate *__pyx_mstate_global = &__pyx_mstate_global_static; +#endif +/* #### Code section: module_state_clear ### */ +#if CYTHON_USE_MODULE_STATE +static int __pyx_m_clear(PyObject *m) { + __pyx_mstate *clear_module_state = __pyx_mstate(m); + if (!clear_module_state) return 0; + Py_CLEAR(clear_module_state->__pyx_d); + Py_CLEAR(clear_module_state->__pyx_b); + Py_CLEAR(clear_module_state->__pyx_cython_runtime); + Py_CLEAR(clear_module_state->__pyx_empty_tuple); + Py_CLEAR(clear_module_state->__pyx_empty_bytes); + Py_CLEAR(clear_module_state->__pyx_empty_unicode); + #ifdef __Pyx_CyFunction_USED + Py_CLEAR(clear_module_state->__pyx_CyFunctionType); + #endif + #ifdef __Pyx_FusedFunction_USED + Py_CLEAR(clear_module_state->__pyx_FusedFunctionType); + #endif + Py_CLEAR(clear_module_state->__pyx_ptype_7cpython_4type_type); + Py_CLEAR(clear_module_state->__pyx_ptype_7cpython_4bool_bool); + Py_CLEAR(clear_module_state->__pyx_ptype_7cpython_7complex_complex); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_dtype); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_flatiter); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_broadcast); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_ndarray); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_generic); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_number); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_integer); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_signedinteger); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_unsignedinteger); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_inexact); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_floating); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_complexfloating); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_flexible); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_character); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_ufunc); + Py_CLEAR(clear_module_state->__pyx_n_s_Array); + Py_CLEAR(clear_module_state->__pyx_n_s_AssertionError); + Py_CLEAR(clear_module_state->__pyx_n_s_DTYPE); + Py_CLEAR(clear_module_state->__pyx_n_s_DTYPEF); + Py_CLEAR(clear_module_state->__pyx_n_s_FastNW); + Py_CLEAR(clear_module_state->__pyx_n_s_ImportError); + Py_CLEAR(clear_module_state->__pyx_n_s_NW); + Py_CLEAR(clear_module_state->__pyx_n_s_Pool); + Py_CLEAR(clear_module_state->__pyx_kp_u_The_aligned_sequences_must_be_of); + Py_CLEAR(clear_module_state->__pyx_kp_u__11); + Py_CLEAR(clear_module_state->__pyx_kp_u__26); + Py_CLEAR(clear_module_state->__pyx_kp_u__27); + Py_CLEAR(clear_module_state->__pyx_kp_u__28); + Py_CLEAR(clear_module_state->__pyx_n_s__29); + Py_CLEAR(clear_module_state->__pyx_kp_u__3); + Py_CLEAR(clear_module_state->__pyx_kp_u__30); + Py_CLEAR(clear_module_state->__pyx_kp_u__4); + Py_CLEAR(clear_module_state->__pyx_kp_u__5); + Py_CLEAR(clear_module_state->__pyx_n_s__59); + Py_CLEAR(clear_module_state->__pyx_n_s_align_func); + Py_CLEAR(clear_module_state->__pyx_n_s_alldb_comp); + Py_CLEAR(clear_module_state->__pyx_n_s_alldb_shared); + Py_CLEAR(clear_module_state->__pyx_n_s_arr); + Py_CLEAR(clear_module_state->__pyx_n_s_arrow); + Py_CLEAR(clear_module_state->__pyx_n_s_aseq1); + Py_CLEAR(clear_module_state->__pyx_n_s_aseq2); + Py_CLEAR(clear_module_state->__pyx_n_s_asyncio_coroutines); + Py_CLEAR(clear_module_state->__pyx_n_s_backtrace); + Py_CLEAR(clear_module_state->__pyx_n_s_bblock); + Py_CLEAR(clear_module_state->__pyx_n_s_binit); + Py_CLEAR(clear_module_state->__pyx_n_s_buffering); + Py_CLEAR(clear_module_state->__pyx_n_s_c_float); + Py_CLEAR(clear_module_state->__pyx_n_s_chunksize); + Py_CLEAR(clear_module_state->__pyx_n_s_class_getitem); + Py_CLEAR(clear_module_state->__pyx_n_s_cline_in_traceback); + Py_CLEAR(clear_module_state->__pyx_n_s_close); + Py_CLEAR(clear_module_state->__pyx_n_s_create_global_arr); + Py_CLEAR(clear_module_state->__pyx_n_s_ctypes); + Py_CLEAR(clear_module_state->__pyx_n_s_d); + Py_CLEAR(clear_module_state->__pyx_n_s_db_vs_db); + Py_CLEAR(clear_module_state->__pyx_n_s_decs); + Py_CLEAR(clear_module_state->__pyx_n_s_dic); + Py_CLEAR(clear_module_state->__pyx_n_s_dotstr); + Py_CLEAR(clear_module_state->__pyx_n_s_dtype); + Py_CLEAR(clear_module_state->__pyx_n_s_ec1); + Py_CLEAR(clear_module_state->__pyx_n_s_ec2); + Py_CLEAR(clear_module_state->__pyx_n_s_eci); + Py_CLEAR(clear_module_state->__pyx_n_s_ecj); + Py_CLEAR(clear_module_state->__pyx_n_s_ecs); + Py_CLEAR(clear_module_state->__pyx_n_s_f); + Py_CLEAR(clear_module_state->__pyx_n_s_fhomo); + Py_CLEAR(clear_module_state->__pyx_kp_u_fhomo_fpengap_must_sum_aprox_1); + Py_CLEAR(clear_module_state->__pyx_n_s_fi); + Py_CLEAR(clear_module_state->__pyx_n_s_fill_mat); + Py_CLEAR(clear_module_state->__pyx_n_s_float32); + Py_CLEAR(clear_module_state->__pyx_n_s_float64); + Py_CLEAR(clear_module_state->__pyx_n_s_fname); + Py_CLEAR(clear_module_state->__pyx_n_s_format); + Py_CLEAR(clear_module_state->__pyx_n_s_fpengap); + Py_CLEAR(clear_module_state->__pyx_n_s_frombuffer); + Py_CLEAR(clear_module_state->__pyx_n_s_functools); + Py_CLEAR(clear_module_state->__pyx_n_s_gap); + Py_CLEAR(clear_module_state->__pyx_n_s_gapstr); + Py_CLEAR(clear_module_state->__pyx_n_s_get_obj); + Py_CLEAR(clear_module_state->__pyx_n_s_h); + Py_CLEAR(clear_module_state->__pyx_n_s_homo); + Py_CLEAR(clear_module_state->__pyx_n_s_i); + Py_CLEAR(clear_module_state->__pyx_n_s_ii); + Py_CLEAR(clear_module_state->__pyx_n_s_import); + Py_CLEAR(clear_module_state->__pyx_n_s_ind); + Py_CLEAR(clear_module_state->__pyx_n_s_ind1); + Py_CLEAR(clear_module_state->__pyx_n_s_ind2); + Py_CLEAR(clear_module_state->__pyx_n_s_ind_vs_alldb); + Py_CLEAR(clear_module_state->__pyx_n_s_indices); + Py_CLEAR(clear_module_state->__pyx_n_s_indices2); + Py_CLEAR(clear_module_state->__pyx_n_s_initializing); + Py_CLEAR(clear_module_state->__pyx_n_s_int32); + Py_CLEAR(clear_module_state->__pyx_n_s_is_coroutine); + Py_CLEAR(clear_module_state->__pyx_n_s_items); + Py_CLEAR(clear_module_state->__pyx_n_s_j); + Py_CLEAR(clear_module_state->__pyx_n_s_k); + Py_CLEAR(clear_module_state->__pyx_n_s_l1); + Py_CLEAR(clear_module_state->__pyx_n_s_l2); + Py_CLEAR(clear_module_state->__pyx_n_s_length); + Py_CLEAR(clear_module_state->__pyx_n_s_li); + Py_CLEAR(clear_module_state->__pyx_n_s_line); + Py_CLEAR(clear_module_state->__pyx_n_s_list_vs_alldb); + Py_CLEAR(clear_module_state->__pyx_n_s_localize); + Py_CLEAR(clear_module_state->__pyx_n_s_main); + Py_CLEAR(clear_module_state->__pyx_n_s_map); + Py_CLEAR(clear_module_state->__pyx_n_s_mat); + Py_CLEAR(clear_module_state->__pyx_n_s_mini); + Py_CLEAR(clear_module_state->__pyx_n_s_minpos); + Py_CLEAR(clear_module_state->__pyx_n_s_multiprocessing); + Py_CLEAR(clear_module_state->__pyx_n_s_name); + Py_CLEAR(clear_module_state->__pyx_n_s_np); + Py_CLEAR(clear_module_state->__pyx_n_s_nproc); + Py_CLEAR(clear_module_state->__pyx_n_s_numpy); + Py_CLEAR(clear_module_state->__pyx_kp_u_numpy__core_multiarray_failed_to); + Py_CLEAR(clear_module_state->__pyx_kp_u_numpy__core_umath_failed_to_impo); + Py_CLEAR(clear_module_state->__pyx_n_s_nw_ec_alignx); + Py_CLEAR(clear_module_state->__pyx_kp_s_nw_ec_alignx_pyx); + Py_CLEAR(clear_module_state->__pyx_n_s_nws); + Py_CLEAR(clear_module_state->__pyx_n_s_ok); + Py_CLEAR(clear_module_state->__pyx_n_s_open); + Py_CLEAR(clear_module_state->__pyx_n_s_oscore); + Py_CLEAR(clear_module_state->__pyx_n_s_outf); + Py_CLEAR(clear_module_state->__pyx_n_s_partial); + Py_CLEAR(clear_module_state->__pyx_n_s_pengap); + Py_CLEAR(clear_module_state->__pyx_n_s_pool); + Py_CLEAR(clear_module_state->__pyx_n_s_processes); + Py_CLEAR(clear_module_state->__pyx_n_s_randfactor); + Py_CLEAR(clear_module_state->__pyx_n_s_randnum); + Py_CLEAR(clear_module_state->__pyx_n_s_randum); + Py_CLEAR(clear_module_state->__pyx_n_s_range); + Py_CLEAR(clear_module_state->__pyx_n_s_rdict); + Py_CLEAR(clear_module_state->__pyx_n_s_resd); + Py_CLEAR(clear_module_state->__pyx_n_s_resdic); + Py_CLEAR(clear_module_state->__pyx_n_s_resdict); + Py_CLEAR(clear_module_state->__pyx_n_s_reshape); + Py_CLEAR(clear_module_state->__pyx_n_s_result); + Py_CLEAR(clear_module_state->__pyx_n_s_sco); + Py_CLEAR(clear_module_state->__pyx_n_s_scomat); + Py_CLEAR(clear_module_state->__pyx_n_s_scomat_2); + Py_CLEAR(clear_module_state->__pyx_n_s_score); + Py_CLEAR(clear_module_state->__pyx_n_s_scoremat); + Py_CLEAR(clear_module_state->__pyx_n_s_scoring); + Py_CLEAR(clear_module_state->__pyx_n_s_scoring_gap); + Py_CLEAR(clear_module_state->__pyx_n_s_seq1); + Py_CLEAR(clear_module_state->__pyx_n_s_seq2); + Py_CLEAR(clear_module_state->__pyx_n_s_seq_vs_db); + Py_CLEAR(clear_module_state->__pyx_n_s_seqs); + Py_CLEAR(clear_module_state->__pyx_n_s_seqs1); + Py_CLEAR(clear_module_state->__pyx_n_s_seqs2); + Py_CLEAR(clear_module_state->__pyx_n_s_shared_sco_base); + Py_CLEAR(clear_module_state->__pyx_n_s_spec); + Py_CLEAR(clear_module_state->__pyx_n_s_st1); + Py_CLEAR(clear_module_state->__pyx_n_s_st2); + Py_CLEAR(clear_module_state->__pyx_n_s_store_dict); + Py_CLEAR(clear_module_state->__pyx_n_s_strfmt); + Py_CLEAR(clear_module_state->__pyx_n_s_test); + Py_CLEAR(clear_module_state->__pyx_n_s_testval); + Py_CLEAR(clear_module_state->__pyx_n_s_thres); + Py_CLEAR(clear_module_state->__pyx_n_s_total); + Py_CLEAR(clear_module_state->__pyx_n_s_update); + Py_CLEAR(clear_module_state->__pyx_n_s_v); + Py_CLEAR(clear_module_state->__pyx_n_s_values); + Py_CLEAR(clear_module_state->__pyx_n_u_w); + Py_CLEAR(clear_module_state->__pyx_n_s_wholedb); + Py_CLEAR(clear_module_state->__pyx_n_s_write); + Py_CLEAR(clear_module_state->__pyx_n_s_x); + Py_CLEAR(clear_module_state->__pyx_n_s_y); + Py_CLEAR(clear_module_state->__pyx_n_s_zeros); + Py_CLEAR(clear_module_state->__pyx_float_1_0); + Py_CLEAR(clear_module_state->__pyx_float_0_05); + Py_CLEAR(clear_module_state->__pyx_float_0_95); + Py_CLEAR(clear_module_state->__pyx_int_1); + Py_CLEAR(clear_module_state->__pyx_int_2); + Py_CLEAR(clear_module_state->__pyx_int_1000); + Py_CLEAR(clear_module_state->__pyx_int_neg_1); + Py_CLEAR(clear_module_state->__pyx_k__7); + Py_CLEAR(clear_module_state->__pyx_k__8); + Py_CLEAR(clear_module_state->__pyx_k__9); + Py_CLEAR(clear_module_state->__pyx_k__10); + Py_CLEAR(clear_module_state->__pyx_k__12); + Py_CLEAR(clear_module_state->__pyx_k__13); + Py_CLEAR(clear_module_state->__pyx_k__14); + Py_CLEAR(clear_module_state->__pyx_k__15); + Py_CLEAR(clear_module_state->__pyx_k__16); + Py_CLEAR(clear_module_state->__pyx_k__17); + Py_CLEAR(clear_module_state->__pyx_k__18); + Py_CLEAR(clear_module_state->__pyx_k__19); + Py_CLEAR(clear_module_state->__pyx_k__20); + Py_CLEAR(clear_module_state->__pyx_k__21); + Py_CLEAR(clear_module_state->__pyx_k__22); + Py_CLEAR(clear_module_state->__pyx_k__23); + Py_CLEAR(clear_module_state->__pyx_tuple_); + Py_CLEAR(clear_module_state->__pyx_slice__6); + Py_CLEAR(clear_module_state->__pyx_tuple__2); + Py_CLEAR(clear_module_state->__pyx_slice__24); + Py_CLEAR(clear_module_state->__pyx_tuple__25); + Py_CLEAR(clear_module_state->__pyx_tuple__31); + Py_CLEAR(clear_module_state->__pyx_tuple__33); + Py_CLEAR(clear_module_state->__pyx_tuple__35); + Py_CLEAR(clear_module_state->__pyx_tuple__37); + Py_CLEAR(clear_module_state->__pyx_tuple__39); + Py_CLEAR(clear_module_state->__pyx_tuple__41); + Py_CLEAR(clear_module_state->__pyx_tuple__43); + Py_CLEAR(clear_module_state->__pyx_tuple__45); + Py_CLEAR(clear_module_state->__pyx_tuple__47); + Py_CLEAR(clear_module_state->__pyx_tuple__49); + Py_CLEAR(clear_module_state->__pyx_tuple__51); + Py_CLEAR(clear_module_state->__pyx_tuple__52); + Py_CLEAR(clear_module_state->__pyx_tuple__54); + Py_CLEAR(clear_module_state->__pyx_tuple__56); + Py_CLEAR(clear_module_state->__pyx_tuple__58); + Py_CLEAR(clear_module_state->__pyx_codeobj__32); + Py_CLEAR(clear_module_state->__pyx_codeobj__34); + Py_CLEAR(clear_module_state->__pyx_codeobj__36); + Py_CLEAR(clear_module_state->__pyx_codeobj__38); + Py_CLEAR(clear_module_state->__pyx_codeobj__40); + Py_CLEAR(clear_module_state->__pyx_codeobj__42); + Py_CLEAR(clear_module_state->__pyx_codeobj__44); + Py_CLEAR(clear_module_state->__pyx_codeobj__46); + Py_CLEAR(clear_module_state->__pyx_codeobj__48); + Py_CLEAR(clear_module_state->__pyx_codeobj__50); + Py_CLEAR(clear_module_state->__pyx_codeobj__53); + Py_CLEAR(clear_module_state->__pyx_codeobj__55); + Py_CLEAR(clear_module_state->__pyx_codeobj__57); + return 0; +} +#endif +/* #### Code section: module_state_traverse ### */ +#if CYTHON_USE_MODULE_STATE +static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { + __pyx_mstate *traverse_module_state = __pyx_mstate(m); + if (!traverse_module_state) return 0; + Py_VISIT(traverse_module_state->__pyx_d); + Py_VISIT(traverse_module_state->__pyx_b); + Py_VISIT(traverse_module_state->__pyx_cython_runtime); + Py_VISIT(traverse_module_state->__pyx_empty_tuple); + Py_VISIT(traverse_module_state->__pyx_empty_bytes); + Py_VISIT(traverse_module_state->__pyx_empty_unicode); + #ifdef __Pyx_CyFunction_USED + Py_VISIT(traverse_module_state->__pyx_CyFunctionType); + #endif + #ifdef __Pyx_FusedFunction_USED + Py_VISIT(traverse_module_state->__pyx_FusedFunctionType); + #endif + Py_VISIT(traverse_module_state->__pyx_ptype_7cpython_4type_type); + Py_VISIT(traverse_module_state->__pyx_ptype_7cpython_4bool_bool); + Py_VISIT(traverse_module_state->__pyx_ptype_7cpython_7complex_complex); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_dtype); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_flatiter); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_broadcast); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_ndarray); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_generic); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_number); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_integer); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_signedinteger); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_unsignedinteger); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_inexact); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_floating); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_complexfloating); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_flexible); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_character); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_ufunc); + Py_VISIT(traverse_module_state->__pyx_n_s_Array); + Py_VISIT(traverse_module_state->__pyx_n_s_AssertionError); + Py_VISIT(traverse_module_state->__pyx_n_s_DTYPE); + Py_VISIT(traverse_module_state->__pyx_n_s_DTYPEF); + Py_VISIT(traverse_module_state->__pyx_n_s_FastNW); + Py_VISIT(traverse_module_state->__pyx_n_s_ImportError); + Py_VISIT(traverse_module_state->__pyx_n_s_NW); + Py_VISIT(traverse_module_state->__pyx_n_s_Pool); + Py_VISIT(traverse_module_state->__pyx_kp_u_The_aligned_sequences_must_be_of); + Py_VISIT(traverse_module_state->__pyx_kp_u__11); + Py_VISIT(traverse_module_state->__pyx_kp_u__26); + Py_VISIT(traverse_module_state->__pyx_kp_u__27); + Py_VISIT(traverse_module_state->__pyx_kp_u__28); + Py_VISIT(traverse_module_state->__pyx_n_s__29); + Py_VISIT(traverse_module_state->__pyx_kp_u__3); + Py_VISIT(traverse_module_state->__pyx_kp_u__30); + Py_VISIT(traverse_module_state->__pyx_kp_u__4); + Py_VISIT(traverse_module_state->__pyx_kp_u__5); + Py_VISIT(traverse_module_state->__pyx_n_s__59); + Py_VISIT(traverse_module_state->__pyx_n_s_align_func); + Py_VISIT(traverse_module_state->__pyx_n_s_alldb_comp); + Py_VISIT(traverse_module_state->__pyx_n_s_alldb_shared); + Py_VISIT(traverse_module_state->__pyx_n_s_arr); + Py_VISIT(traverse_module_state->__pyx_n_s_arrow); + Py_VISIT(traverse_module_state->__pyx_n_s_aseq1); + Py_VISIT(traverse_module_state->__pyx_n_s_aseq2); + Py_VISIT(traverse_module_state->__pyx_n_s_asyncio_coroutines); + Py_VISIT(traverse_module_state->__pyx_n_s_backtrace); + Py_VISIT(traverse_module_state->__pyx_n_s_bblock); + Py_VISIT(traverse_module_state->__pyx_n_s_binit); + Py_VISIT(traverse_module_state->__pyx_n_s_buffering); + Py_VISIT(traverse_module_state->__pyx_n_s_c_float); + Py_VISIT(traverse_module_state->__pyx_n_s_chunksize); + Py_VISIT(traverse_module_state->__pyx_n_s_class_getitem); + Py_VISIT(traverse_module_state->__pyx_n_s_cline_in_traceback); + Py_VISIT(traverse_module_state->__pyx_n_s_close); + Py_VISIT(traverse_module_state->__pyx_n_s_create_global_arr); + Py_VISIT(traverse_module_state->__pyx_n_s_ctypes); + Py_VISIT(traverse_module_state->__pyx_n_s_d); + Py_VISIT(traverse_module_state->__pyx_n_s_db_vs_db); + Py_VISIT(traverse_module_state->__pyx_n_s_decs); + Py_VISIT(traverse_module_state->__pyx_n_s_dic); + Py_VISIT(traverse_module_state->__pyx_n_s_dotstr); + Py_VISIT(traverse_module_state->__pyx_n_s_dtype); + Py_VISIT(traverse_module_state->__pyx_n_s_ec1); + Py_VISIT(traverse_module_state->__pyx_n_s_ec2); + Py_VISIT(traverse_module_state->__pyx_n_s_eci); + Py_VISIT(traverse_module_state->__pyx_n_s_ecj); + Py_VISIT(traverse_module_state->__pyx_n_s_ecs); + Py_VISIT(traverse_module_state->__pyx_n_s_f); + Py_VISIT(traverse_module_state->__pyx_n_s_fhomo); + Py_VISIT(traverse_module_state->__pyx_kp_u_fhomo_fpengap_must_sum_aprox_1); + Py_VISIT(traverse_module_state->__pyx_n_s_fi); + Py_VISIT(traverse_module_state->__pyx_n_s_fill_mat); + Py_VISIT(traverse_module_state->__pyx_n_s_float32); + Py_VISIT(traverse_module_state->__pyx_n_s_float64); + Py_VISIT(traverse_module_state->__pyx_n_s_fname); + Py_VISIT(traverse_module_state->__pyx_n_s_format); + Py_VISIT(traverse_module_state->__pyx_n_s_fpengap); + Py_VISIT(traverse_module_state->__pyx_n_s_frombuffer); + Py_VISIT(traverse_module_state->__pyx_n_s_functools); + Py_VISIT(traverse_module_state->__pyx_n_s_gap); + Py_VISIT(traverse_module_state->__pyx_n_s_gapstr); + Py_VISIT(traverse_module_state->__pyx_n_s_get_obj); + Py_VISIT(traverse_module_state->__pyx_n_s_h); + Py_VISIT(traverse_module_state->__pyx_n_s_homo); + Py_VISIT(traverse_module_state->__pyx_n_s_i); + Py_VISIT(traverse_module_state->__pyx_n_s_ii); + Py_VISIT(traverse_module_state->__pyx_n_s_import); + Py_VISIT(traverse_module_state->__pyx_n_s_ind); + Py_VISIT(traverse_module_state->__pyx_n_s_ind1); + Py_VISIT(traverse_module_state->__pyx_n_s_ind2); + Py_VISIT(traverse_module_state->__pyx_n_s_ind_vs_alldb); + Py_VISIT(traverse_module_state->__pyx_n_s_indices); + Py_VISIT(traverse_module_state->__pyx_n_s_indices2); + Py_VISIT(traverse_module_state->__pyx_n_s_initializing); + Py_VISIT(traverse_module_state->__pyx_n_s_int32); + Py_VISIT(traverse_module_state->__pyx_n_s_is_coroutine); + Py_VISIT(traverse_module_state->__pyx_n_s_items); + Py_VISIT(traverse_module_state->__pyx_n_s_j); + Py_VISIT(traverse_module_state->__pyx_n_s_k); + Py_VISIT(traverse_module_state->__pyx_n_s_l1); + Py_VISIT(traverse_module_state->__pyx_n_s_l2); + Py_VISIT(traverse_module_state->__pyx_n_s_length); + Py_VISIT(traverse_module_state->__pyx_n_s_li); + Py_VISIT(traverse_module_state->__pyx_n_s_line); + Py_VISIT(traverse_module_state->__pyx_n_s_list_vs_alldb); + Py_VISIT(traverse_module_state->__pyx_n_s_localize); + Py_VISIT(traverse_module_state->__pyx_n_s_main); + Py_VISIT(traverse_module_state->__pyx_n_s_map); + Py_VISIT(traverse_module_state->__pyx_n_s_mat); + Py_VISIT(traverse_module_state->__pyx_n_s_mini); + Py_VISIT(traverse_module_state->__pyx_n_s_minpos); + Py_VISIT(traverse_module_state->__pyx_n_s_multiprocessing); + Py_VISIT(traverse_module_state->__pyx_n_s_name); + Py_VISIT(traverse_module_state->__pyx_n_s_np); + Py_VISIT(traverse_module_state->__pyx_n_s_nproc); + Py_VISIT(traverse_module_state->__pyx_n_s_numpy); + Py_VISIT(traverse_module_state->__pyx_kp_u_numpy__core_multiarray_failed_to); + Py_VISIT(traverse_module_state->__pyx_kp_u_numpy__core_umath_failed_to_impo); + Py_VISIT(traverse_module_state->__pyx_n_s_nw_ec_alignx); + Py_VISIT(traverse_module_state->__pyx_kp_s_nw_ec_alignx_pyx); + Py_VISIT(traverse_module_state->__pyx_n_s_nws); + Py_VISIT(traverse_module_state->__pyx_n_s_ok); + Py_VISIT(traverse_module_state->__pyx_n_s_open); + Py_VISIT(traverse_module_state->__pyx_n_s_oscore); + Py_VISIT(traverse_module_state->__pyx_n_s_outf); + Py_VISIT(traverse_module_state->__pyx_n_s_partial); + Py_VISIT(traverse_module_state->__pyx_n_s_pengap); + Py_VISIT(traverse_module_state->__pyx_n_s_pool); + Py_VISIT(traverse_module_state->__pyx_n_s_processes); + Py_VISIT(traverse_module_state->__pyx_n_s_randfactor); + Py_VISIT(traverse_module_state->__pyx_n_s_randnum); + Py_VISIT(traverse_module_state->__pyx_n_s_randum); + Py_VISIT(traverse_module_state->__pyx_n_s_range); + Py_VISIT(traverse_module_state->__pyx_n_s_rdict); + Py_VISIT(traverse_module_state->__pyx_n_s_resd); + Py_VISIT(traverse_module_state->__pyx_n_s_resdic); + Py_VISIT(traverse_module_state->__pyx_n_s_resdict); + Py_VISIT(traverse_module_state->__pyx_n_s_reshape); + Py_VISIT(traverse_module_state->__pyx_n_s_result); + Py_VISIT(traverse_module_state->__pyx_n_s_sco); + Py_VISIT(traverse_module_state->__pyx_n_s_scomat); + Py_VISIT(traverse_module_state->__pyx_n_s_scomat_2); + Py_VISIT(traverse_module_state->__pyx_n_s_score); + Py_VISIT(traverse_module_state->__pyx_n_s_scoremat); + Py_VISIT(traverse_module_state->__pyx_n_s_scoring); + Py_VISIT(traverse_module_state->__pyx_n_s_scoring_gap); + Py_VISIT(traverse_module_state->__pyx_n_s_seq1); + Py_VISIT(traverse_module_state->__pyx_n_s_seq2); + Py_VISIT(traverse_module_state->__pyx_n_s_seq_vs_db); + Py_VISIT(traverse_module_state->__pyx_n_s_seqs); + Py_VISIT(traverse_module_state->__pyx_n_s_seqs1); + Py_VISIT(traverse_module_state->__pyx_n_s_seqs2); + Py_VISIT(traverse_module_state->__pyx_n_s_shared_sco_base); + Py_VISIT(traverse_module_state->__pyx_n_s_spec); + Py_VISIT(traverse_module_state->__pyx_n_s_st1); + Py_VISIT(traverse_module_state->__pyx_n_s_st2); + Py_VISIT(traverse_module_state->__pyx_n_s_store_dict); + Py_VISIT(traverse_module_state->__pyx_n_s_strfmt); + Py_VISIT(traverse_module_state->__pyx_n_s_test); + Py_VISIT(traverse_module_state->__pyx_n_s_testval); + Py_VISIT(traverse_module_state->__pyx_n_s_thres); + Py_VISIT(traverse_module_state->__pyx_n_s_total); + Py_VISIT(traverse_module_state->__pyx_n_s_update); + Py_VISIT(traverse_module_state->__pyx_n_s_v); + Py_VISIT(traverse_module_state->__pyx_n_s_values); + Py_VISIT(traverse_module_state->__pyx_n_u_w); + Py_VISIT(traverse_module_state->__pyx_n_s_wholedb); + Py_VISIT(traverse_module_state->__pyx_n_s_write); + Py_VISIT(traverse_module_state->__pyx_n_s_x); + Py_VISIT(traverse_module_state->__pyx_n_s_y); + Py_VISIT(traverse_module_state->__pyx_n_s_zeros); + Py_VISIT(traverse_module_state->__pyx_float_1_0); + Py_VISIT(traverse_module_state->__pyx_float_0_05); + Py_VISIT(traverse_module_state->__pyx_float_0_95); + Py_VISIT(traverse_module_state->__pyx_int_1); + Py_VISIT(traverse_module_state->__pyx_int_2); + Py_VISIT(traverse_module_state->__pyx_int_1000); + Py_VISIT(traverse_module_state->__pyx_int_neg_1); + Py_VISIT(traverse_module_state->__pyx_k__7); + Py_VISIT(traverse_module_state->__pyx_k__8); + Py_VISIT(traverse_module_state->__pyx_k__9); + Py_VISIT(traverse_module_state->__pyx_k__10); + Py_VISIT(traverse_module_state->__pyx_k__12); + Py_VISIT(traverse_module_state->__pyx_k__13); + Py_VISIT(traverse_module_state->__pyx_k__14); + Py_VISIT(traverse_module_state->__pyx_k__15); + Py_VISIT(traverse_module_state->__pyx_k__16); + Py_VISIT(traverse_module_state->__pyx_k__17); + Py_VISIT(traverse_module_state->__pyx_k__18); + Py_VISIT(traverse_module_state->__pyx_k__19); + Py_VISIT(traverse_module_state->__pyx_k__20); + Py_VISIT(traverse_module_state->__pyx_k__21); + Py_VISIT(traverse_module_state->__pyx_k__22); + Py_VISIT(traverse_module_state->__pyx_k__23); + Py_VISIT(traverse_module_state->__pyx_tuple_); + Py_VISIT(traverse_module_state->__pyx_slice__6); + Py_VISIT(traverse_module_state->__pyx_tuple__2); + Py_VISIT(traverse_module_state->__pyx_slice__24); + Py_VISIT(traverse_module_state->__pyx_tuple__25); + Py_VISIT(traverse_module_state->__pyx_tuple__31); + Py_VISIT(traverse_module_state->__pyx_tuple__33); + Py_VISIT(traverse_module_state->__pyx_tuple__35); + Py_VISIT(traverse_module_state->__pyx_tuple__37); + Py_VISIT(traverse_module_state->__pyx_tuple__39); + Py_VISIT(traverse_module_state->__pyx_tuple__41); + Py_VISIT(traverse_module_state->__pyx_tuple__43); + Py_VISIT(traverse_module_state->__pyx_tuple__45); + Py_VISIT(traverse_module_state->__pyx_tuple__47); + Py_VISIT(traverse_module_state->__pyx_tuple__49); + Py_VISIT(traverse_module_state->__pyx_tuple__51); + Py_VISIT(traverse_module_state->__pyx_tuple__52); + Py_VISIT(traverse_module_state->__pyx_tuple__54); + Py_VISIT(traverse_module_state->__pyx_tuple__56); + Py_VISIT(traverse_module_state->__pyx_tuple__58); + Py_VISIT(traverse_module_state->__pyx_codeobj__32); + Py_VISIT(traverse_module_state->__pyx_codeobj__34); + Py_VISIT(traverse_module_state->__pyx_codeobj__36); + Py_VISIT(traverse_module_state->__pyx_codeobj__38); + Py_VISIT(traverse_module_state->__pyx_codeobj__40); + Py_VISIT(traverse_module_state->__pyx_codeobj__42); + Py_VISIT(traverse_module_state->__pyx_codeobj__44); + Py_VISIT(traverse_module_state->__pyx_codeobj__46); + Py_VISIT(traverse_module_state->__pyx_codeobj__48); + Py_VISIT(traverse_module_state->__pyx_codeobj__50); + Py_VISIT(traverse_module_state->__pyx_codeobj__53); + Py_VISIT(traverse_module_state->__pyx_codeobj__55); + Py_VISIT(traverse_module_state->__pyx_codeobj__57); + return 0; +} +#endif +/* #### Code section: module_state_defines ### */ +#define __pyx_d __pyx_mstate_global->__pyx_d +#define __pyx_b __pyx_mstate_global->__pyx_b +#define __pyx_cython_runtime __pyx_mstate_global->__pyx_cython_runtime +#define __pyx_empty_tuple __pyx_mstate_global->__pyx_empty_tuple +#define __pyx_empty_bytes __pyx_mstate_global->__pyx_empty_bytes +#define __pyx_empty_unicode __pyx_mstate_global->__pyx_empty_unicode +#ifdef __Pyx_CyFunction_USED +#define __pyx_CyFunctionType __pyx_mstate_global->__pyx_CyFunctionType +#endif +#ifdef __Pyx_FusedFunction_USED +#define __pyx_FusedFunctionType __pyx_mstate_global->__pyx_FusedFunctionType +#endif +#ifdef __Pyx_Generator_USED +#define __pyx_GeneratorType __pyx_mstate_global->__pyx_GeneratorType +#endif +#ifdef __Pyx_IterableCoroutine_USED +#define __pyx_IterableCoroutineType __pyx_mstate_global->__pyx_IterableCoroutineType +#endif +#ifdef __Pyx_Coroutine_USED +#define __pyx_CoroutineAwaitType __pyx_mstate_global->__pyx_CoroutineAwaitType +#endif +#ifdef __Pyx_Coroutine_USED +#define __pyx_CoroutineType __pyx_mstate_global->__pyx_CoroutineType +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#define __pyx_ptype_7cpython_4type_type __pyx_mstate_global->__pyx_ptype_7cpython_4type_type +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#define __pyx_ptype_7cpython_4bool_bool __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#define __pyx_ptype_7cpython_7complex_complex __pyx_mstate_global->__pyx_ptype_7cpython_7complex_complex +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#define __pyx_ptype_5numpy_dtype __pyx_mstate_global->__pyx_ptype_5numpy_dtype +#define __pyx_ptype_5numpy_flatiter __pyx_mstate_global->__pyx_ptype_5numpy_flatiter +#define __pyx_ptype_5numpy_broadcast __pyx_mstate_global->__pyx_ptype_5numpy_broadcast +#define __pyx_ptype_5numpy_ndarray __pyx_mstate_global->__pyx_ptype_5numpy_ndarray +#define __pyx_ptype_5numpy_generic __pyx_mstate_global->__pyx_ptype_5numpy_generic +#define __pyx_ptype_5numpy_number __pyx_mstate_global->__pyx_ptype_5numpy_number +#define __pyx_ptype_5numpy_integer __pyx_mstate_global->__pyx_ptype_5numpy_integer +#define __pyx_ptype_5numpy_signedinteger __pyx_mstate_global->__pyx_ptype_5numpy_signedinteger +#define __pyx_ptype_5numpy_unsignedinteger __pyx_mstate_global->__pyx_ptype_5numpy_unsignedinteger +#define __pyx_ptype_5numpy_inexact __pyx_mstate_global->__pyx_ptype_5numpy_inexact +#define __pyx_ptype_5numpy_floating __pyx_mstate_global->__pyx_ptype_5numpy_floating +#define __pyx_ptype_5numpy_complexfloating __pyx_mstate_global->__pyx_ptype_5numpy_complexfloating +#define __pyx_ptype_5numpy_flexible __pyx_mstate_global->__pyx_ptype_5numpy_flexible +#define __pyx_ptype_5numpy_character __pyx_mstate_global->__pyx_ptype_5numpy_character +#define __pyx_ptype_5numpy_ufunc __pyx_mstate_global->__pyx_ptype_5numpy_ufunc +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#define __pyx_n_s_Array __pyx_mstate_global->__pyx_n_s_Array +#define __pyx_n_s_AssertionError __pyx_mstate_global->__pyx_n_s_AssertionError +#define __pyx_n_s_DTYPE __pyx_mstate_global->__pyx_n_s_DTYPE +#define __pyx_n_s_DTYPEF __pyx_mstate_global->__pyx_n_s_DTYPEF +#define __pyx_n_s_FastNW __pyx_mstate_global->__pyx_n_s_FastNW +#define __pyx_n_s_ImportError __pyx_mstate_global->__pyx_n_s_ImportError +#define __pyx_n_s_NW __pyx_mstate_global->__pyx_n_s_NW +#define __pyx_n_s_Pool __pyx_mstate_global->__pyx_n_s_Pool +#define __pyx_kp_u_The_aligned_sequences_must_be_of __pyx_mstate_global->__pyx_kp_u_The_aligned_sequences_must_be_of +#define __pyx_kp_u__11 __pyx_mstate_global->__pyx_kp_u__11 +#define __pyx_kp_u__26 __pyx_mstate_global->__pyx_kp_u__26 +#define __pyx_kp_u__27 __pyx_mstate_global->__pyx_kp_u__27 +#define __pyx_kp_u__28 __pyx_mstate_global->__pyx_kp_u__28 +#define __pyx_n_s__29 __pyx_mstate_global->__pyx_n_s__29 +#define __pyx_kp_u__3 __pyx_mstate_global->__pyx_kp_u__3 +#define __pyx_kp_u__30 __pyx_mstate_global->__pyx_kp_u__30 +#define __pyx_kp_u__4 __pyx_mstate_global->__pyx_kp_u__4 +#define __pyx_kp_u__5 __pyx_mstate_global->__pyx_kp_u__5 +#define __pyx_n_s__59 __pyx_mstate_global->__pyx_n_s__59 +#define __pyx_n_s_align_func __pyx_mstate_global->__pyx_n_s_align_func +#define __pyx_n_s_alldb_comp __pyx_mstate_global->__pyx_n_s_alldb_comp +#define __pyx_n_s_alldb_shared __pyx_mstate_global->__pyx_n_s_alldb_shared +#define __pyx_n_s_arr __pyx_mstate_global->__pyx_n_s_arr +#define __pyx_n_s_arrow __pyx_mstate_global->__pyx_n_s_arrow +#define __pyx_n_s_aseq1 __pyx_mstate_global->__pyx_n_s_aseq1 +#define __pyx_n_s_aseq2 __pyx_mstate_global->__pyx_n_s_aseq2 +#define __pyx_n_s_asyncio_coroutines __pyx_mstate_global->__pyx_n_s_asyncio_coroutines +#define __pyx_n_s_backtrace __pyx_mstate_global->__pyx_n_s_backtrace +#define __pyx_n_s_bblock __pyx_mstate_global->__pyx_n_s_bblock +#define __pyx_n_s_binit __pyx_mstate_global->__pyx_n_s_binit +#define __pyx_n_s_buffering __pyx_mstate_global->__pyx_n_s_buffering +#define __pyx_n_s_c_float __pyx_mstate_global->__pyx_n_s_c_float +#define __pyx_n_s_chunksize __pyx_mstate_global->__pyx_n_s_chunksize +#define __pyx_n_s_class_getitem __pyx_mstate_global->__pyx_n_s_class_getitem +#define __pyx_n_s_cline_in_traceback __pyx_mstate_global->__pyx_n_s_cline_in_traceback +#define __pyx_n_s_close __pyx_mstate_global->__pyx_n_s_close +#define __pyx_n_s_create_global_arr __pyx_mstate_global->__pyx_n_s_create_global_arr +#define __pyx_n_s_ctypes __pyx_mstate_global->__pyx_n_s_ctypes +#define __pyx_n_s_d __pyx_mstate_global->__pyx_n_s_d +#define __pyx_n_s_db_vs_db __pyx_mstate_global->__pyx_n_s_db_vs_db +#define __pyx_n_s_decs __pyx_mstate_global->__pyx_n_s_decs +#define __pyx_n_s_dic __pyx_mstate_global->__pyx_n_s_dic +#define __pyx_n_s_dotstr __pyx_mstate_global->__pyx_n_s_dotstr +#define __pyx_n_s_dtype __pyx_mstate_global->__pyx_n_s_dtype +#define __pyx_n_s_ec1 __pyx_mstate_global->__pyx_n_s_ec1 +#define __pyx_n_s_ec2 __pyx_mstate_global->__pyx_n_s_ec2 +#define __pyx_n_s_eci __pyx_mstate_global->__pyx_n_s_eci +#define __pyx_n_s_ecj __pyx_mstate_global->__pyx_n_s_ecj +#define __pyx_n_s_ecs __pyx_mstate_global->__pyx_n_s_ecs +#define __pyx_n_s_f __pyx_mstate_global->__pyx_n_s_f +#define __pyx_n_s_fhomo __pyx_mstate_global->__pyx_n_s_fhomo +#define __pyx_kp_u_fhomo_fpengap_must_sum_aprox_1 __pyx_mstate_global->__pyx_kp_u_fhomo_fpengap_must_sum_aprox_1 +#define __pyx_n_s_fi __pyx_mstate_global->__pyx_n_s_fi +#define __pyx_n_s_fill_mat __pyx_mstate_global->__pyx_n_s_fill_mat +#define __pyx_n_s_float32 __pyx_mstate_global->__pyx_n_s_float32 +#define __pyx_n_s_float64 __pyx_mstate_global->__pyx_n_s_float64 +#define __pyx_n_s_fname __pyx_mstate_global->__pyx_n_s_fname +#define __pyx_n_s_format __pyx_mstate_global->__pyx_n_s_format +#define __pyx_n_s_fpengap __pyx_mstate_global->__pyx_n_s_fpengap +#define __pyx_n_s_frombuffer __pyx_mstate_global->__pyx_n_s_frombuffer +#define __pyx_n_s_functools __pyx_mstate_global->__pyx_n_s_functools +#define __pyx_n_s_gap __pyx_mstate_global->__pyx_n_s_gap +#define __pyx_n_s_gapstr __pyx_mstate_global->__pyx_n_s_gapstr +#define __pyx_n_s_get_obj __pyx_mstate_global->__pyx_n_s_get_obj +#define __pyx_n_s_h __pyx_mstate_global->__pyx_n_s_h +#define __pyx_n_s_homo __pyx_mstate_global->__pyx_n_s_homo +#define __pyx_n_s_i __pyx_mstate_global->__pyx_n_s_i +#define __pyx_n_s_ii __pyx_mstate_global->__pyx_n_s_ii +#define __pyx_n_s_import __pyx_mstate_global->__pyx_n_s_import +#define __pyx_n_s_ind __pyx_mstate_global->__pyx_n_s_ind +#define __pyx_n_s_ind1 __pyx_mstate_global->__pyx_n_s_ind1 +#define __pyx_n_s_ind2 __pyx_mstate_global->__pyx_n_s_ind2 +#define __pyx_n_s_ind_vs_alldb __pyx_mstate_global->__pyx_n_s_ind_vs_alldb +#define __pyx_n_s_indices __pyx_mstate_global->__pyx_n_s_indices +#define __pyx_n_s_indices2 __pyx_mstate_global->__pyx_n_s_indices2 +#define __pyx_n_s_initializing __pyx_mstate_global->__pyx_n_s_initializing +#define __pyx_n_s_int32 __pyx_mstate_global->__pyx_n_s_int32 +#define __pyx_n_s_is_coroutine __pyx_mstate_global->__pyx_n_s_is_coroutine +#define __pyx_n_s_items __pyx_mstate_global->__pyx_n_s_items +#define __pyx_n_s_j __pyx_mstate_global->__pyx_n_s_j +#define __pyx_n_s_k __pyx_mstate_global->__pyx_n_s_k +#define __pyx_n_s_l1 __pyx_mstate_global->__pyx_n_s_l1 +#define __pyx_n_s_l2 __pyx_mstate_global->__pyx_n_s_l2 +#define __pyx_n_s_length __pyx_mstate_global->__pyx_n_s_length +#define __pyx_n_s_li __pyx_mstate_global->__pyx_n_s_li +#define __pyx_n_s_line __pyx_mstate_global->__pyx_n_s_line +#define __pyx_n_s_list_vs_alldb __pyx_mstate_global->__pyx_n_s_list_vs_alldb +#define __pyx_n_s_localize __pyx_mstate_global->__pyx_n_s_localize +#define __pyx_n_s_main __pyx_mstate_global->__pyx_n_s_main +#define __pyx_n_s_map __pyx_mstate_global->__pyx_n_s_map +#define __pyx_n_s_mat __pyx_mstate_global->__pyx_n_s_mat +#define __pyx_n_s_mini __pyx_mstate_global->__pyx_n_s_mini +#define __pyx_n_s_minpos __pyx_mstate_global->__pyx_n_s_minpos +#define __pyx_n_s_multiprocessing __pyx_mstate_global->__pyx_n_s_multiprocessing +#define __pyx_n_s_name __pyx_mstate_global->__pyx_n_s_name +#define __pyx_n_s_np __pyx_mstate_global->__pyx_n_s_np +#define __pyx_n_s_nproc __pyx_mstate_global->__pyx_n_s_nproc +#define __pyx_n_s_numpy __pyx_mstate_global->__pyx_n_s_numpy +#define __pyx_kp_u_numpy__core_multiarray_failed_to __pyx_mstate_global->__pyx_kp_u_numpy__core_multiarray_failed_to +#define __pyx_kp_u_numpy__core_umath_failed_to_impo __pyx_mstate_global->__pyx_kp_u_numpy__core_umath_failed_to_impo +#define __pyx_n_s_nw_ec_alignx __pyx_mstate_global->__pyx_n_s_nw_ec_alignx +#define __pyx_kp_s_nw_ec_alignx_pyx __pyx_mstate_global->__pyx_kp_s_nw_ec_alignx_pyx +#define __pyx_n_s_nws __pyx_mstate_global->__pyx_n_s_nws +#define __pyx_n_s_ok __pyx_mstate_global->__pyx_n_s_ok +#define __pyx_n_s_open __pyx_mstate_global->__pyx_n_s_open +#define __pyx_n_s_oscore __pyx_mstate_global->__pyx_n_s_oscore +#define __pyx_n_s_outf __pyx_mstate_global->__pyx_n_s_outf +#define __pyx_n_s_partial __pyx_mstate_global->__pyx_n_s_partial +#define __pyx_n_s_pengap __pyx_mstate_global->__pyx_n_s_pengap +#define __pyx_n_s_pool __pyx_mstate_global->__pyx_n_s_pool +#define __pyx_n_s_processes __pyx_mstate_global->__pyx_n_s_processes +#define __pyx_n_s_randfactor __pyx_mstate_global->__pyx_n_s_randfactor +#define __pyx_n_s_randnum __pyx_mstate_global->__pyx_n_s_randnum +#define __pyx_n_s_randum __pyx_mstate_global->__pyx_n_s_randum +#define __pyx_n_s_range __pyx_mstate_global->__pyx_n_s_range +#define __pyx_n_s_rdict __pyx_mstate_global->__pyx_n_s_rdict +#define __pyx_n_s_resd __pyx_mstate_global->__pyx_n_s_resd +#define __pyx_n_s_resdic __pyx_mstate_global->__pyx_n_s_resdic +#define __pyx_n_s_resdict __pyx_mstate_global->__pyx_n_s_resdict +#define __pyx_n_s_reshape __pyx_mstate_global->__pyx_n_s_reshape +#define __pyx_n_s_result __pyx_mstate_global->__pyx_n_s_result +#define __pyx_n_s_sco __pyx_mstate_global->__pyx_n_s_sco +#define __pyx_n_s_scomat __pyx_mstate_global->__pyx_n_s_scomat +#define __pyx_n_s_scomat_2 __pyx_mstate_global->__pyx_n_s_scomat_2 +#define __pyx_n_s_score __pyx_mstate_global->__pyx_n_s_score +#define __pyx_n_s_scoremat __pyx_mstate_global->__pyx_n_s_scoremat +#define __pyx_n_s_scoring __pyx_mstate_global->__pyx_n_s_scoring +#define __pyx_n_s_scoring_gap __pyx_mstate_global->__pyx_n_s_scoring_gap +#define __pyx_n_s_seq1 __pyx_mstate_global->__pyx_n_s_seq1 +#define __pyx_n_s_seq2 __pyx_mstate_global->__pyx_n_s_seq2 +#define __pyx_n_s_seq_vs_db __pyx_mstate_global->__pyx_n_s_seq_vs_db +#define __pyx_n_s_seqs __pyx_mstate_global->__pyx_n_s_seqs +#define __pyx_n_s_seqs1 __pyx_mstate_global->__pyx_n_s_seqs1 +#define __pyx_n_s_seqs2 __pyx_mstate_global->__pyx_n_s_seqs2 +#define __pyx_n_s_shared_sco_base __pyx_mstate_global->__pyx_n_s_shared_sco_base +#define __pyx_n_s_spec __pyx_mstate_global->__pyx_n_s_spec +#define __pyx_n_s_st1 __pyx_mstate_global->__pyx_n_s_st1 +#define __pyx_n_s_st2 __pyx_mstate_global->__pyx_n_s_st2 +#define __pyx_n_s_store_dict __pyx_mstate_global->__pyx_n_s_store_dict +#define __pyx_n_s_strfmt __pyx_mstate_global->__pyx_n_s_strfmt +#define __pyx_n_s_test __pyx_mstate_global->__pyx_n_s_test +#define __pyx_n_s_testval __pyx_mstate_global->__pyx_n_s_testval +#define __pyx_n_s_thres __pyx_mstate_global->__pyx_n_s_thres +#define __pyx_n_s_total __pyx_mstate_global->__pyx_n_s_total +#define __pyx_n_s_update __pyx_mstate_global->__pyx_n_s_update +#define __pyx_n_s_v __pyx_mstate_global->__pyx_n_s_v +#define __pyx_n_s_values __pyx_mstate_global->__pyx_n_s_values +#define __pyx_n_u_w __pyx_mstate_global->__pyx_n_u_w +#define __pyx_n_s_wholedb __pyx_mstate_global->__pyx_n_s_wholedb +#define __pyx_n_s_write __pyx_mstate_global->__pyx_n_s_write +#define __pyx_n_s_x __pyx_mstate_global->__pyx_n_s_x +#define __pyx_n_s_y __pyx_mstate_global->__pyx_n_s_y +#define __pyx_n_s_zeros __pyx_mstate_global->__pyx_n_s_zeros +#define __pyx_float_1_0 __pyx_mstate_global->__pyx_float_1_0 +#define __pyx_float_0_05 __pyx_mstate_global->__pyx_float_0_05 +#define __pyx_float_0_95 __pyx_mstate_global->__pyx_float_0_95 +#define __pyx_int_1 __pyx_mstate_global->__pyx_int_1 +#define __pyx_int_2 __pyx_mstate_global->__pyx_int_2 +#define __pyx_int_1000 __pyx_mstate_global->__pyx_int_1000 +#define __pyx_int_neg_1 __pyx_mstate_global->__pyx_int_neg_1 +#define __pyx_k__7 __pyx_mstate_global->__pyx_k__7 +#define __pyx_k__8 __pyx_mstate_global->__pyx_k__8 +#define __pyx_k__9 __pyx_mstate_global->__pyx_k__9 +#define __pyx_k__10 __pyx_mstate_global->__pyx_k__10 +#define __pyx_k__12 __pyx_mstate_global->__pyx_k__12 +#define __pyx_k__13 __pyx_mstate_global->__pyx_k__13 +#define __pyx_k__14 __pyx_mstate_global->__pyx_k__14 +#define __pyx_k__15 __pyx_mstate_global->__pyx_k__15 +#define __pyx_k__16 __pyx_mstate_global->__pyx_k__16 +#define __pyx_k__17 __pyx_mstate_global->__pyx_k__17 +#define __pyx_k__18 __pyx_mstate_global->__pyx_k__18 +#define __pyx_k__19 __pyx_mstate_global->__pyx_k__19 +#define __pyx_k__20 __pyx_mstate_global->__pyx_k__20 +#define __pyx_k__21 __pyx_mstate_global->__pyx_k__21 +#define __pyx_k__22 __pyx_mstate_global->__pyx_k__22 +#define __pyx_k__23 __pyx_mstate_global->__pyx_k__23 +#define __pyx_tuple_ __pyx_mstate_global->__pyx_tuple_ +#define __pyx_slice__6 __pyx_mstate_global->__pyx_slice__6 +#define __pyx_tuple__2 __pyx_mstate_global->__pyx_tuple__2 +#define __pyx_slice__24 __pyx_mstate_global->__pyx_slice__24 +#define __pyx_tuple__25 __pyx_mstate_global->__pyx_tuple__25 +#define __pyx_tuple__31 __pyx_mstate_global->__pyx_tuple__31 +#define __pyx_tuple__33 __pyx_mstate_global->__pyx_tuple__33 +#define __pyx_tuple__35 __pyx_mstate_global->__pyx_tuple__35 +#define __pyx_tuple__37 __pyx_mstate_global->__pyx_tuple__37 +#define __pyx_tuple__39 __pyx_mstate_global->__pyx_tuple__39 +#define __pyx_tuple__41 __pyx_mstate_global->__pyx_tuple__41 +#define __pyx_tuple__43 __pyx_mstate_global->__pyx_tuple__43 +#define __pyx_tuple__45 __pyx_mstate_global->__pyx_tuple__45 +#define __pyx_tuple__47 __pyx_mstate_global->__pyx_tuple__47 +#define __pyx_tuple__49 __pyx_mstate_global->__pyx_tuple__49 +#define __pyx_tuple__51 __pyx_mstate_global->__pyx_tuple__51 +#define __pyx_tuple__52 __pyx_mstate_global->__pyx_tuple__52 +#define __pyx_tuple__54 __pyx_mstate_global->__pyx_tuple__54 +#define __pyx_tuple__56 __pyx_mstate_global->__pyx_tuple__56 +#define __pyx_tuple__58 __pyx_mstate_global->__pyx_tuple__58 +#define __pyx_codeobj__32 __pyx_mstate_global->__pyx_codeobj__32 +#define __pyx_codeobj__34 __pyx_mstate_global->__pyx_codeobj__34 +#define __pyx_codeobj__36 __pyx_mstate_global->__pyx_codeobj__36 +#define __pyx_codeobj__38 __pyx_mstate_global->__pyx_codeobj__38 +#define __pyx_codeobj__40 __pyx_mstate_global->__pyx_codeobj__40 +#define __pyx_codeobj__42 __pyx_mstate_global->__pyx_codeobj__42 +#define __pyx_codeobj__44 __pyx_mstate_global->__pyx_codeobj__44 +#define __pyx_codeobj__46 __pyx_mstate_global->__pyx_codeobj__46 +#define __pyx_codeobj__48 __pyx_mstate_global->__pyx_codeobj__48 +#define __pyx_codeobj__50 __pyx_mstate_global->__pyx_codeobj__50 +#define __pyx_codeobj__53 __pyx_mstate_global->__pyx_codeobj__53 +#define __pyx_codeobj__55 __pyx_mstate_global->__pyx_codeobj__55 +#define __pyx_codeobj__57 __pyx_mstate_global->__pyx_codeobj__57 +/* #### Code section: module_code ### */ + +/* "cpython/complex.pxd":19 + * + * @property + * cdef inline double real(self) noexcept: # <<<<<<<<<<<<<< + * return self.cval.real + * + */ + +static CYTHON_INLINE double __pyx_f_7cpython_7complex_7complex_4real_real(PyComplexObject *__pyx_v_self) { + double __pyx_r; + + /* "cpython/complex.pxd":20 + * @property + * cdef inline double real(self) noexcept: + * return self.cval.real # <<<<<<<<<<<<<< + * + * @property + */ + __pyx_r = __pyx_v_self->cval.real; + goto __pyx_L0; + + /* "cpython/complex.pxd":19 + * + * @property + * cdef inline double real(self) noexcept: # <<<<<<<<<<<<<< + * return self.cval.real + * + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "cpython/complex.pxd":23 + * + * @property + * cdef inline double imag(self) noexcept: # <<<<<<<<<<<<<< + * return self.cval.imag + * + */ + +static CYTHON_INLINE double __pyx_f_7cpython_7complex_7complex_4imag_imag(PyComplexObject *__pyx_v_self) { + double __pyx_r; + + /* "cpython/complex.pxd":24 + * @property + * cdef inline double imag(self) noexcept: + * return self.cval.imag # <<<<<<<<<<<<<< + * + * # PyTypeObject PyComplex_Type + */ + __pyx_r = __pyx_v_self->cval.imag; + goto __pyx_L0; + + /* "cpython/complex.pxd":23 + * + * @property + * cdef inline double imag(self) noexcept: # <<<<<<<<<<<<<< + * return self.cval.imag + * + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "cpython/contextvars.pxd":112 + * + * + * cdef inline object get_value(var, default_value=None): # <<<<<<<<<<<<<< + * """Return a new reference to the value of the context variable, + * or the default value of the context variable, + */ + +static CYTHON_INLINE PyObject *__pyx_f_7cpython_11contextvars_get_value(PyObject *__pyx_v_var, struct __pyx_opt_args_7cpython_11contextvars_get_value *__pyx_optional_args) { + PyObject *__pyx_v_default_value = ((PyObject *)Py_None); + PyObject *__pyx_v_value; + PyObject *__pyx_v_pyvalue = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("get_value", 1); + if (__pyx_optional_args) { + if (__pyx_optional_args->__pyx_n > 0) { + __pyx_v_default_value = __pyx_optional_args->default_value; + } + } + + /* "cpython/contextvars.pxd":117 + * or None if no such value or default was found. + * """ + * cdef PyObject *value = NULL # <<<<<<<<<<<<<< + * PyContextVar_Get(var, NULL, &value) + * if value is NULL: + */ + __pyx_v_value = NULL; + + /* "cpython/contextvars.pxd":118 + * """ + * cdef PyObject *value = NULL + * PyContextVar_Get(var, NULL, &value) # <<<<<<<<<<<<<< + * if value is NULL: + * # context variable does not have a default + */ + __pyx_t_1 = PyContextVar_Get(__pyx_v_var, NULL, (&__pyx_v_value)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(1, 118, __pyx_L1_error) + + /* "cpython/contextvars.pxd":119 + * cdef PyObject *value = NULL + * PyContextVar_Get(var, NULL, &value) + * if value is NULL: # <<<<<<<<<<<<<< + * # context variable does not have a default + * pyvalue = default_value + */ + __pyx_t_2 = (__pyx_v_value == NULL); + if (__pyx_t_2) { + + /* "cpython/contextvars.pxd":121 + * if value is NULL: + * # context variable does not have a default + * pyvalue = default_value # <<<<<<<<<<<<<< + * else: + * # value or default value of context variable + */ + __Pyx_INCREF(__pyx_v_default_value); + __pyx_v_pyvalue = __pyx_v_default_value; + + /* "cpython/contextvars.pxd":119 + * cdef PyObject *value = NULL + * PyContextVar_Get(var, NULL, &value) + * if value is NULL: # <<<<<<<<<<<<<< + * # context variable does not have a default + * pyvalue = default_value + */ + goto __pyx_L3; + } + + /* "cpython/contextvars.pxd":124 + * else: + * # value or default value of context variable + * pyvalue = value # <<<<<<<<<<<<<< + * Py_XDECREF(value) # PyContextVar_Get() returned an owned reference as 'PyObject*' + * return pyvalue + */ + /*else*/ { + __pyx_t_3 = ((PyObject *)__pyx_v_value); + __Pyx_INCREF(__pyx_t_3); + __pyx_v_pyvalue = __pyx_t_3; + __pyx_t_3 = 0; + + /* "cpython/contextvars.pxd":125 + * # value or default value of context variable + * pyvalue = value + * Py_XDECREF(value) # PyContextVar_Get() returned an owned reference as 'PyObject*' # <<<<<<<<<<<<<< + * return pyvalue + * + */ + Py_XDECREF(__pyx_v_value); + } + __pyx_L3:; + + /* "cpython/contextvars.pxd":126 + * pyvalue = value + * Py_XDECREF(value) # PyContextVar_Get() returned an owned reference as 'PyObject*' + * return pyvalue # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_pyvalue); + __pyx_r = __pyx_v_pyvalue; + goto __pyx_L0; + + /* "cpython/contextvars.pxd":112 + * + * + * cdef inline object get_value(var, default_value=None): # <<<<<<<<<<<<<< + * """Return a new reference to the value of the context variable, + * or the default value of the context variable, + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("cpython.contextvars.get_value", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_pyvalue); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "cpython/contextvars.pxd":129 + * + * + * cdef inline object get_value_no_default(var, default_value=None): # <<<<<<<<<<<<<< + * """Return a new reference to the value of the context variable, + * or the provided default value if no such value was found. + */ + +static CYTHON_INLINE PyObject *__pyx_f_7cpython_11contextvars_get_value_no_default(PyObject *__pyx_v_var, struct __pyx_opt_args_7cpython_11contextvars_get_value_no_default *__pyx_optional_args) { + PyObject *__pyx_v_default_value = ((PyObject *)Py_None); + PyObject *__pyx_v_value; + PyObject *__pyx_v_pyvalue = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("get_value_no_default", 1); + if (__pyx_optional_args) { + if (__pyx_optional_args->__pyx_n > 0) { + __pyx_v_default_value = __pyx_optional_args->default_value; + } + } + + /* "cpython/contextvars.pxd":135 + * Ignores the default value of the context variable, if any. + * """ + * cdef PyObject *value = NULL # <<<<<<<<<<<<<< + * PyContextVar_Get(var, default_value, &value) + * # value of context variable or 'default_value' + */ + __pyx_v_value = NULL; + + /* "cpython/contextvars.pxd":136 + * """ + * cdef PyObject *value = NULL + * PyContextVar_Get(var, default_value, &value) # <<<<<<<<<<<<<< + * # value of context variable or 'default_value' + * pyvalue = value + */ + __pyx_t_1 = PyContextVar_Get(__pyx_v_var, ((PyObject *)__pyx_v_default_value), (&__pyx_v_value)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(1, 136, __pyx_L1_error) + + /* "cpython/contextvars.pxd":138 + * PyContextVar_Get(var, default_value, &value) + * # value of context variable or 'default_value' + * pyvalue = value # <<<<<<<<<<<<<< + * Py_XDECREF(value) # PyContextVar_Get() returned an owned reference as 'PyObject*' + * return pyvalue + */ + __pyx_t_2 = ((PyObject *)__pyx_v_value); + __Pyx_INCREF(__pyx_t_2); + __pyx_v_pyvalue = __pyx_t_2; + __pyx_t_2 = 0; + + /* "cpython/contextvars.pxd":139 + * # value of context variable or 'default_value' + * pyvalue = value + * Py_XDECREF(value) # PyContextVar_Get() returned an owned reference as 'PyObject*' # <<<<<<<<<<<<<< + * return pyvalue + */ + Py_XDECREF(__pyx_v_value); + + /* "cpython/contextvars.pxd":140 + * pyvalue = value + * Py_XDECREF(value) # PyContextVar_Get() returned an owned reference as 'PyObject*' + * return pyvalue # <<<<<<<<<<<<<< + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_pyvalue); + __pyx_r = __pyx_v_pyvalue; + goto __pyx_L0; + + /* "cpython/contextvars.pxd":129 + * + * + * cdef inline object get_value_no_default(var, default_value=None): # <<<<<<<<<<<<<< + * """Return a new reference to the value of the context variable, + * or the provided default value if no such value was found. + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("cpython.contextvars.get_value_no_default", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_pyvalue); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":287 + * + * @property + * cdef inline npy_intp itemsize(self) noexcept nogil: # <<<<<<<<<<<<<< + * return PyDataType_ELSIZE(self) + * + */ + +static CYTHON_INLINE npy_intp __pyx_f_5numpy_5dtype_8itemsize_itemsize(PyArray_Descr *__pyx_v_self) { + npy_intp __pyx_r; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":288 + * @property + * cdef inline npy_intp itemsize(self) noexcept nogil: + * return PyDataType_ELSIZE(self) # <<<<<<<<<<<<<< + * + * @property + */ + __pyx_r = PyDataType_ELSIZE(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":287 + * + * @property + * cdef inline npy_intp itemsize(self) noexcept nogil: # <<<<<<<<<<<<<< + * return PyDataType_ELSIZE(self) + * + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":291 + * + * @property + * cdef inline npy_intp alignment(self) noexcept nogil: # <<<<<<<<<<<<<< + * return PyDataType_ALIGNMENT(self) + * + */ + +static CYTHON_INLINE npy_intp __pyx_f_5numpy_5dtype_9alignment_alignment(PyArray_Descr *__pyx_v_self) { + npy_intp __pyx_r; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":292 + * @property + * cdef inline npy_intp alignment(self) noexcept nogil: + * return PyDataType_ALIGNMENT(self) # <<<<<<<<<<<<<< + * + * # Use fields/names with care as they may be NULL. You must check + */ + __pyx_r = PyDataType_ALIGNMENT(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":291 + * + * @property + * cdef inline npy_intp alignment(self) noexcept nogil: # <<<<<<<<<<<<<< + * return PyDataType_ALIGNMENT(self) + * + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":297 + * # for this using PyDataType_HASFIELDS. + * @property + * cdef inline object fields(self): # <<<<<<<<<<<<<< + * return PyDataType_FIELDS(self) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_5dtype_6fields_fields(PyArray_Descr *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1; + __Pyx_RefNannySetupContext("fields", 1); + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":298 + * @property + * cdef inline object fields(self): + * return PyDataType_FIELDS(self) # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyDataType_FIELDS(__pyx_v_self); + __Pyx_INCREF(((PyObject *)__pyx_t_1)); + __pyx_r = ((PyObject *)__pyx_t_1); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":297 + * # for this using PyDataType_HASFIELDS. + * @property + * cdef inline object fields(self): # <<<<<<<<<<<<<< + * return PyDataType_FIELDS(self) + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":301 + * + * @property + * cdef inline tuple names(self): # <<<<<<<<<<<<<< + * return PyDataType_NAMES(self) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_5dtype_5names_names(PyArray_Descr *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1; + __Pyx_RefNannySetupContext("names", 1); + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":302 + * @property + * cdef inline tuple names(self): + * return PyDataType_NAMES(self) # <<<<<<<<<<<<<< + * + * # Use PyDataType_HASSUBARRAY to test whether this field is + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyDataType_NAMES(__pyx_v_self); + __Pyx_INCREF(((PyObject*)__pyx_t_1)); + __pyx_r = ((PyObject*)__pyx_t_1); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":301 + * + * @property + * cdef inline tuple names(self): # <<<<<<<<<<<<<< + * return PyDataType_NAMES(self) + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":308 + * # this field via the inline helper method PyDataType_SHAPE. + * @property + * cdef inline PyArray_ArrayDescr* subarray(self) noexcept nogil: # <<<<<<<<<<<<<< + * return PyDataType_SUBARRAY(self) + * + */ + +static CYTHON_INLINE PyArray_ArrayDescr *__pyx_f_5numpy_5dtype_8subarray_subarray(PyArray_Descr *__pyx_v_self) { + PyArray_ArrayDescr *__pyx_r; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":309 + * @property + * cdef inline PyArray_ArrayDescr* subarray(self) noexcept nogil: + * return PyDataType_SUBARRAY(self) # <<<<<<<<<<<<<< + * + * @property + */ + __pyx_r = PyDataType_SUBARRAY(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":308 + * # this field via the inline helper method PyDataType_SHAPE. + * @property + * cdef inline PyArray_ArrayDescr* subarray(self) noexcept nogil: # <<<<<<<<<<<<<< + * return PyDataType_SUBARRAY(self) + * + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":312 + * + * @property + * cdef inline npy_uint64 flags(self) noexcept nogil: # <<<<<<<<<<<<<< + * """The data types flags.""" + * return PyDataType_FLAGS(self) + */ + +static CYTHON_INLINE npy_uint64 __pyx_f_5numpy_5dtype_5flags_flags(PyArray_Descr *__pyx_v_self) { + npy_uint64 __pyx_r; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":314 + * cdef inline npy_uint64 flags(self) noexcept nogil: + * """The data types flags.""" + * return PyDataType_FLAGS(self) # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = PyDataType_FLAGS(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":312 + * + * @property + * cdef inline npy_uint64 flags(self) noexcept nogil: # <<<<<<<<<<<<<< + * """The data types flags.""" + * return PyDataType_FLAGS(self) + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":324 + * + * @property + * cdef inline int numiter(self) noexcept nogil: # <<<<<<<<<<<<<< + * """The number of arrays that need to be broadcast to the same shape.""" + * return PyArray_MultiIter_NUMITER(self) + */ + +static CYTHON_INLINE int __pyx_f_5numpy_9broadcast_7numiter_numiter(PyArrayMultiIterObject *__pyx_v_self) { + int __pyx_r; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":326 + * cdef inline int numiter(self) noexcept nogil: + * """The number of arrays that need to be broadcast to the same shape.""" + * return PyArray_MultiIter_NUMITER(self) # <<<<<<<<<<<<<< + * + * @property + */ + __pyx_r = PyArray_MultiIter_NUMITER(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":324 + * + * @property + * cdef inline int numiter(self) noexcept nogil: # <<<<<<<<<<<<<< + * """The number of arrays that need to be broadcast to the same shape.""" + * return PyArray_MultiIter_NUMITER(self) + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":329 + * + * @property + * cdef inline npy_intp size(self) noexcept nogil: # <<<<<<<<<<<<<< + * """The total broadcasted size.""" + * return PyArray_MultiIter_SIZE(self) + */ + +static CYTHON_INLINE npy_intp __pyx_f_5numpy_9broadcast_4size_size(PyArrayMultiIterObject *__pyx_v_self) { + npy_intp __pyx_r; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":331 + * cdef inline npy_intp size(self) noexcept nogil: + * """The total broadcasted size.""" + * return PyArray_MultiIter_SIZE(self) # <<<<<<<<<<<<<< + * + * @property + */ + __pyx_r = PyArray_MultiIter_SIZE(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":329 + * + * @property + * cdef inline npy_intp size(self) noexcept nogil: # <<<<<<<<<<<<<< + * """The total broadcasted size.""" + * return PyArray_MultiIter_SIZE(self) + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":334 + * + * @property + * cdef inline npy_intp index(self) noexcept nogil: # <<<<<<<<<<<<<< + * """The current (1-d) index into the broadcasted result.""" + * return PyArray_MultiIter_INDEX(self) + */ + +static CYTHON_INLINE npy_intp __pyx_f_5numpy_9broadcast_5index_index(PyArrayMultiIterObject *__pyx_v_self) { + npy_intp __pyx_r; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":336 + * cdef inline npy_intp index(self) noexcept nogil: + * """The current (1-d) index into the broadcasted result.""" + * return PyArray_MultiIter_INDEX(self) # <<<<<<<<<<<<<< + * + * @property + */ + __pyx_r = PyArray_MultiIter_INDEX(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":334 + * + * @property + * cdef inline npy_intp index(self) noexcept nogil: # <<<<<<<<<<<<<< + * """The current (1-d) index into the broadcasted result.""" + * return PyArray_MultiIter_INDEX(self) + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":339 + * + * @property + * cdef inline int nd(self) noexcept nogil: # <<<<<<<<<<<<<< + * """The number of dimensions in the broadcasted result.""" + * return PyArray_MultiIter_NDIM(self) + */ + +static CYTHON_INLINE int __pyx_f_5numpy_9broadcast_2nd_nd(PyArrayMultiIterObject *__pyx_v_self) { + int __pyx_r; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":341 + * cdef inline int nd(self) noexcept nogil: + * """The number of dimensions in the broadcasted result.""" + * return PyArray_MultiIter_NDIM(self) # <<<<<<<<<<<<<< + * + * @property + */ + __pyx_r = PyArray_MultiIter_NDIM(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":339 + * + * @property + * cdef inline int nd(self) noexcept nogil: # <<<<<<<<<<<<<< + * """The number of dimensions in the broadcasted result.""" + * return PyArray_MultiIter_NDIM(self) + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":344 + * + * @property + * cdef inline npy_intp* dimensions(self) noexcept nogil: # <<<<<<<<<<<<<< + * """The shape of the broadcasted result.""" + * return PyArray_MultiIter_DIMS(self) + */ + +static CYTHON_INLINE npy_intp *__pyx_f_5numpy_9broadcast_10dimensions_dimensions(PyArrayMultiIterObject *__pyx_v_self) { + npy_intp *__pyx_r; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":346 + * cdef inline npy_intp* dimensions(self) noexcept nogil: + * """The shape of the broadcasted result.""" + * return PyArray_MultiIter_DIMS(self) # <<<<<<<<<<<<<< + * + * @property + */ + __pyx_r = PyArray_MultiIter_DIMS(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":344 + * + * @property + * cdef inline npy_intp* dimensions(self) noexcept nogil: # <<<<<<<<<<<<<< + * """The shape of the broadcasted result.""" + * return PyArray_MultiIter_DIMS(self) + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":349 + * + * @property + * cdef inline void** iters(self) noexcept nogil: # <<<<<<<<<<<<<< + * """An array of iterator objects that holds the iterators for the arrays to be broadcast together. + * On return, the iterators are adjusted for broadcasting.""" + */ + +static CYTHON_INLINE void **__pyx_f_5numpy_9broadcast_5iters_iters(PyArrayMultiIterObject *__pyx_v_self) { + void **__pyx_r; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":352 + * """An array of iterator objects that holds the iterators for the arrays to be broadcast together. + * On return, the iterators are adjusted for broadcasting.""" + * return PyArray_MultiIter_ITERS(self) # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = PyArray_MultiIter_ITERS(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":349 + * + * @property + * cdef inline void** iters(self) noexcept nogil: # <<<<<<<<<<<<<< + * """An array of iterator objects that holds the iterators for the arrays to be broadcast together. + * On return, the iterators are adjusted for broadcasting.""" + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":367 + * + * @property + * cdef inline PyObject* base(self) noexcept nogil: # <<<<<<<<<<<<<< + * """Returns a borrowed reference to the object owning the data/memory. + * """ + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_7ndarray_4base_base(PyArrayObject *__pyx_v_self) { + PyObject *__pyx_r; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":370 + * """Returns a borrowed reference to the object owning the data/memory. + * """ + * return PyArray_BASE(self) # <<<<<<<<<<<<<< + * + * @property + */ + __pyx_r = PyArray_BASE(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":367 + * + * @property + * cdef inline PyObject* base(self) noexcept nogil: # <<<<<<<<<<<<<< + * """Returns a borrowed reference to the object owning the data/memory. + * """ + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":373 + * + * @property + * cdef inline dtype descr(self): # <<<<<<<<<<<<<< + * """Returns an owned reference to the dtype of the array. + * """ + */ + +static CYTHON_INLINE PyArray_Descr *__pyx_f_5numpy_7ndarray_5descr_descr(PyArrayObject *__pyx_v_self) { + PyArray_Descr *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyArray_Descr *__pyx_t_1; + __Pyx_RefNannySetupContext("descr", 1); + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":376 + * """Returns an owned reference to the dtype of the array. + * """ + * return PyArray_DESCR(self) # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF((PyObject *)__pyx_r); + __pyx_t_1 = PyArray_DESCR(__pyx_v_self); + __Pyx_INCREF((PyObject *)((PyArray_Descr *)__pyx_t_1)); + __pyx_r = ((PyArray_Descr *)__pyx_t_1); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":373 + * + * @property + * cdef inline dtype descr(self): # <<<<<<<<<<<<<< + * """Returns an owned reference to the dtype of the array. + * """ + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF((PyObject *)__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":379 + * + * @property + * cdef inline int ndim(self) noexcept nogil: # <<<<<<<<<<<<<< + * """Returns the number of dimensions in the array. + * """ + */ + +static CYTHON_INLINE int __pyx_f_5numpy_7ndarray_4ndim_ndim(PyArrayObject *__pyx_v_self) { + int __pyx_r; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":382 + * """Returns the number of dimensions in the array. + * """ + * return PyArray_NDIM(self) # <<<<<<<<<<<<<< + * + * @property + */ + __pyx_r = PyArray_NDIM(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":379 + * + * @property + * cdef inline int ndim(self) noexcept nogil: # <<<<<<<<<<<<<< + * """Returns the number of dimensions in the array. + * """ + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":385 + * + * @property + * cdef inline npy_intp *shape(self) noexcept nogil: # <<<<<<<<<<<<<< + * """Returns a pointer to the dimensions/shape of the array. + * The number of elements matches the number of dimensions of the array (ndim). + */ + +static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_5shape_shape(PyArrayObject *__pyx_v_self) { + npy_intp *__pyx_r; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":390 + * Can return NULL for 0-dimensional arrays. + * """ + * return PyArray_DIMS(self) # <<<<<<<<<<<<<< + * + * @property + */ + __pyx_r = PyArray_DIMS(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":385 + * + * @property + * cdef inline npy_intp *shape(self) noexcept nogil: # <<<<<<<<<<<<<< + * """Returns a pointer to the dimensions/shape of the array. + * The number of elements matches the number of dimensions of the array (ndim). + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":393 + * + * @property + * cdef inline npy_intp *strides(self) noexcept nogil: # <<<<<<<<<<<<<< + * """Returns a pointer to the strides of the array. + * The number of elements matches the number of dimensions of the array (ndim). + */ + +static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_7strides_strides(PyArrayObject *__pyx_v_self) { + npy_intp *__pyx_r; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":397 + * The number of elements matches the number of dimensions of the array (ndim). + * """ + * return PyArray_STRIDES(self) # <<<<<<<<<<<<<< + * + * @property + */ + __pyx_r = PyArray_STRIDES(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":393 + * + * @property + * cdef inline npy_intp *strides(self) noexcept nogil: # <<<<<<<<<<<<<< + * """Returns a pointer to the strides of the array. + * The number of elements matches the number of dimensions of the array (ndim). + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":400 + * + * @property + * cdef inline npy_intp size(self) noexcept nogil: # <<<<<<<<<<<<<< + * """Returns the total size (in number of elements) of the array. + * """ + */ + +static CYTHON_INLINE npy_intp __pyx_f_5numpy_7ndarray_4size_size(PyArrayObject *__pyx_v_self) { + npy_intp __pyx_r; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":403 + * """Returns the total size (in number of elements) of the array. + * """ + * return PyArray_SIZE(self) # <<<<<<<<<<<<<< + * + * @property + */ + __pyx_r = PyArray_SIZE(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":400 + * + * @property + * cdef inline npy_intp size(self) noexcept nogil: # <<<<<<<<<<<<<< + * """Returns the total size (in number of elements) of the array. + * """ + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":406 + * + * @property + * cdef inline char* data(self) noexcept nogil: # <<<<<<<<<<<<<< + * """The pointer to the data buffer as a char*. + * This is provided for legacy reasons to avoid direct struct field access. + */ + +static CYTHON_INLINE char *__pyx_f_5numpy_7ndarray_4data_data(PyArrayObject *__pyx_v_self) { + char *__pyx_r; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":412 + * of `PyArray_DATA()` instead, which returns a 'void*'. + * """ + * return PyArray_BYTES(self) # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = PyArray_BYTES(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":406 + * + * @property + * cdef inline char* data(self) noexcept nogil: # <<<<<<<<<<<<<< + * """The pointer to the data buffer as a char*. + * This is provided for legacy reasons to avoid direct struct field access. + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":824 + * ctypedef long double complex clongdouble_t + * + * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(1, a) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__pyx_v_a) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("PyArray_MultiIterNew1", 1); + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":825 + * + * cdef inline object PyArray_MultiIterNew1(a): + * return PyArray_MultiIterNew(1, a) # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew2(a, b): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(1, ((void *)__pyx_v_a)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 825, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":824 + * ctypedef long double complex clongdouble_t + * + * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(1, a) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew1", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":827 + * return PyArray_MultiIterNew(1, a) + * + * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(2, a, b) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__pyx_v_a, PyObject *__pyx_v_b) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("PyArray_MultiIterNew2", 1); + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":828 + * + * cdef inline object PyArray_MultiIterNew2(a, b): + * return PyArray_MultiIterNew(2, a, b) # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew3(a, b, c): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(2, ((void *)__pyx_v_a), ((void *)__pyx_v_b)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 828, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":827 + * return PyArray_MultiIterNew(1, a) + * + * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(2, a, b) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew2", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":830 + * return PyArray_MultiIterNew(2, a, b) + * + * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(3, a, b, c) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("PyArray_MultiIterNew3", 1); + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":831 + * + * cdef inline object PyArray_MultiIterNew3(a, b, c): + * return PyArray_MultiIterNew(3, a, b, c) # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew4(a, b, c, d): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(3, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 831, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":830 + * return PyArray_MultiIterNew(2, a, b) + * + * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(3, a, b, c) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew3", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":833 + * return PyArray_MultiIterNew(3, a, b, c) + * + * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(4, a, b, c, d) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("PyArray_MultiIterNew4", 1); + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":834 + * + * cdef inline object PyArray_MultiIterNew4(a, b, c, d): + * return PyArray_MultiIterNew(4, a, b, c, d) # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(4, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 834, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":833 + * return PyArray_MultiIterNew(3, a, b, c) + * + * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(4, a, b, c, d) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew4", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":836 + * return PyArray_MultiIterNew(4, a, b, c, d) + * + * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(5, a, b, c, d, e) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d, PyObject *__pyx_v_e) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("PyArray_MultiIterNew5", 1); + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":837 + * + * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): + * return PyArray_MultiIterNew(5, a, b, c, d, e) # <<<<<<<<<<<<<< + * + * cdef inline tuple PyDataType_SHAPE(dtype d): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(5, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d), ((void *)__pyx_v_e)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 837, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":836 + * return PyArray_MultiIterNew(4, a, b, c, d) + * + * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(5, a, b, c, d, e) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew5", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":839 + * return PyArray_MultiIterNew(5, a, b, c, d, e) + * + * cdef inline tuple PyDataType_SHAPE(dtype d): # <<<<<<<<<<<<<< + * if PyDataType_HASSUBARRAY(d): + * return d.subarray.shape + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__pyx_v_d) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2; + __Pyx_RefNannySetupContext("PyDataType_SHAPE", 1); + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":840 + * + * cdef inline tuple PyDataType_SHAPE(dtype d): + * if PyDataType_HASSUBARRAY(d): # <<<<<<<<<<<<<< + * return d.subarray.shape + * else: + */ + __pyx_t_1 = PyDataType_HASSUBARRAY(__pyx_v_d); + if (__pyx_t_1) { + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":841 + * cdef inline tuple PyDataType_SHAPE(dtype d): + * if PyDataType_HASSUBARRAY(d): + * return d.subarray.shape # <<<<<<<<<<<<<< + * else: + * return () + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __pyx_f_5numpy_5dtype_8subarray_subarray(__pyx_v_d)->shape; + __Pyx_INCREF(((PyObject*)__pyx_t_2)); + __pyx_r = ((PyObject*)__pyx_t_2); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":840 + * + * cdef inline tuple PyDataType_SHAPE(dtype d): + * if PyDataType_HASSUBARRAY(d): # <<<<<<<<<<<<<< + * return d.subarray.shape + * else: + */ + } + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":843 + * return d.subarray.shape + * else: + * return () # <<<<<<<<<<<<<< + * + * + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_empty_tuple); + __pyx_r = __pyx_empty_tuple; + goto __pyx_L0; + } + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":839 + * return PyArray_MultiIterNew(5, a, b, c, d, e) + * + * cdef inline tuple PyDataType_SHAPE(dtype d): # <<<<<<<<<<<<<< + * if PyDataType_HASSUBARRAY(d): + * return d.subarray.shape + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1027 + * int _import_umath() except -1 + * + * cdef inline void set_array_base(ndarray arr, object base) except *: # <<<<<<<<<<<<<< + * Py_INCREF(base) # important to do this before stealing the reference below! + * PyArray_SetBaseObject(arr, base) + */ + +static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_arr, PyObject *__pyx_v_base) { + int __pyx_t_1; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1028 + * + * cdef inline void set_array_base(ndarray arr, object base) except *: + * Py_INCREF(base) # important to do this before stealing the reference below! # <<<<<<<<<<<<<< + * PyArray_SetBaseObject(arr, base) + * + */ + Py_INCREF(__pyx_v_base); + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1029 + * cdef inline void set_array_base(ndarray arr, object base) except *: + * Py_INCREF(base) # important to do this before stealing the reference below! + * PyArray_SetBaseObject(arr, base) # <<<<<<<<<<<<<< + * + * cdef inline object get_array_base(ndarray arr): + */ + __pyx_t_1 = PyArray_SetBaseObject(__pyx_v_arr, __pyx_v_base); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(2, 1029, __pyx_L1_error) + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1027 + * int _import_umath() except -1 + * + * cdef inline void set_array_base(ndarray arr, object base) except *: # <<<<<<<<<<<<<< + * Py_INCREF(base) # important to do this before stealing the reference below! + * PyArray_SetBaseObject(arr, base) + */ + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_AddTraceback("numpy.set_array_base", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_L0:; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1031 + * PyArray_SetBaseObject(arr, base) + * + * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< + * base = PyArray_BASE(arr) + * if base is NULL: + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__pyx_v_arr) { + PyObject *__pyx_v_base; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("get_array_base", 1); + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1032 + * + * cdef inline object get_array_base(ndarray arr): + * base = PyArray_BASE(arr) # <<<<<<<<<<<<<< + * if base is NULL: + * return None + */ + __pyx_v_base = PyArray_BASE(__pyx_v_arr); + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1033 + * cdef inline object get_array_base(ndarray arr): + * base = PyArray_BASE(arr) + * if base is NULL: # <<<<<<<<<<<<<< + * return None + * return base + */ + __pyx_t_1 = (__pyx_v_base == NULL); + if (__pyx_t_1) { + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1034 + * base = PyArray_BASE(arr) + * if base is NULL: + * return None # <<<<<<<<<<<<<< + * return base + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1033 + * cdef inline object get_array_base(ndarray arr): + * base = PyArray_BASE(arr) + * if base is NULL: # <<<<<<<<<<<<<< + * return None + * return base + */ + } + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1035 + * if base is NULL: + * return None + * return base # <<<<<<<<<<<<<< + * + * # Versions of the import_* functions which are more suitable for + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_base)); + __pyx_r = ((PyObject *)__pyx_v_base); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1031 + * PyArray_SetBaseObject(arr, base) + * + * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< + * base = PyArray_BASE(arr) + * if base is NULL: + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1039 + * # Versions of the import_* functions which are more suitable for + * # Cython code. + * cdef inline int import_array() except -1: # <<<<<<<<<<<<<< + * try: + * __pyx_import_array() + */ + +static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("import_array", 1); + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1040 + * # Cython code. + * cdef inline int import_array() except -1: + * try: # <<<<<<<<<<<<<< + * __pyx_import_array() + * except Exception: + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + /*try:*/ { + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1041 + * cdef inline int import_array() except -1: + * try: + * __pyx_import_array() # <<<<<<<<<<<<<< + * except Exception: + * raise ImportError("numpy._core.multiarray failed to import") + */ + __pyx_t_4 = _import_array(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(2, 1041, __pyx_L3_error) + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1040 + * # Cython code. + * cdef inline int import_array() except -1: + * try: # <<<<<<<<<<<<<< + * __pyx_import_array() + * except Exception: + */ + } + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L8_try_end; + __pyx_L3_error:; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1042 + * try: + * __pyx_import_array() + * except Exception: # <<<<<<<<<<<<<< + * raise ImportError("numpy._core.multiarray failed to import") + * + */ + __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); + if (__pyx_t_4) { + __Pyx_AddTraceback("numpy.import_array", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(2, 1042, __pyx_L5_except_error) + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_7); + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1043 + * __pyx_import_array() + * except Exception: + * raise ImportError("numpy._core.multiarray failed to import") # <<<<<<<<<<<<<< + * + * cdef inline int import_umath() except -1: + */ + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 1043, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_Raise(__pyx_t_8, 0, 0, 0); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __PYX_ERR(2, 1043, __pyx_L5_except_error) + } + goto __pyx_L5_except_error; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1040 + * # Cython code. + * cdef inline int import_array() except -1: + * try: # <<<<<<<<<<<<<< + * __pyx_import_array() + * except Exception: + */ + __pyx_L5_except_error:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L1_error; + __pyx_L8_try_end:; + } + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1039 + * # Versions of the import_* functions which are more suitable for + * # Cython code. + * cdef inline int import_array() except -1: # <<<<<<<<<<<<<< + * try: + * __pyx_import_array() + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("numpy.import_array", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1045 + * raise ImportError("numpy._core.multiarray failed to import") + * + * cdef inline int import_umath() except -1: # <<<<<<<<<<<<<< + * try: + * _import_umath() + */ + +static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("import_umath", 1); + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1046 + * + * cdef inline int import_umath() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + /*try:*/ { + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1047 + * cdef inline int import_umath() except -1: + * try: + * _import_umath() # <<<<<<<<<<<<<< + * except Exception: + * raise ImportError("numpy._core.umath failed to import") + */ + __pyx_t_4 = _import_umath(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(2, 1047, __pyx_L3_error) + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1046 + * + * cdef inline int import_umath() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: + */ + } + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L8_try_end; + __pyx_L3_error:; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1048 + * try: + * _import_umath() + * except Exception: # <<<<<<<<<<<<<< + * raise ImportError("numpy._core.umath failed to import") + * + */ + __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); + if (__pyx_t_4) { + __Pyx_AddTraceback("numpy.import_umath", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(2, 1048, __pyx_L5_except_error) + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_7); + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1049 + * _import_umath() + * except Exception: + * raise ImportError("numpy._core.umath failed to import") # <<<<<<<<<<<<<< + * + * cdef inline int import_ufunc() except -1: + */ + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 1049, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_Raise(__pyx_t_8, 0, 0, 0); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __PYX_ERR(2, 1049, __pyx_L5_except_error) + } + goto __pyx_L5_except_error; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1046 + * + * cdef inline int import_umath() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: + */ + __pyx_L5_except_error:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L1_error; + __pyx_L8_try_end:; + } + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1045 + * raise ImportError("numpy._core.multiarray failed to import") + * + * cdef inline int import_umath() except -1: # <<<<<<<<<<<<<< + * try: + * _import_umath() + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("numpy.import_umath", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1051 + * raise ImportError("numpy._core.umath failed to import") + * + * cdef inline int import_ufunc() except -1: # <<<<<<<<<<<<<< + * try: + * _import_umath() + */ + +static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("import_ufunc", 1); + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1052 + * + * cdef inline int import_ufunc() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + /*try:*/ { + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1053 + * cdef inline int import_ufunc() except -1: + * try: + * _import_umath() # <<<<<<<<<<<<<< + * except Exception: + * raise ImportError("numpy._core.umath failed to import") + */ + __pyx_t_4 = _import_umath(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(2, 1053, __pyx_L3_error) + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1052 + * + * cdef inline int import_ufunc() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: + */ + } + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L8_try_end; + __pyx_L3_error:; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1054 + * try: + * _import_umath() + * except Exception: # <<<<<<<<<<<<<< + * raise ImportError("numpy._core.umath failed to import") + * + */ + __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); + if (__pyx_t_4) { + __Pyx_AddTraceback("numpy.import_ufunc", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(2, 1054, __pyx_L5_except_error) + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_7); + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1055 + * _import_umath() + * except Exception: + * raise ImportError("numpy._core.umath failed to import") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 1055, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_Raise(__pyx_t_8, 0, 0, 0); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __PYX_ERR(2, 1055, __pyx_L5_except_error) + } + goto __pyx_L5_except_error; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1052 + * + * cdef inline int import_ufunc() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: + */ + __pyx_L5_except_error:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L1_error; + __pyx_L8_try_end:; + } + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1051 + * raise ImportError("numpy._core.umath failed to import") + * + * cdef inline int import_ufunc() except -1: # <<<<<<<<<<<<<< + * try: + * _import_umath() + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("numpy.import_ufunc", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1058 + * + * + * cdef inline bint is_timedelta64_object(object obj) noexcept: # <<<<<<<<<<<<<< + * """ + * Cython equivalent of `isinstance(obj, np.timedelta64)` + */ + +static CYTHON_INLINE int __pyx_f_5numpy_is_timedelta64_object(PyObject *__pyx_v_obj) { + int __pyx_r; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1070 + * bool + * """ + * return PyObject_TypeCheck(obj, &PyTimedeltaArrType_Type) # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = PyObject_TypeCheck(__pyx_v_obj, (&PyTimedeltaArrType_Type)); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1058 + * + * + * cdef inline bint is_timedelta64_object(object obj) noexcept: # <<<<<<<<<<<<<< + * """ + * Cython equivalent of `isinstance(obj, np.timedelta64)` + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1073 + * + * + * cdef inline bint is_datetime64_object(object obj) noexcept: # <<<<<<<<<<<<<< + * """ + * Cython equivalent of `isinstance(obj, np.datetime64)` + */ + +static CYTHON_INLINE int __pyx_f_5numpy_is_datetime64_object(PyObject *__pyx_v_obj) { + int __pyx_r; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1085 + * bool + * """ + * return PyObject_TypeCheck(obj, &PyDatetimeArrType_Type) # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = PyObject_TypeCheck(__pyx_v_obj, (&PyDatetimeArrType_Type)); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1073 + * + * + * cdef inline bint is_datetime64_object(object obj) noexcept: # <<<<<<<<<<<<<< + * """ + * Cython equivalent of `isinstance(obj, np.datetime64)` + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1088 + * + * + * cdef inline npy_datetime get_datetime64_value(object obj) noexcept nogil: # <<<<<<<<<<<<<< + * """ + * returns the int64 value underlying scalar numpy datetime64 object + */ + +static CYTHON_INLINE npy_datetime __pyx_f_5numpy_get_datetime64_value(PyObject *__pyx_v_obj) { + npy_datetime __pyx_r; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1095 + * also needed. That can be found using `get_datetime64_unit`. + * """ + * return (obj).obval # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = ((PyDatetimeScalarObject *)__pyx_v_obj)->obval; + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1088 + * + * + * cdef inline npy_datetime get_datetime64_value(object obj) noexcept nogil: # <<<<<<<<<<<<<< + * """ + * returns the int64 value underlying scalar numpy datetime64 object + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1098 + * + * + * cdef inline npy_timedelta get_timedelta64_value(object obj) noexcept nogil: # <<<<<<<<<<<<<< + * """ + * returns the int64 value underlying scalar numpy timedelta64 object + */ + +static CYTHON_INLINE npy_timedelta __pyx_f_5numpy_get_timedelta64_value(PyObject *__pyx_v_obj) { + npy_timedelta __pyx_r; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1102 + * returns the int64 value underlying scalar numpy timedelta64 object + * """ + * return (obj).obval # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = ((PyTimedeltaScalarObject *)__pyx_v_obj)->obval; + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1098 + * + * + * cdef inline npy_timedelta get_timedelta64_value(object obj) noexcept nogil: # <<<<<<<<<<<<<< + * """ + * returns the int64 value underlying scalar numpy timedelta64 object + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1105 + * + * + * cdef inline NPY_DATETIMEUNIT get_datetime64_unit(object obj) noexcept nogil: # <<<<<<<<<<<<<< + * """ + * returns the unit part of the dtype for a numpy datetime64 object. + */ + +static CYTHON_INLINE NPY_DATETIMEUNIT __pyx_f_5numpy_get_datetime64_unit(PyObject *__pyx_v_obj) { + NPY_DATETIMEUNIT __pyx_r; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1109 + * returns the unit part of the dtype for a numpy datetime64 object. + * """ + * return (obj).obmeta.base # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = ((NPY_DATETIMEUNIT)((PyDatetimeScalarObject *)__pyx_v_obj)->obmeta.base); + goto __pyx_L0; + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1105 + * + * + * cdef inline NPY_DATETIMEUNIT get_datetime64_unit(object obj) noexcept nogil: # <<<<<<<<<<<<<< + * """ + * returns the unit part of the dtype for a numpy datetime64 object. + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "nw_ec_alignx.pyx":38 + * + * + * cdef minarg(float f[3]): # <<<<<<<<<<<<<< + * """Returns the minimum value and the index of that value from an array + * of 3 elements + */ + +static PyObject *__pyx_f_12nw_ec_alignx_minarg(float *__pyx_v_f) { + int __pyx_v_i; + int __pyx_v_argmin; + float __pyx_v_mini; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("minarg", 1); + + /* "nw_ec_alignx.pyx":44 + * cdef: + * int i + * int argmin = 0 # <<<<<<<<<<<<<< + * float mini = f[0] + * for i in range(1, 3): + */ + __pyx_v_argmin = 0; + + /* "nw_ec_alignx.pyx":45 + * int i + * int argmin = 0 + * float mini = f[0] # <<<<<<<<<<<<<< + * for i in range(1, 3): + * if f[i] < mini: + */ + __pyx_v_mini = (__pyx_v_f[0]); + + /* "nw_ec_alignx.pyx":46 + * int argmin = 0 + * float mini = f[0] + * for i in range(1, 3): # <<<<<<<<<<<<<< + * if f[i] < mini: + * mini = f[i] + */ + for (__pyx_t_1 = 1; __pyx_t_1 < 3; __pyx_t_1+=1) { + __pyx_v_i = __pyx_t_1; + + /* "nw_ec_alignx.pyx":47 + * float mini = f[0] + * for i in range(1, 3): + * if f[i] < mini: # <<<<<<<<<<<<<< + * mini = f[i] + * argmin = i + */ + __pyx_t_2 = ((__pyx_v_f[__pyx_v_i]) < __pyx_v_mini); + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":48 + * for i in range(1, 3): + * if f[i] < mini: + * mini = f[i] # <<<<<<<<<<<<<< + * argmin = i + * return mini, argmin + */ + __pyx_v_mini = (__pyx_v_f[__pyx_v_i]); + + /* "nw_ec_alignx.pyx":49 + * if f[i] < mini: + * mini = f[i] + * argmin = i # <<<<<<<<<<<<<< + * return mini, argmin + * + */ + __pyx_v_argmin = __pyx_v_i; + + /* "nw_ec_alignx.pyx":47 + * float mini = f[0] + * for i in range(1, 3): + * if f[i] < mini: # <<<<<<<<<<<<<< + * mini = f[i] + * argmin = i + */ + } + } + + /* "nw_ec_alignx.pyx":50 + * mini = f[i] + * argmin = i + * return mini, argmin # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = PyFloat_FromDouble(__pyx_v_mini); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 50, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_argmin); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 50, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 50, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3)) __PYX_ERR(0, 50, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4)) __PYX_ERR(0, 50, __pyx_L1_error); + __pyx_t_3 = 0; + __pyx_t_4 = 0; + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L0; + + /* "nw_ec_alignx.pyx":38 + * + * + * cdef minarg(float f[3]): # <<<<<<<<<<<<<< + * """Returns the minimum value and the index of that value from an array + * of 3 elements + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("nw_ec_alignx.minarg", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "nw_ec_alignx.pyx":54 + * + * # best performance + * @cython.boundscheck(False) # <<<<<<<<<<<<<< + * @cython.wraparound(False) + * def _FastNW(np.ndarray[DTYPEF_t, ndim=2] mat, dict ecs, list seq1, list seq2, + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_12nw_ec_alignx_1_FastNW(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_12nw_ec_alignx__FastNW, "Perform dynamic programing alignment of EC numbers sequences. Creates\n the scoring and arrow matrices using brute force loops.\n\n Returns the dynamic programing matrix and the arrow matrix used to trace\n back the alignment.\n\n Arguments:\n - `mat`: EC number similarity (distance) matrix\n - `ecs`: EC number dictionary. Keys are EC numbers (3 levels of\n classification) and values are indices to similarity matrix (mat)\n - `seq1`: enzymatic step sequence 1, list of (unaligned) EC numbers\n - `seq2`: enzymatic step sequence 2, list of (unaligned) EC numbers\n - `gap`: gap penalties, default = 1\n "); +static PyMethodDef __pyx_mdef_12nw_ec_alignx_1_FastNW = {"_FastNW", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_12nw_ec_alignx_1_FastNW, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_12nw_ec_alignx__FastNW}; +static PyObject *__pyx_pw_12nw_ec_alignx_1_FastNW(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyArrayObject *__pyx_v_mat = 0; + PyObject *__pyx_v_ecs = 0; + PyObject *__pyx_v_seq1 = 0; + PyObject *__pyx_v_seq2 = 0; + float __pyx_v_gap; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[5] = {0,0,0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("_FastNW (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_mat,&__pyx_n_s_ecs,&__pyx_n_s_seq1,&__pyx_n_s_seq2,&__pyx_n_s_gap,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_mat)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 54, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_ecs)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 54, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_FastNW", 0, 4, 5, 1); __PYX_ERR(0, 54, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_seq1)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 54, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_FastNW", 0, 4, 5, 2); __PYX_ERR(0, 54, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_seq2)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 54, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_FastNW", 0, 4, 5, 3); __PYX_ERR(0, 54, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gap); + if (value) { values[4] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 54, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_FastNW") < 0)) __PYX_ERR(0, 54, __pyx_L3_error) + } + } else { + switch (__pyx_nargs) { + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_mat = ((PyArrayObject *)values[0]); + __pyx_v_ecs = ((PyObject*)values[1]); + __pyx_v_seq1 = ((PyObject*)values[2]); + __pyx_v_seq2 = ((PyObject*)values[3]); + if (values[4]) { + __pyx_v_gap = __pyx_PyFloat_AsFloat(values[4]); if (unlikely((__pyx_v_gap == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 57, __pyx_L3_error) + } else { + __pyx_v_gap = ((float)((double)0.9)); + } + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("_FastNW", 0, 4, 5, __pyx_nargs); __PYX_ERR(0, 54, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("nw_ec_alignx._FastNW", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_5numpy_ndarray, 1, "mat", 0))) __PYX_ERR(0, 56, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ecs), (&PyDict_Type), 1, "ecs", 1))) __PYX_ERR(0, 56, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_seq1), (&PyList_Type), 1, "seq1", 1))) __PYX_ERR(0, 56, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_seq2), (&PyList_Type), 1, "seq2", 1))) __PYX_ERR(0, 56, __pyx_L1_error) + __pyx_r = __pyx_pf_12nw_ec_alignx__FastNW(__pyx_self, __pyx_v_mat, __pyx_v_ecs, __pyx_v_seq1, __pyx_v_seq2, __pyx_v_gap); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_12nw_ec_alignx__FastNW(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_mat, PyObject *__pyx_v_ecs, PyObject *__pyx_v_seq1, PyObject *__pyx_v_seq2, float __pyx_v_gap) { + int __pyx_v_l1; + int __pyx_v_l2; + int __pyx_v_i; + int __pyx_v_j; + int __pyx_v_k; + int __pyx_v_eci; + int __pyx_v_ecj; + int __pyx_v_minpos; + float __pyx_v_mini; + float __pyx_v_randfactor; + float __pyx_v_f[3]; + PyArrayObject *__pyx_v_scoremat = 0; + PyArrayObject *__pyx_v_arrow = 0; + PyObject *__pyx_v_sco = NULL; + double __pyx_v_randnum; + __Pyx_LocalBuf_ND __pyx_pybuffernd_arrow; + __Pyx_Buffer __pyx_pybuffer_arrow; + __Pyx_LocalBuf_ND __pyx_pybuffernd_mat; + __Pyx_Buffer __pyx_pybuffer_mat; + __Pyx_LocalBuf_ND __pyx_pybuffernd_scoremat; + __Pyx_Buffer __pyx_pybuffer_scoremat; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + Py_ssize_t __pyx_t_1; + Py_ssize_t __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + unsigned int __pyx_t_8; + PyArrayObject *__pyx_t_9 = NULL; + PyArrayObject *__pyx_t_10 = NULL; + long __pyx_t_11; + long __pyx_t_12; + int __pyx_t_13; + Py_ssize_t __pyx_t_14; + Py_ssize_t __pyx_t_15; + long __pyx_t_16; + long __pyx_t_17; + int __pyx_t_18; + long __pyx_t_19; + int __pyx_t_20; + float __pyx_t_21; + int __pyx_t_22; + PyObject *(*__pyx_t_23)(PyObject *); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_FastNW", 1); + __pyx_pybuffer_scoremat.pybuffer.buf = NULL; + __pyx_pybuffer_scoremat.refcount = 0; + __pyx_pybuffernd_scoremat.data = NULL; + __pyx_pybuffernd_scoremat.rcbuffer = &__pyx_pybuffer_scoremat; + __pyx_pybuffer_arrow.pybuffer.buf = NULL; + __pyx_pybuffer_arrow.refcount = 0; + __pyx_pybuffernd_arrow.data = NULL; + __pyx_pybuffernd_arrow.rcbuffer = &__pyx_pybuffer_arrow; + __pyx_pybuffer_mat.pybuffer.buf = NULL; + __pyx_pybuffer_mat.refcount = 0; + __pyx_pybuffernd_mat.data = NULL; + __pyx_pybuffernd_mat.rcbuffer = &__pyx_pybuffer_mat; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mat.rcbuffer->pybuffer, (PyObject*)__pyx_v_mat, &__Pyx_TypeInfo_nn___pyx_t_12nw_ec_alignx_DTYPEF_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 54, __pyx_L1_error) + } + __pyx_pybuffernd_mat.diminfo[0].strides = __pyx_pybuffernd_mat.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_mat.diminfo[0].shape = __pyx_pybuffernd_mat.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_mat.diminfo[1].strides = __pyx_pybuffernd_mat.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_mat.diminfo[1].shape = __pyx_pybuffernd_mat.rcbuffer->pybuffer.shape[1]; + + /* "nw_ec_alignx.pyx":76 + * float mini, randum, randfactor + * float f[3] + * mini = 0 # <<<<<<<<<<<<<< + * l1, l2 = len(seq1), len(seq2) + * # Create the score and arrow matrices + */ + __pyx_v_mini = 0.0; + + /* "nw_ec_alignx.pyx":77 + * float f[3] + * mini = 0 + * l1, l2 = len(seq1), len(seq2) # <<<<<<<<<<<<<< + * # Create the score and arrow matrices + * cdef np.ndarray[DTYPEF_t, ndim= 2] scoremat = np.zeros((l1 + 1, l2 + 1), DTYPEF) + */ + if (unlikely(__pyx_v_seq1 == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(0, 77, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_PyList_GET_SIZE(__pyx_v_seq1); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 77, __pyx_L1_error) + if (unlikely(__pyx_v_seq2 == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(0, 77, __pyx_L1_error) + } + __pyx_t_2 = __Pyx_PyList_GET_SIZE(__pyx_v_seq2); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(0, 77, __pyx_L1_error) + __pyx_v_l1 = __pyx_t_1; + __pyx_v_l2 = __pyx_t_2; + + /* "nw_ec_alignx.pyx":79 + * l1, l2 = len(seq1), len(seq2) + * # Create the score and arrow matrices + * cdef np.ndarray[DTYPEF_t, ndim= 2] scoremat = np.zeros((l1 + 1, l2 + 1), DTYPEF) # <<<<<<<<<<<<<< + * cdef np.ndarray[DTYPE_t, ndim= 2] arrow = np.zeros((l1 + 1, l2 + 1), DTYPE) + * # Create first row and first column with gaps + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 79, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_zeros); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 79, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyInt_From_long((__pyx_v_l1 + 1)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 79, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = __Pyx_PyInt_From_long((__pyx_v_l2 + 1)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 79, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 79, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_4)) __PYX_ERR(0, 79, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_6); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6)) __PYX_ERR(0, 79, __pyx_L1_error); + __pyx_t_4 = 0; + __pyx_t_6 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_DTYPEF); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 79, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_4 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_7, __pyx_t_6}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_8, 2+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 79, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 79, __pyx_L1_error) + __pyx_t_9 = ((PyArrayObject *)__pyx_t_3); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_scoremat.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_12nw_ec_alignx_DTYPEF_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_scoremat = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_scoremat.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 79, __pyx_L1_error) + } else {__pyx_pybuffernd_scoremat.diminfo[0].strides = __pyx_pybuffernd_scoremat.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_scoremat.diminfo[0].shape = __pyx_pybuffernd_scoremat.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_scoremat.diminfo[1].strides = __pyx_pybuffernd_scoremat.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_scoremat.diminfo[1].shape = __pyx_pybuffernd_scoremat.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_9 = 0; + __pyx_v_scoremat = ((PyArrayObject *)__pyx_t_3); + __pyx_t_3 = 0; + + /* "nw_ec_alignx.pyx":80 + * # Create the score and arrow matrices + * cdef np.ndarray[DTYPEF_t, ndim= 2] scoremat = np.zeros((l1 + 1, l2 + 1), DTYPEF) + * cdef np.ndarray[DTYPE_t, ndim= 2] arrow = np.zeros((l1 + 1, l2 + 1), DTYPE) # <<<<<<<<<<<<<< + * # Create first row and first column with gaps + * for i in range(l2 + 1): + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 80, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_zeros); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 80, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyInt_From_long((__pyx_v_l1 + 1)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 80, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_7 = __Pyx_PyInt_From_long((__pyx_v_l2 + 1)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 80, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 80, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_5); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5)) __PYX_ERR(0, 80, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_7); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_7)) __PYX_ERR(0, 80, __pyx_L1_error); + __pyx_t_5 = 0; + __pyx_t_7 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 80, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_5 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_4, __pyx_t_7}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_8, 2+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 80, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 80, __pyx_L1_error) + __pyx_t_10 = ((PyArrayObject *)__pyx_t_3); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_arrow.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_nn___pyx_t_12nw_ec_alignx_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_arrow = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_arrow.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 80, __pyx_L1_error) + } else {__pyx_pybuffernd_arrow.diminfo[0].strides = __pyx_pybuffernd_arrow.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_arrow.diminfo[0].shape = __pyx_pybuffernd_arrow.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_arrow.diminfo[1].strides = __pyx_pybuffernd_arrow.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_arrow.diminfo[1].shape = __pyx_pybuffernd_arrow.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_10 = 0; + __pyx_v_arrow = ((PyArrayObject *)__pyx_t_3); + __pyx_t_3 = 0; + + /* "nw_ec_alignx.pyx":82 + * cdef np.ndarray[DTYPE_t, ndim= 2] arrow = np.zeros((l1 + 1, l2 + 1), DTYPE) + * # Create first row and first column with gaps + * for i in range(l2 + 1): # <<<<<<<<<<<<<< + * scoremat[0, i] = i * gap + * arrow[0, i] = 1 + */ + __pyx_t_11 = (__pyx_v_l2 + 1); + __pyx_t_12 = __pyx_t_11; + for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) { + __pyx_v_i = __pyx_t_13; + + /* "nw_ec_alignx.pyx":83 + * # Create first row and first column with gaps + * for i in range(l2 + 1): + * scoremat[0, i] = i * gap # <<<<<<<<<<<<<< + * arrow[0, i] = 1 + * for i in range(l1 + 1): + */ + __pyx_t_14 = 0; + __pyx_t_15 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_12nw_ec_alignx_DTYPEF_t *, __pyx_pybuffernd_scoremat.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_scoremat.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_scoremat.diminfo[1].strides) = (__pyx_v_i * __pyx_v_gap); + + /* "nw_ec_alignx.pyx":84 + * for i in range(l2 + 1): + * scoremat[0, i] = i * gap + * arrow[0, i] = 1 # <<<<<<<<<<<<<< + * for i in range(l1 + 1): + * scoremat[i, 0] = i * gap + */ + __pyx_t_15 = 0; + __pyx_t_14 = __pyx_v_i; + *__Pyx_BufPtrStrided2d(__pyx_t_12nw_ec_alignx_DTYPE_t *, __pyx_pybuffernd_arrow.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_arrow.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_arrow.diminfo[1].strides) = 1; + } + + /* "nw_ec_alignx.pyx":85 + * scoremat[0, i] = i * gap + * arrow[0, i] = 1 + * for i in range(l1 + 1): # <<<<<<<<<<<<<< + * scoremat[i, 0] = i * gap + * # Fill the matrix. f array is cell posible values (len = 3) + */ + __pyx_t_11 = (__pyx_v_l1 + 1); + __pyx_t_12 = __pyx_t_11; + for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) { + __pyx_v_i = __pyx_t_13; + + /* "nw_ec_alignx.pyx":86 + * arrow[0, i] = 1 + * for i in range(l1 + 1): + * scoremat[i, 0] = i * gap # <<<<<<<<<<<<<< + * # Fill the matrix. f array is cell posible values (len = 3) + * for i in range(1, l1 + 1): + */ + __pyx_t_14 = __pyx_v_i; + __pyx_t_15 = 0; + *__Pyx_BufPtrStrided2d(__pyx_t_12nw_ec_alignx_DTYPEF_t *, __pyx_pybuffernd_scoremat.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_scoremat.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_scoremat.diminfo[1].strides) = (__pyx_v_i * __pyx_v_gap); + } + + /* "nw_ec_alignx.pyx":88 + * scoremat[i, 0] = i * gap + * # Fill the matrix. f array is cell posible values (len = 3) + * for i in range(1, l1 + 1): # <<<<<<<<<<<<<< + * for j in range(1, l2 + 1): + * eci = ecs[seq1[i - 1]] + */ + __pyx_t_11 = (__pyx_v_l1 + 1); + __pyx_t_12 = __pyx_t_11; + for (__pyx_t_13 = 1; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) { + __pyx_v_i = __pyx_t_13; + + /* "nw_ec_alignx.pyx":89 + * # Fill the matrix. f array is cell posible values (len = 3) + * for i in range(1, l1 + 1): + * for j in range(1, l2 + 1): # <<<<<<<<<<<<<< + * eci = ecs[seq1[i - 1]] + * ecj = ecs[seq2[j - 1]] + */ + __pyx_t_16 = (__pyx_v_l2 + 1); + __pyx_t_17 = __pyx_t_16; + for (__pyx_t_18 = 1; __pyx_t_18 < __pyx_t_17; __pyx_t_18+=1) { + __pyx_v_j = __pyx_t_18; + + /* "nw_ec_alignx.pyx":90 + * for i in range(1, l1 + 1): + * for j in range(1, l2 + 1): + * eci = ecs[seq1[i - 1]] # <<<<<<<<<<<<<< + * ecj = ecs[seq2[j - 1]] + * sco = mat[eci, ecj] + */ + if (unlikely(__pyx_v_ecs == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 90, __pyx_L1_error) + } + if (unlikely(__pyx_v_seq1 == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 90, __pyx_L1_error) + } + __pyx_t_19 = (__pyx_v_i - 1); + __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_ecs, PyList_GET_ITEM(__pyx_v_seq1, __pyx_t_19)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 90, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_20 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_20 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 90, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_eci = __pyx_t_20; + + /* "nw_ec_alignx.pyx":91 + * for j in range(1, l2 + 1): + * eci = ecs[seq1[i - 1]] + * ecj = ecs[seq2[j - 1]] # <<<<<<<<<<<<<< + * sco = mat[eci, ecj] + * f[0] = scoremat[i - 1, j] + gap + */ + if (unlikely(__pyx_v_ecs == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 91, __pyx_L1_error) + } + if (unlikely(__pyx_v_seq2 == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 91, __pyx_L1_error) + } + __pyx_t_19 = (__pyx_v_j - 1); + __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_ecs, PyList_GET_ITEM(__pyx_v_seq2, __pyx_t_19)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 91, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_20 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_20 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 91, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_ecj = __pyx_t_20; + + /* "nw_ec_alignx.pyx":92 + * eci = ecs[seq1[i - 1]] + * ecj = ecs[seq2[j - 1]] + * sco = mat[eci, ecj] # <<<<<<<<<<<<<< + * f[0] = scoremat[i - 1, j] + gap + * f[1] = scoremat[i, j - 1] + gap + */ + __pyx_t_15 = __pyx_v_eci; + __pyx_t_14 = __pyx_v_ecj; + __pyx_t_3 = PyFloat_FromDouble((*__Pyx_BufPtrStrided2d(__pyx_t_12nw_ec_alignx_DTYPEF_t *, __pyx_pybuffernd_mat.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_mat.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_mat.diminfo[1].strides))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 92, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_XDECREF_SET(__pyx_v_sco, __pyx_t_3); + __pyx_t_3 = 0; + + /* "nw_ec_alignx.pyx":93 + * ecj = ecs[seq2[j - 1]] + * sco = mat[eci, ecj] + * f[0] = scoremat[i - 1, j] + gap # <<<<<<<<<<<<<< + * f[1] = scoremat[i, j - 1] + gap + * f[2] = scoremat[i - 1, j - 1] + sco + */ + __pyx_t_14 = (__pyx_v_i - 1); + __pyx_t_15 = __pyx_v_j; + (__pyx_v_f[0]) = ((*__Pyx_BufPtrStrided2d(__pyx_t_12nw_ec_alignx_DTYPEF_t *, __pyx_pybuffernd_scoremat.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_scoremat.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_scoremat.diminfo[1].strides)) + __pyx_v_gap); + + /* "nw_ec_alignx.pyx":94 + * sco = mat[eci, ecj] + * f[0] = scoremat[i - 1, j] + gap + * f[1] = scoremat[i, j - 1] + gap # <<<<<<<<<<<<<< + * f[2] = scoremat[i - 1, j - 1] + sco + * # Adding some random variation to solve draws + */ + __pyx_t_15 = __pyx_v_i; + __pyx_t_14 = (__pyx_v_j - 1); + (__pyx_v_f[1]) = ((*__Pyx_BufPtrStrided2d(__pyx_t_12nw_ec_alignx_DTYPEF_t *, __pyx_pybuffernd_scoremat.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_scoremat.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_scoremat.diminfo[1].strides)) + __pyx_v_gap); + + /* "nw_ec_alignx.pyx":95 + * f[0] = scoremat[i - 1, j] + gap + * f[1] = scoremat[i, j - 1] + gap + * f[2] = scoremat[i - 1, j - 1] + sco # <<<<<<<<<<<<<< + * # Adding some random variation to solve draws + * for k in range(3): + */ + __pyx_t_14 = (__pyx_v_i - 1); + __pyx_t_15 = (__pyx_v_j - 1); + __pyx_t_3 = PyFloat_FromDouble((*__Pyx_BufPtrStrided2d(__pyx_t_12nw_ec_alignx_DTYPEF_t *, __pyx_pybuffernd_scoremat.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_scoremat.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_scoremat.diminfo[1].strides))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 95, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = PyNumber_Add(__pyx_t_3, __pyx_v_sco); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 95, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_21 = __pyx_PyFloat_AsFloat(__pyx_t_6); if (unlikely((__pyx_t_21 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 95, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + (__pyx_v_f[2]) = __pyx_t_21; + + /* "nw_ec_alignx.pyx":97 + * f[2] = scoremat[i - 1, j - 1] + sco + * # Adding some random variation to solve draws + * for k in range(3): # <<<<<<<<<<<<<< + * randfactor = copysignf(0.001, f[k]) + * randnum = rand() / float(INT_MAX) + */ + for (__pyx_t_20 = 0; __pyx_t_20 < 3; __pyx_t_20+=1) { + __pyx_v_k = __pyx_t_20; + + /* "nw_ec_alignx.pyx":98 + * # Adding some random variation to solve draws + * for k in range(3): + * randfactor = copysignf(0.001, f[k]) # <<<<<<<<<<<<<< + * randnum = rand() / float(INT_MAX) + * f[k] -= randfactor * randnum + */ + __pyx_v_randfactor = copysignf(0.001, (__pyx_v_f[__pyx_v_k])); + + /* "nw_ec_alignx.pyx":99 + * for k in range(3): + * randfactor = copysignf(0.001, f[k]) + * randnum = rand() / float(INT_MAX) # <<<<<<<<<<<<<< + * f[k] -= randfactor * randnum + * # select min value + */ + __pyx_t_22 = rand(); + if (unlikely(((double)INT_MAX) == 0)) { + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + __PYX_ERR(0, 99, __pyx_L1_error) + } + __pyx_v_randnum = (((double)__pyx_t_22) / ((double)INT_MAX)); + + /* "nw_ec_alignx.pyx":100 + * randfactor = copysignf(0.001, f[k]) + * randnum = rand() / float(INT_MAX) + * f[k] -= randfactor * randnum # <<<<<<<<<<<<<< + * # select min value + * mini, minpos = minarg(f) + */ + __pyx_t_22 = __pyx_v_k; + (__pyx_v_f[__pyx_t_22]) = ((__pyx_v_f[__pyx_t_22]) - (__pyx_v_randfactor * __pyx_v_randnum)); + } + + /* "nw_ec_alignx.pyx":102 + * f[k] -= randfactor * randnum + * # select min value + * mini, minpos = minarg(f) # <<<<<<<<<<<<<< + * # fill the matrices + * scoremat[i, j] = mini + */ + __pyx_t_6 = __pyx_f_12nw_ec_alignx_minarg(__pyx_v_f); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 102, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + if ((likely(PyTuple_CheckExact(__pyx_t_6))) || (PyList_CheckExact(__pyx_t_6))) { + PyObject* sequence = __pyx_t_6; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 102, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_7 = PyTuple_GET_ITEM(sequence, 1); + } else { + __pyx_t_3 = PyList_GET_ITEM(sequence, 0); + __pyx_t_7 = PyList_GET_ITEM(sequence, 1); + } + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(__pyx_t_7); + #else + __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 102, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 102, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + #endif + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } else { + Py_ssize_t index = -1; + __pyx_t_4 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 102, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_23 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); + index = 0; __pyx_t_3 = __pyx_t_23(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L13_unpacking_failed; + __Pyx_GOTREF(__pyx_t_3); + index = 1; __pyx_t_7 = __pyx_t_23(__pyx_t_4); if (unlikely(!__pyx_t_7)) goto __pyx_L13_unpacking_failed; + __Pyx_GOTREF(__pyx_t_7); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_23(__pyx_t_4), 2) < 0) __PYX_ERR(0, 102, __pyx_L1_error) + __pyx_t_23 = NULL; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + goto __pyx_L14_unpacking_done; + __pyx_L13_unpacking_failed:; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_23 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 102, __pyx_L1_error) + __pyx_L14_unpacking_done:; + } + __pyx_t_21 = __pyx_PyFloat_AsFloat(__pyx_t_3); if (unlikely((__pyx_t_21 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 102, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_20 = __Pyx_PyInt_As_int(__pyx_t_7); if (unlikely((__pyx_t_20 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 102, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_v_mini = __pyx_t_21; + __pyx_v_minpos = __pyx_t_20; + + /* "nw_ec_alignx.pyx":104 + * mini, minpos = minarg(f) + * # fill the matrices + * scoremat[i, j] = mini # <<<<<<<<<<<<<< + * arrow[i, j] = minpos + * return arrow, mini + */ + __pyx_t_15 = __pyx_v_i; + __pyx_t_14 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_12nw_ec_alignx_DTYPEF_t *, __pyx_pybuffernd_scoremat.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_scoremat.diminfo[0].strides, __pyx_t_14, __pyx_pybuffernd_scoremat.diminfo[1].strides) = __pyx_v_mini; + + /* "nw_ec_alignx.pyx":105 + * # fill the matrices + * scoremat[i, j] = mini + * arrow[i, j] = minpos # <<<<<<<<<<<<<< + * return arrow, mini + * + */ + __pyx_t_14 = __pyx_v_i; + __pyx_t_15 = __pyx_v_j; + *__Pyx_BufPtrStrided2d(__pyx_t_12nw_ec_alignx_DTYPE_t *, __pyx_pybuffernd_arrow.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_arrow.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_arrow.diminfo[1].strides) = __pyx_v_minpos; + } + } + + /* "nw_ec_alignx.pyx":106 + * scoremat[i, j] = mini + * arrow[i, j] = minpos + * return arrow, mini # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_6 = PyFloat_FromDouble(__pyx_v_mini); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 106, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 106, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_INCREF((PyObject *)__pyx_v_arrow); + __Pyx_GIVEREF((PyObject *)__pyx_v_arrow); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 0, ((PyObject *)__pyx_v_arrow))) __PYX_ERR(0, 106, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_6); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6)) __PYX_ERR(0, 106, __pyx_L1_error); + __pyx_t_6 = 0; + __pyx_r = __pyx_t_7; + __pyx_t_7 = 0; + goto __pyx_L0; + + /* "nw_ec_alignx.pyx":54 + * + * # best performance + * @cython.boundscheck(False) # <<<<<<<<<<<<<< + * @cython.wraparound(False) + * def _FastNW(np.ndarray[DTYPEF_t, ndim=2] mat, dict ecs, list seq1, list seq2, + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_arrow.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mat.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_scoremat.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("nw_ec_alignx._FastNW", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_arrow.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mat.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_scoremat.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XDECREF((PyObject *)__pyx_v_scoremat); + __Pyx_XDECREF((PyObject *)__pyx_v_arrow); + __Pyx_XDECREF(__pyx_v_sco); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "nw_ec_alignx.pyx":109 + * + * + * cdef gappen(seq1, seq2): # <<<<<<<<<<<<<< + * """Returns the number + * Keyword Arguments: + */ + +static PyObject *__pyx_f_12nw_ec_alignx_gappen(PyObject *__pyx_v_seq1, PyObject *__pyx_v_seq2) { + int __pyx_v_l1; + float __pyx_v_gappen; + PyObject *__pyx_v_gap = 0; + int __pyx_v_i; + float __pyx_v_sgaps; + float __pyx_v_ngaps; + float __pyx_v_sgaps2; + float __pyx_v_ngaps2; + CYTHON_UNUSED float __pyx_v_fgaps; + CYTHON_UNUSED float __pyx_v_fgaps2; + float __pyx_v_fblock1; + float __pyx_v_fblock2; + PyObject *__pyx_v_ec1 = 0; + PyObject *__pyx_v_ec2 = 0; + PyBoolObject *__pyx_v_begin1 = 0; + PyBoolObject *__pyx_v_begin2 = 0; + PyBoolObject *__pyx_v_block1 = 0; + PyBoolObject *__pyx_v_block2 = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + Py_ssize_t __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + PyObject *__pyx_t_4 = NULL; + int __pyx_t_5; + int __pyx_t_6; + int __pyx_t_7; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("gappen", 1); + + /* "nw_ec_alignx.pyx":116 + * """ + * cdef: + * int l1 = len(seq1) # <<<<<<<<<<<<<< + * float gappen = 0 + * str gap = '-.-.-' + */ + __pyx_t_1 = PyObject_Length(__pyx_v_seq1); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 116, __pyx_L1_error) + __pyx_v_l1 = __pyx_t_1; + + /* "nw_ec_alignx.pyx":117 + * cdef: + * int l1 = len(seq1) + * float gappen = 0 # <<<<<<<<<<<<<< + * str gap = '-.-.-' + * int i + */ + __pyx_v_gappen = 0.0; + + /* "nw_ec_alignx.pyx":118 + * int l1 = len(seq1) + * float gappen = 0 + * str gap = '-.-.-' # <<<<<<<<<<<<<< + * int i + * float sgaps = 0 + */ + __Pyx_INCREF(__pyx_kp_u__3); + __pyx_v_gap = __pyx_kp_u__3; + + /* "nw_ec_alignx.pyx":120 + * str gap = '-.-.-' + * int i + * float sgaps = 0 # <<<<<<<<<<<<<< + * float ngaps = 0 + * float sgaps2 = 0 + */ + __pyx_v_sgaps = 0.0; + + /* "nw_ec_alignx.pyx":121 + * int i + * float sgaps = 0 + * float ngaps = 0 # <<<<<<<<<<<<<< + * float sgaps2 = 0 + * float ngaps2 = 0 + */ + __pyx_v_ngaps = 0.0; + + /* "nw_ec_alignx.pyx":122 + * float sgaps = 0 + * float ngaps = 0 + * float sgaps2 = 0 # <<<<<<<<<<<<<< + * float ngaps2 = 0 + * float fgaps = 0 + */ + __pyx_v_sgaps2 = 0.0; + + /* "nw_ec_alignx.pyx":123 + * float ngaps = 0 + * float sgaps2 = 0 + * float ngaps2 = 0 # <<<<<<<<<<<<<< + * float fgaps = 0 + * float fgaps2 = 0 + */ + __pyx_v_ngaps2 = 0.0; + + /* "nw_ec_alignx.pyx":124 + * float sgaps2 = 0 + * float ngaps2 = 0 + * float fgaps = 0 # <<<<<<<<<<<<<< + * float fgaps2 = 0 + * float fblock1 = 0 + */ + __pyx_v_fgaps = 0.0; + + /* "nw_ec_alignx.pyx":125 + * float ngaps2 = 0 + * float fgaps = 0 + * float fgaps2 = 0 # <<<<<<<<<<<<<< + * float fblock1 = 0 + * float fblock2 = 0 + */ + __pyx_v_fgaps2 = 0.0; + + /* "nw_ec_alignx.pyx":126 + * float fgaps = 0 + * float fgaps2 = 0 + * float fblock1 = 0 # <<<<<<<<<<<<<< + * float fblock2 = 0 + * str ec1, ec2 + */ + __pyx_v_fblock1 = 0.0; + + /* "nw_ec_alignx.pyx":127 + * float fgaps2 = 0 + * float fblock1 = 0 + * float fblock2 = 0 # <<<<<<<<<<<<<< + * str ec1, ec2 + * bool begin1 = True + */ + __pyx_v_fblock2 = 0.0; + + /* "nw_ec_alignx.pyx":129 + * float fblock2 = 0 + * str ec1, ec2 + * bool begin1 = True # <<<<<<<<<<<<<< + * bool begin2 = True + * bool block1 = True + */ + __Pyx_INCREF(Py_True); + __pyx_v_begin1 = ((PyBoolObject *)Py_True); + + /* "nw_ec_alignx.pyx":130 + * str ec1, ec2 + * bool begin1 = True + * bool begin2 = True # <<<<<<<<<<<<<< + * bool block1 = True + * bool block2 = True + */ + __Pyx_INCREF(Py_True); + __pyx_v_begin2 = ((PyBoolObject *)Py_True); + + /* "nw_ec_alignx.pyx":131 + * bool begin1 = True + * bool begin2 = True + * bool block1 = True # <<<<<<<<<<<<<< + * bool block2 = True + * + */ + __Pyx_INCREF(Py_True); + __pyx_v_block1 = ((PyBoolObject *)Py_True); + + /* "nw_ec_alignx.pyx":132 + * bool begin2 = True + * bool block1 = True + * bool block2 = True # <<<<<<<<<<<<<< + * + * # four cases depending in wich sequence has gaps + */ + __Pyx_INCREF(Py_True); + __pyx_v_block2 = ((PyBoolObject *)Py_True); + + /* "nw_ec_alignx.pyx":135 + * + * # four cases depending in wich sequence has gaps + * if gap not in seq1 and gap not in seq2: # <<<<<<<<<<<<<< + * return gappen # no gaps, return 0 + * elif gap in seq1 and gap not in seq2: + */ + __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_v_gap, __pyx_v_seq1, Py_NE)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 135, __pyx_L1_error) + if (__pyx_t_3) { + } else { + __pyx_t_2 = __pyx_t_3; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_v_gap, __pyx_v_seq2, Py_NE)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 135, __pyx_L1_error) + __pyx_t_2 = __pyx_t_3; + __pyx_L4_bool_binop_done:; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":136 + * # four cases depending in wich sequence has gaps + * if gap not in seq1 and gap not in seq2: + * return gappen # no gaps, return 0 # <<<<<<<<<<<<<< + * elif gap in seq1 and gap not in seq2: + * for i in range(l1): # Gaps only in seq1 + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_4 = PyFloat_FromDouble(__pyx_v_gappen); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 136, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + + /* "nw_ec_alignx.pyx":135 + * + * # four cases depending in wich sequence has gaps + * if gap not in seq1 and gap not in seq2: # <<<<<<<<<<<<<< + * return gappen # no gaps, return 0 + * elif gap in seq1 and gap not in seq2: + */ + } + + /* "nw_ec_alignx.pyx":137 + * if gap not in seq1 and gap not in seq2: + * return gappen # no gaps, return 0 + * elif gap in seq1 and gap not in seq2: # <<<<<<<<<<<<<< + * for i in range(l1): # Gaps only in seq1 + * ec1 = seq1[i] + */ + __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_v_gap, __pyx_v_seq1, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 137, __pyx_L1_error) + if (__pyx_t_3) { + } else { + __pyx_t_2 = __pyx_t_3; + goto __pyx_L6_bool_binop_done; + } + __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_v_gap, __pyx_v_seq2, Py_NE)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 137, __pyx_L1_error) + __pyx_t_2 = __pyx_t_3; + __pyx_L6_bool_binop_done:; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":138 + * return gappen # no gaps, return 0 + * elif gap in seq1 and gap not in seq2: + * for i in range(l1): # Gaps only in seq1 # <<<<<<<<<<<<<< + * ec1 = seq1[i] + * if begin1 == True: + */ + __pyx_t_5 = __pyx_v_l1; + __pyx_t_6 = __pyx_t_5; + for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) { + __pyx_v_i = __pyx_t_7; + + /* "nw_ec_alignx.pyx":139 + * elif gap in seq1 and gap not in seq2: + * for i in range(l1): # Gaps only in seq1 + * ec1 = seq1[i] # <<<<<<<<<<<<<< + * if begin1 == True: + * if ec1 == gap: + */ + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_seq1, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 139, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (!(likely(PyUnicode_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("unicode", __pyx_t_4))) __PYX_ERR(0, 139, __pyx_L1_error) + __Pyx_XDECREF_SET(__pyx_v_ec1, ((PyObject*)__pyx_t_4)); + __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":140 + * for i in range(l1): # Gaps only in seq1 + * ec1 = seq1[i] + * if begin1 == True: # <<<<<<<<<<<<<< + * if ec1 == gap: + * continue + */ + __pyx_t_4 = PyObject_RichCompare(((PyObject *)__pyx_v_begin1), Py_True, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 140, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 140, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":141 + * ec1 = seq1[i] + * if begin1 == True: + * if ec1 == gap: # <<<<<<<<<<<<<< + * continue + * else: + */ + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_ec1, __pyx_v_gap, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 141, __pyx_L1_error) + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":142 + * if begin1 == True: + * if ec1 == gap: + * continue # <<<<<<<<<<<<<< + * else: + * begin1 = False + */ + goto __pyx_L8_continue; + + /* "nw_ec_alignx.pyx":141 + * ec1 = seq1[i] + * if begin1 == True: + * if ec1 == gap: # <<<<<<<<<<<<<< + * continue + * else: + */ + } + + /* "nw_ec_alignx.pyx":144 + * continue + * else: + * begin1 = False # <<<<<<<<<<<<<< + * continue + * else: + */ + /*else*/ { + __Pyx_INCREF(Py_False); + __Pyx_DECREF_SET(__pyx_v_begin1, ((PyBoolObject *)Py_False)); + + /* "nw_ec_alignx.pyx":145 + * else: + * begin1 = False + * continue # <<<<<<<<<<<<<< + * else: + * if ec1 == gap: + */ + goto __pyx_L8_continue; + } + + /* "nw_ec_alignx.pyx":140 + * for i in range(l1): # Gaps only in seq1 + * ec1 = seq1[i] + * if begin1 == True: # <<<<<<<<<<<<<< + * if ec1 == gap: + * continue + */ + } + + /* "nw_ec_alignx.pyx":147 + * continue + * else: + * if ec1 == gap: # <<<<<<<<<<<<<< + * sgaps += 1 + * fblock1 += 1 + */ + /*else*/ { + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_ec1, __pyx_v_gap, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 147, __pyx_L1_error) + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":148 + * else: + * if ec1 == gap: + * sgaps += 1 # <<<<<<<<<<<<<< + * fblock1 += 1 + * if block1 == True: + */ + __pyx_v_sgaps = (__pyx_v_sgaps + 1.0); + + /* "nw_ec_alignx.pyx":149 + * if ec1 == gap: + * sgaps += 1 + * fblock1 += 1 # <<<<<<<<<<<<<< + * if block1 == True: + * ngaps += 1 + */ + __pyx_v_fblock1 = (__pyx_v_fblock1 + 1.0); + + /* "nw_ec_alignx.pyx":150 + * sgaps += 1 + * fblock1 += 1 + * if block1 == True: # <<<<<<<<<<<<<< + * ngaps += 1 + * block1 = False + */ + __pyx_t_4 = PyObject_RichCompare(((PyObject *)__pyx_v_block1), Py_True, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 150, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 150, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":151 + * fblock1 += 1 + * if block1 == True: + * ngaps += 1 # <<<<<<<<<<<<<< + * block1 = False + * else: + */ + __pyx_v_ngaps = (__pyx_v_ngaps + 1.0); + + /* "nw_ec_alignx.pyx":152 + * if block1 == True: + * ngaps += 1 + * block1 = False # <<<<<<<<<<<<<< + * else: + * block1 = True + */ + __Pyx_INCREF(Py_False); + __Pyx_DECREF_SET(__pyx_v_block1, ((PyBoolObject *)Py_False)); + + /* "nw_ec_alignx.pyx":150 + * sgaps += 1 + * fblock1 += 1 + * if block1 == True: # <<<<<<<<<<<<<< + * ngaps += 1 + * block1 = False + */ + } + + /* "nw_ec_alignx.pyx":147 + * continue + * else: + * if ec1 == gap: # <<<<<<<<<<<<<< + * sgaps += 1 + * fblock1 += 1 + */ + goto __pyx_L12; + } + + /* "nw_ec_alignx.pyx":154 + * block1 = False + * else: + * block1 = True # <<<<<<<<<<<<<< + * fblock1 = 0 + * if block1 == False: + */ + /*else*/ { + __Pyx_INCREF(Py_True); + __Pyx_DECREF_SET(__pyx_v_block1, ((PyBoolObject *)Py_True)); + + /* "nw_ec_alignx.pyx":155 + * else: + * block1 = True + * fblock1 = 0 # <<<<<<<<<<<<<< + * if block1 == False: + * sgaps -= fblock1 + */ + __pyx_v_fblock1 = 0.0; + } + __pyx_L12:; + } + __pyx_L8_continue:; + } + + /* "nw_ec_alignx.pyx":156 + * block1 = True + * fblock1 = 0 + * if block1 == False: # <<<<<<<<<<<<<< + * sgaps -= fblock1 + * ngaps -= 1 + */ + __pyx_t_4 = PyObject_RichCompare(((PyObject *)__pyx_v_block1), Py_False, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 156, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 156, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":157 + * fblock1 = 0 + * if block1 == False: + * sgaps -= fblock1 # <<<<<<<<<<<<<< + * ngaps -= 1 + * if sgaps == 0: + */ + __pyx_v_sgaps = (__pyx_v_sgaps - __pyx_v_fblock1); + + /* "nw_ec_alignx.pyx":158 + * if block1 == False: + * sgaps -= fblock1 + * ngaps -= 1 # <<<<<<<<<<<<<< + * if sgaps == 0: + * gappen = 0.0 + */ + __pyx_v_ngaps = (__pyx_v_ngaps - 1.0); + + /* "nw_ec_alignx.pyx":156 + * block1 = True + * fblock1 = 0 + * if block1 == False: # <<<<<<<<<<<<<< + * sgaps -= fblock1 + * ngaps -= 1 + */ + } + + /* "nw_ec_alignx.pyx":159 + * sgaps -= fblock1 + * ngaps -= 1 + * if sgaps == 0: # <<<<<<<<<<<<<< + * gappen = 0.0 + * else: + */ + __pyx_t_2 = (__pyx_v_sgaps == 0.0); + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":160 + * ngaps -= 1 + * if sgaps == 0: + * gappen = 0.0 # <<<<<<<<<<<<<< + * else: + * gappen = ngaps / sgaps / 2 + */ + __pyx_v_gappen = 0.0; + + /* "nw_ec_alignx.pyx":159 + * sgaps -= fblock1 + * ngaps -= 1 + * if sgaps == 0: # <<<<<<<<<<<<<< + * gappen = 0.0 + * else: + */ + goto __pyx_L15; + } + + /* "nw_ec_alignx.pyx":162 + * gappen = 0.0 + * else: + * gappen = ngaps / sgaps / 2 # <<<<<<<<<<<<<< + * return gappen + * elif gap not in seq1 and gap in seq2: + */ + /*else*/ { + if (unlikely(__pyx_v_sgaps == 0)) { + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + __PYX_ERR(0, 162, __pyx_L1_error) + } + __pyx_v_gappen = ((__pyx_v_ngaps / __pyx_v_sgaps) / 2.0); + } + __pyx_L15:; + + /* "nw_ec_alignx.pyx":163 + * else: + * gappen = ngaps / sgaps / 2 + * return gappen # <<<<<<<<<<<<<< + * elif gap not in seq1 and gap in seq2: + * for i in range(l1): # Gaps only in seq2 + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_4 = PyFloat_FromDouble(__pyx_v_gappen); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 163, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + + /* "nw_ec_alignx.pyx":137 + * if gap not in seq1 and gap not in seq2: + * return gappen # no gaps, return 0 + * elif gap in seq1 and gap not in seq2: # <<<<<<<<<<<<<< + * for i in range(l1): # Gaps only in seq1 + * ec1 = seq1[i] + */ + } + + /* "nw_ec_alignx.pyx":164 + * gappen = ngaps / sgaps / 2 + * return gappen + * elif gap not in seq1 and gap in seq2: # <<<<<<<<<<<<<< + * for i in range(l1): # Gaps only in seq2 + * ec2 = seq2[i] + */ + __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_v_gap, __pyx_v_seq1, Py_NE)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 164, __pyx_L1_error) + if (__pyx_t_3) { + } else { + __pyx_t_2 = __pyx_t_3; + goto __pyx_L16_bool_binop_done; + } + __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_v_gap, __pyx_v_seq2, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 164, __pyx_L1_error) + __pyx_t_2 = __pyx_t_3; + __pyx_L16_bool_binop_done:; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":165 + * return gappen + * elif gap not in seq1 and gap in seq2: + * for i in range(l1): # Gaps only in seq2 # <<<<<<<<<<<<<< + * ec2 = seq2[i] + * if begin2 == True: + */ + __pyx_t_5 = __pyx_v_l1; + __pyx_t_6 = __pyx_t_5; + for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) { + __pyx_v_i = __pyx_t_7; + + /* "nw_ec_alignx.pyx":166 + * elif gap not in seq1 and gap in seq2: + * for i in range(l1): # Gaps only in seq2 + * ec2 = seq2[i] # <<<<<<<<<<<<<< + * if begin2 == True: + * if ec2 == gap: + */ + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_seq2, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 166, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (!(likely(PyUnicode_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("unicode", __pyx_t_4))) __PYX_ERR(0, 166, __pyx_L1_error) + __Pyx_XDECREF_SET(__pyx_v_ec2, ((PyObject*)__pyx_t_4)); + __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":167 + * for i in range(l1): # Gaps only in seq2 + * ec2 = seq2[i] + * if begin2 == True: # <<<<<<<<<<<<<< + * if ec2 == gap: + * continue + */ + __pyx_t_4 = PyObject_RichCompare(((PyObject *)__pyx_v_begin2), Py_True, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 167, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":168 + * ec2 = seq2[i] + * if begin2 == True: + * if ec2 == gap: # <<<<<<<<<<<<<< + * continue + * else: + */ + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_ec2, __pyx_v_gap, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 168, __pyx_L1_error) + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":169 + * if begin2 == True: + * if ec2 == gap: + * continue # <<<<<<<<<<<<<< + * else: + * begin2 = False + */ + goto __pyx_L18_continue; + + /* "nw_ec_alignx.pyx":168 + * ec2 = seq2[i] + * if begin2 == True: + * if ec2 == gap: # <<<<<<<<<<<<<< + * continue + * else: + */ + } + + /* "nw_ec_alignx.pyx":171 + * continue + * else: + * begin2 = False # <<<<<<<<<<<<<< + * continue + * else: + */ + /*else*/ { + __Pyx_INCREF(Py_False); + __Pyx_DECREF_SET(__pyx_v_begin2, ((PyBoolObject *)Py_False)); + + /* "nw_ec_alignx.pyx":172 + * else: + * begin2 = False + * continue # <<<<<<<<<<<<<< + * else: + * if ec2 == gap: + */ + goto __pyx_L18_continue; + } + + /* "nw_ec_alignx.pyx":167 + * for i in range(l1): # Gaps only in seq2 + * ec2 = seq2[i] + * if begin2 == True: # <<<<<<<<<<<<<< + * if ec2 == gap: + * continue + */ + } + + /* "nw_ec_alignx.pyx":174 + * continue + * else: + * if ec2 == gap: # <<<<<<<<<<<<<< + * sgaps += 1 + * fblock2 += 1 + */ + /*else*/ { + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_ec2, __pyx_v_gap, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 174, __pyx_L1_error) + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":175 + * else: + * if ec2 == gap: + * sgaps += 1 # <<<<<<<<<<<<<< + * fblock2 += 1 + * if block2 == True: + */ + __pyx_v_sgaps = (__pyx_v_sgaps + 1.0); + + /* "nw_ec_alignx.pyx":176 + * if ec2 == gap: + * sgaps += 1 + * fblock2 += 1 # <<<<<<<<<<<<<< + * if block2 == True: + * ngaps += 1 + */ + __pyx_v_fblock2 = (__pyx_v_fblock2 + 1.0); + + /* "nw_ec_alignx.pyx":177 + * sgaps += 1 + * fblock2 += 1 + * if block2 == True: # <<<<<<<<<<<<<< + * ngaps += 1 + * block2 = False + */ + __pyx_t_4 = PyObject_RichCompare(((PyObject *)__pyx_v_block2), Py_True, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 177, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 177, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":178 + * fblock2 += 1 + * if block2 == True: + * ngaps += 1 # <<<<<<<<<<<<<< + * block2 = False + * else: + */ + __pyx_v_ngaps = (__pyx_v_ngaps + 1.0); + + /* "nw_ec_alignx.pyx":179 + * if block2 == True: + * ngaps += 1 + * block2 = False # <<<<<<<<<<<<<< + * else: + * block2 = True + */ + __Pyx_INCREF(Py_False); + __Pyx_DECREF_SET(__pyx_v_block2, ((PyBoolObject *)Py_False)); + + /* "nw_ec_alignx.pyx":177 + * sgaps += 1 + * fblock2 += 1 + * if block2 == True: # <<<<<<<<<<<<<< + * ngaps += 1 + * block2 = False + */ + } + + /* "nw_ec_alignx.pyx":174 + * continue + * else: + * if ec2 == gap: # <<<<<<<<<<<<<< + * sgaps += 1 + * fblock2 += 1 + */ + goto __pyx_L22; + } + + /* "nw_ec_alignx.pyx":181 + * block2 = False + * else: + * block2 = True # <<<<<<<<<<<<<< + * fblock2 = 0 + * if block2 == False: + */ + /*else*/ { + __Pyx_INCREF(Py_True); + __Pyx_DECREF_SET(__pyx_v_block2, ((PyBoolObject *)Py_True)); + + /* "nw_ec_alignx.pyx":182 + * else: + * block2 = True + * fblock2 = 0 # <<<<<<<<<<<<<< + * if block2 == False: + * sgaps -= fblock2 + */ + __pyx_v_fblock2 = 0.0; + } + __pyx_L22:; + } + __pyx_L18_continue:; + } + + /* "nw_ec_alignx.pyx":183 + * block2 = True + * fblock2 = 0 + * if block2 == False: # <<<<<<<<<<<<<< + * sgaps -= fblock2 + * ngaps -= 1 + */ + __pyx_t_4 = PyObject_RichCompare(((PyObject *)__pyx_v_block2), Py_False, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 183, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 183, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":184 + * fblock2 = 0 + * if block2 == False: + * sgaps -= fblock2 # <<<<<<<<<<<<<< + * ngaps -= 1 + * if sgaps == 0: + */ + __pyx_v_sgaps = (__pyx_v_sgaps - __pyx_v_fblock2); + + /* "nw_ec_alignx.pyx":185 + * if block2 == False: + * sgaps -= fblock2 + * ngaps -= 1 # <<<<<<<<<<<<<< + * if sgaps == 0: + * gappen = 0.0 + */ + __pyx_v_ngaps = (__pyx_v_ngaps - 1.0); + + /* "nw_ec_alignx.pyx":183 + * block2 = True + * fblock2 = 0 + * if block2 == False: # <<<<<<<<<<<<<< + * sgaps -= fblock2 + * ngaps -= 1 + */ + } + + /* "nw_ec_alignx.pyx":186 + * sgaps -= fblock2 + * ngaps -= 1 + * if sgaps == 0: # <<<<<<<<<<<<<< + * gappen = 0.0 + * else: + */ + __pyx_t_2 = (__pyx_v_sgaps == 0.0); + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":187 + * ngaps -= 1 + * if sgaps == 0: + * gappen = 0.0 # <<<<<<<<<<<<<< + * else: + * gappen = ngaps / sgaps / 2 + */ + __pyx_v_gappen = 0.0; + + /* "nw_ec_alignx.pyx":186 + * sgaps -= fblock2 + * ngaps -= 1 + * if sgaps == 0: # <<<<<<<<<<<<<< + * gappen = 0.0 + * else: + */ + goto __pyx_L25; + } + + /* "nw_ec_alignx.pyx":189 + * gappen = 0.0 + * else: + * gappen = ngaps / sgaps / 2 # <<<<<<<<<<<<<< + * else: + * for i in range(l1): + */ + /*else*/ { + if (unlikely(__pyx_v_sgaps == 0)) { + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + __PYX_ERR(0, 189, __pyx_L1_error) + } + __pyx_v_gappen = ((__pyx_v_ngaps / __pyx_v_sgaps) / 2.0); + } + __pyx_L25:; + + /* "nw_ec_alignx.pyx":164 + * gappen = ngaps / sgaps / 2 + * return gappen + * elif gap not in seq1 and gap in seq2: # <<<<<<<<<<<<<< + * for i in range(l1): # Gaps only in seq2 + * ec2 = seq2[i] + */ + goto __pyx_L3; + } + + /* "nw_ec_alignx.pyx":191 + * gappen = ngaps / sgaps / 2 + * else: + * for i in range(l1): # <<<<<<<<<<<<<< + * ec1 = seq1[i] + * ec2 = seq2[i] + */ + /*else*/ { + __pyx_t_5 = __pyx_v_l1; + __pyx_t_6 = __pyx_t_5; + for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) { + __pyx_v_i = __pyx_t_7; + + /* "nw_ec_alignx.pyx":192 + * else: + * for i in range(l1): + * ec1 = seq1[i] # <<<<<<<<<<<<<< + * ec2 = seq2[i] + * if begin1 == True: + */ + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_seq1, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 192, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (!(likely(PyUnicode_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("unicode", __pyx_t_4))) __PYX_ERR(0, 192, __pyx_L1_error) + __Pyx_XDECREF_SET(__pyx_v_ec1, ((PyObject*)__pyx_t_4)); + __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":193 + * for i in range(l1): + * ec1 = seq1[i] + * ec2 = seq2[i] # <<<<<<<<<<<<<< + * if begin1 == True: + * if ec1 == gap: + */ + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_seq2, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 193, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (!(likely(PyUnicode_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("unicode", __pyx_t_4))) __PYX_ERR(0, 193, __pyx_L1_error) + __Pyx_XDECREF_SET(__pyx_v_ec2, ((PyObject*)__pyx_t_4)); + __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":194 + * ec1 = seq1[i] + * ec2 = seq2[i] + * if begin1 == True: # <<<<<<<<<<<<<< + * if ec1 == gap: + * pass + */ + __pyx_t_4 = PyObject_RichCompare(((PyObject *)__pyx_v_begin1), Py_True, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 194, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 194, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":195 + * ec2 = seq2[i] + * if begin1 == True: + * if ec1 == gap: # <<<<<<<<<<<<<< + * pass + * else: + */ + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_ec1, __pyx_v_gap, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 195, __pyx_L1_error) + if (__pyx_t_2) { + goto __pyx_L29; + } + + /* "nw_ec_alignx.pyx":198 + * pass + * else: + * begin1 = False # <<<<<<<<<<<<<< + * pass + * else: + */ + /*else*/ { + __Pyx_INCREF(Py_False); + __Pyx_DECREF_SET(__pyx_v_begin1, ((PyBoolObject *)Py_False)); + } + __pyx_L29:; + + /* "nw_ec_alignx.pyx":194 + * ec1 = seq1[i] + * ec2 = seq2[i] + * if begin1 == True: # <<<<<<<<<<<<<< + * if ec1 == gap: + * pass + */ + goto __pyx_L28; + } + + /* "nw_ec_alignx.pyx":201 + * pass + * else: + * if ec1 == gap: # <<<<<<<<<<<<<< + * sgaps += 1 + * fblock1 += 1 + */ + /*else*/ { + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_ec1, __pyx_v_gap, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 201, __pyx_L1_error) + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":202 + * else: + * if ec1 == gap: + * sgaps += 1 # <<<<<<<<<<<<<< + * fblock1 += 1 + * if block1 == True: + */ + __pyx_v_sgaps = (__pyx_v_sgaps + 1.0); + + /* "nw_ec_alignx.pyx":203 + * if ec1 == gap: + * sgaps += 1 + * fblock1 += 1 # <<<<<<<<<<<<<< + * if block1 == True: + * ngaps += 1 + */ + __pyx_v_fblock1 = (__pyx_v_fblock1 + 1.0); + + /* "nw_ec_alignx.pyx":204 + * sgaps += 1 + * fblock1 += 1 + * if block1 == True: # <<<<<<<<<<<<<< + * ngaps += 1 + * block1 = False + */ + __pyx_t_4 = PyObject_RichCompare(((PyObject *)__pyx_v_block1), Py_True, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 204, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 204, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":205 + * fblock1 += 1 + * if block1 == True: + * ngaps += 1 # <<<<<<<<<<<<<< + * block1 = False + * else: + */ + __pyx_v_ngaps = (__pyx_v_ngaps + 1.0); + + /* "nw_ec_alignx.pyx":206 + * if block1 == True: + * ngaps += 1 + * block1 = False # <<<<<<<<<<<<<< + * else: + * block1 = True + */ + __Pyx_INCREF(Py_False); + __Pyx_DECREF_SET(__pyx_v_block1, ((PyBoolObject *)Py_False)); + + /* "nw_ec_alignx.pyx":204 + * sgaps += 1 + * fblock1 += 1 + * if block1 == True: # <<<<<<<<<<<<<< + * ngaps += 1 + * block1 = False + */ + } + + /* "nw_ec_alignx.pyx":201 + * pass + * else: + * if ec1 == gap: # <<<<<<<<<<<<<< + * sgaps += 1 + * fblock1 += 1 + */ + goto __pyx_L30; + } + + /* "nw_ec_alignx.pyx":208 + * block1 = False + * else: + * block1 = True # <<<<<<<<<<<<<< + * fblock1 = 0 + * ec2 = seq2[i] + */ + /*else*/ { + __Pyx_INCREF(Py_True); + __Pyx_DECREF_SET(__pyx_v_block1, ((PyBoolObject *)Py_True)); + + /* "nw_ec_alignx.pyx":209 + * else: + * block1 = True + * fblock1 = 0 # <<<<<<<<<<<<<< + * ec2 = seq2[i] + * if begin2 == True: + */ + __pyx_v_fblock1 = 0.0; + } + __pyx_L30:; + } + __pyx_L28:; + + /* "nw_ec_alignx.pyx":210 + * block1 = True + * fblock1 = 0 + * ec2 = seq2[i] # <<<<<<<<<<<<<< + * if begin2 == True: + * if ec2 == gap: + */ + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_seq2, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 210, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (!(likely(PyUnicode_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("unicode", __pyx_t_4))) __PYX_ERR(0, 210, __pyx_L1_error) + __Pyx_DECREF_SET(__pyx_v_ec2, ((PyObject*)__pyx_t_4)); + __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":211 + * fblock1 = 0 + * ec2 = seq2[i] + * if begin2 == True: # <<<<<<<<<<<<<< + * if ec2 == gap: + * pass + */ + __pyx_t_4 = PyObject_RichCompare(((PyObject *)__pyx_v_begin2), Py_True, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 211, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 211, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":212 + * ec2 = seq2[i] + * if begin2 == True: + * if ec2 == gap: # <<<<<<<<<<<<<< + * pass + * else: + */ + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_ec2, __pyx_v_gap, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 212, __pyx_L1_error) + if (__pyx_t_2) { + goto __pyx_L33; + } + + /* "nw_ec_alignx.pyx":215 + * pass + * else: + * begin2 = False # <<<<<<<<<<<<<< + * pass + * else: + */ + /*else*/ { + __Pyx_INCREF(Py_False); + __Pyx_DECREF_SET(__pyx_v_begin2, ((PyBoolObject *)Py_False)); + } + __pyx_L33:; + + /* "nw_ec_alignx.pyx":211 + * fblock1 = 0 + * ec2 = seq2[i] + * if begin2 == True: # <<<<<<<<<<<<<< + * if ec2 == gap: + * pass + */ + goto __pyx_L32; + } + + /* "nw_ec_alignx.pyx":218 + * pass + * else: + * if ec2 == gap: # <<<<<<<<<<<<<< + * sgaps2 += 1 + * fblock2 += 1 + */ + /*else*/ { + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_ec2, __pyx_v_gap, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 218, __pyx_L1_error) + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":219 + * else: + * if ec2 == gap: + * sgaps2 += 1 # <<<<<<<<<<<<<< + * fblock2 += 1 + * if block2 == True: + */ + __pyx_v_sgaps2 = (__pyx_v_sgaps2 + 1.0); + + /* "nw_ec_alignx.pyx":220 + * if ec2 == gap: + * sgaps2 += 1 + * fblock2 += 1 # <<<<<<<<<<<<<< + * if block2 == True: + * ngaps2 += 1 + */ + __pyx_v_fblock2 = (__pyx_v_fblock2 + 1.0); + + /* "nw_ec_alignx.pyx":221 + * sgaps2 += 1 + * fblock2 += 1 + * if block2 == True: # <<<<<<<<<<<<<< + * ngaps2 += 1 + * block2 = False + */ + __pyx_t_4 = PyObject_RichCompare(((PyObject *)__pyx_v_block2), Py_True, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 221, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 221, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":222 + * fblock2 += 1 + * if block2 == True: + * ngaps2 += 1 # <<<<<<<<<<<<<< + * block2 = False + * else: + */ + __pyx_v_ngaps2 = (__pyx_v_ngaps2 + 1.0); + + /* "nw_ec_alignx.pyx":223 + * if block2 == True: + * ngaps2 += 1 + * block2 = False # <<<<<<<<<<<<<< + * else: + * block2 = True + */ + __Pyx_INCREF(Py_False); + __Pyx_DECREF_SET(__pyx_v_block2, ((PyBoolObject *)Py_False)); + + /* "nw_ec_alignx.pyx":221 + * sgaps2 += 1 + * fblock2 += 1 + * if block2 == True: # <<<<<<<<<<<<<< + * ngaps2 += 1 + * block2 = False + */ + } + + /* "nw_ec_alignx.pyx":218 + * pass + * else: + * if ec2 == gap: # <<<<<<<<<<<<<< + * sgaps2 += 1 + * fblock2 += 1 + */ + goto __pyx_L34; + } + + /* "nw_ec_alignx.pyx":225 + * block2 = False + * else: + * block2 = True # <<<<<<<<<<<<<< + * fblock2 = 0 + * if block1 == False: + */ + /*else*/ { + __Pyx_INCREF(Py_True); + __Pyx_DECREF_SET(__pyx_v_block2, ((PyBoolObject *)Py_True)); + + /* "nw_ec_alignx.pyx":226 + * else: + * block2 = True + * fblock2 = 0 # <<<<<<<<<<<<<< + * if block1 == False: + * sgaps -= fblock1 + */ + __pyx_v_fblock2 = 0.0; + } + __pyx_L34:; + } + __pyx_L32:; + } + + /* "nw_ec_alignx.pyx":227 + * block2 = True + * fblock2 = 0 + * if block1 == False: # <<<<<<<<<<<<<< + * sgaps -= fblock1 + * ngaps -= 1 + */ + __pyx_t_4 = PyObject_RichCompare(((PyObject *)__pyx_v_block1), Py_False, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 227, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 227, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":228 + * fblock2 = 0 + * if block1 == False: + * sgaps -= fblock1 # <<<<<<<<<<<<<< + * ngaps -= 1 + * if block2 == False: + */ + __pyx_v_sgaps = (__pyx_v_sgaps - __pyx_v_fblock1); + + /* "nw_ec_alignx.pyx":229 + * if block1 == False: + * sgaps -= fblock1 + * ngaps -= 1 # <<<<<<<<<<<<<< + * if block2 == False: + * sgaps2 -= fblock2 + */ + __pyx_v_ngaps = (__pyx_v_ngaps - 1.0); + + /* "nw_ec_alignx.pyx":227 + * block2 = True + * fblock2 = 0 + * if block1 == False: # <<<<<<<<<<<<<< + * sgaps -= fblock1 + * ngaps -= 1 + */ + } + + /* "nw_ec_alignx.pyx":230 + * sgaps -= fblock1 + * ngaps -= 1 + * if block2 == False: # <<<<<<<<<<<<<< + * sgaps2 -= fblock2 + * ngaps2 -= 1 + */ + __pyx_t_4 = PyObject_RichCompare(((PyObject *)__pyx_v_block2), Py_False, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 230, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 230, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":231 + * ngaps -= 1 + * if block2 == False: + * sgaps2 -= fblock2 # <<<<<<<<<<<<<< + * ngaps2 -= 1 + * if ngaps <= 0 and ngaps2 > 0: + */ + __pyx_v_sgaps2 = (__pyx_v_sgaps2 - __pyx_v_fblock2); + + /* "nw_ec_alignx.pyx":232 + * if block2 == False: + * sgaps2 -= fblock2 + * ngaps2 -= 1 # <<<<<<<<<<<<<< + * if ngaps <= 0 and ngaps2 > 0: + * gappen = (ngaps2 / sgaps2) / 2 + */ + __pyx_v_ngaps2 = (__pyx_v_ngaps2 - 1.0); + + /* "nw_ec_alignx.pyx":230 + * sgaps -= fblock1 + * ngaps -= 1 + * if block2 == False: # <<<<<<<<<<<<<< + * sgaps2 -= fblock2 + * ngaps2 -= 1 + */ + } + + /* "nw_ec_alignx.pyx":233 + * sgaps2 -= fblock2 + * ngaps2 -= 1 + * if ngaps <= 0 and ngaps2 > 0: # <<<<<<<<<<<<<< + * gappen = (ngaps2 / sgaps2) / 2 + * elif ngaps > 0 and ngaps2 <= 0: + */ + __pyx_t_3 = (__pyx_v_ngaps <= 0.0); + if (__pyx_t_3) { + } else { + __pyx_t_2 = __pyx_t_3; + goto __pyx_L39_bool_binop_done; + } + __pyx_t_3 = (__pyx_v_ngaps2 > 0.0); + __pyx_t_2 = __pyx_t_3; + __pyx_L39_bool_binop_done:; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":234 + * ngaps2 -= 1 + * if ngaps <= 0 and ngaps2 > 0: + * gappen = (ngaps2 / sgaps2) / 2 # <<<<<<<<<<<<<< + * elif ngaps > 0 and ngaps2 <= 0: + * gappen = (ngaps / sgaps) / 2 + */ + if (unlikely(__pyx_v_sgaps2 == 0)) { + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + __PYX_ERR(0, 234, __pyx_L1_error) + } + __pyx_v_gappen = ((__pyx_v_ngaps2 / __pyx_v_sgaps2) / 2.0); + + /* "nw_ec_alignx.pyx":233 + * sgaps2 -= fblock2 + * ngaps2 -= 1 + * if ngaps <= 0 and ngaps2 > 0: # <<<<<<<<<<<<<< + * gappen = (ngaps2 / sgaps2) / 2 + * elif ngaps > 0 and ngaps2 <= 0: + */ + goto __pyx_L38; + } + + /* "nw_ec_alignx.pyx":235 + * if ngaps <= 0 and ngaps2 > 0: + * gappen = (ngaps2 / sgaps2) / 2 + * elif ngaps > 0 and ngaps2 <= 0: # <<<<<<<<<<<<<< + * gappen = (ngaps / sgaps) / 2 + * elif ngaps <= 0 and ngaps2 <= 0: + */ + __pyx_t_3 = (__pyx_v_ngaps > 0.0); + if (__pyx_t_3) { + } else { + __pyx_t_2 = __pyx_t_3; + goto __pyx_L41_bool_binop_done; + } + __pyx_t_3 = (__pyx_v_ngaps2 <= 0.0); + __pyx_t_2 = __pyx_t_3; + __pyx_L41_bool_binop_done:; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":236 + * gappen = (ngaps2 / sgaps2) / 2 + * elif ngaps > 0 and ngaps2 <= 0: + * gappen = (ngaps / sgaps) / 2 # <<<<<<<<<<<<<< + * elif ngaps <= 0 and ngaps2 <= 0: + * gappen = 0.0 + */ + if (unlikely(__pyx_v_sgaps == 0)) { + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + __PYX_ERR(0, 236, __pyx_L1_error) + } + __pyx_v_gappen = ((__pyx_v_ngaps / __pyx_v_sgaps) / 2.0); + + /* "nw_ec_alignx.pyx":235 + * if ngaps <= 0 and ngaps2 > 0: + * gappen = (ngaps2 / sgaps2) / 2 + * elif ngaps > 0 and ngaps2 <= 0: # <<<<<<<<<<<<<< + * gappen = (ngaps / sgaps) / 2 + * elif ngaps <= 0 and ngaps2 <= 0: + */ + goto __pyx_L38; + } + + /* "nw_ec_alignx.pyx":237 + * elif ngaps > 0 and ngaps2 <= 0: + * gappen = (ngaps / sgaps) / 2 + * elif ngaps <= 0 and ngaps2 <= 0: # <<<<<<<<<<<<<< + * gappen = 0.0 + * else: + */ + __pyx_t_3 = (__pyx_v_ngaps <= 0.0); + if (__pyx_t_3) { + } else { + __pyx_t_2 = __pyx_t_3; + goto __pyx_L43_bool_binop_done; + } + __pyx_t_3 = (__pyx_v_ngaps2 <= 0.0); + __pyx_t_2 = __pyx_t_3; + __pyx_L43_bool_binop_done:; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":238 + * gappen = (ngaps / sgaps) / 2 + * elif ngaps <= 0 and ngaps2 <= 0: + * gappen = 0.0 # <<<<<<<<<<<<<< + * else: + * gappen = ((ngaps / sgaps) + (ngaps2 / sgaps2)) / 2 + */ + __pyx_v_gappen = 0.0; + + /* "nw_ec_alignx.pyx":237 + * elif ngaps > 0 and ngaps2 <= 0: + * gappen = (ngaps / sgaps) / 2 + * elif ngaps <= 0 and ngaps2 <= 0: # <<<<<<<<<<<<<< + * gappen = 0.0 + * else: + */ + goto __pyx_L38; + } + + /* "nw_ec_alignx.pyx":240 + * gappen = 0.0 + * else: + * gappen = ((ngaps / sgaps) + (ngaps2 / sgaps2)) / 2 # <<<<<<<<<<<<<< + * return gappen + * + */ + /*else*/ { + if (unlikely(__pyx_v_sgaps == 0)) { + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + __PYX_ERR(0, 240, __pyx_L1_error) + } + if (unlikely(__pyx_v_sgaps2 == 0)) { + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + __PYX_ERR(0, 240, __pyx_L1_error) + } + __pyx_v_gappen = (((__pyx_v_ngaps / __pyx_v_sgaps) + (__pyx_v_ngaps2 / __pyx_v_sgaps2)) / 2.0); + } + __pyx_L38:; + } + __pyx_L3:; + + /* "nw_ec_alignx.pyx":241 + * else: + * gappen = ((ngaps / sgaps) + (ngaps2 / sgaps2)) / 2 + * return gappen # <<<<<<<<<<<<<< + * + * # better performance + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_4 = PyFloat_FromDouble(__pyx_v_gappen); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 241, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + + /* "nw_ec_alignx.pyx":109 + * + * + * cdef gappen(seq1, seq2): # <<<<<<<<<<<<<< + * """Returns the number + * Keyword Arguments: + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("nw_ec_alignx.gappen", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_gap); + __Pyx_XDECREF(__pyx_v_ec1); + __Pyx_XDECREF(__pyx_v_ec2); + __Pyx_XDECREF((PyObject *)__pyx_v_begin1); + __Pyx_XDECREF((PyObject *)__pyx_v_begin2); + __Pyx_XDECREF((PyObject *)__pyx_v_block1); + __Pyx_XDECREF((PyObject *)__pyx_v_block2); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "nw_ec_alignx.pyx":246 + * + * + * @cython.boundscheck(False) # <<<<<<<<<<<<<< + * @cython.wraparound(False) + * def scoring(np.ndarray[DTYPEF_t, ndim=2] mat, dict ecs, seq1, seq2, + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_12nw_ec_alignx_3scoring(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_12nw_ec_alignx_2scoring, " This function evaluates a pair of alignmed ESS and returns an entroy\n based similarity (distance) score. This value is in the range 0-1. 0 means\n more similar sequences and 1 means dissimilar sequences.\n\n The score tries to recall the fitness function proposed in Ortegon, et al.\n 2015. Comput Struct Biotechnol J. 9;13.\n\n Arguments:\n - `mat`: EC number similarity (distance) matrix\n - `ecs`: EC number dictionary. Keys are EC numbers (3 levels of\n classification) and values are indices to similarity matrix (mat)\n - `seq1`: enzymatic step sequence 1, list of (unaligned) EC numbers\n - `seq2`: enzymatic step sequence 2, list of (unaligned) EC numbers\n - `gap`: gap penalties, default = 1\n - `fhomo`: Weight factor to multiplicate the homogeneity fraction of score\n - `fpengap`: Weight factor to multiplicate the gap penalization\n "); +static PyMethodDef __pyx_mdef_12nw_ec_alignx_3scoring = {"scoring", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_12nw_ec_alignx_3scoring, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_12nw_ec_alignx_2scoring}; +static PyObject *__pyx_pw_12nw_ec_alignx_3scoring(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyArrayObject *__pyx_v_mat = 0; + PyObject *__pyx_v_ecs = 0; + PyObject *__pyx_v_seq1 = 0; + PyObject *__pyx_v_seq2 = 0; + float __pyx_v_gap; + float __pyx_v_fhomo; + float __pyx_v_fpengap; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[7] = {0,0,0,0,0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("scoring (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_mat,&__pyx_n_s_ecs,&__pyx_n_s_seq1,&__pyx_n_s_seq2,&__pyx_n_s_gap,&__pyx_n_s_fhomo,&__pyx_n_s_fpengap,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_mat)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 246, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_ecs)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 246, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("scoring", 0, 4, 7, 1); __PYX_ERR(0, 246, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_seq1)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 246, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("scoring", 0, 4, 7, 2); __PYX_ERR(0, 246, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_seq2)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 246, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("scoring", 0, 4, 7, 3); __PYX_ERR(0, 246, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gap); + if (value) { values[4] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 246, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_fhomo); + if (value) { values[5] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 246, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_fpengap); + if (value) { values[6] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 246, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "scoring") < 0)) __PYX_ERR(0, 246, __pyx_L3_error) + } + } else { + switch (__pyx_nargs) { + case 7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_mat = ((PyArrayObject *)values[0]); + __pyx_v_ecs = ((PyObject*)values[1]); + __pyx_v_seq1 = values[2]; + __pyx_v_seq2 = values[3]; + if (values[4]) { + __pyx_v_gap = __pyx_PyFloat_AsFloat(values[4]); if (unlikely((__pyx_v_gap == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 249, __pyx_L3_error) + } else { + __pyx_v_gap = ((float)((float)1.0)); + } + if (values[5]) { + __pyx_v_fhomo = __pyx_PyFloat_AsFloat(values[5]); if (unlikely((__pyx_v_fhomo == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 249, __pyx_L3_error) + } else { + __pyx_v_fhomo = ((float)((double)0.95)); + } + if (values[6]) { + __pyx_v_fpengap = __pyx_PyFloat_AsFloat(values[6]); if (unlikely((__pyx_v_fpengap == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 249, __pyx_L3_error) + } else { + __pyx_v_fpengap = ((float)((double)0.05)); + } + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("scoring", 0, 4, 7, __pyx_nargs); __PYX_ERR(0, 246, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("nw_ec_alignx.scoring", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_5numpy_ndarray, 1, "mat", 0))) __PYX_ERR(0, 248, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ecs), (&PyDict_Type), 1, "ecs", 1))) __PYX_ERR(0, 248, __pyx_L1_error) + __pyx_r = __pyx_pf_12nw_ec_alignx_2scoring(__pyx_self, __pyx_v_mat, __pyx_v_ecs, __pyx_v_seq1, __pyx_v_seq2, __pyx_v_gap, __pyx_v_fhomo, __pyx_v_fpengap); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_12nw_ec_alignx_2scoring(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_mat, PyObject *__pyx_v_ecs, PyObject *__pyx_v_seq1, PyObject *__pyx_v_seq2, float __pyx_v_gap, float __pyx_v_fhomo, float __pyx_v_fpengap) { + unsigned int __pyx_v_length; + unsigned int __pyx_v_i; + unsigned int __pyx_v_x; + unsigned int __pyx_v_y; + float __pyx_v_pengap; + float __pyx_v_score; + float __pyx_v_homo; + PyObject *__pyx_v_ec1 = 0; + PyObject *__pyx_v_ec2 = 0; + PyObject *__pyx_v_gapstr = 0; + PyObject *__pyx_v_dotstr = 0; + __Pyx_LocalBuf_ND __pyx_pybuffernd_mat; + __Pyx_Buffer __pyx_pybuffer_mat; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + float __pyx_t_1; + int __pyx_t_2; + Py_ssize_t __pyx_t_3; + Py_ssize_t __pyx_t_4; + unsigned int __pyx_t_5; + unsigned int __pyx_t_6; + unsigned int __pyx_t_7; + PyObject *__pyx_t_8 = NULL; + int __pyx_t_9; + unsigned int __pyx_t_10; + size_t __pyx_t_11; + size_t __pyx_t_12; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("scoring", 1); + __pyx_pybuffer_mat.pybuffer.buf = NULL; + __pyx_pybuffer_mat.refcount = 0; + __pyx_pybuffernd_mat.data = NULL; + __pyx_pybuffernd_mat.rcbuffer = &__pyx_pybuffer_mat; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mat.rcbuffer->pybuffer, (PyObject*)__pyx_v_mat, &__Pyx_TypeInfo_nn___pyx_t_12nw_ec_alignx_DTYPEF_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 246, __pyx_L1_error) + } + __pyx_pybuffernd_mat.diminfo[0].strides = __pyx_pybuffernd_mat.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_mat.diminfo[0].shape = __pyx_pybuffernd_mat.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_mat.diminfo[1].strides = __pyx_pybuffernd_mat.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_mat.diminfo[1].shape = __pyx_pybuffernd_mat.rcbuffer->pybuffer.shape[1]; + + /* "nw_ec_alignx.pyx":270 + * unsigned int length, i, x, y + * float pengap, score + * float homo = 0.0 # <<<<<<<<<<<<<< + * str ec1, ec2 + * str gapstr = '-.-.-' + */ + __pyx_v_homo = 0.0; + + /* "nw_ec_alignx.pyx":272 + * float homo = 0.0 + * str ec1, ec2 + * str gapstr = '-.-.-' # <<<<<<<<<<<<<< + * str dotstr = '...' + * # are sequences of same length? + */ + __Pyx_INCREF(__pyx_kp_u__3); + __pyx_v_gapstr = __pyx_kp_u__3; + + /* "nw_ec_alignx.pyx":273 + * str ec1, ec2 + * str gapstr = '-.-.-' + * str dotstr = '...' # <<<<<<<<<<<<<< + * # are sequences of same length? + * assert 0.99999 < (fhomo + fpengap) < 1.0001, \ + */ + __Pyx_INCREF(__pyx_kp_u__4); + __pyx_v_dotstr = __pyx_kp_u__4; + + /* "nw_ec_alignx.pyx":275 + * str dotstr = '...' + * # are sequences of same length? + * assert 0.99999 < (fhomo + fpengap) < 1.0001, \ # <<<<<<<<<<<<<< + * 'fhomo + fpengap must sum aprox. 1' + * assert len(seq1) == len(seq2), \ + */ + #ifndef CYTHON_WITHOUT_ASSERTIONS + if (unlikely(__pyx_assertions_enabled())) { + __pyx_t_1 = (__pyx_v_fhomo + __pyx_v_fpengap); + __pyx_t_2 = (0.99999 < __pyx_t_1); + if (__pyx_t_2) { + __pyx_t_2 = (__pyx_t_1 < 1.0001); + } + if (unlikely(!__pyx_t_2)) { + __Pyx_Raise(__pyx_builtin_AssertionError, __pyx_kp_u_fhomo_fpengap_must_sum_aprox_1, 0, 0); + __PYX_ERR(0, 275, __pyx_L1_error) + } + } + #else + if ((1)); else __PYX_ERR(0, 275, __pyx_L1_error) + #endif + + /* "nw_ec_alignx.pyx":277 + * assert 0.99999 < (fhomo + fpengap) < 1.0001, \ + * 'fhomo + fpengap must sum aprox. 1' + * assert len(seq1) == len(seq2), \ # <<<<<<<<<<<<<< + * 'The aligned sequences must be of the same length' + * length = len(seq1) # Alignment length + */ + #ifndef CYTHON_WITHOUT_ASSERTIONS + if (unlikely(__pyx_assertions_enabled())) { + __pyx_t_3 = PyObject_Length(__pyx_v_seq1); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(0, 277, __pyx_L1_error) + __pyx_t_4 = PyObject_Length(__pyx_v_seq2); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(0, 277, __pyx_L1_error) + __pyx_t_2 = (__pyx_t_3 == __pyx_t_4); + if (unlikely(!__pyx_t_2)) { + __Pyx_Raise(__pyx_builtin_AssertionError, __pyx_kp_u_The_aligned_sequences_must_be_of, 0, 0); + __PYX_ERR(0, 277, __pyx_L1_error) + } + } + #else + if ((1)); else __PYX_ERR(0, 277, __pyx_L1_error) + #endif + + /* "nw_ec_alignx.pyx":279 + * assert len(seq1) == len(seq2), \ + * 'The aligned sequences must be of the same length' + * length = len(seq1) # Alignment length # <<<<<<<<<<<<<< + * # -- Sum homogeneity evaluation + * for i in range(length): + */ + __pyx_t_4 = PyObject_Length(__pyx_v_seq1); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(0, 279, __pyx_L1_error) + __pyx_v_length = __pyx_t_4; + + /* "nw_ec_alignx.pyx":281 + * length = len(seq1) # Alignment length + * # -- Sum homogeneity evaluation + * for i in range(length): # <<<<<<<<<<<<<< + * ec1 = seq1[i] + * ec2 = seq2[i] + */ + __pyx_t_5 = __pyx_v_length; + __pyx_t_6 = __pyx_t_5; + for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) { + __pyx_v_i = __pyx_t_7; + + /* "nw_ec_alignx.pyx":282 + * # -- Sum homogeneity evaluation + * for i in range(length): + * ec1 = seq1[i] # <<<<<<<<<<<<<< + * ec2 = seq2[i] + * if ec1 == gapstr or ec2 == gapstr: # and s1[i] != s2[1] + */ + __pyx_t_8 = __Pyx_GetItemInt(__pyx_v_seq1, __pyx_v_i, unsigned int, 0, __Pyx_PyInt_From_unsigned_int, 0, 0, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 282, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + if (!(likely(PyUnicode_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("unicode", __pyx_t_8))) __PYX_ERR(0, 282, __pyx_L1_error) + __Pyx_XDECREF_SET(__pyx_v_ec1, ((PyObject*)__pyx_t_8)); + __pyx_t_8 = 0; + + /* "nw_ec_alignx.pyx":283 + * for i in range(length): + * ec1 = seq1[i] + * ec2 = seq2[i] # <<<<<<<<<<<<<< + * if ec1 == gapstr or ec2 == gapstr: # and s1[i] != s2[1] + * homo += gap # gap homogeneity = 1 + */ + __pyx_t_8 = __Pyx_GetItemInt(__pyx_v_seq2, __pyx_v_i, unsigned int, 0, __Pyx_PyInt_From_unsigned_int, 0, 0, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 283, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + if (!(likely(PyUnicode_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("unicode", __pyx_t_8))) __PYX_ERR(0, 283, __pyx_L1_error) + __Pyx_XDECREF_SET(__pyx_v_ec2, ((PyObject*)__pyx_t_8)); + __pyx_t_8 = 0; + + /* "nw_ec_alignx.pyx":284 + * ec1 = seq1[i] + * ec2 = seq2[i] + * if ec1 == gapstr or ec2 == gapstr: # and s1[i] != s2[1] # <<<<<<<<<<<<<< + * homo += gap # gap homogeneity = 1 + * elif ec1 == dotstr or ec2 == dotstr: + */ + __pyx_t_9 = (__Pyx_PyUnicode_Equals(__pyx_v_ec1, __pyx_v_gapstr, Py_EQ)); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 284, __pyx_L1_error) + if (!__pyx_t_9) { + } else { + __pyx_t_2 = __pyx_t_9; + goto __pyx_L6_bool_binop_done; + } + __pyx_t_9 = (__Pyx_PyUnicode_Equals(__pyx_v_ec2, __pyx_v_gapstr, Py_EQ)); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 284, __pyx_L1_error) + __pyx_t_2 = __pyx_t_9; + __pyx_L6_bool_binop_done:; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":285 + * ec2 = seq2[i] + * if ec1 == gapstr or ec2 == gapstr: # and s1[i] != s2[1] + * homo += gap # gap homogeneity = 1 # <<<<<<<<<<<<<< + * elif ec1 == dotstr or ec2 == dotstr: + * pass + */ + __pyx_v_homo = (__pyx_v_homo + __pyx_v_gap); + + /* "nw_ec_alignx.pyx":284 + * ec1 = seq1[i] + * ec2 = seq2[i] + * if ec1 == gapstr or ec2 == gapstr: # and s1[i] != s2[1] # <<<<<<<<<<<<<< + * homo += gap # gap homogeneity = 1 + * elif ec1 == dotstr or ec2 == dotstr: + */ + goto __pyx_L5; + } + + /* "nw_ec_alignx.pyx":286 + * if ec1 == gapstr or ec2 == gapstr: # and s1[i] != s2[1] + * homo += gap # gap homogeneity = 1 + * elif ec1 == dotstr or ec2 == dotstr: # <<<<<<<<<<<<<< + * pass + * elif ec1 == '' or ec2 == '': + */ + __pyx_t_9 = (__Pyx_PyUnicode_Equals(__pyx_v_ec1, __pyx_v_dotstr, Py_EQ)); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 286, __pyx_L1_error) + if (!__pyx_t_9) { + } else { + __pyx_t_2 = __pyx_t_9; + goto __pyx_L8_bool_binop_done; + } + __pyx_t_9 = (__Pyx_PyUnicode_Equals(__pyx_v_ec2, __pyx_v_dotstr, Py_EQ)); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 286, __pyx_L1_error) + __pyx_t_2 = __pyx_t_9; + __pyx_L8_bool_binop_done:; + if (__pyx_t_2) { + goto __pyx_L5; + } + + /* "nw_ec_alignx.pyx":288 + * elif ec1 == dotstr or ec2 == dotstr: + * pass + * elif ec1 == '' or ec2 == '': # <<<<<<<<<<<<<< + * pass + * else: + */ + __pyx_t_9 = (__Pyx_PyUnicode_Equals(__pyx_v_ec1, __pyx_kp_u__5, Py_EQ)); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 288, __pyx_L1_error) + if (!__pyx_t_9) { + } else { + __pyx_t_2 = __pyx_t_9; + goto __pyx_L10_bool_binop_done; + } + __pyx_t_9 = (__Pyx_PyUnicode_Equals(__pyx_v_ec2, __pyx_kp_u__5, Py_EQ)); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 288, __pyx_L1_error) + __pyx_t_2 = __pyx_t_9; + __pyx_L10_bool_binop_done:; + if (__pyx_t_2) { + goto __pyx_L5; + } + + /* "nw_ec_alignx.pyx":291 + * pass + * else: + * x = ecs[ec1] # <<<<<<<<<<<<<< + * y = ecs[ec2] + * homo += mat[x, y] + */ + /*else*/ { + if (unlikely(__pyx_v_ecs == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 291, __pyx_L1_error) + } + __pyx_t_8 = __Pyx_PyDict_GetItem(__pyx_v_ecs, __pyx_v_ec1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 291, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_10 = __Pyx_PyInt_As_unsigned_int(__pyx_t_8); if (unlikely((__pyx_t_10 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 291, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_v_x = __pyx_t_10; + + /* "nw_ec_alignx.pyx":292 + * else: + * x = ecs[ec1] + * y = ecs[ec2] # <<<<<<<<<<<<<< + * homo += mat[x, y] + * homo = homo / length # mean homogeneity + */ + if (unlikely(__pyx_v_ecs == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 292, __pyx_L1_error) + } + __pyx_t_8 = __Pyx_PyDict_GetItem(__pyx_v_ecs, __pyx_v_ec2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 292, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_10 = __Pyx_PyInt_As_unsigned_int(__pyx_t_8); if (unlikely((__pyx_t_10 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 292, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_v_y = __pyx_t_10; + + /* "nw_ec_alignx.pyx":293 + * x = ecs[ec1] + * y = ecs[ec2] + * homo += mat[x, y] # <<<<<<<<<<<<<< + * homo = homo / length # mean homogeneity + * pengap = gappen(seq1, seq2) # dap penalization + */ + __pyx_t_11 = __pyx_v_x; + __pyx_t_12 = __pyx_v_y; + __pyx_v_homo = (__pyx_v_homo + (*__Pyx_BufPtrStrided2d(__pyx_t_12nw_ec_alignx_DTYPEF_t *, __pyx_pybuffernd_mat.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_mat.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_mat.diminfo[1].strides))); + } + __pyx_L5:; + } + + /* "nw_ec_alignx.pyx":294 + * y = ecs[ec2] + * homo += mat[x, y] + * homo = homo / length # mean homogeneity # <<<<<<<<<<<<<< + * pengap = gappen(seq1, seq2) # dap penalization + * # Final score calculation + */ + if (unlikely(__pyx_v_length == 0)) { + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + __PYX_ERR(0, 294, __pyx_L1_error) + } + __pyx_v_homo = (__pyx_v_homo / ((float)__pyx_v_length)); + + /* "nw_ec_alignx.pyx":295 + * homo += mat[x, y] + * homo = homo / length # mean homogeneity + * pengap = gappen(seq1, seq2) # dap penalization # <<<<<<<<<<<<<< + * # Final score calculation + * score = (homo * fhomo) + (pengap * fpengap) + */ + __pyx_t_8 = __pyx_f_12nw_ec_alignx_gappen(__pyx_v_seq1, __pyx_v_seq2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 295, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __pyx_PyFloat_AsFloat(__pyx_t_8); if (unlikely((__pyx_t_1 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 295, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_v_pengap = __pyx_t_1; + + /* "nw_ec_alignx.pyx":297 + * pengap = gappen(seq1, seq2) # dap penalization + * # Final score calculation + * score = (homo * fhomo) + (pengap * fpengap) # <<<<<<<<<<<<<< + * # there is no penalizarion for increment in columns + * return score + */ + __pyx_v_score = ((__pyx_v_homo * __pyx_v_fhomo) + (__pyx_v_pengap * __pyx_v_fpengap)); + + /* "nw_ec_alignx.pyx":299 + * score = (homo * fhomo) + (pengap * fpengap) + * # there is no penalizarion for increment in columns + * return score # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_8 = PyFloat_FromDouble(__pyx_v_score); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 299, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_r = __pyx_t_8; + __pyx_t_8 = 0; + goto __pyx_L0; + + /* "nw_ec_alignx.pyx":246 + * + * + * @cython.boundscheck(False) # <<<<<<<<<<<<<< + * @cython.wraparound(False) + * def scoring(np.ndarray[DTYPEF_t, ndim=2] mat, dict ecs, seq1, seq2, + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_8); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mat.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("nw_ec_alignx.scoring", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mat.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XDECREF(__pyx_v_ec1); + __Pyx_XDECREF(__pyx_v_ec2); + __Pyx_XDECREF(__pyx_v_gapstr); + __Pyx_XDECREF(__pyx_v_dotstr); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "nw_ec_alignx.pyx":302 + * + * + * def _backtrace(np.ndarray[DTYPE_t, ndim=2] arrow, list seq1, list seq2): # <<<<<<<<<<<<<< + * """Reads the arrow matrix of NW alignment and return two lists of + * with the aligned EC numbers. + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_12nw_ec_alignx_5_backtrace(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_12nw_ec_alignx_4_backtrace, "Reads the arrow matrix of NW alignment and return two lists of\n with the aligned EC numbers.\n\n Arguments:\n - `arrow`: arrow matrix generated by dynamic programing\n - `seq1`: enzymatic step sequence, list of (unaligned) EC numbers\n - `seq2`: enzymatic step sequence, list of (unaligned) EC numbers\n "); +static PyMethodDef __pyx_mdef_12nw_ec_alignx_5_backtrace = {"_backtrace", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_12nw_ec_alignx_5_backtrace, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_12nw_ec_alignx_4_backtrace}; +static PyObject *__pyx_pw_12nw_ec_alignx_5_backtrace(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyArrayObject *__pyx_v_arrow = 0; + PyObject *__pyx_v_seq1 = 0; + PyObject *__pyx_v_seq2 = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[3] = {0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("_backtrace (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_arrow,&__pyx_n_s_seq1,&__pyx_n_s_seq2,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_arrow)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 302, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_seq1)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 302, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_backtrace", 1, 3, 3, 1); __PYX_ERR(0, 302, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_seq2)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 302, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_backtrace", 1, 3, 3, 2); __PYX_ERR(0, 302, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_backtrace") < 0)) __PYX_ERR(0, 302, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 3)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + } + __pyx_v_arrow = ((PyArrayObject *)values[0]); + __pyx_v_seq1 = ((PyObject*)values[1]); + __pyx_v_seq2 = ((PyObject*)values[2]); + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("_backtrace", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 302, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("nw_ec_alignx._backtrace", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_arrow), __pyx_ptype_5numpy_ndarray, 1, "arrow", 0))) __PYX_ERR(0, 302, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_seq1), (&PyList_Type), 1, "seq1", 1))) __PYX_ERR(0, 302, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_seq2), (&PyList_Type), 1, "seq2", 1))) __PYX_ERR(0, 302, __pyx_L1_error) + __pyx_r = __pyx_pf_12nw_ec_alignx_4_backtrace(__pyx_self, __pyx_v_arrow, __pyx_v_seq1, __pyx_v_seq2); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_12nw_ec_alignx_4_backtrace(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_arrow, PyObject *__pyx_v_seq1, PyObject *__pyx_v_seq2) { + int __pyx_v_v; + int __pyx_v_h; + PyBoolObject *__pyx_v_ok = 0; + PyObject *__pyx_v_st1 = 0; + PyObject *__pyx_v_st2 = 0; + __Pyx_LocalBuf_ND __pyx_pybuffernd_arrow; + __Pyx_Buffer __pyx_pybuffer_arrow; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + Py_ssize_t __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_t_3; + Py_ssize_t __pyx_t_4; + Py_ssize_t __pyx_t_5; + long __pyx_t_6; + int __pyx_t_7; + int __pyx_t_8; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_backtrace", 1); + __pyx_pybuffer_arrow.pybuffer.buf = NULL; + __pyx_pybuffer_arrow.refcount = 0; + __pyx_pybuffernd_arrow.data = NULL; + __pyx_pybuffernd_arrow.rcbuffer = &__pyx_pybuffer_arrow; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_arrow.rcbuffer->pybuffer, (PyObject*)__pyx_v_arrow, &__Pyx_TypeInfo_nn___pyx_t_12nw_ec_alignx_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 302, __pyx_L1_error) + } + __pyx_pybuffernd_arrow.diminfo[0].strides = __pyx_pybuffernd_arrow.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_arrow.diminfo[0].shape = __pyx_pybuffernd_arrow.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_arrow.diminfo[1].strides = __pyx_pybuffernd_arrow.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_arrow.diminfo[1].shape = __pyx_pybuffernd_arrow.rcbuffer->pybuffer.shape[1]; + + /* "nw_ec_alignx.pyx":312 + * """ + * cdef: + * int v = len(seq1) # <<<<<<<<<<<<<< + * int h = len(seq2) + * bool ok = True + */ + if (unlikely(__pyx_v_seq1 == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(0, 312, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_PyList_GET_SIZE(__pyx_v_seq1); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 312, __pyx_L1_error) + __pyx_v_v = __pyx_t_1; + + /* "nw_ec_alignx.pyx":313 + * cdef: + * int v = len(seq1) + * int h = len(seq2) # <<<<<<<<<<<<<< + * bool ok = True + * list st1 = [] + */ + if (unlikely(__pyx_v_seq2 == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(0, 313, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_PyList_GET_SIZE(__pyx_v_seq2); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 313, __pyx_L1_error) + __pyx_v_h = __pyx_t_1; + + /* "nw_ec_alignx.pyx":314 + * int v = len(seq1) + * int h = len(seq2) + * bool ok = True # <<<<<<<<<<<<<< + * list st1 = [] + * list st2 = [] + */ + __Pyx_INCREF(Py_True); + __pyx_v_ok = ((PyBoolObject *)Py_True); + + /* "nw_ec_alignx.pyx":315 + * int h = len(seq2) + * bool ok = True + * list st1 = [] # <<<<<<<<<<<<<< + * list st2 = [] + * while ok: # backtrace walk + */ + __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 315, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_st1 = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; + + /* "nw_ec_alignx.pyx":316 + * bool ok = True + * list st1 = [] + * list st2 = [] # <<<<<<<<<<<<<< + * while ok: # backtrace walk + * if arrow[v, h] == 0: # vertical best result, s1 + */ + __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 316, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_st2 = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; + + /* "nw_ec_alignx.pyx":317 + * list st1 = [] + * list st2 = [] + * while ok: # backtrace walk # <<<<<<<<<<<<<< + * if arrow[v, h] == 0: # vertical best result, s1 + * st1.append(seq1[v - 1]) + */ + while (1) { + __pyx_t_3 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_ok)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 317, __pyx_L1_error) + if (!__pyx_t_3) break; + + /* "nw_ec_alignx.pyx":318 + * list st2 = [] + * while ok: # backtrace walk + * if arrow[v, h] == 0: # vertical best result, s1 # <<<<<<<<<<<<<< + * st1.append(seq1[v - 1]) + * st2.append('-.-.-') + */ + __pyx_t_4 = __pyx_v_v; + __pyx_t_5 = __pyx_v_h; + __pyx_t_3 = ((*__Pyx_BufPtrStrided2d(__pyx_t_12nw_ec_alignx_DTYPE_t *, __pyx_pybuffernd_arrow.rcbuffer->pybuffer.buf, __pyx_t_4, __pyx_pybuffernd_arrow.diminfo[0].strides, __pyx_t_5, __pyx_pybuffernd_arrow.diminfo[1].strides)) == 0); + if (__pyx_t_3) { + + /* "nw_ec_alignx.pyx":319 + * while ok: # backtrace walk + * if arrow[v, h] == 0: # vertical best result, s1 + * st1.append(seq1[v - 1]) # <<<<<<<<<<<<<< + * st2.append('-.-.-') + * v -= 1 + */ + if (unlikely(__pyx_v_seq1 == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 319, __pyx_L1_error) + } + __pyx_t_6 = (__pyx_v_v - 1); + __pyx_t_2 = PyList_GET_ITEM(__pyx_v_seq1, __pyx_t_6); + __Pyx_INCREF(__pyx_t_2); + __pyx_t_7 = __Pyx_PyList_Append(__pyx_v_st1, __pyx_t_2); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 319, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "nw_ec_alignx.pyx":320 + * if arrow[v, h] == 0: # vertical best result, s1 + * st1.append(seq1[v - 1]) + * st2.append('-.-.-') # <<<<<<<<<<<<<< + * v -= 1 + * elif arrow[v, h] == 1: # horizontal best result, s2 + */ + __pyx_t_7 = __Pyx_PyList_Append(__pyx_v_st2, __pyx_kp_u__3); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 320, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":321 + * st1.append(seq1[v - 1]) + * st2.append('-.-.-') + * v -= 1 # <<<<<<<<<<<<<< + * elif arrow[v, h] == 1: # horizontal best result, s2 + * st1.append('-.-.-') + */ + __pyx_v_v = (__pyx_v_v - 1); + + /* "nw_ec_alignx.pyx":318 + * list st2 = [] + * while ok: # backtrace walk + * if arrow[v, h] == 0: # vertical best result, s1 # <<<<<<<<<<<<<< + * st1.append(seq1[v - 1]) + * st2.append('-.-.-') + */ + goto __pyx_L5; + } + + /* "nw_ec_alignx.pyx":322 + * st2.append('-.-.-') + * v -= 1 + * elif arrow[v, h] == 1: # horizontal best result, s2 # <<<<<<<<<<<<<< + * st1.append('-.-.-') + * st2.append(seq2[h - 1]) + */ + __pyx_t_5 = __pyx_v_v; + __pyx_t_4 = __pyx_v_h; + __pyx_t_3 = ((*__Pyx_BufPtrStrided2d(__pyx_t_12nw_ec_alignx_DTYPE_t *, __pyx_pybuffernd_arrow.rcbuffer->pybuffer.buf, __pyx_t_5, __pyx_pybuffernd_arrow.diminfo[0].strides, __pyx_t_4, __pyx_pybuffernd_arrow.diminfo[1].strides)) == 1); + if (__pyx_t_3) { + + /* "nw_ec_alignx.pyx":323 + * v -= 1 + * elif arrow[v, h] == 1: # horizontal best result, s2 + * st1.append('-.-.-') # <<<<<<<<<<<<<< + * st2.append(seq2[h - 1]) + * h -= 1 + */ + __pyx_t_7 = __Pyx_PyList_Append(__pyx_v_st1, __pyx_kp_u__3); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 323, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":324 + * elif arrow[v, h] == 1: # horizontal best result, s2 + * st1.append('-.-.-') + * st2.append(seq2[h - 1]) # <<<<<<<<<<<<<< + * h -= 1 + * elif arrow[v, h] == 2: # diagonal best result, s1,s2 aligned + */ + if (unlikely(__pyx_v_seq2 == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 324, __pyx_L1_error) + } + __pyx_t_6 = (__pyx_v_h - 1); + __pyx_t_2 = PyList_GET_ITEM(__pyx_v_seq2, __pyx_t_6); + __Pyx_INCREF(__pyx_t_2); + __pyx_t_7 = __Pyx_PyList_Append(__pyx_v_st2, __pyx_t_2); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 324, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "nw_ec_alignx.pyx":325 + * st1.append('-.-.-') + * st2.append(seq2[h - 1]) + * h -= 1 # <<<<<<<<<<<<<< + * elif arrow[v, h] == 2: # diagonal best result, s1,s2 aligned + * st1.append(seq1[v - 1]) + */ + __pyx_v_h = (__pyx_v_h - 1); + + /* "nw_ec_alignx.pyx":322 + * st2.append('-.-.-') + * v -= 1 + * elif arrow[v, h] == 1: # horizontal best result, s2 # <<<<<<<<<<<<<< + * st1.append('-.-.-') + * st2.append(seq2[h - 1]) + */ + goto __pyx_L5; + } + + /* "nw_ec_alignx.pyx":326 + * st2.append(seq2[h - 1]) + * h -= 1 + * elif arrow[v, h] == 2: # diagonal best result, s1,s2 aligned # <<<<<<<<<<<<<< + * st1.append(seq1[v - 1]) + * st2.append(seq2[h - 1]) + */ + __pyx_t_4 = __pyx_v_v; + __pyx_t_5 = __pyx_v_h; + __pyx_t_3 = ((*__Pyx_BufPtrStrided2d(__pyx_t_12nw_ec_alignx_DTYPE_t *, __pyx_pybuffernd_arrow.rcbuffer->pybuffer.buf, __pyx_t_4, __pyx_pybuffernd_arrow.diminfo[0].strides, __pyx_t_5, __pyx_pybuffernd_arrow.diminfo[1].strides)) == 2); + if (__pyx_t_3) { + + /* "nw_ec_alignx.pyx":327 + * h -= 1 + * elif arrow[v, h] == 2: # diagonal best result, s1,s2 aligned + * st1.append(seq1[v - 1]) # <<<<<<<<<<<<<< + * st2.append(seq2[h - 1]) + * v -= 1 + */ + if (unlikely(__pyx_v_seq1 == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 327, __pyx_L1_error) + } + __pyx_t_6 = (__pyx_v_v - 1); + __pyx_t_2 = PyList_GET_ITEM(__pyx_v_seq1, __pyx_t_6); + __Pyx_INCREF(__pyx_t_2); + __pyx_t_7 = __Pyx_PyList_Append(__pyx_v_st1, __pyx_t_2); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 327, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "nw_ec_alignx.pyx":328 + * elif arrow[v, h] == 2: # diagonal best result, s1,s2 aligned + * st1.append(seq1[v - 1]) + * st2.append(seq2[h - 1]) # <<<<<<<<<<<<<< + * v -= 1 + * h -= 1 + */ + if (unlikely(__pyx_v_seq2 == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 328, __pyx_L1_error) + } + __pyx_t_6 = (__pyx_v_h - 1); + __pyx_t_2 = PyList_GET_ITEM(__pyx_v_seq2, __pyx_t_6); + __Pyx_INCREF(__pyx_t_2); + __pyx_t_7 = __Pyx_PyList_Append(__pyx_v_st2, __pyx_t_2); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 328, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "nw_ec_alignx.pyx":329 + * st1.append(seq1[v - 1]) + * st2.append(seq2[h - 1]) + * v -= 1 # <<<<<<<<<<<<<< + * h -= 1 + * if v == 0 and h == 0: + */ + __pyx_v_v = (__pyx_v_v - 1); + + /* "nw_ec_alignx.pyx":330 + * st2.append(seq2[h - 1]) + * v -= 1 + * h -= 1 # <<<<<<<<<<<<<< + * if v == 0 and h == 0: + * ok = False + */ + __pyx_v_h = (__pyx_v_h - 1); + + /* "nw_ec_alignx.pyx":326 + * st2.append(seq2[h - 1]) + * h -= 1 + * elif arrow[v, h] == 2: # diagonal best result, s1,s2 aligned # <<<<<<<<<<<<<< + * st1.append(seq1[v - 1]) + * st2.append(seq2[h - 1]) + */ + } + __pyx_L5:; + + /* "nw_ec_alignx.pyx":331 + * v -= 1 + * h -= 1 + * if v == 0 and h == 0: # <<<<<<<<<<<<<< + * ok = False + * # reverse sequences + */ + __pyx_t_8 = (__pyx_v_v == 0); + if (__pyx_t_8) { + } else { + __pyx_t_3 = __pyx_t_8; + goto __pyx_L7_bool_binop_done; + } + __pyx_t_8 = (__pyx_v_h == 0); + __pyx_t_3 = __pyx_t_8; + __pyx_L7_bool_binop_done:; + if (__pyx_t_3) { + + /* "nw_ec_alignx.pyx":332 + * h -= 1 + * if v == 0 and h == 0: + * ok = False # <<<<<<<<<<<<<< + * # reverse sequences + * st1 = st1[::-1] + */ + __Pyx_INCREF(Py_False); + __Pyx_DECREF_SET(__pyx_v_ok, ((PyBoolObject *)Py_False)); + + /* "nw_ec_alignx.pyx":331 + * v -= 1 + * h -= 1 + * if v == 0 and h == 0: # <<<<<<<<<<<<<< + * ok = False + * # reverse sequences + */ + } + } + + /* "nw_ec_alignx.pyx":334 + * ok = False + * # reverse sequences + * st1 = st1[::-1] # <<<<<<<<<<<<<< + * st2 = st2[::-1] + * return st1, st2 + */ + __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_st1, __pyx_slice__6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 334, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF_SET(__pyx_v_st1, ((PyObject*)__pyx_t_2)); + __pyx_t_2 = 0; + + /* "nw_ec_alignx.pyx":335 + * # reverse sequences + * st1 = st1[::-1] + * st2 = st2[::-1] # <<<<<<<<<<<<<< + * return st1, st2 + * + */ + __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_st2, __pyx_slice__6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 335, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF_SET(__pyx_v_st2, ((PyObject*)__pyx_t_2)); + __pyx_t_2 = 0; + + /* "nw_ec_alignx.pyx":336 + * st1 = st1[::-1] + * st2 = st2[::-1] + * return st1, st2 # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 336, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_v_st1); + __Pyx_GIVEREF(__pyx_v_st1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_st1)) __PYX_ERR(0, 336, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_st2); + __Pyx_GIVEREF(__pyx_v_st2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_st2)) __PYX_ERR(0, 336, __pyx_L1_error); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "nw_ec_alignx.pyx":302 + * + * + * def _backtrace(np.ndarray[DTYPE_t, ndim=2] arrow, list seq1, list seq2): # <<<<<<<<<<<<<< + * """Reads the arrow matrix of NW alignment and return two lists of + * with the aligned EC numbers. + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_arrow.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("nw_ec_alignx._backtrace", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_arrow.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XDECREF((PyObject *)__pyx_v_ok); + __Pyx_XDECREF(__pyx_v_st1); + __Pyx_XDECREF(__pyx_v_st2); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "nw_ec_alignx.pyx":339 + * + * + * def NW(np.ndarray[DTYPEF_t, ndim=2] mat, dict ecs, list seq1, list seq2, # <<<<<<<<<<<<<< + * float gap=0.9, bool localize=False, bool nws=False, + * bool strfmt=True, bool oscore=False): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_12nw_ec_alignx_7NW(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_12nw_ec_alignx_6NW, "\n NW alignment function. Creates a pairwise alignment of Enzymatic Step\n Sequences (ESS) using a Needelman-Wunsh algorithm.\n\n Arguments:\n - `mat`: EC number (3 levels) substitution matrix\n - `ecs`: List of ec numbers that represent the labels of the matrix\n - `seq1`: EC numbers sequence 1, list\n - `seq2`: EC numbers sequence 2, list\n - `gap`: gap penalty for NW algorithm (not for scoring)\n - `localize`: if localize = True, then, the function returns only the\n fragment of the alignment covered by the shortest sequence\n and the score is calculated accordingly\n - `nws`: if true, the function returns the scores as is returned by the\n NW algorithm\n - `strfmt`: if True. The aligned sequences are in string format. If\n False, the sequences are in list format\n - `oscore`: if True, only returns the score of the alignment, else\n "); +static PyMethodDef __pyx_mdef_12nw_ec_alignx_7NW = {"NW", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_12nw_ec_alignx_7NW, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_12nw_ec_alignx_6NW}; +static PyObject *__pyx_pw_12nw_ec_alignx_7NW(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyArrayObject *__pyx_v_mat = 0; + PyObject *__pyx_v_ecs = 0; + PyObject *__pyx_v_seq1 = 0; + PyObject *__pyx_v_seq2 = 0; + float __pyx_v_gap; + PyBoolObject *__pyx_v_localize = 0; + PyBoolObject *__pyx_v_nws = 0; + PyBoolObject *__pyx_v_strfmt = 0; + PyBoolObject *__pyx_v_oscore = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[9] = {0,0,0,0,0,0,0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("NW (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_mat,&__pyx_n_s_ecs,&__pyx_n_s_seq1,&__pyx_n_s_seq2,&__pyx_n_s_gap,&__pyx_n_s_localize,&__pyx_n_s_nws,&__pyx_n_s_strfmt,&__pyx_n_s_oscore,0}; + values[5] = __Pyx_Arg_NewRef_FASTCALL((PyObject *)__pyx_k__7); + values[6] = __Pyx_Arg_NewRef_FASTCALL((PyObject *)__pyx_k__8); + values[7] = __Pyx_Arg_NewRef_FASTCALL((PyObject *)__pyx_k__9); + values[8] = __Pyx_Arg_NewRef_FASTCALL((PyObject *)__pyx_k__10); + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 9: values[8] = __Pyx_Arg_FASTCALL(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_mat)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 339, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_ecs)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 339, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("NW", 0, 4, 9, 1); __PYX_ERR(0, 339, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_seq1)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 339, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("NW", 0, 4, 9, 2); __PYX_ERR(0, 339, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_seq2)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 339, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("NW", 0, 4, 9, 3); __PYX_ERR(0, 339, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_gap); + if (value) { values[4] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 339, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_localize); + if (value) { values[5] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 339, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_nws); + if (value) { values[6] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 339, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_strfmt); + if (value) { values[7] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 339, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_oscore); + if (value) { values[8] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 339, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "NW") < 0)) __PYX_ERR(0, 339, __pyx_L3_error) + } + } else { + switch (__pyx_nargs) { + case 9: values[8] = __Pyx_Arg_FASTCALL(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_mat = ((PyArrayObject *)values[0]); + __pyx_v_ecs = ((PyObject*)values[1]); + __pyx_v_seq1 = ((PyObject*)values[2]); + __pyx_v_seq2 = ((PyObject*)values[3]); + if (values[4]) { + __pyx_v_gap = __pyx_PyFloat_AsFloat(values[4]); if (unlikely((__pyx_v_gap == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 340, __pyx_L3_error) + } else { + __pyx_v_gap = ((float)((double)0.9)); + } + __pyx_v_localize = ((PyBoolObject *)values[5]); + __pyx_v_nws = ((PyBoolObject *)values[6]); + __pyx_v_strfmt = ((PyBoolObject *)values[7]); + __pyx_v_oscore = ((PyBoolObject *)values[8]); + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("NW", 0, 4, 9, __pyx_nargs); __PYX_ERR(0, 339, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("nw_ec_alignx.NW", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_5numpy_ndarray, 1, "mat", 0))) __PYX_ERR(0, 339, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ecs), (&PyDict_Type), 1, "ecs", 1))) __PYX_ERR(0, 339, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_seq1), (&PyList_Type), 1, "seq1", 1))) __PYX_ERR(0, 339, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_seq2), (&PyList_Type), 1, "seq2", 1))) __PYX_ERR(0, 339, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_localize), __pyx_ptype_7cpython_4bool_bool, 1, "localize", 0))) __PYX_ERR(0, 340, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_nws), __pyx_ptype_7cpython_4bool_bool, 1, "nws", 0))) __PYX_ERR(0, 340, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_strfmt), __pyx_ptype_7cpython_4bool_bool, 1, "strfmt", 0))) __PYX_ERR(0, 341, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_oscore), __pyx_ptype_7cpython_4bool_bool, 1, "oscore", 0))) __PYX_ERR(0, 341, __pyx_L1_error) + __pyx_r = __pyx_pf_12nw_ec_alignx_6NW(__pyx_self, __pyx_v_mat, __pyx_v_ecs, __pyx_v_seq1, __pyx_v_seq2, __pyx_v_gap, __pyx_v_localize, __pyx_v_nws, __pyx_v_strfmt, __pyx_v_oscore); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_12nw_ec_alignx_6NW(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_mat, PyObject *__pyx_v_ecs, PyObject *__pyx_v_seq1, PyObject *__pyx_v_seq2, float __pyx_v_gap, PyBoolObject *__pyx_v_localize, PyBoolObject *__pyx_v_nws, PyBoolObject *__pyx_v_strfmt, PyBoolObject *__pyx_v_oscore) { + float __pyx_v_score; + float __pyx_v_mini; + float __pyx_v_scoring_gap; + PyObject *__pyx_v_aseq1 = 0; + PyObject *__pyx_v_aseq2 = 0; + int __pyx_v_length; + int __pyx_v_i; + int __pyx_v_ii; + int __pyx_v_fi; + char __pyx_v_binit; + char __pyx_v_bblock; + PyObject *__pyx_v_arr = NULL; + __Pyx_LocalBuf_ND __pyx_pybuffernd_mat; + __Pyx_Buffer __pyx_pybuffer_mat; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *(*__pyx_t_5)(PyObject *); + float __pyx_t_6; + unsigned int __pyx_t_7; + int __pyx_t_8; + Py_ssize_t __pyx_t_9; + int __pyx_t_10; + int __pyx_t_11; + int __pyx_t_12; + int __pyx_t_13; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("NW", 0); + __Pyx_INCREF(__pyx_v_seq1); + __Pyx_INCREF(__pyx_v_seq2); + __pyx_pybuffer_mat.pybuffer.buf = NULL; + __pyx_pybuffer_mat.refcount = 0; + __pyx_pybuffernd_mat.data = NULL; + __pyx_pybuffernd_mat.rcbuffer = &__pyx_pybuffer_mat; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mat.rcbuffer->pybuffer, (PyObject*)__pyx_v_mat, &__Pyx_TypeInfo_nn___pyx_t_12nw_ec_alignx_DTYPEF_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 339, __pyx_L1_error) + } + __pyx_pybuffernd_mat.diminfo[0].strides = __pyx_pybuffernd_mat.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_mat.diminfo[0].shape = __pyx_pybuffernd_mat.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_mat.diminfo[1].strides = __pyx_pybuffernd_mat.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_mat.diminfo[1].shape = __pyx_pybuffernd_mat.rcbuffer->pybuffer.shape[1]; + + /* "nw_ec_alignx.pyx":368 + * char bblock # block mar boolean + * # create NW matrices + * arr, mini = _FastNW(mat, ecs, seq1, seq2, gap=gap) # <<<<<<<<<<<<<< + * seq1, seq2 = _backtrace(arr, seq1, seq2) # backtrace alingment + * # localized alignmet + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_FastNW); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 368, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 368, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF((PyObject *)__pyx_v_mat); + __Pyx_GIVEREF((PyObject *)__pyx_v_mat); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_mat))) __PYX_ERR(0, 368, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_ecs); + __Pyx_GIVEREF(__pyx_v_ecs); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_ecs)) __PYX_ERR(0, 368, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_seq1); + __Pyx_GIVEREF(__pyx_v_seq1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_seq1)) __PYX_ERR(0, 368, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_seq2); + __Pyx_GIVEREF(__pyx_v_seq2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_v_seq2)) __PYX_ERR(0, 368, __pyx_L1_error); + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 368, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyFloat_FromDouble(__pyx_v_gap); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 368, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_gap, __pyx_t_4) < 0) __PYX_ERR(0, 368, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 368, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) { + PyObject* sequence = __pyx_t_4; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 368, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); + } else { + __pyx_t_3 = PyList_GET_ITEM(sequence, 0); + __pyx_t_2 = PyList_GET_ITEM(sequence, 1); + } + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + #else + __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 368, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 368, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + #endif + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } else { + Py_ssize_t index = -1; + __pyx_t_1 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 368, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_5 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); + index = 0; __pyx_t_3 = __pyx_t_5(__pyx_t_1); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed; + __Pyx_GOTREF(__pyx_t_3); + index = 1; __pyx_t_2 = __pyx_t_5(__pyx_t_1); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed; + __Pyx_GOTREF(__pyx_t_2); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_1), 2) < 0) __PYX_ERR(0, 368, __pyx_L1_error) + __pyx_t_5 = NULL; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + goto __pyx_L4_unpacking_done; + __pyx_L3_unpacking_failed:; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_5 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 368, __pyx_L1_error) + __pyx_L4_unpacking_done:; + } + __pyx_t_6 = __pyx_PyFloat_AsFloat(__pyx_t_2); if (unlikely((__pyx_t_6 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 368, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_arr = __pyx_t_3; + __pyx_t_3 = 0; + __pyx_v_mini = __pyx_t_6; + + /* "nw_ec_alignx.pyx":369 + * # create NW matrices + * arr, mini = _FastNW(mat, ecs, seq1, seq2, gap=gap) + * seq1, seq2 = _backtrace(arr, seq1, seq2) # backtrace alingment # <<<<<<<<<<<<<< + * # localized alignmet + * if localize: + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_backtrace); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 369, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_3, __pyx_v_arr, __pyx_v_seq1, __pyx_v_seq2}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 3+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 369, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) { + PyObject* sequence = __pyx_t_4; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 369, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); + } else { + __pyx_t_2 = PyList_GET_ITEM(sequence, 0); + __pyx_t_3 = PyList_GET_ITEM(sequence, 1); + } + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + #else + __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 369, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 369, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + #endif + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } else { + Py_ssize_t index = -1; + __pyx_t_1 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 369, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_5 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); + index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_1); if (unlikely(!__pyx_t_2)) goto __pyx_L5_unpacking_failed; + __Pyx_GOTREF(__pyx_t_2); + index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_1); if (unlikely(!__pyx_t_3)) goto __pyx_L5_unpacking_failed; + __Pyx_GOTREF(__pyx_t_3); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_1), 2) < 0) __PYX_ERR(0, 369, __pyx_L1_error) + __pyx_t_5 = NULL; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + goto __pyx_L6_unpacking_done; + __pyx_L5_unpacking_failed:; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_5 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 369, __pyx_L1_error) + __pyx_L6_unpacking_done:; + } + if (!(likely(PyList_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_2))) __PYX_ERR(0, 369, __pyx_L1_error) + if (!(likely(PyList_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_3))) __PYX_ERR(0, 369, __pyx_L1_error) + __Pyx_DECREF_SET(__pyx_v_seq1, ((PyObject*)__pyx_t_2)); + __pyx_t_2 = 0; + __Pyx_DECREF_SET(__pyx_v_seq2, ((PyObject*)__pyx_t_3)); + __pyx_t_3 = 0; + + /* "nw_ec_alignx.pyx":371 + * seq1, seq2 = _backtrace(arr, seq1, seq2) # backtrace alingment + * # localized alignmet + * if localize: # <<<<<<<<<<<<<< + * binit = 1 + * bblock = 0 + */ + __pyx_t_8 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_localize)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 371, __pyx_L1_error) + if (__pyx_t_8) { + + /* "nw_ec_alignx.pyx":372 + * # localized alignmet + * if localize: + * binit = 1 # <<<<<<<<<<<<<< + * bblock = 0 + * length = len(seq1) + */ + __pyx_v_binit = 1; + + /* "nw_ec_alignx.pyx":373 + * if localize: + * binit = 1 + * bblock = 0 # <<<<<<<<<<<<<< + * length = len(seq1) + * ii = 0 + */ + __pyx_v_bblock = 0; + + /* "nw_ec_alignx.pyx":374 + * binit = 1 + * bblock = 0 + * length = len(seq1) # <<<<<<<<<<<<<< + * ii = 0 + * fi = 0 + */ + if (unlikely(__pyx_v_seq1 == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(0, 374, __pyx_L1_error) + } + __pyx_t_9 = __Pyx_PyList_GET_SIZE(__pyx_v_seq1); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(0, 374, __pyx_L1_error) + __pyx_v_length = __pyx_t_9; + + /* "nw_ec_alignx.pyx":375 + * bblock = 0 + * length = len(seq1) + * ii = 0 # <<<<<<<<<<<<<< + * fi = 0 + * for i in range(length): + */ + __pyx_v_ii = 0; + + /* "nw_ec_alignx.pyx":376 + * length = len(seq1) + * ii = 0 + * fi = 0 # <<<<<<<<<<<<<< + * for i in range(length): + * if seq1[i] != '-.-.-' and seq2[i] != '-.-.-' and binit: + */ + __pyx_v_fi = 0; + + /* "nw_ec_alignx.pyx":377 + * ii = 0 + * fi = 0 + * for i in range(length): # <<<<<<<<<<<<<< + * if seq1[i] != '-.-.-' and seq2[i] != '-.-.-' and binit: + * ii = i + */ + __pyx_t_10 = __pyx_v_length; + __pyx_t_11 = __pyx_t_10; + for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) { + __pyx_v_i = __pyx_t_12; + + /* "nw_ec_alignx.pyx":378 + * fi = 0 + * for i in range(length): + * if seq1[i] != '-.-.-' and seq2[i] != '-.-.-' and binit: # <<<<<<<<<<<<<< + * ii = i + * binit = 0 + */ + if (unlikely(__pyx_v_seq1 == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 378, __pyx_L1_error) + } + __pyx_t_13 = (__Pyx_PyUnicode_Equals(PyList_GET_ITEM(__pyx_v_seq1, __pyx_v_i), __pyx_kp_u__3, Py_NE)); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 378, __pyx_L1_error) + if (__pyx_t_13) { + } else { + __pyx_t_8 = __pyx_t_13; + goto __pyx_L11_bool_binop_done; + } + if (unlikely(__pyx_v_seq2 == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 378, __pyx_L1_error) + } + __pyx_t_13 = (__Pyx_PyUnicode_Equals(PyList_GET_ITEM(__pyx_v_seq2, __pyx_v_i), __pyx_kp_u__3, Py_NE)); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 378, __pyx_L1_error) + if (__pyx_t_13) { + } else { + __pyx_t_8 = __pyx_t_13; + goto __pyx_L11_bool_binop_done; + } + __pyx_t_13 = (__pyx_v_binit != 0); + __pyx_t_8 = __pyx_t_13; + __pyx_L11_bool_binop_done:; + if (__pyx_t_8) { + + /* "nw_ec_alignx.pyx":379 + * for i in range(length): + * if seq1[i] != '-.-.-' and seq2[i] != '-.-.-' and binit: + * ii = i # <<<<<<<<<<<<<< + * binit = 0 + * fi = ii + 1 + */ + __pyx_v_ii = __pyx_v_i; + + /* "nw_ec_alignx.pyx":380 + * if seq1[i] != '-.-.-' and seq2[i] != '-.-.-' and binit: + * ii = i + * binit = 0 # <<<<<<<<<<<<<< + * fi = ii + 1 + * elif (seq1[i] == '-.-.-' or seq2[i] == '-.-.-') and bblock: + */ + __pyx_v_binit = 0; + + /* "nw_ec_alignx.pyx":381 + * ii = i + * binit = 0 + * fi = ii + 1 # <<<<<<<<<<<<<< + * elif (seq1[i] == '-.-.-' or seq2[i] == '-.-.-') and bblock: + * fi = i + */ + __pyx_v_fi = (__pyx_v_ii + 1); + + /* "nw_ec_alignx.pyx":378 + * fi = 0 + * for i in range(length): + * if seq1[i] != '-.-.-' and seq2[i] != '-.-.-' and binit: # <<<<<<<<<<<<<< + * ii = i + * binit = 0 + */ + goto __pyx_L10; + } + + /* "nw_ec_alignx.pyx":382 + * binit = 0 + * fi = ii + 1 + * elif (seq1[i] == '-.-.-' or seq2[i] == '-.-.-') and bblock: # <<<<<<<<<<<<<< + * fi = i + * bblock = 0 + */ + if (unlikely(__pyx_v_seq1 == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 382, __pyx_L1_error) + } + __pyx_t_13 = (__Pyx_PyUnicode_Equals(PyList_GET_ITEM(__pyx_v_seq1, __pyx_v_i), __pyx_kp_u__3, Py_EQ)); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 382, __pyx_L1_error) + if (!__pyx_t_13) { + } else { + goto __pyx_L15_next_and; + } + if (unlikely(__pyx_v_seq2 == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 382, __pyx_L1_error) + } + __pyx_t_13 = (__Pyx_PyUnicode_Equals(PyList_GET_ITEM(__pyx_v_seq2, __pyx_v_i), __pyx_kp_u__3, Py_EQ)); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 382, __pyx_L1_error) + if (__pyx_t_13) { + } else { + __pyx_t_8 = __pyx_t_13; + goto __pyx_L14_bool_binop_done; + } + __pyx_L15_next_and:; + __pyx_t_13 = (__pyx_v_bblock != 0); + __pyx_t_8 = __pyx_t_13; + __pyx_L14_bool_binop_done:; + if (__pyx_t_8) { + + /* "nw_ec_alignx.pyx":383 + * fi = ii + 1 + * elif (seq1[i] == '-.-.-' or seq2[i] == '-.-.-') and bblock: + * fi = i # <<<<<<<<<<<<<< + * bblock = 0 + * elif seq1[i] != '-.-.-' and seq2[i] != '-.-.-': + */ + __pyx_v_fi = __pyx_v_i; + + /* "nw_ec_alignx.pyx":384 + * elif (seq1[i] == '-.-.-' or seq2[i] == '-.-.-') and bblock: + * fi = i + * bblock = 0 # <<<<<<<<<<<<<< + * elif seq1[i] != '-.-.-' and seq2[i] != '-.-.-': + * bblock = 1 + */ + __pyx_v_bblock = 0; + + /* "nw_ec_alignx.pyx":382 + * binit = 0 + * fi = ii + 1 + * elif (seq1[i] == '-.-.-' or seq2[i] == '-.-.-') and bblock: # <<<<<<<<<<<<<< + * fi = i + * bblock = 0 + */ + goto __pyx_L10; + } + + /* "nw_ec_alignx.pyx":385 + * fi = i + * bblock = 0 + * elif seq1[i] != '-.-.-' and seq2[i] != '-.-.-': # <<<<<<<<<<<<<< + * bblock = 1 + * if bblock: + */ + if (unlikely(__pyx_v_seq1 == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 385, __pyx_L1_error) + } + __pyx_t_13 = (__Pyx_PyUnicode_Equals(PyList_GET_ITEM(__pyx_v_seq1, __pyx_v_i), __pyx_kp_u__3, Py_NE)); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 385, __pyx_L1_error) + if (__pyx_t_13) { + } else { + __pyx_t_8 = __pyx_t_13; + goto __pyx_L17_bool_binop_done; + } + if (unlikely(__pyx_v_seq2 == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 385, __pyx_L1_error) + } + __pyx_t_13 = (__Pyx_PyUnicode_Equals(PyList_GET_ITEM(__pyx_v_seq2, __pyx_v_i), __pyx_kp_u__3, Py_NE)); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 385, __pyx_L1_error) + __pyx_t_8 = __pyx_t_13; + __pyx_L17_bool_binop_done:; + if (__pyx_t_8) { + + /* "nw_ec_alignx.pyx":386 + * bblock = 0 + * elif seq1[i] != '-.-.-' and seq2[i] != '-.-.-': + * bblock = 1 # <<<<<<<<<<<<<< + * if bblock: + * fi = length + */ + __pyx_v_bblock = 1; + + /* "nw_ec_alignx.pyx":385 + * fi = i + * bblock = 0 + * elif seq1[i] != '-.-.-' and seq2[i] != '-.-.-': # <<<<<<<<<<<<<< + * bblock = 1 + * if bblock: + */ + } + __pyx_L10:; + } + + /* "nw_ec_alignx.pyx":387 + * elif seq1[i] != '-.-.-' and seq2[i] != '-.-.-': + * bblock = 1 + * if bblock: # <<<<<<<<<<<<<< + * fi = length + * seq1 = seq1[ii: fi] + */ + __pyx_t_8 = (__pyx_v_bblock != 0); + if (__pyx_t_8) { + + /* "nw_ec_alignx.pyx":388 + * bblock = 1 + * if bblock: + * fi = length # <<<<<<<<<<<<<< + * seq1 = seq1[ii: fi] + * seq2 = seq2[ii: fi] + */ + __pyx_v_fi = __pyx_v_length; + + /* "nw_ec_alignx.pyx":387 + * elif seq1[i] != '-.-.-' and seq2[i] != '-.-.-': + * bblock = 1 + * if bblock: # <<<<<<<<<<<<<< + * fi = length + * seq1 = seq1[ii: fi] + */ + } + + /* "nw_ec_alignx.pyx":389 + * if bblock: + * fi = length + * seq1 = seq1[ii: fi] # <<<<<<<<<<<<<< + * seq2 = seq2[ii: fi] + * # NW score or entropy based score + */ + if (unlikely(__pyx_v_seq1 == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 389, __pyx_L1_error) + } + __pyx_t_4 = __Pyx_PyList_GetSlice(__pyx_v_seq1, __pyx_v_ii, __pyx_v_fi); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 389, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF_SET(__pyx_v_seq1, ((PyObject*)__pyx_t_4)); + __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":390 + * fi = length + * seq1 = seq1[ii: fi] + * seq2 = seq2[ii: fi] # <<<<<<<<<<<<<< + * # NW score or entropy based score + * if nws: + */ + if (unlikely(__pyx_v_seq2 == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 390, __pyx_L1_error) + } + __pyx_t_4 = __Pyx_PyList_GetSlice(__pyx_v_seq2, __pyx_v_ii, __pyx_v_fi); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 390, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF_SET(__pyx_v_seq2, ((PyObject*)__pyx_t_4)); + __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":371 + * seq1, seq2 = _backtrace(arr, seq1, seq2) # backtrace alingment + * # localized alignmet + * if localize: # <<<<<<<<<<<<<< + * binit = 1 + * bblock = 0 + */ + } + + /* "nw_ec_alignx.pyx":392 + * seq2 = seq2[ii: fi] + * # NW score or entropy based score + * if nws: # <<<<<<<<<<<<<< + * score = mini + * else: + */ + __pyx_t_8 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_nws)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 392, __pyx_L1_error) + if (__pyx_t_8) { + + /* "nw_ec_alignx.pyx":393 + * # NW score or entropy based score + * if nws: + * score = mini # <<<<<<<<<<<<<< + * else: + * scoring_gap = 1 + */ + __pyx_v_score = __pyx_v_mini; + + /* "nw_ec_alignx.pyx":392 + * seq2 = seq2[ii: fi] + * # NW score or entropy based score + * if nws: # <<<<<<<<<<<<<< + * score = mini + * else: + */ + goto __pyx_L20; + } + + /* "nw_ec_alignx.pyx":395 + * score = mini + * else: + * scoring_gap = 1 # <<<<<<<<<<<<<< + * score = scoring(mat, ecs, seq1, seq2, gap=scoring_gap, fhomo=0.95, + * fpengap=0.05) + */ + /*else*/ { + __pyx_v_scoring_gap = 1.0; + + /* "nw_ec_alignx.pyx":396 + * else: + * scoring_gap = 1 + * score = scoring(mat, ecs, seq1, seq2, gap=scoring_gap, fhomo=0.95, # <<<<<<<<<<<<<< + * fpengap=0.05) + * if oscore: + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_scoring); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 396, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 396, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF((PyObject *)__pyx_v_mat); + __Pyx_GIVEREF((PyObject *)__pyx_v_mat); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_mat))) __PYX_ERR(0, 396, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_ecs); + __Pyx_GIVEREF(__pyx_v_ecs); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_ecs)) __PYX_ERR(0, 396, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_seq1); + __Pyx_GIVEREF(__pyx_v_seq1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_seq1)) __PYX_ERR(0, 396, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_seq2); + __Pyx_GIVEREF(__pyx_v_seq2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_v_seq2)) __PYX_ERR(0, 396, __pyx_L1_error); + __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 396, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = PyFloat_FromDouble(__pyx_v_scoring_gap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 396, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_gap, __pyx_t_1) < 0) __PYX_ERR(0, 396, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_fhomo, __pyx_float_0_95) < 0) __PYX_ERR(0, 396, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_fpengap, __pyx_float_0_05) < 0) __PYX_ERR(0, 396, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 396, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_6 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_6 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 396, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_score = __pyx_t_6; + } + __pyx_L20:; + + /* "nw_ec_alignx.pyx":398 + * score = scoring(mat, ecs, seq1, seq2, gap=scoring_gap, fhomo=0.95, + * fpengap=0.05) + * if oscore: # <<<<<<<<<<<<<< + * return score + * if strfmt: + */ + __pyx_t_8 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_oscore)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 398, __pyx_L1_error) + if (__pyx_t_8) { + + /* "nw_ec_alignx.pyx":399 + * fpengap=0.05) + * if oscore: + * return score # <<<<<<<<<<<<<< + * if strfmt: + * aseq1 = ':'.join(seq1) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyFloat_FromDouble(__pyx_v_score); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 399, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "nw_ec_alignx.pyx":398 + * score = scoring(mat, ecs, seq1, seq2, gap=scoring_gap, fhomo=0.95, + * fpengap=0.05) + * if oscore: # <<<<<<<<<<<<<< + * return score + * if strfmt: + */ + } + + /* "nw_ec_alignx.pyx":400 + * if oscore: + * return score + * if strfmt: # <<<<<<<<<<<<<< + * aseq1 = ':'.join(seq1) + * aseq2 = ':'.join(seq2) + */ + __pyx_t_8 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_strfmt)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 400, __pyx_L1_error) + if (__pyx_t_8) { + + /* "nw_ec_alignx.pyx":401 + * return score + * if strfmt: + * aseq1 = ':'.join(seq1) # <<<<<<<<<<<<<< + * aseq2 = ':'.join(seq2) + * return aseq1, aseq2, score + */ + __pyx_t_1 = PyUnicode_Join(__pyx_kp_u__11, __pyx_v_seq1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 401, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_aseq1 = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "nw_ec_alignx.pyx":402 + * if strfmt: + * aseq1 = ':'.join(seq1) + * aseq2 = ':'.join(seq2) # <<<<<<<<<<<<<< + * return aseq1, aseq2, score + * else: + */ + __pyx_t_1 = PyUnicode_Join(__pyx_kp_u__11, __pyx_v_seq2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 402, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_aseq2 = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "nw_ec_alignx.pyx":403 + * aseq1 = ':'.join(seq1) + * aseq2 = ':'.join(seq2) + * return aseq1, aseq2, score # <<<<<<<<<<<<<< + * else: + * return seq1, seq2, score + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyFloat_FromDouble(__pyx_v_score); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 403, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 403, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_v_aseq1); + __Pyx_GIVEREF(__pyx_v_aseq1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_aseq1)) __PYX_ERR(0, 403, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_aseq2); + __Pyx_GIVEREF(__pyx_v_aseq2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_aseq2)) __PYX_ERR(0, 403, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_1)) __PYX_ERR(0, 403, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "nw_ec_alignx.pyx":400 + * if oscore: + * return score + * if strfmt: # <<<<<<<<<<<<<< + * aseq1 = ':'.join(seq1) + * aseq2 = ':'.join(seq2) + */ + } + + /* "nw_ec_alignx.pyx":405 + * return aseq1, aseq2, score + * else: + * return seq1, seq2, score # <<<<<<<<<<<<<< + * + * + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = PyFloat_FromDouble(__pyx_v_score); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 405, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 405, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v_seq1); + __Pyx_GIVEREF(__pyx_v_seq1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_seq1)) __PYX_ERR(0, 405, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_seq2); + __Pyx_GIVEREF(__pyx_v_seq2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_seq2)) __PYX_ERR(0, 405, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_2)) __PYX_ERR(0, 405, __pyx_L1_error); + __pyx_t_2 = 0; + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + } + + /* "nw_ec_alignx.pyx":339 + * + * + * def NW(np.ndarray[DTYPEF_t, ndim=2] mat, dict ecs, list seq1, list seq2, # <<<<<<<<<<<<<< + * float gap=0.9, bool localize=False, bool nws=False, + * bool strfmt=True, bool oscore=False): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mat.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("nw_ec_alignx.NW", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mat.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XDECREF(__pyx_v_aseq1); + __Pyx_XDECREF(__pyx_v_aseq2); + __Pyx_XDECREF(__pyx_v_arr); + __Pyx_XDECREF(__pyx_v_seq1); + __Pyx_XDECREF(__pyx_v_seq2); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "nw_ec_alignx.pyx":408 + * + * + * def ind_vs_alldb(int ind, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, # <<<<<<<<<<<<<< + * dict decs, float thres=1.0, bool wholedb=False, + * bool localize=False, bool oscore=True): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_12nw_ec_alignx_9ind_vs_alldb(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_12nw_ec_alignx_8ind_vs_alldb, "Align the ESSs in the specified index (ind) versus\nall the rest of sequences with index > ind.\n\n Keyword Arguments:\n ind -- Int, index of the ESS to compare against the database\n seqs -- List, ESSs database. Each ESS is a list of EC numbers\n mat -- ndarray, EC number similarity matrix\n decs -- Dict, EC number index dictionary\n thres -- Float, threshold score to filter data (default 1.0). The data \n captured will be score <= thres.\n wholedb -- Bool, If True, the ind ESS is compared against all the sequences\n stored in seqs list.\n localize -- Bool. If True, the scoring of the alignment will be \n made only in the part of the alignment covered by \n the shortest ESS (default False)\n oscore -- Bool. If True, returns only the score of the alignment \n otherwise, returns a tuple with the algined ESSs and\n the corresonding score (defautl True)\n "); +static PyMethodDef __pyx_mdef_12nw_ec_alignx_9ind_vs_alldb = {"ind_vs_alldb", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_12nw_ec_alignx_9ind_vs_alldb, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_12nw_ec_alignx_8ind_vs_alldb}; +static PyObject *__pyx_pw_12nw_ec_alignx_9ind_vs_alldb(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + int __pyx_v_ind; + PyObject *__pyx_v_seqs = 0; + PyArrayObject *__pyx_v_mat = 0; + PyObject *__pyx_v_decs = 0; + float __pyx_v_thres; + PyBoolObject *__pyx_v_wholedb = 0; + PyBoolObject *__pyx_v_localize = 0; + PyBoolObject *__pyx_v_oscore = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[8] = {0,0,0,0,0,0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("ind_vs_alldb (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ind,&__pyx_n_s_seqs,&__pyx_n_s_mat,&__pyx_n_s_decs,&__pyx_n_s_thres,&__pyx_n_s_wholedb,&__pyx_n_s_localize,&__pyx_n_s_oscore,0}; + values[5] = __Pyx_Arg_NewRef_FASTCALL((PyObject *)__pyx_k__12); + values[6] = __Pyx_Arg_NewRef_FASTCALL((PyObject *)__pyx_k__13); + values[7] = __Pyx_Arg_NewRef_FASTCALL((PyObject *)__pyx_k__14); + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 8: values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_ind)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 408, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_seqs)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 408, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("ind_vs_alldb", 0, 4, 8, 1); __PYX_ERR(0, 408, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_mat)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 408, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("ind_vs_alldb", 0, 4, 8, 2); __PYX_ERR(0, 408, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_decs)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 408, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("ind_vs_alldb", 0, 4, 8, 3); __PYX_ERR(0, 408, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_thres); + if (value) { values[4] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 408, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_wholedb); + if (value) { values[5] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 408, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_localize); + if (value) { values[6] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 408, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_oscore); + if (value) { values[7] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 408, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "ind_vs_alldb") < 0)) __PYX_ERR(0, 408, __pyx_L3_error) + } + } else { + switch (__pyx_nargs) { + case 8: values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_ind = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_ind == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 408, __pyx_L3_error) + __pyx_v_seqs = ((PyObject*)values[1]); + __pyx_v_mat = ((PyArrayObject *)values[2]); + __pyx_v_decs = ((PyObject*)values[3]); + if (values[4]) { + __pyx_v_thres = __pyx_PyFloat_AsFloat(values[4]); if (unlikely((__pyx_v_thres == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 409, __pyx_L3_error) + } else { + __pyx_v_thres = ((float)((double)1.0)); + } + __pyx_v_wholedb = ((PyBoolObject *)values[5]); + __pyx_v_localize = ((PyBoolObject *)values[6]); + __pyx_v_oscore = ((PyBoolObject *)values[7]); + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("ind_vs_alldb", 0, 4, 8, __pyx_nargs); __PYX_ERR(0, 408, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("nw_ec_alignx.ind_vs_alldb", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_seqs), (&PyList_Type), 1, "seqs", 1))) __PYX_ERR(0, 408, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_5numpy_ndarray, 1, "mat", 0))) __PYX_ERR(0, 408, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_decs), (&PyDict_Type), 1, "decs", 1))) __PYX_ERR(0, 409, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_wholedb), __pyx_ptype_7cpython_4bool_bool, 1, "wholedb", 0))) __PYX_ERR(0, 409, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_localize), __pyx_ptype_7cpython_4bool_bool, 1, "localize", 0))) __PYX_ERR(0, 410, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_oscore), __pyx_ptype_7cpython_4bool_bool, 1, "oscore", 0))) __PYX_ERR(0, 410, __pyx_L1_error) + __pyx_r = __pyx_pf_12nw_ec_alignx_8ind_vs_alldb(__pyx_self, __pyx_v_ind, __pyx_v_seqs, __pyx_v_mat, __pyx_v_decs, __pyx_v_thres, __pyx_v_wholedb, __pyx_v_localize, __pyx_v_oscore); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_12nw_ec_alignx_8ind_vs_alldb(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_ind, PyObject *__pyx_v_seqs, PyArrayObject *__pyx_v_mat, PyObject *__pyx_v_decs, float __pyx_v_thres, PyBoolObject *__pyx_v_wholedb, PyBoolObject *__pyx_v_localize, PyBoolObject *__pyx_v_oscore) { + PyObject *__pyx_v_resdic = 0; + PyObject *__pyx_v_seq1 = 0; + PyObject *__pyx_v_seq2 = 0; + int __pyx_v_j; + PyObject *__pyx_v_indices = NULL; + PyObject *__pyx_v_sco = NULL; + __Pyx_LocalBuf_ND __pyx_pybuffernd_mat; + __Pyx_Buffer __pyx_pybuffer_mat; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + Py_ssize_t __pyx_t_5; + PyObject *(*__pyx_t_6)(PyObject *); + int __pyx_t_7; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("ind_vs_alldb", 1); + __pyx_pybuffer_mat.pybuffer.buf = NULL; + __pyx_pybuffer_mat.refcount = 0; + __pyx_pybuffernd_mat.data = NULL; + __pyx_pybuffernd_mat.rcbuffer = &__pyx_pybuffer_mat; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mat.rcbuffer->pybuffer, (PyObject*)__pyx_v_mat, &__Pyx_TypeInfo_nn___pyx_t_12nw_ec_alignx_DTYPEF_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 408, __pyx_L1_error) + } + __pyx_pybuffernd_mat.diminfo[0].strides = __pyx_pybuffernd_mat.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_mat.diminfo[0].shape = __pyx_pybuffernd_mat.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_mat.diminfo[1].strides = __pyx_pybuffernd_mat.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_mat.diminfo[1].shape = __pyx_pybuffernd_mat.rcbuffer->pybuffer.shape[1]; + + /* "nw_ec_alignx.pyx":431 + * """ + * cdef: + * dict resdic = {ind: {}} # <<<<<<<<<<<<<< + * list seq1, seq2 + * int j + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 431, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_ind); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 431, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 431, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_t_3) < 0) __PYX_ERR(0, 431, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_resdic = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "nw_ec_alignx.pyx":435 + * int j + * # float sco + * seq1 = seqs[ind] # <<<<<<<<<<<<<< + * if wholedb: + * indices = range(len(seqs)) + */ + if (unlikely(__pyx_v_seqs == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 435, __pyx_L1_error) + } + if (!(likely(PyList_CheckExact(PyList_GET_ITEM(__pyx_v_seqs, __pyx_v_ind)))||((PyList_GET_ITEM(__pyx_v_seqs, __pyx_v_ind)) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", PyList_GET_ITEM(__pyx_v_seqs, __pyx_v_ind)))) __PYX_ERR(0, 435, __pyx_L1_error) + __pyx_t_1 = PyList_GET_ITEM(__pyx_v_seqs, __pyx_v_ind); + __Pyx_INCREF(__pyx_t_1); + __pyx_v_seq1 = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "nw_ec_alignx.pyx":436 + * # float sco + * seq1 = seqs[ind] + * if wholedb: # <<<<<<<<<<<<<< + * indices = range(len(seqs)) + * else: + */ + __pyx_t_4 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_wholedb)); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 436, __pyx_L1_error) + if (__pyx_t_4) { + + /* "nw_ec_alignx.pyx":437 + * seq1 = seqs[ind] + * if wholedb: + * indices = range(len(seqs)) # <<<<<<<<<<<<<< + * else: + * indices = range(ind + 1, len(seqs)) + */ + if (unlikely(__pyx_v_seqs == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(0, 437, __pyx_L1_error) + } + __pyx_t_5 = __Pyx_PyList_GET_SIZE(__pyx_v_seqs); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 437, __pyx_L1_error) + __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 437, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 437, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_indices = __pyx_t_3; + __pyx_t_3 = 0; + + /* "nw_ec_alignx.pyx":436 + * # float sco + * seq1 = seqs[ind] + * if wholedb: # <<<<<<<<<<<<<< + * indices = range(len(seqs)) + * else: + */ + goto __pyx_L3; + } + + /* "nw_ec_alignx.pyx":439 + * indices = range(len(seqs)) + * else: + * indices = range(ind + 1, len(seqs)) # <<<<<<<<<<<<<< + * for j in indices: + * seq2 = seqs[j] + */ + /*else*/ { + __pyx_t_3 = __Pyx_PyInt_From_long((__pyx_v_ind + 1)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 439, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (unlikely(__pyx_v_seqs == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(0, 439, __pyx_L1_error) + } + __pyx_t_5 = __Pyx_PyList_GET_SIZE(__pyx_v_seqs); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 439, __pyx_L1_error) + __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 439, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 439, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3)) __PYX_ERR(0, 439, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1)) __PYX_ERR(0, 439, __pyx_L1_error); + __pyx_t_3 = 0; + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 439, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_indices = __pyx_t_1; + __pyx_t_1 = 0; + } + __pyx_L3:; + + /* "nw_ec_alignx.pyx":440 + * else: + * indices = range(ind + 1, len(seqs)) + * for j in indices: # <<<<<<<<<<<<<< + * seq2 = seqs[j] + * sco = NW(mat, decs, seq1, seq2, oscore=oscore, + */ + if (likely(PyList_CheckExact(__pyx_v_indices)) || PyTuple_CheckExact(__pyx_v_indices)) { + __pyx_t_1 = __pyx_v_indices; __Pyx_INCREF(__pyx_t_1); + __pyx_t_5 = 0; + __pyx_t_6 = NULL; + } else { + __pyx_t_5 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_indices); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 440, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 440, __pyx_L1_error) + } + for (;;) { + if (likely(!__pyx_t_6)) { + if (likely(PyList_CheckExact(__pyx_t_1))) { + { + Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 440, __pyx_L1_error) + #endif + if (__pyx_t_5 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_5); __Pyx_INCREF(__pyx_t_2); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 440, __pyx_L1_error) + #else + __pyx_t_2 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 440, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + #endif + } else { + { + Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 440, __pyx_L1_error) + #endif + if (__pyx_t_5 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_5); __Pyx_INCREF(__pyx_t_2); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 440, __pyx_L1_error) + #else + __pyx_t_2 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 440, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + #endif + } + } else { + __pyx_t_2 = __pyx_t_6(__pyx_t_1); + if (unlikely(!__pyx_t_2)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 440, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_2); + } + __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 440, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_j = __pyx_t_7; + + /* "nw_ec_alignx.pyx":441 + * indices = range(ind + 1, len(seqs)) + * for j in indices: + * seq2 = seqs[j] # <<<<<<<<<<<<<< + * sco = NW(mat, decs, seq1, seq2, oscore=oscore, + * localize=localize) + */ + if (unlikely(__pyx_v_seqs == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 441, __pyx_L1_error) + } + if (!(likely(PyList_CheckExact(PyList_GET_ITEM(__pyx_v_seqs, __pyx_v_j)))||((PyList_GET_ITEM(__pyx_v_seqs, __pyx_v_j)) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", PyList_GET_ITEM(__pyx_v_seqs, __pyx_v_j)))) __PYX_ERR(0, 441, __pyx_L1_error) + __pyx_t_2 = PyList_GET_ITEM(__pyx_v_seqs, __pyx_v_j); + __Pyx_INCREF(__pyx_t_2); + __Pyx_XDECREF_SET(__pyx_v_seq2, ((PyObject*)__pyx_t_2)); + __pyx_t_2 = 0; + + /* "nw_ec_alignx.pyx":442 + * for j in indices: + * seq2 = seqs[j] + * sco = NW(mat, decs, seq1, seq2, oscore=oscore, # <<<<<<<<<<<<<< + * localize=localize) + * if oscore: + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_NW); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 442, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 442, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF((PyObject *)__pyx_v_mat); + __Pyx_GIVEREF((PyObject *)__pyx_v_mat); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_mat))) __PYX_ERR(0, 442, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_decs); + __Pyx_GIVEREF(__pyx_v_decs); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_decs)) __PYX_ERR(0, 442, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_seq1); + __Pyx_GIVEREF(__pyx_v_seq1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_seq1)) __PYX_ERR(0, 442, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_seq2); + __Pyx_GIVEREF(__pyx_v_seq2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_v_seq2)) __PYX_ERR(0, 442, __pyx_L1_error); + __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 442, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_oscore, ((PyObject *)__pyx_v_oscore)) < 0) __PYX_ERR(0, 442, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":443 + * seq2 = seqs[j] + * sco = NW(mat, decs, seq1, seq2, oscore=oscore, + * localize=localize) # <<<<<<<<<<<<<< + * if oscore: + * if sco <= thres: + */ + if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_localize, ((PyObject *)__pyx_v_localize)) < 0) __PYX_ERR(0, 442, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":442 + * for j in indices: + * seq2 = seqs[j] + * sco = NW(mat, decs, seq1, seq2, oscore=oscore, # <<<<<<<<<<<<<< + * localize=localize) + * if oscore: + */ + __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 442, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF_SET(__pyx_v_sco, __pyx_t_9); + __pyx_t_9 = 0; + + /* "nw_ec_alignx.pyx":444 + * sco = NW(mat, decs, seq1, seq2, oscore=oscore, + * localize=localize) + * if oscore: # <<<<<<<<<<<<<< + * if sco <= thres: + * resdic[ind][j] = sco + */ + __pyx_t_4 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_oscore)); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 444, __pyx_L1_error) + if (__pyx_t_4) { + + /* "nw_ec_alignx.pyx":445 + * localize=localize) + * if oscore: + * if sco <= thres: # <<<<<<<<<<<<<< + * resdic[ind][j] = sco + * else: + */ + __pyx_t_9 = PyFloat_FromDouble(__pyx_v_thres); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 445, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_8 = PyObject_RichCompare(__pyx_v_sco, __pyx_t_9, Py_LE); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 445, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 445, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (__pyx_t_4) { + + /* "nw_ec_alignx.pyx":446 + * if oscore: + * if sco <= thres: + * resdic[ind][j] = sco # <<<<<<<<<<<<<< + * else: + * if sco[2] <= thres: + */ + __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_ind); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 446, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_9 = __Pyx_PyDict_GetItem(__pyx_v_resdic, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 446, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely((__Pyx_SetItemInt(__pyx_t_9, __pyx_v_j, __pyx_v_sco, int, 1, __Pyx_PyInt_From_int, 0, 0, 0) < 0))) __PYX_ERR(0, 446, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + + /* "nw_ec_alignx.pyx":445 + * localize=localize) + * if oscore: + * if sco <= thres: # <<<<<<<<<<<<<< + * resdic[ind][j] = sco + * else: + */ + } + + /* "nw_ec_alignx.pyx":444 + * sco = NW(mat, decs, seq1, seq2, oscore=oscore, + * localize=localize) + * if oscore: # <<<<<<<<<<<<<< + * if sco <= thres: + * resdic[ind][j] = sco + */ + goto __pyx_L6; + } + + /* "nw_ec_alignx.pyx":448 + * resdic[ind][j] = sco + * else: + * if sco[2] <= thres: # <<<<<<<<<<<<<< + * resdic[ind][j] = sco + * return resdic + */ + /*else*/ { + __pyx_t_9 = __Pyx_GetItemInt(__pyx_v_sco, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 448, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_8 = PyFloat_FromDouble(__pyx_v_thres); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 448, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_3 = PyObject_RichCompare(__pyx_t_9, __pyx_t_8, Py_LE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 448, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 448, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_4) { + + /* "nw_ec_alignx.pyx":449 + * else: + * if sco[2] <= thres: + * resdic[ind][j] = sco # <<<<<<<<<<<<<< + * return resdic + * + */ + __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_ind); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 449, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_8 = __Pyx_PyDict_GetItem(__pyx_v_resdic, __pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 449, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely((__Pyx_SetItemInt(__pyx_t_8, __pyx_v_j, __pyx_v_sco, int, 1, __Pyx_PyInt_From_int, 0, 0, 0) < 0))) __PYX_ERR(0, 449, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + + /* "nw_ec_alignx.pyx":448 + * resdic[ind][j] = sco + * else: + * if sco[2] <= thres: # <<<<<<<<<<<<<< + * resdic[ind][j] = sco + * return resdic + */ + } + } + __pyx_L6:; + + /* "nw_ec_alignx.pyx":440 + * else: + * indices = range(ind + 1, len(seqs)) + * for j in indices: # <<<<<<<<<<<<<< + * seq2 = seqs[j] + * sco = NW(mat, decs, seq1, seq2, oscore=oscore, + */ + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "nw_ec_alignx.pyx":450 + * if sco[2] <= thres: + * resdic[ind][j] = sco + * return resdic # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_resdic); + __pyx_r = __pyx_v_resdic; + goto __pyx_L0; + + /* "nw_ec_alignx.pyx":408 + * + * + * def ind_vs_alldb(int ind, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, # <<<<<<<<<<<<<< + * dict decs, float thres=1.0, bool wholedb=False, + * bool localize=False, bool oscore=True): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_9); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mat.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("nw_ec_alignx.ind_vs_alldb", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mat.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XDECREF(__pyx_v_resdic); + __Pyx_XDECREF(__pyx_v_seq1); + __Pyx_XDECREF(__pyx_v_seq2); + __Pyx_XDECREF(__pyx_v_indices); + __Pyx_XDECREF(__pyx_v_sco); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "nw_ec_alignx.pyx":453 + * + * + * def seq_vs_db(list seq1, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, dict decs, # <<<<<<<<<<<<<< + * float thres=1.0, bool localize=False, bool oscore=True): + * """Align de specified ESSs vs all the ESS in the database seqs. + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_12nw_ec_alignx_11seq_vs_db(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_12nw_ec_alignx_10seq_vs_db, "Align de specified ESSs vs all the ESS in the database seqs. \n Returns a dictionary with the scores. The keys are the index of\n the sequenc in database (seqs) and the values are ths scores.\n\n Keyword Arguments:\n seq1 -- List, ESS. Each element of the list is an EC number\n seqs -- List, ESSs database. Each ESS is a list of EC numbers\n mat -- ndarray, EC number similarity matrix\n decs -- Dict, EC number index dictionary\n thres -- Float, threshold score to filter de data (default 1.0)\n The data wil be captured with score <= thres.\n localize -- Bool. If True, the scoring of the alignment will be \n made only in the part of the alignment covered by \n the shortest ESS (default False)\n oscore -- Bool. If True, returns only the score of the alignment \n otherwise, returns a tuple with the algined ESSs and\n the corresonding score (defautl True)\n "); +static PyMethodDef __pyx_mdef_12nw_ec_alignx_11seq_vs_db = {"seq_vs_db", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_12nw_ec_alignx_11seq_vs_db, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_12nw_ec_alignx_10seq_vs_db}; +static PyObject *__pyx_pw_12nw_ec_alignx_11seq_vs_db(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_seq1 = 0; + PyObject *__pyx_v_seqs = 0; + PyArrayObject *__pyx_v_mat = 0; + PyObject *__pyx_v_decs = 0; + float __pyx_v_thres; + PyBoolObject *__pyx_v_localize = 0; + PyBoolObject *__pyx_v_oscore = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[7] = {0,0,0,0,0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("seq_vs_db (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_seq1,&__pyx_n_s_seqs,&__pyx_n_s_mat,&__pyx_n_s_decs,&__pyx_n_s_thres,&__pyx_n_s_localize,&__pyx_n_s_oscore,0}; + values[5] = __Pyx_Arg_NewRef_FASTCALL((PyObject *)__pyx_k__15); + values[6] = __Pyx_Arg_NewRef_FASTCALL((PyObject *)__pyx_k__16); + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_seq1)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 453, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_seqs)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 453, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("seq_vs_db", 0, 4, 7, 1); __PYX_ERR(0, 453, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_mat)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 453, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("seq_vs_db", 0, 4, 7, 2); __PYX_ERR(0, 453, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_decs)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 453, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("seq_vs_db", 0, 4, 7, 3); __PYX_ERR(0, 453, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_thres); + if (value) { values[4] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 453, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_localize); + if (value) { values[5] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 453, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_oscore); + if (value) { values[6] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 453, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "seq_vs_db") < 0)) __PYX_ERR(0, 453, __pyx_L3_error) + } + } else { + switch (__pyx_nargs) { + case 7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_seq1 = ((PyObject*)values[0]); + __pyx_v_seqs = ((PyObject*)values[1]); + __pyx_v_mat = ((PyArrayObject *)values[2]); + __pyx_v_decs = ((PyObject*)values[3]); + if (values[4]) { + __pyx_v_thres = __pyx_PyFloat_AsFloat(values[4]); if (unlikely((__pyx_v_thres == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 454, __pyx_L3_error) + } else { + __pyx_v_thres = ((float)((double)1.0)); + } + __pyx_v_localize = ((PyBoolObject *)values[5]); + __pyx_v_oscore = ((PyBoolObject *)values[6]); + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("seq_vs_db", 0, 4, 7, __pyx_nargs); __PYX_ERR(0, 453, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("nw_ec_alignx.seq_vs_db", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_seq1), (&PyList_Type), 1, "seq1", 1))) __PYX_ERR(0, 453, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_seqs), (&PyList_Type), 1, "seqs", 1))) __PYX_ERR(0, 453, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_5numpy_ndarray, 1, "mat", 0))) __PYX_ERR(0, 453, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_decs), (&PyDict_Type), 1, "decs", 1))) __PYX_ERR(0, 453, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_localize), __pyx_ptype_7cpython_4bool_bool, 1, "localize", 0))) __PYX_ERR(0, 454, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_oscore), __pyx_ptype_7cpython_4bool_bool, 1, "oscore", 0))) __PYX_ERR(0, 454, __pyx_L1_error) + __pyx_r = __pyx_pf_12nw_ec_alignx_10seq_vs_db(__pyx_self, __pyx_v_seq1, __pyx_v_seqs, __pyx_v_mat, __pyx_v_decs, __pyx_v_thres, __pyx_v_localize, __pyx_v_oscore); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_12nw_ec_alignx_10seq_vs_db(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_seq1, PyObject *__pyx_v_seqs, PyArrayObject *__pyx_v_mat, PyObject *__pyx_v_decs, float __pyx_v_thres, PyBoolObject *__pyx_v_localize, PyBoolObject *__pyx_v_oscore) { + PyObject *__pyx_v_resdict = 0; + Py_ssize_t __pyx_v_i; + PyObject *__pyx_v_seq2 = NULL; + PyObject *__pyx_v_sco = NULL; + __Pyx_LocalBuf_ND __pyx_pybuffernd_mat; + __Pyx_Buffer __pyx_pybuffer_mat; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + Py_ssize_t __pyx_t_2; + Py_ssize_t __pyx_t_3; + Py_ssize_t __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + int __pyx_t_8; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("seq_vs_db", 1); + __pyx_pybuffer_mat.pybuffer.buf = NULL; + __pyx_pybuffer_mat.refcount = 0; + __pyx_pybuffernd_mat.data = NULL; + __pyx_pybuffernd_mat.rcbuffer = &__pyx_pybuffer_mat; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mat.rcbuffer->pybuffer, (PyObject*)__pyx_v_mat, &__Pyx_TypeInfo_nn___pyx_t_12nw_ec_alignx_DTYPEF_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 453, __pyx_L1_error) + } + __pyx_pybuffernd_mat.diminfo[0].strides = __pyx_pybuffernd_mat.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_mat.diminfo[0].shape = __pyx_pybuffernd_mat.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_mat.diminfo[1].strides = __pyx_pybuffernd_mat.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_mat.diminfo[1].shape = __pyx_pybuffernd_mat.rcbuffer->pybuffer.shape[1]; + + /* "nw_ec_alignx.pyx":474 + * """ + * cdef: + * dict resdict = {} # <<<<<<<<<<<<<< + * for i in range(len(seqs)): + * seq2 = seqs[i] + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 474, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_resdict = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "nw_ec_alignx.pyx":475 + * cdef: + * dict resdict = {} + * for i in range(len(seqs)): # <<<<<<<<<<<<<< + * seq2 = seqs[i] + * sco = NW(mat, decs, seq1, seq2, oscore=oscore, localize=localize) + */ + if (unlikely(__pyx_v_seqs == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(0, 475, __pyx_L1_error) + } + __pyx_t_2 = __Pyx_PyList_GET_SIZE(__pyx_v_seqs); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(0, 475, __pyx_L1_error) + __pyx_t_3 = __pyx_t_2; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_i = __pyx_t_4; + + /* "nw_ec_alignx.pyx":476 + * dict resdict = {} + * for i in range(len(seqs)): + * seq2 = seqs[i] # <<<<<<<<<<<<<< + * sco = NW(mat, decs, seq1, seq2, oscore=oscore, localize=localize) + * if oscore: + */ + if (unlikely(__pyx_v_seqs == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 476, __pyx_L1_error) + } + __pyx_t_1 = PyList_GET_ITEM(__pyx_v_seqs, __pyx_v_i); + __Pyx_INCREF(__pyx_t_1); + __Pyx_XDECREF_SET(__pyx_v_seq2, __pyx_t_1); + __pyx_t_1 = 0; + + /* "nw_ec_alignx.pyx":477 + * for i in range(len(seqs)): + * seq2 = seqs[i] + * sco = NW(mat, decs, seq1, seq2, oscore=oscore, localize=localize) # <<<<<<<<<<<<<< + * if oscore: + * if sco <= thres: + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_NW); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 477, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 477, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_INCREF((PyObject *)__pyx_v_mat); + __Pyx_GIVEREF((PyObject *)__pyx_v_mat); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_mat))) __PYX_ERR(0, 477, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_decs); + __Pyx_GIVEREF(__pyx_v_decs); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_decs)) __PYX_ERR(0, 477, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_seq1); + __Pyx_GIVEREF(__pyx_v_seq1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_seq1)) __PYX_ERR(0, 477, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_seq2); + __Pyx_GIVEREF(__pyx_v_seq2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_v_seq2)) __PYX_ERR(0, 477, __pyx_L1_error); + __pyx_t_6 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 477, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_oscore, ((PyObject *)__pyx_v_oscore)) < 0) __PYX_ERR(0, 477, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_localize, ((PyObject *)__pyx_v_localize)) < 0) __PYX_ERR(0, 477, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 477, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF_SET(__pyx_v_sco, __pyx_t_7); + __pyx_t_7 = 0; + + /* "nw_ec_alignx.pyx":478 + * seq2 = seqs[i] + * sco = NW(mat, decs, seq1, seq2, oscore=oscore, localize=localize) + * if oscore: # <<<<<<<<<<<<<< + * if sco <= thres: + * resdict[i] = sco + */ + __pyx_t_8 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_oscore)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 478, __pyx_L1_error) + if (__pyx_t_8) { + + /* "nw_ec_alignx.pyx":479 + * sco = NW(mat, decs, seq1, seq2, oscore=oscore, localize=localize) + * if oscore: + * if sco <= thres: # <<<<<<<<<<<<<< + * resdict[i] = sco + * else: + */ + __pyx_t_7 = PyFloat_FromDouble(__pyx_v_thres); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 479, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_6 = PyObject_RichCompare(__pyx_v_sco, __pyx_t_7, Py_LE); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 479, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 479, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (__pyx_t_8) { + + /* "nw_ec_alignx.pyx":480 + * if oscore: + * if sco <= thres: + * resdict[i] = sco # <<<<<<<<<<<<<< + * else: + * if sco[2] <= thres: + */ + __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_i); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 480, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + if (unlikely((PyDict_SetItem(__pyx_v_resdict, __pyx_t_6, __pyx_v_sco) < 0))) __PYX_ERR(0, 480, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "nw_ec_alignx.pyx":479 + * sco = NW(mat, decs, seq1, seq2, oscore=oscore, localize=localize) + * if oscore: + * if sco <= thres: # <<<<<<<<<<<<<< + * resdict[i] = sco + * else: + */ + } + + /* "nw_ec_alignx.pyx":478 + * seq2 = seqs[i] + * sco = NW(mat, decs, seq1, seq2, oscore=oscore, localize=localize) + * if oscore: # <<<<<<<<<<<<<< + * if sco <= thres: + * resdict[i] = sco + */ + goto __pyx_L5; + } + + /* "nw_ec_alignx.pyx":482 + * resdict[i] = sco + * else: + * if sco[2] <= thres: # <<<<<<<<<<<<<< + * resdict[i] = sco + * return resdict + */ + /*else*/ { + __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_sco, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyFloat_FromDouble(__pyx_v_thres); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_5 = PyObject_RichCompare(__pyx_t_6, __pyx_t_7, Py_LE); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_8) { + + /* "nw_ec_alignx.pyx":483 + * else: + * if sco[2] <= thres: + * resdict[i] = sco # <<<<<<<<<<<<<< + * return resdict + * + */ + __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_i); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 483, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (unlikely((PyDict_SetItem(__pyx_v_resdict, __pyx_t_5, __pyx_v_sco) < 0))) __PYX_ERR(0, 483, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "nw_ec_alignx.pyx":482 + * resdict[i] = sco + * else: + * if sco[2] <= thres: # <<<<<<<<<<<<<< + * resdict[i] = sco + * return resdict + */ + } + } + __pyx_L5:; + } + + /* "nw_ec_alignx.pyx":484 + * if sco[2] <= thres: + * resdict[i] = sco + * return resdict # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_resdict); + __pyx_r = __pyx_v_resdict; + goto __pyx_L0; + + /* "nw_ec_alignx.pyx":453 + * + * + * def seq_vs_db(list seq1, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, dict decs, # <<<<<<<<<<<<<< + * float thres=1.0, bool localize=False, bool oscore=True): + * """Align de specified ESSs vs all the ESS in the database seqs. + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mat.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("nw_ec_alignx.seq_vs_db", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mat.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XDECREF(__pyx_v_resdict); + __Pyx_XDECREF(__pyx_v_seq2); + __Pyx_XDECREF(__pyx_v_sco); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "nw_ec_alignx.pyx":487 + * + * + * def db_vs_db(list seqs1, list seqs2, np.ndarray[DTYPEF_t, ndim=2] mat, # <<<<<<<<<<<<<< + * dict decs, float thres=1.0, bool localize=False, + * bool oscore=True, int nproc=2): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_12nw_ec_alignx_13db_vs_db(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_12nw_ec_alignx_12db_vs_db, "Align all the ESS in both databases (seqs1, seqs2). The result\n is a dictionary of dictionaries. The fist key representes the index\n in of the ESS in the first database; the second key is the index of\n the ESS in the second database and the value is the score.\n\n BEWARE if the database is huge and the threshold is > 0.4 the procces may \n use all the RAM\n\n Keyword Arguments:\n seqs1 -- List, ESSs database1. Each element is a list of EC numbers\n seqs2 -- List, ESSs database2.\n mat -- ndarray, EC number similarity matrix\n decs -- Dict, EC number index dictionary\n thres -- Float, threshold score to filter de data (default 1.0)\n The data wil be captured with score <= thres.\n localize -- Bool. If True, the scoring of the alignment will be \n made only in the part of the alignment covered by \n the shortest ESS (default False)\n nproc -- Number of cores to use (default 2)\n oscore -- Bool. If True, returns only the score of the alignment \n otherwise, returns a tuple with the algined ESSs and\n the corresonding score (defautl True)\n "); +static PyMethodDef __pyx_mdef_12nw_ec_alignx_13db_vs_db = {"db_vs_db", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_12nw_ec_alignx_13db_vs_db, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_12nw_ec_alignx_12db_vs_db}; +static PyObject *__pyx_pw_12nw_ec_alignx_13db_vs_db(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_seqs1 = 0; + PyObject *__pyx_v_seqs2 = 0; + PyArrayObject *__pyx_v_mat = 0; + PyObject *__pyx_v_decs = 0; + float __pyx_v_thres; + PyBoolObject *__pyx_v_localize = 0; + PyBoolObject *__pyx_v_oscore = 0; + int __pyx_v_nproc; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[8] = {0,0,0,0,0,0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("db_vs_db (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_seqs1,&__pyx_n_s_seqs2,&__pyx_n_s_mat,&__pyx_n_s_decs,&__pyx_n_s_thres,&__pyx_n_s_localize,&__pyx_n_s_oscore,&__pyx_n_s_nproc,0}; + values[5] = __Pyx_Arg_NewRef_FASTCALL((PyObject *)__pyx_k__17); + values[6] = __Pyx_Arg_NewRef_FASTCALL((PyObject *)__pyx_k__18); + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 8: values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_seqs1)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 487, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_seqs2)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 487, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("db_vs_db", 0, 4, 8, 1); __PYX_ERR(0, 487, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_mat)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 487, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("db_vs_db", 0, 4, 8, 2); __PYX_ERR(0, 487, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_decs)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 487, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("db_vs_db", 0, 4, 8, 3); __PYX_ERR(0, 487, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_thres); + if (value) { values[4] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 487, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_localize); + if (value) { values[5] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 487, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_oscore); + if (value) { values[6] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 487, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_nproc); + if (value) { values[7] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 487, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "db_vs_db") < 0)) __PYX_ERR(0, 487, __pyx_L3_error) + } + } else { + switch (__pyx_nargs) { + case 8: values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_seqs1 = ((PyObject*)values[0]); + __pyx_v_seqs2 = ((PyObject*)values[1]); + __pyx_v_mat = ((PyArrayObject *)values[2]); + __pyx_v_decs = ((PyObject*)values[3]); + if (values[4]) { + __pyx_v_thres = __pyx_PyFloat_AsFloat(values[4]); if (unlikely((__pyx_v_thres == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 488, __pyx_L3_error) + } else { + __pyx_v_thres = ((float)((double)1.0)); + } + __pyx_v_localize = ((PyBoolObject *)values[5]); + __pyx_v_oscore = ((PyBoolObject *)values[6]); + if (values[7]) { + __pyx_v_nproc = __Pyx_PyInt_As_int(values[7]); if (unlikely((__pyx_v_nproc == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 489, __pyx_L3_error) + } else { + __pyx_v_nproc = ((int)((int)2)); + } + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("db_vs_db", 0, 4, 8, __pyx_nargs); __PYX_ERR(0, 487, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("nw_ec_alignx.db_vs_db", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_seqs1), (&PyList_Type), 1, "seqs1", 1))) __PYX_ERR(0, 487, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_seqs2), (&PyList_Type), 1, "seqs2", 1))) __PYX_ERR(0, 487, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_5numpy_ndarray, 1, "mat", 0))) __PYX_ERR(0, 487, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_decs), (&PyDict_Type), 1, "decs", 1))) __PYX_ERR(0, 488, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_localize), __pyx_ptype_7cpython_4bool_bool, 1, "localize", 0))) __PYX_ERR(0, 488, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_oscore), __pyx_ptype_7cpython_4bool_bool, 1, "oscore", 0))) __PYX_ERR(0, 489, __pyx_L1_error) + __pyx_r = __pyx_pf_12nw_ec_alignx_12db_vs_db(__pyx_self, __pyx_v_seqs1, __pyx_v_seqs2, __pyx_v_mat, __pyx_v_decs, __pyx_v_thres, __pyx_v_localize, __pyx_v_oscore, __pyx_v_nproc); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_12nw_ec_alignx_12db_vs_db(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_seqs1, PyObject *__pyx_v_seqs2, PyArrayObject *__pyx_v_mat, PyObject *__pyx_v_decs, float __pyx_v_thres, PyBoolObject *__pyx_v_localize, PyBoolObject *__pyx_v_oscore, int __pyx_v_nproc) { + PyObject *__pyx_v_resdic = 0; + PyObject *__pyx_v_pool = NULL; + PyObject *__pyx_v_align_func = NULL; + PyObject *__pyx_v_resd = NULL; + Py_ssize_t __pyx_v_i; + PyObject *__pyx_v_d = NULL; + __Pyx_LocalBuf_ND __pyx_pybuffernd_mat; + __Pyx_Buffer __pyx_pybuffer_mat; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + unsigned int __pyx_t_5; + Py_ssize_t __pyx_t_6; + Py_ssize_t __pyx_t_7; + Py_ssize_t __pyx_t_8; + int __pyx_t_9; + int __pyx_t_10; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("db_vs_db", 1); + __pyx_pybuffer_mat.pybuffer.buf = NULL; + __pyx_pybuffer_mat.refcount = 0; + __pyx_pybuffernd_mat.data = NULL; + __pyx_pybuffernd_mat.rcbuffer = &__pyx_pybuffer_mat; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mat.rcbuffer->pybuffer, (PyObject*)__pyx_v_mat, &__Pyx_TypeInfo_nn___pyx_t_12nw_ec_alignx_DTYPEF_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 487, __pyx_L1_error) + } + __pyx_pybuffernd_mat.diminfo[0].strides = __pyx_pybuffernd_mat.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_mat.diminfo[0].shape = __pyx_pybuffernd_mat.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_mat.diminfo[1].strides = __pyx_pybuffernd_mat.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_mat.diminfo[1].shape = __pyx_pybuffernd_mat.rcbuffer->pybuffer.shape[1]; + + /* "nw_ec_alignx.pyx":514 + * """ + * cdef: + * dict resdic = {} # <<<<<<<<<<<<<< + * pool = Pool(processes=nproc) + * align_func = partial(seq_vs_db, seqs=seqs2, mat=mat, decs=decs, thres=thres, + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 514, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_resdic = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "nw_ec_alignx.pyx":515 + * cdef: + * dict resdic = {} + * pool = Pool(processes=nproc) # <<<<<<<<<<<<<< + * align_func = partial(seq_vs_db, seqs=seqs2, mat=mat, decs=decs, thres=thres, + * localize=localize, oscore=oscore) + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Pool); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 515, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 515, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_nproc); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 515, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_processes, __pyx_t_3) < 0) __PYX_ERR(0, 515, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 515, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_pool = __pyx_t_3; + __pyx_t_3 = 0; + + /* "nw_ec_alignx.pyx":516 + * dict resdic = {} + * pool = Pool(processes=nproc) + * align_func = partial(seq_vs_db, seqs=seqs2, mat=mat, decs=decs, thres=thres, # <<<<<<<<<<<<<< + * localize=localize, oscore=oscore) + * resd = pool.map(align_func, seqs1) + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_partial); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 516, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_seq_vs_db); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 516, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 516, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2)) __PYX_ERR(0, 516, __pyx_L1_error); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 516, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_seqs, __pyx_v_seqs2) < 0) __PYX_ERR(0, 516, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_mat, ((PyObject *)__pyx_v_mat)) < 0) __PYX_ERR(0, 516, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_decs, __pyx_v_decs) < 0) __PYX_ERR(0, 516, __pyx_L1_error) + __pyx_t_4 = PyFloat_FromDouble(__pyx_v_thres); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 516, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_thres, __pyx_t_4) < 0) __PYX_ERR(0, 516, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":517 + * pool = Pool(processes=nproc) + * align_func = partial(seq_vs_db, seqs=seqs2, mat=mat, decs=decs, thres=thres, + * localize=localize, oscore=oscore) # <<<<<<<<<<<<<< + * resd = pool.map(align_func, seqs1) + * for i in range(len(resd)): + */ + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_localize, ((PyObject *)__pyx_v_localize)) < 0) __PYX_ERR(0, 516, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_oscore, ((PyObject *)__pyx_v_oscore)) < 0) __PYX_ERR(0, 516, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":516 + * dict resdic = {} + * pool = Pool(processes=nproc) + * align_func = partial(seq_vs_db, seqs=seqs2, mat=mat, decs=decs, thres=thres, # <<<<<<<<<<<<<< + * localize=localize, oscore=oscore) + * resd = pool.map(align_func, seqs1) + */ + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 516, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_align_func = __pyx_t_4; + __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":518 + * align_func = partial(seq_vs_db, seqs=seqs2, mat=mat, decs=decs, thres=thres, + * localize=localize, oscore=oscore) + * resd = pool.map(align_func, seqs1) # <<<<<<<<<<<<<< + * for i in range(len(resd)): + * d = resd[i] + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_pool, __pyx_n_s_map); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 518, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_v_align_func, __pyx_v_seqs1}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 2+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 518, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_v_resd = __pyx_t_4; + __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":519 + * localize=localize, oscore=oscore) + * resd = pool.map(align_func, seqs1) + * for i in range(len(resd)): # <<<<<<<<<<<<<< + * d = resd[i] + * if not d == {}: + */ + __pyx_t_6 = PyObject_Length(__pyx_v_resd); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 519, __pyx_L1_error) + __pyx_t_7 = __pyx_t_6; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { + __pyx_v_i = __pyx_t_8; + + /* "nw_ec_alignx.pyx":520 + * resd = pool.map(align_func, seqs1) + * for i in range(len(resd)): + * d = resd[i] # <<<<<<<<<<<<<< + * if not d == {}: + * resdic[i] = resd[i] + */ + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_resd, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 520, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_XDECREF_SET(__pyx_v_d, __pyx_t_4); + __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":521 + * for i in range(len(resd)): + * d = resd[i] + * if not d == {}: # <<<<<<<<<<<<<< + * resdic[i] = resd[i] + * pool.close() + */ + __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 521, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = PyObject_RichCompare(__pyx_v_d, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 521, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 521, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_10 = (!__pyx_t_9); + if (__pyx_t_10) { + + /* "nw_ec_alignx.pyx":522 + * d = resd[i] + * if not d == {}: + * resdic[i] = resd[i] # <<<<<<<<<<<<<< + * pool.close() + * return resdic + */ + __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_resd, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 522, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_i); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 522, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (unlikely((PyDict_SetItem(__pyx_v_resdic, __pyx_t_4, __pyx_t_2) < 0))) __PYX_ERR(0, 522, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "nw_ec_alignx.pyx":521 + * for i in range(len(resd)): + * d = resd[i] + * if not d == {}: # <<<<<<<<<<<<<< + * resdic[i] = resd[i] + * pool.close() + */ + } + } + + /* "nw_ec_alignx.pyx":523 + * if not d == {}: + * resdic[i] = resd[i] + * pool.close() # <<<<<<<<<<<<<< + * return resdic + * + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_pool, __pyx_n_s_close); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 523, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, NULL}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 523, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "nw_ec_alignx.pyx":524 + * resdic[i] = resd[i] + * pool.close() + * return resdic # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_resdic); + __pyx_r = __pyx_v_resdic; + goto __pyx_L0; + + /* "nw_ec_alignx.pyx":487 + * + * + * def db_vs_db(list seqs1, list seqs2, np.ndarray[DTYPEF_t, ndim=2] mat, # <<<<<<<<<<<<<< + * dict decs, float thres=1.0, bool localize=False, + * bool oscore=True, int nproc=2): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mat.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("nw_ec_alignx.db_vs_db", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mat.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XDECREF(__pyx_v_resdic); + __Pyx_XDECREF(__pyx_v_pool); + __Pyx_XDECREF(__pyx_v_align_func); + __Pyx_XDECREF(__pyx_v_resd); + __Pyx_XDECREF(__pyx_v_d); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "nw_ec_alignx.pyx":527 + * + * + * def alldb_comp(list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, dict decs, # <<<<<<<<<<<<<< + * float thres=1.0, bool localize=False, bool oscore=True, + * int nproc=2): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_12nw_ec_alignx_15alldb_comp(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_12nw_ec_alignx_14alldb_comp, "Align all the ESS in the database (seqs) and return the results in form \n of dictionary. The result is equivalent to the upper part the all vs all \n comparisson matrix.\n\n BEWARE if the database is huge and the threshold is > 0.4 the procces may \n use all the RAM\n\n Keyword Arguments:\n seqs -- List, ESSs database. Each ESS is a list of EC numbers\n mat -- ndarray, EC number similarity matrix\n decs -- Dict, EC number index dictionary\n thres -- Float, score threshold to filter data (default 1.0). The data \n captured will be score <= thres.\n localize -- Score the alignment in the segment covered by te smallest ESS \n (default False)\n nproc -- Number of cores to use (default 2)\n oscore -- Bool. If True, returns only the score of the alignment \n otherwise, returns a tuple with the algined ESSs and\n the corresonding score (defautl True)\n "); +static PyMethodDef __pyx_mdef_12nw_ec_alignx_15alldb_comp = {"alldb_comp", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_12nw_ec_alignx_15alldb_comp, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_12nw_ec_alignx_14alldb_comp}; +static PyObject *__pyx_pw_12nw_ec_alignx_15alldb_comp(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_seqs = 0; + PyArrayObject *__pyx_v_mat = 0; + PyObject *__pyx_v_decs = 0; + float __pyx_v_thres; + PyBoolObject *__pyx_v_localize = 0; + PyBoolObject *__pyx_v_oscore = 0; + int __pyx_v_nproc; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[7] = {0,0,0,0,0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("alldb_comp (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_seqs,&__pyx_n_s_mat,&__pyx_n_s_decs,&__pyx_n_s_thres,&__pyx_n_s_localize,&__pyx_n_s_oscore,&__pyx_n_s_nproc,0}; + values[4] = __Pyx_Arg_NewRef_FASTCALL((PyObject *)__pyx_k__19); + values[5] = __Pyx_Arg_NewRef_FASTCALL((PyObject *)__pyx_k__20); + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_seqs)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 527, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_mat)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 527, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("alldb_comp", 0, 3, 7, 1); __PYX_ERR(0, 527, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_decs)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 527, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("alldb_comp", 0, 3, 7, 2); __PYX_ERR(0, 527, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_thres); + if (value) { values[3] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 527, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_localize); + if (value) { values[4] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 527, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_oscore); + if (value) { values[5] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 527, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_nproc); + if (value) { values[6] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 527, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "alldb_comp") < 0)) __PYX_ERR(0, 527, __pyx_L3_error) + } + } else { + switch (__pyx_nargs) { + case 7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_seqs = ((PyObject*)values[0]); + __pyx_v_mat = ((PyArrayObject *)values[1]); + __pyx_v_decs = ((PyObject*)values[2]); + if (values[3]) { + __pyx_v_thres = __pyx_PyFloat_AsFloat(values[3]); if (unlikely((__pyx_v_thres == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 528, __pyx_L3_error) + } else { + __pyx_v_thres = ((float)((double)1.0)); + } + __pyx_v_localize = ((PyBoolObject *)values[4]); + __pyx_v_oscore = ((PyBoolObject *)values[5]); + if (values[6]) { + __pyx_v_nproc = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_nproc == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 529, __pyx_L3_error) + } else { + __pyx_v_nproc = ((int)((int)2)); + } + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("alldb_comp", 0, 3, 7, __pyx_nargs); __PYX_ERR(0, 527, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("nw_ec_alignx.alldb_comp", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_seqs), (&PyList_Type), 1, "seqs", 1))) __PYX_ERR(0, 527, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_5numpy_ndarray, 1, "mat", 0))) __PYX_ERR(0, 527, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_decs), (&PyDict_Type), 1, "decs", 1))) __PYX_ERR(0, 527, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_localize), __pyx_ptype_7cpython_4bool_bool, 1, "localize", 0))) __PYX_ERR(0, 528, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_oscore), __pyx_ptype_7cpython_4bool_bool, 1, "oscore", 0))) __PYX_ERR(0, 528, __pyx_L1_error) + __pyx_r = __pyx_pf_12nw_ec_alignx_14alldb_comp(__pyx_self, __pyx_v_seqs, __pyx_v_mat, __pyx_v_decs, __pyx_v_thres, __pyx_v_localize, __pyx_v_oscore, __pyx_v_nproc); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_12nw_ec_alignx_14alldb_comp(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_seqs, PyArrayObject *__pyx_v_mat, PyObject *__pyx_v_decs, float __pyx_v_thres, PyBoolObject *__pyx_v_localize, PyBoolObject *__pyx_v_oscore, int __pyx_v_nproc) { + PyObject *__pyx_v_indices = 0; + PyObject *__pyx_v_resd = 0; + PyObject *__pyx_v_d = 0; + PyObject *__pyx_v_result = 0; + PyObject *__pyx_v_pool = NULL; + PyObject *__pyx_v_align_func = NULL; + __Pyx_LocalBuf_ND __pyx_pybuffernd_mat; + __Pyx_Buffer __pyx_pybuffer_mat; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + Py_ssize_t __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("alldb_comp", 1); + __pyx_pybuffer_mat.pybuffer.buf = NULL; + __pyx_pybuffer_mat.refcount = 0; + __pyx_pybuffernd_mat.data = NULL; + __pyx_pybuffernd_mat.rcbuffer = &__pyx_pybuffer_mat; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mat.rcbuffer->pybuffer, (PyObject*)__pyx_v_mat, &__Pyx_TypeInfo_nn___pyx_t_12nw_ec_alignx_DTYPEF_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 527, __pyx_L1_error) + } + __pyx_pybuffernd_mat.diminfo[0].strides = __pyx_pybuffernd_mat.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_mat.diminfo[0].shape = __pyx_pybuffernd_mat.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_mat.diminfo[1].strides = __pyx_pybuffernd_mat.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_mat.diminfo[1].shape = __pyx_pybuffernd_mat.rcbuffer->pybuffer.shape[1]; + + /* "nw_ec_alignx.pyx":551 + * """ + * cdef: + * indices = list(range(len(seqs))) # <<<<<<<<<<<<<< + * list resd + * dict d + */ + if (unlikely(__pyx_v_seqs == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(0, 551, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_PyList_GET_SIZE(__pyx_v_seqs); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 551, __pyx_L1_error) + __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 551, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 551, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PySequence_ListKeepNew(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 551, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_indices = __pyx_t_2; + __pyx_t_2 = 0; + + /* "nw_ec_alignx.pyx":554 + * list resd + * dict d + * dict result = {} # <<<<<<<<<<<<<< + * pool = Pool(processes=nproc) + * align_func = partial(ind_vs_alldb, mat=mat, decs=decs, seqs=seqs, + */ + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 554, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_result = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; + + /* "nw_ec_alignx.pyx":555 + * dict d + * dict result = {} + * pool = Pool(processes=nproc) # <<<<<<<<<<<<<< + * align_func = partial(ind_vs_alldb, mat=mat, decs=decs, seqs=seqs, + * thres=thres, localize=localize, oscore=oscore) + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Pool); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 555, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 555, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_nproc); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 555, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_processes, __pyx_t_4) < 0) __PYX_ERR(0, 555, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 555, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_pool = __pyx_t_4; + __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":556 + * dict result = {} + * pool = Pool(processes=nproc) + * align_func = partial(ind_vs_alldb, mat=mat, decs=decs, seqs=seqs, # <<<<<<<<<<<<<< + * thres=thres, localize=localize, oscore=oscore) + * resd = pool.map(align_func, indices, chunksize=nproc) + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_partial); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 556, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ind_vs_alldb); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 556, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 556, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3)) __PYX_ERR(0, 556, __pyx_L1_error); + __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 556, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_mat, ((PyObject *)__pyx_v_mat)) < 0) __PYX_ERR(0, 556, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_decs, __pyx_v_decs) < 0) __PYX_ERR(0, 556, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_seqs, __pyx_v_seqs) < 0) __PYX_ERR(0, 556, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":557 + * pool = Pool(processes=nproc) + * align_func = partial(ind_vs_alldb, mat=mat, decs=decs, seqs=seqs, + * thres=thres, localize=localize, oscore=oscore) # <<<<<<<<<<<<<< + * resd = pool.map(align_func, indices, chunksize=nproc) + * + */ + __pyx_t_5 = PyFloat_FromDouble(__pyx_v_thres); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 557, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_thres, __pyx_t_5) < 0) __PYX_ERR(0, 556, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_localize, ((PyObject *)__pyx_v_localize)) < 0) __PYX_ERR(0, 556, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_oscore, ((PyObject *)__pyx_v_oscore)) < 0) __PYX_ERR(0, 556, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":556 + * dict result = {} + * pool = Pool(processes=nproc) + * align_func = partial(ind_vs_alldb, mat=mat, decs=decs, seqs=seqs, # <<<<<<<<<<<<<< + * thres=thres, localize=localize, oscore=oscore) + * resd = pool.map(align_func, indices, chunksize=nproc) + */ + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 556, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_align_func = __pyx_t_5; + __pyx_t_5 = 0; + + /* "nw_ec_alignx.pyx":558 + * align_func = partial(ind_vs_alldb, mat=mat, decs=decs, seqs=seqs, + * thres=thres, localize=localize, oscore=oscore) + * resd = pool.map(align_func, indices, chunksize=nproc) # <<<<<<<<<<<<<< + * + * for d in resd: + */ + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_pool, __pyx_n_s_map); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 558, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 558, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_align_func); + __Pyx_GIVEREF(__pyx_v_align_func); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_align_func)) __PYX_ERR(0, 558, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_indices); + __Pyx_GIVEREF(__pyx_v_indices); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_indices)) __PYX_ERR(0, 558, __pyx_L1_error); + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 558, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_nproc); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 558, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_chunksize, __pyx_t_4) < 0) __PYX_ERR(0, 558, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 558, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!(likely(PyList_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_4))) __PYX_ERR(0, 558, __pyx_L1_error) + __pyx_v_resd = ((PyObject*)__pyx_t_4); + __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":560 + * resd = pool.map(align_func, indices, chunksize=nproc) + * + * for d in resd: # <<<<<<<<<<<<<< + * result.update(d) + * return result + */ + if (unlikely(__pyx_v_resd == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); + __PYX_ERR(0, 560, __pyx_L1_error) + } + __pyx_t_4 = __pyx_v_resd; __Pyx_INCREF(__pyx_t_4); + __pyx_t_1 = 0; + for (;;) { + { + Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_4); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 560, __pyx_L1_error) + #endif + if (__pyx_t_1 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_2 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_1); __Pyx_INCREF(__pyx_t_2); __pyx_t_1++; if (unlikely((0 < 0))) __PYX_ERR(0, 560, __pyx_L1_error) + #else + __pyx_t_2 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_1); __pyx_t_1++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 560, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + #endif + if (!(likely(PyDict_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_2))) __PYX_ERR(0, 560, __pyx_L1_error) + __Pyx_XDECREF_SET(__pyx_v_d, ((PyObject*)__pyx_t_2)); + __pyx_t_2 = 0; + + /* "nw_ec_alignx.pyx":561 + * + * for d in resd: + * result.update(d) # <<<<<<<<<<<<<< + * return result + * + */ + __pyx_t_2 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyDict_Type_update, __pyx_v_result, __pyx_v_d); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 561, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "nw_ec_alignx.pyx":560 + * resd = pool.map(align_func, indices, chunksize=nproc) + * + * for d in resd: # <<<<<<<<<<<<<< + * result.update(d) + * return result + */ + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":562 + * for d in resd: + * result.update(d) + * return result # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_result); + __pyx_r = __pyx_v_result; + goto __pyx_L0; + + /* "nw_ec_alignx.pyx":527 + * + * + * def alldb_comp(list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, dict decs, # <<<<<<<<<<<<<< + * float thres=1.0, bool localize=False, bool oscore=True, + * int nproc=2): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mat.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("nw_ec_alignx.alldb_comp", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mat.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XDECREF(__pyx_v_indices); + __Pyx_XDECREF(__pyx_v_resd); + __Pyx_XDECREF(__pyx_v_d); + __Pyx_XDECREF(__pyx_v_result); + __Pyx_XDECREF(__pyx_v_pool); + __Pyx_XDECREF(__pyx_v_align_func); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "nw_ec_alignx.pyx":565 + * + * + * def list_vs_alldb(list indices, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, # <<<<<<<<<<<<<< + * dict decs, float thres=1.0, bool localize=False, + * bool wholedb=False, bool oscore=False, int nproc=2): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_12nw_ec_alignx_17list_vs_alldb(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_12nw_ec_alignx_16list_vs_alldb, "Align all the ESS in the database (seqs) and return the results in form \n of dictionary. The result is equivalent to the upper part the all vs all \n comparisson matrix.\n\n BEWARE if the database is huge and the threshold is > 0.4 the procces may \n use all the RAM\n\n Keyword Arguments:\n inds -- List of indices of the database to align vs the rest of database\n seqs -- List, ESSs database. Each ESS is a list of EC numbers\n mat -- ndarray, EC number similarity matrix\n decs -- Dict, EC number index dictionary\n thres -- Float, score threshold to filter data (default 1.0). The data \n captured will be score <= thres.\n localize -- Score the alignment in the segment covered by te smallest ESS \n (default False)\n wholedb -- Bool, If True, the ind ESS is compared against all the sequences\n stored in seqs list.\n oscore -- Bool. If True, returns only the score of the alignment \n otherwise, returns a tuple with the algined ESSs and\n the corresonding score (defautl True)\n nproc -- Number of cores used (default 2)\n "); +static PyMethodDef __pyx_mdef_12nw_ec_alignx_17list_vs_alldb = {"list_vs_alldb", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_12nw_ec_alignx_17list_vs_alldb, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_12nw_ec_alignx_16list_vs_alldb}; +static PyObject *__pyx_pw_12nw_ec_alignx_17list_vs_alldb(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_indices = 0; + PyObject *__pyx_v_seqs = 0; + PyArrayObject *__pyx_v_mat = 0; + PyObject *__pyx_v_decs = 0; + float __pyx_v_thres; + PyBoolObject *__pyx_v_localize = 0; + PyBoolObject *__pyx_v_wholedb = 0; + PyBoolObject *__pyx_v_oscore = 0; + int __pyx_v_nproc; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[9] = {0,0,0,0,0,0,0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("list_vs_alldb (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_indices,&__pyx_n_s_seqs,&__pyx_n_s_mat,&__pyx_n_s_decs,&__pyx_n_s_thres,&__pyx_n_s_localize,&__pyx_n_s_wholedb,&__pyx_n_s_oscore,&__pyx_n_s_nproc,0}; + values[5] = __Pyx_Arg_NewRef_FASTCALL((PyObject *)__pyx_k__21); + values[6] = __Pyx_Arg_NewRef_FASTCALL((PyObject *)__pyx_k__22); + values[7] = __Pyx_Arg_NewRef_FASTCALL((PyObject *)__pyx_k__23); + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 9: values[8] = __Pyx_Arg_FASTCALL(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_indices)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 565, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_seqs)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 565, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("list_vs_alldb", 0, 4, 9, 1); __PYX_ERR(0, 565, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_mat)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 565, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("list_vs_alldb", 0, 4, 9, 2); __PYX_ERR(0, 565, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_decs)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 565, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("list_vs_alldb", 0, 4, 9, 3); __PYX_ERR(0, 565, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_thres); + if (value) { values[4] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 565, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_localize); + if (value) { values[5] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 565, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_wholedb); + if (value) { values[6] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 565, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_oscore); + if (value) { values[7] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 565, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_nproc); + if (value) { values[8] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 565, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "list_vs_alldb") < 0)) __PYX_ERR(0, 565, __pyx_L3_error) + } + } else { + switch (__pyx_nargs) { + case 9: values[8] = __Pyx_Arg_FASTCALL(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_indices = ((PyObject*)values[0]); + __pyx_v_seqs = ((PyObject*)values[1]); + __pyx_v_mat = ((PyArrayObject *)values[2]); + __pyx_v_decs = ((PyObject*)values[3]); + if (values[4]) { + __pyx_v_thres = __pyx_PyFloat_AsFloat(values[4]); if (unlikely((__pyx_v_thres == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 566, __pyx_L3_error) + } else { + __pyx_v_thres = ((float)((double)1.0)); + } + __pyx_v_localize = ((PyBoolObject *)values[5]); + __pyx_v_wholedb = ((PyBoolObject *)values[6]); + __pyx_v_oscore = ((PyBoolObject *)values[7]); + if (values[8]) { + __pyx_v_nproc = __Pyx_PyInt_As_int(values[8]); if (unlikely((__pyx_v_nproc == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 567, __pyx_L3_error) + } else { + __pyx_v_nproc = ((int)((int)2)); + } + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("list_vs_alldb", 0, 4, 9, __pyx_nargs); __PYX_ERR(0, 565, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("nw_ec_alignx.list_vs_alldb", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_indices), (&PyList_Type), 1, "indices", 1))) __PYX_ERR(0, 565, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_seqs), (&PyList_Type), 1, "seqs", 1))) __PYX_ERR(0, 565, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_5numpy_ndarray, 1, "mat", 0))) __PYX_ERR(0, 565, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_decs), (&PyDict_Type), 1, "decs", 1))) __PYX_ERR(0, 566, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_localize), __pyx_ptype_7cpython_4bool_bool, 1, "localize", 0))) __PYX_ERR(0, 566, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_wholedb), __pyx_ptype_7cpython_4bool_bool, 1, "wholedb", 0))) __PYX_ERR(0, 567, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_oscore), __pyx_ptype_7cpython_4bool_bool, 1, "oscore", 0))) __PYX_ERR(0, 567, __pyx_L1_error) + __pyx_r = __pyx_pf_12nw_ec_alignx_16list_vs_alldb(__pyx_self, __pyx_v_indices, __pyx_v_seqs, __pyx_v_mat, __pyx_v_decs, __pyx_v_thres, __pyx_v_localize, __pyx_v_wholedb, __pyx_v_oscore, __pyx_v_nproc); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_12nw_ec_alignx_16list_vs_alldb(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_seqs, PyArrayObject *__pyx_v_mat, PyObject *__pyx_v_decs, float __pyx_v_thres, PyBoolObject *__pyx_v_localize, PyBoolObject *__pyx_v_wholedb, PyBoolObject *__pyx_v_oscore, int __pyx_v_nproc) { + PyObject *__pyx_v_resd = 0; + PyObject *__pyx_v_d = 0; + PyObject *__pyx_v_result = 0; + PyObject *__pyx_v_pool = NULL; + PyObject *__pyx_v_align_func = NULL; + __Pyx_LocalBuf_ND __pyx_pybuffernd_mat; + __Pyx_Buffer __pyx_pybuffer_mat; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + Py_ssize_t __pyx_t_5; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("list_vs_alldb", 1); + __pyx_pybuffer_mat.pybuffer.buf = NULL; + __pyx_pybuffer_mat.refcount = 0; + __pyx_pybuffernd_mat.data = NULL; + __pyx_pybuffernd_mat.rcbuffer = &__pyx_pybuffer_mat; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mat.rcbuffer->pybuffer, (PyObject*)__pyx_v_mat, &__Pyx_TypeInfo_nn___pyx_t_12nw_ec_alignx_DTYPEF_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 565, __pyx_L1_error) + } + __pyx_pybuffernd_mat.diminfo[0].strides = __pyx_pybuffernd_mat.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_mat.diminfo[0].shape = __pyx_pybuffernd_mat.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_mat.diminfo[1].strides = __pyx_pybuffernd_mat.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_mat.diminfo[1].shape = __pyx_pybuffernd_mat.rcbuffer->pybuffer.shape[1]; + + /* "nw_ec_alignx.pyx":594 + * list resd + * dict d + * dict result = {} # <<<<<<<<<<<<<< + * pool = Pool(processes=nproc) + * align_func = partial(ind_vs_alldb, mat=mat, decs=decs, seqs=seqs, + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 594, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_result = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "nw_ec_alignx.pyx":595 + * dict d + * dict result = {} + * pool = Pool(processes=nproc) # <<<<<<<<<<<<<< + * align_func = partial(ind_vs_alldb, mat=mat, decs=decs, seqs=seqs, + * thres=thres, localize=localize, wholedb=wholedb, + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Pool); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 595, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 595, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_nproc); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 595, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_processes, __pyx_t_3) < 0) __PYX_ERR(0, 595, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 595, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_pool = __pyx_t_3; + __pyx_t_3 = 0; + + /* "nw_ec_alignx.pyx":596 + * dict result = {} + * pool = Pool(processes=nproc) + * align_func = partial(ind_vs_alldb, mat=mat, decs=decs, seqs=seqs, # <<<<<<<<<<<<<< + * thres=thres, localize=localize, wholedb=wholedb, + * oscore=oscore) + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_partial); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 596, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ind_vs_alldb); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 596, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 596, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2)) __PYX_ERR(0, 596, __pyx_L1_error); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 596, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_mat, ((PyObject *)__pyx_v_mat)) < 0) __PYX_ERR(0, 596, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_decs, __pyx_v_decs) < 0) __PYX_ERR(0, 596, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_seqs, __pyx_v_seqs) < 0) __PYX_ERR(0, 596, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":597 + * pool = Pool(processes=nproc) + * align_func = partial(ind_vs_alldb, mat=mat, decs=decs, seqs=seqs, + * thres=thres, localize=localize, wholedb=wholedb, # <<<<<<<<<<<<<< + * oscore=oscore) + * resd = pool.map(align_func, indices, chunksize=nproc) + */ + __pyx_t_4 = PyFloat_FromDouble(__pyx_v_thres); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 597, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_thres, __pyx_t_4) < 0) __PYX_ERR(0, 596, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_localize, ((PyObject *)__pyx_v_localize)) < 0) __PYX_ERR(0, 596, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_wholedb, ((PyObject *)__pyx_v_wholedb)) < 0) __PYX_ERR(0, 596, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":598 + * align_func = partial(ind_vs_alldb, mat=mat, decs=decs, seqs=seqs, + * thres=thres, localize=localize, wholedb=wholedb, + * oscore=oscore) # <<<<<<<<<<<<<< + * resd = pool.map(align_func, indices, chunksize=nproc) + * + */ + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_oscore, ((PyObject *)__pyx_v_oscore)) < 0) __PYX_ERR(0, 596, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":596 + * dict result = {} + * pool = Pool(processes=nproc) + * align_func = partial(ind_vs_alldb, mat=mat, decs=decs, seqs=seqs, # <<<<<<<<<<<<<< + * thres=thres, localize=localize, wholedb=wholedb, + * oscore=oscore) + */ + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 596, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_align_func = __pyx_t_4; + __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":599 + * thres=thres, localize=localize, wholedb=wholedb, + * oscore=oscore) + * resd = pool.map(align_func, indices, chunksize=nproc) # <<<<<<<<<<<<<< + * + * for d in resd: + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_pool, __pyx_n_s_map); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 599, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 599, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_v_align_func); + __Pyx_GIVEREF(__pyx_v_align_func); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_align_func)) __PYX_ERR(0, 599, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_indices); + __Pyx_GIVEREF(__pyx_v_indices); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_indices)) __PYX_ERR(0, 599, __pyx_L1_error); + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 599, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_nproc); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 599, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_chunksize, __pyx_t_3) < 0) __PYX_ERR(0, 599, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 599, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (!(likely(PyList_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_3))) __PYX_ERR(0, 599, __pyx_L1_error) + __pyx_v_resd = ((PyObject*)__pyx_t_3); + __pyx_t_3 = 0; + + /* "nw_ec_alignx.pyx":601 + * resd = pool.map(align_func, indices, chunksize=nproc) + * + * for d in resd: # <<<<<<<<<<<<<< + * result.update(d) + * return result + */ + if (unlikely(__pyx_v_resd == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); + __PYX_ERR(0, 601, __pyx_L1_error) + } + __pyx_t_3 = __pyx_v_resd; __Pyx_INCREF(__pyx_t_3); + __pyx_t_5 = 0; + for (;;) { + { + Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 601, __pyx_L1_error) + #endif + if (__pyx_t_5 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 601, __pyx_L1_error) + #else + __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 601, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + #endif + if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_1))) __PYX_ERR(0, 601, __pyx_L1_error) + __Pyx_XDECREF_SET(__pyx_v_d, ((PyObject*)__pyx_t_1)); + __pyx_t_1 = 0; + + /* "nw_ec_alignx.pyx":602 + * + * for d in resd: + * result.update(d) # <<<<<<<<<<<<<< + * return result + * + */ + __pyx_t_1 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyDict_Type_update, __pyx_v_result, __pyx_v_d); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 602, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "nw_ec_alignx.pyx":601 + * resd = pool.map(align_func, indices, chunksize=nproc) + * + * for d in resd: # <<<<<<<<<<<<<< + * result.update(d) + * return result + */ + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "nw_ec_alignx.pyx":603 + * for d in resd: + * result.update(d) + * return result # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_result); + __pyx_r = __pyx_v_result; + goto __pyx_L0; + + /* "nw_ec_alignx.pyx":565 + * + * + * def list_vs_alldb(list indices, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, # <<<<<<<<<<<<<< + * dict decs, float thres=1.0, bool localize=False, + * bool wholedb=False, bool oscore=False, int nproc=2): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mat.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("nw_ec_alignx.list_vs_alldb", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mat.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XDECREF(__pyx_v_resd); + __Pyx_XDECREF(__pyx_v_d); + __Pyx_XDECREF(__pyx_v_result); + __Pyx_XDECREF(__pyx_v_pool); + __Pyx_XDECREF(__pyx_v_align_func); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "nw_ec_alignx.pyx":606 + * + * + * def alldb_shared(seqs, mat, decs, thres=1.0, localize=False, # <<<<<<<<<<<<<< + * nproc=2): + * """Align all the ESS in the database (seqs) and return the results as a + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_12nw_ec_alignx_19alldb_shared(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_12nw_ec_alignx_18alldb_shared, "Align all the ESS in the database (seqs) and return the results as a \n matrix with only the upper part filled. The rest of the matrix is \n initialized with 1s.\n\n This function is more memory efficient than alldb function, whoever\n coution must be taken if th database is to big (> 80000 seqs)\n\n Keyword Arguments:\n seqs -- List, ESSs database. Each ESS is a list of EC numbers\n mat -- ndarray, EC number similarity matrix\n decs -- Dict, EC number index dictionary\n thres -- Float, score threshold to filter data (default 1.0). The data \n captured will be score <= thres.\n localize -- Score the alignment in the segment covered by te smallest ESS \n (default False)\n nproc -- Number of cores used (default 2)\n "); +static PyMethodDef __pyx_mdef_12nw_ec_alignx_19alldb_shared = {"alldb_shared", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_12nw_ec_alignx_19alldb_shared, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_12nw_ec_alignx_18alldb_shared}; +static PyObject *__pyx_pw_12nw_ec_alignx_19alldb_shared(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_seqs = 0; + PyObject *__pyx_v_mat = 0; + PyObject *__pyx_v_decs = 0; + PyObject *__pyx_v_thres = 0; + PyObject *__pyx_v_localize = 0; + PyObject *__pyx_v_nproc = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[6] = {0,0,0,0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("alldb_shared (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_seqs,&__pyx_n_s_mat,&__pyx_n_s_decs,&__pyx_n_s_thres,&__pyx_n_s_localize,&__pyx_n_s_nproc,0}; + values[3] = __Pyx_Arg_NewRef_FASTCALL(((PyObject *)((PyObject*)__pyx_float_1_0))); + values[4] = __Pyx_Arg_NewRef_FASTCALL(((PyObject *)((PyObject *)Py_False))); + values[5] = __Pyx_Arg_NewRef_FASTCALL(((PyObject *)((PyObject *)__pyx_int_2))); + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_seqs)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 606, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_mat)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 606, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("alldb_shared", 0, 3, 6, 1); __PYX_ERR(0, 606, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_decs)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 606, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("alldb_shared", 0, 3, 6, 2); __PYX_ERR(0, 606, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_thres); + if (value) { values[3] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 606, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_localize); + if (value) { values[4] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 606, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_nproc); + if (value) { values[5] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 606, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "alldb_shared") < 0)) __PYX_ERR(0, 606, __pyx_L3_error) + } + } else { + switch (__pyx_nargs) { + case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_seqs = values[0]; + __pyx_v_mat = values[1]; + __pyx_v_decs = values[2]; + __pyx_v_thres = values[3]; + __pyx_v_localize = values[4]; + __pyx_v_nproc = values[5]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("alldb_shared", 0, 3, 6, __pyx_nargs); __PYX_ERR(0, 606, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("nw_ec_alignx.alldb_shared", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_12nw_ec_alignx_18alldb_shared(__pyx_self, __pyx_v_seqs, __pyx_v_mat, __pyx_v_decs, __pyx_v_thres, __pyx_v_localize, __pyx_v_nproc); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_12nw_ec_alignx_18alldb_shared(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_seqs, PyObject *__pyx_v_mat, PyObject *__pyx_v_decs, PyObject *__pyx_v_thres, PyObject *__pyx_v_localize, PyObject *__pyx_v_nproc) { + Py_ssize_t __pyx_v_total; + PyObject *__pyx_v_indices = NULL; + PyObject *__pyx_v_pool = NULL; + PyObject *__pyx_v_align_func = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + Py_ssize_t __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + unsigned int __pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("alldb_shared", 1); + + /* "nw_ec_alignx.pyx":625 + * nproc -- Number of cores used (default 2) + * """ + * total = len(seqs) # <<<<<<<<<<<<<< + * _create_global_arr(total) + * indices = range(total) + */ + __pyx_t_1 = PyObject_Length(__pyx_v_seqs); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 625, __pyx_L1_error) + __pyx_v_total = __pyx_t_1; + + /* "nw_ec_alignx.pyx":626 + * """ + * total = len(seqs) + * _create_global_arr(total) # <<<<<<<<<<<<<< + * indices = range(total) + * pool = Pool(processes=nproc) + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_create_global_arr); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 626, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_total); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 626, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_4}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 626, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "nw_ec_alignx.pyx":627 + * total = len(seqs) + * _create_global_arr(total) + * indices = range(total) # <<<<<<<<<<<<<< + * pool = Pool(processes=nproc) + * align_func = partial(_fill_mat, seqs=seqs, mat=mat, decs=decs, + */ + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_total); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 627, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 627, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_indices = __pyx_t_3; + __pyx_t_3 = 0; + + /* "nw_ec_alignx.pyx":628 + * _create_global_arr(total) + * indices = range(total) + * pool = Pool(processes=nproc) # <<<<<<<<<<<<<< + * align_func = partial(_fill_mat, seqs=seqs, mat=mat, decs=decs, + * thres=thres, localize=localize) + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Pool); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 628, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 628, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_processes, __pyx_v_nproc) < 0) __PYX_ERR(0, 628, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 628, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_pool = __pyx_t_4; + __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":629 + * indices = range(total) + * pool = Pool(processes=nproc) + * align_func = partial(_fill_mat, seqs=seqs, mat=mat, decs=decs, # <<<<<<<<<<<<<< + * thres=thres, localize=localize) + * pool.map(align_func, indices, chunksize=nproc) + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_partial); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 629, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_fill_mat); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 629, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 629, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2)) __PYX_ERR(0, 629, __pyx_L1_error); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 629, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_seqs, __pyx_v_seqs) < 0) __PYX_ERR(0, 629, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_mat, __pyx_v_mat) < 0) __PYX_ERR(0, 629, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_decs, __pyx_v_decs) < 0) __PYX_ERR(0, 629, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":630 + * pool = Pool(processes=nproc) + * align_func = partial(_fill_mat, seqs=seqs, mat=mat, decs=decs, + * thres=thres, localize=localize) # <<<<<<<<<<<<<< + * pool.map(align_func, indices, chunksize=nproc) + * pool.close() + */ + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_thres, __pyx_v_thres) < 0) __PYX_ERR(0, 629, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_localize, __pyx_v_localize) < 0) __PYX_ERR(0, 629, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":629 + * indices = range(total) + * pool = Pool(processes=nproc) + * align_func = partial(_fill_mat, seqs=seqs, mat=mat, decs=decs, # <<<<<<<<<<<<<< + * thres=thres, localize=localize) + * pool.map(align_func, indices, chunksize=nproc) + */ + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 629, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_align_func = __pyx_t_5; + __pyx_t_5 = 0; + + /* "nw_ec_alignx.pyx":631 + * align_func = partial(_fill_mat, seqs=seqs, mat=mat, decs=decs, + * thres=thres, localize=localize) + * pool.map(align_func, indices, chunksize=nproc) # <<<<<<<<<<<<<< + * pool.close() + * return scomat + */ + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_pool, __pyx_n_s_map); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 631, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 631, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_v_align_func); + __Pyx_GIVEREF(__pyx_v_align_func); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_align_func)) __PYX_ERR(0, 631, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_indices); + __Pyx_GIVEREF(__pyx_v_indices); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_indices)) __PYX_ERR(0, 631, __pyx_L1_error); + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 631, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_chunksize, __pyx_v_nproc) < 0) __PYX_ERR(0, 631, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 631, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":632 + * thres=thres, localize=localize) + * pool.map(align_func, indices, chunksize=nproc) + * pool.close() # <<<<<<<<<<<<<< + * return scomat + * + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_pool, __pyx_n_s_close); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 632, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_6, 0+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 632, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":633 + * pool.map(align_func, indices, chunksize=nproc) + * pool.close() + * return scomat # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_scomat); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 633, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + + /* "nw_ec_alignx.pyx":606 + * + * + * def alldb_shared(seqs, mat, decs, thres=1.0, localize=False, # <<<<<<<<<<<<<< + * nproc=2): + * """Align all the ESS in the database (seqs) and return the results as a + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("nw_ec_alignx.alldb_shared", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_indices); + __Pyx_XDECREF(__pyx_v_pool); + __Pyx_XDECREF(__pyx_v_align_func); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "nw_ec_alignx.pyx":636 + * + * + * def _create_global_arr(total): # <<<<<<<<<<<<<< + * """Create shared global array for all vs all comparisson + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_12nw_ec_alignx_21_create_global_arr(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_12nw_ec_alignx_20_create_global_arr, "Create shared global array for all vs all comparisson\n\n Keyword Arguments:\n total -- Row size of square matrix\n "); +static PyMethodDef __pyx_mdef_12nw_ec_alignx_21_create_global_arr = {"_create_global_arr", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_12nw_ec_alignx_21_create_global_arr, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_12nw_ec_alignx_20_create_global_arr}; +static PyObject *__pyx_pw_12nw_ec_alignx_21_create_global_arr(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_total = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("_create_global_arr (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_total,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_total)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 636, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_create_global_arr") < 0)) __PYX_ERR(0, 636, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v_total = values[0]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("_create_global_arr", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 636, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("nw_ec_alignx._create_global_arr", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_12nw_ec_alignx_20_create_global_arr(__pyx_self, __pyx_v_total); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_12nw_ec_alignx_20_create_global_arr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_total) { + PyObject *__pyx_v_shared_sco_base = NULL; + PyObject *__pyx_v_scomat_ = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + unsigned int __pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_create_global_arr", 1); + + /* "nw_ec_alignx.pyx":643 + * """ + * global scomat + * shared_sco_base = Array(ctypes.c_float, total * total) # <<<<<<<<<<<<<< + * scomat_ = np.frombuffer(shared_sco_base.get_obj(), dtype=np.float32) + * scomat = scomat_.reshape((total, total)) + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Array); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 643, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ctypes); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 643, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_c_float); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 643, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyNumber_Multiply(__pyx_v_total, __pyx_v_total); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 643, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_4, __pyx_t_3}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_6, 2+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 643, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_v_shared_sco_base = __pyx_t_1; + __pyx_t_1 = 0; + + /* "nw_ec_alignx.pyx":644 + * global scomat + * shared_sco_base = Array(ctypes.c_float, total * total) + * scomat_ = np.frombuffer(shared_sco_base.get_obj(), dtype=np.float32) # <<<<<<<<<<<<<< + * scomat = scomat_.reshape((total, total)) + * scomat[:, :] = 1 + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 644, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 644, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_shared_sco_base, __pyx_n_s_get_obj); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 644, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_6, 0+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 644, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 644, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 644, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 644, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 644, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_float32); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 644, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 644, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 644, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_scomat_ = __pyx_t_5; + __pyx_t_5 = 0; + + /* "nw_ec_alignx.pyx":645 + * shared_sco_base = Array(ctypes.c_float, total * total) + * scomat_ = np.frombuffer(shared_sco_base.get_obj(), dtype=np.float32) + * scomat = scomat_.reshape((total, total)) # <<<<<<<<<<<<<< + * scomat[:, :] = 1 + * + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_scomat_, __pyx_n_s_reshape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 645, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 645, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_total); + __Pyx_GIVEREF(__pyx_v_total); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_total)) __PYX_ERR(0, 645, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_total); + __Pyx_GIVEREF(__pyx_v_total); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_total)) __PYX_ERR(0, 645, __pyx_L1_error); + __pyx_t_2 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_3}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 645, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + if (PyDict_SetItem(__pyx_d, __pyx_n_s_scomat, __pyx_t_5) < 0) __PYX_ERR(0, 645, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "nw_ec_alignx.pyx":646 + * scomat_ = np.frombuffer(shared_sco_base.get_obj(), dtype=np.float32) + * scomat = scomat_.reshape((total, total)) + * scomat[:, :] = 1 # <<<<<<<<<<<<<< + * + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_scomat); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 646, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (unlikely((PyObject_SetItem(__pyx_t_5, __pyx_tuple__25, __pyx_int_1) < 0))) __PYX_ERR(0, 646, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "nw_ec_alignx.pyx":636 + * + * + * def _create_global_arr(total): # <<<<<<<<<<<<<< + * """Create shared global array for all vs all comparisson + * + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("nw_ec_alignx._create_global_arr", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_shared_sco_base); + __Pyx_XDECREF(__pyx_v_scomat_); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "nw_ec_alignx.pyx":649 + * + * + * def _fill_mat(ind, seqs, mat, decs, localize, float thres): # <<<<<<<<<<<<<< + * """Fill shared global matrix + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_12nw_ec_alignx_23_fill_mat(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_12nw_ec_alignx_22_fill_mat, "Fill shared global matrix\n\n Keyword Arguments:\n seqs -- List, ESSs database. Each ESS is a list of EC numbers\n mat -- ndarray, EC number similarity matrix\n decs -- Dict, EC number index dictionary\n thres -- Float, score threshold to filter data (default 1.0). The data \n captured will be score <= thres.\n localize -- Score the alignment in the segment covered by te smallest ESS \n (default False)\n "); +static PyMethodDef __pyx_mdef_12nw_ec_alignx_23_fill_mat = {"_fill_mat", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_12nw_ec_alignx_23_fill_mat, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_12nw_ec_alignx_22_fill_mat}; +static PyObject *__pyx_pw_12nw_ec_alignx_23_fill_mat(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_ind = 0; + PyObject *__pyx_v_seqs = 0; + PyObject *__pyx_v_mat = 0; + PyObject *__pyx_v_decs = 0; + PyObject *__pyx_v_localize = 0; + CYTHON_UNUSED float __pyx_v_thres; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[6] = {0,0,0,0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("_fill_mat (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ind,&__pyx_n_s_seqs,&__pyx_n_s_mat,&__pyx_n_s_decs,&__pyx_n_s_localize,&__pyx_n_s_thres,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_ind)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 649, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_seqs)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 649, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fill_mat", 1, 6, 6, 1); __PYX_ERR(0, 649, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_mat)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 649, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fill_mat", 1, 6, 6, 2); __PYX_ERR(0, 649, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_decs)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 649, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fill_mat", 1, 6, 6, 3); __PYX_ERR(0, 649, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_localize)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[4]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 649, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fill_mat", 1, 6, 6, 4); __PYX_ERR(0, 649, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_thres)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[5]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 649, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_fill_mat", 1, 6, 6, 5); __PYX_ERR(0, 649, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_fill_mat") < 0)) __PYX_ERR(0, 649, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 6)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + } + __pyx_v_ind = values[0]; + __pyx_v_seqs = values[1]; + __pyx_v_mat = values[2]; + __pyx_v_decs = values[3]; + __pyx_v_localize = values[4]; + __pyx_v_thres = __pyx_PyFloat_AsFloat(values[5]); if (unlikely((__pyx_v_thres == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 649, __pyx_L3_error) + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("_fill_mat", 1, 6, 6, __pyx_nargs); __PYX_ERR(0, 649, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("nw_ec_alignx._fill_mat", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_12nw_ec_alignx_22_fill_mat(__pyx_self, __pyx_v_ind, __pyx_v_seqs, __pyx_v_mat, __pyx_v_decs, __pyx_v_localize, __pyx_v_thres); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_12nw_ec_alignx_22_fill_mat(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_ind, PyObject *__pyx_v_seqs, PyObject *__pyx_v_mat, PyObject *__pyx_v_decs, PyObject *__pyx_v_localize, CYTHON_UNUSED float __pyx_v_thres) { + int __pyx_v_j; + float __pyx_v_sco; + PyObject *__pyx_v_seq1 = 0; + PyObject *__pyx_v_seq2 = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + Py_ssize_t __pyx_t_2; + long __pyx_t_3; + Py_ssize_t __pyx_t_4; + int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + float __pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_fill_mat", 1); + + /* "nw_ec_alignx.pyx":665 + * float sco + * list seq1, seq2 + * seq1 = seqs[ind] # <<<<<<<<<<<<<< + * for j in range(ind + 1, len(seqs)): + * seq2 = seqs[j] + */ + __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_seqs, __pyx_v_ind); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 665, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!(likely(PyList_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_1))) __PYX_ERR(0, 665, __pyx_L1_error) + __pyx_v_seq1 = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "nw_ec_alignx.pyx":666 + * list seq1, seq2 + * seq1 = seqs[ind] + * for j in range(ind + 1, len(seqs)): # <<<<<<<<<<<<<< + * seq2 = seqs[j] + * sco = NW(mat, decs, seq1, seq2, oscore=True, + */ + __pyx_t_2 = PyObject_Length(__pyx_v_seqs); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(0, 666, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_AddObjC(__pyx_v_ind, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 666, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyInt_As_long(__pyx_t_1); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 666, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_4 = __pyx_t_2; + for (__pyx_t_5 = __pyx_t_3; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) { + __pyx_v_j = __pyx_t_5; + + /* "nw_ec_alignx.pyx":667 + * seq1 = seqs[ind] + * for j in range(ind + 1, len(seqs)): + * seq2 = seqs[j] # <<<<<<<<<<<<<< + * sco = NW(mat, decs, seq1, seq2, oscore=True, + * localize=localize) + */ + __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_seqs, __pyx_v_j, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 667, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!(likely(PyList_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_1))) __PYX_ERR(0, 667, __pyx_L1_error) + __Pyx_XDECREF_SET(__pyx_v_seq2, ((PyObject*)__pyx_t_1)); + __pyx_t_1 = 0; + + /* "nw_ec_alignx.pyx":668 + * for j in range(ind + 1, len(seqs)): + * seq2 = seqs[j] + * sco = NW(mat, decs, seq1, seq2, oscore=True, # <<<<<<<<<<<<<< + * localize=localize) + * scomat[ind, j] = sco + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_NW); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 668, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 668, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_INCREF(__pyx_v_mat); + __Pyx_GIVEREF(__pyx_v_mat); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_mat)) __PYX_ERR(0, 668, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_decs); + __Pyx_GIVEREF(__pyx_v_decs); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_v_decs)) __PYX_ERR(0, 668, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_seq1); + __Pyx_GIVEREF(__pyx_v_seq1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_v_seq1)) __PYX_ERR(0, 668, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_seq2); + __Pyx_GIVEREF(__pyx_v_seq2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 3, __pyx_v_seq2)) __PYX_ERR(0, 668, __pyx_L1_error); + __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 668, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_oscore, Py_True) < 0) __PYX_ERR(0, 668, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":669 + * seq2 = seqs[j] + * sco = NW(mat, decs, seq1, seq2, oscore=True, + * localize=localize) # <<<<<<<<<<<<<< + * scomat[ind, j] = sco + * + */ + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_localize, __pyx_v_localize) < 0) __PYX_ERR(0, 668, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":668 + * for j in range(ind + 1, len(seqs)): + * seq2 = seqs[j] + * sco = NW(mat, decs, seq1, seq2, oscore=True, # <<<<<<<<<<<<<< + * localize=localize) + * scomat[ind, j] = sco + */ + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 668, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_9 = __pyx_PyFloat_AsFloat(__pyx_t_8); if (unlikely((__pyx_t_9 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 668, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_v_sco = __pyx_t_9; + + /* "nw_ec_alignx.pyx":670 + * sco = NW(mat, decs, seq1, seq2, oscore=True, + * localize=localize) + * scomat[ind, j] = sco # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_8 = PyFloat_FromDouble(__pyx_v_sco); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 670, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_scomat); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 670, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_j); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 670, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 670, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v_ind); + __Pyx_GIVEREF(__pyx_v_ind); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_ind)) __PYX_ERR(0, 670, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_6); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_6)) __PYX_ERR(0, 670, __pyx_L1_error); + __pyx_t_6 = 0; + if (unlikely((PyObject_SetItem(__pyx_t_7, __pyx_t_1, __pyx_t_8) < 0))) __PYX_ERR(0, 670, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + + /* "nw_ec_alignx.pyx":649 + * + * + * def _fill_mat(ind, seqs, mat, decs, localize, float thres): # <<<<<<<<<<<<<< + * """Fill shared global matrix + * + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("nw_ec_alignx._fill_mat", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_seq1); + __Pyx_XDECREF(__pyx_v_seq2); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "nw_ec_alignx.pyx":673 + * + * + * def store_dict(fname, rdict, indices=None, indices2=None): # <<<<<<<<<<<<<< + * """Stores the scores of the alignments in a tab separated text + * file. The first column corresponds to the first sequence index + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_12nw_ec_alignx_25store_dict(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_12nw_ec_alignx_24store_dict, "Stores the scores of the alignments in a tab separated text\n file. The first column corresponds to the first sequence index\n the scond column to the second index and the third column to \n the score.\n\n Keyword Arguments:\n fname -- Str, file name\n rdict -- Dict, result dictionary\n indices -- List, indices to translate (default None)\n indices2 -- List, indices to translate (default None) if there\n is a second database. In this case the this list is \n used to translate the indices in the internal dictionaries\n "); +static PyMethodDef __pyx_mdef_12nw_ec_alignx_25store_dict = {"store_dict", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_12nw_ec_alignx_25store_dict, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_12nw_ec_alignx_24store_dict}; +static PyObject *__pyx_pw_12nw_ec_alignx_25store_dict(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_fname = 0; + PyObject *__pyx_v_rdict = 0; + PyObject *__pyx_v_indices = 0; + PyObject *__pyx_v_indices2 = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[4] = {0,0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("store_dict (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fname,&__pyx_n_s_rdict,&__pyx_n_s_indices,&__pyx_n_s_indices2,0}; + values[2] = __Pyx_Arg_NewRef_FASTCALL(((PyObject *)Py_None)); + values[3] = __Pyx_Arg_NewRef_FASTCALL(((PyObject *)Py_None)); + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_fname)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 673, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rdict)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 673, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("store_dict", 0, 2, 4, 1); __PYX_ERR(0, 673, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_indices); + if (value) { values[2] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 673, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_indices2); + if (value) { values[3] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 673, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "store_dict") < 0)) __PYX_ERR(0, 673, __pyx_L3_error) + } + } else { + switch (__pyx_nargs) { + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_fname = values[0]; + __pyx_v_rdict = values[1]; + __pyx_v_indices = values[2]; + __pyx_v_indices2 = values[3]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("store_dict", 0, 2, 4, __pyx_nargs); __PYX_ERR(0, 673, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("nw_ec_alignx.store_dict", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_12nw_ec_alignx_24store_dict(__pyx_self, __pyx_v_fname, __pyx_v_rdict, __pyx_v_indices, __pyx_v_indices2); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_12nw_ec_alignx_24store_dict(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_fname, PyObject *__pyx_v_rdict, PyObject *__pyx_v_indices, PyObject *__pyx_v_indices2) { + PyObject *__pyx_v_outf = NULL; + PyObject *__pyx_v_testval = NULL; + PyObject *__pyx_v_i = NULL; + PyObject *__pyx_v_sco = NULL; + PyObject *__pyx_v_line = NULL; + PyObject *__pyx_v_dic = NULL; + PyObject *__pyx_v_j = NULL; + PyObject *__pyx_v_ind1 = NULL; + PyObject *__pyx_v_ind2 = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + unsigned int __pyx_t_6; + int __pyx_t_7; + Py_ssize_t __pyx_t_8; + Py_ssize_t __pyx_t_9; + int __pyx_t_10; + int __pyx_t_11; + Py_ssize_t __pyx_t_12; + Py_UCS4 __pyx_t_13; + PyObject *__pyx_t_14 = NULL; + Py_ssize_t __pyx_t_15; + int __pyx_t_16; + Py_ssize_t __pyx_t_17; + PyObject *__pyx_t_18 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("store_dict", 1); + + /* "nw_ec_alignx.pyx":687 + * used to translate the indices in the internal dictionaries + * """ + * if not rdict: # <<<<<<<<<<<<<< + * return + * outf = open(fname, 'w', buffering=1000) + */ + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_rdict); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 687, __pyx_L1_error) + __pyx_t_2 = (!__pyx_t_1); + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":688 + * """ + * if not rdict: + * return # <<<<<<<<<<<<<< + * outf = open(fname, 'w', buffering=1000) + * testval = list(rdict.values())[0] + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "nw_ec_alignx.pyx":687 + * used to translate the indices in the internal dictionaries + * """ + * if not rdict: # <<<<<<<<<<<<<< + * return + * outf = open(fname, 'w', buffering=1000) + */ + } + + /* "nw_ec_alignx.pyx":689 + * if not rdict: + * return + * outf = open(fname, 'w', buffering=1000) # <<<<<<<<<<<<<< + * testval = list(rdict.values())[0] + * if type(testval) == float and not indices: + */ + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 689, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_fname); + __Pyx_GIVEREF(__pyx_v_fname); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_fname)) __PYX_ERR(0, 689, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_u_w); + __Pyx_GIVEREF(__pyx_n_u_w); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_n_u_w)) __PYX_ERR(0, 689, __pyx_L1_error); + __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 689, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_buffering, __pyx_int_1000) < 0) __PYX_ERR(0, 689, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_open, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 689, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_outf = __pyx_t_5; + __pyx_t_5 = 0; + + /* "nw_ec_alignx.pyx":690 + * return + * outf = open(fname, 'w', buffering=1000) + * testval = list(rdict.values())[0] # <<<<<<<<<<<<<< + * if type(testval) == float and not indices: + * for i, sco in rdict.items(): + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_rdict, __pyx_n_s_values); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 690, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 0+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 690, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __pyx_t_4 = __Pyx_PySequence_ListKeepNew(__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 690, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = PyList_GET_ITEM(__pyx_t_4, 0); + __Pyx_INCREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_testval = __pyx_t_5; + __pyx_t_5 = 0; + + /* "nw_ec_alignx.pyx":691 + * outf = open(fname, 'w', buffering=1000) + * testval = list(rdict.values())[0] + * if type(testval) == float and not indices: # <<<<<<<<<<<<<< + * for i, sco in rdict.items(): + * if type(sco) is tuple: + */ + __pyx_t_5 = PyObject_RichCompare(((PyObject *)Py_TYPE(__pyx_v_testval)), ((PyObject *)(&PyFloat_Type)), Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 691, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 691, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_1) { + } else { + __pyx_t_2 = __pyx_t_1; + goto __pyx_L5_bool_binop_done; + } + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_indices); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 691, __pyx_L1_error) + __pyx_t_7 = (!__pyx_t_1); + __pyx_t_2 = __pyx_t_7; + __pyx_L5_bool_binop_done:; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":692 + * testval = list(rdict.values())[0] + * if type(testval) == float and not indices: + * for i, sco in rdict.items(): # <<<<<<<<<<<<<< + * if type(sco) is tuple: + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + */ + __pyx_t_8 = 0; + if (unlikely(__pyx_v_rdict == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); + __PYX_ERR(0, 692, __pyx_L1_error) + } + __pyx_t_4 = __Pyx_dict_iterator(__pyx_v_rdict, 0, __pyx_n_s_items, (&__pyx_t_9), (&__pyx_t_10)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 692, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __pyx_t_5 = __pyx_t_4; + __pyx_t_4 = 0; + while (1) { + __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_5, __pyx_t_9, &__pyx_t_8, &__pyx_t_4, &__pyx_t_3, NULL, __pyx_t_10); + if (unlikely(__pyx_t_11 == 0)) break; + if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 692, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GOTREF(__pyx_t_3); + __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_4); + __pyx_t_4 = 0; + __Pyx_XDECREF_SET(__pyx_v_sco, __pyx_t_3); + __pyx_t_3 = 0; + + /* "nw_ec_alignx.pyx":693 + * if type(testval) == float and not indices: + * for i, sco in rdict.items(): + * if type(sco) is tuple: # <<<<<<<<<<<<<< + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\n'.format(i, sco) + */ + __pyx_t_2 = (((PyObject *)Py_TYPE(__pyx_v_sco)) == ((PyObject *)(&PyTuple_Type))); + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":694 + * for i, sco in rdict.items(): + * if type(sco) is tuple: + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" # <<<<<<<<<<<<<< + * line = '{}\t{}\n'.format(i, sco) + * outf.write(line) + */ + __pyx_t_3 = PyTuple_New(5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 694, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_12 = 0; + __pyx_t_13 = 127; + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sco, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 694, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_14 = __Pyx_PyObject_FormatSimple(__pyx_t_4, __pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 694, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) : __pyx_t_13; + __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14); + __Pyx_GIVEREF(__pyx_t_14); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_14); + __pyx_t_14 = 0; + __Pyx_INCREF(__pyx_kp_u__26); + __pyx_t_12 += 1; + __Pyx_GIVEREF(__pyx_kp_u__26); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_kp_u__26); + __pyx_t_14 = __Pyx_GetItemInt(__pyx_v_sco, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 694, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_t_14, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 694, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_13; + __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_4); + __pyx_t_4 = 0; + __Pyx_INCREF(__pyx_kp_u__26); + __pyx_t_12 += 1; + __Pyx_GIVEREF(__pyx_kp_u__26); + PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_kp_u__26); + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sco, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 694, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_14 = __Pyx_PyObject_FormatSimple(__pyx_t_4, __pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 694, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) : __pyx_t_13; + __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14); + __Pyx_GIVEREF(__pyx_t_14); + PyTuple_SET_ITEM(__pyx_t_3, 4, __pyx_t_14); + __pyx_t_14 = 0; + __pyx_t_14 = __Pyx_PyUnicode_Join(__pyx_t_3, 5, __pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 694, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF_SET(__pyx_v_sco, __pyx_t_14); + __pyx_t_14 = 0; + + /* "nw_ec_alignx.pyx":693 + * if type(testval) == float and not indices: + * for i, sco in rdict.items(): + * if type(sco) is tuple: # <<<<<<<<<<<<<< + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\n'.format(i, sco) + */ + } + + /* "nw_ec_alignx.pyx":695 + * if type(sco) is tuple: + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\n'.format(i, sco) # <<<<<<<<<<<<<< + * outf.write(line) + * elif type(testval) == float: + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u__27, __pyx_n_s_format); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 695, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_v_i, __pyx_v_sco}; + __pyx_t_14 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_6, 2+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 695, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_XDECREF_SET(__pyx_v_line, __pyx_t_14); + __pyx_t_14 = 0; + + /* "nw_ec_alignx.pyx":696 + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\n'.format(i, sco) + * outf.write(line) # <<<<<<<<<<<<<< + * elif type(testval) == float: + * for i, sco in rdict.items(): + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_outf, __pyx_n_s_write); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 696, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_line}; + __pyx_t_14 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 696, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + } + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "nw_ec_alignx.pyx":691 + * outf = open(fname, 'w', buffering=1000) + * testval = list(rdict.values())[0] + * if type(testval) == float and not indices: # <<<<<<<<<<<<<< + * for i, sco in rdict.items(): + * if type(sco) is tuple: + */ + goto __pyx_L4; + } + + /* "nw_ec_alignx.pyx":697 + * line = '{}\t{}\n'.format(i, sco) + * outf.write(line) + * elif type(testval) == float: # <<<<<<<<<<<<<< + * for i, sco in rdict.items(): + * i = indices[i] + */ + __pyx_t_5 = PyObject_RichCompare(((PyObject *)Py_TYPE(__pyx_v_testval)), ((PyObject *)(&PyFloat_Type)), Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 697, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 697, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":698 + * outf.write(line) + * elif type(testval) == float: + * for i, sco in rdict.items(): # <<<<<<<<<<<<<< + * i = indices[i] + * if type(sco) is tuple: + */ + __pyx_t_9 = 0; + if (unlikely(__pyx_v_rdict == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); + __PYX_ERR(0, 698, __pyx_L1_error) + } + __pyx_t_14 = __Pyx_dict_iterator(__pyx_v_rdict, 0, __pyx_n_s_items, (&__pyx_t_8), (&__pyx_t_10)); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 698, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_XDECREF(__pyx_t_5); + __pyx_t_5 = __pyx_t_14; + __pyx_t_14 = 0; + while (1) { + __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_5, __pyx_t_8, &__pyx_t_9, &__pyx_t_14, &__pyx_t_3, NULL, __pyx_t_10); + if (unlikely(__pyx_t_11 == 0)) break; + if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 698, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_GOTREF(__pyx_t_3); + __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_14); + __pyx_t_14 = 0; + __Pyx_XDECREF_SET(__pyx_v_sco, __pyx_t_3); + __pyx_t_3 = 0; + + /* "nw_ec_alignx.pyx":699 + * elif type(testval) == float: + * for i, sco in rdict.items(): + * i = indices[i] # <<<<<<<<<<<<<< + * if type(sco) is tuple: + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + */ + __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_indices, __pyx_v_i); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 699, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF_SET(__pyx_v_i, __pyx_t_3); + __pyx_t_3 = 0; + + /* "nw_ec_alignx.pyx":700 + * for i, sco in rdict.items(): + * i = indices[i] + * if type(sco) is tuple: # <<<<<<<<<<<<<< + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\n'.format(i, sco) + */ + __pyx_t_2 = (((PyObject *)Py_TYPE(__pyx_v_sco)) == ((PyObject *)(&PyTuple_Type))); + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":701 + * i = indices[i] + * if type(sco) is tuple: + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" # <<<<<<<<<<<<<< + * line = '{}\t{}\n'.format(i, sco) + * outf.write(line) + */ + __pyx_t_3 = PyTuple_New(5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 701, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_12 = 0; + __pyx_t_13 = 127; + __pyx_t_14 = __Pyx_GetItemInt(__pyx_v_sco, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 701, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_t_14, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 701, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_13; + __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4); + __pyx_t_4 = 0; + __Pyx_INCREF(__pyx_kp_u__26); + __pyx_t_12 += 1; + __Pyx_GIVEREF(__pyx_kp_u__26); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_kp_u__26); + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sco, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 701, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_14 = __Pyx_PyObject_FormatSimple(__pyx_t_4, __pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 701, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) : __pyx_t_13; + __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14); + __Pyx_GIVEREF(__pyx_t_14); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_14); + __pyx_t_14 = 0; + __Pyx_INCREF(__pyx_kp_u__26); + __pyx_t_12 += 1; + __Pyx_GIVEREF(__pyx_kp_u__26); + PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_kp_u__26); + __pyx_t_14 = __Pyx_GetItemInt(__pyx_v_sco, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 701, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_t_14, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 701, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_13; + __pyx_t_12 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_3, 4, __pyx_t_4); + __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_3, 5, __pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 701, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF_SET(__pyx_v_sco, __pyx_t_4); + __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":700 + * for i, sco in rdict.items(): + * i = indices[i] + * if type(sco) is tuple: # <<<<<<<<<<<<<< + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\n'.format(i, sco) + */ + } + + /* "nw_ec_alignx.pyx":702 + * if type(sco) is tuple: + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\n'.format(i, sco) # <<<<<<<<<<<<<< + * outf.write(line) + * + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u__27, __pyx_n_s_format); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 702, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_14 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_14)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_14); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_14, __pyx_v_i, __pyx_v_sco}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_6, 2+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 702, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_XDECREF_SET(__pyx_v_line, __pyx_t_4); + __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":703 + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\n'.format(i, sco) + * outf.write(line) # <<<<<<<<<<<<<< + * + * elif not indices and not indices2: + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_outf, __pyx_n_s_write); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 703, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_14 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_14)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_14); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_14, __pyx_v_line}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 703, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "nw_ec_alignx.pyx":697 + * line = '{}\t{}\n'.format(i, sco) + * outf.write(line) + * elif type(testval) == float: # <<<<<<<<<<<<<< + * for i, sco in rdict.items(): + * i = indices[i] + */ + goto __pyx_L4; + } + + /* "nw_ec_alignx.pyx":705 + * outf.write(line) + * + * elif not indices and not indices2: # <<<<<<<<<<<<<< + * for i, dic in rdict.items(): + * for j, sco in dic.items(): + */ + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_indices); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 705, __pyx_L1_error) + __pyx_t_1 = (!__pyx_t_7); + if (__pyx_t_1) { + } else { + __pyx_t_2 = __pyx_t_1; + goto __pyx_L13_bool_binop_done; + } + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_indices2); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 705, __pyx_L1_error) + __pyx_t_7 = (!__pyx_t_1); + __pyx_t_2 = __pyx_t_7; + __pyx_L13_bool_binop_done:; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":706 + * + * elif not indices and not indices2: + * for i, dic in rdict.items(): # <<<<<<<<<<<<<< + * for j, sco in dic.items(): + * if type(sco) is tuple: + */ + __pyx_t_8 = 0; + if (unlikely(__pyx_v_rdict == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); + __PYX_ERR(0, 706, __pyx_L1_error) + } + __pyx_t_4 = __Pyx_dict_iterator(__pyx_v_rdict, 0, __pyx_n_s_items, (&__pyx_t_9), (&__pyx_t_10)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 706, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __pyx_t_5 = __pyx_t_4; + __pyx_t_4 = 0; + while (1) { + __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_5, __pyx_t_9, &__pyx_t_8, &__pyx_t_4, &__pyx_t_3, NULL, __pyx_t_10); + if (unlikely(__pyx_t_11 == 0)) break; + if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 706, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GOTREF(__pyx_t_3); + __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_4); + __pyx_t_4 = 0; + __Pyx_XDECREF_SET(__pyx_v_dic, __pyx_t_3); + __pyx_t_3 = 0; + + /* "nw_ec_alignx.pyx":707 + * elif not indices and not indices2: + * for i, dic in rdict.items(): + * for j, sco in dic.items(): # <<<<<<<<<<<<<< + * if type(sco) is tuple: + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + */ + __pyx_t_12 = 0; + if (unlikely(__pyx_v_dic == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); + __PYX_ERR(0, 707, __pyx_L1_error) + } + __pyx_t_4 = __Pyx_dict_iterator(__pyx_v_dic, 0, __pyx_n_s_items, (&__pyx_t_15), (&__pyx_t_11)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 707, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); + __pyx_t_3 = __pyx_t_4; + __pyx_t_4 = 0; + while (1) { + __pyx_t_16 = __Pyx_dict_iter_next(__pyx_t_3, __pyx_t_15, &__pyx_t_12, &__pyx_t_4, &__pyx_t_14, NULL, __pyx_t_11); + if (unlikely(__pyx_t_16 == 0)) break; + if (unlikely(__pyx_t_16 == -1)) __PYX_ERR(0, 707, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GOTREF(__pyx_t_14); + __Pyx_XDECREF_SET(__pyx_v_j, __pyx_t_4); + __pyx_t_4 = 0; + __Pyx_XDECREF_SET(__pyx_v_sco, __pyx_t_14); + __pyx_t_14 = 0; + + /* "nw_ec_alignx.pyx":708 + * for i, dic in rdict.items(): + * for j, sco in dic.items(): + * if type(sco) is tuple: # <<<<<<<<<<<<<< + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\t{}\n'.format(i, j, sco) + */ + __pyx_t_2 = (((PyObject *)Py_TYPE(__pyx_v_sco)) == ((PyObject *)(&PyTuple_Type))); + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":709 + * for j, sco in dic.items(): + * if type(sco) is tuple: + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" # <<<<<<<<<<<<<< + * line = '{}\t{}\t{}\n'.format(i, j, sco) + * outf.write(line) + */ + __pyx_t_14 = PyTuple_New(5); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 709, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_17 = 0; + __pyx_t_13 = 127; + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sco, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 709, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_18 = __Pyx_PyObject_FormatSimple(__pyx_t_4, __pyx_empty_unicode); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 709, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_18); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_18) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_18) : __pyx_t_13; + __pyx_t_17 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_18); + __Pyx_GIVEREF(__pyx_t_18); + PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_18); + __pyx_t_18 = 0; + __Pyx_INCREF(__pyx_kp_u__26); + __pyx_t_17 += 1; + __Pyx_GIVEREF(__pyx_kp_u__26); + PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_kp_u__26); + __pyx_t_18 = __Pyx_GetItemInt(__pyx_v_sco, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 709, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_18); + __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_t_18, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 709, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_13; + __pyx_t_17 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_14, 2, __pyx_t_4); + __pyx_t_4 = 0; + __Pyx_INCREF(__pyx_kp_u__26); + __pyx_t_17 += 1; + __Pyx_GIVEREF(__pyx_kp_u__26); + PyTuple_SET_ITEM(__pyx_t_14, 3, __pyx_kp_u__26); + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sco, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 709, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_18 = __Pyx_PyObject_FormatSimple(__pyx_t_4, __pyx_empty_unicode); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 709, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_18); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_18) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_18) : __pyx_t_13; + __pyx_t_17 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_18); + __Pyx_GIVEREF(__pyx_t_18); + PyTuple_SET_ITEM(__pyx_t_14, 4, __pyx_t_18); + __pyx_t_18 = 0; + __pyx_t_18 = __Pyx_PyUnicode_Join(__pyx_t_14, 5, __pyx_t_17, __pyx_t_13); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 709, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_18); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF_SET(__pyx_v_sco, __pyx_t_18); + __pyx_t_18 = 0; + + /* "nw_ec_alignx.pyx":708 + * for i, dic in rdict.items(): + * for j, sco in dic.items(): + * if type(sco) is tuple: # <<<<<<<<<<<<<< + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\t{}\n'.format(i, j, sco) + */ + } + + /* "nw_ec_alignx.pyx":710 + * if type(sco) is tuple: + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\t{}\n'.format(i, j, sco) # <<<<<<<<<<<<<< + * outf.write(line) + * elif indices and not indices2: + */ + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u__28, __pyx_n_s_format); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 710, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_4 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_14))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_14); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_14, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_4, __pyx_v_i, __pyx_v_j, __pyx_v_sco}; + __pyx_t_18 = __Pyx_PyObject_FastCall(__pyx_t_14, __pyx_callargs+1-__pyx_t_6, 3+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 710, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_18); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + } + __Pyx_XDECREF_SET(__pyx_v_line, __pyx_t_18); + __pyx_t_18 = 0; + + /* "nw_ec_alignx.pyx":711 + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\t{}\n'.format(i, j, sco) + * outf.write(line) # <<<<<<<<<<<<<< + * elif indices and not indices2: + * for i, dic in rdict.items(): + */ + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_outf, __pyx_n_s_write); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 711, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_4 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_14))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_14); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_14, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_line}; + __pyx_t_18 = __Pyx_PyObject_FastCall(__pyx_t_14, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 711, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_18); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + } + __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "nw_ec_alignx.pyx":705 + * outf.write(line) + * + * elif not indices and not indices2: # <<<<<<<<<<<<<< + * for i, dic in rdict.items(): + * for j, sco in dic.items(): + */ + goto __pyx_L4; + } + + /* "nw_ec_alignx.pyx":712 + * line = '{}\t{}\t{}\n'.format(i, j, sco) + * outf.write(line) + * elif indices and not indices2: # <<<<<<<<<<<<<< + * for i, dic in rdict.items(): + * for j, sco in dic.items(): + */ + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_indices); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 712, __pyx_L1_error) + if (__pyx_t_7) { + } else { + __pyx_t_2 = __pyx_t_7; + goto __pyx_L20_bool_binop_done; + } + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_indices2); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 712, __pyx_L1_error) + __pyx_t_1 = (!__pyx_t_7); + __pyx_t_2 = __pyx_t_1; + __pyx_L20_bool_binop_done:; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":713 + * outf.write(line) + * elif indices and not indices2: + * for i, dic in rdict.items(): # <<<<<<<<<<<<<< + * for j, sco in dic.items(): + * ind1 = indices[i] + */ + __pyx_t_9 = 0; + if (unlikely(__pyx_v_rdict == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); + __PYX_ERR(0, 713, __pyx_L1_error) + } + __pyx_t_3 = __Pyx_dict_iterator(__pyx_v_rdict, 0, __pyx_n_s_items, (&__pyx_t_8), (&__pyx_t_10)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 713, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_5); + __pyx_t_5 = __pyx_t_3; + __pyx_t_3 = 0; + while (1) { + __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_5, __pyx_t_8, &__pyx_t_9, &__pyx_t_3, &__pyx_t_18, NULL, __pyx_t_10); + if (unlikely(__pyx_t_11 == 0)) break; + if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 713, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GOTREF(__pyx_t_18); + __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_3); + __pyx_t_3 = 0; + __Pyx_XDECREF_SET(__pyx_v_dic, __pyx_t_18); + __pyx_t_18 = 0; + + /* "nw_ec_alignx.pyx":714 + * elif indices and not indices2: + * for i, dic in rdict.items(): + * for j, sco in dic.items(): # <<<<<<<<<<<<<< + * ind1 = indices[i] + * ind2 = j + */ + __pyx_t_15 = 0; + if (unlikely(__pyx_v_dic == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); + __PYX_ERR(0, 714, __pyx_L1_error) + } + __pyx_t_3 = __Pyx_dict_iterator(__pyx_v_dic, 0, __pyx_n_s_items, (&__pyx_t_12), (&__pyx_t_11)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 714, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_18); + __pyx_t_18 = __pyx_t_3; + __pyx_t_3 = 0; + while (1) { + __pyx_t_16 = __Pyx_dict_iter_next(__pyx_t_18, __pyx_t_12, &__pyx_t_15, &__pyx_t_3, &__pyx_t_14, NULL, __pyx_t_11); + if (unlikely(__pyx_t_16 == 0)) break; + if (unlikely(__pyx_t_16 == -1)) __PYX_ERR(0, 714, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GOTREF(__pyx_t_14); + __Pyx_XDECREF_SET(__pyx_v_j, __pyx_t_3); + __pyx_t_3 = 0; + __Pyx_XDECREF_SET(__pyx_v_sco, __pyx_t_14); + __pyx_t_14 = 0; + + /* "nw_ec_alignx.pyx":715 + * for i, dic in rdict.items(): + * for j, sco in dic.items(): + * ind1 = indices[i] # <<<<<<<<<<<<<< + * ind2 = j + * if type(sco) is tuple: + */ + __pyx_t_14 = __Pyx_PyObject_GetItem(__pyx_v_indices, __pyx_v_i); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 715, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_XDECREF_SET(__pyx_v_ind1, __pyx_t_14); + __pyx_t_14 = 0; + + /* "nw_ec_alignx.pyx":716 + * for j, sco in dic.items(): + * ind1 = indices[i] + * ind2 = j # <<<<<<<<<<<<<< + * if type(sco) is tuple: + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + */ + __Pyx_INCREF(__pyx_v_j); + __Pyx_XDECREF_SET(__pyx_v_ind2, __pyx_v_j); + + /* "nw_ec_alignx.pyx":717 + * ind1 = indices[i] + * ind2 = j + * if type(sco) is tuple: # <<<<<<<<<<<<<< + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\t{}\n'.format(ind1, ind2, sco) + */ + __pyx_t_2 = (((PyObject *)Py_TYPE(__pyx_v_sco)) == ((PyObject *)(&PyTuple_Type))); + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":718 + * ind2 = j + * if type(sco) is tuple: + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" # <<<<<<<<<<<<<< + * line = '{}\t{}\t{}\n'.format(ind1, ind2, sco) + * outf.write(line) + */ + __pyx_t_14 = PyTuple_New(5); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 718, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_17 = 0; + __pyx_t_13 = 127; + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_sco, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 718, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_t_3, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 718, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_13; + __pyx_t_17 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_4); + __pyx_t_4 = 0; + __Pyx_INCREF(__pyx_kp_u__26); + __pyx_t_17 += 1; + __Pyx_GIVEREF(__pyx_kp_u__26); + PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_kp_u__26); + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sco, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 718, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_t_4, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 718, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_13; + __pyx_t_17 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_14, 2, __pyx_t_3); + __pyx_t_3 = 0; + __Pyx_INCREF(__pyx_kp_u__26); + __pyx_t_17 += 1; + __Pyx_GIVEREF(__pyx_kp_u__26); + PyTuple_SET_ITEM(__pyx_t_14, 3, __pyx_kp_u__26); + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_sco, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 718, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_t_3, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 718, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_13; + __pyx_t_17 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_14, 4, __pyx_t_4); + __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_14, 5, __pyx_t_17, __pyx_t_13); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 718, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF_SET(__pyx_v_sco, __pyx_t_4); + __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":717 + * ind1 = indices[i] + * ind2 = j + * if type(sco) is tuple: # <<<<<<<<<<<<<< + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\t{}\n'.format(ind1, ind2, sco) + */ + } + + /* "nw_ec_alignx.pyx":719 + * if type(sco) is tuple: + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\t{}\n'.format(ind1, ind2, sco) # <<<<<<<<<<<<<< + * outf.write(line) + * elif not indices and indices2: + */ + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u__28, __pyx_n_s_format); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 719, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_3 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_14))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_14); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_14, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_3, __pyx_v_ind1, __pyx_v_ind2, __pyx_v_sco}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_14, __pyx_callargs+1-__pyx_t_6, 3+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 719, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + } + __Pyx_XDECREF_SET(__pyx_v_line, __pyx_t_4); + __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":720 + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\t{}\n'.format(ind1, ind2, sco) + * outf.write(line) # <<<<<<<<<<<<<< + * elif not indices and indices2: + * for i, dic in rdict.items(): + */ + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_outf, __pyx_n_s_write); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 720, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_3 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_14))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_14); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_14, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_line}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_14, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 720, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; + } + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "nw_ec_alignx.pyx":712 + * line = '{}\t{}\t{}\n'.format(i, j, sco) + * outf.write(line) + * elif indices and not indices2: # <<<<<<<<<<<<<< + * for i, dic in rdict.items(): + * for j, sco in dic.items(): + */ + goto __pyx_L4; + } + + /* "nw_ec_alignx.pyx":721 + * line = '{}\t{}\t{}\n'.format(ind1, ind2, sco) + * outf.write(line) + * elif not indices and indices2: # <<<<<<<<<<<<<< + * for i, dic in rdict.items(): + * for j, sco in dic.items(): + */ + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_indices); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 721, __pyx_L1_error) + __pyx_t_7 = (!__pyx_t_1); + if (__pyx_t_7) { + } else { + __pyx_t_2 = __pyx_t_7; + goto __pyx_L27_bool_binop_done; + } + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_indices2); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 721, __pyx_L1_error) + __pyx_t_2 = __pyx_t_7; + __pyx_L27_bool_binop_done:; + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":722 + * outf.write(line) + * elif not indices and indices2: + * for i, dic in rdict.items(): # <<<<<<<<<<<<<< + * for j, sco in dic.items(): + * ind1 = i + */ + __pyx_t_8 = 0; + if (unlikely(__pyx_v_rdict == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); + __PYX_ERR(0, 722, __pyx_L1_error) + } + __pyx_t_18 = __Pyx_dict_iterator(__pyx_v_rdict, 0, __pyx_n_s_items, (&__pyx_t_9), (&__pyx_t_10)); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 722, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_18); + __Pyx_XDECREF(__pyx_t_5); + __pyx_t_5 = __pyx_t_18; + __pyx_t_18 = 0; + while (1) { + __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_5, __pyx_t_9, &__pyx_t_8, &__pyx_t_18, &__pyx_t_4, NULL, __pyx_t_10); + if (unlikely(__pyx_t_11 == 0)) break; + if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 722, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_18); + __Pyx_GOTREF(__pyx_t_4); + __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_18); + __pyx_t_18 = 0; + __Pyx_XDECREF_SET(__pyx_v_dic, __pyx_t_4); + __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":723 + * elif not indices and indices2: + * for i, dic in rdict.items(): + * for j, sco in dic.items(): # <<<<<<<<<<<<<< + * ind1 = i + * ind2 = indices2[j] + */ + __pyx_t_12 = 0; + if (unlikely(__pyx_v_dic == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); + __PYX_ERR(0, 723, __pyx_L1_error) + } + __pyx_t_18 = __Pyx_dict_iterator(__pyx_v_dic, 0, __pyx_n_s_items, (&__pyx_t_15), (&__pyx_t_11)); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 723, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_18); + __Pyx_XDECREF(__pyx_t_4); + __pyx_t_4 = __pyx_t_18; + __pyx_t_18 = 0; + while (1) { + __pyx_t_16 = __Pyx_dict_iter_next(__pyx_t_4, __pyx_t_15, &__pyx_t_12, &__pyx_t_18, &__pyx_t_14, NULL, __pyx_t_11); + if (unlikely(__pyx_t_16 == 0)) break; + if (unlikely(__pyx_t_16 == -1)) __PYX_ERR(0, 723, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_18); + __Pyx_GOTREF(__pyx_t_14); + __Pyx_XDECREF_SET(__pyx_v_j, __pyx_t_18); + __pyx_t_18 = 0; + __Pyx_XDECREF_SET(__pyx_v_sco, __pyx_t_14); + __pyx_t_14 = 0; + + /* "nw_ec_alignx.pyx":724 + * for i, dic in rdict.items(): + * for j, sco in dic.items(): + * ind1 = i # <<<<<<<<<<<<<< + * ind2 = indices2[j] + * if type(sco) is tuple: + */ + __Pyx_INCREF(__pyx_v_i); + __Pyx_XDECREF_SET(__pyx_v_ind1, __pyx_v_i); + + /* "nw_ec_alignx.pyx":725 + * for j, sco in dic.items(): + * ind1 = i + * ind2 = indices2[j] # <<<<<<<<<<<<<< + * if type(sco) is tuple: + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + */ + __pyx_t_14 = __Pyx_PyObject_GetItem(__pyx_v_indices2, __pyx_v_j); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 725, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_XDECREF_SET(__pyx_v_ind2, __pyx_t_14); + __pyx_t_14 = 0; + + /* "nw_ec_alignx.pyx":726 + * ind1 = i + * ind2 = indices2[j] + * if type(sco) is tuple: # <<<<<<<<<<<<<< + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\t{}\n'.format(ind1, ind2, sco) + */ + __pyx_t_2 = (((PyObject *)Py_TYPE(__pyx_v_sco)) == ((PyObject *)(&PyTuple_Type))); + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":727 + * ind2 = indices2[j] + * if type(sco) is tuple: + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" # <<<<<<<<<<<<<< + * line = '{}\t{}\t{}\n'.format(ind1, ind2, sco) + * outf.write(line) + */ + __pyx_t_14 = PyTuple_New(5); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 727, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_17 = 0; + __pyx_t_13 = 127; + __pyx_t_18 = __Pyx_GetItemInt(__pyx_v_sco, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 727, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_18); + __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_t_18, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 727, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_13; + __pyx_t_17 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_3); + __pyx_t_3 = 0; + __Pyx_INCREF(__pyx_kp_u__26); + __pyx_t_17 += 1; + __Pyx_GIVEREF(__pyx_kp_u__26); + PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_kp_u__26); + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_sco, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 727, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_18 = __Pyx_PyObject_FormatSimple(__pyx_t_3, __pyx_empty_unicode); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 727, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_18); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_18) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_18) : __pyx_t_13; + __pyx_t_17 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_18); + __Pyx_GIVEREF(__pyx_t_18); + PyTuple_SET_ITEM(__pyx_t_14, 2, __pyx_t_18); + __pyx_t_18 = 0; + __Pyx_INCREF(__pyx_kp_u__26); + __pyx_t_17 += 1; + __Pyx_GIVEREF(__pyx_kp_u__26); + PyTuple_SET_ITEM(__pyx_t_14, 3, __pyx_kp_u__26); + __pyx_t_18 = __Pyx_GetItemInt(__pyx_v_sco, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 727, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_18); + __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_t_18, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 727, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_13; + __pyx_t_17 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_14, 4, __pyx_t_3); + __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_14, 5, __pyx_t_17, __pyx_t_13); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 727, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF_SET(__pyx_v_sco, __pyx_t_3); + __pyx_t_3 = 0; + + /* "nw_ec_alignx.pyx":726 + * ind1 = i + * ind2 = indices2[j] + * if type(sco) is tuple: # <<<<<<<<<<<<<< + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\t{}\n'.format(ind1, ind2, sco) + */ + } + + /* "nw_ec_alignx.pyx":728 + * if type(sco) is tuple: + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\t{}\n'.format(ind1, ind2, sco) # <<<<<<<<<<<<<< + * outf.write(line) + * else: + */ + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u__28, __pyx_n_s_format); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 728, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_18 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_14))) { + __pyx_t_18 = PyMethod_GET_SELF(__pyx_t_14); + if (likely(__pyx_t_18)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14); + __Pyx_INCREF(__pyx_t_18); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_14, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_18, __pyx_v_ind1, __pyx_v_ind2, __pyx_v_sco}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_14, __pyx_callargs+1-__pyx_t_6, 3+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 728, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + } + __Pyx_XDECREF_SET(__pyx_v_line, __pyx_t_3); + __pyx_t_3 = 0; + + /* "nw_ec_alignx.pyx":729 + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\t{}\n'.format(ind1, ind2, sco) + * outf.write(line) # <<<<<<<<<<<<<< + * else: + * for i, dic in rdict.items(): + */ + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_outf, __pyx_n_s_write); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 729, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_18 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_14))) { + __pyx_t_18 = PyMethod_GET_SELF(__pyx_t_14); + if (likely(__pyx_t_18)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14); + __Pyx_INCREF(__pyx_t_18); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_14, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_18, __pyx_v_line}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_14, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 729, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "nw_ec_alignx.pyx":721 + * line = '{}\t{}\t{}\n'.format(ind1, ind2, sco) + * outf.write(line) + * elif not indices and indices2: # <<<<<<<<<<<<<< + * for i, dic in rdict.items(): + * for j, sco in dic.items(): + */ + goto __pyx_L4; + } + + /* "nw_ec_alignx.pyx":731 + * outf.write(line) + * else: + * for i, dic in rdict.items(): # <<<<<<<<<<<<<< + * for j, sco in dic.items(): + * ind1 = indices[i] + */ + /*else*/ { + __pyx_t_9 = 0; + if (unlikely(__pyx_v_rdict == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); + __PYX_ERR(0, 731, __pyx_L1_error) + } + __pyx_t_4 = __Pyx_dict_iterator(__pyx_v_rdict, 0, __pyx_n_s_items, (&__pyx_t_8), (&__pyx_t_10)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 731, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __pyx_t_5 = __pyx_t_4; + __pyx_t_4 = 0; + while (1) { + __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_5, __pyx_t_8, &__pyx_t_9, &__pyx_t_4, &__pyx_t_3, NULL, __pyx_t_10); + if (unlikely(__pyx_t_11 == 0)) break; + if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 731, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GOTREF(__pyx_t_3); + __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_4); + __pyx_t_4 = 0; + __Pyx_XDECREF_SET(__pyx_v_dic, __pyx_t_3); + __pyx_t_3 = 0; + + /* "nw_ec_alignx.pyx":732 + * else: + * for i, dic in rdict.items(): + * for j, sco in dic.items(): # <<<<<<<<<<<<<< + * ind1 = indices[i] + * ind2 = indices2[j] + */ + __pyx_t_15 = 0; + if (unlikely(__pyx_v_dic == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); + __PYX_ERR(0, 732, __pyx_L1_error) + } + __pyx_t_4 = __Pyx_dict_iterator(__pyx_v_dic, 0, __pyx_n_s_items, (&__pyx_t_12), (&__pyx_t_11)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 732, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); + __pyx_t_3 = __pyx_t_4; + __pyx_t_4 = 0; + while (1) { + __pyx_t_16 = __Pyx_dict_iter_next(__pyx_t_3, __pyx_t_12, &__pyx_t_15, &__pyx_t_4, &__pyx_t_14, NULL, __pyx_t_11); + if (unlikely(__pyx_t_16 == 0)) break; + if (unlikely(__pyx_t_16 == -1)) __PYX_ERR(0, 732, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GOTREF(__pyx_t_14); + __Pyx_XDECREF_SET(__pyx_v_j, __pyx_t_4); + __pyx_t_4 = 0; + __Pyx_XDECREF_SET(__pyx_v_sco, __pyx_t_14); + __pyx_t_14 = 0; + + /* "nw_ec_alignx.pyx":733 + * for i, dic in rdict.items(): + * for j, sco in dic.items(): + * ind1 = indices[i] # <<<<<<<<<<<<<< + * ind2 = indices2[j] + * if type(sco) is tuple: + */ + __pyx_t_14 = __Pyx_PyObject_GetItem(__pyx_v_indices, __pyx_v_i); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 733, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_XDECREF_SET(__pyx_v_ind1, __pyx_t_14); + __pyx_t_14 = 0; + + /* "nw_ec_alignx.pyx":734 + * for j, sco in dic.items(): + * ind1 = indices[i] + * ind2 = indices2[j] # <<<<<<<<<<<<<< + * if type(sco) is tuple: + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + */ + __pyx_t_14 = __Pyx_PyObject_GetItem(__pyx_v_indices2, __pyx_v_j); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 734, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_XDECREF_SET(__pyx_v_ind2, __pyx_t_14); + __pyx_t_14 = 0; + + /* "nw_ec_alignx.pyx":735 + * ind1 = indices[i] + * ind2 = indices2[j] + * if type(sco) is tuple: # <<<<<<<<<<<<<< + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\t{}\n'.format(ind1, ind2, sco) + */ + __pyx_t_2 = (((PyObject *)Py_TYPE(__pyx_v_sco)) == ((PyObject *)(&PyTuple_Type))); + if (__pyx_t_2) { + + /* "nw_ec_alignx.pyx":736 + * ind2 = indices2[j] + * if type(sco) is tuple: + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" # <<<<<<<<<<<<<< + * line = '{}\t{}\t{}\n'.format(ind1, ind2, sco) + * outf.write(line) + */ + __pyx_t_14 = PyTuple_New(5); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 736, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_17 = 0; + __pyx_t_13 = 127; + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sco, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 736, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_18 = __Pyx_PyObject_FormatSimple(__pyx_t_4, __pyx_empty_unicode); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 736, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_18); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_18) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_18) : __pyx_t_13; + __pyx_t_17 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_18); + __Pyx_GIVEREF(__pyx_t_18); + PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_18); + __pyx_t_18 = 0; + __Pyx_INCREF(__pyx_kp_u__26); + __pyx_t_17 += 1; + __Pyx_GIVEREF(__pyx_kp_u__26); + PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_kp_u__26); + __pyx_t_18 = __Pyx_GetItemInt(__pyx_v_sco, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 736, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_18); + __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_t_18, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 736, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_13; + __pyx_t_17 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_14, 2, __pyx_t_4); + __pyx_t_4 = 0; + __Pyx_INCREF(__pyx_kp_u__26); + __pyx_t_17 += 1; + __Pyx_GIVEREF(__pyx_kp_u__26); + PyTuple_SET_ITEM(__pyx_t_14, 3, __pyx_kp_u__26); + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sco, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 736, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_18 = __Pyx_PyObject_FormatSimple(__pyx_t_4, __pyx_empty_unicode); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 736, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_18); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_18) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_18) : __pyx_t_13; + __pyx_t_17 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_18); + __Pyx_GIVEREF(__pyx_t_18); + PyTuple_SET_ITEM(__pyx_t_14, 4, __pyx_t_18); + __pyx_t_18 = 0; + __pyx_t_18 = __Pyx_PyUnicode_Join(__pyx_t_14, 5, __pyx_t_17, __pyx_t_13); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 736, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_18); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF_SET(__pyx_v_sco, __pyx_t_18); + __pyx_t_18 = 0; + + /* "nw_ec_alignx.pyx":735 + * ind1 = indices[i] + * ind2 = indices2[j] + * if type(sco) is tuple: # <<<<<<<<<<<<<< + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\t{}\n'.format(ind1, ind2, sco) + */ + } + + /* "nw_ec_alignx.pyx":737 + * if type(sco) is tuple: + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\t{}\n'.format(ind1, ind2, sco) # <<<<<<<<<<<<<< + * outf.write(line) + * outf.close() + */ + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u__28, __pyx_n_s_format); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 737, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_4 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_14))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_14); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_14, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_4, __pyx_v_ind1, __pyx_v_ind2, __pyx_v_sco}; + __pyx_t_18 = __Pyx_PyObject_FastCall(__pyx_t_14, __pyx_callargs+1-__pyx_t_6, 3+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 737, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_18); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + } + __Pyx_XDECREF_SET(__pyx_v_line, __pyx_t_18); + __pyx_t_18 = 0; + + /* "nw_ec_alignx.pyx":738 + * sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + * line = '{}\t{}\t{}\n'.format(ind1, ind2, sco) + * outf.write(line) # <<<<<<<<<<<<<< + * outf.close() + */ + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_outf, __pyx_n_s_write); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 738, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_4 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_14))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_14); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_14, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_line}; + __pyx_t_18 = __Pyx_PyObject_FastCall(__pyx_t_14, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 738, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_18); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + } + __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __pyx_L4:; + + /* "nw_ec_alignx.pyx":739 + * line = '{}\t{}\t{}\n'.format(ind1, ind2, sco) + * outf.write(line) + * outf.close() # <<<<<<<<<<<<<< + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_outf, __pyx_n_s_close); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 739, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_18 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_18 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_18)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_18); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_18, NULL}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_6, 0+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 739, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "nw_ec_alignx.pyx":673 + * + * + * def store_dict(fname, rdict, indices=None, indices2=None): # <<<<<<<<<<<<<< + * """Stores the scores of the alignments in a tab separated text + * file. The first column corresponds to the first sequence index + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_14); + __Pyx_XDECREF(__pyx_t_18); + __Pyx_AddTraceback("nw_ec_alignx.store_dict", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_outf); + __Pyx_XDECREF(__pyx_v_testval); + __Pyx_XDECREF(__pyx_v_i); + __Pyx_XDECREF(__pyx_v_sco); + __Pyx_XDECREF(__pyx_v_line); + __Pyx_XDECREF(__pyx_v_dic); + __Pyx_XDECREF(__pyx_v_j); + __Pyx_XDECREF(__pyx_v_ind1); + __Pyx_XDECREF(__pyx_v_ind2); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyMethodDef __pyx_methods[] = { + {0, 0, 0, 0} +}; +#ifndef CYTHON_SMALL_CODE +#if defined(__clang__) + #define CYTHON_SMALL_CODE +#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) + #define CYTHON_SMALL_CODE __attribute__((cold)) +#else + #define CYTHON_SMALL_CODE +#endif +#endif +/* #### Code section: pystring_table ### */ + +static int __Pyx_CreateStringTabAndInitStrings(void) { + __Pyx_StringTabEntry __pyx_string_tab[] = { + {&__pyx_n_s_Array, __pyx_k_Array, sizeof(__pyx_k_Array), 0, 0, 1, 1}, + {&__pyx_n_s_AssertionError, __pyx_k_AssertionError, sizeof(__pyx_k_AssertionError), 0, 0, 1, 1}, + {&__pyx_n_s_DTYPE, __pyx_k_DTYPE, sizeof(__pyx_k_DTYPE), 0, 0, 1, 1}, + {&__pyx_n_s_DTYPEF, __pyx_k_DTYPEF, sizeof(__pyx_k_DTYPEF), 0, 0, 1, 1}, + {&__pyx_n_s_FastNW, __pyx_k_FastNW, sizeof(__pyx_k_FastNW), 0, 0, 1, 1}, + {&__pyx_n_s_ImportError, __pyx_k_ImportError, sizeof(__pyx_k_ImportError), 0, 0, 1, 1}, + {&__pyx_n_s_NW, __pyx_k_NW, sizeof(__pyx_k_NW), 0, 0, 1, 1}, + {&__pyx_n_s_Pool, __pyx_k_Pool, sizeof(__pyx_k_Pool), 0, 0, 1, 1}, + {&__pyx_kp_u_The_aligned_sequences_must_be_of, __pyx_k_The_aligned_sequences_must_be_of, sizeof(__pyx_k_The_aligned_sequences_must_be_of), 0, 1, 0, 0}, + {&__pyx_kp_u__11, __pyx_k__11, sizeof(__pyx_k__11), 0, 1, 0, 0}, + {&__pyx_kp_u__26, __pyx_k__26, sizeof(__pyx_k__26), 0, 1, 0, 0}, + {&__pyx_kp_u__27, __pyx_k__27, sizeof(__pyx_k__27), 0, 1, 0, 0}, + {&__pyx_kp_u__28, __pyx_k__28, sizeof(__pyx_k__28), 0, 1, 0, 0}, + {&__pyx_n_s__29, __pyx_k__29, sizeof(__pyx_k__29), 0, 0, 1, 1}, + {&__pyx_kp_u__3, __pyx_k__3, sizeof(__pyx_k__3), 0, 1, 0, 0}, + {&__pyx_kp_u__30, __pyx_k__30, sizeof(__pyx_k__30), 0, 1, 0, 0}, + {&__pyx_kp_u__4, __pyx_k__4, sizeof(__pyx_k__4), 0, 1, 0, 0}, + {&__pyx_kp_u__5, __pyx_k__5, sizeof(__pyx_k__5), 0, 1, 0, 0}, + {&__pyx_n_s__59, __pyx_k__59, sizeof(__pyx_k__59), 0, 0, 1, 1}, + {&__pyx_n_s_align_func, __pyx_k_align_func, sizeof(__pyx_k_align_func), 0, 0, 1, 1}, + {&__pyx_n_s_alldb_comp, __pyx_k_alldb_comp, sizeof(__pyx_k_alldb_comp), 0, 0, 1, 1}, + {&__pyx_n_s_alldb_shared, __pyx_k_alldb_shared, sizeof(__pyx_k_alldb_shared), 0, 0, 1, 1}, + {&__pyx_n_s_arr, __pyx_k_arr, sizeof(__pyx_k_arr), 0, 0, 1, 1}, + {&__pyx_n_s_arrow, __pyx_k_arrow, sizeof(__pyx_k_arrow), 0, 0, 1, 1}, + {&__pyx_n_s_aseq1, __pyx_k_aseq1, sizeof(__pyx_k_aseq1), 0, 0, 1, 1}, + {&__pyx_n_s_aseq2, __pyx_k_aseq2, sizeof(__pyx_k_aseq2), 0, 0, 1, 1}, + {&__pyx_n_s_asyncio_coroutines, __pyx_k_asyncio_coroutines, sizeof(__pyx_k_asyncio_coroutines), 0, 0, 1, 1}, + {&__pyx_n_s_backtrace, __pyx_k_backtrace, sizeof(__pyx_k_backtrace), 0, 0, 1, 1}, + {&__pyx_n_s_bblock, __pyx_k_bblock, sizeof(__pyx_k_bblock), 0, 0, 1, 1}, + {&__pyx_n_s_binit, __pyx_k_binit, sizeof(__pyx_k_binit), 0, 0, 1, 1}, + {&__pyx_n_s_buffering, __pyx_k_buffering, sizeof(__pyx_k_buffering), 0, 0, 1, 1}, + {&__pyx_n_s_c_float, __pyx_k_c_float, sizeof(__pyx_k_c_float), 0, 0, 1, 1}, + {&__pyx_n_s_chunksize, __pyx_k_chunksize, sizeof(__pyx_k_chunksize), 0, 0, 1, 1}, + {&__pyx_n_s_class_getitem, __pyx_k_class_getitem, sizeof(__pyx_k_class_getitem), 0, 0, 1, 1}, + {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1}, + {&__pyx_n_s_close, __pyx_k_close, sizeof(__pyx_k_close), 0, 0, 1, 1}, + {&__pyx_n_s_create_global_arr, __pyx_k_create_global_arr, sizeof(__pyx_k_create_global_arr), 0, 0, 1, 1}, + {&__pyx_n_s_ctypes, __pyx_k_ctypes, sizeof(__pyx_k_ctypes), 0, 0, 1, 1}, + {&__pyx_n_s_d, __pyx_k_d, sizeof(__pyx_k_d), 0, 0, 1, 1}, + {&__pyx_n_s_db_vs_db, __pyx_k_db_vs_db, sizeof(__pyx_k_db_vs_db), 0, 0, 1, 1}, + {&__pyx_n_s_decs, __pyx_k_decs, sizeof(__pyx_k_decs), 0, 0, 1, 1}, + {&__pyx_n_s_dic, __pyx_k_dic, sizeof(__pyx_k_dic), 0, 0, 1, 1}, + {&__pyx_n_s_dotstr, __pyx_k_dotstr, sizeof(__pyx_k_dotstr), 0, 0, 1, 1}, + {&__pyx_n_s_dtype, __pyx_k_dtype, sizeof(__pyx_k_dtype), 0, 0, 1, 1}, + {&__pyx_n_s_ec1, __pyx_k_ec1, sizeof(__pyx_k_ec1), 0, 0, 1, 1}, + {&__pyx_n_s_ec2, __pyx_k_ec2, sizeof(__pyx_k_ec2), 0, 0, 1, 1}, + {&__pyx_n_s_eci, __pyx_k_eci, sizeof(__pyx_k_eci), 0, 0, 1, 1}, + {&__pyx_n_s_ecj, __pyx_k_ecj, sizeof(__pyx_k_ecj), 0, 0, 1, 1}, + {&__pyx_n_s_ecs, __pyx_k_ecs, sizeof(__pyx_k_ecs), 0, 0, 1, 1}, + {&__pyx_n_s_f, __pyx_k_f, sizeof(__pyx_k_f), 0, 0, 1, 1}, + {&__pyx_n_s_fhomo, __pyx_k_fhomo, sizeof(__pyx_k_fhomo), 0, 0, 1, 1}, + {&__pyx_kp_u_fhomo_fpengap_must_sum_aprox_1, __pyx_k_fhomo_fpengap_must_sum_aprox_1, sizeof(__pyx_k_fhomo_fpengap_must_sum_aprox_1), 0, 1, 0, 0}, + {&__pyx_n_s_fi, __pyx_k_fi, sizeof(__pyx_k_fi), 0, 0, 1, 1}, + {&__pyx_n_s_fill_mat, __pyx_k_fill_mat, sizeof(__pyx_k_fill_mat), 0, 0, 1, 1}, + {&__pyx_n_s_float32, __pyx_k_float32, sizeof(__pyx_k_float32), 0, 0, 1, 1}, + {&__pyx_n_s_float64, __pyx_k_float64, sizeof(__pyx_k_float64), 0, 0, 1, 1}, + {&__pyx_n_s_fname, __pyx_k_fname, sizeof(__pyx_k_fname), 0, 0, 1, 1}, + {&__pyx_n_s_format, __pyx_k_format, sizeof(__pyx_k_format), 0, 0, 1, 1}, + {&__pyx_n_s_fpengap, __pyx_k_fpengap, sizeof(__pyx_k_fpengap), 0, 0, 1, 1}, + {&__pyx_n_s_frombuffer, __pyx_k_frombuffer, sizeof(__pyx_k_frombuffer), 0, 0, 1, 1}, + {&__pyx_n_s_functools, __pyx_k_functools, sizeof(__pyx_k_functools), 0, 0, 1, 1}, + {&__pyx_n_s_gap, __pyx_k_gap, sizeof(__pyx_k_gap), 0, 0, 1, 1}, + {&__pyx_n_s_gapstr, __pyx_k_gapstr, sizeof(__pyx_k_gapstr), 0, 0, 1, 1}, + {&__pyx_n_s_get_obj, __pyx_k_get_obj, sizeof(__pyx_k_get_obj), 0, 0, 1, 1}, + {&__pyx_n_s_h, __pyx_k_h, sizeof(__pyx_k_h), 0, 0, 1, 1}, + {&__pyx_n_s_homo, __pyx_k_homo, sizeof(__pyx_k_homo), 0, 0, 1, 1}, + {&__pyx_n_s_i, __pyx_k_i, sizeof(__pyx_k_i), 0, 0, 1, 1}, + {&__pyx_n_s_ii, __pyx_k_ii, sizeof(__pyx_k_ii), 0, 0, 1, 1}, + {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, + {&__pyx_n_s_ind, __pyx_k_ind, sizeof(__pyx_k_ind), 0, 0, 1, 1}, + {&__pyx_n_s_ind1, __pyx_k_ind1, sizeof(__pyx_k_ind1), 0, 0, 1, 1}, + {&__pyx_n_s_ind2, __pyx_k_ind2, sizeof(__pyx_k_ind2), 0, 0, 1, 1}, + {&__pyx_n_s_ind_vs_alldb, __pyx_k_ind_vs_alldb, sizeof(__pyx_k_ind_vs_alldb), 0, 0, 1, 1}, + {&__pyx_n_s_indices, __pyx_k_indices, sizeof(__pyx_k_indices), 0, 0, 1, 1}, + {&__pyx_n_s_indices2, __pyx_k_indices2, sizeof(__pyx_k_indices2), 0, 0, 1, 1}, + {&__pyx_n_s_initializing, __pyx_k_initializing, sizeof(__pyx_k_initializing), 0, 0, 1, 1}, + {&__pyx_n_s_int32, __pyx_k_int32, sizeof(__pyx_k_int32), 0, 0, 1, 1}, + {&__pyx_n_s_is_coroutine, __pyx_k_is_coroutine, sizeof(__pyx_k_is_coroutine), 0, 0, 1, 1}, + {&__pyx_n_s_items, __pyx_k_items, sizeof(__pyx_k_items), 0, 0, 1, 1}, + {&__pyx_n_s_j, __pyx_k_j, sizeof(__pyx_k_j), 0, 0, 1, 1}, + {&__pyx_n_s_k, __pyx_k_k, sizeof(__pyx_k_k), 0, 0, 1, 1}, + {&__pyx_n_s_l1, __pyx_k_l1, sizeof(__pyx_k_l1), 0, 0, 1, 1}, + {&__pyx_n_s_l2, __pyx_k_l2, sizeof(__pyx_k_l2), 0, 0, 1, 1}, + {&__pyx_n_s_length, __pyx_k_length, sizeof(__pyx_k_length), 0, 0, 1, 1}, + {&__pyx_n_s_li, __pyx_k_li, sizeof(__pyx_k_li), 0, 0, 1, 1}, + {&__pyx_n_s_line, __pyx_k_line, sizeof(__pyx_k_line), 0, 0, 1, 1}, + {&__pyx_n_s_list_vs_alldb, __pyx_k_list_vs_alldb, sizeof(__pyx_k_list_vs_alldb), 0, 0, 1, 1}, + {&__pyx_n_s_localize, __pyx_k_localize, sizeof(__pyx_k_localize), 0, 0, 1, 1}, + {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, + {&__pyx_n_s_map, __pyx_k_map, sizeof(__pyx_k_map), 0, 0, 1, 1}, + {&__pyx_n_s_mat, __pyx_k_mat, sizeof(__pyx_k_mat), 0, 0, 1, 1}, + {&__pyx_n_s_mini, __pyx_k_mini, sizeof(__pyx_k_mini), 0, 0, 1, 1}, + {&__pyx_n_s_minpos, __pyx_k_minpos, sizeof(__pyx_k_minpos), 0, 0, 1, 1}, + {&__pyx_n_s_multiprocessing, __pyx_k_multiprocessing, sizeof(__pyx_k_multiprocessing), 0, 0, 1, 1}, + {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, + {&__pyx_n_s_np, __pyx_k_np, sizeof(__pyx_k_np), 0, 0, 1, 1}, + {&__pyx_n_s_nproc, __pyx_k_nproc, sizeof(__pyx_k_nproc), 0, 0, 1, 1}, + {&__pyx_n_s_numpy, __pyx_k_numpy, sizeof(__pyx_k_numpy), 0, 0, 1, 1}, + {&__pyx_kp_u_numpy__core_multiarray_failed_to, __pyx_k_numpy__core_multiarray_failed_to, sizeof(__pyx_k_numpy__core_multiarray_failed_to), 0, 1, 0, 0}, + {&__pyx_kp_u_numpy__core_umath_failed_to_impo, __pyx_k_numpy__core_umath_failed_to_impo, sizeof(__pyx_k_numpy__core_umath_failed_to_impo), 0, 1, 0, 0}, + {&__pyx_n_s_nw_ec_alignx, __pyx_k_nw_ec_alignx, sizeof(__pyx_k_nw_ec_alignx), 0, 0, 1, 1}, + {&__pyx_kp_s_nw_ec_alignx_pyx, __pyx_k_nw_ec_alignx_pyx, sizeof(__pyx_k_nw_ec_alignx_pyx), 0, 0, 1, 0}, + {&__pyx_n_s_nws, __pyx_k_nws, sizeof(__pyx_k_nws), 0, 0, 1, 1}, + {&__pyx_n_s_ok, __pyx_k_ok, sizeof(__pyx_k_ok), 0, 0, 1, 1}, + {&__pyx_n_s_open, __pyx_k_open, sizeof(__pyx_k_open), 0, 0, 1, 1}, + {&__pyx_n_s_oscore, __pyx_k_oscore, sizeof(__pyx_k_oscore), 0, 0, 1, 1}, + {&__pyx_n_s_outf, __pyx_k_outf, sizeof(__pyx_k_outf), 0, 0, 1, 1}, + {&__pyx_n_s_partial, __pyx_k_partial, sizeof(__pyx_k_partial), 0, 0, 1, 1}, + {&__pyx_n_s_pengap, __pyx_k_pengap, sizeof(__pyx_k_pengap), 0, 0, 1, 1}, + {&__pyx_n_s_pool, __pyx_k_pool, sizeof(__pyx_k_pool), 0, 0, 1, 1}, + {&__pyx_n_s_processes, __pyx_k_processes, sizeof(__pyx_k_processes), 0, 0, 1, 1}, + {&__pyx_n_s_randfactor, __pyx_k_randfactor, sizeof(__pyx_k_randfactor), 0, 0, 1, 1}, + {&__pyx_n_s_randnum, __pyx_k_randnum, sizeof(__pyx_k_randnum), 0, 0, 1, 1}, + {&__pyx_n_s_randum, __pyx_k_randum, sizeof(__pyx_k_randum), 0, 0, 1, 1}, + {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1}, + {&__pyx_n_s_rdict, __pyx_k_rdict, sizeof(__pyx_k_rdict), 0, 0, 1, 1}, + {&__pyx_n_s_resd, __pyx_k_resd, sizeof(__pyx_k_resd), 0, 0, 1, 1}, + {&__pyx_n_s_resdic, __pyx_k_resdic, sizeof(__pyx_k_resdic), 0, 0, 1, 1}, + {&__pyx_n_s_resdict, __pyx_k_resdict, sizeof(__pyx_k_resdict), 0, 0, 1, 1}, + {&__pyx_n_s_reshape, __pyx_k_reshape, sizeof(__pyx_k_reshape), 0, 0, 1, 1}, + {&__pyx_n_s_result, __pyx_k_result, sizeof(__pyx_k_result), 0, 0, 1, 1}, + {&__pyx_n_s_sco, __pyx_k_sco, sizeof(__pyx_k_sco), 0, 0, 1, 1}, + {&__pyx_n_s_scomat, __pyx_k_scomat, sizeof(__pyx_k_scomat), 0, 0, 1, 1}, + {&__pyx_n_s_scomat_2, __pyx_k_scomat_2, sizeof(__pyx_k_scomat_2), 0, 0, 1, 1}, + {&__pyx_n_s_score, __pyx_k_score, sizeof(__pyx_k_score), 0, 0, 1, 1}, + {&__pyx_n_s_scoremat, __pyx_k_scoremat, sizeof(__pyx_k_scoremat), 0, 0, 1, 1}, + {&__pyx_n_s_scoring, __pyx_k_scoring, sizeof(__pyx_k_scoring), 0, 0, 1, 1}, + {&__pyx_n_s_scoring_gap, __pyx_k_scoring_gap, sizeof(__pyx_k_scoring_gap), 0, 0, 1, 1}, + {&__pyx_n_s_seq1, __pyx_k_seq1, sizeof(__pyx_k_seq1), 0, 0, 1, 1}, + {&__pyx_n_s_seq2, __pyx_k_seq2, sizeof(__pyx_k_seq2), 0, 0, 1, 1}, + {&__pyx_n_s_seq_vs_db, __pyx_k_seq_vs_db, sizeof(__pyx_k_seq_vs_db), 0, 0, 1, 1}, + {&__pyx_n_s_seqs, __pyx_k_seqs, sizeof(__pyx_k_seqs), 0, 0, 1, 1}, + {&__pyx_n_s_seqs1, __pyx_k_seqs1, sizeof(__pyx_k_seqs1), 0, 0, 1, 1}, + {&__pyx_n_s_seqs2, __pyx_k_seqs2, sizeof(__pyx_k_seqs2), 0, 0, 1, 1}, + {&__pyx_n_s_shared_sco_base, __pyx_k_shared_sco_base, sizeof(__pyx_k_shared_sco_base), 0, 0, 1, 1}, + {&__pyx_n_s_spec, __pyx_k_spec, sizeof(__pyx_k_spec), 0, 0, 1, 1}, + {&__pyx_n_s_st1, __pyx_k_st1, sizeof(__pyx_k_st1), 0, 0, 1, 1}, + {&__pyx_n_s_st2, __pyx_k_st2, sizeof(__pyx_k_st2), 0, 0, 1, 1}, + {&__pyx_n_s_store_dict, __pyx_k_store_dict, sizeof(__pyx_k_store_dict), 0, 0, 1, 1}, + {&__pyx_n_s_strfmt, __pyx_k_strfmt, sizeof(__pyx_k_strfmt), 0, 0, 1, 1}, + {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, + {&__pyx_n_s_testval, __pyx_k_testval, sizeof(__pyx_k_testval), 0, 0, 1, 1}, + {&__pyx_n_s_thres, __pyx_k_thres, sizeof(__pyx_k_thres), 0, 0, 1, 1}, + {&__pyx_n_s_total, __pyx_k_total, sizeof(__pyx_k_total), 0, 0, 1, 1}, + {&__pyx_n_s_update, __pyx_k_update, sizeof(__pyx_k_update), 0, 0, 1, 1}, + {&__pyx_n_s_v, __pyx_k_v, sizeof(__pyx_k_v), 0, 0, 1, 1}, + {&__pyx_n_s_values, __pyx_k_values, sizeof(__pyx_k_values), 0, 0, 1, 1}, + {&__pyx_n_u_w, __pyx_k_w, sizeof(__pyx_k_w), 0, 1, 0, 1}, + {&__pyx_n_s_wholedb, __pyx_k_wholedb, sizeof(__pyx_k_wholedb), 0, 0, 1, 1}, + {&__pyx_n_s_write, __pyx_k_write, sizeof(__pyx_k_write), 0, 0, 1, 1}, + {&__pyx_n_s_x, __pyx_k_x, sizeof(__pyx_k_x), 0, 0, 1, 1}, + {&__pyx_n_s_y, __pyx_k_y, sizeof(__pyx_k_y), 0, 0, 1, 1}, + {&__pyx_n_s_zeros, __pyx_k_zeros, sizeof(__pyx_k_zeros), 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0} + }; + return __Pyx_InitStrings(__pyx_string_tab); +} +/* #### Code section: cached_builtins ### */ +static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { + __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 46, __pyx_L1_error) + __pyx_builtin_AssertionError = __Pyx_GetBuiltinName(__pyx_n_s_AssertionError); if (!__pyx_builtin_AssertionError) __PYX_ERR(0, 275, __pyx_L1_error) + __pyx_builtin_open = __Pyx_GetBuiltinName(__pyx_n_s_open); if (!__pyx_builtin_open) __PYX_ERR(0, 689, __pyx_L1_error) + __pyx_builtin_ImportError = __Pyx_GetBuiltinName(__pyx_n_s_ImportError); if (!__pyx_builtin_ImportError) __PYX_ERR(2, 1043, __pyx_L1_error) + return 0; + __pyx_L1_error:; + return -1; +} +/* #### Code section: cached_constants ### */ + +static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1043 + * __pyx_import_array() + * except Exception: + * raise ImportError("numpy._core.multiarray failed to import") # <<<<<<<<<<<<<< + * + * cdef inline int import_umath() except -1: + */ + __pyx_tuple_ = PyTuple_Pack(1, __pyx_kp_u_numpy__core_multiarray_failed_to); if (unlikely(!__pyx_tuple_)) __PYX_ERR(2, 1043, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple_); + __Pyx_GIVEREF(__pyx_tuple_); + + /* "../../../../../../../../miniforge3/envs/ess-env/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1049 + * _import_umath() + * except Exception: + * raise ImportError("numpy._core.umath failed to import") # <<<<<<<<<<<<<< + * + * cdef inline int import_ufunc() except -1: + */ + __pyx_tuple__2 = PyTuple_Pack(1, __pyx_kp_u_numpy__core_umath_failed_to_impo); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(2, 1049, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__2); + __Pyx_GIVEREF(__pyx_tuple__2); + + /* "nw_ec_alignx.pyx":334 + * ok = False + * # reverse sequences + * st1 = st1[::-1] # <<<<<<<<<<<<<< + * st2 = st2[::-1] + * return st1, st2 + */ + __pyx_slice__6 = PySlice_New(Py_None, Py_None, __pyx_int_neg_1); if (unlikely(!__pyx_slice__6)) __PYX_ERR(0, 334, __pyx_L1_error) + __Pyx_GOTREF(__pyx_slice__6); + __Pyx_GIVEREF(__pyx_slice__6); + + /* "nw_ec_alignx.pyx":646 + * scomat_ = np.frombuffer(shared_sco_base.get_obj(), dtype=np.float32) + * scomat = scomat_.reshape((total, total)) + * scomat[:, :] = 1 # <<<<<<<<<<<<<< + * + * + */ + __pyx_slice__24 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__24)) __PYX_ERR(0, 646, __pyx_L1_error) + __Pyx_GOTREF(__pyx_slice__24); + __Pyx_GIVEREF(__pyx_slice__24); + __pyx_tuple__25 = PyTuple_Pack(2, __pyx_slice__24, __pyx_slice__24); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(0, 646, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__25); + __Pyx_GIVEREF(__pyx_tuple__25); + + /* "nw_ec_alignx.pyx":54 + * + * # best performance + * @cython.boundscheck(False) # <<<<<<<<<<<<<< + * @cython.wraparound(False) + * def _FastNW(np.ndarray[DTYPEF_t, ndim=2] mat, dict ecs, list seq1, list seq2, + */ + __pyx_tuple__31 = PyTuple_Pack(22, __pyx_n_s_mat, __pyx_n_s_ecs, __pyx_n_s_seq1, __pyx_n_s_seq2, __pyx_n_s_gap, __pyx_n_s_l1, __pyx_n_s_l2, __pyx_n_s_li, __pyx_n_s_i, __pyx_n_s_j, __pyx_n_s_k, __pyx_n_s_eci, __pyx_n_s_ecj, __pyx_n_s_minpos, __pyx_n_s_mini, __pyx_n_s_randum, __pyx_n_s_randfactor, __pyx_n_s_f, __pyx_n_s_scoremat, __pyx_n_s_arrow, __pyx_n_s_sco, __pyx_n_s_randnum); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(0, 54, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__31); + __Pyx_GIVEREF(__pyx_tuple__31); + __pyx_codeobj__32 = (PyObject*)__Pyx_PyCode_New(5, 0, 0, 22, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__31, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_nw_ec_alignx_pyx, __pyx_n_s_FastNW, 54, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__32)) __PYX_ERR(0, 54, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":246 + * + * + * @cython.boundscheck(False) # <<<<<<<<<<<<<< + * @cython.wraparound(False) + * def scoring(np.ndarray[DTYPEF_t, ndim=2] mat, dict ecs, seq1, seq2, + */ + __pyx_tuple__33 = PyTuple_Pack(18, __pyx_n_s_mat, __pyx_n_s_ecs, __pyx_n_s_seq1, __pyx_n_s_seq2, __pyx_n_s_gap, __pyx_n_s_fhomo, __pyx_n_s_fpengap, __pyx_n_s_length, __pyx_n_s_i, __pyx_n_s_x, __pyx_n_s_y, __pyx_n_s_pengap, __pyx_n_s_score, __pyx_n_s_homo, __pyx_n_s_ec1, __pyx_n_s_ec2, __pyx_n_s_gapstr, __pyx_n_s_dotstr); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(0, 246, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__33); + __Pyx_GIVEREF(__pyx_tuple__33); + __pyx_codeobj__34 = (PyObject*)__Pyx_PyCode_New(7, 0, 0, 18, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__33, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_nw_ec_alignx_pyx, __pyx_n_s_scoring, 246, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__34)) __PYX_ERR(0, 246, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":302 + * + * + * def _backtrace(np.ndarray[DTYPE_t, ndim=2] arrow, list seq1, list seq2): # <<<<<<<<<<<<<< + * """Reads the arrow matrix of NW alignment and return two lists of + * with the aligned EC numbers. + */ + __pyx_tuple__35 = PyTuple_Pack(8, __pyx_n_s_arrow, __pyx_n_s_seq1, __pyx_n_s_seq2, __pyx_n_s_v, __pyx_n_s_h, __pyx_n_s_ok, __pyx_n_s_st1, __pyx_n_s_st2); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(0, 302, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__35); + __Pyx_GIVEREF(__pyx_tuple__35); + __pyx_codeobj__36 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__35, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_nw_ec_alignx_pyx, __pyx_n_s_backtrace, 302, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__36)) __PYX_ERR(0, 302, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":339 + * + * + * def NW(np.ndarray[DTYPEF_t, ndim=2] mat, dict ecs, list seq1, list seq2, # <<<<<<<<<<<<<< + * float gap=0.9, bool localize=False, bool nws=False, + * bool strfmt=True, bool oscore=False): + */ + __pyx_tuple__37 = PyTuple_Pack(21, __pyx_n_s_mat, __pyx_n_s_ecs, __pyx_n_s_seq1, __pyx_n_s_seq2, __pyx_n_s_gap, __pyx_n_s_localize, __pyx_n_s_nws, __pyx_n_s_strfmt, __pyx_n_s_oscore, __pyx_n_s_score, __pyx_n_s_mini, __pyx_n_s_scoring_gap, __pyx_n_s_aseq1, __pyx_n_s_aseq2, __pyx_n_s_length, __pyx_n_s_i, __pyx_n_s_ii, __pyx_n_s_fi, __pyx_n_s_binit, __pyx_n_s_bblock, __pyx_n_s_arr); if (unlikely(!__pyx_tuple__37)) __PYX_ERR(0, 339, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__37); + __Pyx_GIVEREF(__pyx_tuple__37); + __pyx_codeobj__38 = (PyObject*)__Pyx_PyCode_New(9, 0, 0, 21, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__37, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_nw_ec_alignx_pyx, __pyx_n_s_NW, 339, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__38)) __PYX_ERR(0, 339, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":408 + * + * + * def ind_vs_alldb(int ind, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, # <<<<<<<<<<<<<< + * dict decs, float thres=1.0, bool wholedb=False, + * bool localize=False, bool oscore=True): + */ + __pyx_tuple__39 = PyTuple_Pack(14, __pyx_n_s_ind, __pyx_n_s_seqs, __pyx_n_s_mat, __pyx_n_s_decs, __pyx_n_s_thres, __pyx_n_s_wholedb, __pyx_n_s_localize, __pyx_n_s_oscore, __pyx_n_s_resdic, __pyx_n_s_seq1, __pyx_n_s_seq2, __pyx_n_s_j, __pyx_n_s_indices, __pyx_n_s_sco); if (unlikely(!__pyx_tuple__39)) __PYX_ERR(0, 408, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__39); + __Pyx_GIVEREF(__pyx_tuple__39); + __pyx_codeobj__40 = (PyObject*)__Pyx_PyCode_New(8, 0, 0, 14, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__39, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_nw_ec_alignx_pyx, __pyx_n_s_ind_vs_alldb, 408, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__40)) __PYX_ERR(0, 408, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":453 + * + * + * def seq_vs_db(list seq1, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, dict decs, # <<<<<<<<<<<<<< + * float thres=1.0, bool localize=False, bool oscore=True): + * """Align de specified ESSs vs all the ESS in the database seqs. + */ + __pyx_tuple__41 = PyTuple_Pack(11, __pyx_n_s_seq1, __pyx_n_s_seqs, __pyx_n_s_mat, __pyx_n_s_decs, __pyx_n_s_thres, __pyx_n_s_localize, __pyx_n_s_oscore, __pyx_n_s_resdict, __pyx_n_s_i, __pyx_n_s_seq2, __pyx_n_s_sco); if (unlikely(!__pyx_tuple__41)) __PYX_ERR(0, 453, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__41); + __Pyx_GIVEREF(__pyx_tuple__41); + __pyx_codeobj__42 = (PyObject*)__Pyx_PyCode_New(7, 0, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_nw_ec_alignx_pyx, __pyx_n_s_seq_vs_db, 453, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__42)) __PYX_ERR(0, 453, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":487 + * + * + * def db_vs_db(list seqs1, list seqs2, np.ndarray[DTYPEF_t, ndim=2] mat, # <<<<<<<<<<<<<< + * dict decs, float thres=1.0, bool localize=False, + * bool oscore=True, int nproc=2): + */ + __pyx_tuple__43 = PyTuple_Pack(14, __pyx_n_s_seqs1, __pyx_n_s_seqs2, __pyx_n_s_mat, __pyx_n_s_decs, __pyx_n_s_thres, __pyx_n_s_localize, __pyx_n_s_oscore, __pyx_n_s_nproc, __pyx_n_s_resdic, __pyx_n_s_pool, __pyx_n_s_align_func, __pyx_n_s_resd, __pyx_n_s_i, __pyx_n_s_d); if (unlikely(!__pyx_tuple__43)) __PYX_ERR(0, 487, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__43); + __Pyx_GIVEREF(__pyx_tuple__43); + __pyx_codeobj__44 = (PyObject*)__Pyx_PyCode_New(8, 0, 0, 14, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__43, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_nw_ec_alignx_pyx, __pyx_n_s_db_vs_db, 487, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__44)) __PYX_ERR(0, 487, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":527 + * + * + * def alldb_comp(list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, dict decs, # <<<<<<<<<<<<<< + * float thres=1.0, bool localize=False, bool oscore=True, + * int nproc=2): + */ + __pyx_tuple__45 = PyTuple_Pack(13, __pyx_n_s_seqs, __pyx_n_s_mat, __pyx_n_s_decs, __pyx_n_s_thres, __pyx_n_s_localize, __pyx_n_s_oscore, __pyx_n_s_nproc, __pyx_n_s_indices, __pyx_n_s_resd, __pyx_n_s_d, __pyx_n_s_result, __pyx_n_s_pool, __pyx_n_s_align_func); if (unlikely(!__pyx_tuple__45)) __PYX_ERR(0, 527, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__45); + __Pyx_GIVEREF(__pyx_tuple__45); + __pyx_codeobj__46 = (PyObject*)__Pyx_PyCode_New(7, 0, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__45, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_nw_ec_alignx_pyx, __pyx_n_s_alldb_comp, 527, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__46)) __PYX_ERR(0, 527, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":565 + * + * + * def list_vs_alldb(list indices, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, # <<<<<<<<<<<<<< + * dict decs, float thres=1.0, bool localize=False, + * bool wholedb=False, bool oscore=False, int nproc=2): + */ + __pyx_tuple__47 = PyTuple_Pack(14, __pyx_n_s_indices, __pyx_n_s_seqs, __pyx_n_s_mat, __pyx_n_s_decs, __pyx_n_s_thres, __pyx_n_s_localize, __pyx_n_s_wholedb, __pyx_n_s_oscore, __pyx_n_s_nproc, __pyx_n_s_resd, __pyx_n_s_d, __pyx_n_s_result, __pyx_n_s_pool, __pyx_n_s_align_func); if (unlikely(!__pyx_tuple__47)) __PYX_ERR(0, 565, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__47); + __Pyx_GIVEREF(__pyx_tuple__47); + __pyx_codeobj__48 = (PyObject*)__Pyx_PyCode_New(9, 0, 0, 14, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__47, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_nw_ec_alignx_pyx, __pyx_n_s_list_vs_alldb, 565, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__48)) __PYX_ERR(0, 565, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":606 + * + * + * def alldb_shared(seqs, mat, decs, thres=1.0, localize=False, # <<<<<<<<<<<<<< + * nproc=2): + * """Align all the ESS in the database (seqs) and return the results as a + */ + __pyx_tuple__49 = PyTuple_Pack(10, __pyx_n_s_seqs, __pyx_n_s_mat, __pyx_n_s_decs, __pyx_n_s_thres, __pyx_n_s_localize, __pyx_n_s_nproc, __pyx_n_s_total, __pyx_n_s_indices, __pyx_n_s_pool, __pyx_n_s_align_func); if (unlikely(!__pyx_tuple__49)) __PYX_ERR(0, 606, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__49); + __Pyx_GIVEREF(__pyx_tuple__49); + __pyx_codeobj__50 = (PyObject*)__Pyx_PyCode_New(6, 0, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__49, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_nw_ec_alignx_pyx, __pyx_n_s_alldb_shared, 606, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__50)) __PYX_ERR(0, 606, __pyx_L1_error) + __pyx_tuple__51 = PyTuple_Pack(3, ((PyObject*)__pyx_float_1_0), ((PyObject *)Py_False), ((PyObject *)__pyx_int_2)); if (unlikely(!__pyx_tuple__51)) __PYX_ERR(0, 606, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__51); + __Pyx_GIVEREF(__pyx_tuple__51); + + /* "nw_ec_alignx.pyx":636 + * + * + * def _create_global_arr(total): # <<<<<<<<<<<<<< + * """Create shared global array for all vs all comparisson + * + */ + __pyx_tuple__52 = PyTuple_Pack(3, __pyx_n_s_total, __pyx_n_s_shared_sco_base, __pyx_n_s_scomat_2); if (unlikely(!__pyx_tuple__52)) __PYX_ERR(0, 636, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__52); + __Pyx_GIVEREF(__pyx_tuple__52); + __pyx_codeobj__53 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__52, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_nw_ec_alignx_pyx, __pyx_n_s_create_global_arr, 636, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__53)) __PYX_ERR(0, 636, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":649 + * + * + * def _fill_mat(ind, seqs, mat, decs, localize, float thres): # <<<<<<<<<<<<<< + * """Fill shared global matrix + * + */ + __pyx_tuple__54 = PyTuple_Pack(10, __pyx_n_s_ind, __pyx_n_s_seqs, __pyx_n_s_mat, __pyx_n_s_decs, __pyx_n_s_localize, __pyx_n_s_thres, __pyx_n_s_j, __pyx_n_s_sco, __pyx_n_s_seq1, __pyx_n_s_seq2); if (unlikely(!__pyx_tuple__54)) __PYX_ERR(0, 649, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__54); + __Pyx_GIVEREF(__pyx_tuple__54); + __pyx_codeobj__55 = (PyObject*)__Pyx_PyCode_New(6, 0, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__54, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_nw_ec_alignx_pyx, __pyx_n_s_fill_mat, 649, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__55)) __PYX_ERR(0, 649, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":673 + * + * + * def store_dict(fname, rdict, indices=None, indices2=None): # <<<<<<<<<<<<<< + * """Stores the scores of the alignments in a tab separated text + * file. The first column corresponds to the first sequence index + */ + __pyx_tuple__56 = PyTuple_Pack(13, __pyx_n_s_fname, __pyx_n_s_rdict, __pyx_n_s_indices, __pyx_n_s_indices2, __pyx_n_s_outf, __pyx_n_s_testval, __pyx_n_s_i, __pyx_n_s_sco, __pyx_n_s_line, __pyx_n_s_dic, __pyx_n_s_j, __pyx_n_s_ind1, __pyx_n_s_ind2); if (unlikely(!__pyx_tuple__56)) __PYX_ERR(0, 673, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__56); + __Pyx_GIVEREF(__pyx_tuple__56); + __pyx_codeobj__57 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__56, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_nw_ec_alignx_pyx, __pyx_n_s_store_dict, 673, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__57)) __PYX_ERR(0, 673, __pyx_L1_error) + __pyx_tuple__58 = PyTuple_Pack(2, Py_None, Py_None); if (unlikely(!__pyx_tuple__58)) __PYX_ERR(0, 673, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__58); + __Pyx_GIVEREF(__pyx_tuple__58); + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} +/* #### Code section: init_constants ### */ + +static CYTHON_SMALL_CODE int __Pyx_InitConstants(void) { + __pyx_umethod_PyDict_Type_update.type = (PyObject*)&PyDict_Type; + __pyx_umethod_PyDict_Type_update.method_name = &__pyx_n_s_update; + if (__Pyx_CreateStringTabAndInitStrings() < 0) __PYX_ERR(0, 1, __pyx_L1_error); + __pyx_float_1_0 = PyFloat_FromDouble(1.0); if (unlikely(!__pyx_float_1_0)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_float_0_05 = PyFloat_FromDouble(0.05); if (unlikely(!__pyx_float_0_05)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_float_0_95 = PyFloat_FromDouble(0.95); if (unlikely(!__pyx_float_0_95)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_1000 = PyInt_FromLong(1000); if (unlikely(!__pyx_int_1000)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_neg_1 = PyInt_FromLong(-1); if (unlikely(!__pyx_int_neg_1)) __PYX_ERR(0, 1, __pyx_L1_error) + return 0; + __pyx_L1_error:; + return -1; +} +/* #### Code section: init_globals ### */ + +static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { + /* AssertionsEnabled.init */ + if (likely(__Pyx_init_assertions_enabled() == 0)); else + +if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1, __pyx_L1_error) + + /* NumpyImportArray.init */ + /* + * Cython has automatically inserted a call to _import_array since + * you didn't include one when you cimported numpy. To disable this + * add the line + * numpy._import_array + */ +#ifdef NPY_FEATURE_VERSION +#ifndef NO_IMPORT_ARRAY +if (unlikely(_import_array() == -1)) { + PyErr_SetString(PyExc_ImportError, "numpy.core.multiarray failed to import " + "(auto-generated because you didn't call 'numpy.import_array()' after cimporting numpy; " + "use 'numpy._import_array' to disable if you are certain you don't need it)."); +} +#endif +#endif + +if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1, __pyx_L1_error) + + return 0; + __pyx_L1_error:; + return -1; +} +/* #### Code section: init_module ### */ + +static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(void); /*proto*/ + +static int __Pyx_modinit_global_init_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0); + /*--- Global init code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_variable_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0); + /*--- Variable export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0); + /*--- Function export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_type_init_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0); + /*--- Type init code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_type_import_code(void) { + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0); + /*--- Type import code ---*/ + __pyx_t_1 = PyImport_ImportModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_ptype_7cpython_4type_type = __Pyx_ImportType_3_0_11(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "type", + #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000 + sizeof(PyTypeObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyTypeObject), + #elif CYTHON_COMPILING_IN_LIMITED_API + sizeof(PyTypeObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyTypeObject), + #else + sizeof(PyHeapTypeObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyHeapTypeObject), + #endif + __Pyx_ImportType_CheckSize_Warn_3_0_11); if (!__pyx_ptype_7cpython_4type_type) __PYX_ERR(3, 9, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyImport_ImportModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_ptype_7cpython_4bool_bool = __Pyx_ImportType_3_0_11(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "bool", sizeof(PyBoolObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyBoolObject),__Pyx_ImportType_CheckSize_Warn_3_0_11); if (!__pyx_ptype_7cpython_4bool_bool) __PYX_ERR(4, 8, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyImport_ImportModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_ptype_7cpython_7complex_complex = __Pyx_ImportType_3_0_11(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "complex", sizeof(PyComplexObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyComplexObject),__Pyx_ImportType_CheckSize_Warn_3_0_11); if (!__pyx_ptype_7cpython_7complex_complex) __PYX_ERR(5, 15, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyImport_ImportModule("numpy"); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 272, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_ptype_5numpy_dtype = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "dtype", sizeof(PyArray_Descr), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyArray_Descr),__Pyx_ImportType_CheckSize_Ignore_3_0_11); if (!__pyx_ptype_5numpy_dtype) __PYX_ERR(2, 272, __pyx_L1_error) + __pyx_ptype_5numpy_flatiter = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "flatiter", sizeof(PyArrayIterObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyArrayIterObject),__Pyx_ImportType_CheckSize_Ignore_3_0_11); if (!__pyx_ptype_5numpy_flatiter) __PYX_ERR(2, 317, __pyx_L1_error) + __pyx_ptype_5numpy_broadcast = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "broadcast", sizeof(PyArrayMultiIterObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyArrayMultiIterObject),__Pyx_ImportType_CheckSize_Ignore_3_0_11); if (!__pyx_ptype_5numpy_broadcast) __PYX_ERR(2, 321, __pyx_L1_error) + __pyx_ptype_5numpy_ndarray = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "ndarray", sizeof(PyArrayObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyArrayObject),__Pyx_ImportType_CheckSize_Ignore_3_0_11); if (!__pyx_ptype_5numpy_ndarray) __PYX_ERR(2, 360, __pyx_L1_error) + __pyx_ptype_5numpy_generic = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "generic", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_11); if (!__pyx_ptype_5numpy_generic) __PYX_ERR(2, 865, __pyx_L1_error) + __pyx_ptype_5numpy_number = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "number", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_11); if (!__pyx_ptype_5numpy_number) __PYX_ERR(2, 867, __pyx_L1_error) + __pyx_ptype_5numpy_integer = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "integer", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_11); if (!__pyx_ptype_5numpy_integer) __PYX_ERR(2, 869, __pyx_L1_error) + __pyx_ptype_5numpy_signedinteger = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "signedinteger", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_11); if (!__pyx_ptype_5numpy_signedinteger) __PYX_ERR(2, 871, __pyx_L1_error) + __pyx_ptype_5numpy_unsignedinteger = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "unsignedinteger", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_11); if (!__pyx_ptype_5numpy_unsignedinteger) __PYX_ERR(2, 873, __pyx_L1_error) + __pyx_ptype_5numpy_inexact = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "inexact", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_11); if (!__pyx_ptype_5numpy_inexact) __PYX_ERR(2, 875, __pyx_L1_error) + __pyx_ptype_5numpy_floating = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "floating", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_11); if (!__pyx_ptype_5numpy_floating) __PYX_ERR(2, 877, __pyx_L1_error) + __pyx_ptype_5numpy_complexfloating = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "complexfloating", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_11); if (!__pyx_ptype_5numpy_complexfloating) __PYX_ERR(2, 879, __pyx_L1_error) + __pyx_ptype_5numpy_flexible = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "flexible", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_11); if (!__pyx_ptype_5numpy_flexible) __PYX_ERR(2, 881, __pyx_L1_error) + __pyx_ptype_5numpy_character = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "character", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_11); if (!__pyx_ptype_5numpy_character) __PYX_ERR(2, 883, __pyx_L1_error) + __pyx_ptype_5numpy_ufunc = __Pyx_ImportType_3_0_11(__pyx_t_1, "numpy", "ufunc", sizeof(PyUFuncObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyUFuncObject),__Pyx_ImportType_CheckSize_Ignore_3_0_11); if (!__pyx_ptype_5numpy_ufunc) __PYX_ERR(2, 947, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_RefNannyFinishContext(); + return -1; +} + +static int __Pyx_modinit_variable_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_import_code", 0); + /*--- Variable import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0); + /*--- Function import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + + +#if PY_MAJOR_VERSION >= 3 +#if CYTHON_PEP489_MULTI_PHASE_INIT +static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/ +static int __pyx_pymod_exec_nw_ec_alignx(PyObject* module); /*proto*/ +static PyModuleDef_Slot __pyx_moduledef_slots[] = { + {Py_mod_create, (void*)__pyx_pymod_create}, + {Py_mod_exec, (void*)__pyx_pymod_exec_nw_ec_alignx}, + {0, NULL} +}; +#endif + +#ifdef __cplusplus +namespace { + struct PyModuleDef __pyx_moduledef = + #else + static struct PyModuleDef __pyx_moduledef = + #endif + { + PyModuleDef_HEAD_INIT, + "nw_ec_alignx", + __pyx_k_Needelman_Wunsh_algorithm_for_EC, /* m_doc */ + #if CYTHON_PEP489_MULTI_PHASE_INIT + 0, /* m_size */ + #elif CYTHON_USE_MODULE_STATE + sizeof(__pyx_mstate), /* m_size */ + #else + -1, /* m_size */ + #endif + __pyx_methods /* m_methods */, + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_moduledef_slots, /* m_slots */ + #else + NULL, /* m_reload */ + #endif + #if CYTHON_USE_MODULE_STATE + __pyx_m_traverse, /* m_traverse */ + __pyx_m_clear, /* m_clear */ + NULL /* m_free */ + #else + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL /* m_free */ + #endif + }; + #ifdef __cplusplus +} /* anonymous namespace */ +#endif +#endif + +#ifndef CYTHON_NO_PYINIT_EXPORT +#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC +#elif PY_MAJOR_VERSION < 3 +#ifdef __cplusplus +#define __Pyx_PyMODINIT_FUNC extern "C" void +#else +#define __Pyx_PyMODINIT_FUNC void +#endif +#else +#ifdef __cplusplus +#define __Pyx_PyMODINIT_FUNC extern "C" PyObject * +#else +#define __Pyx_PyMODINIT_FUNC PyObject * +#endif +#endif + + +#if PY_MAJOR_VERSION < 3 +__Pyx_PyMODINIT_FUNC initnw_ec_alignx(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC initnw_ec_alignx(void) +#else +__Pyx_PyMODINIT_FUNC PyInit_nw_ec_alignx(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC PyInit_nw_ec_alignx(void) +#if CYTHON_PEP489_MULTI_PHASE_INIT +{ + return PyModuleDef_Init(&__pyx_moduledef); +} +static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) { + #if PY_VERSION_HEX >= 0x030700A1 + static PY_INT64_T main_interpreter_id = -1; + PY_INT64_T current_id = PyInterpreterState_GetID(PyThreadState_Get()->interp); + if (main_interpreter_id == -1) { + main_interpreter_id = current_id; + return (unlikely(current_id == -1)) ? -1 : 0; + } else if (unlikely(main_interpreter_id != current_id)) + #else + static PyInterpreterState *main_interpreter = NULL; + PyInterpreterState *current_interpreter = PyThreadState_Get()->interp; + if (!main_interpreter) { + main_interpreter = current_interpreter; + } else if (unlikely(main_interpreter != current_interpreter)) + #endif + { + PyErr_SetString( + PyExc_ImportError, + "Interpreter change detected - this module can only be loaded into one interpreter per process."); + return -1; + } + return 0; +} +#if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *module, const char* from_name, const char* to_name, int allow_none) +#else +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) +#endif +{ + PyObject *value = PyObject_GetAttrString(spec, from_name); + int result = 0; + if (likely(value)) { + if (allow_none || value != Py_None) { +#if CYTHON_COMPILING_IN_LIMITED_API + result = PyModule_AddObject(module, to_name, value); +#else + result = PyDict_SetItemString(moddict, to_name, value); +#endif + } + Py_DECREF(value); + } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Clear(); + } else { + result = -1; + } + return result; +} +static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def) { + PyObject *module = NULL, *moddict, *modname; + CYTHON_UNUSED_VAR(def); + if (__Pyx_check_single_interpreter()) + return NULL; + if (__pyx_m) + return __Pyx_NewRef(__pyx_m); + modname = PyObject_GetAttrString(spec, "name"); + if (unlikely(!modname)) goto bad; + module = PyModule_NewObject(modname); + Py_DECREF(modname); + if (unlikely(!module)) goto bad; +#if CYTHON_COMPILING_IN_LIMITED_API + moddict = module; +#else + moddict = PyModule_GetDict(module); + if (unlikely(!moddict)) goto bad; +#endif + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "submodule_search_locations", "__path__", 0) < 0)) goto bad; + return module; +bad: + Py_XDECREF(module); + return NULL; +} + + +static CYTHON_SMALL_CODE int __pyx_pymod_exec_nw_ec_alignx(PyObject *__pyx_pyinit_module) +#endif +#endif +{ + int stringtab_initialized = 0; + #if CYTHON_USE_MODULE_STATE + int pystate_addmodule_run = 0; + #endif + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + #if CYTHON_PEP489_MULTI_PHASE_INIT + if (__pyx_m) { + if (__pyx_m == __pyx_pyinit_module) return 0; + PyErr_SetString(PyExc_RuntimeError, "Module 'nw_ec_alignx' has already been imported. Re-initialisation is not supported."); + return -1; + } + #elif PY_MAJOR_VERSION >= 3 + if (__pyx_m) return __Pyx_NewRef(__pyx_m); + #endif + /*--- Module creation code ---*/ + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_m = __pyx_pyinit_module; + Py_INCREF(__pyx_m); + #else + #if PY_MAJOR_VERSION < 3 + __pyx_m = Py_InitModule4("nw_ec_alignx", __pyx_methods, __pyx_k_Needelman_Wunsh_algorithm_for_EC, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #elif CYTHON_USE_MODULE_STATE + __pyx_t_1 = PyModule_Create(&__pyx_moduledef); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error) + { + int add_module_result = PyState_AddModule(__pyx_t_1, &__pyx_moduledef); + __pyx_t_1 = 0; /* transfer ownership from __pyx_t_1 to "nw_ec_alignx" pseudovariable */ + if (unlikely((add_module_result < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + pystate_addmodule_run = 1; + } + #else + __pyx_m = PyModule_Create(&__pyx_moduledef); + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #endif + CYTHON_UNUSED_VAR(__pyx_t_1); + __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_d); + __pyx_b = __Pyx_PyImport_AddModuleRef(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_cython_runtime = __Pyx_PyImport_AddModuleRef((const char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error) + if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #if CYTHON_REFNANNY +__Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); +if (!__Pyx_RefNanny) { + PyErr_Clear(); + __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); + if (!__Pyx_RefNanny) + Py_FatalError("failed to import 'refnanny' module"); +} +#endif + __Pyx_RefNannySetupContext("__Pyx_PyMODINIT_FUNC PyInit_nw_ec_alignx(void)", 0); + if (__Pyx_check_binary_version(__PYX_LIMITED_VERSION_HEX, __Pyx_get_runtime_version(), CYTHON_COMPILING_IN_LIMITED_API) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pxy_PyFrame_Initialize_Offsets + __Pxy_PyFrame_Initialize_Offsets(); + #endif + __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pyx_CyFunction_USED + if (__pyx_CyFunction_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_FusedFunction_USED + if (__pyx_FusedFunction_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Coroutine_USED + if (__pyx_Coroutine_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Generator_USED + if (__pyx_Generator_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_AsyncGen_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_StopAsyncIteration_USED + if (__pyx_StopAsyncIteration_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + /*--- Library function declarations ---*/ + /*--- Threads initialization code ---*/ + #if defined(WITH_THREAD) && PY_VERSION_HEX < 0x030700F0 && defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS + PyEval_InitThreads(); + #endif + /*--- Initialize various global constants etc. ---*/ + if (__Pyx_InitConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + stringtab_initialized = 1; + if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) + if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + if (__pyx_module_is_main_nw_ec_alignx) { + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name, __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + } + #if PY_MAJOR_VERSION >= 3 + { + PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error) + if (!PyDict_GetItemString(modules, "nw_ec_alignx")) { + if (unlikely((PyDict_SetItemString(modules, "nw_ec_alignx", __pyx_m) < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + } + } + #endif + /*--- Builtin init code ---*/ + if (__Pyx_InitCachedBuiltins() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Constants init code ---*/ + if (__Pyx_InitCachedConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Global type/function init code ---*/ + (void)__Pyx_modinit_global_init_code(); + (void)__Pyx_modinit_variable_export_code(); + (void)__Pyx_modinit_function_export_code(); + (void)__Pyx_modinit_type_init_code(); + if (unlikely((__Pyx_modinit_type_import_code() < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + (void)__Pyx_modinit_variable_import_code(); + (void)__Pyx_modinit_function_import_code(); + /*--- Execution code ---*/ + #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + + /* "nw_ec_alignx.pyx":18 + * implementation.""" + * + * import ctypes # <<<<<<<<<<<<<< + * import cython + * from multiprocessing import Pool, Array + */ + __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_n_s_ctypes, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 18, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ctypes, __pyx_t_2) < 0) __PYX_ERR(0, 18, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "nw_ec_alignx.pyx":20 + * import ctypes + * import cython + * from multiprocessing import Pool, Array # <<<<<<<<<<<<<< + * from functools import partial + * cimport cython + */ + __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 20, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_Pool); + __Pyx_GIVEREF(__pyx_n_s_Pool); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_Pool)) __PYX_ERR(0, 20, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_Array); + __Pyx_GIVEREF(__pyx_n_s_Array); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_Array)) __PYX_ERR(0, 20, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_multiprocessing, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 20, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_Pool); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 20, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_Pool, __pyx_t_2) < 0) __PYX_ERR(0, 20, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_Array); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 20, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_Array, __pyx_t_2) < 0) __PYX_ERR(0, 20, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "nw_ec_alignx.pyx":21 + * import cython + * from multiprocessing import Pool, Array + * from functools import partial # <<<<<<<<<<<<<< + * cimport cython + * from cpython cimport bool + */ + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 21, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_partial); + __Pyx_GIVEREF(__pyx_n_s_partial); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_partial)) __PYX_ERR(0, 21, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_functools, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 21, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_partial); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 21, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_partial, __pyx_t_3) < 0) __PYX_ERR(0, 21, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "nw_ec_alignx.pyx":24 + * cimport cython + * from cpython cimport bool + * import numpy as np # <<<<<<<<<<<<<< + * cimport numpy as np + * from numpy cimport int32_t, float64_t + */ + __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_n_s_numpy, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 24, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_2) < 0) __PYX_ERR(0, 24, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "nw_ec_alignx.pyx":32 + * int INT_MAX + * + * DTYPE = np.int32 # <<<<<<<<<<<<<< + * ctypedef np.int32_t DTYPE_t + * DTYPEF = np.float64 + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_int32); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_DTYPE, __pyx_t_3) < 0) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "nw_ec_alignx.pyx":34 + * DTYPE = np.int32 + * ctypedef np.int32_t DTYPE_t + * DTYPEF = np.float64 # <<<<<<<<<<<<<< + * ctypedef np.float64_t DTYPEF_t + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 34, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_float64); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 34, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_DTYPEF, __pyx_t_2) < 0) __PYX_ERR(0, 34, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "nw_ec_alignx.pyx":57 + * @cython.wraparound(False) + * def _FastNW(np.ndarray[DTYPEF_t, ndim=2] mat, dict ecs, list seq1, list seq2, + * float gap=0.9): # <<<<<<<<<<<<<< + * """Perform dynamic programing alignment of EC numbers sequences. Creates + * the scoring and arrow matrices using brute force loops. + */ + __pyx_t_2 = PyFloat_FromDouble(((double)0.9)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 57, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + + /* "nw_ec_alignx.pyx":54 + * + * # best performance + * @cython.boundscheck(False) # <<<<<<<<<<<<<< + * @cython.wraparound(False) + * def _FastNW(np.ndarray[DTYPEF_t, ndim=2] mat, dict ecs, list seq1, list seq2, + */ + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 54, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2)) __PYX_ERR(0, 54, __pyx_L1_error); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_12nw_ec_alignx_1_FastNW, 0, __pyx_n_s_FastNW, NULL, __pyx_n_s_nw_ec_alignx, __pyx_d, ((PyObject *)__pyx_codeobj__32)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 54, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_FastNW, __pyx_t_2) < 0) __PYX_ERR(0, 54, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "nw_ec_alignx.pyx":249 + * @cython.wraparound(False) + * def scoring(np.ndarray[DTYPEF_t, ndim=2] mat, dict ecs, seq1, seq2, + * float gap=1, float fhomo=0.95, float fpengap=0.05): # <<<<<<<<<<<<<< + * """ This function evaluates a pair of alignmed ESS and returns an entroy + * based similarity (distance) score. This value is in the range 0-1. 0 means + */ + __pyx_t_2 = PyFloat_FromDouble(((float)1.0)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyFloat_FromDouble(((double)0.95)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyFloat_FromDouble(((double)0.05)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + + /* "nw_ec_alignx.pyx":246 + * + * + * @cython.boundscheck(False) # <<<<<<<<<<<<<< + * @cython.wraparound(False) + * def scoring(np.ndarray[DTYPEF_t, ndim=2] mat, dict ecs, seq1, seq2, + */ + __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 246, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2)) __PYX_ERR(0, 246, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3)) __PYX_ERR(0, 246, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_4)) __PYX_ERR(0, 246, __pyx_L1_error); + __pyx_t_2 = 0; + __pyx_t_3 = 0; + __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_12nw_ec_alignx_3scoring, 0, __pyx_n_s_scoring, NULL, __pyx_n_s_nw_ec_alignx, __pyx_d, ((PyObject *)__pyx_codeobj__34)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 246, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_t_5); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_scoring, __pyx_t_4) < 0) __PYX_ERR(0, 246, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":302 + * + * + * def _backtrace(np.ndarray[DTYPE_t, ndim=2] arrow, list seq1, list seq2): # <<<<<<<<<<<<<< + * """Reads the arrow matrix of NW alignment and return two lists of + * with the aligned EC numbers. + */ + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_12nw_ec_alignx_5_backtrace, 0, __pyx_n_s_backtrace, NULL, __pyx_n_s_nw_ec_alignx, __pyx_d, ((PyObject *)__pyx_codeobj__36)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 302, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_backtrace, __pyx_t_4) < 0) __PYX_ERR(0, 302, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":340 + * + * def NW(np.ndarray[DTYPEF_t, ndim=2] mat, dict ecs, list seq1, list seq2, + * float gap=0.9, bool localize=False, bool nws=False, # <<<<<<<<<<<<<< + * bool strfmt=True, bool oscore=False): + * """ + */ + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 340, __pyx_L1_error) + __Pyx_INCREF(((PyObject *)Py_False)); + __pyx_k__7 = ((PyBoolObject *)((PyObject *)Py_False)); + __Pyx_GIVEREF((PyObject *)((PyObject *)Py_False)); + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 340, __pyx_L1_error) + __Pyx_INCREF(((PyObject *)Py_False)); + __pyx_k__8 = ((PyBoolObject *)((PyObject *)Py_False)); + __Pyx_GIVEREF((PyObject *)((PyObject *)Py_False)); + + /* "nw_ec_alignx.pyx":341 + * def NW(np.ndarray[DTYPEF_t, ndim=2] mat, dict ecs, list seq1, list seq2, + * float gap=0.9, bool localize=False, bool nws=False, + * bool strfmt=True, bool oscore=False): # <<<<<<<<<<<<<< + * """ + * NW alignment function. Creates a pairwise alignment of Enzymatic Step + */ + if (!(likely(((((PyObject *)Py_True)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_True), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 341, __pyx_L1_error) + __Pyx_INCREF(((PyObject *)Py_True)); + __pyx_k__9 = ((PyBoolObject *)((PyObject *)Py_True)); + __Pyx_GIVEREF((PyObject *)((PyObject *)Py_True)); + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 341, __pyx_L1_error) + __Pyx_INCREF(((PyObject *)Py_False)); + __pyx_k__10 = ((PyBoolObject *)((PyObject *)Py_False)); + __Pyx_GIVEREF((PyObject *)((PyObject *)Py_False)); + + /* "nw_ec_alignx.pyx":340 + * + * def NW(np.ndarray[DTYPEF_t, ndim=2] mat, dict ecs, list seq1, list seq2, + * float gap=0.9, bool localize=False, bool nws=False, # <<<<<<<<<<<<<< + * bool strfmt=True, bool oscore=False): + * """ + */ + __pyx_t_4 = PyFloat_FromDouble(((double)0.9)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 340, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 340, __pyx_L1_error) + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 340, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":341 + * def NW(np.ndarray[DTYPEF_t, ndim=2] mat, dict ecs, list seq1, list seq2, + * float gap=0.9, bool localize=False, bool nws=False, + * bool strfmt=True, bool oscore=False): # <<<<<<<<<<<<<< + * """ + * NW alignment function. Creates a pairwise alignment of Enzymatic Step + */ + if (!(likely(((((PyObject *)Py_True)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_True), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 341, __pyx_L1_error) + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 341, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":339 + * + * + * def NW(np.ndarray[DTYPEF_t, ndim=2] mat, dict ecs, list seq1, list seq2, # <<<<<<<<<<<<<< + * float gap=0.9, bool localize=False, bool nws=False, + * bool strfmt=True, bool oscore=False): + */ + __pyx_t_5 = PyTuple_New(5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 339, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4)) __PYX_ERR(0, 339, __pyx_L1_error); + __Pyx_INCREF(((PyObject *)Py_False)); + __Pyx_GIVEREF(((PyObject *)Py_False)); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, ((PyObject *)Py_False))) __PYX_ERR(0, 339, __pyx_L1_error); + __Pyx_INCREF(((PyObject *)Py_False)); + __Pyx_GIVEREF(((PyObject *)Py_False)); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, ((PyObject *)Py_False))) __PYX_ERR(0, 339, __pyx_L1_error); + __Pyx_INCREF(((PyObject *)Py_True)); + __Pyx_GIVEREF(((PyObject *)Py_True)); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 3, ((PyObject *)Py_True))) __PYX_ERR(0, 339, __pyx_L1_error); + __Pyx_INCREF(((PyObject *)Py_False)); + __Pyx_GIVEREF(((PyObject *)Py_False)); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 4, ((PyObject *)Py_False))) __PYX_ERR(0, 339, __pyx_L1_error); + __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_12nw_ec_alignx_7NW, 0, __pyx_n_s_NW, NULL, __pyx_n_s_nw_ec_alignx, __pyx_d, ((PyObject *)__pyx_codeobj__38)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 339, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_t_5); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_NW, __pyx_t_4) < 0) __PYX_ERR(0, 339, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":409 + * + * def ind_vs_alldb(int ind, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, + * dict decs, float thres=1.0, bool wholedb=False, # <<<<<<<<<<<<<< + * bool localize=False, bool oscore=True): + * """Align the ESSs in the specified index (ind) versus + */ + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 409, __pyx_L1_error) + __Pyx_INCREF(((PyObject *)Py_False)); + __pyx_k__12 = ((PyBoolObject *)((PyObject *)Py_False)); + __Pyx_GIVEREF((PyObject *)((PyObject *)Py_False)); + + /* "nw_ec_alignx.pyx":410 + * def ind_vs_alldb(int ind, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, + * dict decs, float thres=1.0, bool wholedb=False, + * bool localize=False, bool oscore=True): # <<<<<<<<<<<<<< + * """Align the ESSs in the specified index (ind) versus + * all the rest of sequences with index > ind. + */ + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 410, __pyx_L1_error) + __Pyx_INCREF(((PyObject *)Py_False)); + __pyx_k__13 = ((PyBoolObject *)((PyObject *)Py_False)); + __Pyx_GIVEREF((PyObject *)((PyObject *)Py_False)); + if (!(likely(((((PyObject *)Py_True)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_True), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 410, __pyx_L1_error) + __Pyx_INCREF(((PyObject *)Py_True)); + __pyx_k__14 = ((PyBoolObject *)((PyObject *)Py_True)); + __Pyx_GIVEREF((PyObject *)((PyObject *)Py_True)); + + /* "nw_ec_alignx.pyx":409 + * + * def ind_vs_alldb(int ind, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, + * dict decs, float thres=1.0, bool wholedb=False, # <<<<<<<<<<<<<< + * bool localize=False, bool oscore=True): + * """Align the ESSs in the specified index (ind) versus + */ + __pyx_t_4 = PyFloat_FromDouble(((double)1.0)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 409, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 409, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":410 + * def ind_vs_alldb(int ind, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, + * dict decs, float thres=1.0, bool wholedb=False, + * bool localize=False, bool oscore=True): # <<<<<<<<<<<<<< + * """Align the ESSs in the specified index (ind) versus + * all the rest of sequences with index > ind. + */ + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 410, __pyx_L1_error) + if (!(likely(((((PyObject *)Py_True)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_True), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 410, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":408 + * + * + * def ind_vs_alldb(int ind, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, # <<<<<<<<<<<<<< + * dict decs, float thres=1.0, bool wholedb=False, + * bool localize=False, bool oscore=True): + */ + __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 408, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4)) __PYX_ERR(0, 408, __pyx_L1_error); + __Pyx_INCREF(((PyObject *)Py_False)); + __Pyx_GIVEREF(((PyObject *)Py_False)); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, ((PyObject *)Py_False))) __PYX_ERR(0, 408, __pyx_L1_error); + __Pyx_INCREF(((PyObject *)Py_False)); + __Pyx_GIVEREF(((PyObject *)Py_False)); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, ((PyObject *)Py_False))) __PYX_ERR(0, 408, __pyx_L1_error); + __Pyx_INCREF(((PyObject *)Py_True)); + __Pyx_GIVEREF(((PyObject *)Py_True)); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 3, ((PyObject *)Py_True))) __PYX_ERR(0, 408, __pyx_L1_error); + __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_12nw_ec_alignx_9ind_vs_alldb, 0, __pyx_n_s_ind_vs_alldb, NULL, __pyx_n_s_nw_ec_alignx, __pyx_d, ((PyObject *)__pyx_codeobj__40)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 408, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_t_5); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ind_vs_alldb, __pyx_t_4) < 0) __PYX_ERR(0, 408, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":454 + * + * def seq_vs_db(list seq1, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, dict decs, + * float thres=1.0, bool localize=False, bool oscore=True): # <<<<<<<<<<<<<< + * """Align de specified ESSs vs all the ESS in the database seqs. + * Returns a dictionary with the scores. The keys are the index of + */ + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 454, __pyx_L1_error) + __Pyx_INCREF(((PyObject *)Py_False)); + __pyx_k__15 = ((PyBoolObject *)((PyObject *)Py_False)); + __Pyx_GIVEREF((PyObject *)((PyObject *)Py_False)); + if (!(likely(((((PyObject *)Py_True)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_True), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 454, __pyx_L1_error) + __Pyx_INCREF(((PyObject *)Py_True)); + __pyx_k__16 = ((PyBoolObject *)((PyObject *)Py_True)); + __Pyx_GIVEREF((PyObject *)((PyObject *)Py_True)); + + /* "nw_ec_alignx.pyx":453 + * + * + * def seq_vs_db(list seq1, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, dict decs, # <<<<<<<<<<<<<< + * float thres=1.0, bool localize=False, bool oscore=True): + * """Align de specified ESSs vs all the ESS in the database seqs. + */ + __pyx_t_4 = PyFloat_FromDouble(((double)1.0)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 454, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + + /* "nw_ec_alignx.pyx":454 + * + * def seq_vs_db(list seq1, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, dict decs, + * float thres=1.0, bool localize=False, bool oscore=True): # <<<<<<<<<<<<<< + * """Align de specified ESSs vs all the ESS in the database seqs. + * Returns a dictionary with the scores. The keys are the index of + */ + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 454, __pyx_L1_error) + if (!(likely(((((PyObject *)Py_True)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_True), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 454, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":453 + * + * + * def seq_vs_db(list seq1, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, dict decs, # <<<<<<<<<<<<<< + * float thres=1.0, bool localize=False, bool oscore=True): + * """Align de specified ESSs vs all the ESS in the database seqs. + */ + __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 453, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4)) __PYX_ERR(0, 453, __pyx_L1_error); + __Pyx_INCREF(((PyObject *)Py_False)); + __Pyx_GIVEREF(((PyObject *)Py_False)); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, ((PyObject *)Py_False))) __PYX_ERR(0, 453, __pyx_L1_error); + __Pyx_INCREF(((PyObject *)Py_True)); + __Pyx_GIVEREF(((PyObject *)Py_True)); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, ((PyObject *)Py_True))) __PYX_ERR(0, 453, __pyx_L1_error); + __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_12nw_ec_alignx_11seq_vs_db, 0, __pyx_n_s_seq_vs_db, NULL, __pyx_n_s_nw_ec_alignx, __pyx_d, ((PyObject *)__pyx_codeobj__42)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 453, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_t_5); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_seq_vs_db, __pyx_t_4) < 0) __PYX_ERR(0, 453, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":488 + * + * def db_vs_db(list seqs1, list seqs2, np.ndarray[DTYPEF_t, ndim=2] mat, + * dict decs, float thres=1.0, bool localize=False, # <<<<<<<<<<<<<< + * bool oscore=True, int nproc=2): + * """Align all the ESS in both databases (seqs1, seqs2). The result + */ + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 488, __pyx_L1_error) + __Pyx_INCREF(((PyObject *)Py_False)); + __pyx_k__17 = ((PyBoolObject *)((PyObject *)Py_False)); + __Pyx_GIVEREF((PyObject *)((PyObject *)Py_False)); + + /* "nw_ec_alignx.pyx":489 + * def db_vs_db(list seqs1, list seqs2, np.ndarray[DTYPEF_t, ndim=2] mat, + * dict decs, float thres=1.0, bool localize=False, + * bool oscore=True, int nproc=2): # <<<<<<<<<<<<<< + * """Align all the ESS in both databases (seqs1, seqs2). The result + * is a dictionary of dictionaries. The fist key representes the index + */ + if (!(likely(((((PyObject *)Py_True)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_True), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 489, __pyx_L1_error) + __Pyx_INCREF(((PyObject *)Py_True)); + __pyx_k__18 = ((PyBoolObject *)((PyObject *)Py_True)); + __Pyx_GIVEREF((PyObject *)((PyObject *)Py_True)); + + /* "nw_ec_alignx.pyx":488 + * + * def db_vs_db(list seqs1, list seqs2, np.ndarray[DTYPEF_t, ndim=2] mat, + * dict decs, float thres=1.0, bool localize=False, # <<<<<<<<<<<<<< + * bool oscore=True, int nproc=2): + * """Align all the ESS in both databases (seqs1, seqs2). The result + */ + __pyx_t_4 = PyFloat_FromDouble(((double)1.0)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 488, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 488, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":489 + * def db_vs_db(list seqs1, list seqs2, np.ndarray[DTYPEF_t, ndim=2] mat, + * dict decs, float thres=1.0, bool localize=False, + * bool oscore=True, int nproc=2): # <<<<<<<<<<<<<< + * """Align all the ESS in both databases (seqs1, seqs2). The result + * is a dictionary of dictionaries. The fist key representes the index + */ + if (!(likely(((((PyObject *)Py_True)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_True), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 489, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyInt_From_int(((int)2)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 489, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + + /* "nw_ec_alignx.pyx":487 + * + * + * def db_vs_db(list seqs1, list seqs2, np.ndarray[DTYPEF_t, ndim=2] mat, # <<<<<<<<<<<<<< + * dict decs, float thres=1.0, bool localize=False, + * bool oscore=True, int nproc=2): + */ + __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 487, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4)) __PYX_ERR(0, 487, __pyx_L1_error); + __Pyx_INCREF(((PyObject *)Py_False)); + __Pyx_GIVEREF(((PyObject *)Py_False)); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)Py_False))) __PYX_ERR(0, 487, __pyx_L1_error); + __Pyx_INCREF(((PyObject *)Py_True)); + __Pyx_GIVEREF(((PyObject *)Py_True)); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 2, ((PyObject *)Py_True))) __PYX_ERR(0, 487, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_5); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_t_5)) __PYX_ERR(0, 487, __pyx_L1_error); + __pyx_t_4 = 0; + __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_12nw_ec_alignx_13db_vs_db, 0, __pyx_n_s_db_vs_db, NULL, __pyx_n_s_nw_ec_alignx, __pyx_d, ((PyObject *)__pyx_codeobj__44)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 487, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_5, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_db_vs_db, __pyx_t_5) < 0) __PYX_ERR(0, 487, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "nw_ec_alignx.pyx":528 + * + * def alldb_comp(list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, dict decs, + * float thres=1.0, bool localize=False, bool oscore=True, # <<<<<<<<<<<<<< + * int nproc=2): + * """Align all the ESS in the database (seqs) and return the results in form + */ + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 528, __pyx_L1_error) + __Pyx_INCREF(((PyObject *)Py_False)); + __pyx_k__19 = ((PyBoolObject *)((PyObject *)Py_False)); + __Pyx_GIVEREF((PyObject *)((PyObject *)Py_False)); + if (!(likely(((((PyObject *)Py_True)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_True), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 528, __pyx_L1_error) + __Pyx_INCREF(((PyObject *)Py_True)); + __pyx_k__20 = ((PyBoolObject *)((PyObject *)Py_True)); + __Pyx_GIVEREF((PyObject *)((PyObject *)Py_True)); + + /* "nw_ec_alignx.pyx":527 + * + * + * def alldb_comp(list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, dict decs, # <<<<<<<<<<<<<< + * float thres=1.0, bool localize=False, bool oscore=True, + * int nproc=2): + */ + __pyx_t_5 = PyFloat_FromDouble(((double)1.0)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 528, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + + /* "nw_ec_alignx.pyx":528 + * + * def alldb_comp(list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, dict decs, + * float thres=1.0, bool localize=False, bool oscore=True, # <<<<<<<<<<<<<< + * int nproc=2): + * """Align all the ESS in the database (seqs) and return the results in form + */ + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 528, __pyx_L1_error) + if (!(likely(((((PyObject *)Py_True)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_True), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 528, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":529 + * def alldb_comp(list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, dict decs, + * float thres=1.0, bool localize=False, bool oscore=True, + * int nproc=2): # <<<<<<<<<<<<<< + * """Align all the ESS in the database (seqs) and return the results in form + * of dictionary. The result is equivalent to the upper part the all vs all + */ + __pyx_t_3 = __Pyx_PyInt_From_int(((int)2)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 529, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + + /* "nw_ec_alignx.pyx":527 + * + * + * def alldb_comp(list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, dict decs, # <<<<<<<<<<<<<< + * float thres=1.0, bool localize=False, bool oscore=True, + * int nproc=2): + */ + __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 527, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_5); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5)) __PYX_ERR(0, 527, __pyx_L1_error); + __Pyx_INCREF(((PyObject *)Py_False)); + __Pyx_GIVEREF(((PyObject *)Py_False)); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)Py_False))) __PYX_ERR(0, 527, __pyx_L1_error); + __Pyx_INCREF(((PyObject *)Py_True)); + __Pyx_GIVEREF(((PyObject *)Py_True)); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 2, ((PyObject *)Py_True))) __PYX_ERR(0, 527, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_t_3)) __PYX_ERR(0, 527, __pyx_L1_error); + __pyx_t_5 = 0; + __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_12nw_ec_alignx_15alldb_comp, 0, __pyx_n_s_alldb_comp, NULL, __pyx_n_s_nw_ec_alignx, __pyx_d, ((PyObject *)__pyx_codeobj__46)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 527, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_3, __pyx_t_4); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_alldb_comp, __pyx_t_3) < 0) __PYX_ERR(0, 527, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "nw_ec_alignx.pyx":566 + * + * def list_vs_alldb(list indices, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, + * dict decs, float thres=1.0, bool localize=False, # <<<<<<<<<<<<<< + * bool wholedb=False, bool oscore=False, int nproc=2): + * """Align all the ESS in the database (seqs) and return the results in form + */ + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 566, __pyx_L1_error) + __Pyx_INCREF(((PyObject *)Py_False)); + __pyx_k__21 = ((PyBoolObject *)((PyObject *)Py_False)); + __Pyx_GIVEREF((PyObject *)((PyObject *)Py_False)); + + /* "nw_ec_alignx.pyx":567 + * def list_vs_alldb(list indices, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, + * dict decs, float thres=1.0, bool localize=False, + * bool wholedb=False, bool oscore=False, int nproc=2): # <<<<<<<<<<<<<< + * """Align all the ESS in the database (seqs) and return the results in form + * of dictionary. The result is equivalent to the upper part the all vs all + */ + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 567, __pyx_L1_error) + __Pyx_INCREF(((PyObject *)Py_False)); + __pyx_k__22 = ((PyBoolObject *)((PyObject *)Py_False)); + __Pyx_GIVEREF((PyObject *)((PyObject *)Py_False)); + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 567, __pyx_L1_error) + __Pyx_INCREF(((PyObject *)Py_False)); + __pyx_k__23 = ((PyBoolObject *)((PyObject *)Py_False)); + __Pyx_GIVEREF((PyObject *)((PyObject *)Py_False)); + + /* "nw_ec_alignx.pyx":566 + * + * def list_vs_alldb(list indices, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, + * dict decs, float thres=1.0, bool localize=False, # <<<<<<<<<<<<<< + * bool wholedb=False, bool oscore=False, int nproc=2): + * """Align all the ESS in the database (seqs) and return the results in form + */ + __pyx_t_3 = PyFloat_FromDouble(((double)1.0)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 566, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 566, __pyx_L1_error) + + /* "nw_ec_alignx.pyx":567 + * def list_vs_alldb(list indices, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, + * dict decs, float thres=1.0, bool localize=False, + * bool wholedb=False, bool oscore=False, int nproc=2): # <<<<<<<<<<<<<< + * """Align all the ESS in the database (seqs) and return the results in form + * of dictionary. The result is equivalent to the upper part the all vs all + */ + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 567, __pyx_L1_error) + if (!(likely(((((PyObject *)Py_False)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)Py_False), __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 567, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyInt_From_int(((int)2)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 567, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + + /* "nw_ec_alignx.pyx":565 + * + * + * def list_vs_alldb(list indices, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, # <<<<<<<<<<<<<< + * dict decs, float thres=1.0, bool localize=False, + * bool wholedb=False, bool oscore=False, int nproc=2): + */ + __pyx_t_5 = PyTuple_New(5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 565, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3)) __PYX_ERR(0, 565, __pyx_L1_error); + __Pyx_INCREF(((PyObject *)Py_False)); + __Pyx_GIVEREF(((PyObject *)Py_False)); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, ((PyObject *)Py_False))) __PYX_ERR(0, 565, __pyx_L1_error); + __Pyx_INCREF(((PyObject *)Py_False)); + __Pyx_GIVEREF(((PyObject *)Py_False)); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, ((PyObject *)Py_False))) __PYX_ERR(0, 565, __pyx_L1_error); + __Pyx_INCREF(((PyObject *)Py_False)); + __Pyx_GIVEREF(((PyObject *)Py_False)); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 3, ((PyObject *)Py_False))) __PYX_ERR(0, 565, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 4, __pyx_t_4)) __PYX_ERR(0, 565, __pyx_L1_error); + __pyx_t_3 = 0; + __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_12nw_ec_alignx_17list_vs_alldb, 0, __pyx_n_s_list_vs_alldb, NULL, __pyx_n_s_nw_ec_alignx, __pyx_d, ((PyObject *)__pyx_codeobj__48)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 565, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_t_5); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_list_vs_alldb, __pyx_t_4) < 0) __PYX_ERR(0, 565, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":606 + * + * + * def alldb_shared(seqs, mat, decs, thres=1.0, localize=False, # <<<<<<<<<<<<<< + * nproc=2): + * """Align all the ESS in the database (seqs) and return the results as a + */ + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_12nw_ec_alignx_19alldb_shared, 0, __pyx_n_s_alldb_shared, NULL, __pyx_n_s_nw_ec_alignx, __pyx_d, ((PyObject *)__pyx_codeobj__50)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 606, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_tuple__51); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_alldb_shared, __pyx_t_4) < 0) __PYX_ERR(0, 606, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":636 + * + * + * def _create_global_arr(total): # <<<<<<<<<<<<<< + * """Create shared global array for all vs all comparisson + * + */ + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_12nw_ec_alignx_21_create_global_arr, 0, __pyx_n_s_create_global_arr, NULL, __pyx_n_s_nw_ec_alignx, __pyx_d, ((PyObject *)__pyx_codeobj__53)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 636, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_create_global_arr, __pyx_t_4) < 0) __PYX_ERR(0, 636, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":649 + * + * + * def _fill_mat(ind, seqs, mat, decs, localize, float thres): # <<<<<<<<<<<<<< + * """Fill shared global matrix + * + */ + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_12nw_ec_alignx_23_fill_mat, 0, __pyx_n_s_fill_mat, NULL, __pyx_n_s_nw_ec_alignx, __pyx_d, ((PyObject *)__pyx_codeobj__55)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 649, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_fill_mat, __pyx_t_4) < 0) __PYX_ERR(0, 649, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":673 + * + * + * def store_dict(fname, rdict, indices=None, indices2=None): # <<<<<<<<<<<<<< + * """Stores the scores of the alignments in a tab separated text + * file. The first column corresponds to the first sequence index + */ + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_12nw_ec_alignx_25store_dict, 0, __pyx_n_s_store_dict, NULL, __pyx_n_s_nw_ec_alignx, __pyx_d, ((PyObject *)__pyx_codeobj__57)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 673, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_tuple__58); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_store_dict, __pyx_t_4) < 0) __PYX_ERR(0, 673, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "nw_ec_alignx.pyx":1 + * # -*- coding: utf-8 -*- # <<<<<<<<<<<<<< + * # + * #------------------------------ + */ + __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_4) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /*--- Wrapped vars code ---*/ + + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + if (__pyx_m) { + if (__pyx_d && stringtab_initialized) { + __Pyx_AddTraceback("init nw_ec_alignx", __pyx_clineno, __pyx_lineno, __pyx_filename); + } + #if !CYTHON_USE_MODULE_STATE + Py_CLEAR(__pyx_m); + #else + Py_DECREF(__pyx_m); + if (pystate_addmodule_run) { + PyObject *tp, *value, *tb; + PyErr_Fetch(&tp, &value, &tb); + PyState_RemoveModule(&__pyx_moduledef); + PyErr_Restore(tp, value, tb); + } + #endif + } else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_ImportError, "init nw_ec_alignx"); + } + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + #if CYTHON_PEP489_MULTI_PHASE_INIT + return (__pyx_m != NULL) ? 0 : -1; + #elif PY_MAJOR_VERSION >= 3 + return __pyx_m; + #else + return; + #endif +} +/* #### Code section: cleanup_globals ### */ +/* #### Code section: cleanup_module ### */ +/* #### Code section: main_method ### */ +/* #### Code section: utility_code_pragmas ### */ +#ifdef _MSC_VER +#pragma warning( push ) +/* Warning 4127: conditional expression is constant + * Cython uses constant conditional expressions to allow in inline functions to be optimized at + * compile-time, so this warning is not useful + */ +#pragma warning( disable : 4127 ) +#endif + + + +/* #### Code section: utility_code_def ### */ + +/* --- Runtime support code --- */ +/* Refnanny */ +#if CYTHON_REFNANNY +static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { + PyObject *m = NULL, *p = NULL; + void *r = NULL; + m = PyImport_ImportModule(modname); + if (!m) goto end; + p = PyObject_GetAttrString(m, "RefNannyAPI"); + if (!p) goto end; + r = PyLong_AsVoidPtr(p); +end: + Py_XDECREF(p); + Py_XDECREF(m); + return (__Pyx_RefNannyAPIStruct *)r; +} +#endif + +/* PyErrExceptionMatches */ +#if CYTHON_FAST_THREAD_STATE +static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; i= 0x030C00A6 + PyObject *current_exception = tstate->current_exception; + if (unlikely(!current_exception)) return 0; + exc_type = (PyObject*) Py_TYPE(current_exception); + if (exc_type == err) return 1; +#else + exc_type = tstate->curexc_type; + if (exc_type == err) return 1; + if (unlikely(!exc_type)) return 0; +#endif + #if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(exc_type); + #endif + if (unlikely(PyTuple_Check(err))) { + result = __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err); + } else { + result = __Pyx_PyErr_GivenExceptionMatches(exc_type, err); + } + #if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(exc_type); + #endif + return result; +} +#endif + +/* PyErrFetchRestore */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { +#if PY_VERSION_HEX >= 0x030C00A6 + PyObject *tmp_value; + assert(type == NULL || (value != NULL && type == (PyObject*) Py_TYPE(value))); + if (value) { + #if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(((PyBaseExceptionObject*) value)->traceback != tb)) + #endif + PyException_SetTraceback(value, tb); + } + tmp_value = tstate->current_exception; + tstate->current_exception = value; + Py_XDECREF(tmp_value); + Py_XDECREF(type); + Py_XDECREF(tb); +#else + PyObject *tmp_type, *tmp_value, *tmp_tb; + tmp_type = tstate->curexc_type; + tmp_value = tstate->curexc_value; + tmp_tb = tstate->curexc_traceback; + tstate->curexc_type = type; + tstate->curexc_value = value; + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +#endif +} +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { +#if PY_VERSION_HEX >= 0x030C00A6 + PyObject* exc_value; + exc_value = tstate->current_exception; + tstate->current_exception = 0; + *value = exc_value; + *type = NULL; + *tb = NULL; + if (exc_value) { + *type = (PyObject*) Py_TYPE(exc_value); + Py_INCREF(*type); + #if CYTHON_COMPILING_IN_CPYTHON + *tb = ((PyBaseExceptionObject*) exc_value)->traceback; + Py_XINCREF(*tb); + #else + *tb = PyException_GetTraceback(exc_value); + #endif + } +#else + *type = tstate->curexc_type; + *value = tstate->curexc_value; + *tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; +#endif +} +#endif + +/* PyObjectGetAttrStr */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro)) + return tp->tp_getattro(obj, attr_name); +#if PY_MAJOR_VERSION < 3 + if (likely(tp->tp_getattr)) + return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); +#endif + return PyObject_GetAttr(obj, attr_name); +} +#endif + +/* PyObjectGetAttrStrNoError */ +#if __PYX_LIMITED_VERSION_HEX < 0x030d00A1 +static void __Pyx_PyObject_GetAttrStr_ClearAttributeError(void) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (likely(__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) + __Pyx_PyErr_Clear(); +} +#endif +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name) { + PyObject *result; +#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1 + (void) PyObject_GetOptionalAttr(obj, attr_name, &result); + return result; +#else +#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_TYPE_SLOTS && PY_VERSION_HEX >= 0x030700B1 + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro == PyObject_GenericGetAttr)) { + return _PyObject_GenericGetAttrWithDict(obj, attr_name, NULL, 1); + } +#endif + result = __Pyx_PyObject_GetAttrStr(obj, attr_name); + if (unlikely(!result)) { + __Pyx_PyObject_GetAttrStr_ClearAttributeError(); + } + return result; +#endif +} + +/* GetBuiltinName */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name) { + PyObject* result = __Pyx_PyObject_GetAttrStrNoError(__pyx_b, name); + if (unlikely(!result) && !PyErr_Occurred()) { + PyErr_Format(PyExc_NameError, +#if PY_MAJOR_VERSION >= 3 + "name '%U' is not defined", name); +#else + "name '%.200s' is not defined", PyString_AS_STRING(name)); +#endif + } + return result; +} + +/* GetTopmostException */ +#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE +static _PyErr_StackItem * +__Pyx_PyErr_GetTopmostException(PyThreadState *tstate) +{ + _PyErr_StackItem *exc_info = tstate->exc_info; + while ((exc_info->exc_value == NULL || exc_info->exc_value == Py_None) && + exc_info->previous_item != NULL) + { + exc_info = exc_info->previous_item; + } + return exc_info; +} +#endif + +/* SaveResetException */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + PyObject *exc_value = exc_info->exc_value; + if (exc_value == NULL || exc_value == Py_None) { + *value = NULL; + *type = NULL; + *tb = NULL; + } else { + *value = exc_value; + Py_INCREF(*value); + *type = (PyObject*) Py_TYPE(exc_value); + Py_INCREF(*type); + *tb = PyException_GetTraceback(exc_value); + } + #elif CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + *type = exc_info->exc_type; + *value = exc_info->exc_value; + *tb = exc_info->exc_traceback; + Py_XINCREF(*type); + Py_XINCREF(*value); + Py_XINCREF(*tb); + #else + *type = tstate->exc_type; + *value = tstate->exc_value; + *tb = tstate->exc_traceback; + Py_XINCREF(*type); + Py_XINCREF(*value); + Py_XINCREF(*tb); + #endif +} +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = tstate->exc_info; + PyObject *tmp_value = exc_info->exc_value; + exc_info->exc_value = value; + Py_XDECREF(tmp_value); + Py_XDECREF(type); + Py_XDECREF(tb); + #else + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = type; + exc_info->exc_value = value; + exc_info->exc_traceback = tb; + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = type; + tstate->exc_value = value; + tstate->exc_traceback = tb; + #endif + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); + #endif +} +#endif + +/* GetException */ +#if CYTHON_FAST_THREAD_STATE +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) +#endif +{ + PyObject *local_type = NULL, *local_value, *local_tb = NULL; +#if CYTHON_FAST_THREAD_STATE + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if PY_VERSION_HEX >= 0x030C00A6 + local_value = tstate->current_exception; + tstate->current_exception = 0; + if (likely(local_value)) { + local_type = (PyObject*) Py_TYPE(local_value); + Py_INCREF(local_type); + local_tb = PyException_GetTraceback(local_value); + } + #else + local_type = tstate->curexc_type; + local_value = tstate->curexc_value; + local_tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; + #endif +#else + PyErr_Fetch(&local_type, &local_value, &local_tb); +#endif + PyErr_NormalizeException(&local_type, &local_value, &local_tb); +#if CYTHON_FAST_THREAD_STATE && PY_VERSION_HEX >= 0x030C00A6 + if (unlikely(tstate->current_exception)) +#elif CYTHON_FAST_THREAD_STATE + if (unlikely(tstate->curexc_type)) +#else + if (unlikely(PyErr_Occurred())) +#endif + goto bad; + #if PY_MAJOR_VERSION >= 3 + if (local_tb) { + if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0)) + goto bad; + } + #endif + Py_XINCREF(local_tb); + Py_XINCREF(local_type); + Py_XINCREF(local_value); + *type = local_type; + *value = local_value; + *tb = local_tb; +#if CYTHON_FAST_THREAD_STATE + #if CYTHON_USE_EXC_INFO_STACK + { + _PyErr_StackItem *exc_info = tstate->exc_info; + #if PY_VERSION_HEX >= 0x030B00a4 + tmp_value = exc_info->exc_value; + exc_info->exc_value = local_value; + tmp_type = NULL; + tmp_tb = NULL; + Py_XDECREF(local_type); + Py_XDECREF(local_tb); + #else + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = local_type; + exc_info->exc_value = local_value; + exc_info->exc_traceback = local_tb; + #endif + } + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = local_type; + tstate->exc_value = local_value; + tstate->exc_traceback = local_tb; + #endif + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +#else + PyErr_SetExcInfo(local_type, local_value, local_tb); +#endif + return 0; +bad: + *type = 0; + *value = 0; + *tb = 0; + Py_XDECREF(local_type); + Py_XDECREF(local_value); + Py_XDECREF(local_tb); + return -1; +} + +/* PyObjectCall */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *result; + ternaryfunc call = Py_TYPE(func)->tp_call; + if (unlikely(!call)) + return PyObject_Call(func, arg, kw); + #if PY_MAJOR_VERSION < 3 + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + #else + if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) + return NULL; + #endif + result = (*call)(func, arg, kw); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* RaiseException */ +#if PY_MAJOR_VERSION < 3 +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + __Pyx_PyThreadState_declare + CYTHON_UNUSED_VAR(cause); + Py_XINCREF(type); + if (!value || value == Py_None) + value = NULL; + else + Py_INCREF(value); + if (!tb || tb == Py_None) + tb = NULL; + else { + Py_INCREF(tb); + if (!PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto raise_error; + } + } + if (PyType_Check(type)) { +#if CYTHON_COMPILING_IN_PYPY + if (!value) { + Py_INCREF(Py_None); + value = Py_None; + } +#endif + PyErr_NormalizeException(&type, &value, &tb); + } else { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto raise_error; + } + value = type; + type = (PyObject*) Py_TYPE(type); + Py_INCREF(type); + if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto raise_error; + } + } + __Pyx_PyThreadState_assign + __Pyx_ErrRestore(type, value, tb); + return; +raise_error: + Py_XDECREF(value); + Py_XDECREF(type); + Py_XDECREF(tb); + return; +} +#else +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + PyObject* owned_instance = NULL; + if (tb == Py_None) { + tb = 0; + } else if (tb && !PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto bad; + } + if (value == Py_None) + value = 0; + if (PyExceptionInstance_Check(type)) { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto bad; + } + value = type; + type = (PyObject*) Py_TYPE(value); + } else if (PyExceptionClass_Check(type)) { + PyObject *instance_class = NULL; + if (value && PyExceptionInstance_Check(value)) { + instance_class = (PyObject*) Py_TYPE(value); + if (instance_class != type) { + int is_subclass = PyObject_IsSubclass(instance_class, type); + if (!is_subclass) { + instance_class = NULL; + } else if (unlikely(is_subclass == -1)) { + goto bad; + } else { + type = instance_class; + } + } + } + if (!instance_class) { + PyObject *args; + if (!value) + args = PyTuple_New(0); + else if (PyTuple_Check(value)) { + Py_INCREF(value); + args = value; + } else + args = PyTuple_Pack(1, value); + if (!args) + goto bad; + owned_instance = PyObject_Call(type, args, NULL); + Py_DECREF(args); + if (!owned_instance) + goto bad; + value = owned_instance; + if (!PyExceptionInstance_Check(value)) { + PyErr_Format(PyExc_TypeError, + "calling %R should have returned an instance of " + "BaseException, not %R", + type, Py_TYPE(value)); + goto bad; + } + } + } else { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto bad; + } + if (cause) { + PyObject *fixed_cause; + if (cause == Py_None) { + fixed_cause = NULL; + } else if (PyExceptionClass_Check(cause)) { + fixed_cause = PyObject_CallObject(cause, NULL); + if (fixed_cause == NULL) + goto bad; + } else if (PyExceptionInstance_Check(cause)) { + fixed_cause = cause; + Py_INCREF(fixed_cause); + } else { + PyErr_SetString(PyExc_TypeError, + "exception causes must derive from " + "BaseException"); + goto bad; + } + PyException_SetCause(value, fixed_cause); + } + PyErr_SetObject(type, value); + if (tb) { + #if PY_VERSION_HEX >= 0x030C00A6 + PyException_SetTraceback(value, tb); + #elif CYTHON_FAST_THREAD_STATE + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject* tmp_tb = tstate->curexc_traceback; + if (tb != tmp_tb) { + Py_INCREF(tb); + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_tb); + } +#else + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb); + Py_INCREF(tb); + PyErr_Restore(tmp_type, tmp_value, tb); + Py_XDECREF(tmp_tb); +#endif + } +bad: + Py_XDECREF(owned_instance); + return; +} +#endif + +/* TupleAndListFromArray */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE void __Pyx_copy_object_array(PyObject *const *CYTHON_RESTRICT src, PyObject** CYTHON_RESTRICT dest, Py_ssize_t length) { + PyObject *v; + Py_ssize_t i; + for (i = 0; i < length; i++) { + v = dest[i] = src[i]; + Py_INCREF(v); + } +} +static CYTHON_INLINE PyObject * +__Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n) +{ + PyObject *res; + if (n <= 0) { + Py_INCREF(__pyx_empty_tuple); + return __pyx_empty_tuple; + } + res = PyTuple_New(n); + if (unlikely(res == NULL)) return NULL; + __Pyx_copy_object_array(src, ((PyTupleObject*)res)->ob_item, n); + return res; +} +static CYTHON_INLINE PyObject * +__Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n) +{ + PyObject *res; + if (n <= 0) { + return PyList_New(0); + } + res = PyList_New(n); + if (unlikely(res == NULL)) return NULL; + __Pyx_copy_object_array(src, ((PyListObject*)res)->ob_item, n); + return res; +} +#endif + +/* BytesEquals */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API + return PyObject_RichCompareBool(s1, s2, equals); +#else + if (s1 == s2) { + return (equals == Py_EQ); + } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { + const char *ps1, *ps2; + Py_ssize_t length = PyBytes_GET_SIZE(s1); + if (length != PyBytes_GET_SIZE(s2)) + return (equals == Py_NE); + ps1 = PyBytes_AS_STRING(s1); + ps2 = PyBytes_AS_STRING(s2); + if (ps1[0] != ps2[0]) { + return (equals == Py_NE); + } else if (length == 1) { + return (equals == Py_EQ); + } else { + int result; +#if CYTHON_USE_UNICODE_INTERNALS && (PY_VERSION_HEX < 0x030B0000) + Py_hash_t hash1, hash2; + hash1 = ((PyBytesObject*)s1)->ob_shash; + hash2 = ((PyBytesObject*)s2)->ob_shash; + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + return (equals == Py_NE); + } +#endif + result = memcmp(ps1, ps2, (size_t)length); + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) { + return (equals == Py_NE); + } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) { + return (equals == Py_NE); + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; + } +#endif +} + +/* UnicodeEquals */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API + return PyObject_RichCompareBool(s1, s2, equals); +#else +#if PY_MAJOR_VERSION < 3 + PyObject* owned_ref = NULL; +#endif + int s1_is_unicode, s2_is_unicode; + if (s1 == s2) { + goto return_eq; + } + s1_is_unicode = PyUnicode_CheckExact(s1); + s2_is_unicode = PyUnicode_CheckExact(s2); +#if PY_MAJOR_VERSION < 3 + if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) { + owned_ref = PyUnicode_FromObject(s2); + if (unlikely(!owned_ref)) + return -1; + s2 = owned_ref; + s2_is_unicode = 1; + } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) { + owned_ref = PyUnicode_FromObject(s1); + if (unlikely(!owned_ref)) + return -1; + s1 = owned_ref; + s1_is_unicode = 1; + } else if (((!s2_is_unicode) & (!s1_is_unicode))) { + return __Pyx_PyBytes_Equals(s1, s2, equals); + } +#endif + if (s1_is_unicode & s2_is_unicode) { + Py_ssize_t length; + int kind; + void *data1, *data2; + if (unlikely(__Pyx_PyUnicode_READY(s1) < 0) || unlikely(__Pyx_PyUnicode_READY(s2) < 0)) + return -1; + length = __Pyx_PyUnicode_GET_LENGTH(s1); + if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) { + goto return_ne; + } +#if CYTHON_USE_UNICODE_INTERNALS + { + Py_hash_t hash1, hash2; + #if CYTHON_PEP393_ENABLED + hash1 = ((PyASCIIObject*)s1)->hash; + hash2 = ((PyASCIIObject*)s2)->hash; + #else + hash1 = ((PyUnicodeObject*)s1)->hash; + hash2 = ((PyUnicodeObject*)s2)->hash; + #endif + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + goto return_ne; + } + } +#endif + kind = __Pyx_PyUnicode_KIND(s1); + if (kind != __Pyx_PyUnicode_KIND(s2)) { + goto return_ne; + } + data1 = __Pyx_PyUnicode_DATA(s1); + data2 = __Pyx_PyUnicode_DATA(s2); + if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) { + goto return_ne; + } else if (length == 1) { + goto return_eq; + } else { + int result = memcmp(data1, data2, (size_t)(length * kind)); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & s2_is_unicode) { + goto return_ne; + } else if ((s2 == Py_None) & s1_is_unicode) { + goto return_ne; + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; + } +return_eq: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ); +return_ne: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_NE); +#endif +} + +/* fastcall */ +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s) +{ + Py_ssize_t i, n = PyTuple_GET_SIZE(kwnames); + for (i = 0; i < n; i++) + { + if (s == PyTuple_GET_ITEM(kwnames, i)) return kwvalues[i]; + } + for (i = 0; i < n; i++) + { + int eq = __Pyx_PyUnicode_Equals(s, PyTuple_GET_ITEM(kwnames, i), Py_EQ); + if (unlikely(eq != 0)) { + if (unlikely(eq < 0)) return NULL; + return kwvalues[i]; + } + } + return NULL; +} +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 +CYTHON_UNUSED static PyObject *__Pyx_KwargsAsDict_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues) { + Py_ssize_t i, nkwargs = PyTuple_GET_SIZE(kwnames); + PyObject *dict; + dict = PyDict_New(); + if (unlikely(!dict)) + return NULL; + for (i=0; i= 3 + "%s() got multiple values for keyword argument '%U'", func_name, kw_name); + #else + "%s() got multiple values for keyword argument '%s'", func_name, + PyString_AsString(kw_name)); + #endif +} + +/* ParseKeywords */ +static int __Pyx_ParseOptionalKeywords( + PyObject *kwds, + PyObject *const *kwvalues, + PyObject **argnames[], + PyObject *kwds2, + PyObject *values[], + Py_ssize_t num_pos_args, + const char* function_name) +{ + PyObject *key = 0, *value = 0; + Py_ssize_t pos = 0; + PyObject*** name; + PyObject*** first_kw_arg = argnames + num_pos_args; + int kwds_is_tuple = CYTHON_METH_FASTCALL && likely(PyTuple_Check(kwds)); + while (1) { + Py_XDECREF(key); key = NULL; + Py_XDECREF(value); value = NULL; + if (kwds_is_tuple) { + Py_ssize_t size; +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(kwds); +#else + size = PyTuple_Size(kwds); + if (size < 0) goto bad; +#endif + if (pos >= size) break; +#if CYTHON_AVOID_BORROWED_REFS + key = __Pyx_PySequence_ITEM(kwds, pos); + if (!key) goto bad; +#elif CYTHON_ASSUME_SAFE_MACROS + key = PyTuple_GET_ITEM(kwds, pos); +#else + key = PyTuple_GetItem(kwds, pos); + if (!key) goto bad; +#endif + value = kwvalues[pos]; + pos++; + } + else + { + if (!PyDict_Next(kwds, &pos, &key, &value)) break; +#if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(key); +#endif + } + name = first_kw_arg; + while (*name && (**name != key)) name++; + if (*name) { + values[name-argnames] = value; +#if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(value); + Py_DECREF(key); +#endif + key = NULL; + value = NULL; + continue; + } +#if !CYTHON_AVOID_BORROWED_REFS + Py_INCREF(key); +#endif + Py_INCREF(value); + name = first_kw_arg; + #if PY_MAJOR_VERSION < 3 + if (likely(PyString_Check(key))) { + while (*name) { + if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) + && _PyString_Eq(**name, key)) { + values[name-argnames] = value; +#if CYTHON_AVOID_BORROWED_REFS + value = NULL; +#endif + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + if ((**argname == key) || ( + (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) + && _PyString_Eq(**argname, key))) { + goto arg_passed_twice; + } + argname++; + } + } + } else + #endif + if (likely(PyUnicode_Check(key))) { + while (*name) { + int cmp = ( + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**name) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**name, key) + ); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) { + values[name-argnames] = value; +#if CYTHON_AVOID_BORROWED_REFS + value = NULL; +#endif + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + int cmp = (**argname == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**argname) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**argname, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) goto arg_passed_twice; + argname++; + } + } + } else + goto invalid_keyword_type; + if (kwds2) { + if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; + } else { + goto invalid_keyword; + } + } + Py_XDECREF(key); + Py_XDECREF(value); + return 0; +arg_passed_twice: + __Pyx_RaiseDoubleKeywordsError(function_name, key); + goto bad; +invalid_keyword_type: + PyErr_Format(PyExc_TypeError, + "%.200s() keywords must be strings", function_name); + goto bad; +invalid_keyword: + #if PY_MAJOR_VERSION < 3 + PyErr_Format(PyExc_TypeError, + "%.200s() got an unexpected keyword argument '%.200s'", + function_name, PyString_AsString(key)); + #else + PyErr_Format(PyExc_TypeError, + "%s() got an unexpected keyword argument '%U'", + function_name, key); + #endif +bad: + Py_XDECREF(key); + Py_XDECREF(value); + return -1; +} + +/* ArgTypeTest */ +static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact) +{ + __Pyx_TypeName type_name; + __Pyx_TypeName obj_type_name; + if (unlikely(!type)) { + PyErr_SetString(PyExc_SystemError, "Missing type object"); + return 0; + } + else if (exact) { + #if PY_MAJOR_VERSION == 2 + if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1; + #endif + } + else { + if (likely(__Pyx_TypeCheck(obj, type))) return 1; + } + type_name = __Pyx_PyType_GetName(type); + obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, + "Argument '%.200s' has incorrect type (expected " __Pyx_FMT_TYPENAME + ", got " __Pyx_FMT_TYPENAME ")", name, type_name, obj_type_name); + __Pyx_DECREF_TypeName(type_name); + __Pyx_DECREF_TypeName(obj_type_name); + return 0; +} + +/* IsLittleEndian */ +static CYTHON_INLINE int __Pyx_Is_Little_Endian(void) +{ + union { + uint32_t u32; + uint8_t u8[4]; + } S; + S.u32 = 0x01020304; + return S.u8[0] == 4; +} + +/* BufferFormatCheck */ +static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx, + __Pyx_BufFmt_StackElem* stack, + __Pyx_TypeInfo* type) { + stack[0].field = &ctx->root; + stack[0].parent_offset = 0; + ctx->root.type = type; + ctx->root.name = "buffer dtype"; + ctx->root.offset = 0; + ctx->head = stack; + ctx->head->field = &ctx->root; + ctx->fmt_offset = 0; + ctx->head->parent_offset = 0; + ctx->new_packmode = '@'; + ctx->enc_packmode = '@'; + ctx->new_count = 1; + ctx->enc_count = 0; + ctx->enc_type = 0; + ctx->is_complex = 0; + ctx->is_valid_array = 0; + ctx->struct_alignment = 0; + while (type->typegroup == 'S') { + ++ctx->head; + ctx->head->field = type->fields; + ctx->head->parent_offset = 0; + type = type->fields->type; + } +} +static int __Pyx_BufFmt_ParseNumber(const char** ts) { + int count; + const char* t = *ts; + if (*t < '0' || *t > '9') { + return -1; + } else { + count = *t++ - '0'; + while (*t >= '0' && *t <= '9') { + count *= 10; + count += *t++ - '0'; + } + } + *ts = t; + return count; +} +static int __Pyx_BufFmt_ExpectNumber(const char **ts) { + int number = __Pyx_BufFmt_ParseNumber(ts); + if (number == -1) + PyErr_Format(PyExc_ValueError,\ + "Does not understand character buffer dtype format string ('%c')", **ts); + return number; +} +static void __Pyx_BufFmt_RaiseUnexpectedChar(char ch) { + PyErr_Format(PyExc_ValueError, + "Unexpected format string character: '%c'", ch); +} +static const char* __Pyx_BufFmt_DescribeTypeChar(char ch, int is_complex) { + switch (ch) { + case '?': return "'bool'"; + case 'c': return "'char'"; + case 'b': return "'signed char'"; + case 'B': return "'unsigned char'"; + case 'h': return "'short'"; + case 'H': return "'unsigned short'"; + case 'i': return "'int'"; + case 'I': return "'unsigned int'"; + case 'l': return "'long'"; + case 'L': return "'unsigned long'"; + case 'q': return "'long long'"; + case 'Q': return "'unsigned long long'"; + case 'f': return (is_complex ? "'complex float'" : "'float'"); + case 'd': return (is_complex ? "'complex double'" : "'double'"); + case 'g': return (is_complex ? "'complex long double'" : "'long double'"); + case 'T': return "a struct"; + case 'O': return "Python object"; + case 'P': return "a pointer"; + case 's': case 'p': return "a string"; + case 0: return "end"; + default: return "unparsable format string"; + } +} +static size_t __Pyx_BufFmt_TypeCharToStandardSize(char ch, int is_complex) { + switch (ch) { + case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return 2; + case 'i': case 'I': case 'l': case 'L': return 4; + case 'q': case 'Q': return 8; + case 'f': return (is_complex ? 8 : 4); + case 'd': return (is_complex ? 16 : 8); + case 'g': { + PyErr_SetString(PyExc_ValueError, "Python does not define a standard format string size for long double ('g').."); + return 0; + } + case 'O': case 'P': return sizeof(void*); + default: + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } +} +static size_t __Pyx_BufFmt_TypeCharToNativeSize(char ch, int is_complex) { + switch (ch) { + case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return sizeof(short); + case 'i': case 'I': return sizeof(int); + case 'l': case 'L': return sizeof(long); + #ifdef HAVE_LONG_LONG + case 'q': case 'Q': return sizeof(PY_LONG_LONG); + #endif + case 'f': return sizeof(float) * (is_complex ? 2 : 1); + case 'd': return sizeof(double) * (is_complex ? 2 : 1); + case 'g': return sizeof(long double) * (is_complex ? 2 : 1); + case 'O': case 'P': return sizeof(void*); + default: { + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } + } +} +typedef struct { char c; short x; } __Pyx_st_short; +typedef struct { char c; int x; } __Pyx_st_int; +typedef struct { char c; long x; } __Pyx_st_long; +typedef struct { char c; float x; } __Pyx_st_float; +typedef struct { char c; double x; } __Pyx_st_double; +typedef struct { char c; long double x; } __Pyx_st_longdouble; +typedef struct { char c; void *x; } __Pyx_st_void_p; +#ifdef HAVE_LONG_LONG +typedef struct { char c; PY_LONG_LONG x; } __Pyx_st_longlong; +#endif +static size_t __Pyx_BufFmt_TypeCharToAlignment(char ch, int is_complex) { + CYTHON_UNUSED_VAR(is_complex); + switch (ch) { + case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return sizeof(__Pyx_st_short) - sizeof(short); + case 'i': case 'I': return sizeof(__Pyx_st_int) - sizeof(int); + case 'l': case 'L': return sizeof(__Pyx_st_long) - sizeof(long); +#ifdef HAVE_LONG_LONG + case 'q': case 'Q': return sizeof(__Pyx_st_longlong) - sizeof(PY_LONG_LONG); +#endif + case 'f': return sizeof(__Pyx_st_float) - sizeof(float); + case 'd': return sizeof(__Pyx_st_double) - sizeof(double); + case 'g': return sizeof(__Pyx_st_longdouble) - sizeof(long double); + case 'P': case 'O': return sizeof(__Pyx_st_void_p) - sizeof(void*); + default: + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } +} +/* These are for computing the padding at the end of the struct to align + on the first member of the struct. This will probably the same as above, + but we don't have any guarantees. + */ +typedef struct { short x; char c; } __Pyx_pad_short; +typedef struct { int x; char c; } __Pyx_pad_int; +typedef struct { long x; char c; } __Pyx_pad_long; +typedef struct { float x; char c; } __Pyx_pad_float; +typedef struct { double x; char c; } __Pyx_pad_double; +typedef struct { long double x; char c; } __Pyx_pad_longdouble; +typedef struct { void *x; char c; } __Pyx_pad_void_p; +#ifdef HAVE_LONG_LONG +typedef struct { PY_LONG_LONG x; char c; } __Pyx_pad_longlong; +#endif +static size_t __Pyx_BufFmt_TypeCharToPadding(char ch, int is_complex) { + CYTHON_UNUSED_VAR(is_complex); + switch (ch) { + case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return sizeof(__Pyx_pad_short) - sizeof(short); + case 'i': case 'I': return sizeof(__Pyx_pad_int) - sizeof(int); + case 'l': case 'L': return sizeof(__Pyx_pad_long) - sizeof(long); +#ifdef HAVE_LONG_LONG + case 'q': case 'Q': return sizeof(__Pyx_pad_longlong) - sizeof(PY_LONG_LONG); +#endif + case 'f': return sizeof(__Pyx_pad_float) - sizeof(float); + case 'd': return sizeof(__Pyx_pad_double) - sizeof(double); + case 'g': return sizeof(__Pyx_pad_longdouble) - sizeof(long double); + case 'P': case 'O': return sizeof(__Pyx_pad_void_p) - sizeof(void*); + default: + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } +} +static char __Pyx_BufFmt_TypeCharToGroup(char ch, int is_complex) { + switch (ch) { + case 'c': + return 'H'; + case 'b': case 'h': case 'i': + case 'l': case 'q': case 's': case 'p': + return 'I'; + case '?': case 'B': case 'H': case 'I': case 'L': case 'Q': + return 'U'; + case 'f': case 'd': case 'g': + return (is_complex ? 'C' : 'R'); + case 'O': + return 'O'; + case 'P': + return 'P'; + default: { + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } + } +} +static void __Pyx_BufFmt_RaiseExpected(__Pyx_BufFmt_Context* ctx) { + if (ctx->head == NULL || ctx->head->field == &ctx->root) { + const char* expected; + const char* quote; + if (ctx->head == NULL) { + expected = "end"; + quote = ""; + } else { + expected = ctx->head->field->type->name; + quote = "'"; + } + PyErr_Format(PyExc_ValueError, + "Buffer dtype mismatch, expected %s%s%s but got %s", + quote, expected, quote, + __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex)); + } else { + __Pyx_StructField* field = ctx->head->field; + __Pyx_StructField* parent = (ctx->head - 1)->field; + PyErr_Format(PyExc_ValueError, + "Buffer dtype mismatch, expected '%s' but got %s in '%s.%s'", + field->type->name, __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex), + parent->type->name, field->name); + } +} +static int __Pyx_BufFmt_ProcessTypeChunk(__Pyx_BufFmt_Context* ctx) { + char group; + size_t size, offset, arraysize = 1; + if (ctx->enc_type == 0) return 0; + if (ctx->head->field->type->arraysize[0]) { + int i, ndim = 0; + if (ctx->enc_type == 's' || ctx->enc_type == 'p') { + ctx->is_valid_array = ctx->head->field->type->ndim == 1; + ndim = 1; + if (ctx->enc_count != ctx->head->field->type->arraysize[0]) { + PyErr_Format(PyExc_ValueError, + "Expected a dimension of size %zu, got %zu", + ctx->head->field->type->arraysize[0], ctx->enc_count); + return -1; + } + } + if (!ctx->is_valid_array) { + PyErr_Format(PyExc_ValueError, "Expected %d dimensions, got %d", + ctx->head->field->type->ndim, ndim); + return -1; + } + for (i = 0; i < ctx->head->field->type->ndim; i++) { + arraysize *= ctx->head->field->type->arraysize[i]; + } + ctx->is_valid_array = 0; + ctx->enc_count = 1; + } + group = __Pyx_BufFmt_TypeCharToGroup(ctx->enc_type, ctx->is_complex); + do { + __Pyx_StructField* field = ctx->head->field; + __Pyx_TypeInfo* type = field->type; + if (ctx->enc_packmode == '@' || ctx->enc_packmode == '^') { + size = __Pyx_BufFmt_TypeCharToNativeSize(ctx->enc_type, ctx->is_complex); + } else { + size = __Pyx_BufFmt_TypeCharToStandardSize(ctx->enc_type, ctx->is_complex); + } + if (ctx->enc_packmode == '@') { + size_t align_at = __Pyx_BufFmt_TypeCharToAlignment(ctx->enc_type, ctx->is_complex); + size_t align_mod_offset; + if (align_at == 0) return -1; + align_mod_offset = ctx->fmt_offset % align_at; + if (align_mod_offset > 0) ctx->fmt_offset += align_at - align_mod_offset; + if (ctx->struct_alignment == 0) + ctx->struct_alignment = __Pyx_BufFmt_TypeCharToPadding(ctx->enc_type, + ctx->is_complex); + } + if (type->size != size || type->typegroup != group) { + if (type->typegroup == 'C' && type->fields != NULL) { + size_t parent_offset = ctx->head->parent_offset + field->offset; + ++ctx->head; + ctx->head->field = type->fields; + ctx->head->parent_offset = parent_offset; + continue; + } + if ((type->typegroup == 'H' || group == 'H') && type->size == size) { + } else { + __Pyx_BufFmt_RaiseExpected(ctx); + return -1; + } + } + offset = ctx->head->parent_offset + field->offset; + if (ctx->fmt_offset != offset) { + PyErr_Format(PyExc_ValueError, + "Buffer dtype mismatch; next field is at offset %" CYTHON_FORMAT_SSIZE_T "d but %" CYTHON_FORMAT_SSIZE_T "d expected", + (Py_ssize_t)ctx->fmt_offset, (Py_ssize_t)offset); + return -1; + } + ctx->fmt_offset += size; + if (arraysize) + ctx->fmt_offset += (arraysize - 1) * size; + --ctx->enc_count; + while (1) { + if (field == &ctx->root) { + ctx->head = NULL; + if (ctx->enc_count != 0) { + __Pyx_BufFmt_RaiseExpected(ctx); + return -1; + } + break; + } + ctx->head->field = ++field; + if (field->type == NULL) { + --ctx->head; + field = ctx->head->field; + continue; + } else if (field->type->typegroup == 'S') { + size_t parent_offset = ctx->head->parent_offset + field->offset; + if (field->type->fields->type == NULL) continue; + field = field->type->fields; + ++ctx->head; + ctx->head->field = field; + ctx->head->parent_offset = parent_offset; + break; + } else { + break; + } + } + } while (ctx->enc_count); + ctx->enc_type = 0; + ctx->is_complex = 0; + return 0; +} +static int +__pyx_buffmt_parse_array(__Pyx_BufFmt_Context* ctx, const char** tsp) +{ + const char *ts = *tsp; + int i = 0, number, ndim; + ++ts; + if (ctx->new_count != 1) { + PyErr_SetString(PyExc_ValueError, + "Cannot handle repeated arrays in format string"); + return -1; + } + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return -1; + ndim = ctx->head->field->type->ndim; + while (*ts && *ts != ')') { + switch (*ts) { + case ' ': case '\f': case '\r': case '\n': case '\t': case '\v': continue; + default: break; + } + number = __Pyx_BufFmt_ExpectNumber(&ts); + if (number == -1) return -1; + if (i < ndim && (size_t) number != ctx->head->field->type->arraysize[i]) { + PyErr_Format(PyExc_ValueError, + "Expected a dimension of size %zu, got %d", + ctx->head->field->type->arraysize[i], number); + return -1; + } + if (*ts != ',' && *ts != ')') { + PyErr_Format(PyExc_ValueError, + "Expected a comma in format string, got '%c'", *ts); + return -1; + } + if (*ts == ',') ts++; + i++; + } + if (i != ndim) { + PyErr_Format(PyExc_ValueError, "Expected %d dimension(s), got %d", + ctx->head->field->type->ndim, i); + return -1; + } + if (!*ts) { + PyErr_SetString(PyExc_ValueError, + "Unexpected end of format string, expected ')'"); + return -1; + } + ctx->is_valid_array = 1; + ctx->new_count = 1; + *tsp = ++ts; + return 0; +} +static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts) { + int got_Z = 0; + while (1) { + switch(*ts) { + case 0: + if (ctx->enc_type != 0 && ctx->head == NULL) { + __Pyx_BufFmt_RaiseExpected(ctx); + return NULL; + } + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + if (ctx->head != NULL) { + __Pyx_BufFmt_RaiseExpected(ctx); + return NULL; + } + return ts; + case ' ': + case '\r': + case '\n': + ++ts; + break; + case '<': + if (!__Pyx_Is_Little_Endian()) { + PyErr_SetString(PyExc_ValueError, "Little-endian buffer not supported on big-endian compiler"); + return NULL; + } + ctx->new_packmode = '='; + ++ts; + break; + case '>': + case '!': + if (__Pyx_Is_Little_Endian()) { + PyErr_SetString(PyExc_ValueError, "Big-endian buffer not supported on little-endian compiler"); + return NULL; + } + ctx->new_packmode = '='; + ++ts; + break; + case '=': + case '@': + case '^': + ctx->new_packmode = *ts++; + break; + case 'T': + { + const char* ts_after_sub; + size_t i, struct_count = ctx->new_count; + size_t struct_alignment = ctx->struct_alignment; + ctx->new_count = 1; + ++ts; + if (*ts != '{') { + PyErr_SetString(PyExc_ValueError, "Buffer acquisition: Expected '{' after 'T'"); + return NULL; + } + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->enc_type = 0; + ctx->enc_count = 0; + ctx->struct_alignment = 0; + ++ts; + ts_after_sub = ts; + for (i = 0; i != struct_count; ++i) { + ts_after_sub = __Pyx_BufFmt_CheckString(ctx, ts); + if (!ts_after_sub) return NULL; + } + ts = ts_after_sub; + if (struct_alignment) ctx->struct_alignment = struct_alignment; + } + break; + case '}': + { + size_t alignment = ctx->struct_alignment; + ++ts; + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->enc_type = 0; + if (alignment && ctx->fmt_offset % alignment) { + ctx->fmt_offset += alignment - (ctx->fmt_offset % alignment); + } + } + return ts; + case 'x': + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->fmt_offset += ctx->new_count; + ctx->new_count = 1; + ctx->enc_count = 0; + ctx->enc_type = 0; + ctx->enc_packmode = ctx->new_packmode; + ++ts; + break; + case 'Z': + got_Z = 1; + ++ts; + if (*ts != 'f' && *ts != 'd' && *ts != 'g') { + __Pyx_BufFmt_RaiseUnexpectedChar('Z'); + return NULL; + } + CYTHON_FALLTHROUGH; + case '?': case 'c': case 'b': case 'B': case 'h': case 'H': case 'i': case 'I': + case 'l': case 'L': case 'q': case 'Q': + case 'f': case 'd': case 'g': + case 'O': case 'p': + if ((ctx->enc_type == *ts) && (got_Z == ctx->is_complex) && + (ctx->enc_packmode == ctx->new_packmode) && (!ctx->is_valid_array)) { + ctx->enc_count += ctx->new_count; + ctx->new_count = 1; + got_Z = 0; + ++ts; + break; + } + CYTHON_FALLTHROUGH; + case 's': + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->enc_count = ctx->new_count; + ctx->enc_packmode = ctx->new_packmode; + ctx->enc_type = *ts; + ctx->is_complex = got_Z; + ++ts; + ctx->new_count = 1; + got_Z = 0; + break; + case ':': + ++ts; + while(*ts != ':') ++ts; + ++ts; + break; + case '(': + if (__pyx_buffmt_parse_array(ctx, &ts) < 0) return NULL; + break; + default: + { + int number = __Pyx_BufFmt_ExpectNumber(&ts); + if (number == -1) return NULL; + ctx->new_count = (size_t)number; + } + } + } +} + +/* BufferGetAndValidate */ + static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info) { + if (unlikely(info->buf == NULL)) return; + if (info->suboffsets == __Pyx_minusones) info->suboffsets = NULL; + __Pyx_ReleaseBuffer(info); +} +static void __Pyx_ZeroBuffer(Py_buffer* buf) { + buf->buf = NULL; + buf->obj = NULL; + buf->strides = __Pyx_zeros; + buf->shape = __Pyx_zeros; + buf->suboffsets = __Pyx_minusones; +} +static int __Pyx__GetBufferAndValidate( + Py_buffer* buf, PyObject* obj, __Pyx_TypeInfo* dtype, int flags, + int nd, int cast, __Pyx_BufFmt_StackElem* stack) +{ + buf->buf = NULL; + if (unlikely(__Pyx_GetBuffer(obj, buf, flags) == -1)) { + __Pyx_ZeroBuffer(buf); + return -1; + } + if (unlikely(buf->ndim != nd)) { + PyErr_Format(PyExc_ValueError, + "Buffer has wrong number of dimensions (expected %d, got %d)", + nd, buf->ndim); + goto fail; + } + if (!cast) { + __Pyx_BufFmt_Context ctx; + __Pyx_BufFmt_Init(&ctx, stack, dtype); + if (!__Pyx_BufFmt_CheckString(&ctx, buf->format)) goto fail; + } + if (unlikely((size_t)buf->itemsize != dtype->size)) { + PyErr_Format(PyExc_ValueError, + "Item size of buffer (%" CYTHON_FORMAT_SSIZE_T "d byte%s) does not match size of '%s' (%" CYTHON_FORMAT_SSIZE_T "d byte%s)", + buf->itemsize, (buf->itemsize > 1) ? "s" : "", + dtype->name, (Py_ssize_t)dtype->size, (dtype->size > 1) ? "s" : ""); + goto fail; + } + if (buf->suboffsets == NULL) buf->suboffsets = __Pyx_minusones; + return 0; +fail:; + __Pyx_SafeReleaseBuffer(buf); + return -1; +} + +/* PyDictVersioning */ + #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0; +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) { + PyObject **dictptr = NULL; + Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset; + if (offset) { +#if CYTHON_COMPILING_IN_CPYTHON + dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj); +#else + dictptr = _PyObject_GetDictPtr(obj); +#endif + } + return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0; +} +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict))) + return 0; + return obj_dict_version == __Pyx_get_object_dict_version(obj); +} +#endif + +/* GetModuleGlobalName */ + #if CYTHON_USE_DICT_VERSIONS +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value) +#else +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name) +#endif +{ + PyObject *result; +#if !CYTHON_AVOID_BORROWED_REFS +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && PY_VERSION_HEX < 0x030d0000 + result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } else if (unlikely(PyErr_Occurred())) { + return NULL; + } +#elif CYTHON_COMPILING_IN_LIMITED_API + if (unlikely(!__pyx_m)) { + return NULL; + } + result = PyObject_GetAttr(__pyx_m, name); + if (likely(result)) { + return result; + } +#else + result = PyDict_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } +#endif +#else + result = PyObject_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } + PyErr_Clear(); +#endif + return __Pyx_GetBuiltinName(name); +} + +/* PyFunctionFastCall */ + #if CYTHON_FAST_PYCALL && !CYTHON_VECTORCALL +static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na, + PyObject *globals) { + PyFrameObject *f; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject **fastlocals; + Py_ssize_t i; + PyObject *result; + assert(globals != NULL); + /* XXX Perhaps we should create a specialized + PyFrame_New() that doesn't take locals, but does + take builtins without sanity checking them. + */ + assert(tstate != NULL); + f = PyFrame_New(tstate, co, globals, NULL); + if (f == NULL) { + return NULL; + } + fastlocals = __Pyx_PyFrame_GetLocalsplus(f); + for (i = 0; i < na; i++) { + Py_INCREF(*args); + fastlocals[i] = *args++; + } + result = PyEval_EvalFrameEx(f,0); + ++tstate->recursion_depth; + Py_DECREF(f); + --tstate->recursion_depth; + return result; +} +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) { + PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); + PyObject *globals = PyFunction_GET_GLOBALS(func); + PyObject *argdefs = PyFunction_GET_DEFAULTS(func); + PyObject *closure; +#if PY_MAJOR_VERSION >= 3 + PyObject *kwdefs; +#endif + PyObject *kwtuple, **k; + PyObject **d; + Py_ssize_t nd; + Py_ssize_t nk; + PyObject *result; + assert(kwargs == NULL || PyDict_Check(kwargs)); + nk = kwargs ? PyDict_Size(kwargs) : 0; + #if PY_MAJOR_VERSION < 3 + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) { + return NULL; + } + #else + if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) { + return NULL; + } + #endif + if ( +#if PY_MAJOR_VERSION >= 3 + co->co_kwonlyargcount == 0 && +#endif + likely(kwargs == NULL || nk == 0) && + co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) { + if (argdefs == NULL && co->co_argcount == nargs) { + result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals); + goto done; + } + else if (nargs == 0 && argdefs != NULL + && co->co_argcount == Py_SIZE(argdefs)) { + /* function called with no arguments, but all parameters have + a default value: use default values as arguments .*/ + args = &PyTuple_GET_ITEM(argdefs, 0); + result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals); + goto done; + } + } + if (kwargs != NULL) { + Py_ssize_t pos, i; + kwtuple = PyTuple_New(2 * nk); + if (kwtuple == NULL) { + result = NULL; + goto done; + } + k = &PyTuple_GET_ITEM(kwtuple, 0); + pos = i = 0; + while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { + Py_INCREF(k[i]); + Py_INCREF(k[i+1]); + i += 2; + } + nk = i / 2; + } + else { + kwtuple = NULL; + k = NULL; + } + closure = PyFunction_GET_CLOSURE(func); +#if PY_MAJOR_VERSION >= 3 + kwdefs = PyFunction_GET_KW_DEFAULTS(func); +#endif + if (argdefs != NULL) { + d = &PyTuple_GET_ITEM(argdefs, 0); + nd = Py_SIZE(argdefs); + } + else { + d = NULL; + nd = 0; + } +#if PY_MAJOR_VERSION >= 3 + result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, kwdefs, closure); +#else + result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, closure); +#endif + Py_XDECREF(kwtuple); +done: + Py_LeaveRecursiveCall(); + return result; +} +#endif + +/* PyObjectCallMethO */ + #if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) { + PyObject *self, *result; + PyCFunction cfunc; + cfunc = __Pyx_CyOrPyCFunction_GET_FUNCTION(func); + self = __Pyx_CyOrPyCFunction_GET_SELF(func); + #if PY_MAJOR_VERSION < 3 + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + #else + if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) + return NULL; + #endif + result = cfunc(self, arg); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectFastCall */ + #if PY_VERSION_HEX < 0x03090000 || CYTHON_COMPILING_IN_LIMITED_API +static PyObject* __Pyx_PyObject_FastCall_fallback(PyObject *func, PyObject **args, size_t nargs, PyObject *kwargs) { + PyObject *argstuple; + PyObject *result = 0; + size_t i; + argstuple = PyTuple_New((Py_ssize_t)nargs); + if (unlikely(!argstuple)) return NULL; + for (i = 0; i < nargs; i++) { + Py_INCREF(args[i]); + if (__Pyx_PyTuple_SET_ITEM(argstuple, (Py_ssize_t)i, args[i]) < 0) goto bad; + } + result = __Pyx_PyObject_Call(func, argstuple, kwargs); + bad: + Py_DECREF(argstuple); + return result; +} +#endif +static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject **args, size_t _nargs, PyObject *kwargs) { + Py_ssize_t nargs = __Pyx_PyVectorcall_NARGS(_nargs); +#if CYTHON_COMPILING_IN_CPYTHON + if (nargs == 0 && kwargs == NULL) { + if (__Pyx_CyOrPyCFunction_Check(func) && likely( __Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_NOARGS)) + return __Pyx_PyObject_CallMethO(func, NULL); + } + else if (nargs == 1 && kwargs == NULL) { + if (__Pyx_CyOrPyCFunction_Check(func) && likely( __Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_O)) + return __Pyx_PyObject_CallMethO(func, args[0]); + } +#endif + #if PY_VERSION_HEX < 0x030800B1 + #if CYTHON_FAST_PYCCALL + if (PyCFunction_Check(func)) { + if (kwargs) { + return _PyCFunction_FastCallDict(func, args, nargs, kwargs); + } else { + return _PyCFunction_FastCallKeywords(func, args, nargs, NULL); + } + } + #if PY_VERSION_HEX >= 0x030700A1 + if (!kwargs && __Pyx_IS_TYPE(func, &PyMethodDescr_Type)) { + return _PyMethodDescr_FastCallKeywords(func, args, nargs, NULL); + } + #endif + #endif + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(func)) { + return __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs); + } + #endif + #endif + if (kwargs == NULL) { + #if CYTHON_VECTORCALL + #if PY_VERSION_HEX < 0x03090000 + vectorcallfunc f = _PyVectorcall_Function(func); + #else + vectorcallfunc f = PyVectorcall_Function(func); + #endif + if (f) { + return f(func, args, (size_t)nargs, NULL); + } + #elif defined(__Pyx_CyFunction_USED) && CYTHON_BACKPORT_VECTORCALL + if (__Pyx_CyFunction_CheckExact(func)) { + __pyx_vectorcallfunc f = __Pyx_CyFunction_func_vectorcall(func); + if (f) return f(func, args, (size_t)nargs, NULL); + } + #endif + } + if (nargs == 0) { + return __Pyx_PyObject_Call(func, __pyx_empty_tuple, kwargs); + } + #if PY_VERSION_HEX >= 0x03090000 && !CYTHON_COMPILING_IN_LIMITED_API + return PyObject_VectorcallDict(func, args, (size_t)nargs, kwargs); + #else + return __Pyx_PyObject_FastCall_fallback(func, args, (size_t)nargs, kwargs); + #endif +} + +/* ExtTypeTest */ + static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) { + __Pyx_TypeName obj_type_name; + __Pyx_TypeName type_name; + if (unlikely(!type)) { + PyErr_SetString(PyExc_SystemError, "Missing type object"); + return 0; + } + if (likely(__Pyx_TypeCheck(obj, type))) + return 1; + obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + type_name = __Pyx_PyType_GetName(type); + PyErr_Format(PyExc_TypeError, + "Cannot convert " __Pyx_FMT_TYPENAME " to " __Pyx_FMT_TYPENAME, + obj_type_name, type_name); + __Pyx_DECREF_TypeName(obj_type_name); + __Pyx_DECREF_TypeName(type_name); + return 0; +} + +/* DictGetItem */ + #if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY +static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) { + PyObject *value; + value = PyDict_GetItemWithError(d, key); + if (unlikely(!value)) { + if (!PyErr_Occurred()) { + if (unlikely(PyTuple_Check(key))) { + PyObject* args = PyTuple_Pack(1, key); + if (likely(args)) { + PyErr_SetObject(PyExc_KeyError, args); + Py_DECREF(args); + } + } else { + PyErr_SetObject(PyExc_KeyError, key); + } + } + return NULL; + } + Py_INCREF(value); + return value; +} +#endif + +/* RaiseTooManyValuesToUnpack */ + static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { + PyErr_Format(PyExc_ValueError, + "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected); +} + +/* RaiseNeedMoreValuesToUnpack */ + static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { + PyErr_Format(PyExc_ValueError, + "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack", + index, (index == 1) ? "" : "s"); +} + +/* IterFinish */ + static CYTHON_INLINE int __Pyx_IterFinish(void) { + PyObject* exc_type; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (unlikely(exc_type)) { + if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) + return -1; + __Pyx_PyErr_Clear(); + return 0; + } + return 0; +} + +/* UnpackItemEndCheck */ + static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) { + if (unlikely(retval)) { + Py_DECREF(retval); + __Pyx_RaiseTooManyValuesError(expected); + return -1; + } + return __Pyx_IterFinish(); +} + +/* GetItemInt */ + static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { + PyObject *r; + if (unlikely(!j)) return NULL; + r = PyObject_GetItem(o, j); + Py_DECREF(j); + return r; +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyList_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyList_GET_SIZE(o)))) { + PyObject *r = PyList_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyTuple_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS + if (is_list || PyList_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); + if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) { + PyObject *r = PyList_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } + else if (PyTuple_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); + if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } else { + PyMappingMethods *mm = Py_TYPE(o)->tp_as_mapping; + PySequenceMethods *sm = Py_TYPE(o)->tp_as_sequence; + if (mm && mm->mp_subscript) { + PyObject *r, *key = PyInt_FromSsize_t(i); + if (unlikely(!key)) return NULL; + r = mm->mp_subscript(o, key); + Py_DECREF(key); + return r; + } + if (likely(sm && sm->sq_item)) { + if (wraparound && unlikely(i < 0) && likely(sm->sq_length)) { + Py_ssize_t l = sm->sq_length(o); + if (likely(l >= 0)) { + i += l; + } else { + if (!PyErr_ExceptionMatches(PyExc_OverflowError)) + return NULL; + PyErr_Clear(); + } + } + return sm->sq_item(o, i); + } + } +#else + if (is_list || !PyMapping_Check(o)) { + return PySequence_GetItem(o, i); + } +#endif + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +} + +/* RaiseUnexpectedTypeError */ + static int +__Pyx_RaiseUnexpectedTypeError(const char *expected, PyObject *obj) +{ + __Pyx_TypeName obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, "Expected %s, got " __Pyx_FMT_TYPENAME, + expected, obj_type_name); + __Pyx_DECREF_TypeName(obj_type_name); + return 0; +} + +/* PyObjectCallOneArg */ + static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *args[2] = {NULL, arg}; + return __Pyx_PyObject_FastCall(func, args+1, 1 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); +} + +/* ObjectGetItem */ + #if CYTHON_USE_TYPE_SLOTS +static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject *index) { + PyObject *runerr = NULL; + Py_ssize_t key_value; + key_value = __Pyx_PyIndex_AsSsize_t(index); + if (likely(key_value != -1 || !(runerr = PyErr_Occurred()))) { + return __Pyx_GetItemInt_Fast(obj, key_value, 0, 1, 1); + } + if (PyErr_GivenExceptionMatches(runerr, PyExc_OverflowError)) { + __Pyx_TypeName index_type_name = __Pyx_PyType_GetName(Py_TYPE(index)); + PyErr_Clear(); + PyErr_Format(PyExc_IndexError, + "cannot fit '" __Pyx_FMT_TYPENAME "' into an index-sized integer", index_type_name); + __Pyx_DECREF_TypeName(index_type_name); + } + return NULL; +} +static PyObject *__Pyx_PyObject_GetItem_Slow(PyObject *obj, PyObject *key) { + __Pyx_TypeName obj_type_name; + if (likely(PyType_Check(obj))) { + PyObject *meth = __Pyx_PyObject_GetAttrStrNoError(obj, __pyx_n_s_class_getitem); + if (!meth) { + PyErr_Clear(); + } else { + PyObject *result = __Pyx_PyObject_CallOneArg(meth, key); + Py_DECREF(meth); + return result; + } + } + obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, + "'" __Pyx_FMT_TYPENAME "' object is not subscriptable", obj_type_name); + __Pyx_DECREF_TypeName(obj_type_name); + return NULL; +} +static PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject *key) { + PyTypeObject *tp = Py_TYPE(obj); + PyMappingMethods *mm = tp->tp_as_mapping; + PySequenceMethods *sm = tp->tp_as_sequence; + if (likely(mm && mm->mp_subscript)) { + return mm->mp_subscript(obj, key); + } + if (likely(sm && sm->sq_item)) { + return __Pyx_PyObject_GetIndex(obj, key); + } + return __Pyx_PyObject_GetItem_Slow(obj, key); +} +#endif + +/* SliceTupleAndList */ + #if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE void __Pyx_crop_slice(Py_ssize_t* _start, Py_ssize_t* _stop, Py_ssize_t* _length) { + Py_ssize_t start = *_start, stop = *_stop, length = *_length; + if (start < 0) { + start += length; + if (start < 0) + start = 0; + } + if (stop < 0) + stop += length; + else if (stop > length) + stop = length; + *_length = stop - start; + *_start = start; + *_stop = stop; +} +static CYTHON_INLINE PyObject* __Pyx_PyList_GetSlice( + PyObject* src, Py_ssize_t start, Py_ssize_t stop) { + Py_ssize_t length = PyList_GET_SIZE(src); + __Pyx_crop_slice(&start, &stop, &length); + if (length <= 0) { + return PyList_New(0); + } + return __Pyx_PyList_FromArray(((PyListObject*)src)->ob_item + start, length); +} +static CYTHON_INLINE PyObject* __Pyx_PyTuple_GetSlice( + PyObject* src, Py_ssize_t start, Py_ssize_t stop) { + Py_ssize_t length = PyTuple_GET_SIZE(src); + __Pyx_crop_slice(&start, &stop, &length); + return __Pyx_PyTuple_FromArray(((PyTupleObject*)src)->ob_item + start, length); +} +#endif + +/* SetItemInt */ + static int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v) { + int r; + if (unlikely(!j)) return -1; + r = PyObject_SetItem(o, j, v); + Py_DECREF(j); + return r; +} +static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v, int is_list, + CYTHON_NCP_UNUSED int wraparound, CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS + if (is_list || PyList_CheckExact(o)) { + Py_ssize_t n = (!wraparound) ? i : ((likely(i >= 0)) ? i : i + PyList_GET_SIZE(o)); + if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o)))) { + PyObject* old = PyList_GET_ITEM(o, n); + Py_INCREF(v); + PyList_SET_ITEM(o, n, v); + Py_DECREF(old); + return 1; + } + } else { + PyMappingMethods *mm = Py_TYPE(o)->tp_as_mapping; + PySequenceMethods *sm = Py_TYPE(o)->tp_as_sequence; + if (mm && mm->mp_ass_subscript) { + int r; + PyObject *key = PyInt_FromSsize_t(i); + if (unlikely(!key)) return -1; + r = mm->mp_ass_subscript(o, key, v); + Py_DECREF(key); + return r; + } + if (likely(sm && sm->sq_ass_item)) { + if (wraparound && unlikely(i < 0) && likely(sm->sq_length)) { + Py_ssize_t l = sm->sq_length(o); + if (likely(l >= 0)) { + i += l; + } else { + if (!PyErr_ExceptionMatches(PyExc_OverflowError)) + return -1; + PyErr_Clear(); + } + } + return sm->sq_ass_item(o, i, v); + } + } +#else + if (is_list || !PyMapping_Check(o)) + { + return PySequence_SetItem(o, i, v); + } +#endif + return __Pyx_SetItemInt_Generic(o, PyInt_FromSsize_t(i), v); +} + +/* UnpackUnboundCMethod */ + static PyObject *__Pyx_SelflessCall(PyObject *method, PyObject *args, PyObject *kwargs) { + PyObject *result; + PyObject *selfless_args = PyTuple_GetSlice(args, 1, PyTuple_Size(args)); + if (unlikely(!selfless_args)) return NULL; + result = PyObject_Call(method, selfless_args, kwargs); + Py_DECREF(selfless_args); + return result; +} +static PyMethodDef __Pyx_UnboundCMethod_Def = { + "CythonUnboundCMethod", + __PYX_REINTERPRET_FUNCION(PyCFunction, __Pyx_SelflessCall), + METH_VARARGS | METH_KEYWORDS, + NULL +}; +static int __Pyx_TryUnpackUnboundCMethod(__Pyx_CachedCFunction* target) { + PyObject *method; + method = __Pyx_PyObject_GetAttrStr(target->type, *target->method_name); + if (unlikely(!method)) + return -1; + target->method = method; +#if CYTHON_COMPILING_IN_CPYTHON + #if PY_MAJOR_VERSION >= 3 + if (likely(__Pyx_TypeCheck(method, &PyMethodDescr_Type))) + #else + if (likely(!__Pyx_CyOrPyCFunction_Check(method))) + #endif + { + PyMethodDescrObject *descr = (PyMethodDescrObject*) method; + target->func = descr->d_method->ml_meth; + target->flag = descr->d_method->ml_flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_STACKLESS); + } else +#endif +#if CYTHON_COMPILING_IN_PYPY +#else + if (PyCFunction_Check(method)) +#endif + { + PyObject *self; + int self_found; +#if CYTHON_COMPILING_IN_LIMITED_API || CYTHON_COMPILING_IN_PYPY + self = PyObject_GetAttrString(method, "__self__"); + if (!self) { + PyErr_Clear(); + } +#else + self = PyCFunction_GET_SELF(method); +#endif + self_found = (self && self != Py_None); +#if CYTHON_COMPILING_IN_LIMITED_API || CYTHON_COMPILING_IN_PYPY + Py_XDECREF(self); +#endif + if (self_found) { + PyObject *unbound_method = PyCFunction_New(&__Pyx_UnboundCMethod_Def, method); + if (unlikely(!unbound_method)) return -1; + Py_DECREF(method); + target->method = unbound_method; + } + } + return 0; +} + +/* CallUnboundCMethod1 */ + #if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg) { + if (likely(cfunc->func)) { + int flag = cfunc->flag; + if (flag == METH_O) { + return (*(cfunc->func))(self, arg); + } else if ((PY_VERSION_HEX >= 0x030600B1) && flag == METH_FASTCALL) { + #if PY_VERSION_HEX >= 0x030700A0 + return (*(__Pyx_PyCFunctionFast)(void*)(PyCFunction)cfunc->func)(self, &arg, 1); + #else + return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, &arg, 1, NULL); + #endif + } else if ((PY_VERSION_HEX >= 0x030700A0) && flag == (METH_FASTCALL | METH_KEYWORDS)) { + return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, &arg, 1, NULL); + } + } + return __Pyx__CallUnboundCMethod1(cfunc, self, arg); +} +#endif +static PyObject* __Pyx__CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg){ + PyObject *args, *result = NULL; + if (unlikely(!cfunc->func && !cfunc->method) && unlikely(__Pyx_TryUnpackUnboundCMethod(cfunc) < 0)) return NULL; +#if CYTHON_COMPILING_IN_CPYTHON + if (cfunc->func && (cfunc->flag & METH_VARARGS)) { + args = PyTuple_New(1); + if (unlikely(!args)) goto bad; + Py_INCREF(arg); + PyTuple_SET_ITEM(args, 0, arg); + if (cfunc->flag & METH_KEYWORDS) + result = (*(PyCFunctionWithKeywords)(void*)(PyCFunction)cfunc->func)(self, args, NULL); + else + result = (*cfunc->func)(self, args); + } else { + args = PyTuple_New(2); + if (unlikely(!args)) goto bad; + Py_INCREF(self); + PyTuple_SET_ITEM(args, 0, self); + Py_INCREF(arg); + PyTuple_SET_ITEM(args, 1, arg); + result = __Pyx_PyObject_Call(cfunc->method, args, NULL); + } +#else + args = PyTuple_Pack(2, self, arg); + if (unlikely(!args)) goto bad; + result = __Pyx_PyObject_Call(cfunc->method, args, NULL); +#endif +bad: + Py_XDECREF(args); + return result; +} + +/* PyIntBinop */ + #if !CYTHON_COMPILING_IN_PYPY +static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check) { + CYTHON_MAYBE_UNUSED_VAR(intval); + CYTHON_MAYBE_UNUSED_VAR(inplace); + CYTHON_UNUSED_VAR(zerodivision_check); + #if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(op1))) { + const long b = intval; + long x; + long a = PyInt_AS_LONG(op1); + + x = (long)((unsigned long)a + (unsigned long)b); + if (likely((x^a) >= 0 || (x^b) >= 0)) + return PyInt_FromLong(x); + return PyLong_Type.tp_as_number->nb_add(op1, op2); + } + #endif + #if CYTHON_USE_PYLONG_INTERNALS + if (likely(PyLong_CheckExact(op1))) { + const long b = intval; + long a, x; +#ifdef HAVE_LONG_LONG + const PY_LONG_LONG llb = intval; + PY_LONG_LONG lla, llx; +#endif + if (unlikely(__Pyx_PyLong_IsZero(op1))) { + return __Pyx_NewRef(op2); + } + if (likely(__Pyx_PyLong_IsCompact(op1))) { + a = __Pyx_PyLong_CompactValue(op1); + } else { + const digit* digits = __Pyx_PyLong_Digits(op1); + const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(op1); + switch (size) { + case -2: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + a = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { + lla = -(PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 2: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { + lla = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case -3: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + a = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { + lla = -(PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 3: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { + lla = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case -4: + if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + a = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { + lla = -(PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 4: + if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { + lla = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + default: return PyLong_Type.tp_as_number->nb_add(op1, op2); + } + } + x = a + b; + return PyLong_FromLong(x); +#ifdef HAVE_LONG_LONG + long_long: + llx = lla + llb; + return PyLong_FromLongLong(llx); +#endif + + + } + #endif + if (PyFloat_CheckExact(op1)) { + const long b = intval; +#if CYTHON_COMPILING_IN_LIMITED_API + double a = __pyx_PyFloat_AsDouble(op1); +#else + double a = PyFloat_AS_DOUBLE(op1); +#endif + double result; + + PyFPE_START_PROTECT("add", return NULL) + result = ((double)a) + (double)b; + PyFPE_END_PROTECT(result) + return PyFloat_FromDouble(result); + } + return (inplace ? PyNumber_InPlaceAdd : PyNumber_Add)(op1, op2); +} +#endif + +/* PyObjectCallNoArg */ + static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) { + PyObject *arg[2] = {NULL, NULL}; + return __Pyx_PyObject_FastCall(func, arg + 1, 0 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); +} + +/* PyObjectGetMethod */ + static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method) { + PyObject *attr; +#if CYTHON_UNPACK_METHODS && CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_PYTYPE_LOOKUP + __Pyx_TypeName type_name; + PyTypeObject *tp = Py_TYPE(obj); + PyObject *descr; + descrgetfunc f = NULL; + PyObject **dictptr, *dict; + int meth_found = 0; + assert (*method == NULL); + if (unlikely(tp->tp_getattro != PyObject_GenericGetAttr)) { + attr = __Pyx_PyObject_GetAttrStr(obj, name); + goto try_unpack; + } + if (unlikely(tp->tp_dict == NULL) && unlikely(PyType_Ready(tp) < 0)) { + return 0; + } + descr = _PyType_Lookup(tp, name); + if (likely(descr != NULL)) { + Py_INCREF(descr); +#if defined(Py_TPFLAGS_METHOD_DESCRIPTOR) && Py_TPFLAGS_METHOD_DESCRIPTOR + if (__Pyx_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR)) +#elif PY_MAJOR_VERSION >= 3 + #ifdef __Pyx_CyFunction_USED + if (likely(PyFunction_Check(descr) || __Pyx_IS_TYPE(descr, &PyMethodDescr_Type) || __Pyx_CyFunction_Check(descr))) + #else + if (likely(PyFunction_Check(descr) || __Pyx_IS_TYPE(descr, &PyMethodDescr_Type))) + #endif +#else + #ifdef __Pyx_CyFunction_USED + if (likely(PyFunction_Check(descr) || __Pyx_CyFunction_Check(descr))) + #else + if (likely(PyFunction_Check(descr))) + #endif +#endif + { + meth_found = 1; + } else { + f = Py_TYPE(descr)->tp_descr_get; + if (f != NULL && PyDescr_IsData(descr)) { + attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); + Py_DECREF(descr); + goto try_unpack; + } + } + } + dictptr = _PyObject_GetDictPtr(obj); + if (dictptr != NULL && (dict = *dictptr) != NULL) { + Py_INCREF(dict); + attr = __Pyx_PyDict_GetItemStr(dict, name); + if (attr != NULL) { + Py_INCREF(attr); + Py_DECREF(dict); + Py_XDECREF(descr); + goto try_unpack; + } + Py_DECREF(dict); + } + if (meth_found) { + *method = descr; + return 1; + } + if (f != NULL) { + attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); + Py_DECREF(descr); + goto try_unpack; + } + if (likely(descr != NULL)) { + *method = descr; + return 0; + } + type_name = __Pyx_PyType_GetName(tp); + PyErr_Format(PyExc_AttributeError, +#if PY_MAJOR_VERSION >= 3 + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%U'", + type_name, name); +#else + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%.400s'", + type_name, PyString_AS_STRING(name)); +#endif + __Pyx_DECREF_TypeName(type_name); + return 0; +#else + attr = __Pyx_PyObject_GetAttrStr(obj, name); + goto try_unpack; +#endif +try_unpack: +#if CYTHON_UNPACK_METHODS + if (likely(attr) && PyMethod_Check(attr) && likely(PyMethod_GET_SELF(attr) == obj)) { + PyObject *function = PyMethod_GET_FUNCTION(attr); + Py_INCREF(function); + Py_DECREF(attr); + *method = function; + return 1; + } +#endif + *method = attr; + return 0; +} + +/* PyObjectCallMethod0 */ + static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name) { + PyObject *method = NULL, *result = NULL; + int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method); + if (likely(is_method)) { + result = __Pyx_PyObject_CallOneArg(method, obj); + Py_DECREF(method); + return result; + } + if (unlikely(!method)) goto bad; + result = __Pyx_PyObject_CallNoArg(method); + Py_DECREF(method); +bad: + return result; +} + +/* RaiseNoneIterError */ + static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); +} + +/* UnpackTupleError */ + static void __Pyx_UnpackTupleError(PyObject *t, Py_ssize_t index) { + if (t == Py_None) { + __Pyx_RaiseNoneNotIterableError(); + } else if (PyTuple_GET_SIZE(t) < index) { + __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(t)); + } else { + __Pyx_RaiseTooManyValuesError(index); + } +} + +/* UnpackTuple2 */ + static CYTHON_INLINE int __Pyx_unpack_tuple2_exact( + PyObject* tuple, PyObject** pvalue1, PyObject** pvalue2, int decref_tuple) { + PyObject *value1 = NULL, *value2 = NULL; +#if CYTHON_COMPILING_IN_PYPY + value1 = PySequence_ITEM(tuple, 0); if (unlikely(!value1)) goto bad; + value2 = PySequence_ITEM(tuple, 1); if (unlikely(!value2)) goto bad; +#else + value1 = PyTuple_GET_ITEM(tuple, 0); Py_INCREF(value1); + value2 = PyTuple_GET_ITEM(tuple, 1); Py_INCREF(value2); +#endif + if (decref_tuple) { + Py_DECREF(tuple); + } + *pvalue1 = value1; + *pvalue2 = value2; + return 0; +#if CYTHON_COMPILING_IN_PYPY +bad: + Py_XDECREF(value1); + Py_XDECREF(value2); + if (decref_tuple) { Py_XDECREF(tuple); } + return -1; +#endif +} +static int __Pyx_unpack_tuple2_generic(PyObject* tuple, PyObject** pvalue1, PyObject** pvalue2, + int has_known_size, int decref_tuple) { + Py_ssize_t index; + PyObject *value1 = NULL, *value2 = NULL, *iter = NULL; + iternextfunc iternext; + iter = PyObject_GetIter(tuple); + if (unlikely(!iter)) goto bad; + if (decref_tuple) { Py_DECREF(tuple); tuple = NULL; } + iternext = __Pyx_PyObject_GetIterNextFunc(iter); + value1 = iternext(iter); if (unlikely(!value1)) { index = 0; goto unpacking_failed; } + value2 = iternext(iter); if (unlikely(!value2)) { index = 1; goto unpacking_failed; } + if (!has_known_size && unlikely(__Pyx_IternextUnpackEndCheck(iternext(iter), 2))) goto bad; + Py_DECREF(iter); + *pvalue1 = value1; + *pvalue2 = value2; + return 0; +unpacking_failed: + if (!has_known_size && __Pyx_IterFinish() == 0) + __Pyx_RaiseNeedMoreValuesError(index); +bad: + Py_XDECREF(iter); + Py_XDECREF(value1); + Py_XDECREF(value2); + if (decref_tuple) { Py_XDECREF(tuple); } + return -1; +} + +/* dict_iter */ + #if CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 +#include +#endif +static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* iterable, int is_dict, PyObject* method_name, + Py_ssize_t* p_orig_length, int* p_source_is_dict) { + is_dict = is_dict || likely(PyDict_CheckExact(iterable)); + *p_source_is_dict = is_dict; + if (is_dict) { +#if !CYTHON_COMPILING_IN_PYPY + *p_orig_length = PyDict_Size(iterable); + Py_INCREF(iterable); + return iterable; +#elif PY_MAJOR_VERSION >= 3 + static PyObject *py_items = NULL, *py_keys = NULL, *py_values = NULL; + PyObject **pp = NULL; + if (method_name) { + const char *name = PyUnicode_AsUTF8(method_name); + if (strcmp(name, "iteritems") == 0) pp = &py_items; + else if (strcmp(name, "iterkeys") == 0) pp = &py_keys; + else if (strcmp(name, "itervalues") == 0) pp = &py_values; + if (pp) { + if (!*pp) { + *pp = PyUnicode_FromString(name + 4); + if (!*pp) + return NULL; + } + method_name = *pp; + } + } +#endif + } + *p_orig_length = 0; + if (method_name) { + PyObject* iter; + iterable = __Pyx_PyObject_CallMethod0(iterable, method_name); + if (!iterable) + return NULL; +#if !CYTHON_COMPILING_IN_PYPY + if (PyTuple_CheckExact(iterable) || PyList_CheckExact(iterable)) + return iterable; +#endif + iter = PyObject_GetIter(iterable); + Py_DECREF(iterable); + return iter; + } + return PyObject_GetIter(iterable); +} +static CYTHON_INLINE int __Pyx_dict_iter_next( + PyObject* iter_obj, CYTHON_NCP_UNUSED Py_ssize_t orig_length, CYTHON_NCP_UNUSED Py_ssize_t* ppos, + PyObject** pkey, PyObject** pvalue, PyObject** pitem, int source_is_dict) { + PyObject* next_item; +#if !CYTHON_COMPILING_IN_PYPY + if (source_is_dict) { + PyObject *key, *value; + if (unlikely(orig_length != PyDict_Size(iter_obj))) { + PyErr_SetString(PyExc_RuntimeError, "dictionary changed size during iteration"); + return -1; + } + if (unlikely(!PyDict_Next(iter_obj, ppos, &key, &value))) { + return 0; + } + if (pitem) { + PyObject* tuple = PyTuple_New(2); + if (unlikely(!tuple)) { + return -1; + } + Py_INCREF(key); + Py_INCREF(value); + PyTuple_SET_ITEM(tuple, 0, key); + PyTuple_SET_ITEM(tuple, 1, value); + *pitem = tuple; + } else { + if (pkey) { + Py_INCREF(key); + *pkey = key; + } + if (pvalue) { + Py_INCREF(value); + *pvalue = value; + } + } + return 1; + } else if (PyTuple_CheckExact(iter_obj)) { + Py_ssize_t pos = *ppos; + if (unlikely(pos >= PyTuple_GET_SIZE(iter_obj))) return 0; + *ppos = pos + 1; + next_item = PyTuple_GET_ITEM(iter_obj, pos); + Py_INCREF(next_item); + } else if (PyList_CheckExact(iter_obj)) { + Py_ssize_t pos = *ppos; + if (unlikely(pos >= PyList_GET_SIZE(iter_obj))) return 0; + *ppos = pos + 1; + next_item = PyList_GET_ITEM(iter_obj, pos); + Py_INCREF(next_item); + } else +#endif + { + next_item = PyIter_Next(iter_obj); + if (unlikely(!next_item)) { + return __Pyx_IterFinish(); + } + } + if (pitem) { + *pitem = next_item; + } else if (pkey && pvalue) { + if (__Pyx_unpack_tuple2(next_item, pkey, pvalue, source_is_dict, source_is_dict, 1)) + return -1; + } else if (pkey) { + *pkey = next_item; + } else { + *pvalue = next_item; + } + return 1; +} + +/* JoinPyUnicode */ + static PyObject* __Pyx_PyUnicode_Join(PyObject* value_tuple, Py_ssize_t value_count, Py_ssize_t result_ulength, + Py_UCS4 max_char) { +#if CYTHON_USE_UNICODE_INTERNALS && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + PyObject *result_uval; + int result_ukind, kind_shift; + Py_ssize_t i, char_pos; + void *result_udata; + CYTHON_MAYBE_UNUSED_VAR(max_char); +#if CYTHON_PEP393_ENABLED + result_uval = PyUnicode_New(result_ulength, max_char); + if (unlikely(!result_uval)) return NULL; + result_ukind = (max_char <= 255) ? PyUnicode_1BYTE_KIND : (max_char <= 65535) ? PyUnicode_2BYTE_KIND : PyUnicode_4BYTE_KIND; + kind_shift = (result_ukind == PyUnicode_4BYTE_KIND) ? 2 : result_ukind - 1; + result_udata = PyUnicode_DATA(result_uval); +#else + result_uval = PyUnicode_FromUnicode(NULL, result_ulength); + if (unlikely(!result_uval)) return NULL; + result_ukind = sizeof(Py_UNICODE); + kind_shift = (result_ukind == 4) ? 2 : result_ukind - 1; + result_udata = PyUnicode_AS_UNICODE(result_uval); +#endif + assert(kind_shift == 2 || kind_shift == 1 || kind_shift == 0); + char_pos = 0; + for (i=0; i < value_count; i++) { + int ukind; + Py_ssize_t ulength; + void *udata; + PyObject *uval = PyTuple_GET_ITEM(value_tuple, i); + if (unlikely(__Pyx_PyUnicode_READY(uval))) + goto bad; + ulength = __Pyx_PyUnicode_GET_LENGTH(uval); + if (unlikely(!ulength)) + continue; + if (unlikely((PY_SSIZE_T_MAX >> kind_shift) - ulength < char_pos)) + goto overflow; + ukind = __Pyx_PyUnicode_KIND(uval); + udata = __Pyx_PyUnicode_DATA(uval); + if (!CYTHON_PEP393_ENABLED || ukind == result_ukind) { + memcpy((char *)result_udata + (char_pos << kind_shift), udata, (size_t) (ulength << kind_shift)); + } else { + #if PY_VERSION_HEX >= 0x030d0000 + if (unlikely(PyUnicode_CopyCharacters(result_uval, char_pos, uval, 0, ulength) < 0)) goto bad; + #elif CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030300F0 || defined(_PyUnicode_FastCopyCharacters) + _PyUnicode_FastCopyCharacters(result_uval, char_pos, uval, 0, ulength); + #else + Py_ssize_t j; + for (j=0; j < ulength; j++) { + Py_UCS4 uchar = __Pyx_PyUnicode_READ(ukind, udata, j); + __Pyx_PyUnicode_WRITE(result_ukind, result_udata, char_pos+j, uchar); + } + #endif + } + char_pos += ulength; + } + return result_uval; +overflow: + PyErr_SetString(PyExc_OverflowError, "join() result is too long for a Python string"); +bad: + Py_DECREF(result_uval); + return NULL; +#else + CYTHON_UNUSED_VAR(max_char); + CYTHON_UNUSED_VAR(result_ulength); + CYTHON_UNUSED_VAR(value_count); + return PyUnicode_Join(__pyx_empty_unicode, value_tuple); +#endif +} + +/* TypeImport */ + #ifndef __PYX_HAVE_RT_ImportType_3_0_11 +#define __PYX_HAVE_RT_ImportType_3_0_11 +static PyTypeObject *__Pyx_ImportType_3_0_11(PyObject *module, const char *module_name, const char *class_name, + size_t size, size_t alignment, enum __Pyx_ImportType_CheckSize_3_0_11 check_size) +{ + PyObject *result = 0; + char warning[200]; + Py_ssize_t basicsize; + Py_ssize_t itemsize; +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *py_basicsize; + PyObject *py_itemsize; +#endif + result = PyObject_GetAttrString(module, class_name); + if (!result) + goto bad; + if (!PyType_Check(result)) { + PyErr_Format(PyExc_TypeError, + "%.200s.%.200s is not a type object", + module_name, class_name); + goto bad; + } +#if !CYTHON_COMPILING_IN_LIMITED_API + basicsize = ((PyTypeObject *)result)->tp_basicsize; + itemsize = ((PyTypeObject *)result)->tp_itemsize; +#else + py_basicsize = PyObject_GetAttrString(result, "__basicsize__"); + if (!py_basicsize) + goto bad; + basicsize = PyLong_AsSsize_t(py_basicsize); + Py_DECREF(py_basicsize); + py_basicsize = 0; + if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred()) + goto bad; + py_itemsize = PyObject_GetAttrString(result, "__itemsize__"); + if (!py_itemsize) + goto bad; + itemsize = PyLong_AsSsize_t(py_itemsize); + Py_DECREF(py_itemsize); + py_itemsize = 0; + if (itemsize == (Py_ssize_t)-1 && PyErr_Occurred()) + goto bad; +#endif + if (itemsize) { + if (size % alignment) { + alignment = size % alignment; + } + if (itemsize < (Py_ssize_t)alignment) + itemsize = (Py_ssize_t)alignment; + } + if ((size_t)(basicsize + itemsize) < size) { + PyErr_Format(PyExc_ValueError, + "%.200s.%.200s size changed, may indicate binary incompatibility. " + "Expected %zd from C header, got %zd from PyObject", + module_name, class_name, size, basicsize+itemsize); + goto bad; + } + if (check_size == __Pyx_ImportType_CheckSize_Error_3_0_11 && + ((size_t)basicsize > size || (size_t)(basicsize + itemsize) < size)) { + PyErr_Format(PyExc_ValueError, + "%.200s.%.200s size changed, may indicate binary incompatibility. " + "Expected %zd from C header, got %zd-%zd from PyObject", + module_name, class_name, size, basicsize, basicsize+itemsize); + goto bad; + } + else if (check_size == __Pyx_ImportType_CheckSize_Warn_3_0_11 && (size_t)basicsize > size) { + PyOS_snprintf(warning, sizeof(warning), + "%s.%s size changed, may indicate binary incompatibility. " + "Expected %zd from C header, got %zd from PyObject", + module_name, class_name, size, basicsize); + if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad; + } + return (PyTypeObject *)result; +bad: + Py_XDECREF(result); + return NULL; +} +#endif + +/* Import */ + static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { + PyObject *module = 0; + PyObject *empty_dict = 0; + PyObject *empty_list = 0; + #if PY_MAJOR_VERSION < 3 + PyObject *py_import; + py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); + if (unlikely(!py_import)) + goto bad; + if (!from_list) { + empty_list = PyList_New(0); + if (unlikely(!empty_list)) + goto bad; + from_list = empty_list; + } + #endif + empty_dict = PyDict_New(); + if (unlikely(!empty_dict)) + goto bad; + { + #if PY_MAJOR_VERSION >= 3 + if (level == -1) { + if (strchr(__Pyx_MODULE_NAME, '.') != NULL) { + module = PyImport_ImportModuleLevelObject( + name, __pyx_d, empty_dict, from_list, 1); + if (unlikely(!module)) { + if (unlikely(!PyErr_ExceptionMatches(PyExc_ImportError))) + goto bad; + PyErr_Clear(); + } + } + level = 0; + } + #endif + if (!module) { + #if PY_MAJOR_VERSION < 3 + PyObject *py_level = PyInt_FromLong(level); + if (unlikely(!py_level)) + goto bad; + module = PyObject_CallFunctionObjArgs(py_import, + name, __pyx_d, empty_dict, from_list, py_level, (PyObject *)NULL); + Py_DECREF(py_level); + #else + module = PyImport_ImportModuleLevelObject( + name, __pyx_d, empty_dict, from_list, level); + #endif + } + } +bad: + Py_XDECREF(empty_dict); + Py_XDECREF(empty_list); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_import); + #endif + return module; +} + +/* ImportDottedModule */ + #if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx__ImportDottedModule_Error(PyObject *name, PyObject *parts_tuple, Py_ssize_t count) { + PyObject *partial_name = NULL, *slice = NULL, *sep = NULL; + if (unlikely(PyErr_Occurred())) { + PyErr_Clear(); + } + if (likely(PyTuple_GET_SIZE(parts_tuple) == count)) { + partial_name = name; + } else { + slice = PySequence_GetSlice(parts_tuple, 0, count); + if (unlikely(!slice)) + goto bad; + sep = PyUnicode_FromStringAndSize(".", 1); + if (unlikely(!sep)) + goto bad; + partial_name = PyUnicode_Join(sep, slice); + } + PyErr_Format( +#if PY_MAJOR_VERSION < 3 + PyExc_ImportError, + "No module named '%s'", PyString_AS_STRING(partial_name)); +#else +#if PY_VERSION_HEX >= 0x030600B1 + PyExc_ModuleNotFoundError, +#else + PyExc_ImportError, +#endif + "No module named '%U'", partial_name); +#endif +bad: + Py_XDECREF(sep); + Py_XDECREF(slice); + Py_XDECREF(partial_name); + return NULL; +} +#endif +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx__ImportDottedModule_Lookup(PyObject *name) { + PyObject *imported_module; +#if PY_VERSION_HEX < 0x030700A1 || (CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM < 0x07030400) + PyObject *modules = PyImport_GetModuleDict(); + if (unlikely(!modules)) + return NULL; + imported_module = __Pyx_PyDict_GetItemStr(modules, name); + Py_XINCREF(imported_module); +#else + imported_module = PyImport_GetModule(name); +#endif + return imported_module; +} +#endif +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_ImportDottedModule_WalkParts(PyObject *module, PyObject *name, PyObject *parts_tuple) { + Py_ssize_t i, nparts; + nparts = PyTuple_GET_SIZE(parts_tuple); + for (i=1; i < nparts && module; i++) { + PyObject *part, *submodule; +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + part = PyTuple_GET_ITEM(parts_tuple, i); +#else + part = PySequence_ITEM(parts_tuple, i); +#endif + submodule = __Pyx_PyObject_GetAttrStrNoError(module, part); +#if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) + Py_DECREF(part); +#endif + Py_DECREF(module); + module = submodule; + } + if (unlikely(!module)) { + return __Pyx__ImportDottedModule_Error(name, parts_tuple, i); + } + return module; +} +#endif +static PyObject *__Pyx__ImportDottedModule(PyObject *name, PyObject *parts_tuple) { +#if PY_MAJOR_VERSION < 3 + PyObject *module, *from_list, *star = __pyx_n_s__29; + CYTHON_UNUSED_VAR(parts_tuple); + from_list = PyList_New(1); + if (unlikely(!from_list)) + return NULL; + Py_INCREF(star); + PyList_SET_ITEM(from_list, 0, star); + module = __Pyx_Import(name, from_list, 0); + Py_DECREF(from_list); + return module; +#else + PyObject *imported_module; + PyObject *module = __Pyx_Import(name, NULL, 0); + if (!parts_tuple || unlikely(!module)) + return module; + imported_module = __Pyx__ImportDottedModule_Lookup(name); + if (likely(imported_module)) { + Py_DECREF(module); + return imported_module; + } + PyErr_Clear(); + return __Pyx_ImportDottedModule_WalkParts(module, name, parts_tuple); +#endif +} +static PyObject *__Pyx_ImportDottedModule(PyObject *name, PyObject *parts_tuple) { +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030400B1 + PyObject *module = __Pyx__ImportDottedModule_Lookup(name); + if (likely(module)) { + PyObject *spec = __Pyx_PyObject_GetAttrStrNoError(module, __pyx_n_s_spec); + if (likely(spec)) { + PyObject *unsafe = __Pyx_PyObject_GetAttrStrNoError(spec, __pyx_n_s_initializing); + if (likely(!unsafe || !__Pyx_PyObject_IsTrue(unsafe))) { + Py_DECREF(spec); + spec = NULL; + } + Py_XDECREF(unsafe); + } + if (likely(!spec)) { + PyErr_Clear(); + return module; + } + Py_DECREF(spec); + Py_DECREF(module); + } else if (PyErr_Occurred()) { + PyErr_Clear(); + } +#endif + return __Pyx__ImportDottedModule(name, parts_tuple); +} + +/* ImportFrom */ + static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { + PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); + if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { + const char* module_name_str = 0; + PyObject* module_name = 0; + PyObject* module_dot = 0; + PyObject* full_name = 0; + PyErr_Clear(); + module_name_str = PyModule_GetName(module); + if (unlikely(!module_name_str)) { goto modbad; } + module_name = PyUnicode_FromString(module_name_str); + if (unlikely(!module_name)) { goto modbad; } + module_dot = PyUnicode_Concat(module_name, __pyx_kp_u__30); + if (unlikely(!module_dot)) { goto modbad; } + full_name = PyUnicode_Concat(module_dot, name); + if (unlikely(!full_name)) { goto modbad; } + #if PY_VERSION_HEX < 0x030700A1 || (CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM < 0x07030400) + { + PyObject *modules = PyImport_GetModuleDict(); + if (unlikely(!modules)) + goto modbad; + value = PyObject_GetItem(modules, full_name); + } + #else + value = PyImport_GetModule(full_name); + #endif + modbad: + Py_XDECREF(full_name); + Py_XDECREF(module_dot); + Py_XDECREF(module_name); + } + if (unlikely(!value)) { + PyErr_Format(PyExc_ImportError, + #if PY_MAJOR_VERSION < 3 + "cannot import name %.230s", PyString_AS_STRING(name)); + #else + "cannot import name %S", name); + #endif + } + return value; +} + +/* FixUpExtensionType */ + #if CYTHON_USE_TYPE_SPECS +static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type) { +#if PY_VERSION_HEX > 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + CYTHON_UNUSED_VAR(spec); + CYTHON_UNUSED_VAR(type); +#else + const PyType_Slot *slot = spec->slots; + while (slot && slot->slot && slot->slot != Py_tp_members) + slot++; + if (slot && slot->slot == Py_tp_members) { + int changed = 0; +#if !(PY_VERSION_HEX <= 0x030900b1 && CYTHON_COMPILING_IN_CPYTHON) + const +#endif + PyMemberDef *memb = (PyMemberDef*) slot->pfunc; + while (memb && memb->name) { + if (memb->name[0] == '_' && memb->name[1] == '_') { +#if PY_VERSION_HEX < 0x030900b1 + if (strcmp(memb->name, "__weaklistoffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); + type->tp_weaklistoffset = memb->offset; + changed = 1; + } + else if (strcmp(memb->name, "__dictoffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); + type->tp_dictoffset = memb->offset; + changed = 1; + } +#if CYTHON_METH_FASTCALL + else if (strcmp(memb->name, "__vectorcalloffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); +#if PY_VERSION_HEX >= 0x030800b4 + type->tp_vectorcall_offset = memb->offset; +#else + type->tp_print = (printfunc) memb->offset; +#endif + changed = 1; + } +#endif +#else + if ((0)); +#endif +#if PY_VERSION_HEX <= 0x030900b1 && CYTHON_COMPILING_IN_CPYTHON + else if (strcmp(memb->name, "__module__") == 0) { + PyObject *descr; + assert(memb->type == T_OBJECT); + assert(memb->flags == 0 || memb->flags == READONLY); + descr = PyDescr_NewMember(type, memb); + if (unlikely(!descr)) + return -1; + if (unlikely(PyDict_SetItem(type->tp_dict, PyDescr_NAME(descr), descr) < 0)) { + Py_DECREF(descr); + return -1; + } + Py_DECREF(descr); + changed = 1; + } +#endif + } + memb++; + } + if (changed) + PyType_Modified(type); + } +#endif + return 0; +} +#endif + +/* FetchSharedCythonModule */ + static PyObject *__Pyx_FetchSharedCythonABIModule(void) { + return __Pyx_PyImport_AddModuleRef((char*) __PYX_ABI_MODULE_NAME); +} + +/* FetchCommonType */ + static int __Pyx_VerifyCachedType(PyObject *cached_type, + const char *name, + Py_ssize_t basicsize, + Py_ssize_t expected_basicsize) { + if (!PyType_Check(cached_type)) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s is not a type object", name); + return -1; + } + if (basicsize != expected_basicsize) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s has the wrong size, try recompiling", + name); + return -1; + } + return 0; +} +#if !CYTHON_USE_TYPE_SPECS +static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) { + PyObject* abi_module; + const char* object_name; + PyTypeObject *cached_type = NULL; + abi_module = __Pyx_FetchSharedCythonABIModule(); + if (!abi_module) return NULL; + object_name = strrchr(type->tp_name, '.'); + object_name = object_name ? object_name+1 : type->tp_name; + cached_type = (PyTypeObject*) PyObject_GetAttrString(abi_module, object_name); + if (cached_type) { + if (__Pyx_VerifyCachedType( + (PyObject *)cached_type, + object_name, + cached_type->tp_basicsize, + type->tp_basicsize) < 0) { + goto bad; + } + goto done; + } + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; + PyErr_Clear(); + if (PyType_Ready(type) < 0) goto bad; + if (PyObject_SetAttrString(abi_module, object_name, (PyObject *)type) < 0) + goto bad; + Py_INCREF(type); + cached_type = type; +done: + Py_DECREF(abi_module); + return cached_type; +bad: + Py_XDECREF(cached_type); + cached_type = NULL; + goto done; +} +#else +static PyTypeObject *__Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases) { + PyObject *abi_module, *cached_type = NULL; + const char* object_name = strrchr(spec->name, '.'); + object_name = object_name ? object_name+1 : spec->name; + abi_module = __Pyx_FetchSharedCythonABIModule(); + if (!abi_module) return NULL; + cached_type = PyObject_GetAttrString(abi_module, object_name); + if (cached_type) { + Py_ssize_t basicsize; +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *py_basicsize; + py_basicsize = PyObject_GetAttrString(cached_type, "__basicsize__"); + if (unlikely(!py_basicsize)) goto bad; + basicsize = PyLong_AsSsize_t(py_basicsize); + Py_DECREF(py_basicsize); + py_basicsize = 0; + if (unlikely(basicsize == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; +#else + basicsize = likely(PyType_Check(cached_type)) ? ((PyTypeObject*) cached_type)->tp_basicsize : -1; +#endif + if (__Pyx_VerifyCachedType( + cached_type, + object_name, + basicsize, + spec->basicsize) < 0) { + goto bad; + } + goto done; + } + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; + PyErr_Clear(); + CYTHON_UNUSED_VAR(module); + cached_type = __Pyx_PyType_FromModuleAndSpec(abi_module, spec, bases); + if (unlikely(!cached_type)) goto bad; + if (unlikely(__Pyx_fix_up_extension_type_from_spec(spec, (PyTypeObject *) cached_type) < 0)) goto bad; + if (PyObject_SetAttrString(abi_module, object_name, cached_type) < 0) goto bad; +done: + Py_DECREF(abi_module); + assert(cached_type == NULL || PyType_Check(cached_type)); + return (PyTypeObject *) cached_type; +bad: + Py_XDECREF(cached_type); + cached_type = NULL; + goto done; +} +#endif + +/* PyVectorcallFastCallDict */ + #if CYTHON_METH_FASTCALL +static PyObject *__Pyx_PyVectorcall_FastCallDict_kw(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw) +{ + PyObject *res = NULL; + PyObject *kwnames; + PyObject **newargs; + PyObject **kwvalues; + Py_ssize_t i, pos; + size_t j; + PyObject *key, *value; + unsigned long keys_are_strings; + Py_ssize_t nkw = PyDict_GET_SIZE(kw); + newargs = (PyObject **)PyMem_Malloc((nargs + (size_t)nkw) * sizeof(args[0])); + if (unlikely(newargs == NULL)) { + PyErr_NoMemory(); + return NULL; + } + for (j = 0; j < nargs; j++) newargs[j] = args[j]; + kwnames = PyTuple_New(nkw); + if (unlikely(kwnames == NULL)) { + PyMem_Free(newargs); + return NULL; + } + kwvalues = newargs + nargs; + pos = i = 0; + keys_are_strings = Py_TPFLAGS_UNICODE_SUBCLASS; + while (PyDict_Next(kw, &pos, &key, &value)) { + keys_are_strings &= Py_TYPE(key)->tp_flags; + Py_INCREF(key); + Py_INCREF(value); + PyTuple_SET_ITEM(kwnames, i, key); + kwvalues[i] = value; + i++; + } + if (unlikely(!keys_are_strings)) { + PyErr_SetString(PyExc_TypeError, "keywords must be strings"); + goto cleanup; + } + res = vc(func, newargs, nargs, kwnames); +cleanup: + Py_DECREF(kwnames); + for (i = 0; i < nkw; i++) + Py_DECREF(kwvalues[i]); + PyMem_Free(newargs); + return res; +} +static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw) +{ + if (likely(kw == NULL) || PyDict_GET_SIZE(kw) == 0) { + return vc(func, args, nargs, NULL); + } + return __Pyx_PyVectorcall_FastCallDict_kw(func, vc, args, nargs, kw); +} +#endif + +/* CythonFunctionShared */ + #if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc) { + if (__Pyx_CyFunction_Check(func)) { + return PyCFunction_GetFunction(((__pyx_CyFunctionObject*)func)->func) == (PyCFunction) cfunc; + } else if (PyCFunction_Check(func)) { + return PyCFunction_GetFunction(func) == (PyCFunction) cfunc; + } + return 0; +} +#else +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc) { + return __Pyx_CyOrPyCFunction_Check(func) && __Pyx_CyOrPyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc; +} +#endif +static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj) { +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + __Pyx_Py_XDECREF_SET( + __Pyx_CyFunction_GetClassObj(f), + ((classobj) ? __Pyx_NewRef(classobj) : NULL)); +#else + __Pyx_Py_XDECREF_SET( + ((PyCMethodObject *) (f))->mm_class, + (PyTypeObject*)((classobj) ? __Pyx_NewRef(classobj) : NULL)); +#endif +} +static PyObject * +__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, void *closure) +{ + CYTHON_UNUSED_VAR(closure); + if (unlikely(op->func_doc == NULL)) { +#if CYTHON_COMPILING_IN_LIMITED_API + op->func_doc = PyObject_GetAttrString(op->func, "__doc__"); + if (unlikely(!op->func_doc)) return NULL; +#else + if (((PyCFunctionObject*)op)->m_ml->ml_doc) { +#if PY_MAJOR_VERSION >= 3 + op->func_doc = PyUnicode_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc); +#else + op->func_doc = PyString_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc); +#endif + if (unlikely(op->func_doc == NULL)) + return NULL; + } else { + Py_INCREF(Py_None); + return Py_None; + } +#endif + } + Py_INCREF(op->func_doc); + return op->func_doc; +} +static int +__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (value == NULL) { + value = Py_None; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_doc, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(op->func_name == NULL)) { +#if CYTHON_COMPILING_IN_LIMITED_API + op->func_name = PyObject_GetAttrString(op->func, "__name__"); +#elif PY_MAJOR_VERSION >= 3 + op->func_name = PyUnicode_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name); +#else + op->func_name = PyString_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name); +#endif + if (unlikely(op->func_name == NULL)) + return NULL; + } + Py_INCREF(op->func_name); + return op->func_name; +} +static int +__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__name__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_name, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + Py_INCREF(op->func_qualname); + return op->func_qualname; +} +static int +__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__qualname__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_qualname, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(op->func_dict == NULL)) { + op->func_dict = PyDict_New(); + if (unlikely(op->func_dict == NULL)) + return NULL; + } + Py_INCREF(op->func_dict); + return op->func_dict; +} +static int +__Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(value == NULL)) { + PyErr_SetString(PyExc_TypeError, + "function's dictionary may not be deleted"); + return -1; + } + if (unlikely(!PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "setting function's dictionary to a non-dict"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_dict, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + Py_INCREF(op->func_globals); + return op->func_globals; +} +static PyObject * +__Pyx_CyFunction_get_closure(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(op); + CYTHON_UNUSED_VAR(context); + Py_INCREF(Py_None); + return Py_None; +} +static PyObject * +__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op, void *context) +{ + PyObject* result = (op->func_code) ? op->func_code : Py_None; + CYTHON_UNUSED_VAR(context); + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) { + int result = 0; + PyObject *res = op->defaults_getter((PyObject *) op); + if (unlikely(!res)) + return -1; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + op->defaults_tuple = PyTuple_GET_ITEM(res, 0); + Py_INCREF(op->defaults_tuple); + op->defaults_kwdict = PyTuple_GET_ITEM(res, 1); + Py_INCREF(op->defaults_kwdict); + #else + op->defaults_tuple = __Pyx_PySequence_ITEM(res, 0); + if (unlikely(!op->defaults_tuple)) result = -1; + else { + op->defaults_kwdict = __Pyx_PySequence_ITEM(res, 1); + if (unlikely(!op->defaults_kwdict)) result = -1; + } + #endif + Py_DECREF(res); + return result; +} +static int +__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value) { + value = Py_None; + } else if (unlikely(value != Py_None && !PyTuple_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__defaults__ must be set to a tuple object"); + return -1; + } + PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__defaults__ will not " + "currently affect the values used in function calls", 1); + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->defaults_tuple, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->defaults_tuple; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + if (op->defaults_getter) { + if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL; + result = op->defaults_tuple; + } else { + result = Py_None; + } + } + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value) { + value = Py_None; + } else if (unlikely(value != Py_None && !PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__kwdefaults__ must be set to a dict object"); + return -1; + } + PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__kwdefaults__ will not " + "currently affect the values used in function calls", 1); + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->defaults_kwdict, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->defaults_kwdict; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + if (op->defaults_getter) { + if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL; + result = op->defaults_kwdict; + } else { + result = Py_None; + } + } + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value || value == Py_None) { + value = NULL; + } else if (unlikely(!PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__annotations__ must be set to a dict object"); + return -1; + } + Py_XINCREF(value); + __Pyx_Py_XDECREF_SET(op->func_annotations, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->func_annotations; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + result = PyDict_New(); + if (unlikely(!result)) return NULL; + op->func_annotations = result; + } + Py_INCREF(result); + return result; +} +static PyObject * +__Pyx_CyFunction_get_is_coroutine(__pyx_CyFunctionObject *op, void *context) { + int is_coroutine; + CYTHON_UNUSED_VAR(context); + if (op->func_is_coroutine) { + return __Pyx_NewRef(op->func_is_coroutine); + } + is_coroutine = op->flags & __Pyx_CYFUNCTION_COROUTINE; +#if PY_VERSION_HEX >= 0x03050000 + if (is_coroutine) { + PyObject *module, *fromlist, *marker = __pyx_n_s_is_coroutine; + fromlist = PyList_New(1); + if (unlikely(!fromlist)) return NULL; + Py_INCREF(marker); +#if CYTHON_ASSUME_SAFE_MACROS + PyList_SET_ITEM(fromlist, 0, marker); +#else + if (unlikely(PyList_SetItem(fromlist, 0, marker) < 0)) { + Py_DECREF(marker); + Py_DECREF(fromlist); + return NULL; + } +#endif + module = PyImport_ImportModuleLevelObject(__pyx_n_s_asyncio_coroutines, NULL, NULL, fromlist, 0); + Py_DECREF(fromlist); + if (unlikely(!module)) goto ignore; + op->func_is_coroutine = __Pyx_PyObject_GetAttrStr(module, marker); + Py_DECREF(module); + if (likely(op->func_is_coroutine)) { + return __Pyx_NewRef(op->func_is_coroutine); + } +ignore: + PyErr_Clear(); + } +#endif + op->func_is_coroutine = __Pyx_PyBool_FromLong(is_coroutine); + return __Pyx_NewRef(op->func_is_coroutine); +} +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject * +__Pyx_CyFunction_get_module(__pyx_CyFunctionObject *op, void *context) { + CYTHON_UNUSED_VAR(context); + return PyObject_GetAttrString(op->func, "__module__"); +} +static int +__Pyx_CyFunction_set_module(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + return PyObject_SetAttrString(op->func, "__module__", value); +} +#endif +static PyGetSetDef __pyx_CyFunction_getsets[] = { + {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, + {(char *) "__doc__", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, + {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, + {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, + {(char *) "__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0}, + {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, + {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, + {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, + {(char *) "__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, + {(char *) "func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, + {(char *) "__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, + {(char *) "func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, + {(char *) "__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, + {(char *) "func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, + {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, + {(char *) "__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0}, + {(char *) "__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0}, + {(char *) "_is_coroutine", (getter)__Pyx_CyFunction_get_is_coroutine, 0, 0, 0}, +#if CYTHON_COMPILING_IN_LIMITED_API + {"__module__", (getter)__Pyx_CyFunction_get_module, (setter)__Pyx_CyFunction_set_module, 0, 0}, +#endif + {0, 0, 0, 0, 0} +}; +static PyMemberDef __pyx_CyFunction_members[] = { +#if !CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__module__", T_OBJECT, offsetof(PyCFunctionObject, m_module), 0, 0}, +#endif +#if CYTHON_USE_TYPE_SPECS + {(char *) "__dictoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_dict), READONLY, 0}, +#if CYTHON_METH_FASTCALL +#if CYTHON_BACKPORT_VECTORCALL + {(char *) "__vectorcalloffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_vectorcall), READONLY, 0}, +#else +#if !CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__vectorcalloffset__", T_PYSSIZET, offsetof(PyCFunctionObject, vectorcall), READONLY, 0}, +#endif +#endif +#endif +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_weakreflist), READONLY, 0}, +#else + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(PyCFunctionObject, m_weakreflist), READONLY, 0}, +#endif +#endif + {0, 0, 0, 0, 0} +}; +static PyObject * +__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, PyObject *args) +{ + CYTHON_UNUSED_VAR(args); +#if PY_MAJOR_VERSION >= 3 + Py_INCREF(m->func_qualname); + return m->func_qualname; +#else + return PyString_FromString(((PyCFunctionObject*)m)->m_ml->ml_name); +#endif +} +static PyMethodDef __pyx_CyFunction_methods[] = { + {"__reduce__", (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0}, + {0, 0, 0, 0} +}; +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API +#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func_weakreflist) +#else +#define __Pyx_CyFunction_weakreflist(cyfunc) (((PyCFunctionObject*)cyfunc)->m_weakreflist) +#endif +static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject *op, PyMethodDef *ml, int flags, PyObject* qualname, + PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { +#if !CYTHON_COMPILING_IN_LIMITED_API + PyCFunctionObject *cf = (PyCFunctionObject*) op; +#endif + if (unlikely(op == NULL)) + return NULL; +#if CYTHON_COMPILING_IN_LIMITED_API + op->func = PyCFunction_NewEx(ml, (PyObject*)op, module); + if (unlikely(!op->func)) return NULL; +#endif + op->flags = flags; + __Pyx_CyFunction_weakreflist(op) = NULL; +#if !CYTHON_COMPILING_IN_LIMITED_API + cf->m_ml = ml; + cf->m_self = (PyObject *) op; +#endif + Py_XINCREF(closure); + op->func_closure = closure; +#if !CYTHON_COMPILING_IN_LIMITED_API + Py_XINCREF(module); + cf->m_module = module; +#endif + op->func_dict = NULL; + op->func_name = NULL; + Py_INCREF(qualname); + op->func_qualname = qualname; + op->func_doc = NULL; +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + op->func_classobj = NULL; +#else + ((PyCMethodObject*)op)->mm_class = NULL; +#endif + op->func_globals = globals; + Py_INCREF(op->func_globals); + Py_XINCREF(code); + op->func_code = code; + op->defaults_pyobjects = 0; + op->defaults_size = 0; + op->defaults = NULL; + op->defaults_tuple = NULL; + op->defaults_kwdict = NULL; + op->defaults_getter = NULL; + op->func_annotations = NULL; + op->func_is_coroutine = NULL; +#if CYTHON_METH_FASTCALL + switch (ml->ml_flags & (METH_VARARGS | METH_FASTCALL | METH_NOARGS | METH_O | METH_KEYWORDS | METH_METHOD)) { + case METH_NOARGS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_NOARGS; + break; + case METH_O: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_O; + break; + case METH_METHOD | METH_FASTCALL | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD; + break; + case METH_FASTCALL | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS; + break; + case METH_VARARGS | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = NULL; + break; + default: + PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction"); + Py_DECREF(op); + return NULL; + } +#endif + return (PyObject *) op; +} +static int +__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m) +{ + Py_CLEAR(m->func_closure); +#if CYTHON_COMPILING_IN_LIMITED_API + Py_CLEAR(m->func); +#else + Py_CLEAR(((PyCFunctionObject*)m)->m_module); +#endif + Py_CLEAR(m->func_dict); + Py_CLEAR(m->func_name); + Py_CLEAR(m->func_qualname); + Py_CLEAR(m->func_doc); + Py_CLEAR(m->func_globals); + Py_CLEAR(m->func_code); +#if !CYTHON_COMPILING_IN_LIMITED_API +#if PY_VERSION_HEX < 0x030900B1 + Py_CLEAR(__Pyx_CyFunction_GetClassObj(m)); +#else + { + PyObject *cls = (PyObject*) ((PyCMethodObject *) (m))->mm_class; + ((PyCMethodObject *) (m))->mm_class = NULL; + Py_XDECREF(cls); + } +#endif +#endif + Py_CLEAR(m->defaults_tuple); + Py_CLEAR(m->defaults_kwdict); + Py_CLEAR(m->func_annotations); + Py_CLEAR(m->func_is_coroutine); + if (m->defaults) { + PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); + int i; + for (i = 0; i < m->defaults_pyobjects; i++) + Py_XDECREF(pydefaults[i]); + PyObject_Free(m->defaults); + m->defaults = NULL; + } + return 0; +} +static void __Pyx__CyFunction_dealloc(__pyx_CyFunctionObject *m) +{ + if (__Pyx_CyFunction_weakreflist(m) != NULL) + PyObject_ClearWeakRefs((PyObject *) m); + __Pyx_CyFunction_clear(m); + __Pyx_PyHeapTypeObject_GC_Del(m); +} +static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m) +{ + PyObject_GC_UnTrack(m); + __Pyx__CyFunction_dealloc(m); +} +static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg) +{ + Py_VISIT(m->func_closure); +#if CYTHON_COMPILING_IN_LIMITED_API + Py_VISIT(m->func); +#else + Py_VISIT(((PyCFunctionObject*)m)->m_module); +#endif + Py_VISIT(m->func_dict); + Py_VISIT(m->func_name); + Py_VISIT(m->func_qualname); + Py_VISIT(m->func_doc); + Py_VISIT(m->func_globals); + Py_VISIT(m->func_code); +#if !CYTHON_COMPILING_IN_LIMITED_API + Py_VISIT(__Pyx_CyFunction_GetClassObj(m)); +#endif + Py_VISIT(m->defaults_tuple); + Py_VISIT(m->defaults_kwdict); + Py_VISIT(m->func_is_coroutine); + if (m->defaults) { + PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); + int i; + for (i = 0; i < m->defaults_pyobjects; i++) + Py_VISIT(pydefaults[i]); + } + return 0; +} +static PyObject* +__Pyx_CyFunction_repr(__pyx_CyFunctionObject *op) +{ +#if PY_MAJOR_VERSION >= 3 + return PyUnicode_FromFormat("", + op->func_qualname, (void *)op); +#else + return PyString_FromFormat("", + PyString_AsString(op->func_qualname), (void *)op); +#endif +} +static PyObject * __Pyx_CyFunction_CallMethod(PyObject *func, PyObject *self, PyObject *arg, PyObject *kw) { +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *f = ((__pyx_CyFunctionObject*)func)->func; + PyObject *py_name = NULL; + PyCFunction meth; + int flags; + meth = PyCFunction_GetFunction(f); + if (unlikely(!meth)) return NULL; + flags = PyCFunction_GetFlags(f); + if (unlikely(flags < 0)) return NULL; +#else + PyCFunctionObject* f = (PyCFunctionObject*)func; + PyCFunction meth = f->m_ml->ml_meth; + int flags = f->m_ml->ml_flags; +#endif + Py_ssize_t size; + switch (flags & (METH_VARARGS | METH_KEYWORDS | METH_NOARGS | METH_O)) { + case METH_VARARGS: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) + return (*meth)(self, arg); + break; + case METH_VARARGS | METH_KEYWORDS: + return (*(PyCFunctionWithKeywords)(void*)meth)(self, arg, kw); + case METH_NOARGS: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) { +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(arg); +#else + size = PyTuple_Size(arg); + if (unlikely(size < 0)) return NULL; +#endif + if (likely(size == 0)) + return (*meth)(self, NULL); +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, + "%.200S() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + py_name, size); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, + "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + f->m_ml->ml_name, size); +#endif + return NULL; + } + break; + case METH_O: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) { +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(arg); +#else + size = PyTuple_Size(arg); + if (unlikely(size < 0)) return NULL; +#endif + if (likely(size == 1)) { + PyObject *result, *arg0; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + arg0 = PyTuple_GET_ITEM(arg, 0); + #else + arg0 = __Pyx_PySequence_ITEM(arg, 0); if (unlikely(!arg0)) return NULL; + #endif + result = (*meth)(self, arg0); + #if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) + Py_DECREF(arg0); + #endif + return result; + } +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, + "%.200S() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + py_name, size); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, + "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + f->m_ml->ml_name, size); +#endif + return NULL; + } + break; + default: + PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction"); + return NULL; + } +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, "%.200S() takes no keyword arguments", + py_name); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments", + f->m_ml->ml_name); +#endif + return NULL; +} +static CYTHON_INLINE PyObject *__Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *self, *result; +#if CYTHON_COMPILING_IN_LIMITED_API + self = PyCFunction_GetSelf(((__pyx_CyFunctionObject*)func)->func); + if (unlikely(!self) && PyErr_Occurred()) return NULL; +#else + self = ((PyCFunctionObject*)func)->m_self; +#endif + result = __Pyx_CyFunction_CallMethod(func, self, arg, kw); + return result; +} +static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, PyObject *kw) { + PyObject *result; + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *) func; +#if CYTHON_METH_FASTCALL + __pyx_vectorcallfunc vc = __Pyx_CyFunction_func_vectorcall(cyfunc); + if (vc) { +#if CYTHON_ASSUME_SAFE_MACROS + return __Pyx_PyVectorcall_FastCallDict(func, vc, &PyTuple_GET_ITEM(args, 0), (size_t)PyTuple_GET_SIZE(args), kw); +#else + (void) &__Pyx_PyVectorcall_FastCallDict; + return PyVectorcall_Call(func, args, kw); +#endif + } +#endif + if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { + Py_ssize_t argc; + PyObject *new_args; + PyObject *self; +#if CYTHON_ASSUME_SAFE_MACROS + argc = PyTuple_GET_SIZE(args); +#else + argc = PyTuple_Size(args); + if (unlikely(!argc) < 0) return NULL; +#endif + new_args = PyTuple_GetSlice(args, 1, argc); + if (unlikely(!new_args)) + return NULL; + self = PyTuple_GetItem(args, 0); + if (unlikely(!self)) { + Py_DECREF(new_args); +#if PY_MAJOR_VERSION > 2 + PyErr_Format(PyExc_TypeError, + "unbound method %.200S() needs an argument", + cyfunc->func_qualname); +#else + PyErr_SetString(PyExc_TypeError, + "unbound method needs an argument"); +#endif + return NULL; + } + result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw); + Py_DECREF(new_args); + } else { + result = __Pyx_CyFunction_Call(func, args, kw); + } + return result; +} +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE int __Pyx_CyFunction_Vectorcall_CheckArgs(__pyx_CyFunctionObject *cyfunc, Py_ssize_t nargs, PyObject *kwnames) +{ + int ret = 0; + if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { + if (unlikely(nargs < 1)) { + PyErr_Format(PyExc_TypeError, "%.200s() needs an argument", + ((PyCFunctionObject*)cyfunc)->m_ml->ml_name); + return -1; + } + ret = 1; + } + if (unlikely(kwnames) && unlikely(PyTuple_GET_SIZE(kwnames))) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes no keyword arguments", ((PyCFunctionObject*)cyfunc)->m_ml->ml_name); + return -1; + } + return ret; +} +static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + if (unlikely(nargs != 0)) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + def->ml_name, nargs); + return NULL; + } + return def->ml_meth(self, NULL); +} +static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + if (unlikely(nargs != 1)) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + def->ml_name, nargs); + return NULL; + } + return def->ml_meth(self, args[0]); +} +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + return ((__Pyx_PyCFunctionFastWithKeywords)(void(*)(void))def->ml_meth)(self, args, nargs, kwnames); +} +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; + PyTypeObject *cls = (PyTypeObject *) __Pyx_CyFunction_GetClassObj(cyfunc); +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + return ((__Pyx_PyCMethod)(void(*)(void))def->ml_meth)(self, cls, args, (size_t)nargs, kwnames); +} +#endif +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_CyFunctionType_slots[] = { + {Py_tp_dealloc, (void *)__Pyx_CyFunction_dealloc}, + {Py_tp_repr, (void *)__Pyx_CyFunction_repr}, + {Py_tp_call, (void *)__Pyx_CyFunction_CallAsMethod}, + {Py_tp_traverse, (void *)__Pyx_CyFunction_traverse}, + {Py_tp_clear, (void *)__Pyx_CyFunction_clear}, + {Py_tp_methods, (void *)__pyx_CyFunction_methods}, + {Py_tp_members, (void *)__pyx_CyFunction_members}, + {Py_tp_getset, (void *)__pyx_CyFunction_getsets}, + {Py_tp_descr_get, (void *)__Pyx_PyMethod_New}, + {0, 0}, +}; +static PyType_Spec __pyx_CyFunctionType_spec = { + __PYX_TYPE_MODULE_PREFIX "cython_function_or_method", + sizeof(__pyx_CyFunctionObject), + 0, +#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR + Py_TPFLAGS_METHOD_DESCRIPTOR | +#endif +#if (defined(_Py_TPFLAGS_HAVE_VECTORCALL) && CYTHON_METH_FASTCALL) + _Py_TPFLAGS_HAVE_VECTORCALL | +#endif + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, + __pyx_CyFunctionType_slots +}; +#else +static PyTypeObject __pyx_CyFunctionType_type = { + PyVarObject_HEAD_INIT(0, 0) + __PYX_TYPE_MODULE_PREFIX "cython_function_or_method", + sizeof(__pyx_CyFunctionObject), + 0, + (destructor) __Pyx_CyFunction_dealloc, +#if !CYTHON_METH_FASTCALL + 0, +#elif CYTHON_BACKPORT_VECTORCALL + (printfunc)offsetof(__pyx_CyFunctionObject, func_vectorcall), +#else + offsetof(PyCFunctionObject, vectorcall), +#endif + 0, + 0, +#if PY_MAJOR_VERSION < 3 + 0, +#else + 0, +#endif + (reprfunc) __Pyx_CyFunction_repr, + 0, + 0, + 0, + 0, + __Pyx_CyFunction_CallAsMethod, + 0, + 0, + 0, + 0, +#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR + Py_TPFLAGS_METHOD_DESCRIPTOR | +#endif +#if defined(_Py_TPFLAGS_HAVE_VECTORCALL) && CYTHON_METH_FASTCALL + _Py_TPFLAGS_HAVE_VECTORCALL | +#endif + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, + 0, + (traverseproc) __Pyx_CyFunction_traverse, + (inquiry) __Pyx_CyFunction_clear, + 0, +#if PY_VERSION_HEX < 0x030500A0 + offsetof(__pyx_CyFunctionObject, func_weakreflist), +#else + offsetof(PyCFunctionObject, m_weakreflist), +#endif + 0, + 0, + __pyx_CyFunction_methods, + __pyx_CyFunction_members, + __pyx_CyFunction_getsets, + 0, + 0, + __Pyx_PyMethod_New, + 0, + offsetof(__pyx_CyFunctionObject, func_dict), + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if PY_VERSION_HEX >= 0x030400a1 + 0, +#endif +#if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, +#endif +#if __PYX_NEED_TP_PRINT_SLOT + 0, +#endif +#if PY_VERSION_HEX >= 0x030C0000 + 0, +#endif +#if PY_VERSION_HEX >= 0x030d00A4 + 0, +#endif +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, +#endif +}; +#endif +static int __pyx_CyFunction_init(PyObject *module) { +#if CYTHON_USE_TYPE_SPECS + __pyx_CyFunctionType = __Pyx_FetchCommonTypeFromSpec(module, &__pyx_CyFunctionType_spec, NULL); +#else + CYTHON_UNUSED_VAR(module); + __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type); +#endif + if (unlikely(__pyx_CyFunctionType == NULL)) { + return -1; + } + return 0; +} +static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *func, size_t size, int pyobjects) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults = PyObject_Malloc(size); + if (unlikely(!m->defaults)) + return PyErr_NoMemory(); + memset(m->defaults, 0, size); + m->defaults_pyobjects = pyobjects; + m->defaults_size = size; + return m->defaults; +} +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *func, PyObject *tuple) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults_tuple = tuple; + Py_INCREF(tuple); +} +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *func, PyObject *dict) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults_kwdict = dict; + Py_INCREF(dict); +} +static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *func, PyObject *dict) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->func_annotations = dict; + Py_INCREF(dict); +} + +/* CythonFunction */ + static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, int flags, PyObject* qualname, + PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { + PyObject *op = __Pyx_CyFunction_Init( + PyObject_GC_New(__pyx_CyFunctionObject, __pyx_CyFunctionType), + ml, flags, qualname, closure, module, globals, code + ); + if (likely(op)) { + PyObject_GC_Track(op); + } + return op; +} + +/* CLineInTraceback */ + #ifndef CYTHON_CLINE_IN_TRACEBACK +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line) { + PyObject *use_cline; + PyObject *ptype, *pvalue, *ptraceback; +#if CYTHON_COMPILING_IN_CPYTHON + PyObject **cython_runtime_dict; +#endif + CYTHON_MAYBE_UNUSED_VAR(tstate); + if (unlikely(!__pyx_cython_runtime)) { + return c_line; + } + __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); +#if CYTHON_COMPILING_IN_CPYTHON + cython_runtime_dict = _PyObject_GetDictPtr(__pyx_cython_runtime); + if (likely(cython_runtime_dict)) { + __PYX_PY_DICT_LOOKUP_IF_MODIFIED( + use_cline, *cython_runtime_dict, + __Pyx_PyDict_GetItemStr(*cython_runtime_dict, __pyx_n_s_cline_in_traceback)) + } else +#endif + { + PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStrNoError(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback); + if (use_cline_obj) { + use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True; + Py_DECREF(use_cline_obj); + } else { + PyErr_Clear(); + use_cline = NULL; + } + } + if (!use_cline) { + c_line = 0; + (void) PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False); + } + else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) { + c_line = 0; + } + __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); + return c_line; +} +#endif + +/* CodeObjectCache */ + #if !CYTHON_COMPILING_IN_LIMITED_API +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { + int start = 0, mid = 0, end = count - 1; + if (end >= 0 && code_line > entries[end].code_line) { + return count; + } + while (start < end) { + mid = start + (end - start) / 2; + if (code_line < entries[mid].code_line) { + end = mid; + } else if (code_line > entries[mid].code_line) { + start = mid + 1; + } else { + return mid; + } + } + if (code_line <= entries[mid].code_line) { + return mid; + } else { + return mid + 1; + } +} +static PyCodeObject *__pyx_find_code_object(int code_line) { + PyCodeObject* code_object; + int pos; + if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { + return NULL; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { + return NULL; + } + code_object = __pyx_code_cache.entries[pos].code_object; + Py_INCREF(code_object); + return code_object; +} +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { + int pos, i; + __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; + if (unlikely(!code_line)) { + return; + } + if (unlikely(!entries)) { + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); + if (likely(entries)) { + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = 64; + __pyx_code_cache.count = 1; + entries[0].code_line = code_line; + entries[0].code_object = code_object; + Py_INCREF(code_object); + } + return; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { + PyCodeObject* tmp = entries[pos].code_object; + entries[pos].code_object = code_object; + Py_DECREF(tmp); + return; + } + if (__pyx_code_cache.count == __pyx_code_cache.max_count) { + int new_max = __pyx_code_cache.max_count + 64; + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( + __pyx_code_cache.entries, ((size_t)new_max) * sizeof(__Pyx_CodeObjectCacheEntry)); + if (unlikely(!entries)) { + return; + } + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = new_max; + } + for (i=__pyx_code_cache.count; i>pos; i--) { + entries[i] = entries[i-1]; + } + entries[pos].code_line = code_line; + entries[pos].code_object = code_object; + __pyx_code_cache.count++; + Py_INCREF(code_object); +} +#endif + +/* AddTraceback */ + #include "compile.h" +#include "frameobject.h" +#include "traceback.h" +#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API + #ifndef Py_BUILD_CORE + #define Py_BUILD_CORE 1 + #endif + #include "internal/pycore_frame.h" +#endif +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject *__Pyx_PyCode_Replace_For_AddTraceback(PyObject *code, PyObject *scratch_dict, + PyObject *firstlineno, PyObject *name) { + PyObject *replace = NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "co_firstlineno", firstlineno))) return NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "co_name", name))) return NULL; + replace = PyObject_GetAttrString(code, "replace"); + if (likely(replace)) { + PyObject *result; + result = PyObject_Call(replace, __pyx_empty_tuple, scratch_dict); + Py_DECREF(replace); + return result; + } + PyErr_Clear(); + #if __PYX_LIMITED_VERSION_HEX < 0x030780000 + { + PyObject *compiled = NULL, *result = NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "code", code))) return NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "type", (PyObject*)(&PyType_Type)))) return NULL; + compiled = Py_CompileString( + "out = type(code)(\n" + " code.co_argcount, code.co_kwonlyargcount, code.co_nlocals, code.co_stacksize,\n" + " code.co_flags, code.co_code, code.co_consts, code.co_names,\n" + " code.co_varnames, code.co_filename, co_name, co_firstlineno,\n" + " code.co_lnotab)\n", "", Py_file_input); + if (!compiled) return NULL; + result = PyEval_EvalCode(compiled, scratch_dict, scratch_dict); + Py_DECREF(compiled); + if (!result) PyErr_Print(); + Py_DECREF(result); + result = PyDict_GetItemString(scratch_dict, "out"); + if (result) Py_INCREF(result); + return result; + } + #else + return NULL; + #endif +} +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyObject *code_object = NULL, *py_py_line = NULL, *py_funcname = NULL, *dict = NULL; + PyObject *replace = NULL, *getframe = NULL, *frame = NULL; + PyObject *exc_type, *exc_value, *exc_traceback; + int success = 0; + if (c_line) { + (void) __pyx_cfilenm; + (void) __Pyx_CLineForTraceback(__Pyx_PyThreadState_Current, c_line); + } + PyErr_Fetch(&exc_type, &exc_value, &exc_traceback); + code_object = Py_CompileString("_getframe()", filename, Py_eval_input); + if (unlikely(!code_object)) goto bad; + py_py_line = PyLong_FromLong(py_line); + if (unlikely(!py_py_line)) goto bad; + py_funcname = PyUnicode_FromString(funcname); + if (unlikely(!py_funcname)) goto bad; + dict = PyDict_New(); + if (unlikely(!dict)) goto bad; + { + PyObject *old_code_object = code_object; + code_object = __Pyx_PyCode_Replace_For_AddTraceback(code_object, dict, py_py_line, py_funcname); + Py_DECREF(old_code_object); + } + if (unlikely(!code_object)) goto bad; + getframe = PySys_GetObject("_getframe"); + if (unlikely(!getframe)) goto bad; + if (unlikely(PyDict_SetItemString(dict, "_getframe", getframe))) goto bad; + frame = PyEval_EvalCode(code_object, dict, dict); + if (unlikely(!frame) || frame == Py_None) goto bad; + success = 1; + bad: + PyErr_Restore(exc_type, exc_value, exc_traceback); + Py_XDECREF(code_object); + Py_XDECREF(py_py_line); + Py_XDECREF(py_funcname); + Py_XDECREF(dict); + Py_XDECREF(replace); + if (success) { + PyTraceBack_Here( + (struct _frame*)frame); + } + Py_XDECREF(frame); +} +#else +static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( + const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = NULL; + PyObject *py_funcname = NULL; + #if PY_MAJOR_VERSION < 3 + PyObject *py_srcfile = NULL; + py_srcfile = PyString_FromString(filename); + if (!py_srcfile) goto bad; + #endif + if (c_line) { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + if (!py_funcname) goto bad; + #else + py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + if (!py_funcname) goto bad; + funcname = PyUnicode_AsUTF8(py_funcname); + if (!funcname) goto bad; + #endif + } + else { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromString(funcname); + if (!py_funcname) goto bad; + #endif + } + #if PY_MAJOR_VERSION < 3 + py_code = __Pyx_PyCode_New( + 0, + 0, + 0, + 0, + 0, + 0, + __pyx_empty_bytes, /*PyObject *code,*/ + __pyx_empty_tuple, /*PyObject *consts,*/ + __pyx_empty_tuple, /*PyObject *names,*/ + __pyx_empty_tuple, /*PyObject *varnames,*/ + __pyx_empty_tuple, /*PyObject *freevars,*/ + __pyx_empty_tuple, /*PyObject *cellvars,*/ + py_srcfile, /*PyObject *filename,*/ + py_funcname, /*PyObject *name,*/ + py_line, + __pyx_empty_bytes /*PyObject *lnotab*/ + ); + Py_DECREF(py_srcfile); + #else + py_code = PyCode_NewEmpty(filename, funcname, py_line); + #endif + Py_XDECREF(py_funcname); + return py_code; +bad: + Py_XDECREF(py_funcname); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_srcfile); + #endif + return NULL; +} +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = 0; + PyFrameObject *py_frame = 0; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject *ptype, *pvalue, *ptraceback; + if (c_line) { + c_line = __Pyx_CLineForTraceback(tstate, c_line); + } + py_code = __pyx_find_code_object(c_line ? -c_line : py_line); + if (!py_code) { + __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); + py_code = __Pyx_CreateCodeObjectForTraceback( + funcname, c_line, py_line, filename); + if (!py_code) { + /* If the code object creation fails, then we should clear the + fetched exception references and propagate the new exception */ + Py_XDECREF(ptype); + Py_XDECREF(pvalue); + Py_XDECREF(ptraceback); + goto bad; + } + __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); + __pyx_insert_code_object(c_line ? -c_line : py_line, py_code); + } + py_frame = PyFrame_New( + tstate, /*PyThreadState *tstate,*/ + py_code, /*PyCodeObject *code,*/ + __pyx_d, /*PyObject *globals,*/ + 0 /*PyObject *locals*/ + ); + if (!py_frame) goto bad; + __Pyx_PyFrame_SetLineNumber(py_frame, py_line); + PyTraceBack_Here(py_frame); +bad: + Py_XDECREF(py_code); + Py_XDECREF(py_frame); +} +#endif + +#if PY_MAJOR_VERSION < 3 +static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags) { + __Pyx_TypeName obj_type_name; + if (PyObject_CheckBuffer(obj)) return PyObject_GetBuffer(obj, view, flags); + obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, + "'" __Pyx_FMT_TYPENAME "' does not have the buffer interface", + obj_type_name); + __Pyx_DECREF_TypeName(obj_type_name); + return -1; +} +static void __Pyx_ReleaseBuffer(Py_buffer *view) { + PyObject *obj = view->obj; + if (!obj) return; + if (PyObject_CheckBuffer(obj)) { + PyBuffer_Release(view); + return; + } + if ((0)) {} + view->obj = NULL; + Py_DECREF(obj); +} +#endif + + + /* CIntFromPyVerify */ + #define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0) +#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1) +#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\ + {\ + func_type value = func_value;\ + if (sizeof(target_type) < sizeof(func_type)) {\ + if (unlikely(value != (func_type) (target_type) value)) {\ + func_type zero = 0;\ + if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\ + return (target_type) -1;\ + if (is_unsigned && unlikely(value < zero))\ + goto raise_neg_overflow;\ + else\ + goto raise_overflow;\ + }\ + }\ + return (target_type) value;\ + } + +/* Declarations */ + #if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) + #ifdef __cplusplus + static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { + return ::std::complex< float >(x, y); + } + #else + static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { + return x + y*(__pyx_t_float_complex)_Complex_I; + } + #endif +#else + static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { + __pyx_t_float_complex z; + z.real = x; + z.imag = y; + return z; + } +#endif + +/* Arithmetic */ + #if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) +#else + static CYTHON_INLINE int __Pyx_c_eq_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + return (a.real == b.real) && (a.imag == b.imag); + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sum_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + __pyx_t_float_complex z; + z.real = a.real + b.real; + z.imag = a.imag + b.imag; + return z; + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_diff_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + __pyx_t_float_complex z; + z.real = a.real - b.real; + z.imag = a.imag - b.imag; + return z; + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prod_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + __pyx_t_float_complex z; + z.real = a.real * b.real - a.imag * b.imag; + z.imag = a.real * b.imag + a.imag * b.real; + return z; + } + #if 1 + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quot_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + if (b.imag == 0) { + return __pyx_t_float_complex_from_parts(a.real / b.real, a.imag / b.real); + } else if (fabsf(b.real) >= fabsf(b.imag)) { + if (b.real == 0 && b.imag == 0) { + return __pyx_t_float_complex_from_parts(a.real / b.real, a.imag / b.imag); + } else { + float r = b.imag / b.real; + float s = (float)(1.0) / (b.real + b.imag * r); + return __pyx_t_float_complex_from_parts( + (a.real + a.imag * r) * s, (a.imag - a.real * r) * s); + } + } else { + float r = b.real / b.imag; + float s = (float)(1.0) / (b.imag + b.real * r); + return __pyx_t_float_complex_from_parts( + (a.real * r + a.imag) * s, (a.imag * r - a.real) * s); + } + } + #else + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quot_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + if (b.imag == 0) { + return __pyx_t_float_complex_from_parts(a.real / b.real, a.imag / b.real); + } else { + float denom = b.real * b.real + b.imag * b.imag; + return __pyx_t_float_complex_from_parts( + (a.real * b.real + a.imag * b.imag) / denom, + (a.imag * b.real - a.real * b.imag) / denom); + } + } + #endif + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_neg_float(__pyx_t_float_complex a) { + __pyx_t_float_complex z; + z.real = -a.real; + z.imag = -a.imag; + return z; + } + static CYTHON_INLINE int __Pyx_c_is_zero_float(__pyx_t_float_complex a) { + return (a.real == 0) && (a.imag == 0); + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conj_float(__pyx_t_float_complex a) { + __pyx_t_float_complex z; + z.real = a.real; + z.imag = -a.imag; + return z; + } + #if 1 + static CYTHON_INLINE float __Pyx_c_abs_float(__pyx_t_float_complex z) { + #if !defined(HAVE_HYPOT) || defined(_MSC_VER) + return sqrtf(z.real*z.real + z.imag*z.imag); + #else + return hypotf(z.real, z.imag); + #endif + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_pow_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + __pyx_t_float_complex z; + float r, lnr, theta, z_r, z_theta; + if (b.imag == 0 && b.real == (int)b.real) { + if (b.real < 0) { + float denom = a.real * a.real + a.imag * a.imag; + a.real = a.real / denom; + a.imag = -a.imag / denom; + b.real = -b.real; + } + switch ((int)b.real) { + case 0: + z.real = 1; + z.imag = 0; + return z; + case 1: + return a; + case 2: + return __Pyx_c_prod_float(a, a); + case 3: + z = __Pyx_c_prod_float(a, a); + return __Pyx_c_prod_float(z, a); + case 4: + z = __Pyx_c_prod_float(a, a); + return __Pyx_c_prod_float(z, z); + } + } + if (a.imag == 0) { + if (a.real == 0) { + return a; + } else if ((b.imag == 0) && (a.real >= 0)) { + z.real = powf(a.real, b.real); + z.imag = 0; + return z; + } else if (a.real > 0) { + r = a.real; + theta = 0; + } else { + r = -a.real; + theta = atan2f(0.0, -1.0); + } + } else { + r = __Pyx_c_abs_float(a); + theta = atan2f(a.imag, a.real); + } + lnr = logf(r); + z_r = expf(lnr * b.real - theta * b.imag); + z_theta = theta * b.real + lnr * b.imag; + z.real = z_r * cosf(z_theta); + z.imag = z_r * sinf(z_theta); + return z; + } + #endif +#endif + +/* Declarations */ + #if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) + #ifdef __cplusplus + static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { + return ::std::complex< double >(x, y); + } + #else + static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { + return x + y*(__pyx_t_double_complex)_Complex_I; + } + #endif +#else + static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { + __pyx_t_double_complex z; + z.real = x; + z.imag = y; + return z; + } +#endif + +/* Arithmetic */ + #if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) +#else + static CYTHON_INLINE int __Pyx_c_eq_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { + return (a.real == b.real) && (a.imag == b.imag); + } + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { + __pyx_t_double_complex z; + z.real = a.real + b.real; + z.imag = a.imag + b.imag; + return z; + } + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { + __pyx_t_double_complex z; + z.real = a.real - b.real; + z.imag = a.imag - b.imag; + return z; + } + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { + __pyx_t_double_complex z; + z.real = a.real * b.real - a.imag * b.imag; + z.imag = a.real * b.imag + a.imag * b.real; + return z; + } + #if 1 + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { + if (b.imag == 0) { + return __pyx_t_double_complex_from_parts(a.real / b.real, a.imag / b.real); + } else if (fabs(b.real) >= fabs(b.imag)) { + if (b.real == 0 && b.imag == 0) { + return __pyx_t_double_complex_from_parts(a.real / b.real, a.imag / b.imag); + } else { + double r = b.imag / b.real; + double s = (double)(1.0) / (b.real + b.imag * r); + return __pyx_t_double_complex_from_parts( + (a.real + a.imag * r) * s, (a.imag - a.real * r) * s); + } + } else { + double r = b.real / b.imag; + double s = (double)(1.0) / (b.imag + b.real * r); + return __pyx_t_double_complex_from_parts( + (a.real * r + a.imag) * s, (a.imag * r - a.real) * s); + } + } + #else + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { + if (b.imag == 0) { + return __pyx_t_double_complex_from_parts(a.real / b.real, a.imag / b.real); + } else { + double denom = b.real * b.real + b.imag * b.imag; + return __pyx_t_double_complex_from_parts( + (a.real * b.real + a.imag * b.imag) / denom, + (a.imag * b.real - a.real * b.imag) / denom); + } + } + #endif + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg_double(__pyx_t_double_complex a) { + __pyx_t_double_complex z; + z.real = -a.real; + z.imag = -a.imag; + return z; + } + static CYTHON_INLINE int __Pyx_c_is_zero_double(__pyx_t_double_complex a) { + return (a.real == 0) && (a.imag == 0); + } + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj_double(__pyx_t_double_complex a) { + __pyx_t_double_complex z; + z.real = a.real; + z.imag = -a.imag; + return z; + } + #if 1 + static CYTHON_INLINE double __Pyx_c_abs_double(__pyx_t_double_complex z) { + #if !defined(HAVE_HYPOT) || defined(_MSC_VER) + return sqrt(z.real*z.real + z.imag*z.imag); + #else + return hypot(z.real, z.imag); + #endif + } + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { + __pyx_t_double_complex z; + double r, lnr, theta, z_r, z_theta; + if (b.imag == 0 && b.real == (int)b.real) { + if (b.real < 0) { + double denom = a.real * a.real + a.imag * a.imag; + a.real = a.real / denom; + a.imag = -a.imag / denom; + b.real = -b.real; + } + switch ((int)b.real) { + case 0: + z.real = 1; + z.imag = 0; + return z; + case 1: + return a; + case 2: + return __Pyx_c_prod_double(a, a); + case 3: + z = __Pyx_c_prod_double(a, a); + return __Pyx_c_prod_double(z, a); + case 4: + z = __Pyx_c_prod_double(a, a); + return __Pyx_c_prod_double(z, z); + } + } + if (a.imag == 0) { + if (a.real == 0) { + return a; + } else if ((b.imag == 0) && (a.real >= 0)) { + z.real = pow(a.real, b.real); + z.imag = 0; + return z; + } else if (a.real > 0) { + r = a.real; + theta = 0; + } else { + r = -a.real; + theta = atan2(0.0, -1.0); + } + } else { + r = __Pyx_c_abs_double(a); + theta = atan2(a.imag, a.real); + } + lnr = log(r); + z_r = exp(lnr * b.real - theta * b.imag); + z_theta = theta * b.real + lnr * b.imag; + z.real = z_r * cos(z_theta); + z.imag = z_r * sin(z_theta); + return z; + } + #endif +#endif + +/* Declarations */ + #if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) + #ifdef __cplusplus + static CYTHON_INLINE __pyx_t_long_double_complex __pyx_t_long_double_complex_from_parts(long double x, long double y) { + return ::std::complex< long double >(x, y); + } + #else + static CYTHON_INLINE __pyx_t_long_double_complex __pyx_t_long_double_complex_from_parts(long double x, long double y) { + return x + y*(__pyx_t_long_double_complex)_Complex_I; + } + #endif +#else + static CYTHON_INLINE __pyx_t_long_double_complex __pyx_t_long_double_complex_from_parts(long double x, long double y) { + __pyx_t_long_double_complex z; + z.real = x; + z.imag = y; + return z; + } +#endif + +/* Arithmetic */ + #if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) +#else + static CYTHON_INLINE int __Pyx_c_eq_long__double(__pyx_t_long_double_complex a, __pyx_t_long_double_complex b) { + return (a.real == b.real) && (a.imag == b.imag); + } + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_sum_long__double(__pyx_t_long_double_complex a, __pyx_t_long_double_complex b) { + __pyx_t_long_double_complex z; + z.real = a.real + b.real; + z.imag = a.imag + b.imag; + return z; + } + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_diff_long__double(__pyx_t_long_double_complex a, __pyx_t_long_double_complex b) { + __pyx_t_long_double_complex z; + z.real = a.real - b.real; + z.imag = a.imag - b.imag; + return z; + } + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_prod_long__double(__pyx_t_long_double_complex a, __pyx_t_long_double_complex b) { + __pyx_t_long_double_complex z; + z.real = a.real * b.real - a.imag * b.imag; + z.imag = a.real * b.imag + a.imag * b.real; + return z; + } + #if 1 + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_quot_long__double(__pyx_t_long_double_complex a, __pyx_t_long_double_complex b) { + if (b.imag == 0) { + return __pyx_t_long_double_complex_from_parts(a.real / b.real, a.imag / b.real); + } else if (fabsl(b.real) >= fabsl(b.imag)) { + if (b.real == 0 && b.imag == 0) { + return __pyx_t_long_double_complex_from_parts(a.real / b.real, a.imag / b.imag); + } else { + long double r = b.imag / b.real; + long double s = (long double)(1.0) / (b.real + b.imag * r); + return __pyx_t_long_double_complex_from_parts( + (a.real + a.imag * r) * s, (a.imag - a.real * r) * s); + } + } else { + long double r = b.real / b.imag; + long double s = (long double)(1.0) / (b.imag + b.real * r); + return __pyx_t_long_double_complex_from_parts( + (a.real * r + a.imag) * s, (a.imag * r - a.real) * s); + } + } + #else + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_quot_long__double(__pyx_t_long_double_complex a, __pyx_t_long_double_complex b) { + if (b.imag == 0) { + return __pyx_t_long_double_complex_from_parts(a.real / b.real, a.imag / b.real); + } else { + long double denom = b.real * b.real + b.imag * b.imag; + return __pyx_t_long_double_complex_from_parts( + (a.real * b.real + a.imag * b.imag) / denom, + (a.imag * b.real - a.real * b.imag) / denom); + } + } + #endif + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_neg_long__double(__pyx_t_long_double_complex a) { + __pyx_t_long_double_complex z; + z.real = -a.real; + z.imag = -a.imag; + return z; + } + static CYTHON_INLINE int __Pyx_c_is_zero_long__double(__pyx_t_long_double_complex a) { + return (a.real == 0) && (a.imag == 0); + } + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_conj_long__double(__pyx_t_long_double_complex a) { + __pyx_t_long_double_complex z; + z.real = a.real; + z.imag = -a.imag; + return z; + } + #if 1 + static CYTHON_INLINE long double __Pyx_c_abs_long__double(__pyx_t_long_double_complex z) { + #if !defined(HAVE_HYPOT) || defined(_MSC_VER) + return sqrtl(z.real*z.real + z.imag*z.imag); + #else + return hypotl(z.real, z.imag); + #endif + } + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_pow_long__double(__pyx_t_long_double_complex a, __pyx_t_long_double_complex b) { + __pyx_t_long_double_complex z; + long double r, lnr, theta, z_r, z_theta; + if (b.imag == 0 && b.real == (int)b.real) { + if (b.real < 0) { + long double denom = a.real * a.real + a.imag * a.imag; + a.real = a.real / denom; + a.imag = -a.imag / denom; + b.real = -b.real; + } + switch ((int)b.real) { + case 0: + z.real = 1; + z.imag = 0; + return z; + case 1: + return a; + case 2: + return __Pyx_c_prod_long__double(a, a); + case 3: + z = __Pyx_c_prod_long__double(a, a); + return __Pyx_c_prod_long__double(z, a); + case 4: + z = __Pyx_c_prod_long__double(a, a); + return __Pyx_c_prod_long__double(z, z); + } + } + if (a.imag == 0) { + if (a.real == 0) { + return a; + } else if ((b.imag == 0) && (a.real >= 0)) { + z.real = powl(a.real, b.real); + z.imag = 0; + return z; + } else if (a.real > 0) { + r = a.real; + theta = 0; + } else { + r = -a.real; + theta = atan2l(0.0, -1.0); + } + } else { + r = __Pyx_c_abs_long__double(a); + theta = atan2l(a.imag, a.real); + } + lnr = logl(r); + z_r = expl(lnr * b.real - theta * b.imag); + z_theta = theta * b.real + lnr * b.imag; + z.real = z_r * cosl(z_theta); + z.imag = z_r * sinl(z_theta); + return z; + } + #endif +#endif + +/* CIntFromPy */ + static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const int neg_one = (int) -1, const_zero = (int) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if ((sizeof(int) < sizeof(long))) { + __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (int) val; + } + } +#endif + if (unlikely(!PyLong_Check(x))) { + int val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (int) -1; + val = __Pyx_PyInt_As_int(tmp); + Py_DECREF(tmp); + return val; + } + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + case 2: + if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 2 * PyLong_SHIFT)) { + return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 3: + if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 3 * PyLong_SHIFT)) { + return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 4: + if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 4 * PyLong_SHIFT)) { + return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + } + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (int) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if ((sizeof(int) <= sizeof(unsigned long))) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(int) <= sizeof(unsigned PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + case -2: + if ((8 * sizeof(int) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 2: + if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -3: + if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 3: + if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -4: + if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 4: + if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) { + return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + } + } +#endif + if ((sizeof(int) <= sizeof(long))) { + __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(int) <= sizeof(PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { + int val; + int ret = -1; +#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API + Py_ssize_t bytes_copied = PyLong_AsNativeBytes( + x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0)); + if (unlikely(bytes_copied == -1)) { + } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) { + goto raise_overflow; + } else { + ret = 0; + } +#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + ret = _PyLong_AsByteArray((PyLongObject *)x, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *v; + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (likely(PyLong_CheckExact(x))) { + v = __Pyx_NewRef(x); + } else { + v = PyNumber_Long(x); + if (unlikely(!v)) return (int) -1; + assert(PyLong_CheckExact(v)); + } + { + int result = PyObject_RichCompareBool(v, Py_False, Py_LT); + if (unlikely(result < 0)) { + Py_DECREF(v); + return (int) -1; + } + is_negative = result == 1; + } + if (is_unsigned && unlikely(is_negative)) { + Py_DECREF(v); + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + Py_DECREF(v); + if (unlikely(!stepval)) + return (int) -1; + } else { + stepval = v; + } + v = NULL; + val = (int) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(int) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + long idigit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + val |= ((int) idigit) << bits; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + } + Py_DECREF(shift); shift = NULL; + Py_DECREF(mask); mask = NULL; + { + long idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(int) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((int) idigit) << bits; + } + if (!is_unsigned) { + if (unlikely(val & (((int) 1) << (sizeof(int) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif + if (unlikely(ret)) + return (int) -1; + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to int"); + return (int) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to int"); + return (int) -1; +} + +/* CIntToPy */ + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const int neg_one = (int) -1, const_zero = (int) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(int) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(int) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(int) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + unsigned char *bytes = (unsigned char *)&value; +#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4 + if (is_unsigned) { + return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1); + } else { + return PyLong_FromNativeBytes(bytes, sizeof(value), -1); + } +#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 + int one = 1; int little = (int)*(unsigned char *)&one; + return _PyLong_FromByteArray(bytes, sizeof(int), + little, !is_unsigned); +#else + int one = 1; int little = (int)*(unsigned char *)&one; + PyObject *from_bytes, *result = NULL; + PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; + from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); + if (!from_bytes) return NULL; + py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(int)); + if (!py_bytes) goto limited_bad; + order_str = PyUnicode_FromString(little ? "little" : "big"); + if (!order_str) goto limited_bad; + arg_tuple = PyTuple_Pack(2, py_bytes, order_str); + if (!arg_tuple) goto limited_bad; + if (!is_unsigned) { + kwds = PyDict_New(); + if (!kwds) goto limited_bad; + if (PyDict_SetItemString(kwds, "signed", __Pyx_NewRef(Py_True))) goto limited_bad; + } + result = PyObject_Call(from_bytes, arg_tuple, kwds); + limited_bad: + Py_XDECREF(kwds); + Py_XDECREF(arg_tuple); + Py_XDECREF(order_str); + Py_XDECREF(py_bytes); + Py_XDECREF(from_bytes); + return result; +#endif + } +} + +/* CIntToPy */ + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const long neg_one = (long) -1, const_zero = (long) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(long) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(long) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(long) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + unsigned char *bytes = (unsigned char *)&value; +#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4 + if (is_unsigned) { + return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1); + } else { + return PyLong_FromNativeBytes(bytes, sizeof(value), -1); + } +#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 + int one = 1; int little = (int)*(unsigned char *)&one; + return _PyLong_FromByteArray(bytes, sizeof(long), + little, !is_unsigned); +#else + int one = 1; int little = (int)*(unsigned char *)&one; + PyObject *from_bytes, *result = NULL; + PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; + from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); + if (!from_bytes) return NULL; + py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(long)); + if (!py_bytes) goto limited_bad; + order_str = PyUnicode_FromString(little ? "little" : "big"); + if (!order_str) goto limited_bad; + arg_tuple = PyTuple_Pack(2, py_bytes, order_str); + if (!arg_tuple) goto limited_bad; + if (!is_unsigned) { + kwds = PyDict_New(); + if (!kwds) goto limited_bad; + if (PyDict_SetItemString(kwds, "signed", __Pyx_NewRef(Py_True))) goto limited_bad; + } + result = PyObject_Call(from_bytes, arg_tuple, kwds); + limited_bad: + Py_XDECREF(kwds); + Py_XDECREF(arg_tuple); + Py_XDECREF(order_str); + Py_XDECREF(py_bytes); + Py_XDECREF(from_bytes); + return result; +#endif + } +} + +/* CIntToPy */ + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_int(unsigned int value) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const unsigned int neg_one = (unsigned int) -1, const_zero = (unsigned int) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(unsigned int) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(unsigned int) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(unsigned int) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(unsigned int) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(unsigned int) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + unsigned char *bytes = (unsigned char *)&value; +#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4 + if (is_unsigned) { + return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1); + } else { + return PyLong_FromNativeBytes(bytes, sizeof(value), -1); + } +#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 + int one = 1; int little = (int)*(unsigned char *)&one; + return _PyLong_FromByteArray(bytes, sizeof(unsigned int), + little, !is_unsigned); +#else + int one = 1; int little = (int)*(unsigned char *)&one; + PyObject *from_bytes, *result = NULL; + PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; + from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); + if (!from_bytes) return NULL; + py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(unsigned int)); + if (!py_bytes) goto limited_bad; + order_str = PyUnicode_FromString(little ? "little" : "big"); + if (!order_str) goto limited_bad; + arg_tuple = PyTuple_Pack(2, py_bytes, order_str); + if (!arg_tuple) goto limited_bad; + if (!is_unsigned) { + kwds = PyDict_New(); + if (!kwds) goto limited_bad; + if (PyDict_SetItemString(kwds, "signed", __Pyx_NewRef(Py_True))) goto limited_bad; + } + result = PyObject_Call(from_bytes, arg_tuple, kwds); + limited_bad: + Py_XDECREF(kwds); + Py_XDECREF(arg_tuple); + Py_XDECREF(order_str); + Py_XDECREF(py_bytes); + Py_XDECREF(from_bytes); + return result; +#endif + } +} + +/* CIntFromPy */ + static CYTHON_INLINE unsigned int __Pyx_PyInt_As_unsigned_int(PyObject *x) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const unsigned int neg_one = (unsigned int) -1, const_zero = (unsigned int) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if ((sizeof(unsigned int) < sizeof(long))) { + __PYX_VERIFY_RETURN_INT(unsigned int, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (unsigned int) val; + } + } +#endif + if (unlikely(!PyLong_Check(x))) { + unsigned int val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (unsigned int) -1; + val = __Pyx_PyInt_As_unsigned_int(tmp); + Py_DECREF(tmp); + return val; + } + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(unsigned int, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + case 2: + if ((8 * sizeof(unsigned int) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned int) >= 2 * PyLong_SHIFT)) { + return (unsigned int) (((((unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0])); + } + } + break; + case 3: + if ((8 * sizeof(unsigned int) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned int) >= 3 * PyLong_SHIFT)) { + return (unsigned int) (((((((unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0])); + } + } + break; + case 4: + if ((8 * sizeof(unsigned int) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned int) >= 4 * PyLong_SHIFT)) { + return (unsigned int) (((((((((unsigned int)digits[3]) << PyLong_SHIFT) | (unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0])); + } + } + break; + } + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (unsigned int) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if ((sizeof(unsigned int) <= sizeof(unsigned long))) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned int, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(unsigned int) <= sizeof(unsigned PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(unsigned int, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + case -2: + if ((8 * sizeof(unsigned int) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned int) - 1 > 2 * PyLong_SHIFT)) { + return (unsigned int) (((unsigned int)-1)*(((((unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0]))); + } + } + break; + case 2: + if ((8 * sizeof(unsigned int) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned int) - 1 > 2 * PyLong_SHIFT)) { + return (unsigned int) ((((((unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0]))); + } + } + break; + case -3: + if ((8 * sizeof(unsigned int) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned int) - 1 > 3 * PyLong_SHIFT)) { + return (unsigned int) (((unsigned int)-1)*(((((((unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0]))); + } + } + break; + case 3: + if ((8 * sizeof(unsigned int) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned int) - 1 > 3 * PyLong_SHIFT)) { + return (unsigned int) ((((((((unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0]))); + } + } + break; + case -4: + if ((8 * sizeof(unsigned int) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned int) - 1 > 4 * PyLong_SHIFT)) { + return (unsigned int) (((unsigned int)-1)*(((((((((unsigned int)digits[3]) << PyLong_SHIFT) | (unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0]))); + } + } + break; + case 4: + if ((8 * sizeof(unsigned int) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned int) - 1 > 4 * PyLong_SHIFT)) { + return (unsigned int) ((((((((((unsigned int)digits[3]) << PyLong_SHIFT) | (unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0]))); + } + } + break; + } + } +#endif + if ((sizeof(unsigned int) <= sizeof(long))) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned int, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(unsigned int) <= sizeof(PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned int, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { + unsigned int val; + int ret = -1; +#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API + Py_ssize_t bytes_copied = PyLong_AsNativeBytes( + x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0)); + if (unlikely(bytes_copied == -1)) { + } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) { + goto raise_overflow; + } else { + ret = 0; + } +#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + ret = _PyLong_AsByteArray((PyLongObject *)x, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *v; + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (likely(PyLong_CheckExact(x))) { + v = __Pyx_NewRef(x); + } else { + v = PyNumber_Long(x); + if (unlikely(!v)) return (unsigned int) -1; + assert(PyLong_CheckExact(v)); + } + { + int result = PyObject_RichCompareBool(v, Py_False, Py_LT); + if (unlikely(result < 0)) { + Py_DECREF(v); + return (unsigned int) -1; + } + is_negative = result == 1; + } + if (is_unsigned && unlikely(is_negative)) { + Py_DECREF(v); + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + Py_DECREF(v); + if (unlikely(!stepval)) + return (unsigned int) -1; + } else { + stepval = v; + } + v = NULL; + val = (unsigned int) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(unsigned int) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + long idigit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + val |= ((unsigned int) idigit) << bits; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + } + Py_DECREF(shift); shift = NULL; + Py_DECREF(mask); mask = NULL; + { + long idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(unsigned int) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((unsigned int) idigit) << bits; + } + if (!is_unsigned) { + if (unlikely(val & (((unsigned int) 1) << (sizeof(unsigned int) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif + if (unlikely(ret)) + return (unsigned int) -1; + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to unsigned int"); + return (unsigned int) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to unsigned int"); + return (unsigned int) -1; +} + +/* CIntToPy */ + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_char(char value) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const char neg_one = (char) -1, const_zero = (char) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(char) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(char) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(char) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(char) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(char) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + unsigned char *bytes = (unsigned char *)&value; +#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4 + if (is_unsigned) { + return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1); + } else { + return PyLong_FromNativeBytes(bytes, sizeof(value), -1); + } +#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 + int one = 1; int little = (int)*(unsigned char *)&one; + return _PyLong_FromByteArray(bytes, sizeof(char), + little, !is_unsigned); +#else + int one = 1; int little = (int)*(unsigned char *)&one; + PyObject *from_bytes, *result = NULL; + PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; + from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); + if (!from_bytes) return NULL; + py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(char)); + if (!py_bytes) goto limited_bad; + order_str = PyUnicode_FromString(little ? "little" : "big"); + if (!order_str) goto limited_bad; + arg_tuple = PyTuple_Pack(2, py_bytes, order_str); + if (!arg_tuple) goto limited_bad; + if (!is_unsigned) { + kwds = PyDict_New(); + if (!kwds) goto limited_bad; + if (PyDict_SetItemString(kwds, "signed", __Pyx_NewRef(Py_True))) goto limited_bad; + } + result = PyObject_Call(from_bytes, arg_tuple, kwds); + limited_bad: + Py_XDECREF(kwds); + Py_XDECREF(arg_tuple); + Py_XDECREF(order_str); + Py_XDECREF(py_bytes); + Py_XDECREF(from_bytes); + return result; +#endif + } +} + +/* CIntFromPy */ + static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const long neg_one = (long) -1, const_zero = (long) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if ((sizeof(long) < sizeof(long))) { + __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (long) val; + } + } +#endif + if (unlikely(!PyLong_Check(x))) { + long val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (long) -1; + val = __Pyx_PyInt_As_long(tmp); + Py_DECREF(tmp); + return val; + } + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + case 2: + if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 2 * PyLong_SHIFT)) { + return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 3: + if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 3 * PyLong_SHIFT)) { + return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 4: + if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 4 * PyLong_SHIFT)) { + return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + } + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (long) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if ((sizeof(long) <= sizeof(unsigned long))) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(long) <= sizeof(unsigned PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + case -2: + if ((8 * sizeof(long) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 2: + if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -3: + if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 3: + if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -4: + if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 4: + if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) { + return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + } + } +#endif + if ((sizeof(long) <= sizeof(long))) { + __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(long) <= sizeof(PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { + long val; + int ret = -1; +#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API + Py_ssize_t bytes_copied = PyLong_AsNativeBytes( + x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0)); + if (unlikely(bytes_copied == -1)) { + } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) { + goto raise_overflow; + } else { + ret = 0; + } +#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + ret = _PyLong_AsByteArray((PyLongObject *)x, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *v; + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (likely(PyLong_CheckExact(x))) { + v = __Pyx_NewRef(x); + } else { + v = PyNumber_Long(x); + if (unlikely(!v)) return (long) -1; + assert(PyLong_CheckExact(v)); + } + { + int result = PyObject_RichCompareBool(v, Py_False, Py_LT); + if (unlikely(result < 0)) { + Py_DECREF(v); + return (long) -1; + } + is_negative = result == 1; + } + if (is_unsigned && unlikely(is_negative)) { + Py_DECREF(v); + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + Py_DECREF(v); + if (unlikely(!stepval)) + return (long) -1; + } else { + stepval = v; + } + v = NULL; + val = (long) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(long) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + long idigit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + val |= ((long) idigit) << bits; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + } + Py_DECREF(shift); shift = NULL; + Py_DECREF(mask); mask = NULL; + { + long idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(long) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((long) idigit) << bits; + } + if (!is_unsigned) { + if (unlikely(val & (((long) 1) << (sizeof(long) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif + if (unlikely(ret)) + return (long) -1; + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to long"); + return (long) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to long"); + return (long) -1; +} + +/* FormatTypeName */ + #if CYTHON_COMPILING_IN_LIMITED_API +static __Pyx_TypeName +__Pyx_PyType_GetName(PyTypeObject* tp) +{ + PyObject *name = __Pyx_PyObject_GetAttrStr((PyObject *)tp, + __pyx_n_s_name); + if (unlikely(name == NULL) || unlikely(!PyUnicode_Check(name))) { + PyErr_Clear(); + Py_XDECREF(name); + name = __Pyx_NewRef(__pyx_n_s__59); + } + return name; +} +#endif + +/* FastTypeChecks */ + #if CYTHON_COMPILING_IN_CPYTHON +static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { + while (a) { + a = __Pyx_PyType_GetSlot(a, tp_base, PyTypeObject*); + if (a == b) + return 1; + } + return b == &PyBaseObject_Type; +} +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (a == b) return 1; + mro = a->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b) + return 1; + } + return 0; + } + return __Pyx_InBases(a, b); +} +static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (cls == a || cls == b) return 1; + mro = cls->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + PyObject *base = PyTuple_GET_ITEM(mro, i); + if (base == (PyObject *)a || base == (PyObject *)b) + return 1; + } + return 0; + } + return __Pyx_InBases(cls, a) || __Pyx_InBases(cls, b); +} +#if PY_MAJOR_VERSION == 2 +static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) { + PyObject *exception, *value, *tb; + int res; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&exception, &value, &tb); + res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0; + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + if (!res) { + res = PyObject_IsSubclass(err, exc_type2); + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + } + __Pyx_ErrRestore(exception, value, tb); + return res; +} +#else +static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) { + if (exc_type1) { + return __Pyx_IsAnySubtype2((PyTypeObject*)err, (PyTypeObject*)exc_type1, (PyTypeObject*)exc_type2); + } else { + return __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); + } +} +#endif +static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + assert(PyExceptionClass_Check(exc_type)); + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; i= 0x030B00A4 + return Py_Version & ~0xFFUL; +#else + const char* rt_version = Py_GetVersion(); + unsigned long version = 0; + unsigned long factor = 0x01000000UL; + unsigned int digit = 0; + int i = 0; + while (factor) { + while ('0' <= rt_version[i] && rt_version[i] <= '9') { + digit = digit * 10 + (unsigned int) (rt_version[i] - '0'); + ++i; + } + version += factor * digit; + if (rt_version[i] != '.') + break; + digit = 0; + factor >>= 8; + ++i; + } + return version; +#endif +} +static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer) { + const unsigned long MAJOR_MINOR = 0xFFFF0000UL; + if ((rt_version & MAJOR_MINOR) == (ct_version & MAJOR_MINOR)) + return 0; + if (likely(allow_newer && (rt_version & MAJOR_MINOR) > (ct_version & MAJOR_MINOR))) + return 1; + { + char message[200]; + PyOS_snprintf(message, sizeof(message), + "compile time Python version %d.%d " + "of module '%.100s' " + "%s " + "runtime version %d.%d", + (int) (ct_version >> 24), (int) ((ct_version >> 16) & 0xFF), + __Pyx_MODULE_NAME, + (allow_newer) ? "was newer than" : "does not match", + (int) (rt_version >> 24), (int) ((rt_version >> 16) & 0xFF) + ); + return PyErr_WarnEx(NULL, message, 1); + } +} + +/* InitStrings */ + #if PY_MAJOR_VERSION >= 3 +static int __Pyx_InitString(__Pyx_StringTabEntry t, PyObject **str) { + if (t.is_unicode | t.is_str) { + if (t.intern) { + *str = PyUnicode_InternFromString(t.s); + } else if (t.encoding) { + *str = PyUnicode_Decode(t.s, t.n - 1, t.encoding, NULL); + } else { + *str = PyUnicode_FromStringAndSize(t.s, t.n - 1); + } + } else { + *str = PyBytes_FromStringAndSize(t.s, t.n - 1); + } + if (!*str) + return -1; + if (PyObject_Hash(*str) == -1) + return -1; + return 0; +} +#endif +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { + while (t->p) { + #if PY_MAJOR_VERSION >= 3 + __Pyx_InitString(*t, t->p); + #else + if (t->is_unicode) { + *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); + } else if (t->intern) { + *t->p = PyString_InternFromString(t->s); + } else { + *t->p = PyString_FromStringAndSize(t->s, t->n - 1); + } + if (!*t->p) + return -1; + if (PyObject_Hash(*t->p) == -1) + return -1; + #endif + ++t; + } + return 0; +} + +#include +static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s) { + size_t len = strlen(s); + if (unlikely(len > (size_t) PY_SSIZE_T_MAX)) { + PyErr_SetString(PyExc_OverflowError, "byte string is too long"); + return -1; + } + return (Py_ssize_t) len; +} +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { + Py_ssize_t len = __Pyx_ssize_strlen(c_str); + if (unlikely(len < 0)) return NULL; + return __Pyx_PyUnicode_FromStringAndSize(c_str, len); +} +static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char* c_str) { + Py_ssize_t len = __Pyx_ssize_strlen(c_str); + if (unlikely(len < 0)) return NULL; + return PyByteArray_FromStringAndSize(c_str, len); +} +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) { + Py_ssize_t ignore; + return __Pyx_PyObject_AsStringAndSize(o, &ignore); +} +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +#if !CYTHON_PEP393_ENABLED +static const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + char* defenc_c; + PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); + if (!defenc) return NULL; + defenc_c = PyBytes_AS_STRING(defenc); +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + { + char* end = defenc_c + PyBytes_GET_SIZE(defenc); + char* c; + for (c = defenc_c; c < end; c++) { + if ((unsigned char) (*c) >= 128) { + PyUnicode_AsASCIIString(o); + return NULL; + } + } + } +#endif + *length = PyBytes_GET_SIZE(defenc); + return defenc_c; +} +#else +static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL; +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + if (likely(PyUnicode_IS_ASCII(o))) { + *length = PyUnicode_GET_LENGTH(o); + return PyUnicode_AsUTF8(o); + } else { + PyUnicode_AsASCIIString(o); + return NULL; + } +#else + return PyUnicode_AsUTF8AndSize(o, length); +#endif +} +#endif +#endif +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT + if ( +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + __Pyx_sys_getdefaultencoding_not_ascii && +#endif + PyUnicode_Check(o)) { + return __Pyx_PyUnicode_AsStringAndSize(o, length); + } else +#endif +#if (!CYTHON_COMPILING_IN_PYPY && !CYTHON_COMPILING_IN_LIMITED_API) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) + if (PyByteArray_Check(o)) { + *length = PyByteArray_GET_SIZE(o); + return PyByteArray_AS_STRING(o); + } else +#endif + { + char* result; + int r = PyBytes_AsStringAndSize(o, &result, length); + if (unlikely(r < 0)) { + return NULL; + } else { + return result; + } + } +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { + int is_true = x == Py_True; + if (is_true | (x == Py_False) | (x == Py_None)) return is_true; + else return PyObject_IsTrue(x); +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) { + int retval; + if (unlikely(!x)) return -1; + retval = __Pyx_PyObject_IsTrue(x); + Py_DECREF(x); + return retval; +} +static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) { + __Pyx_TypeName result_type_name = __Pyx_PyType_GetName(Py_TYPE(result)); +#if PY_MAJOR_VERSION >= 3 + if (PyLong_Check(result)) { + if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, + "__int__ returned non-int (type " __Pyx_FMT_TYPENAME "). " + "The ability to return an instance of a strict subclass of int is deprecated, " + "and may be removed in a future version of Python.", + result_type_name)) { + __Pyx_DECREF_TypeName(result_type_name); + Py_DECREF(result); + return NULL; + } + __Pyx_DECREF_TypeName(result_type_name); + return result; + } +#endif + PyErr_Format(PyExc_TypeError, + "__%.4s__ returned non-%.4s (type " __Pyx_FMT_TYPENAME ")", + type_name, type_name, result_type_name); + __Pyx_DECREF_TypeName(result_type_name); + Py_DECREF(result); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) { +#if CYTHON_USE_TYPE_SLOTS + PyNumberMethods *m; +#endif + const char *name = NULL; + PyObject *res = NULL; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x) || PyLong_Check(x))) +#else + if (likely(PyLong_Check(x))) +#endif + return __Pyx_NewRef(x); +#if CYTHON_USE_TYPE_SLOTS + m = Py_TYPE(x)->tp_as_number; + #if PY_MAJOR_VERSION < 3 + if (m && m->nb_int) { + name = "int"; + res = m->nb_int(x); + } + else if (m && m->nb_long) { + name = "long"; + res = m->nb_long(x); + } + #else + if (likely(m && m->nb_int)) { + name = "int"; + res = m->nb_int(x); + } + #endif +#else + if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) { + res = PyNumber_Int(x); + } +#endif + if (likely(res)) { +#if PY_MAJOR_VERSION < 3 + if (unlikely(!PyInt_Check(res) && !PyLong_Check(res))) { +#else + if (unlikely(!PyLong_CheckExact(res))) { +#endif + return __Pyx_PyNumber_IntOrLongWrongResultType(res, name); + } + } + else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_TypeError, + "an integer is required"); + } + return res; +} +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { + Py_ssize_t ival; + PyObject *x; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(b))) { + if (sizeof(Py_ssize_t) >= sizeof(long)) + return PyInt_AS_LONG(b); + else + return PyInt_AsSsize_t(b); + } +#endif + if (likely(PyLong_CheckExact(b))) { + #if CYTHON_USE_PYLONG_INTERNALS + if (likely(__Pyx_PyLong_IsCompact(b))) { + return __Pyx_PyLong_CompactValue(b); + } else { + const digit* digits = __Pyx_PyLong_Digits(b); + const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(b); + switch (size) { + case 2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + } + } + #endif + return PyLong_AsSsize_t(b); + } + x = PyNumber_Index(b); + if (!x) return -1; + ival = PyInt_AsSsize_t(x); + Py_DECREF(x); + return ival; +} +static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject* o) { + if (sizeof(Py_hash_t) == sizeof(Py_ssize_t)) { + return (Py_hash_t) __Pyx_PyIndex_AsSsize_t(o); +#if PY_MAJOR_VERSION < 3 + } else if (likely(PyInt_CheckExact(o))) { + return PyInt_AS_LONG(o); +#endif + } else { + Py_ssize_t ival; + PyObject *x; + x = PyNumber_Index(o); + if (!x) return -1; + ival = PyInt_AsLong(x); + Py_DECREF(x); + return ival; + } +} +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) { + return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False); +} +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { + return PyInt_FromSize_t(ival); +} + + +/* #### Code section: utility_code_pragmas_end ### */ +#ifdef _MSC_VER +#pragma warning( pop ) +#endif + + + +/* #### Code section: end ### */ +#endif /* Py_PYTHON_H */ diff --git a/utilities/nw_ec_alignx.cpython-310-darwin.so b/utilities/nw_ec_alignx.cpython-310-darwin.so new file mode 100755 index 0000000..a889c66 Binary files /dev/null and b/utilities/nw_ec_alignx.cpython-310-darwin.so differ diff --git a/utilities/nw_ec_alignx.pyx b/utilities/nw_ec_alignx.pyx new file mode 100644 index 0000000..a1a1e3b --- /dev/null +++ b/utilities/nw_ec_alignx.pyx @@ -0,0 +1,739 @@ +# -*- coding: utf-8 -*- +# +#------------------------------ +# Name: nw_ec_align.px +# Purpose: Needelman-Wunsh algorithm for EC number alignment - +# Cython version +# +# @uthor: acph - dragopoot@gmail.com +# +# Created: Sep, 2017 +# Copyright: (c) acph 2017 +# Licence: GNU GENERAL PUBLIC LICENSE, Version 3, 29 June 2007 +#------------------------------ +"""Needelman-Wunsh algorithm for EC number alignment - Cython version. +This version performs ~30 times fastter than the original pure python/numpy +implementation.""" + +import ctypes +import cython +from multiprocessing import Pool, Array +from functools import partial +cimport cython +from cpython cimport bool +import numpy as np +cimport numpy as np +from numpy cimport int32_t, float64_t +from libc.stdlib cimport rand +from libc.math cimport copysignf +cdef extern from "limits.h": + int INT_MAX + +DTYPE = np.int32 +ctypedef np.int32_t DTYPE_t +DTYPEF = np.float64 +ctypedef np.float64_t DTYPEF_t + + +cdef minarg(float f[3]): + """Returns the minimum value and the index of that value from an array + of 3 elements + """ + cdef: + int i + int argmin = 0 + float mini = f[0] + for i in range(1, 3): + if f[i] < mini: + mini = f[i] + argmin = i + return mini, argmin + + +# best performance +@cython.boundscheck(False) +@cython.wraparound(False) +def _FastNW(np.ndarray[DTYPEF_t, ndim=2] mat, dict ecs, list seq1, list seq2, + float gap=0.9): + """Perform dynamic programing alignment of EC numbers sequences. Creates + the scoring and arrow matrices using brute force loops. + + Returns the dynamic programing matrix and the arrow matrix used to trace + back the alignment. + + Arguments: + - `mat`: EC number similarity (distance) matrix + - `ecs`: EC number dictionary. Keys are EC numbers (3 levels of + classification) and values are indices to similarity matrix (mat) + - `seq1`: enzymatic step sequence 1, list of (unaligned) EC numbers + - `seq2`: enzymatic step sequence 2, list of (unaligned) EC numbers + - `gap`: gap penalties, default = 1 + """ + cdef: + int l1, l2, li, i, j, k, eci, ecj, minpos + float mini, randum, randfactor + float f[3] + mini = 0 + l1, l2 = len(seq1), len(seq2) + # Create the score and arrow matrices + cdef np.ndarray[DTYPEF_t, ndim= 2] scoremat = np.zeros((l1 + 1, l2 + 1), DTYPEF) + cdef np.ndarray[DTYPE_t, ndim= 2] arrow = np.zeros((l1 + 1, l2 + 1), DTYPE) + # Create first row and first column with gaps + for i in range(l2 + 1): + scoremat[0, i] = i * gap + arrow[0, i] = 1 + for i in range(l1 + 1): + scoremat[i, 0] = i * gap + # Fill the matrix. f array is cell posible values (len = 3) + for i in range(1, l1 + 1): + for j in range(1, l2 + 1): + eci = ecs[seq1[i - 1]] + ecj = ecs[seq2[j - 1]] + sco = mat[eci, ecj] + f[0] = scoremat[i - 1, j] + gap + f[1] = scoremat[i, j - 1] + gap + f[2] = scoremat[i - 1, j - 1] + sco + # Adding some random variation to solve draws + for k in range(3): + randfactor = copysignf(0.001, f[k]) + randnum = rand() / float(INT_MAX) + f[k] -= randfactor * randnum + # select min value + mini, minpos = minarg(f) + # fill the matrices + scoremat[i, j] = mini + arrow[i, j] = minpos + return arrow, mini + + +cdef gappen(seq1, seq2): + """Returns the number + Keyword Arguments: + list seq1 -- + list seq2 -- + """ + cdef: + int l1 = len(seq1) + float gappen = 0 + str gap = '-.-.-' + int i + float sgaps = 0 + float ngaps = 0 + float sgaps2 = 0 + float ngaps2 = 0 + float fgaps = 0 + float fgaps2 = 0 + float fblock1 = 0 + float fblock2 = 0 + str ec1, ec2 + bool begin1 = True + bool begin2 = True + bool block1 = True + bool block2 = True + + # four cases depending in wich sequence has gaps + if gap not in seq1 and gap not in seq2: + return gappen # no gaps, return 0 + elif gap in seq1 and gap not in seq2: + for i in range(l1): # Gaps only in seq1 + ec1 = seq1[i] + if begin1 == True: + if ec1 == gap: + continue + else: + begin1 = False + continue + else: + if ec1 == gap: + sgaps += 1 + fblock1 += 1 + if block1 == True: + ngaps += 1 + block1 = False + else: + block1 = True + fblock1 = 0 + if block1 == False: + sgaps -= fblock1 + ngaps -= 1 + if sgaps == 0: + gappen = 0.0 + else: + gappen = ngaps / sgaps / 2 + return gappen + elif gap not in seq1 and gap in seq2: + for i in range(l1): # Gaps only in seq2 + ec2 = seq2[i] + if begin2 == True: + if ec2 == gap: + continue + else: + begin2 = False + continue + else: + if ec2 == gap: + sgaps += 1 + fblock2 += 1 + if block2 == True: + ngaps += 1 + block2 = False + else: + block2 = True + fblock2 = 0 + if block2 == False: + sgaps -= fblock2 + ngaps -= 1 + if sgaps == 0: + gappen = 0.0 + else: + gappen = ngaps / sgaps / 2 + else: + for i in range(l1): + ec1 = seq1[i] + ec2 = seq2[i] + if begin1 == True: + if ec1 == gap: + pass + else: + begin1 = False + pass + else: + if ec1 == gap: + sgaps += 1 + fblock1 += 1 + if block1 == True: + ngaps += 1 + block1 = False + else: + block1 = True + fblock1 = 0 + ec2 = seq2[i] + if begin2 == True: + if ec2 == gap: + pass + else: + begin2 = False + pass + else: + if ec2 == gap: + sgaps2 += 1 + fblock2 += 1 + if block2 == True: + ngaps2 += 1 + block2 = False + else: + block2 = True + fblock2 = 0 + if block1 == False: + sgaps -= fblock1 + ngaps -= 1 + if block2 == False: + sgaps2 -= fblock2 + ngaps2 -= 1 + if ngaps <= 0 and ngaps2 > 0: + gappen = (ngaps2 / sgaps2) / 2 + elif ngaps > 0 and ngaps2 <= 0: + gappen = (ngaps / sgaps) / 2 + elif ngaps <= 0 and ngaps2 <= 0: + gappen = 0.0 + else: + gappen = ((ngaps / sgaps) + (ngaps2 / sgaps2)) / 2 + return gappen + +# better performance + + +@cython.boundscheck(False) +@cython.wraparound(False) +def scoring(np.ndarray[DTYPEF_t, ndim=2] mat, dict ecs, seq1, seq2, + float gap=1, float fhomo=0.95, float fpengap=0.05): + """ This function evaluates a pair of alignmed ESS and returns an entroy + based similarity (distance) score. This value is in the range 0-1. 0 means + more similar sequences and 1 means dissimilar sequences. + + The score tries to recall the fitness function proposed in Ortegon, et al. + 2015. Comput Struct Biotechnol J. 9;13. + + Arguments: + - `mat`: EC number similarity (distance) matrix + - `ecs`: EC number dictionary. Keys are EC numbers (3 levels of + classification) and values are indices to similarity matrix (mat) + - `seq1`: enzymatic step sequence 1, list of (unaligned) EC numbers + - `seq2`: enzymatic step sequence 2, list of (unaligned) EC numbers + - `gap`: gap penalties, default = 1 + - `fhomo`: Weight factor to multiplicate the homogeneity fraction of score + - `fpengap`: Weight factor to multiplicate the gap penalization + """ + cdef: + unsigned int length, i, x, y + float pengap, score + float homo = 0.0 + str ec1, ec2 + str gapstr = '-.-.-' + str dotstr = '...' + # are sequences of same length? + assert 0.99999 < (fhomo + fpengap) < 1.0001, \ + 'fhomo + fpengap must sum aprox. 1' + assert len(seq1) == len(seq2), \ + 'The aligned sequences must be of the same length' + length = len(seq1) # Alignment length + # -- Sum homogeneity evaluation + for i in range(length): + ec1 = seq1[i] + ec2 = seq2[i] + if ec1 == gapstr or ec2 == gapstr: # and s1[i] != s2[1] + homo += gap # gap homogeneity = 1 + elif ec1 == dotstr or ec2 == dotstr: + pass + elif ec1 == '' or ec2 == '': + pass + else: + x = ecs[ec1] + y = ecs[ec2] + homo += mat[x, y] + homo = homo / length # mean homogeneity + pengap = gappen(seq1, seq2) # dap penalization + # Final score calculation + score = (homo * fhomo) + (pengap * fpengap) + # there is no penalizarion for increment in columns + return score + + +def _backtrace(np.ndarray[DTYPE_t, ndim=2] arrow, list seq1, list seq2): + """Reads the arrow matrix of NW alignment and return two lists of + with the aligned EC numbers. + + Arguments: + - `arrow`: arrow matrix generated by dynamic programing + - `seq1`: enzymatic step sequence, list of (unaligned) EC numbers + - `seq2`: enzymatic step sequence, list of (unaligned) EC numbers + """ + cdef: + int v = len(seq1) + int h = len(seq2) + bool ok = True + list st1 = [] + list st2 = [] + while ok: # backtrace walk + if arrow[v, h] == 0: # vertical best result, s1 + st1.append(seq1[v - 1]) + st2.append('-.-.-') + v -= 1 + elif arrow[v, h] == 1: # horizontal best result, s2 + st1.append('-.-.-') + st2.append(seq2[h - 1]) + h -= 1 + elif arrow[v, h] == 2: # diagonal best result, s1,s2 aligned + st1.append(seq1[v - 1]) + st2.append(seq2[h - 1]) + v -= 1 + h -= 1 + if v == 0 and h == 0: + ok = False + # reverse sequences + st1 = st1[::-1] + st2 = st2[::-1] + return st1, st2 + + +def NW(np.ndarray[DTYPEF_t, ndim=2] mat, dict ecs, list seq1, list seq2, + float gap=0.9, bool localize=False, bool nws=False, + bool strfmt=True, bool oscore=False): + """ + NW alignment function. Creates a pairwise alignment of Enzymatic Step + Sequences (ESS) using a Needelman-Wunsh algorithm. + + Arguments: + - `mat`: EC number (3 levels) substitution matrix + - `ecs`: List of ec numbers that represent the labels of the matrix + - `seq1`: EC numbers sequence 1, list + - `seq2`: EC numbers sequence 2, list + - `gap`: gap penalty for NW algorithm (not for scoring) + - `localize`: if localize = True, then, the function returns only the + fragment of the alignment covered by the shortest sequence + and the score is calculated accordingly + - `nws`: if true, the function returns the scores as is returned by the + NW algorithm + - `strfmt`: if True. The aligned sequences are in string format. If + False, the sequences are in list format + - `oscore`: if True, only returns the score of the alignment, else + """ + cdef: + float score, mini, scoring_gap + str aseq1, aseq2 + int length, i, ii, fi + char binit # localize initial index boolena + char bblock # block mar boolean + # create NW matrices + arr, mini = _FastNW(mat, ecs, seq1, seq2, gap=gap) + seq1, seq2 = _backtrace(arr, seq1, seq2) # backtrace alingment + # localized alignmet + if localize: + binit = 1 + bblock = 0 + length = len(seq1) + ii = 0 + fi = 0 + for i in range(length): + if seq1[i] != '-.-.-' and seq2[i] != '-.-.-' and binit: + ii = i + binit = 0 + fi = ii + 1 + elif (seq1[i] == '-.-.-' or seq2[i] == '-.-.-') and bblock: + fi = i + bblock = 0 + elif seq1[i] != '-.-.-' and seq2[i] != '-.-.-': + bblock = 1 + if bblock: + fi = length + seq1 = seq1[ii: fi] + seq2 = seq2[ii: fi] + # NW score or entropy based score + if nws: + score = mini + else: + scoring_gap = 1 + score = scoring(mat, ecs, seq1, seq2, gap=scoring_gap, fhomo=0.95, + fpengap=0.05) + if oscore: + return score + if strfmt: + aseq1 = ':'.join(seq1) + aseq2 = ':'.join(seq2) + return aseq1, aseq2, score + else: + return seq1, seq2, score + + +def ind_vs_alldb(int ind, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, + dict decs, float thres=1.0, bool wholedb=False, + bool localize=False, bool oscore=True): + """Align the ESSs in the specified index (ind) versus +all the rest of sequences with index > ind. + + Keyword Arguments: + ind -- Int, index of the ESS to compare against the database + seqs -- List, ESSs database. Each ESS is a list of EC numbers + mat -- ndarray, EC number similarity matrix + decs -- Dict, EC number index dictionary + thres -- Float, threshold score to filter data (default 1.0). The data + captured will be score <= thres. + wholedb -- Bool, If True, the ind ESS is compared against all the sequences + stored in seqs list. + localize -- Bool. If True, the scoring of the alignment will be + made only in the part of the alignment covered by + the shortest ESS (default False) + oscore -- Bool. If True, returns only the score of the alignment + otherwise, returns a tuple with the algined ESSs and + the corresonding score (defautl True) + """ + cdef: + dict resdic = {ind: {}} + list seq1, seq2 + int j + # float sco + seq1 = seqs[ind] + if wholedb: + indices = range(len(seqs)) + else: + indices = range(ind + 1, len(seqs)) + for j in indices: + seq2 = seqs[j] + sco = NW(mat, decs, seq1, seq2, oscore=oscore, + localize=localize) + if oscore: + if sco <= thres: + resdic[ind][j] = sco + else: + if sco[2] <= thres: + resdic[ind][j] = sco + return resdic + + +def seq_vs_db(list seq1, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, dict decs, + float thres=1.0, bool localize=False, bool oscore=True): + """Align de specified ESSs vs all the ESS in the database seqs. + Returns a dictionary with the scores. The keys are the index of + the sequenc in database (seqs) and the values are ths scores. + + Keyword Arguments: + seq1 -- List, ESS. Each element of the list is an EC number + seqs -- List, ESSs database. Each ESS is a list of EC numbers + mat -- ndarray, EC number similarity matrix + decs -- Dict, EC number index dictionary + thres -- Float, threshold score to filter de data (default 1.0) + The data wil be captured with score <= thres. + localize -- Bool. If True, the scoring of the alignment will be + made only in the part of the alignment covered by + the shortest ESS (default False) + oscore -- Bool. If True, returns only the score of the alignment + otherwise, returns a tuple with the algined ESSs and + the corresonding score (defautl True) + """ + cdef: + dict resdict = {} + for i in range(len(seqs)): + seq2 = seqs[i] + sco = NW(mat, decs, seq1, seq2, oscore=oscore, localize=localize) + if oscore: + if sco <= thres: + resdict[i] = sco + else: + if sco[2] <= thres: + resdict[i] = sco + return resdict + + +def db_vs_db(list seqs1, list seqs2, np.ndarray[DTYPEF_t, ndim=2] mat, + dict decs, float thres=1.0, bool localize=False, + bool oscore=True, int nproc=2): + """Align all the ESS in both databases (seqs1, seqs2). The result + is a dictionary of dictionaries. The fist key representes the index + in of the ESS in the first database; the second key is the index of + the ESS in the second database and the value is the score. + + BEWARE if the database is huge and the threshold is > 0.4 the procces may + use all the RAM + + Keyword Arguments: + seqs1 -- List, ESSs database1. Each element is a list of EC numbers + seqs2 -- List, ESSs database2. + mat -- ndarray, EC number similarity matrix + decs -- Dict, EC number index dictionary + thres -- Float, threshold score to filter de data (default 1.0) + The data wil be captured with score <= thres. + localize -- Bool. If True, the scoring of the alignment will be + made only in the part of the alignment covered by + the shortest ESS (default False) + nproc -- Number of cores to use (default 2) + oscore -- Bool. If True, returns only the score of the alignment + otherwise, returns a tuple with the algined ESSs and + the corresonding score (defautl True) + """ + cdef: + dict resdic = {} + pool = Pool(processes=nproc) + align_func = partial(seq_vs_db, seqs=seqs2, mat=mat, decs=decs, thres=thres, + localize=localize, oscore=oscore) + resd = pool.map(align_func, seqs1) + for i in range(len(resd)): + d = resd[i] + if not d == {}: + resdic[i] = resd[i] + pool.close() + return resdic + + +def alldb_comp(list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, dict decs, + float thres=1.0, bool localize=False, bool oscore=True, + int nproc=2): + """Align all the ESS in the database (seqs) and return the results in form + of dictionary. The result is equivalent to the upper part the all vs all + comparisson matrix. + + BEWARE if the database is huge and the threshold is > 0.4 the procces may + use all the RAM + + Keyword Arguments: + seqs -- List, ESSs database. Each ESS is a list of EC numbers + mat -- ndarray, EC number similarity matrix + decs -- Dict, EC number index dictionary + thres -- Float, score threshold to filter data (default 1.0). The data + captured will be score <= thres. + localize -- Score the alignment in the segment covered by te smallest ESS + (default False) + nproc -- Number of cores to use (default 2) + oscore -- Bool. If True, returns only the score of the alignment + otherwise, returns a tuple with the algined ESSs and + the corresonding score (defautl True) + """ + cdef: + indices = list(range(len(seqs))) + list resd + dict d + dict result = {} + pool = Pool(processes=nproc) + align_func = partial(ind_vs_alldb, mat=mat, decs=decs, seqs=seqs, + thres=thres, localize=localize, oscore=oscore) + resd = pool.map(align_func, indices, chunksize=nproc) + + for d in resd: + result.update(d) + return result + + +def list_vs_alldb(list indices, list seqs, np.ndarray[DTYPEF_t, ndim=2] mat, + dict decs, float thres=1.0, bool localize=False, + bool wholedb=False, bool oscore=False, int nproc=2): + """Align all the ESS in the database (seqs) and return the results in form + of dictionary. The result is equivalent to the upper part the all vs all + comparisson matrix. + + BEWARE if the database is huge and the threshold is > 0.4 the procces may + use all the RAM + + Keyword Arguments: + inds -- List of indices of the database to align vs the rest of database + seqs -- List, ESSs database. Each ESS is a list of EC numbers + mat -- ndarray, EC number similarity matrix + decs -- Dict, EC number index dictionary + thres -- Float, score threshold to filter data (default 1.0). The data + captured will be score <= thres. + localize -- Score the alignment in the segment covered by te smallest ESS + (default False) + wholedb -- Bool, If True, the ind ESS is compared against all the sequences + stored in seqs list. + oscore -- Bool. If True, returns only the score of the alignment + otherwise, returns a tuple with the algined ESSs and + the corresonding score (defautl True) + nproc -- Number of cores used (default 2) + """ + cdef: + list resd + dict d + dict result = {} + pool = Pool(processes=nproc) + align_func = partial(ind_vs_alldb, mat=mat, decs=decs, seqs=seqs, + thres=thres, localize=localize, wholedb=wholedb, + oscore=oscore) + resd = pool.map(align_func, indices, chunksize=nproc) + + for d in resd: + result.update(d) + return result + + +def alldb_shared(seqs, mat, decs, thres=1.0, localize=False, + nproc=2): + """Align all the ESS in the database (seqs) and return the results as a + matrix with only the upper part filled. The rest of the matrix is + initialized with 1s. + + This function is more memory efficient than alldb function, whoever + coution must be taken if th database is to big (> 80000 seqs) + + Keyword Arguments: + seqs -- List, ESSs database. Each ESS is a list of EC numbers + mat -- ndarray, EC number similarity matrix + decs -- Dict, EC number index dictionary + thres -- Float, score threshold to filter data (default 1.0). The data + captured will be score <= thres. + localize -- Score the alignment in the segment covered by te smallest ESS + (default False) + nproc -- Number of cores used (default 2) + """ + total = len(seqs) + _create_global_arr(total) + indices = range(total) + pool = Pool(processes=nproc) + align_func = partial(_fill_mat, seqs=seqs, mat=mat, decs=decs, + thres=thres, localize=localize) + pool.map(align_func, indices, chunksize=nproc) + pool.close() + return scomat + + +def _create_global_arr(total): + """Create shared global array for all vs all comparisson + + Keyword Arguments: + total -- Row size of square matrix + """ + global scomat + shared_sco_base = Array(ctypes.c_float, total * total) + scomat_ = np.frombuffer(shared_sco_base.get_obj(), dtype=np.float32) + scomat = scomat_.reshape((total, total)) + scomat[:, :] = 1 + + +def _fill_mat(ind, seqs, mat, decs, localize, float thres): + """Fill shared global matrix + + Keyword Arguments: + seqs -- List, ESSs database. Each ESS is a list of EC numbers + mat -- ndarray, EC number similarity matrix + decs -- Dict, EC number index dictionary + thres -- Float, score threshold to filter data (default 1.0). The data + captured will be score <= thres. + localize -- Score the alignment in the segment covered by te smallest ESS + (default False) + """ + cdef: + int j + float sco + list seq1, seq2 + seq1 = seqs[ind] + for j in range(ind + 1, len(seqs)): + seq2 = seqs[j] + sco = NW(mat, decs, seq1, seq2, oscore=True, + localize=localize) + scomat[ind, j] = sco + + +def store_dict(fname, rdict, indices=None, indices2=None): + """Stores the scores of the alignments in a tab separated text + file. The first column corresponds to the first sequence index + the scond column to the second index and the third column to + the score. + + Keyword Arguments: + fname -- Str, file name + rdict -- Dict, result dictionary + indices -- List, indices to translate (default None) + indices2 -- List, indices to translate (default None) if there + is a second database. In this case the this list is + used to translate the indices in the internal dictionaries + """ + if not rdict: + return + outf = open(fname, 'w', buffering=1000) + testval = list(rdict.values())[0] + if type(testval) == float and not indices: + for i, sco in rdict.items(): + if type(sco) is tuple: + sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + line = '{}\t{}\n'.format(i, sco) + outf.write(line) + elif type(testval) == float: + for i, sco in rdict.items(): + i = indices[i] + if type(sco) is tuple: + sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + line = '{}\t{}\n'.format(i, sco) + outf.write(line) + + elif not indices and not indices2: + for i, dic in rdict.items(): + for j, sco in dic.items(): + if type(sco) is tuple: + sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + line = '{}\t{}\t{}\n'.format(i, j, sco) + outf.write(line) + elif indices and not indices2: + for i, dic in rdict.items(): + for j, sco in dic.items(): + ind1 = indices[i] + ind2 = j + if type(sco) is tuple: + sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + line = '{}\t{}\t{}\n'.format(ind1, ind2, sco) + outf.write(line) + elif not indices and indices2: + for i, dic in rdict.items(): + for j, sco in dic.items(): + ind1 = i + ind2 = indices2[j] + if type(sco) is tuple: + sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + line = '{}\t{}\t{}\n'.format(ind1, ind2, sco) + outf.write(line) + else: + for i, dic in rdict.items(): + for j, sco in dic.items(): + ind1 = indices[i] + ind2 = indices2[j] + if type(sco) is tuple: + sco = f"{sco[2]}\t{sco[0]}\t{sco[1]}" + line = '{}\t{}\t{}\n'.format(ind1, ind2, sco) + outf.write(line) + outf.close() diff --git a/utilities/profile_nwx/db/dhist b/utilities/profile_nwx/db/dhist new file mode 100644 index 0000000..6f22c82 Binary files /dev/null and b/utilities/profile_nwx/db/dhist differ diff --git a/utilities/profile_nwx/history.sqlite b/utilities/profile_nwx/history.sqlite new file mode 100644 index 0000000..e9e81c9 Binary files /dev/null and b/utilities/profile_nwx/history.sqlite differ diff --git a/utilities/profile_nwx/ipython_config.py b/utilities/profile_nwx/ipython_config.py new file mode 100644 index 0000000..8ebb850 --- /dev/null +++ b/utilities/profile_nwx/ipython_config.py @@ -0,0 +1,574 @@ +# Configuration file for ipython. + +#------------------------------------------------------------------------------ +# InteractiveShellApp(Configurable) configuration +#------------------------------------------------------------------------------ + +# A Mixin for applications that start InteractiveShell instances. +# +# Provides configurables for loading extensions and executing files as part of +# configuring a Shell environment. +# +# The following methods should be called by the :meth:`initialize` method of the +# subclass: +# +# - :meth:`init_path` +# - :meth:`init_shell` (to be implemented by the subclass) +# - :meth:`init_gui_pylab` +# - :meth:`init_extensions` +# - :meth:`init_code` + +# Execute the given command string. +#c.InteractiveShellApp.code_to_run = '' + +# Run the file referenced by the PYTHONSTARTUP environment variable at IPython +# startup. +#c.InteractiveShellApp.exec_PYTHONSTARTUP = True + +# List of files to run at IPython startup. +#c.InteractiveShellApp.exec_files = [] + +# lines of code to run at IPython startup. +c.InteractiveShellApp.exec_lines = ['%pylab', + '%load_ext Cython', + '%load_ext autoreload', + '%autoreload 2'] + +# A list of dotted module names of IPython extensions to load. +#c.InteractiveShellApp.extensions = [] + +# dotted module name of an IPython extension to load. +#c.InteractiveShellApp.extra_extension = '' + +# A file to be run +#c.InteractiveShellApp.file_to_run = '' + +# Enable GUI event loop integration with any of ('glut', 'gtk', 'gtk2', 'gtk3', +# 'osx', 'pyglet', 'qt', 'qt4', 'qt5', 'tk', 'wx', 'gtk2', 'qt4'). +#c.InteractiveShellApp.gui = None + +# Should variables loaded at startup (by startup files, exec_lines, etc.) be +# hidden from tools like %who? +#c.InteractiveShellApp.hide_initial_ns = True + +# Configure matplotlib for interactive use with the default matplotlib backend. +#c.InteractiveShellApp.matplotlib = None + +# Run the module as a script. +#c.InteractiveShellApp.module_to_run = '' + +# Pre-load matplotlib and numpy for interactive use, selecting a particular +# matplotlib backend and loop integration. +#c.InteractiveShellApp.pylab = None + +# If true, IPython will populate the user namespace with numpy, pylab, etc. and +# an ``import *`` is done from numpy and pylab, when using pylab mode. +# +# When False, pylab mode should not import any names into the user namespace. +#c.InteractiveShellApp.pylab_import_all = True + +# Reraise exceptions encountered loading IPython extensions? +#c.InteractiveShellApp.reraise_ipython_extension_failures = False + +#------------------------------------------------------------------------------ +# Application(SingletonConfigurable) configuration +#------------------------------------------------------------------------------ + +# This is an application. + +# The date format used by logging formatters for %(asctime)s +#c.Application.log_datefmt = '%Y-%m-%d %H:%M:%S' + +# The Logging format template +#c.Application.log_format = '[%(name)s]%(highlevel)s %(message)s' + +# Set the log level by value or name. +#c.Application.log_level = 30 + +#------------------------------------------------------------------------------ +# BaseIPythonApplication(Application) configuration +#------------------------------------------------------------------------------ + +# IPython: an enhanced interactive Python shell. + +# Whether to create profile dir if it doesn't exist +#c.BaseIPythonApplication.auto_create = False + +# Whether to install the default config files into the profile dir. If a new +# profile is being created, and IPython contains config files for that profile, +# then they will be staged into the new directory. Otherwise, default config +# files will be automatically generated. +#c.BaseIPythonApplication.copy_config_files = False + +# Path to an extra config file to load. +# +# If specified, load this config file in addition to any other IPython config. +#c.BaseIPythonApplication.extra_config_file = '' + +# The name of the IPython directory. This directory is used for logging +# configuration (through profiles), history storage, etc. The default is usually +# $HOME/.ipython. This option can also be specified through the environment +# variable IPYTHONDIR. +#c.BaseIPythonApplication.ipython_dir = '' + +# Whether to overwrite existing config files when copying +#c.BaseIPythonApplication.overwrite = False + +# The IPython profile to use. +#c.BaseIPythonApplication.profile = 'default' + +# Create a massive crash report when IPython encounters what may be an internal +# error. The default is to append a short message to the usual traceback +#c.BaseIPythonApplication.verbose_crash = False + +#------------------------------------------------------------------------------ +# TerminalIPythonApp(BaseIPythonApplication,InteractiveShellApp) configuration +#------------------------------------------------------------------------------ + +# Whether to display a banner upon starting IPython. +#c.TerminalIPythonApp.display_banner = True + +# If a command or file is given via the command-line, e.g. 'ipython foo.py', +# start an interactive shell after executing the file or command. +#c.TerminalIPythonApp.force_interact = False + +# Start IPython quickly by skipping the loading of config files. +#c.TerminalIPythonApp.quick = False + +#------------------------------------------------------------------------------ +# InteractiveShell(SingletonConfigurable) configuration +#------------------------------------------------------------------------------ + +# An enhanced, interactive shell for Python. + +# 'all', 'last', 'last_expr' or 'none', specifying which nodes should be run +# interactively (displaying output from expressions). +#c.InteractiveShell.ast_node_interactivity = 'last_expr' + +# A list of ast.NodeTransformer subclass instances, which will be applied to +# user input before code is run. +#c.InteractiveShell.ast_transformers = [] + +# Make IPython automatically call any callable object even if you didn't type +# explicit parentheses. For example, 'str 43' becomes 'str(43)' automatically. +# The value can be '0' to disable the feature, '1' for 'smart' autocall, where +# it is not applied if there are no more arguments on the line, and '2' for +# 'full' autocall, where all callable objects are automatically called (even if +# no arguments are present). +#c.InteractiveShell.autocall = 0 + +# Autoindent IPython code entered interactively. +#c.InteractiveShell.autoindent = True + +# Enable magic commands to be called without the leading %. +#c.InteractiveShell.automagic = True + +# The part of the banner to be printed before the profile +#c.InteractiveShell.banner1 = 'Python 3.5.2 (default, Nov 17 2016, 17:05:23) \nType "copyright", "credits" or "license" for more information.\n\nIPython 5.3.0 -- An enhanced Interactive Python.\n? -> Introduction and overview of IPython\'s features.\n%quickref -> Quick reference.\nhelp -> Python\'s own help system.\nobject? -> Details about \'object\', use \'object??\' for extra details.\n' + +# The part of the banner to be printed after the profile +#c.InteractiveShell.banner2 = '' + +# Set the size of the output cache. The default is 1000, you can change it +# permanently in your config file. Setting it to 0 completely disables the +# caching system, and the minimum value accepted is 20 (if you provide a value +# less than 20, it is reset to 0 and a warning is issued). This limit is +# defined because otherwise you'll spend more time re-flushing a too small cache +# than working +#c.InteractiveShell.cache_size = 1000 + +# Use colors for displaying information about objects. Because this information +# is passed through a pager (like 'less'), and some pagers get confused with +# color codes, this capability can be turned off. +#c.InteractiveShell.color_info = True + +# Set the color scheme (NoColor, Neutral, Linux, or LightBG). +#c.InteractiveShell.colors = 'Neutral' + +## +#c.InteractiveShell.debug = False + +# **Deprecated** +# +# Will be removed in IPython 6.0 +# +# Enable deep (recursive) reloading by default. IPython can use the deep_reload +# module which reloads changes in modules recursively (it replaces the reload() +# function, so you don't need to change anything to use it). `deep_reload` +# forces a full reload of modules whose code may have changed, which the default +# reload() function does not. When deep_reload is off, IPython will use the +# normal reload(), but deep_reload will still be available as dreload(). +#c.InteractiveShell.deep_reload = False + +# Don't call post-execute functions that have failed in the past. +#c.InteractiveShell.disable_failing_post_execute = False + +# If True, anything that would be passed to the pager will be displayed as +# regular output instead. +#c.InteractiveShell.display_page = False + +# (Provisional API) enables html representation in mime bundles sent to pagers. +#c.InteractiveShell.enable_html_pager = False + +# Total length of command history +#c.InteractiveShell.history_length = 10000 + +# The number of saved history entries to be loaded into the history buffer at +# startup. +#c.InteractiveShell.history_load_length = 1000 + +## +#c.InteractiveShell.ipython_dir = '' + +# Start logging to the given file in append mode. Use `logfile` to specify a log +# file to **overwrite** logs to. +#c.InteractiveShell.logappend = '' + +# The name of the logfile to use. +#c.InteractiveShell.logfile = '' + +# Start logging to the default log file in overwrite mode. Use `logappend` to +# specify a log file to **append** logs to. +#c.InteractiveShell.logstart = False + +## +#c.InteractiveShell.object_info_string_level = 0 + +# Automatically call the pdb debugger after every exception. +#c.InteractiveShell.pdb = False + +# Deprecated since IPython 4.0 and ignored since 5.0, set +# TerminalInteractiveShell.prompts object directly. +# c.InteractiveShell.prompt_in1 = 'In [\\#]: ' + +# Deprecated since IPython 4.0 and ignored since 5.0, set +# TerminalInteractiveShell.prompts object directly. +#c.InteractiveShell.prompt_in2 = ' .\\D.: ' + +# Deprecated since IPython 4.0 and ignored since 5.0, set +# TerminalInteractiveShell.prompts object directly. +# c.InteractiveShell.prompt_out = 'Out[\\#]: ' + +# Deprecated since IPython 4.0 and ignored since 5.0, set +# TerminalInteractiveShell.prompts object directly. +#c.InteractiveShell.prompts_pad_left = True + +## +#c.InteractiveShell.quiet = False + +## +#c.InteractiveShell.separate_in = '\n' + +## +#c.InteractiveShell.separate_out = '' + +## +#c.InteractiveShell.separate_out2 = '' + +# Show rewritten input, e.g. for autocall. +#c.InteractiveShell.show_rewritten_input = True + +# Enables rich html representation of docstrings. (This requires the docrepr +# module). +#c.InteractiveShell.sphinxify_docstring = False + +## +#c.InteractiveShell.wildcards_case_sensitive = True + +## +#c.InteractiveShell.xmode = 'Context' + +#------------------------------------------------------------------------------ +# TerminalInteractiveShell(InteractiveShell) configuration +#------------------------------------------------------------------------------ + +# Set to confirm when you try to exit IPython with an EOF (Control-D in Unix, +# Control-Z/Enter in Windows). By typing 'exit' or 'quit', you can force a +# direct exit without any confirmation. +#c.TerminalInteractiveShell.confirm_exit = True + +# Options for displaying tab completions, 'column', 'multicolumn', and +# 'readlinelike'. These options are for `prompt_toolkit`, see `prompt_toolkit` +# documentation for more information. +#c.TerminalInteractiveShell.display_completions = 'multicolumn' + +# Shortcut style to use at the prompt. 'vi' or 'emacs'. +#c.TerminalInteractiveShell.editing_mode = 'emacs' + +# Set the editor used by IPython (default to $EDITOR/vi/notepad). +#c.TerminalInteractiveShell.editor = 'nano' + +# Enable vi (v) or Emacs (C-X C-E) shortcuts to open an external editor. This is +# in addition to the F2 binding, which is always enabled. +#c.TerminalInteractiveShell.extra_open_editor_shortcuts = False + +# Highlight matching brackets. +#c.TerminalInteractiveShell.highlight_matching_brackets = True + +# The name or class of a Pygments style to use for syntax +# highlighting: +# manni, bw, abap, native, arduino, lovelace, emacs, vs, friendly, monokai, paraiso-dark, xcode, rrt, igor, default, fruity, autumn, murphy, vim, trac, pastie, rainbow_dash, algol_nu, colorful, perldoc, tango, borland, paraiso-light, algol +#c.TerminalInteractiveShell.highlighting_style = traitlets.Undefined + +# Override highlighting format for specific tokens +#c.TerminalInteractiveShell.highlighting_style_overrides = {} + +# Enable mouse support in the prompt +#c.TerminalInteractiveShell.mouse_support = False + +# Class used to generate Prompt token for prompt_toolkit +#c.TerminalInteractiveShell.prompts_class = 'IPython.terminal.prompts.Prompts' + +# Use `raw_input` for the REPL, without completion, multiline input, and prompt +# colors. +# +# Useful when controlling IPython as a subprocess, and piping STDIN/OUT/ERR. +# Known usage are: IPython own testing machinery, and emacs inferior-shell +# integration through elpy. +# +# This mode default to `True` if the `IPY_TEST_SIMPLE_PROMPT` environment +# variable is set, or the current terminal is not a tty. +#c.TerminalInteractiveShell.simple_prompt = False + +# Number of line at the bottom of the screen to reserve for the completion menu +#c.TerminalInteractiveShell.space_for_menu = 6 + +# Automatically set the terminal title +#c.TerminalInteractiveShell.term_title = True + +# Use 24bit colors instead of 256 colors in prompt highlighting. If your +# terminal supports true color, the following command should print 'TRUECOLOR' +# in orange: printf "\x1b[38;2;255;100;0mTRUECOLOR\x1b[0m\n" +#c.TerminalInteractiveShell.true_color = False + +#------------------------------------------------------------------------------ +# HistoryAccessor(HistoryAccessorBase) configuration +#------------------------------------------------------------------------------ + +# Access the history database without adding to it. +# +# This is intended for use by standalone history tools. IPython shells use +# HistoryManager, below, which is a subclass of this. + +# Options for configuring the SQLite connection +# +# These options are passed as keyword args to sqlite3.connect when establishing +# database conenctions. +#c.HistoryAccessor.connection_options = {} + +# enable the SQLite history +# +# set enabled=False to disable the SQLite history, in which case there will be +# no stored history, no SQLite connection, and no background saving thread. +# This may be necessary in some threaded environments where IPython is embedded. +#c.HistoryAccessor.enabled = True + +# Path to file to use for SQLite history database. +# +# By default, IPython will put the history database in the IPython profile +# directory. If you would rather share one history among profiles, you can set +# this value in each, so that they are consistent. +# +# Due to an issue with fcntl, SQLite is known to misbehave on some NFS mounts. +# If you see IPython hanging, try setting this to something on a local disk, +# e.g:: +# +# ipython --HistoryManager.hist_file=/tmp/ipython_hist.sqlite +# +# you can also use the specific value `:memory:` (including the colon at both +# end but not the back ticks), to avoid creating an history file. +#c.HistoryAccessor.hist_file = '' + +#------------------------------------------------------------------------------ +# HistoryManager(HistoryAccessor) configuration +#------------------------------------------------------------------------------ + +# A class to organize all history-related functionality in one place. + +# Write to database every x commands (higher values save disk access & power). +# Values of 1 or less effectively disable caching. +#c.HistoryManager.db_cache_size = 0 + +# Should the history database include output? (default: no) +#c.HistoryManager.db_log_output = False + +#------------------------------------------------------------------------------ +# ProfileDir(LoggingConfigurable) configuration +#------------------------------------------------------------------------------ + +# An object to manage the profile directory and its resources. +# +# The profile directory is used by all IPython applications, to manage +# configuration, logging and security. +# +# This object knows how to find, create and manage these directories. This +# should be used by any code that wants to handle profiles. + +# Set the profile location directly. This overrides the logic used by the +# `profile` option. +#c.ProfileDir.location = '' + +#------------------------------------------------------------------------------ +# BaseFormatter(Configurable) configuration +#------------------------------------------------------------------------------ + +# A base formatter class that is configurable. +# +# This formatter should usually be used as the base class of all formatters. It +# is a traited :class:`Configurable` class and includes an extensible API for +# users to determine how their objects are formatted. The following logic is +# used to find a function to format an given object. +# +# 1. The object is introspected to see if it has a method with the name +# :attr:`print_method`. If is does, that object is passed to that method +# for formatting. +# 2. If no print method is found, three internal dictionaries are consulted +# to find print method: :attr:`singleton_printers`, :attr:`type_printers` +# and :attr:`deferred_printers`. +# +# Users should use these dictionaries to register functions that will be used to +# compute the format data for their objects (if those objects don't have the +# special print methods). The easiest way of using these dictionaries is through +# the :meth:`for_type` and :meth:`for_type_by_name` methods. +# +# If no function/callable is found to compute the format data, ``None`` is +# returned and this format type is not used. + +## +#c.BaseFormatter.deferred_printers = {} + +## +#c.BaseFormatter.enabled = True + +## +#c.BaseFormatter.singleton_printers = {} + +## +#c.BaseFormatter.type_printers = {} + +#------------------------------------------------------------------------------ +# PlainTextFormatter(BaseFormatter) configuration +#------------------------------------------------------------------------------ + +# The default pretty-printer. +# +# This uses :mod:`IPython.lib.pretty` to compute the format data of the object. +# If the object cannot be pretty printed, :func:`repr` is used. See the +# documentation of :mod:`IPython.lib.pretty` for details on how to write pretty +# printers. Here is a simple example:: +# +# def dtype_pprinter(obj, p, cycle): +# if cycle: +# return p.text('dtype(...)') +# if hasattr(obj, 'fields'): +# if obj.fields is None: +# p.text(repr(obj)) +# else: +# p.begin_group(7, 'dtype([') +# for i, field in enumerate(obj.descr): +# if i > 0: +# p.text(',') +# p.breakable() +# p.pretty(field) +# p.end_group(7, '])') + +## +#c.PlainTextFormatter.float_precision = '' + +# Truncate large collections (lists, dicts, tuples, sets) to this size. +# +# Set to 0 to disable truncation. +#c.PlainTextFormatter.max_seq_length = 1000 + +## +#c.PlainTextFormatter.max_width = 79 + +## +#c.PlainTextFormatter.newline = '\n' + +## +#c.PlainTextFormatter.pprint = True + +## +#c.PlainTextFormatter.verbose = False + +#------------------------------------------------------------------------------ +# Completer(Configurable) configuration +#------------------------------------------------------------------------------ + +# Activate greedy completion PENDING DEPRECTION. this is now mostly taken care +# of with Jedi. +# +# This will enable completion on elements of lists, results of function calls, +# etc., but can be unsafe because the code is actually evaluated on TAB. +#c.Completer.greedy = False + +#------------------------------------------------------------------------------ +# IPCompleter(Completer) configuration +#------------------------------------------------------------------------------ + +# Extension of the completer class with IPython-specific features + +# DEPRECATED as of version 5.0. +# +# Instruct the completer to use __all__ for the completion +# +# Specifically, when completing on ``object.``. +# +# When True: only those names in obj.__all__ will be included. +# +# When False [default]: the __all__ attribute is ignored +#c.IPCompleter.limit_to__all__ = False + +# Whether to merge completion results into a single list +# +# If False, only the completion results from the first non-empty completer will +# be returned. +#c.IPCompleter.merge_completions = True + +# Instruct the completer to omit private method names +# +# Specifically, when completing on ``object.``. +# +# When 2 [default]: all names that start with '_' will be excluded. +# +# When 1: all 'magic' names (``__foo__``) will be excluded. +# +# When 0: nothing will be excluded. +#c.IPCompleter.omit__names = 2 + +#------------------------------------------------------------------------------ +# ScriptMagics(Magics) configuration +#------------------------------------------------------------------------------ + +# Magics for talking to scripts +# +# This defines a base `%%script` cell magic for running a cell with a program in +# a subprocess, and registers a few top-level magics that call %%script with +# common interpreters. + +# Extra script cell magics to define +# +# This generates simple wrappers of `%%script foo` as `%%foo`. +# +# If you want to add script magics that aren't on your path, specify them in +# script_paths +#c.ScriptMagics.script_magics = [] + +# Dict mapping short 'ruby' names to full paths, such as '/opt/secret/bin/ruby' +# +# Only necessary for items in script_magics where the default path will not find +# the right interpreter. +#c.ScriptMagics.script_paths = {} + +#------------------------------------------------------------------------------ +# StoreMagics(Magics) configuration +#------------------------------------------------------------------------------ + +# Lightweight persistence for python variables. +# +# Provides the %store magic. + +# If True, any %store-d variables will be automatically restored when IPython +# starts. +#c.StoreMagics.autorestore = False diff --git a/utilities/profile_nwx/ipython_kernel_config.py b/utilities/profile_nwx/ipython_kernel_config.py new file mode 100644 index 0000000..5f4d8aa --- /dev/null +++ b/utilities/profile_nwx/ipython_kernel_config.py @@ -0,0 +1,466 @@ +# Configuration file for ipython-kernel. + +#------------------------------------------------------------------------------ +# ConnectionFileMixin(LoggingConfigurable) configuration +#------------------------------------------------------------------------------ + +## Mixin for configurable classes that work with connection files + +## JSON file in which to store connection info [default: kernel-.json] +# +# This file will contain the IP, ports, and authentication key needed to connect +# clients to this kernel. By default, this file will be created in the security +# dir of the current profile, but can be specified by absolute path. +#c.ConnectionFileMixin.connection_file = '' + +## set the control (ROUTER) port [default: random] +#c.ConnectionFileMixin.control_port = 0 + +## set the heartbeat port [default: random] +#c.ConnectionFileMixin.hb_port = 0 + +## set the iopub (PUB) port [default: random] +#c.ConnectionFileMixin.iopub_port = 0 + +## Set the kernel's IP address [default localhost]. If the IP address is +# something other than localhost, then Consoles on other machines will be able +# to connect to the Kernel, so be careful! +#c.ConnectionFileMixin.ip = '' + +## set the shell (ROUTER) port [default: random] +#c.ConnectionFileMixin.shell_port = 0 + +## set the stdin (ROUTER) port [default: random] +#c.ConnectionFileMixin.stdin_port = 0 + +## +#c.ConnectionFileMixin.transport = 'tcp' + +#------------------------------------------------------------------------------ +# InteractiveShellApp(Configurable) configuration +#------------------------------------------------------------------------------ + +## A Mixin for applications that start InteractiveShell instances. +# +# Provides configurables for loading extensions and executing files as part of +# configuring a Shell environment. +# +# The following methods should be called by the :meth:`initialize` method of the +# subclass: +# +# - :meth:`init_path` +# - :meth:`init_shell` (to be implemented by the subclass) +# - :meth:`init_gui_pylab` +# - :meth:`init_extensions` +# - :meth:`init_code` + +## Execute the given command string. +#c.InteractiveShellApp.code_to_run = '' + +## Run the file referenced by the PYTHONSTARTUP environment variable at IPython +# startup. +#c.InteractiveShellApp.exec_PYTHONSTARTUP = True + +## List of files to run at IPython startup. +#c.InteractiveShellApp.exec_files = [] + +## lines of code to run at IPython startup. +#c.InteractiveShellApp.exec_lines = [] + +## A list of dotted module names of IPython extensions to load. +#c.InteractiveShellApp.extensions = [] + +## dotted module name of an IPython extension to load. +#c.InteractiveShellApp.extra_extension = '' + +## A file to be run +#c.InteractiveShellApp.file_to_run = '' + +## Enable GUI event loop integration with any of ('glut', 'gtk', 'gtk2', 'gtk3', +# 'osx', 'pyglet', 'qt', 'qt4', 'qt5', 'tk', 'wx', 'gtk2', 'qt4'). +#c.InteractiveShellApp.gui = None + +## Should variables loaded at startup (by startup files, exec_lines, etc.) be +# hidden from tools like %who? +#c.InteractiveShellApp.hide_initial_ns = True + +## Configure matplotlib for interactive use with the default matplotlib backend. +#c.InteractiveShellApp.matplotlib = None + +## Run the module as a script. +#c.InteractiveShellApp.module_to_run = '' + +## Pre-load matplotlib and numpy for interactive use, selecting a particular +# matplotlib backend and loop integration. +#c.InteractiveShellApp.pylab = None + +## If true, IPython will populate the user namespace with numpy, pylab, etc. and +# an ``import *`` is done from numpy and pylab, when using pylab mode. +# +# When False, pylab mode should not import any names into the user namespace. +#c.InteractiveShellApp.pylab_import_all = True + +## Reraise exceptions encountered loading IPython extensions? +#c.InteractiveShellApp.reraise_ipython_extension_failures = False + +#------------------------------------------------------------------------------ +# Application(SingletonConfigurable) configuration +#------------------------------------------------------------------------------ + +## This is an application. + +## The date format used by logging formatters for %(asctime)s +#c.Application.log_datefmt = '%Y-%m-%d %H:%M:%S' + +## The Logging format template +#c.Application.log_format = '[%(name)s]%(highlevel)s %(message)s' + +## Set the log level by value or name. +#c.Application.log_level = 30 + +#------------------------------------------------------------------------------ +# BaseIPythonApplication(Application) configuration +#------------------------------------------------------------------------------ + +## IPython: an enhanced interactive Python shell. + +## Whether to create profile dir if it doesn't exist +#c.BaseIPythonApplication.auto_create = False + +## Whether to install the default config files into the profile dir. If a new +# profile is being created, and IPython contains config files for that profile, +# then they will be staged into the new directory. Otherwise, default config +# files will be automatically generated. +#c.BaseIPythonApplication.copy_config_files = False + +## Path to an extra config file to load. +# +# If specified, load this config file in addition to any other IPython config. +#c.BaseIPythonApplication.extra_config_file = '' + +## The name of the IPython directory. This directory is used for logging +# configuration (through profiles), history storage, etc. The default is usually +# $HOME/.ipython. This option can also be specified through the environment +# variable IPYTHONDIR. +#c.BaseIPythonApplication.ipython_dir = '' + +## Whether to overwrite existing config files when copying +#c.BaseIPythonApplication.overwrite = False + +## The IPython profile to use. +#c.BaseIPythonApplication.profile = 'default' + +## Create a massive crash report when IPython encounters what may be an internal +# error. The default is to append a short message to the usual traceback +#c.BaseIPythonApplication.verbose_crash = False + +#------------------------------------------------------------------------------ +# IPKernelApp(BaseIPythonApplication,InteractiveShellApp,ConnectionFileMixin) configuration +#------------------------------------------------------------------------------ + +## IPython: an enhanced interactive Python shell. + +## The importstring for the DisplayHook factory +#c.IPKernelApp.displayhook_class = 'ipykernel.displayhook.ZMQDisplayHook' + +## ONLY USED ON WINDOWS Interrupt this process when the parent is signaled. +#c.IPKernelApp.interrupt = 0 + +## The Kernel subclass to be used. +# +# This should allow easy re-use of the IPKernelApp entry point to configure and +# launch kernels other than IPython's own. +#c.IPKernelApp.kernel_class = 'ipykernel.ipkernel.IPythonKernel' + +## redirect stderr to the null device +#c.IPKernelApp.no_stderr = False + +## redirect stdout to the null device +#c.IPKernelApp.no_stdout = False + +## The importstring for the OutStream factory +#c.IPKernelApp.outstream_class = 'ipykernel.iostream.OutStream' + +## kill this process if its parent dies. On Windows, the argument specifies the +# HANDLE of the parent process, otherwise it is simply boolean. +#c.IPKernelApp.parent_handle = 0 + +#------------------------------------------------------------------------------ +# Kernel(SingletonConfigurable) configuration +#------------------------------------------------------------------------------ + +## Whether to use appnope for compatiblity with OS X App Nap. +# +# Only affects OS X >= 10.9. +#c.Kernel._darwin_app_nap = True + +## +#c.Kernel._execute_sleep = 0.0005 + +## +#c.Kernel._poll_interval = 0.05 + +#------------------------------------------------------------------------------ +# IPythonKernel(Kernel) configuration +#------------------------------------------------------------------------------ + +## +#c.IPythonKernel.help_links = [{'text': 'Python', 'url': 'http://docs.python.org/3.5'}, {'text': 'IPython', 'url': 'http://ipython.org/documentation.html'}, {'text': 'NumPy', 'url': 'http://docs.scipy.org/doc/numpy/reference/'}, {'text': 'SciPy', 'url': 'http://docs.scipy.org/doc/scipy/reference/'}, {'text': 'Matplotlib', 'url': 'http://matplotlib.org/contents.html'}, {'text': 'SymPy', 'url': 'http://docs.sympy.org/latest/index.html'}, {'text': 'pandas', 'url': 'http://pandas.pydata.org/pandas-docs/stable/'}] + +#------------------------------------------------------------------------------ +# InteractiveShell(SingletonConfigurable) configuration +#------------------------------------------------------------------------------ + +## An enhanced, interactive shell for Python. + +## 'all', 'last', 'last_expr' or 'none', specifying which nodes should be run +# interactively (displaying output from expressions). +#c.InteractiveShell.ast_node_interactivity = 'last_expr' + +## A list of ast.NodeTransformer subclass instances, which will be applied to +# user input before code is run. +#c.InteractiveShell.ast_transformers = [] + +## Make IPython automatically call any callable object even if you didn't type +# explicit parentheses. For example, 'str 43' becomes 'str(43)' automatically. +# The value can be '0' to disable the feature, '1' for 'smart' autocall, where +# it is not applied if there are no more arguments on the line, and '2' for +# 'full' autocall, where all callable objects are automatically called (even if +# no arguments are present). +#c.InteractiveShell.autocall = 0 + +## Autoindent IPython code entered interactively. +#c.InteractiveShell.autoindent = True + +## Enable magic commands to be called without the leading %. +#c.InteractiveShell.automagic = True + +## The part of the banner to be printed before the profile +#c.InteractiveShell.banner1 = 'Python 3.5.2 (default, Nov 17 2016, 17:05:23) \nType "copyright", "credits" or "license" for more information.\n\nIPython 5.3.0 -- An enhanced Interactive Python.\n? -> Introduction and overview of IPython\'s features.\n%quickref -> Quick reference.\nhelp -> Python\'s own help system.\nobject? -> Details about \'object\', use \'object??\' for extra details.\n' + +## The part of the banner to be printed after the profile +#c.InteractiveShell.banner2 = '' + +## Set the size of the output cache. The default is 1000, you can change it +# permanently in your config file. Setting it to 0 completely disables the +# caching system, and the minimum value accepted is 20 (if you provide a value +# less than 20, it is reset to 0 and a warning is issued). This limit is +# defined because otherwise you'll spend more time re-flushing a too small cache +# than working +#c.InteractiveShell.cache_size = 1000 + +## Use colors for displaying information about objects. Because this information +# is passed through a pager (like 'less'), and some pagers get confused with +# color codes, this capability can be turned off. +#c.InteractiveShell.color_info = True + +## Set the color scheme (NoColor, Neutral, Linux, or LightBG). +#c.InteractiveShell.colors = 'Neutral' + +## +#c.InteractiveShell.debug = False + +## **Deprecated** +# +# Will be removed in IPython 6.0 +# +# Enable deep (recursive) reloading by default. IPython can use the deep_reload +# module which reloads changes in modules recursively (it replaces the reload() +# function, so you don't need to change anything to use it). `deep_reload` +# forces a full reload of modules whose code may have changed, which the default +# reload() function does not. When deep_reload is off, IPython will use the +# normal reload(), but deep_reload will still be available as dreload(). +#c.InteractiveShell.deep_reload = False + +## Don't call post-execute functions that have failed in the past. +#c.InteractiveShell.disable_failing_post_execute = False + +## If True, anything that would be passed to the pager will be displayed as +# regular output instead. +#c.InteractiveShell.display_page = False + +## (Provisional API) enables html representation in mime bundles sent to pagers. +#c.InteractiveShell.enable_html_pager = False + +## Total length of command history +#c.InteractiveShell.history_length = 10000 + +## The number of saved history entries to be loaded into the history buffer at +# startup. +#c.InteractiveShell.history_load_length = 1000 + +## +#c.InteractiveShell.ipython_dir = '' + +## Start logging to the given file in append mode. Use `logfile` to specify a log +# file to **overwrite** logs to. +#c.InteractiveShell.logappend = '' + +## The name of the logfile to use. +#c.InteractiveShell.logfile = '' + +## Start logging to the default log file in overwrite mode. Use `logappend` to +# specify a log file to **append** logs to. +#c.InteractiveShell.logstart = False + +## +#c.InteractiveShell.object_info_string_level = 0 + +## Automatically call the pdb debugger after every exception. +#c.InteractiveShell.pdb = False + +## Deprecated since IPython 4.0 and ignored since 5.0, set +# TerminalInteractiveShell.prompts object directly. +#c.InteractiveShell.prompt_in1 = 'In [\\#]: ' + +## Deprecated since IPython 4.0 and ignored since 5.0, set +# TerminalInteractiveShell.prompts object directly. +#c.InteractiveShell.prompt_in2 = ' .\\D.: ' + +## Deprecated since IPython 4.0 and ignored since 5.0, set +# TerminalInteractiveShell.prompts object directly. +#c.InteractiveShell.prompt_out = 'Out[\\#]: ' + +## Deprecated since IPython 4.0 and ignored since 5.0, set +# TerminalInteractiveShell.prompts object directly. +#c.InteractiveShell.prompts_pad_left = True + +## +#c.InteractiveShell.quiet = False + +## +#c.InteractiveShell.separate_in = '\n' + +## +#c.InteractiveShell.separate_out = '' + +## +#c.InteractiveShell.separate_out2 = '' + +## Show rewritten input, e.g. for autocall. +#c.InteractiveShell.show_rewritten_input = True + +## Enables rich html representation of docstrings. (This requires the docrepr +# module). +#c.InteractiveShell.sphinxify_docstring = False + +## +#c.InteractiveShell.wildcards_case_sensitive = True + +## +#c.InteractiveShell.xmode = 'Context' + +#------------------------------------------------------------------------------ +# ZMQInteractiveShell(InteractiveShell) configuration +#------------------------------------------------------------------------------ + +## A subclass of InteractiveShell for ZMQ. + +#------------------------------------------------------------------------------ +# ProfileDir(LoggingConfigurable) configuration +#------------------------------------------------------------------------------ + +## An object to manage the profile directory and its resources. +# +# The profile directory is used by all IPython applications, to manage +# configuration, logging and security. +# +# This object knows how to find, create and manage these directories. This +# should be used by any code that wants to handle profiles. + +## Set the profile location directly. This overrides the logic used by the +# `profile` option. +#c.ProfileDir.location = '' + +#------------------------------------------------------------------------------ +# Session(Configurable) configuration +#------------------------------------------------------------------------------ + +## Object for handling serialization and sending of messages. +# +# The Session object handles building messages and sending them with ZMQ sockets +# or ZMQStream objects. Objects can communicate with each other over the +# network via Session objects, and only need to work with the dict-based IPython +# message spec. The Session will handle serialization/deserialization, security, +# and metadata. +# +# Sessions support configurable serialization via packer/unpacker traits, and +# signing with HMAC digests via the key/keyfile traits. +# +# Parameters ---------- +# +# debug : bool +# whether to trigger extra debugging statements +# packer/unpacker : str : 'json', 'pickle' or import_string +# importstrings for methods to serialize message parts. If just +# 'json' or 'pickle', predefined JSON and pickle packers will be used. +# Otherwise, the entire importstring must be used. +# +# The functions must accept at least valid JSON input, and output *bytes*. +# +# For example, to use msgpack: +# packer = 'msgpack.packb', unpacker='msgpack.unpackb' +# pack/unpack : callables +# You can also set the pack/unpack callables for serialization directly. +# session : bytes +# the ID of this Session object. The default is to generate a new UUID. +# username : unicode +# username added to message headers. The default is to ask the OS. +# key : bytes +# The key used to initialize an HMAC signature. If unset, messages +# will not be signed or checked. +# keyfile : filepath +# The file containing a key. If this is set, `key` will be initialized +# to the contents of the file. + +## Threshold (in bytes) beyond which an object's buffer should be extracted to +# avoid pickling. +#c.Session.buffer_threshold = 1024 + +## Whether to check PID to protect against calls after fork. +# +# This check can be disabled if fork-safety is handled elsewhere. +#c.Session.check_pid = True + +## Threshold (in bytes) beyond which a buffer should be sent without copying. +#c.Session.copy_threshold = 65536 + +## Debug output in the Session +#c.Session.debug = False + +## The maximum number of digests to remember. +# +# The digest history will be culled when it exceeds this value. +#c.Session.digest_history_size = 65536 + +## The maximum number of items for a container to be introspected for custom +# serialization. Containers larger than this are pickled outright. +#c.Session.item_threshold = 64 + +## execution key, for signing messages. +#c.Session.key = b'' + +## path to file containing execution key. +#c.Session.keyfile = '' + +## Metadata dictionary, which serves as the default top-level metadata dict for +# each message. +#c.Session.metadata = {} + +## The name of the packer for serializing messages. Should be one of 'json', +# 'pickle', or an import name for a custom callable serializer. +#c.Session.packer = 'json' + +## The UUID identifying this session. +#c.Session.session = '' + +## The digest scheme used to construct the message signatures. Must have the form +# 'hmac-HASH'. +#c.Session.signature_scheme = 'hmac-sha256' + +## The name of the unpacker for unserializing messages. Only used with custom +# functions for `packer`. +#c.Session.unpacker = 'json' + +## Username for the Session. Default is your system username. +#c.Session.username = 'acph' diff --git a/utilities/profile_nwx/startup/00_prepare.py b/utilities/profile_nwx/startup/00_prepare.py new file mode 100644 index 0000000..04e1367 --- /dev/null +++ b/utilities/profile_nwx/startup/00_prepare.py @@ -0,0 +1,29 @@ +# +# Lines to work with alignESS.py scripts +# + +from sys import argv +from multiprocessing import Pool, Array +from functools import partial +import time +import sqlite3 as s3 +import alignESS +import nw_ec_align as nw +import pyximport +pyximport.install(reload_support=True) +import nw_ec_alignx as nwx + + +decs = alignESS.decs +lecs = alignESS.lecs +hmat = alignESS.hmat +db = s3.connect('nr.db') + +x = db.execute("SELECT ec3 from nrseqs") +seqs_s = [i[0] for i in x] +seqs = [i.split(':') for i in seqs_s] + +db.close() + +#seqs = [i for i in seqs_s if len(i) > 1] +subseqs = seqs[:900] diff --git a/utilities/profile_nwx/startup/README b/utilities/profile_nwx/startup/README new file mode 100644 index 0000000..61d4700 --- /dev/null +++ b/utilities/profile_nwx/startup/README @@ -0,0 +1,11 @@ +This is the IPython startup directory + +.py and .ipy files in this directory will be run *prior* to any code or files specified +via the exec_lines or exec_files configurables whenever you load this profile. + +Files will be run in lexicographical order, so you can control the execution order of files +with a prefix, e.g.:: + + 00-first.py + 50-middle.py + 99-last.ipy diff --git a/utilities/r.pdf b/utilities/r.pdf new file mode 100644 index 0000000..8dc6a6d Binary files /dev/null and b/utilities/r.pdf differ diff --git a/utilities/setup.py b/utilities/setup.py new file mode 100644 index 0000000..1accf6e --- /dev/null +++ b/utilities/setup.py @@ -0,0 +1,25 @@ +from setuptools import setup, Extension +from Cython.Build import cythonize +import numpy + +extensions = [ + Extension( + "nw_ec_alignx", + ["nw_ec_alignx.pyx"], + include_dirs=[numpy.get_include()], + define_macros=[("NPY_NO_DEPRECATED_API", "NPY_1_7_API_VERSION")], + extra_compile_args=['-Wno-unreachable-code', '-Wno-unreachable-code-fallthrough'] + ) +] + +setup( + name="nw_ec_alignx", + ext_modules=cythonize( + extensions, + compiler_directives={ + 'language_level': "3", + 'boundscheck': False, + 'wraparound': False + } + ) +) diff --git a/utilities/tests/cpa_tests.md b/utilities/tests/cpa_tests.md new file mode 100644 index 0000000..fd535b4 --- /dev/null +++ b/utilities/tests/cpa_tests.md @@ -0,0 +1,60 @@ +# Log de pruebas + +## Pruebas + +| Comando | Resultado | +|--------|:-----------:| +| alignESS.py pair 2.7.1:5.3.1:5.3.1:2.7.1:4.1.2:1.2.1 5.3.1:5.3.1:4.2.1 | OK | +| alignESS.py -l pair 2.7.1:5.3.1:5.3.1:2.7.1:4.1.2:1.2.1 5.3.1:5.3.1:4.2.1 | OK | +| alignESS.py dbalign nr\_part.db | OK | +| alignESS.py dbalign -db2 random\_frag.txt nr\_part.db | OK | +| alignESS.py dbalign -db2 multi.txt nr\_part.db | [Error][1] | +| alignESS.py dbalign -db2 random_frag.txt -nproc 4 -align -t 0.7 nr\_part.db | OK | +| alignESS.py multi multi.txt | OK | +| pytest | [OK][2] | + + +[1]: Error relacionado a que __multi.txt__ tiene texto antes de los códigos nùmericos + +``` Bash +------ Opening databases: +nr_part.db ( sqlite ) +multi.txt ( text_noind ) +------ Aligning both databases ------ +Number of processes: 2 +multiprocessing.pool.RemoteTraceback: +""" +Traceback (most recent call last): + File "/home/cperalta/.conda/envs/ess-env/lib/python3.10/multiprocessing/pool.py", line 125, in worker + result = (True, func(*args, **kwds)) + File "/home/cperalta/.conda/envs/ess-env/lib/python3.10/multiprocessing/pool.py", line 48, in mapstar + return list(map(*args)) + File "nw_ec_alignx.pyx", line 476, in nw_ec_alignx.seq_vs_db + File "nw_ec_alignx.pyx", line 367, in nw_ec_alignx.NW + File "nw_ec_alignx.pyx", line 90, in nw_ec_alignx._FastNW +KeyError: '#Cluster14' +""" + +The above exception was the direct cause of the following exception: + +Traceback (most recent call last): + File "/home/cperalta/Documents/repos/alignESS/tests/../alignESS.py", line 480, in + main() + File "/home/cperalta/Documents/repos/alignESS/tests/../alignESS.py", line 469, in main + main_db(args) + File "/home/cperalta/Documents/repos/alignESS/tests/../alignESS.py", line 390, in main_db + scores = nwx.db_vs_db(db1, db2, hmat, decs, thres=args.threshold, + File "nw_ec_alignx.pyx", line 517, in nw_ec_alignx.db_vs_db + resd = pool.map(align_func, seqs1) + File "/home/cperalta/.conda/envs/ess-env/lib/python3.10/multiprocessing/pool.py", line 364, in map + return self._map_async(func, iterable, mapstar, chunksize).get() + File "/home/cperalta/.conda/envs/ess-env/lib/python3.10/multiprocessing/pool.py", line 771, in get + raise self._value +KeyError: '#Cluster14' +``` +[2]: Output esperado + +```Bash +17 passed, 1 xfailed +``` + diff --git a/utilities/tests/multi.txt b/utilities/tests/multi.txt new file mode 100644 index 0000000..0c08aed --- /dev/null +++ b/utilities/tests/multi.txt @@ -0,0 +1,9 @@ +#Cluster14 +006 Glycolysis / Gluconeogenesis 2.7.1:5.3.1:5.3.1:2.7.1:4.1.2:1.2.1 +010 Glycolysis / Gluconeogenesis 5.4.2:5.3.1:5.3.1:2.7.1:4.1.2:1.2.1 +224 Phenylalanine, tyrosine and tryptophan biosynthesis 5.3.1:5.3.1:4.2.1 +019 Glycolysis / Gluconeogenesis 2.7.1:3.2.1:5.3.1:2.7.1:4.1.2:1.2.1 +004 Glycolysis / Gluconeogenesis 2.7.1:5.3.1:2.7.1:4.1.2:1.2.1 +008 Glycolysis / Gluconeogenesis 5.4.2:5.3.1:2.7.1:4.1.2:1.2.1 +225 Phenylalanine, tyrosine and tryptophan biosynthesis 5.3.1:5.3.1:4.2.1:4.2.1 +016 Glycolysis / Gluconeogenesis 3.1.3:2.7.1:5.3.1:5.3.1:2.7.1:4.1.2:1.2.1 diff --git a/utilities/tests/nr_part.db b/utilities/tests/nr_part.db new file mode 100644 index 0000000..51188f5 Binary files /dev/null and b/utilities/tests/nr_part.db differ diff --git a/utilities/tests/part_name.txt b/utilities/tests/part_name.txt new file mode 100644 index 0000000..7893953 --- /dev/null +++ b/utilities/tests/part_name.txt @@ -0,0 +1,100 @@ +seq0 1.1.1 +seq1 1.1.1:1.1.1 +seq2 1.1.1:1.1.1:1.1.1 +seq3 1.1.1:1.1.1:1.1.1:1.14.14 +seq4 1.1.1:1.1.1:1.1.1:1.2.1 +seq5 1.1.1:1.1.1:1.1.1:1.2.1:1.1.1 +seq6 1.1.1:1.1.1:1.1.1:2.3.3:1.1.1 +seq7 1.1.1:1.1.1:1.1.1:2.3.3:1.1.1:2.3.3 +seq8 1.1.1:1.1.1:1.1.1:2.3.3:1.1.1:4.2.1:1.1.1 +seq9 1.1.1:1.1.1:1.1.1:2.7.1:5.1.3 +seq10 1.1.1:1.1.1:1.1.1:2.8.2 +seq11 1.1.1:1.1.1:1.1.1:3.1.2:4.4.1 +seq12 1.1.1:1.1.1:1.1.1:3.1.3 +seq13 1.1.1:1.1.1:1.1.1:4.1.1 +seq14 1.1.1:1.1.1:1.1.1:4.1.2 +seq15 1.1.1:1.1.1:1.1.1:4.1.3 +seq16 1.1.1:1.1.1:1.1.1:4.1.3:4.2.1 +seq17 1.1.1:1.1.1:1.1.1:4.1.3:4.2.1:2.3.3 +seq18 1.1.1:1.1.1:1.1.1:4.2.1:1.1.1:5.3.1 +seq19 1.1.1:1.1.1:1.1.2 +seq20 1.1.1:1.1.1:1.1.2:3.1.2:4.4.1 +seq21 1.1.1:1.1.1:1.1.3 +seq22 1.1.1:1.1.1:1.1.5 +seq23 1.1.1:1.1.1:1.1.5:4.1.1 +seq24 1.1.1:1.1.1:1.1.99 +seq25 1.1.1:1.1.1:1.14.13 +seq26 1.1.1:1.1.1:1.14.14 +seq27 1.1.1:1.1.1:1.14.14:1.1.1 +seq28 1.1.1:1.1.1:1.14.14:1.14.14 +seq29 1.1.1:1.1.1:1.14.14:1.14.15 +seq30 1.1.1:1.1.1:1.14.15 +seq31 1.1.1:1.1.1:1.2.1 +seq32 1.1.1:1.1.1:1.2.1:1.1.1 +seq33 1.1.1:1.1.1:1.2.3:3.6.1 +seq34 1.1.1:1.1.1:1.2.4 +seq35 1.1.1:1.1.1:1.2.4:1.8.1 +seq36 1.1.1:1.1.1:1.2.4:2.3.1 +seq37 1.1.1:1.1.1:1.2.4:2.3.1:2.3.1 +seq38 1.1.1:1.1.1:1.2.4:2.3.1:2.3.1:2.7.2 +seq39 1.1.1:1.1.1:1.2.4:2.3.1:2.3.3 +seq40 1.1.1:1.1.1:1.2.4:2.3.1:2.8.3 +seq41 1.1.1:1.1.1:1.2.4:2.3.1:2.8.3:1.2.1 +seq42 1.1.1:1.1.1:1.2.4:2.3.1:2.8.3:9.9.9 +seq43 1.1.1:1.1.1:1.2.4:2.3.1:6.2.1 +seq44 1.1.1:1.1.1:1.2.4:2.3.1:6.2.1:1.2.1 +seq45 1.1.1:1.1.1:1.2.4:2.3.1:6.2.1:2.7.2 +seq46 1.1.1:1.1.1:1.2.4:2.3.1:6.2.1:3.6.1 +seq47 1.1.1:1.1.1:1.2.4:2.3.1:6.2.1:9.9.9 +seq48 1.1.1:1.1.1:1.2.4:2.3.1:6.4.1 +seq49 1.1.1:1.1.1:1.2.5 +seq50 1.1.1:1.1.1:1.2.5:1.2.1 +seq51 1.1.1:1.1.1:1.2.5:2.8.3:2.3.1 +seq52 1.1.1:1.1.1:1.2.5:2.8.3:2.3.3 +seq53 1.1.1:1.1.1:1.2.5:2.8.3:6.4.1 +seq54 1.1.1:1.1.1:1.2.5:6.2.1 +seq55 1.1.1:1.1.1:1.2.5:6.2.1:3.6.1 +seq56 1.1.1:1.1.1:1.2.7 +seq57 1.1.1:1.1.1:1.2.7:1.2.1 +seq58 1.1.1:1.1.1:1.2.7:2.3.1 +seq59 1.1.1:1.1.1:1.2.7:2.3.1:1.8.1 +seq60 1.1.1:1.1.1:1.2.7:2.3.3 +seq61 1.1.1:1.1.1:1.2.7:2.8.3 +seq62 1.1.1:1.1.1:1.2.7:2.8.3:3.6.1 +seq63 1.1.1:1.1.1:1.2.7:6.2.1 +seq64 1.1.1:1.1.1:1.2.7:6.2.1:1.2.1 +seq65 1.1.1:1.1.1:1.2.7:6.2.1:2.7.2 +seq66 1.1.1:1.1.1:1.2.7:6.2.1:3.6.1 +seq67 1.1.1:1.1.1:1.2.7:6.2.1:9.9.9 +seq68 1.1.1:1.1.1:1.2.7:6.3.4 +seq69 1.1.1:1.1.1:1.2.7:6.4.1 +seq70 1.1.1:1.1.1:1.3.1 +seq71 1.1.1:1.1.1:1.3.8 +seq72 1.1.1:1.1.1:1.3.8:6.2.1 +seq73 1.1.1:1.1.1:2.3.1 +seq74 1.1.1:1.1.1:2.3.1:1.2.1 +seq75 1.1.1:1.1.1:2.3.1:1.2.1:1.2.1 +seq76 1.1.1:1.1.1:2.3.1:1.2.1:4.1.3 +seq77 1.1.1:1.1.1:2.3.1:1.2.1:4.1.3:4.2.1:3.7.1:1.13.11:9.9.9 +seq78 1.1.1:1.1.1:2.3.1:1.2.1:4.1.3:4.2.1:4.1.1:5.3.2:1.2.1 +seq79 1.1.1:1.1.1:2.3.1:2.3.1 +seq80 1.1.1:1.1.1:2.3.1:2.3.1:2.7.2 +seq81 1.1.1:1.1.1:2.3.1:2.3.1:2.7.7:2.7.1 +seq82 1.1.1:1.1.1:2.3.1:2.3.1:2.7.7:2.7.1:3.1.4 +seq83 1.1.1:1.1.1:2.3.1:2.3.1:2.7.7:2.7.1:3.1.4:2.3.1 +seq84 1.1.1:1.1.1:2.3.1:2.3.1:2.7.7:2.7.8 +seq85 1.1.1:1.1.1:2.3.1:2.3.1:2.7.7:2.7.8:3.1.1 +seq86 1.1.1:1.1.1:2.3.1:2.3.1:2.7.7:2.7.8:3.1.3 +seq87 1.1.1:1.1.1:2.3.1:2.3.1:2.7.7:2.7.8:3.1.3:9.9.9 +seq88 1.1.1:1.1.1:2.3.1:2.3.1:2.7.7:2.7.8:3.1.4:2.3.1 +seq89 1.1.1:1.1.1:2.3.1:2.3.1:2.7.7:2.7.8:4.1.1 +seq90 1.1.1:1.1.1:2.3.1:2.3.1:2.7.7:2.7.8:4.1.1:2.1.1 +seq91 1.1.1:1.1.1:2.3.1:2.3.1:2.7.7:2.7.8:4.1.1:3.1.4 +seq92 1.1.1:1.1.1:2.3.1:2.3.1:2.7.7:3.1.4 +seq93 1.1.1:1.1.1:2.3.1:2.3.1:2.7.7:3.1.4:4.1.1 +seq94 1.1.1:1.1.1:2.3.1:2.3.1:2.7.7:3.6.1 +seq95 1.1.1:1.1.1:2.3.1:2.3.1:3.6.1 +seq96 1.1.1:1.1.1:2.3.1:2.3.3 +seq97 1.1.1:1.1.1:2.3.1:6.2.1 +seq98 1.1.1:1.1.1:2.3.1:6.2.1:1.2.1 +seq99 1.1.1:1.1.1:2.3.1:6.2.1:2.7.2 diff --git a/utilities/tests/random_frag.txt b/utilities/tests/random_frag.txt new file mode 100644 index 0000000..80ecf39 --- /dev/null +++ b/utilities/tests/random_frag.txt @@ -0,0 +1,200 @@ +5.3.3:2.3.3:1.5.1:1.1.1 +1.1.1:3.6.1:2.3.1:1.1.98:1.1.1:3.1.3:1.11.1:1.1.1 +5.4.2:1.1.1:5.4.2:4.1.3 +1.2.1:2.3.1:1.2.1:1.13.11:1.1.1:5.3.1:2.7.1 +4.1.3:1.2.1:3.1.2:3.1.3 +1.1.1:1.1.3:3.1.2:9.9.9 +1.1.1:5.4.2:4.1.1:1.1.1:3.5.4:2.3.1 +1.1.1:2.3.1:1.1.1:2.3.1:2.3.1:1.14.13 +6.4.1:3.1.3:2.6.1:2.3.1:4.2.1 +2.3.3:4.2.3:3.6.1:4.3.1 +4.4.1:1.1.1:5.4.1:2.7.9:1.13.11:3.1.3:2.3.1 +2.1.1:5.1.1:2.1.1:3.1.2:2.1.4:4.1.2:4.3.1:5.3.3:3.1.3 +2.3.1:1.1.1:4.4.1:6.3.2:2.5.1 +1.1.1:2.7.7:4.2.3:2.3.3:1.13.99 +5.3.1:2.3.3:1.1.1:1.1.1:2.3.1:4.1.1:1.1.1 +1.1.1:3.6.1:1.1.98:1.1.1:1.1.1:5.5.1:2.3.1:1.14.14:6.2.1 +1.4.4:1.1.1:1.14.13:2.3.1 +2.6.1:2.6.1:3.6.1:1.1.1:4.1.1:2.8.3:2.5.1 +4.1.1:2.7.1:2.3.1:1.14.12:3.2.2:4.1.2 +2.6.1:2.7.1:2.7.1:1.1.1:4.2.3:5.4.2:4.1.2:1.13.11:1.1.1 +2.8.3:1.1.1:3.1.3:4.2.1:2.6.1:1.1.1 +2.7.1:1.13.11:1.2.1:1.1.1:4.3.3:1.2.7 +1.2.1:2.7.1:4.3.1 +2.7.2:5.4.2:1.2.1:2.7.2:3.1.3:1.1.1:2.3.3 +4.2.1:2.6.1:1.5.8 +1.1.1:2.7.9:3.5.4:4.2.1:4.1.1:5.3.1 +3.1.3:2.3.1:2.7.4:1.1.1:9.9.9:1.3.1:1.1.1:1.1.1:3.7.1:2.3.1 +4.1.1:2.1.1:2.3.1:1.3.1 +2.7.7:2.3.1:2.3.3:4.1.1:2.7.1 +2.4.1:2.2.1:5.3.1:2.1.4:1.1.1 +1.5.8:1.2.5:1.13.11:1.14.11:1.8.1 +2.2.1:2.7.7:5.1.3:1.1.1 +1.17.1:2.1.1:1.2.4:1.2.1:1.3.1:3.1.2:2.1.1 +1.2.7:2.6.1:1.1.1:1.1.1:2.4.2:1.2.7 +2.3.1:5.3.1:1.1.1:6.2.1 +1.14.14:2.7.1:4.2.3:1.8.7:6.2.1:9.9.9:6.2.1 +2.7.1:9.9.9:5.5.1:3.1.3:2.3.1:1.8.7 +1.14.13:2.3.1:4.2.1:1.1.1:2.6.1:4.1.2:3.1.1:1.1.1:3.1.1:2.7.7:3.1.3:5.4.2 +4.2.3:1.14.19:3.1.1:1.1.1 +2.3.1:2.3.1:1.17.1:1.14.14:4.2.1:1.14.14 +1.2.4:1.1.1:4.2.3:1.14.14:9.9.9 +1.1.1:1.2.1:1.1.1:4.2.1:2.7.9:1.14.13:6.3.2 +2.3.1:3.1.1:4.1.3:2.3.3:1.13.11:2.6.1 +1.1.1:2.3.1:3.7.1:1.1.99:6.3.5:6.4.1 +5.3.1:1.1.99:1.1.1:1.14.99:2.7.7 +4.1.2:1.1.5:3.1.2:1.1.98:4.4.1:1.1.1:1.13.11:1.5.1:1.17.3 +2.7.1:9.9.9:5.4.99:2.5.1:1.13.99:1.1.1:1.1.1:5.5.1 +4.1.3:2.7.7:2.7.1 +2.8.3:6.3.5:1.2.4:2.6.1:1.14.13:3.6.1:6.3.4:5.4.99:2.3.1 +1.1.1:2.7.7:1.2.7:2.7.9 +2.6.1:1.1.1:3.6.1:6.2.1:1.3.1 +2.7.1:2.4.2:1.14.13:2.7.2:5.3.1:4.3.1:5.4.99 +1.2.1:1.1.5:2.3.3:5.4.2:3.7.1 +2.6.1:2.3.1:5.4.2:5.3.1:2.7.7:5.3.1 +1.2.1:1.1.1:4.1.3:1.2.7 +1.1.1:4.2.1:2.3.1:1.1.1 +3.1.1:1.2.1:2.8.3:1.1.1:2.6.1 +2.7.1:2.3.1:5.4.2:1.2.1 +1.8.1:6.2.1:2.7.2:1.14.14:4.1.1:2.3.3:1.2.1:1.14.14 +2.4.2:4.1.1:1.14.15:1.1.2:1.2.1:4.4.1:2.7.1 +9.9.9:1.14.14:4.1.1:3.5.1:5.3.3 +6.2.1:4.2.3:1.14.15:1.1.1:4.2.3:1.2.5:2.3.1 +4.4.1:4.2.3:4.1.1:1.1.1 +2.3.3:1.1.1:3.1.3:1.1.98:5.4.2:2.6.1 +5.4.2:2.7.1:5.4.2:3.6.1 +1.1.1:1.13.11:1.5.8:1.1.1:1.13.11:1.14.11 +3.1.3:1.1.1:4.1.1:1.17.1:3.8.1 +1.1.1:5.5.1:1.1.1:5.3.3:2.8.3 +4.1.3:2.1.2:4.2.1:4.1.1 +5.3.3:1.4.3:1.2.4:6.3.5:1.3.8:1.2.1:3.1.3:1.14.15:4.1.2:2.1.2 +2.7.8:2.1.1:1.13.11:1.3.5:5.3.1:2.3.1 +1.3.3:3.1.3:1.1.1:1.14.14:4.2.1:4.2.1 +4.4.1:1.1.1:5.4.2:1.18.1 +3.6.1:2.1.1:1.1.1:4.1.2 +1.2.5:4.2.3:2.1.1:2.3.1:3.1.3:5.4.99:2.7.1:3.1.3 +1.2.1:5.4.2:3.1.6:2.1.4:5.1.3 +1.5.8:1.14.16:2.7.1:2.1.1 +1.14.14:1.13.12:2.1.1:1.1.1:1.1.1:4.4.1:1.2.7 +1.1.1:5.3.1:1.2.7:5.4.2:1.1.1:1.2.4:2.3.3:2.5.1:1.3.1:1.1.1:2.2.1 +1.2.4:3.7.1:1.1.1:2.1.2:2.1.4:3.1.3:1.5.1 +2.7.2:3.1.3:1.1.1:3.6.1:1.2.1:4.99.1:3.1.3:2.4.2:3.1.1 +3.3.2:4.1.3:6.4.1:9.9.9:1.1.1:4.2.1:2.1.1:1.1.1 +5.3.3:2.7.4:1.1.1:1.3.1 +1.14.19:1.1.1:4.2.3:2.3.1:2.8.3:1.14.13 +6.3.4:2.3.1:2.8.3:6.2.1:1.1.5:3.3.2 +1.2.5:1.1.1:3.1.2:5.4.2:6.4.1:9.9.9 +2.6.1:1.13.11:3.1.2:4.1.3 +2.6.1:6.2.1:1.1.1:2.7.7:1.14.99:5.3.3 +1.14.14:1.1.1:4.3.1:1.8.1:4.1.1:2.6.1:4.4.1 +1.5.8:1.14.12:1.2.1:1.3.1:1.1.1:1.1.1:1.17.4 +1.13.11:2.7.1:5.3.1:2.7.1 +2.3.1:1.1.1:2.3.3:1.1.1:1.1.5:2.7.7 +1.14.19:1.2.7:4.3.2:4.2.1:4.1.2:1.1.1:1.1.1 +2.4.2:2.7.1:5.1.3:2.3.1:4.6.1 +1.13.11:1.1.1:4.1.1:2.1.1:2.7.8:4.4.1:2.7.1:1.2.1:4.2.1:1.13.11:1.1.5 +4.4.1:4.2.1:6.4.1:4.2.1:1.2.1:1.13.11:3.2.1:1.11.1:2.5.1 +1.5.8:2.7.1:2.7.4:4.4.1:1.13.11:2.7.4:1.13.11 +1.2.5:1.14.16:5.1.3:1.1.1:2.7.9 +1.1.1:9.9.9:1.14.19:4.3.2:2.7.1:4.2.1:4.2.1 +2.7.8:3.3.2:3.5.4:1.1.1 +4.1.1:6.4.1:4.1.3:4.1.2:2.7.1:1.14.14:2.8.3:1.5.3:3.4.19 +1.13.11:2.7.8 +1.17.99:1.14.13:1.14.13:2.8.3 +1.1.1:5.3.1:1.5.1:2.3.1:4.2.3:4.2.3:5.5.1:1.14.21:2.6.1:1.1.1 +1.11.1:1.13.11:1.14.18:2.7.2:4.1.1:4.1.1:3.5.4 +1.1.3:5.3.1:2.1.4:1.8.4:1.1.1:1.1.1 +5.4.2:2.1.2:1.1.1:5.3.1:2.6.1:2.7.1 +2.5.1:1.1.1:1.1.1:4.1.1:4.3.1 +2.6.1:1.3.2:5.3.1:1.3.1:4.1.1:1.4.3:5.5.1 +1.1.1:1.13.11:2.6.1:2.3.1:4.1.3:4.2.1:4.2.1:5.4.99 +2.4.2:2.7.1:1.13.11:1.1.1:4.1.3 +2.7.1:1.13.12:2.6.1:2.7.7:2.7.1:1.3.1:4.2.1:2.6.1:1.1.1 +2.7.7:2.4.2 +4.2.1:1.13.11:4.2.1:1.1.1:4.1.3:2.7.1:1.1.1 +2.7.2:4.1.2:5.5.1:1.1.98 +4.4.1:1.14.14:4.2.1:3.1.2:6.2.1 +6.4.1:9.9.9:1.1.1:1.14.13:1.4.3 +3.6.1:1.5.1:1.8.1:4.1.2:1.1.5:1.1.1:1.1.1 +4.2.1:4.2.2:1.14.11:2.4.2 +6.2.1:2.3.1:4.2.1 +2.7.1:5.3.1:2.7.1:1.14.18 +1.1.2:1.1.1:3.3.2 +1.3.1:1.1.1:2.3.1:1.14.14:2.8.3:1.2.7:6.3.5 +1.1.3:2.2.1:1.1.1:1.1.1:1.1.1:1.1.2 +3.1.2:1.3.8:4.2.1:5.1.3:1.14.14 +2.7.1:1.1.1:6.3.4:1.1.1:2.7.7:2.1.2 +3.1.3:1.8.4:3.1.1:4.1.1:1.1.1 +2.4.2:2.1.2:1.3.1:1.1.1:1.4.3 +1.13.11:2.3.1:1.1.5:5.3.1:3.5.3:2.6.1 +1.14.14:2.3.1:1.1.1:3.1.3:4.2.1:2.7.1:1.1.99:4.1.2:4.2.1:6.2.1 +1.2.7:6.2.1:1.1.1:1.2.1 +3.1.2:2.3.1:1.1.1:5.4.99 +4.2.1:1.13.11:9.9.9:3.1.4 +1.3.1:1.14.99:2.3.1:1.5.1:2.7.7:1.2.7 +1.2.1:9.9.9:5.4.2:2.3.1 +3.1.3:3.6.1:4.1.2:2.7.8:2.2.1:6.2.1:1.1.1 +4.2.1:1.17.1:4.4.1:2.7.1:6.2.1:4.4.1:1.13.99 +2.5.1:6.3.5:2.4.1:4.2.1:5.4.2:2.7.1 +4.2.1:1.1.1:3.1.3:1.14.16:1.1.1:1.1.1 +4.2.1:2.6.1:3.1.3:1.2.1:1.3.1:1.1.1:1.1.1:4.2.3:3.1.3 +1.14.14:2.8.3:6.2.1:5.3.3:3.1.3 +9.9.9:1.4.3:4.2.3:1.1.1:2.6.1:2.7.1 +1.14.19:2.1.2:1.2.1:5.3.1:1.11.1:9.9.9:1.1.1:4.1.1 +1.1.1:1.8.1:4.2.1:6.3.3:5.5.1:1.5.8:6.3.4 +5.3.3:9.9.9:4.3.2 +1.1.1:2.2.1:1.1.1:1.1.1:1.8.1:4.2.1 +1.2.4:2.3.1:5.3.3:1.1.1:1.1.1 +5.3.1:2.7.8:3.1.3:1.17.4:1.1.3:1.1.1:1.4.4:5.3.3 +2.6.1:2.5.1:1.5.8:3.1.3:1.4.4 +2.7.1:1.1.1:4.1.2:1.8.1:1.14.14:2.3.1 +1.2.1:1.14.12:6.4.1:3.1.3:4.3.1:2.6.1 +1.1.1:2.3.1:1.1.1:1.14.12:1.1.1:2.2.1:1.1.1:4.1.1:5.3.1 +3.1.1:1.1.1:3.5.2:4.2.1:1.1.1:1.1.1:2.7.1:2.6.1 +2.7.7:4.3.1 +2.7.4:2.7.7:1.14.13:1.2.1 +1.1.5:1.1.1:1.13.99:2.7.9:1.1.1:5.4.99:2.6.1:2.8.1:1.1.1 +5.4.2:9.9.9:1.1.1:1.2.7:4.4.1 +4.2.3:6.4.1:1.1.1:1.2.1 +1.1.1:1.2.1:3.5.1 +2.1.2:1.8.7:1.1.5:1.1.1:1.2.1 +5.3.1:1.1.1:1.2.1 +2.7.4:1.13.11:1.1.2:9.9.9:2.7.7:1.14.14 +2.7.1:3.1.4:1.14.14:6.2.1:2.7.1 +2.5.1:2.1.2:1.2.7:5.1.2 +4.1.1:2.1.2 +1.2.1:5.4.99:2.3.3 +3.1.4:1.1.2:9.9.9:5.3.1:1.8.1:4.2.1 +2.7.1:1.13.11:1.14.15:5.3.1 +5.4.2:5.1.3:2.7.8:1.1.2:1.1.1:1.1.1 +5.3.1:1.1.1:2.8.3:5.5.1:2.3.1:2.7.1:6.2.1 +1.1.1:1.13.11:6.4.1:6.2.1:4.1.2:3.1.1:1.1.1:5.3.1 +6.2.1:1.1.1:2.8.3:2.7.7:2.1.2:1.1.1 +1.1.1:1.1.1:1.5.1:1.1.1 +4.2.3:2.6.1:1.1.1:3.1.3:3.5.1:3.5.1:1.1.1:6.4.1:5.3.3 +1.1.1:2.4.2:1.14.14:4.2.1:1.13.11 +2.7.1:5.5.1:4.3.1:5.4.2 +3.1.1:4.1.2:5.2.1:2.7.1:1.14.16:1.13.11:1.2.1 +2.3.1:1.1.1 +1.2.1:1.2.1:2.4.1:5.3.1 +1.1.1:1.1.99 +5.4.99:3.5.4:1.2.7 +2.4.2:1.1.1:1.13.11:1.4.5:1.13.11:1.1.1:2.1.1:1.1.1:1.17.4:3.5.99:4.3.1 +4.1.2:1.1.1:1.17.7:1.1.5:1.1.5:2.7.1:3.1.1:2.5.1 +1.14.19:1.14.11:1.17.99:4.2.1:4.2.1 +1.17.4:5.4.99:2.3.1 +1.3.1:4.2.1:1.1.1:2.7.1:4.2.1:1.14.11:1.1.1 +6.3.5:1.1.5:2.3.1 +2.6.1:1.1.1:2.6.1:2.2.1:2.6.1:2.3.1:1.3.8 +1.1.1:4.99.1:1.1.1:2.7.9:1.2.7:2.3.1:2.3.1:1.1.1:1.1.99:1.1.1:1.14.14 +1.1.1:6.2.1:2.7.1:2.8.2:3.1.3 +2.3.3:3.1.1:1.2.1:1.1.1:1.1.1 +1.14.14:5.4.2:4.2.3:1.2.7:4.2.1:1.2.1:1.1.1 +1.17.3:3.1.3:2.7.7:2.1.2:1.1.1:4.4.1 +2.7.1:5.3.1:1.1.2:1.14.14:3.6.1:2.7.1:2.3.3 +1.13.11:1.5.8:2.7.7:1.5.8:2.5.1:5.3.3 +4.1.3:5.3.3:1.1.5:5.5.1:2.6.1:6.2.1 +5.3.1:2.2.1:1.3.3:3.1.1:1.2.1:9.9.9:4.1.1 +1.1.1:3.1.3:2.3.1:4.1.1:1.1.1:3.7.1 +1.18.1:4.1.3:1.1.1:2.7.7:3.1.3:3.1.3 +4.2.3:2.7.1:1.2.4 diff --git a/utilities/tests/random_frag_ind.txt b/utilities/tests/random_frag_ind.txt new file mode 100644 index 0000000..34eafe3 --- /dev/null +++ b/utilities/tests/random_frag_ind.txt @@ -0,0 +1,200 @@ + 1 5.3.3:2.3.3:1.5.1:1.1.1 + 2 1.1.1:3.6.1:2.3.1:1.1.98:1.1.1:3.1.3:1.11.1:1.1.1 + 3 5.4.2:1.1.1:5.4.2:4.1.3 + 4 1.2.1:2.3.1:1.2.1:1.13.11:1.1.1:5.3.1:2.7.1 + 5 4.1.3:1.2.1:3.1.2:3.1.3 + 6 1.1.1:1.1.3:3.1.2:9.9.9 + 7 1.1.1:5.4.2:4.1.1:1.1.1:3.5.4:2.3.1 + 8 1.1.1:2.3.1:1.1.1:2.3.1:2.3.1:1.14.13 + 9 6.4.1:3.1.3:2.6.1:2.3.1:4.2.1 + 10 2.3.3:4.2.3:3.6.1:4.3.1 + 11 4.4.1:1.1.1:5.4.1:2.7.9:1.13.11:3.1.3:2.3.1 + 12 2.1.1:5.1.1:2.1.1:3.1.2:2.1.4:4.1.2:4.3.1:5.3.3:3.1.3 + 13 2.3.1:1.1.1:4.4.1:6.3.2:2.5.1 + 14 1.1.1:2.7.7:4.2.3:2.3.3:1.13.99 + 15 5.3.1:2.3.3:1.1.1:1.1.1:2.3.1:4.1.1:1.1.1 + 16 1.1.1:3.6.1:1.1.98:1.1.1:1.1.1:5.5.1:2.3.1:1.14.14:6.2.1 + 17 1.4.4:1.1.1:1.14.13:2.3.1 + 18 2.6.1:2.6.1:3.6.1:1.1.1:4.1.1:2.8.3:2.5.1 + 19 4.1.1:2.7.1:2.3.1:1.14.12:3.2.2:4.1.2 + 20 2.6.1:2.7.1:2.7.1:1.1.1:4.2.3:5.4.2:4.1.2:1.13.11:1.1.1 + 21 2.8.3:1.1.1:3.1.3:4.2.1:2.6.1:1.1.1 + 22 2.7.1:1.13.11:1.2.1:1.1.1:4.3.3:1.2.7 + 23 1.2.1:2.7.1:4.3.1 + 24 2.7.2:5.4.2:1.2.1:2.7.2:3.1.3:1.1.1:2.3.3 + 25 4.2.1:2.6.1:1.5.8 + 26 1.1.1:2.7.9:3.5.4:4.2.1:4.1.1:5.3.1 + 27 3.1.3:2.3.1:2.7.4:1.1.1:9.9.9:1.3.1:1.1.1:1.1.1:3.7.1:2.3.1 + 28 4.1.1:2.1.1:2.3.1:1.3.1 + 29 2.7.7:2.3.1:2.3.3:4.1.1:2.7.1 + 30 2.4.1:2.2.1:5.3.1:2.1.4:1.1.1 + 31 1.5.8:1.2.5:1.13.11:1.14.11:1.8.1 + 32 2.2.1:2.7.7:5.1.3:1.1.1 + 33 1.17.1:2.1.1:1.2.4:1.2.1:1.3.1:3.1.2:2.1.1 + 34 1.2.7:2.6.1:1.1.1:1.1.1:2.4.2:1.2.7 + 35 2.3.1:5.3.1:1.1.1:6.2.1 + 36 1.14.14:2.7.1:4.2.3:1.8.7:6.2.1:9.9.9:6.2.1 + 37 2.7.1:9.9.9:5.5.1:3.1.3:2.3.1:1.8.7 + 38 1.14.13:2.3.1:4.2.1:1.1.1:2.6.1:4.1.2:3.1.1:1.1.1:3.1.1:2.7.7:3.1.3:5.4.2 + 39 4.2.3:1.14.19:3.1.1:1.1.1 + 40 2.3.1:2.3.1:1.17.1:1.14.14:4.2.1:1.14.14 + 41 1.2.4:1.1.1:4.2.3:1.14.14:9.9.9 + 42 1.1.1:1.2.1:1.1.1:4.2.1:2.7.9:1.14.13:6.3.2 + 43 2.3.1:3.1.1:4.1.3:2.3.3:1.13.11:2.6.1 + 44 1.1.1:2.3.1:3.7.1:1.1.99:6.3.5:6.4.1 + 45 5.3.1:1.1.99:1.1.1:1.14.99:2.7.7 + 46 4.1.2:1.1.5:3.1.2:1.1.98:4.4.1:1.1.1:1.13.11:1.5.1:1.17.3 + 47 2.7.1:9.9.9:5.4.99:2.5.1:1.13.99:1.1.1:1.1.1:5.5.1 + 48 4.1.3:2.7.7:2.7.1 + 49 2.8.3:6.3.5:1.2.4:2.6.1:1.14.13:3.6.1:6.3.4:5.4.99:2.3.1 + 50 1.1.1:2.7.7:1.2.7:2.7.9 + 51 2.6.1:1.1.1:3.6.1:6.2.1:1.3.1 + 52 2.7.1:2.4.2:1.14.13:2.7.2:5.3.1:4.3.1:5.4.99 + 53 1.2.1:1.1.5:2.3.3:5.4.2:3.7.1 + 54 2.6.1:2.3.1:5.4.2:5.3.1:2.7.7:5.3.1 + 55 1.2.1:1.1.1:4.1.3:1.2.7 + 56 1.1.1:4.2.1:2.3.1:1.1.1 + 57 3.1.1:1.2.1:2.8.3:1.1.1:2.6.1 + 58 2.7.1:2.3.1:5.4.2:1.2.1 + 59 1.8.1:6.2.1:2.7.2:1.14.14:4.1.1:2.3.3:1.2.1:1.14.14 + 60 2.4.2:4.1.1:1.14.15:1.1.2:1.2.1:4.4.1:2.7.1 + 61 9.9.9:1.14.14:4.1.1:3.5.1:5.3.3 + 62 6.2.1:4.2.3:1.14.15:1.1.1:4.2.3:1.2.5:2.3.1 + 63 4.4.1:4.2.3:4.1.1:1.1.1 + 64 2.3.3:1.1.1:3.1.3:1.1.98:5.4.2:2.6.1 + 65 5.4.2:2.7.1:5.4.2:3.6.1 + 66 1.1.1:1.13.11:1.5.8:1.1.1:1.13.11:1.14.11 + 67 3.1.3:1.1.1:4.1.1:1.17.1:3.8.1 + 68 1.1.1:5.5.1:1.1.1:5.3.3:2.8.3 + 69 4.1.3:2.1.2:4.2.1:4.1.1 + 70 5.3.3:1.4.3:1.2.4:6.3.5:1.3.8:1.2.1:3.1.3:1.14.15:4.1.2:2.1.2 + 71 2.7.8:2.1.1:1.13.11:1.3.5:5.3.1:2.3.1 + 72 1.3.3:3.1.3:1.1.1:1.14.14:4.2.1:4.2.1 + 73 4.4.1:1.1.1:5.4.2:1.18.1 + 74 3.6.1:2.1.1:1.1.1:4.1.2 + 75 1.2.5:4.2.3:2.1.1:2.3.1:3.1.3:5.4.99:2.7.1:3.1.3 + 76 1.2.1:5.4.2:3.1.6:2.1.4:5.1.3 + 77 1.5.8:1.14.16:2.7.1:2.1.1 + 78 1.14.14:1.13.12:2.1.1:1.1.1:1.1.1:4.4.1:1.2.7 + 79 1.1.1:5.3.1:1.2.7:5.4.2:1.1.1:1.2.4:2.3.3:2.5.1:1.3.1:1.1.1:2.2.1 + 80 1.2.4:3.7.1:1.1.1:2.1.2:2.1.4:3.1.3:1.5.1 + 81 2.7.2:3.1.3:1.1.1:3.6.1:1.2.1:4.99.1:3.1.3:2.4.2:3.1.1 + 82 3.3.2:4.1.3:6.4.1:9.9.9:1.1.1:4.2.1:2.1.1:1.1.1 + 83 5.3.3:2.7.4:1.1.1:1.3.1 + 84 1.14.19:1.1.1:4.2.3:2.3.1:2.8.3:1.14.13 + 85 6.3.4:2.3.1:2.8.3:6.2.1:1.1.5:3.3.2 + 86 1.2.5:1.1.1:3.1.2:5.4.2:6.4.1:9.9.9 + 87 2.6.1:1.13.11:3.1.2:4.1.3 + 88 2.6.1:6.2.1:1.1.1:2.7.7:1.14.99:5.3.3 + 89 1.14.14:1.1.1:4.3.1:1.8.1:4.1.1:2.6.1:4.4.1 + 90 1.5.8:1.14.12:1.2.1:1.3.1:1.1.1:1.1.1:1.17.4 + 91 1.13.11:2.7.1:5.3.1:2.7.1 + 92 2.3.1:1.1.1:2.3.3:1.1.1:1.1.5:2.7.7 + 93 1.14.19:1.2.7:4.3.2:4.2.1:4.1.2:1.1.1:1.1.1 + 94 2.4.2:2.7.1:5.1.3:2.3.1:4.6.1 + 95 1.13.11:1.1.1:4.1.1:2.1.1:2.7.8:4.4.1:2.7.1:1.2.1:4.2.1:1.13.11:1.1.5 + 96 4.4.1:4.2.1:6.4.1:4.2.1:1.2.1:1.13.11:3.2.1:1.11.1:2.5.1 + 97 1.5.8:2.7.1:2.7.4:4.4.1:1.13.11:2.7.4:1.13.11 + 98 1.2.5:1.14.16:5.1.3:1.1.1:2.7.9 + 99 1.1.1:9.9.9:1.14.19:4.3.2:2.7.1:4.2.1:4.2.1 + 100 2.7.8:3.3.2:3.5.4:1.1.1 + 101 4.1.1:6.4.1:4.1.3:4.1.2:2.7.1:1.14.14:2.8.3:1.5.3:3.4.19 + 102 1.13.11:2.7.8 + 103 1.17.99:1.14.13:1.14.13:2.8.3 + 104 1.1.1:5.3.1:1.5.1:2.3.1:4.2.3:4.2.3:5.5.1:1.14.21:2.6.1:1.1.1 + 105 1.11.1:1.13.11:1.14.18:2.7.2:4.1.1:4.1.1:3.5.4 + 106 1.1.3:5.3.1:2.1.4:1.8.4:1.1.1:1.1.1 + 107 5.4.2:2.1.2:1.1.1:5.3.1:2.6.1:2.7.1 + 108 2.5.1:1.1.1:1.1.1:4.1.1:4.3.1 + 109 2.6.1:1.3.2:5.3.1:1.3.1:4.1.1:1.4.3:5.5.1 + 110 1.1.1:1.13.11:2.6.1:2.3.1:4.1.3:4.2.1:4.2.1:5.4.99 + 111 2.4.2:2.7.1:1.13.11:1.1.1:4.1.3 + 112 2.7.1:1.13.12:2.6.1:2.7.7:2.7.1:1.3.1:4.2.1:2.6.1:1.1.1 + 113 2.7.7:2.4.2 + 114 4.2.1:1.13.11:4.2.1:1.1.1:4.1.3:2.7.1:1.1.1 + 115 2.7.2:4.1.2:5.5.1:1.1.98 + 116 4.4.1:1.14.14:4.2.1:3.1.2:6.2.1 + 117 6.4.1:9.9.9:1.1.1:1.14.13:1.4.3 + 118 3.6.1:1.5.1:1.8.1:4.1.2:1.1.5:1.1.1:1.1.1 + 119 4.2.1:4.2.2:1.14.11:2.4.2 + 120 6.2.1:2.3.1:4.2.1 + 121 2.7.1:5.3.1:2.7.1:1.14.18 + 122 1.1.2:1.1.1:3.3.2 + 123 1.3.1:1.1.1:2.3.1:1.14.14:2.8.3:1.2.7:6.3.5 + 124 1.1.3:2.2.1:1.1.1:1.1.1:1.1.1:1.1.2 + 125 3.1.2:1.3.8:4.2.1:5.1.3:1.14.14 + 126 2.7.1:1.1.1:6.3.4:1.1.1:2.7.7:2.1.2 + 127 3.1.3:1.8.4:3.1.1:4.1.1:1.1.1 + 128 2.4.2:2.1.2:1.3.1:1.1.1:1.4.3 + 129 1.13.11:2.3.1:1.1.5:5.3.1:3.5.3:2.6.1 + 130 1.14.14:2.3.1:1.1.1:3.1.3:4.2.1:2.7.1:1.1.99:4.1.2:4.2.1:6.2.1 + 131 1.2.7:6.2.1:1.1.1:1.2.1 + 132 3.1.2:2.3.1:1.1.1:5.4.99 + 133 4.2.1:1.13.11:9.9.9:3.1.4 + 134 1.3.1:1.14.99:2.3.1:1.5.1:2.7.7:1.2.7 + 135 1.2.1:9.9.9:5.4.2:2.3.1 + 136 3.1.3:3.6.1:4.1.2:2.7.8:2.2.1:6.2.1:1.1.1 + 137 4.2.1:1.17.1:4.4.1:2.7.1:6.2.1:4.4.1:1.13.99 + 138 2.5.1:6.3.5:2.4.1:4.2.1:5.4.2:2.7.1 + 139 4.2.1:1.1.1:3.1.3:1.14.16:1.1.1:1.1.1 + 140 4.2.1:2.6.1:3.1.3:1.2.1:1.3.1:1.1.1:1.1.1:4.2.3:3.1.3 + 141 1.14.14:2.8.3:6.2.1:5.3.3:3.1.3 + 142 9.9.9:1.4.3:4.2.3:1.1.1:2.6.1:2.7.1 + 143 1.14.19:2.1.2:1.2.1:5.3.1:1.11.1:9.9.9:1.1.1:4.1.1 + 144 1.1.1:1.8.1:4.2.1:6.3.3:5.5.1:1.5.8:6.3.4 + 145 5.3.3:9.9.9:4.3.2 + 146 1.1.1:2.2.1:1.1.1:1.1.1:1.8.1:4.2.1 + 147 1.2.4:2.3.1:5.3.3:1.1.1:1.1.1 + 148 5.3.1:2.7.8:3.1.3:1.17.4:1.1.3:1.1.1:1.4.4:5.3.3 + 149 2.6.1:2.5.1:1.5.8:3.1.3:1.4.4 + 150 2.7.1:1.1.1:4.1.2:1.8.1:1.14.14:2.3.1 + 151 1.2.1:1.14.12:6.4.1:3.1.3:4.3.1:2.6.1 + 152 1.1.1:2.3.1:1.1.1:1.14.12:1.1.1:2.2.1:1.1.1:4.1.1:5.3.1 + 153 3.1.1:1.1.1:3.5.2:4.2.1:1.1.1:1.1.1:2.7.1:2.6.1 + 154 2.7.7:4.3.1 + 155 2.7.4:2.7.7:1.14.13:1.2.1 + 156 1.1.5:1.1.1:1.13.99:2.7.9:1.1.1:5.4.99:2.6.1:2.8.1:1.1.1 + 157 5.4.2:9.9.9:1.1.1:1.2.7:4.4.1 + 158 4.2.3:6.4.1:1.1.1:1.2.1 + 159 1.1.1:1.2.1:3.5.1 + 160 2.1.2:1.8.7:1.1.5:1.1.1:1.2.1 + 161 5.3.1:1.1.1:1.2.1 + 162 2.7.4:1.13.11:1.1.2:9.9.9:2.7.7:1.14.14 + 163 2.7.1:3.1.4:1.14.14:6.2.1:2.7.1 + 164 2.5.1:2.1.2:1.2.7:5.1.2 + 165 4.1.1:2.1.2 + 166 1.2.1:5.4.99:2.3.3 + 167 3.1.4:1.1.2:9.9.9:5.3.1:1.8.1:4.2.1 + 168 2.7.1:1.13.11:1.14.15:5.3.1 + 169 5.4.2:5.1.3:2.7.8:1.1.2:1.1.1:1.1.1 + 170 5.3.1:1.1.1:2.8.3:5.5.1:2.3.1:2.7.1:6.2.1 + 171 1.1.1:1.13.11:6.4.1:6.2.1:4.1.2:3.1.1:1.1.1:5.3.1 + 172 6.2.1:1.1.1:2.8.3:2.7.7:2.1.2:1.1.1 + 173 1.1.1:1.1.1:1.5.1:1.1.1 + 174 4.2.3:2.6.1:1.1.1:3.1.3:3.5.1:3.5.1:1.1.1:6.4.1:5.3.3 + 175 1.1.1:2.4.2:1.14.14:4.2.1:1.13.11 + 176 2.7.1:5.5.1:4.3.1:5.4.2 + 177 3.1.1:4.1.2:5.2.1:2.7.1:1.14.16:1.13.11:1.2.1 + 178 2.3.1:1.1.1 + 179 1.2.1:1.2.1:2.4.1:5.3.1 + 180 1.1.1:1.1.99 + 181 5.4.99:3.5.4:1.2.7 + 182 2.4.2:1.1.1:1.13.11:1.4.5:1.13.11:1.1.1:2.1.1:1.1.1:1.17.4:3.5.99:4.3.1 + 183 4.1.2:1.1.1:1.17.7:1.1.5:1.1.5:2.7.1:3.1.1:2.5.1 + 184 1.14.19:1.14.11:1.17.99:4.2.1:4.2.1 + 185 1.17.4:5.4.99:2.3.1 + 186 1.3.1:4.2.1:1.1.1:2.7.1:4.2.1:1.14.11:1.1.1 + 187 6.3.5:1.1.5:2.3.1 + 188 2.6.1:1.1.1:2.6.1:2.2.1:2.6.1:2.3.1:1.3.8 + 189 1.1.1:4.99.1:1.1.1:2.7.9:1.2.7:2.3.1:2.3.1:1.1.1:1.1.99:1.1.1:1.14.14 + 190 1.1.1:6.2.1:2.7.1:2.8.2:3.1.3 + 191 2.3.3:3.1.1:1.2.1:1.1.1:1.1.1 + 192 1.14.14:5.4.2:4.2.3:1.2.7:4.2.1:1.2.1:1.1.1 + 193 1.17.3:3.1.3:2.7.7:2.1.2:1.1.1:4.4.1 + 194 2.7.1:5.3.1:1.1.2:1.14.14:3.6.1:2.7.1:2.3.3 + 195 1.13.11:1.5.8:2.7.7:1.5.8:2.5.1:5.3.3 + 196 4.1.3:5.3.3:1.1.5:5.5.1:2.6.1:6.2.1 + 197 5.3.1:2.2.1:1.3.3:3.1.1:1.2.1:9.9.9:4.1.1 + 198 1.1.1:3.1.3:2.3.1:4.1.1:1.1.1:3.7.1 + 199 1.18.1:4.1.3:1.1.1:2.7.7:3.1.3:3.1.3 + 200 4.2.3:2.7.1:1.2.4 diff --git a/utilities/tests/test_nwx.py b/utilities/tests/test_nwx.py new file mode 100644 index 0000000..7857533 --- /dev/null +++ b/utilities/tests/test_nwx.py @@ -0,0 +1,407 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# ------------------------------ +# Name: test_nwx.py +# Purpose: Testing of nw_ec_alignx and alignESS modules +# +# @uthor: acph - dragopoot@gmail.com +# +# Created: Sep 2017, after shock! +# Copyright: (c) acph 2017 +# Licence: GNU GENERAL PUBLIC LICENSE, Version 3, 29 June 2007 +# ------------------------------ +"""Testing of nw_ec_alignx and alignESS modules""" + +import os +import sys +import pytest +from random import choice +# Fixing path for pytest +mod_path = os.path.abspath(__file__) +mod_path = os.path.dirname(mod_path) +sys.path.insert(0, mod_path + '/../') +# --End Fixing path for pytest +pyximport = pytest.importorskip('pyximport') +alignESS = pytest.importorskip('alignESS') +try: + import nw_ec_align as nw +except ImportError: + pass +pyximport.install() +import nw_ec_alignx as nwx + +# use fixtures instead these commands +# decs = alignESS.decs +# hmat = alignESS.hmat + + +@pytest.fixture(scope="module") +def seqs_s(): + import sqlite3 as s3 + with s3.connect('tests/nr_part.db') as db: + x = db.execute("SELECT ec3 from nrseqs") + seqs_s = [i[0] for i in x] + return seqs_s + + +@pytest.fixture(scope="module") +def seqs(seqs_s): + seqs = [i.split(':') for i in seqs_s] + return seqs + + +@pytest.fixture(scope="module") +def decs(): + return alignESS.decs + + +@pytest.fixture(scope="module") +def lecs(): + return alignESS.lecs + + +@pytest.fixture(scope="module") +def hmat(): + return alignESS.hmat + + +########### +# Markers # +########### +skipif = pytest.mark.skipif +xfail = pytest.mark.xfail +oldnw = pytest.mark.skipif('nw_ec_align' not in sys.modules, + reason='Requires nw_ec_align legacy version') + +skipifnotfiles = skipif((not os.path.exists('tests/random_frag_ind.txt') or + not os.path.exists('tests/random_frag.txt') or + not os.path.exists('tests/nr_part.db') or + not os.path.exists('tests/part_name.txt')), + reason="""At least one test file is not present: +./tests/random_frag.txt + random_frag_ind.txt + nr_part.db + part_name.txt """) + +##################### +# Testing algorithm # +##################### + + +@oldnw +def test_scoring(seqs, seqs_s, decs, lecs, hmat): + """Test for similarity in old and new alignmet scoring + """ + + assert len(seqs) == len(seqs_s) + n = len(seqs) + tests = 100 + for k in range(tests): + i = choice(range(n)) + j = choice(range(n)) + s1, s2 = seqs[i], seqs[j] + arr = nwx._FastNW(hmat, decs, s1, s2) + # Cython aling and scoring + as1, as2 = nwx._backtrace(arr[0], s1, s2) + as1s = ':'.join(as1) + as2s = ':'.join(as2) + sco = nwx.scoring(hmat, decs, as1, as2) + scos = nw.scoring(hmat, lecs, as1s, as2s) + assert abs(sco - scos) <= 1e-6 + + +@oldnw +def test_NW_score(hmat, decs, lecs): + """Test for similarity in old and new alignment scoring + Complete NW version + """ + s1 = '6.2.1:2.3.1:1.2.4:2.7.1:4.2.1:5.4.2:2.7.2:1.2.1:4.1.2:2.7.1:5.3.1:5.4.2:3.1.3' + s1_ = '2.3.1:1.2.4:2.7.1:5.4.2:2.7.2:1.2.1' + # s2 = '1.2.4:2.3.1:2.3.3:4.1.1' + # s3 = '6.3.3:6.3.4:5.4.99:6.3.2:4.3.2:2.4.2:3.2.2' + ss1 = s1.split(':') + ss1_ = s1_.split(':') + # ss2 = s2.split(':') + # ss3 = s3.split(':') + ess = [ss1, ss1_] + for ii, i in enumerate(ess): + for ji, j in enumerate(ess): + score_old = nw.NW(hmat, lecs, ':'.join(i), ':'.join(j))[2] + score_new = nwx.NW(hmat, decs, i, j)[2] + assert abs(score_old - score_new) <= 1e-2 + score_old_loc = nw.NW(hmat, lecs, ':'.join(i), ':'.join(j), + local=True, localize=True)[2] + score_new_loc = nwx.NW(hmat, decs, i, j, localize=True)[2] + assert abs(score_old_loc - score_new_loc) <= 1e-2 + + +#################### +# Testing wrappers # +#################### + +def test_alignESS_wrap(): + """Test the correct function of the + alignment wrapper.""" + s1 = '1.2.1:2.7.2:5.4.2:4.2.1:2.7.1' + s2 = '9.9.9:3.2.1:5.3.1:3.1.3:4.1.2:1.2.1:5.4.2:4.2.1:2.7.1' + \ + ':1.2.7:2.3.1:1.8.1' + ss1, ss2, s = alignESS.alignESS(s1, s2) + ls1, ls2, ls = alignESS.alignESS(s1, s2, localize=True) + assert ls < s + assert len(ls2) < len(ss1) + + +################################# +# Testing multiple comparissons # +################################# + +@skipifnotfiles +def test_indvsalldb_len(seqs, decs, hmat): + """Test for the correct length of ind_vs_alldb + + """ + subs = seqs[:100] + scores0 = nwx.ind_vs_alldb(0, subs, hmat, decs) + aligns0 = nwx.ind_vs_alldb(0, subs, hmat, decs, oscore=False) + scores89 = nwx.ind_vs_alldb(89, subs, hmat, decs) + scoreswhole = nwx.ind_vs_alldb(89, subs, hmat, decs, wholedb=True) + assert len(scores0) == 1 + assert len(scores89) == 1 + assert len(scoreswhole) == 1 + assert len(scores0[0]) == 99 + assert len(scores89[89]) == 10 + assert len(scoreswhole[89]) == 100 + # oscore = False result length + assert len(aligns0) == len(scores0) + aln = list(list(aligns0.values())[0].values())[0] + assert len(aln) == 3 + assert type(aln[0]) is str + assert type(aln[2]) is float + + +@skipifnotfiles +def test_seqvsdb_len(seqs, decs, hmat): + """Test for the correct length output in seqs_vs_db output""" + subs = seqs[:100] + n = len(subs) + seq1 = seqs[50] + scores = nwx.seq_vs_db(seq1, subs, hmat, decs) + aligns = nwx.seq_vs_db(seq1, subs, hmat, decs, oscore=False) + assert len(scores) == n + sco_thres = nwx.seq_vs_db(seq1, subs, hmat, decs, thres=0.3) + assert len(sco_thres) < n + # oscore = False result lenght + assert len(scores) == len(aligns) + aln = list(aligns.values())[0] + assert len(aln) == 3 + assert type(aln[0]) is str + assert type(aln[2]) is float + + +@skipifnotfiles +def test_dbvsdb_len(seqs, decs, hmat): + """Test for the correct length in db_vs_db output + """ + subs1 = seqs[:50] + n1 = len(subs1) + subs2 = seqs[20:60] + n2 = len(subs2) + scores = nwx.db_vs_db(subs1, subs2, hmat, decs) + aligns = nwx.db_vs_db(subs1, subs2, hmat, decs, + oscore=False) + assert len(scores) == n1 + assert len(scores[0]) == n2 + # oscore=False + assert len(scores) == len(aligns) + assert len(scores[0]) == len(aligns[0]) + # threshold + sco_thres = nwx.db_vs_db(subs1, subs2, hmat, decs, + thres=0.3) + assert len(sco_thres) < n1 + i = list(sco_thres.keys())[0] + assert len(sco_thres[i]) < n2 + + +@skipifnotfiles +def test_listvsalldb_len(seqs, decs, hmat): + """Test for the correct length in list_vs_alldb output + """ + subs = seqs[:100] + indices = [10, 5, 80] + scores = nwx.list_vs_alldb(indices, subs, hmat, decs) + assert len(scores) == 3 + assert len(scores[10]) == 89 + assert len(scores[80]) == 19 + + scoreswhole = nwx.list_vs_alldb(indices, subs, hmat, decs, wholedb=True) + assert len(scoreswhole) == 3 + assert len(scoreswhole[5]) == 100 + assert len(scoreswhole[80]) == 100 + + scores = nwx.list_vs_alldb(indices, subs, hmat, decs, thres=0.3) + assert len(scores) == 3 + assert len(scores[10]) < 89 + assert len(scores[80]) < 19 + aligns = nwx.list_vs_alldb(indices, subs, hmat, decs, thres=0.3, + oscore=False) + assert len(aligns) == 3 + assert len(aligns[10]) < 89 + assert len(aligns[80]) < 19 + + scoreswhole = nwx.list_vs_alldb(indices, subs, hmat, decs, wholedb=True, + thres=0.3) + assert len(scoreswhole) == 3 + assert len(scoreswhole[5]) < 100 + assert len(scoreswhole[80]) < 100 + + +@skipifnotfiles +def test_localize_len(seqs, decs, hmat): + """Test that the option localize generates more results + than the normal option""" + # alldb comp + r1 = nwx.alldb_comp(seqs, hmat, decs, thres=0.3) + r2 = nwx.alldb_comp(seqs, hmat, decs, thres=0.3, + localize=True) + s1 = [s for sub in r1.values() for s in sub.values()] + s2 = [s for sub in r2.values() for s in sub.values()] + n1 = len(s1) + n2 = len(s2) + assert n1 < n2 + assert sum(s1) / n1 > sum(s2) / n2 + +############### +# Testing I/O # +############### + + +@skipifnotfiles +def test_loadtxt(): + fname1 = 'tests/random_frag_ind.txt' + fname2 = 'tests/random_frag.txt' + + ess = alignESS.load_txt(fname1, index=True) + assert type(ess) == tuple + assert len(ess) == 2 + es = ess[0][0] + assert type(es) == list + ess = alignESS.load_txt(fname2, index=False) + assert type(ess) == list + + +@skipifnotfiles +def test_loadsqlite(): + sqlname = 'tests/nr_part.db' + ess = alignESS.load_sqlite(sqlname) + assert type(ess) == tuple + assert len(ess) == 2 + assert type(ess[0][0]) == list + + +def test_storedict_empty(): + "test for store_dict empty" + scores = {} + fname = 'pru.txt' + nwx.store_dict(fname, scores) + + +##################### +# Testing utilities # +##################### + + +@skipifnotfiles +def test_esstype(): + ess_type = alignESS._ess_type + assert ess_type('tests/random_frag.txt') == 'text_noind' + assert ess_type('tests/random_frag_ind.txt') == 'text_ind' + assert ess_type('tests/part_name.txt') == 'text_ind' + assert ess_type('tests/nr_part.db') == 'sqlite' + assert ess_type('tests/test_nwx.py') == 'file' + assert ess_type('1.2.3:1.3.4:3.5.-') == 'ess' + + +@xfail(reason='Must raise exception', strict=True) +def test_esstype_fail(): + ess_type = alignESS._ess_type + assert ess_type('1.2.3') + + +@skipif(not os.path.exists('tests/multi.txt'), + reason='File not found') +def test_loadmulti(): + load_multi = alignESS._load_multi + ess, names = load_multi('tests/multi.txt') + assert type(ess[0]) == list + assert type(names[0]) == str + assert len(ess) == 8 + assert len(names) == 8 + assert len(ess[0]) == 6 + assert 'Glycolysis' in names[3] + + +################################ +# Testing command line options # +################################ + +def test_localize_parser(): + """Test that the localize option returns True or False correctly""" + s1 = '1.2.1:2.7.2:5.4.2:4.2.1:2.7.1' + s2 = '9.9.9:3.2.1:5.3.1:3.1.3:4.1.2:1.2.1:5.4.2:4.2.1:2.7.1' + \ + ':1.2.7:2.3.1:1.8.1' + parser = alignESS.arg_parser(get_parser=True) + # pair command + args = parser.parse_args(['pair', s1, s2]) + assert args.localize is False + args = parser.parse_args(['pair', s1, s2, '-l']) + assert args.localize is True + alignESS.main_pair(args) + # dbalign + args = parser.parse_args(['dbalign', 'tests/nr_part.db']) + assert args.localize is False + args = parser.parse_args(['dbalign', 'tests/nr_part.db', '-l']) + assert args.localize is True + alignESS.main_db(args) + + +def test_dbalign_align_option(): + """Test that the align option returns True or False correctly""" + parser = alignESS.arg_parser(get_parser=True) + # dbalign + args = parser.parse_args(['dbalign', 'tests/nr_part.db']) + assert args.align is False + args = parser.parse_args(['dbalign', 'tests/nr_part.db', '-align']) + assert args.align is True + alignESS.main_db(args) + + +@skipifnotfiles +def test_singledb(): + """Using only one database yielded an error because the program tries + to use the value in args.db2 variable. In this case this value is None""" + parser = alignESS.arg_parser(get_parser=True) + args = parser.parse_args(['dbalign', 'tests/nr_part.db']) + alignESS.main_db(args) + args = parser.parse_args(['dbalign', 'tests/part_name.txt']) + alignESS.main_db(args) + # comment if the test become slow + args = parser.parse_args(['dbalign', 'tests/random_frag.txt']) + alignESS.main_db(args) + args = parser.parse_args(['dbalign', 'tests/random_frag_ind.txt']) + alignESS.main_db(args) + + +@skipifnotfiles +def test_doubledb(): + """Using 2 databases should not give any error""" + parser = alignESS.arg_parser(get_parser=True) + args = parser.parse_args(['dbalign', 'tests/nr_part.db', '-db2', + 'tests/nr_part.db']) + alignESS.main_db(args) + args = parser.parse_args(['dbalign', 'tests/part_name.txt', '-db2', + 'tests/nr_part.db']) + alignESS.main_db(args) + args = parser.parse_args(['dbalign', 'tests/part_name.txt', '-db2', + 'tests/random_frag.txt']) + alignESS.main_db(args) diff --git a/utilities/tests/trash/random0.txt b/utilities/tests/trash/random0.txt new file mode 100644 index 0000000..c71aad2 --- /dev/null +++ b/utilities/tests/trash/random0.txt @@ -0,0 +1,7893 @@ +5.3.3:2.3.3:1.5.1:1.1.1 +1.1.1:3.6.1:2.3.1:1.1.98:1.1.1:3.1.3:1.11.1:1.1.1 +5.4.2:1.1.1:5.4.2:4.1.3 +1.2.1:2.3.1:1.2.1:1.13.11:1.1.1:5.3.1:2.7.1 +4.1.3:1.2.1:3.1.2:3.1.3 +1.1.1:1.1.3:3.1.2:9.9.9 +1.1.1:5.4.2:4.1.1:1.1.1:3.5.4:2.3.1 +1.1.1:2.3.1:1.1.1:2.3.1:2.3.1:1.14.13 +6.4.1:3.1.3:2.6.1:2.3.1:4.2.1 +2.3.3:4.2.3:3.6.1:4.3.1 +4.4.1:1.1.1:5.4.1:2.7.9:1.13.11:3.1.3:2.3.1 +2.1.1:5.1.1:2.1.1:3.1.2:2.1.4:4.1.2:4.3.1:5.3.3:3.1.3 +2.3.1:1.1.1:4.4.1:6.3.2:2.5.1 +1.1.1:2.7.7:4.2.3:2.3.3:1.13.99 +5.3.1:2.3.3:1.1.1:1.1.1:2.3.1:4.1.1:1.1.1 +1.1.1:3.6.1:1.1.98:1.1.1:1.1.1:5.5.1:2.3.1:1.14.14:6.2.1 +1.4.4:1.1.1:1.14.13:2.3.1 +2.6.1:2.6.1:3.6.1:1.1.1:4.1.1:2.8.3:2.5.1 +4.1.1:2.7.1:2.3.1:1.14.12:3.2.2:4.1.2 +2.6.1:2.7.1:2.7.1:1.1.1:4.2.3:5.4.2:4.1.2:1.13.11:1.1.1 +2.8.3:1.1.1:3.1.3:4.2.1:2.6.1:1.1.1 +2.7.1:1.13.11:1.2.1:1.1.1:4.3.3:1.2.7 +1.2.1:2.7.1:4.3.1 +2.7.2:5.4.2:1.2.1:2.7.2:3.1.3:1.1.1:2.3.3 +4.2.1:2.6.1:1.5.8 +1.1.1:2.7.9:3.5.4:4.2.1:4.1.1:5.3.1 +3.1.3:2.3.1:2.7.4:1.1.1:9.9.9:1.3.1:1.1.1:1.1.1:3.7.1:2.3.1 +4.1.1:2.1.1:2.3.1:1.3.1 +2.7.7:2.3.1:2.3.3:4.1.1:2.7.1 +2.4.1:2.2.1:5.3.1:2.1.4:1.1.1 +1.5.8:1.2.5:1.13.11:1.14.11:1.8.1 +2.2.1:2.7.7:5.1.3:1.1.1 +1.17.1:2.1.1:1.2.4:1.2.1:1.3.1:3.1.2:2.1.1 +1.2.7:2.6.1:1.1.1:1.1.1:2.4.2:1.2.7 +2.3.1:5.3.1:1.1.1:6.2.1 +1.14.14:2.7.1:4.2.3:1.8.7:6.2.1:9.9.9:6.2.1 +2.7.1:9.9.9:5.5.1:3.1.3:2.3.1:1.8.7 +1.14.13:2.3.1:4.2.1:1.1.1:2.6.1:4.1.2:3.1.1:1.1.1:3.1.1:2.7.7:3.1.3:5.4.2 +4.2.3:1.14.19:3.1.1:1.1.1 +2.3.1:2.3.1:1.17.1:1.14.14:4.2.1:1.14.14 +1.2.4:1.1.1:4.2.3:1.14.14:9.9.9 +1.1.1:1.2.1:1.1.1:4.2.1:2.7.9:1.14.13:6.3.2 +2.3.1:3.1.1:4.1.3:2.3.3:1.13.11:2.6.1 +1.1.1:2.3.1:3.7.1:1.1.99:6.3.5:6.4.1 +5.3.1:1.1.99:1.1.1:1.14.99:2.7.7 +4.1.2:1.1.5:3.1.2:1.1.98:4.4.1:1.1.1:1.13.11:1.5.1:1.17.3 +2.7.1:9.9.9:5.4.99:2.5.1:1.13.99:1.1.1:1.1.1:5.5.1 +4.1.3:2.7.7:2.7.1 +2.8.3:6.3.5:1.2.4:2.6.1:1.14.13:3.6.1:6.3.4:5.4.99:2.3.1 +1.1.1:2.7.7:1.2.7:2.7.9 +2.6.1:1.1.1:3.6.1:6.2.1:1.3.1 +2.7.1:2.4.2:1.14.13:2.7.2:5.3.1:4.3.1:5.4.99 +1.2.1:1.1.5:2.3.3:5.4.2:3.7.1 +2.6.1:2.3.1:5.4.2:5.3.1:2.7.7:5.3.1 +1.2.1:1.1.1:4.1.3:1.2.7 +1.1.1:4.2.1:2.3.1:1.1.1 +3.1.1:1.2.1:2.8.3:1.1.1:2.6.1 +2.7.1:2.3.1:5.4.2:1.2.1 +1.8.1:6.2.1:2.7.2:1.14.14:4.1.1:2.3.3:1.2.1:1.14.14 +2.4.2:4.1.1:1.14.15:1.1.2:1.2.1:4.4.1:2.7.1 +9.9.9:1.14.14:4.1.1:3.5.1:5.3.3 +6.2.1:4.2.3:1.14.15:1.1.1:4.2.3:1.2.5:2.3.1 +4.4.1:4.2.3:4.1.1:1.1.1 +2.3.3:1.1.1:3.1.3:1.1.98:5.4.2:2.6.1 +5.4.2:2.7.1:5.4.2:3.6.1 +1.1.1:1.13.11:1.5.8:1.1.1:1.13.11:1.14.11 +3.1.3:1.1.1:4.1.1:1.17.1:3.8.1 +1.1.1:5.5.1:1.1.1:5.3.3:2.8.3 +4.1.3:2.1.2:4.2.1:4.1.1 +5.3.3:1.4.3:1.2.4:6.3.5:1.3.8:1.2.1:3.1.3:1.14.15:4.1.2:2.1.2 +2.7.8:2.1.1:1.13.11:1.3.5:5.3.1:2.3.1 +1.3.3:3.1.3:1.1.1:1.14.14:4.2.1:4.2.1 +4.4.1:1.1.1:5.4.2:1.18.1 +3.6.1:2.1.1:1.1.1:4.1.2 +1.2.5:4.2.3:2.1.1:2.3.1:3.1.3:5.4.99:2.7.1:3.1.3 +1.2.1:5.4.2:3.1.6:2.1.4:5.1.3 +1.5.8:1.14.16:2.7.1:2.1.1 +1.14.14:1.13.12:2.1.1:1.1.1:1.1.1:4.4.1:1.2.7 +1.1.1:5.3.1:1.2.7:5.4.2:1.1.1:1.2.4:2.3.3:2.5.1:1.3.1:1.1.1:2.2.1 +1.2.4:3.7.1:1.1.1:2.1.2:2.1.4:3.1.3:1.5.1 +2.7.2:3.1.3:1.1.1:3.6.1:1.2.1:4.99.1:3.1.3:2.4.2:3.1.1 +3.3.2:4.1.3:6.4.1:9.9.9:1.1.1:4.2.1:2.1.1:1.1.1 +5.3.3:2.7.4:1.1.1:1.3.1 +1.14.19:1.1.1:4.2.3:2.3.1:2.8.3:1.14.13 +6.3.4:2.3.1:2.8.3:6.2.1:1.1.5:3.3.2 +1.2.5:1.1.1:3.1.2:5.4.2:6.4.1:9.9.9 +2.6.1:1.13.11:3.1.2:4.1.3 +2.6.1:6.2.1:1.1.1:2.7.7:1.14.99:5.3.3 +1.14.14:1.1.1:4.3.1:1.8.1:4.1.1:2.6.1:4.4.1 +1.5.8:1.14.12:1.2.1:1.3.1:1.1.1:1.1.1:1.17.4 +1.13.11:2.7.1:5.3.1:2.7.1 +2.3.1:1.1.1:2.3.3:1.1.1:1.1.5:2.7.7 +1.14.19:1.2.7:4.3.2:4.2.1:4.1.2:1.1.1:1.1.1 +2.4.2:2.7.1:5.1.3:2.3.1:4.6.1 +1.13.11:1.1.1:4.1.1:2.1.1:2.7.8:4.4.1:2.7.1:1.2.1:4.2.1:1.13.11:1.1.5 +4.4.1:4.2.1:6.4.1:4.2.1:1.2.1:1.13.11:3.2.1:1.11.1:2.5.1 +1.5.8:2.7.1:2.7.4:4.4.1:1.13.11:2.7.4:1.13.11 +1.2.5:1.14.16:5.1.3:1.1.1:2.7.9 +1.1.1:9.9.9:1.14.19:4.3.2:2.7.1:4.2.1:4.2.1 +2.7.8:3.3.2:3.5.4:1.1.1 +4.1.1:6.4.1:4.1.3:4.1.2:2.7.1:1.14.14:2.8.3:1.5.3:3.4.19 +1.13.11:2.7.8 +1.17.99:1.14.13:1.14.13:2.8.3 +1.1.1:5.3.1:1.5.1:2.3.1:4.2.3:4.2.3:5.5.1:1.14.21:2.6.1:1.1.1 +1.11.1:1.13.11:1.14.18:2.7.2:4.1.1:4.1.1:3.5.4 +1.1.3:5.3.1:2.1.4:1.8.4:1.1.1:1.1.1 +5.4.2:2.1.2:1.1.1:5.3.1:2.6.1:2.7.1 +2.5.1:1.1.1:1.1.1:4.1.1:4.3.1 +2.6.1:1.3.2:5.3.1:1.3.1:4.1.1:1.4.3:5.5.1 +1.1.1:1.13.11:2.6.1:2.3.1:4.1.3:4.2.1:4.2.1:5.4.99 +2.4.2:2.7.1:1.13.11:1.1.1:4.1.3 +2.7.1:1.13.12:2.6.1:2.7.7:2.7.1:1.3.1:4.2.1:2.6.1:1.1.1 +2.7.7:2.4.2 +4.2.1:1.13.11:4.2.1:1.1.1:4.1.3:2.7.1:1.1.1 +2.7.2:4.1.2:5.5.1:1.1.98 +4.4.1:1.14.14:4.2.1:3.1.2:6.2.1 +6.4.1:9.9.9:1.1.1:1.14.13:1.4.3 +3.6.1:1.5.1:1.8.1:4.1.2:1.1.5:1.1.1:1.1.1 +4.2.1:4.2.2:1.14.11:2.4.2 +6.2.1:2.3.1:4.2.1 +2.7.1:5.3.1:2.7.1:1.14.18 +1.1.2:1.1.1:3.3.2 +1.3.1:1.1.1:2.3.1:1.14.14:2.8.3:1.2.7:6.3.5 +1.1.3:2.2.1:1.1.1:1.1.1:1.1.1:1.1.2 +3.1.2:1.3.8:4.2.1:5.1.3:1.14.14 +2.7.1:1.1.1:6.3.4:1.1.1:2.7.7:2.1.2 +3.1.3:1.8.4:3.1.1:4.1.1:1.1.1 +2.4.2:2.1.2:1.3.1:1.1.1:1.4.3 +1.13.11:2.3.1:1.1.5:5.3.1:3.5.3:2.6.1 +1.14.14:2.3.1:1.1.1:3.1.3:4.2.1:2.7.1:1.1.99:4.1.2:4.2.1:6.2.1 +1.2.7:6.2.1:1.1.1:1.2.1 +3.1.2:2.3.1:1.1.1:5.4.99 +4.2.1:1.13.11:9.9.9:3.1.4 +1.3.1:1.14.99:2.3.1:1.5.1:2.7.7:1.2.7 +1.2.1:9.9.9:5.4.2:2.3.1 +3.1.3:3.6.1:4.1.2:2.7.8:2.2.1:6.2.1:1.1.1 +4.2.1:1.17.1:4.4.1:2.7.1:6.2.1:4.4.1:1.13.99 +2.5.1:6.3.5:2.4.1:4.2.1:5.4.2:2.7.1 +4.2.1:1.1.1:3.1.3:1.14.16:1.1.1:1.1.1 +4.2.1:2.6.1:3.1.3:1.2.1:1.3.1:1.1.1:1.1.1:4.2.3:3.1.3 +1.14.14:2.8.3:6.2.1:5.3.3:3.1.3 +9.9.9:1.4.3:4.2.3:1.1.1:2.6.1:2.7.1 +1.14.19:2.1.2:1.2.1:5.3.1:1.11.1:9.9.9:1.1.1:4.1.1 +1.1.1:1.8.1:4.2.1:6.3.3:5.5.1:1.5.8:6.3.4 +5.3.3:9.9.9:4.3.2 +1.1.1:2.2.1:1.1.1:1.1.1:1.8.1:4.2.1 +1.2.4:2.3.1:5.3.3:1.1.1:1.1.1 +5.3.1:2.7.8:3.1.3:1.17.4:1.1.3:1.1.1:1.4.4:5.3.3 +2.6.1:2.5.1:1.5.8:3.1.3:1.4.4 +2.7.1:1.1.1:4.1.2:1.8.1:1.14.14:2.3.1 +1.2.1:1.14.12:6.4.1:3.1.3:4.3.1:2.6.1 +1.1.1:2.3.1:1.1.1:1.14.12:1.1.1:2.2.1:1.1.1:4.1.1:5.3.1 +3.1.1:1.1.1:3.5.2:4.2.1:1.1.1:1.1.1:2.7.1:2.6.1 +2.7.7:4.3.1 +2.7.4:2.7.7:1.14.13:1.2.1 +1.1.5:1.1.1:1.13.99:2.7.9:1.1.1:5.4.99:2.6.1:2.8.1:1.1.1 +5.4.2:9.9.9:1.1.1:1.2.7:4.4.1 +4.2.3:6.4.1:1.1.1:1.2.1 +1.1.1:1.2.1:3.5.1 +2.1.2:1.8.7:1.1.5:1.1.1:1.2.1 +5.3.1:1.1.1:1.2.1 +2.7.4:1.13.11:1.1.2:9.9.9:2.7.7:1.14.14 +2.7.1:3.1.4:1.14.14:6.2.1:2.7.1 +2.5.1:2.1.2:1.2.7:5.1.2 +4.1.1:2.1.2 +1.2.1:5.4.99:2.3.3 +3.1.4:1.1.2:9.9.9:5.3.1:1.8.1:4.2.1 +2.7.1:1.13.11:1.14.15:5.3.1 +5.4.2:5.1.3:2.7.8:1.1.2:1.1.1:1.1.1 +5.3.1:1.1.1:2.8.3:5.5.1:2.3.1:2.7.1:6.2.1 +1.1.1:1.13.11:6.4.1:6.2.1:4.1.2:3.1.1:1.1.1:5.3.1 +6.2.1:1.1.1:2.8.3:2.7.7:2.1.2:1.1.1 +1.1.1:1.1.1:1.5.1:1.1.1 +4.2.3:2.6.1:1.1.1:3.1.3:3.5.1:3.5.1:1.1.1:6.4.1:5.3.3 +1.1.1:2.4.2:1.14.14:4.2.1:1.13.11 +2.7.1:5.5.1:4.3.1:5.4.2 +3.1.1:4.1.2:5.2.1:2.7.1:1.14.16:1.13.11:1.2.1 +2.3.1:1.1.1 +1.2.1:1.2.1:2.4.1:5.3.1 +1.1.1:1.1.99 +5.4.99:3.5.4:1.2.7 +2.4.2:1.1.1:1.13.11:1.4.5:1.13.11:1.1.1:2.1.1:1.1.1:1.17.4:3.5.99:4.3.1 +4.1.2:1.1.1:1.17.7:1.1.5:1.1.5:2.7.1:3.1.1:2.5.1 +1.14.19:1.14.11:1.17.99:4.2.1:4.2.1 +1.17.4:5.4.99:2.3.1 +1.3.1:4.2.1:1.1.1:2.7.1:4.2.1:1.14.11:1.1.1 +6.3.5:1.1.5:2.3.1 +2.6.1:1.1.1:2.6.1:2.2.1:2.6.1:2.3.1:1.3.8 +1.1.1:4.99.1:1.1.1:2.7.9:1.2.7:2.3.1:2.3.1:1.1.1:1.1.99:1.1.1:1.14.14 +1.1.1:6.2.1:2.7.1:2.8.2:3.1.3 +2.3.3:3.1.1:1.2.1:1.1.1:1.1.1 +1.14.14:5.4.2:4.2.3:1.2.7:4.2.1:1.2.1:1.1.1 +1.17.3:3.1.3:2.7.7:2.1.2:1.1.1:4.4.1 +2.7.1:5.3.1:1.1.2:1.14.14:3.6.1:2.7.1:2.3.3 +1.13.11:1.5.8:2.7.7:1.5.8:2.5.1:5.3.3 +4.1.3:5.3.3:1.1.5:5.5.1:2.6.1:6.2.1 +5.3.1:2.2.1:1.3.3:3.1.1:1.2.1:9.9.9:4.1.1 +1.1.1:3.1.3:2.3.1:4.1.1:1.1.1:3.7.1 +1.18.1:4.1.3:1.1.1:2.7.7:3.1.3:3.1.3 +4.2.3:2.7.1:1.2.4 +1.1.1:1.2.1:5.5.1 +2.7.1:1.18.1:2.7.1:3.1.1:1.1.1:5.3.1:9.9.9:1.2.5 +2.3.3:2.7.8:1.1.1 +2.3.3:2.1.1:5.1.3:4.2.3 +1.17.4:1.1.1:4.1.1:1.2.1:2.1.3:1.1.1:4.2.1:4.2.1:1.14.14 +1.1.3:4.1.2:4.4.1 +2.3.1:2.3.1:4.2.1:1.1.5:9.9.9:5.4.2 +4.2.1:2.7.1:4.2.1:4.2.1:3.6.1:4.1.2:1.14.15:2.4.2:4.1.1 +1.1.1:1.8.99:2.6.1:1.2.1:2.7.1 +3.1.1:1.1.1:3.1.3:1.1.1:1.13.11 +2.8.3:2.1.2:2.7.7:1.1.1:2.4.2 +5.3.1:5.5.1:1.1.1:1.1.1:2.3.1 +1.1.1:5.3.3:2.7.7:2.3.1:2.3.1:3.1.3 +1.1.1:2.1.1:4.4.1:1.1.1:6.2.1:2.7.7:4.1.1:3.1.3 +1.13.11:1.14.18:4.2.3:6.2.1:1.2.5:1.1.1:1.1.1:5.3.1:4.4.1:5.4.2 +1.14.13:1.14.99:1.2.4:1.2.1:1.1.1:4.2.3 +1.1.1:1.1.1:1.14.13:4.3.1:4.3.1:6.2.1:2.2.1 +1.1.3:1.8.1:1.1.1:1.1.1 +1.2.5:2.7.1:3.1.5:1.4.3 +2.6.1:2.1.1:2.7.7 +2.3.1:2.7.1:5.3.1:4.1.1:9.9.9:2.7.4:3.5.1:4.2.1:1.1.1 +1.1.1:1.1.2:1.1.1:3.5.1:4.4.1 +1.2.1:1.5.1:2.7.4:1.1.1:5.3.2:1.2.1:2.5.1:2.6.1 +3.1.1:4.3.3:2.8.1:3.7.1 +3.1.3:1.2.7:3.1.3:3.1.3 +2.1.1:2.3.1:2.7.1:2.6.1:4.2.1 +1.8.4:1.3.5:1.1.99:6.3.5:3.1.3:1.1.5:1.13.99:3.1.1:3.6.1:9.9.9:3.1.2 +1.14.13:6.2.1:2.6.1:1.1.1:2.3.1:1.13.99:4.2.3:3.1.1 +1.13.11:3.1.2:1.1.1:9.9.9 +1.1.1:1.14.19:5.4.2:1.13.11:1.8.1:1.14.13:1.14.13 +9.9.9:1.14.13:1.1.1:3.1.1:9.9.9 +2.3.3:1.14.11:1.3.8:4.2.2 +1.1.1:5.4.2:1.1.2:1.1.2:1.5.8:4.3.2:4.2.3:1.1.1:3.1.3 +2.6.1:1.17.7:4.2.1:2.7.4:1.1.1:5.4.2:4.4.1 +1.1.1:1.2.5:2.4.1:2.5.1:1.3.8 +1.1.1:3.2.1 +2.7.7:2.3.1:1.1.1:1.1.2:4.1.1:1.1.2:2.1.2:2.3.1 +1.1.1:3.1.3:4.2.1:2.5.1:2.5.1:2.3.1 +2.6.1:3.3.2:1.13.11:1.2.3:3.4.24:3.1.2:1.1.1 +2.4.2:2.7.1:1.2.5:1.13.11:9.9.9:1.2.7:1.1.1:4.2.1 +1.1.5:2.1.2:1.13.11:2.7.2:1.14.15 +4.3.1:1.1.1 +2.7.2:1.1.1:1.3.8:4.1.3 +2.8.1:1.1.1:9.9.9:4.2.1 +9.9.9:2.7.1:1.1.1:1.14.11 +9.9.9:2.4.2:2.3.3:2.7.7:1.17.1:2.7.1:4.4.1 +1.2.1:1.2.4:2.8.3:2.6.1:6.2.1:2.1.2:1.13.11:2.3.1:4.2.1:2.7.4:9.9.9 +1.14.13:5.1.99:1.5.1:3.6.1:2.3.1:2.7.1:1.3.3:4.4.1 +2.7.7:9.9.9:1.1.1:6.3.4:6.2.1:1.2.1:3.5.1:1.17.1:3.1.3:4.1.1 +4.1.2:1.14.13:9.9.9:5.4.2:3.1.4:2.3.1:1.8.1 +9.9.9:1.1.1:1.1.1:2.1.1:2.6.1:2.1.1 +3.1.1:3.6.1:2.7.1:1.1.1:2.1.1:1.1.1:1.1.1 +2.7.2:3.5.1:2.7.4:1.1.1:1.1.1:2.6.1 +4.4.1:4.3.2:2.6.1:5.4.2:5.5.1 +1.14.12:3.1.1:2.6.1:1.2.1:3.5.4:1.1.2 +1.1.1:1.1.1:1.1.1:2.7.7:1.5.3 +4.2.1:2.7.7 +6.3.5:6.4.1:1.1.1:2.7.1 +1.1.3:1.1.2:1.13.11:4.1.3:1.2.1 +3.1.2:1.2.1:2.7.1 +2.4.2:3.1.4:1.14.14:3.6.1:3.1.4 +1.2.7:6.3.4:1.2.1:1.1.1:1.14.14:9.9.9 +1.1.1:4.2.1:5.3.1:4.1.1:1.17.1:2.7.9:4.1.3:2.7.1:5.2.1:1.1.1 +2.3.1:2.7.1:1.2.1 +1.2.1:1.1.1:1.1.1:2.3.1:1.2.1:4.2.3 +1.2.7:4.3.1:5.3.1:1.1.1:3.1.1:2.7.4:2.7.1 +5.1.99:2.8.1:4.2.1:1.1.5 +1.1.2:1.2.7:1.2.1:2.7.1:1.1.1:2.1.2:2.1.4 +4.2.1:2.5.1:2.2.1:2.3.1 +1.1.1:1.1.3:1.2.1:4.2.3:2.6.1:4.2.1:1.13.99:1.14.11 +3.1.1:1.1.1:2.7.1:1.14.13 +1.14.12:1.1.1:1.1.1 +2.7.9:2.7.7:4.2.1:2.3.1 +1.14.12:5.3.1:3.1.3 +4.4.1:1.2.7 +1.2.1:5.3.1:3.2.1:4.2.1:1.13.11 +2.6.1:6.2.1:2.3.3:2.7.1:1.1.98:2.6.1 +5.3.1:2.5.1:2.1.1:4.2.3:2.7.2:1.2.4:1.3.5:2.3.3:1.1.1:1.1.1:1.1.1:1.14.14:2.7.7 +4.1.3:4.2.1:1.2.7:5.3.3:1.13.11:1.1.1:1.1.1:6.4.1 +2.7.1:2.3.1:5.1.3:1.13.11:1.5.8:5.4.99 +4.1.1:1.1.1:2.8.3 +1.5.1:2.7.1:1.13.11:2.7.7:1.13.11 +4.4.1:2.1.4:4.2.1:1.2.1:4.2.1:2.8.3:1.1.1:2.2.1 +3.1.3:2.3.1:2.3.1:1.1.1:9.9.9:2.5.1:3.7.1:4.1.1:2.3.1:1.17.4:9.9.9 +2.1.1:3.1.3:4.3.3 +1.1.5:5.4.99 +1.1.1:2.7.1:4.3.1:1.14.13:2.3.3:2.7.1 +4.4.1:2.3.1:3.1.1:1.1.1:1.1.1:5.4.2 +4.2.3:4.1.1:1.14.13:1.2.1:1.1.1:4.2.1 +1.1.2:5.4.2:3.6.1:2.1.1 +1.14.15:1.2.4:1.2.1:3.1.2 +2.7.7:1.14.13:2.6.1:2.6.1:1.1.1 +2.7.1:1.1.5:1.5.8:3.1.3:1.8.1:4.2.1:1.13.11:2.7.7:9.9.9:1.3.5 +1.1.1:1.1.1:1.8.1:9.9.9:9.9.9:1.1.1 +1.1.1:3.1.1:1.1.1:2.7.1:3.6.1:2.6.1 +3.2.1:1.14.15:4.2.3:1.3.1:1.14.13:1.1.1 +1.13.99:2.7.7:1.14.14:2.1.3:1.8.1:1.2.1 +1.1.2:1.14.13:2.7.1 +2.3.1:2.7.4:3.7.1:4.1.1:4.3.1:1.2.7:4.1.1 +1.1.1:2.3.1:1.1.2:2.4.1:6.2.1:1.2.7:1.2.4:1.14.99:2.5.1:1.2.1 +3.1.3:5.4.2:6.2.1:1.1.1:2.8.3:4.2.1:4.4.1:4.2.3 +1.2.1:2.3.3:1.1.1:9.9.9 +1.17.99:4.2.1:2.6.1:1.2.5:2.3.1:4.2.1:1.2.4 +5.4.2:2.5.1:2.7.9:1.14.18:1.2.1:1.14.14:1.13.11:4.4.1:1.5.3:4.2.1:1.17.1 +5.5.1:1.14.15:4.3.1:4.2.1:1.14.15:9.9.9 +1.11.1:1.2.1:1.2.1 +1.1.1:4.2.1:1.8.1:6.3.3:2.7.7 +1.5.3:4.4.1:4.2.3:2.3.1:4.4.1 +2.5.1:4.3.1:3.1.3:2.6.1:5.1.99:5.3.99:1.1.5:2.7.1:2.7.7 +2.7.1:4.1.1:3.5.1:5.1.3:3.6.1:1.8.5:1.2.1:1.14.12:2.3.1:1.1.1 +1.1.1:2.7.1:1.13.11:5.4.2 +4.1.1:2.3.1:2.7.9:9.9.9 +1.1.1:2.5.1:4.2.1:3.1.2:2.5.1 +5.4.2:6.2.1:4.2.1 +2.7.8:1.2.1:1.2.1:9.9.9:1.1.1:3.5.1:2.7.7:4.1.1:1.2.5:2.1.1 +3.3.2:1.14.13:2.7.1:4.2.1 +3.1.3:5.3.2:9.9.9:5.1.3 +2.4.1:1.1.1:2.7.4:2.3.1 +1.13.11:2.3.3:1.13.11:4.2.1:2.7.2 +4.2.3:2.7.1:2.3.1:4.2.1:1.1.1 +1.14.14:6.3.4:4.1.1:1.4.4:2.4.2:1.1.1:2.5.1:4.1.1 +4.1.1:1.2.5:1.14.16:1.1.1:1.14.11:1.17.99:2.1.2 +2.3.1:1.14.13:1.1.1:4.1.1:2.7.7:1.1.1 +5.4.2:2.6.1:1.3.1:1.1.1:1.1.1 +2.7.7:2.3.1:2.3.1:4.1.1 +1.1.1:1.1.1:3.5.2:3.6.1 +1.1.3:2.8.3:4.2.3:1.1.1:1.14.12:4.2.1:1.13.11:1.2.7 +2.7.4:1.1.1:2.3.1 +4.1.2:2.7.8:1.14.14:1.3.1:1.14.15:3.1.3 +4.1.1:6.2.1:1.1.1 +1.2.1:3.1.1:2.3.1:1.1.1:4.2.1:1.1.1:1.14.14:1.1.1:1.13.12:1.14.13 +2.7.8:1.5.8:3.1.4:4.2.1 +4.1.3:1.14.13:3.1.2:4.2.1:5.3.1:3.2.1 +2.3.3:1.14.11:3.1.1:1.14.15 +1.1.1:4.1.3:2.4.2 +2.7.1:2.4.2:1.5.3:9.9.9:2.5.1 +1.13.11:1.14.99:3.1.3:1.1.1:1.14.15:1.1.1 +1.1.1:1.11.1:4.2.1:9.9.9:1.2.7:2.6.1:4.1.1 +1.2.4:1.1.5:1.3.1:1.2.7 +1.1.5:2.7.1:3.1.1:2.6.1 +3.1.4:1.14.13:1.1.1:2.1.1:2.3.1:2.3.3:1.1.1 +3.1.3:2.1.2:4.1.1:1.17.7:6.4.1:4.1.3 +2.6.1:1.1.1:1.2.4:1.1.1:4.3.1:2.3.1:5.4.99 +3.11.1:2.5.1:2.5.1:4.2.3:3.1.4 +1.1.1:1.2.4:5.4.2:1.1.1:2.7.2:2.1.2 +3.1.1:4.4.1:1.1.3:1.2.7:9.9.9:1.1.1 +3.1.3:3.5.4:1.18.1:6.4.1:3.6.1 +2.7.1:1.1.2:1.5.3:1.1.1:2.7.4:1.13.11:9.9.9 +5.1.3:3.6.1:1.2.7:4.1.2 +2.1.1:1.5.3:2.7.1:2.3.1:2.6.1:2.4.2:2.3.1 +2.7.7:2.7.1:4.2.2:3.6.1:5.3.1:1.5.1:5.5.1 +3.5.4:1.1.2:1.2.5:2.7.1:1.1.1 +1.14.14:2.7.1:1.3.1 +5.5.1:2.3.1:1.1.1:5.4.2:1.14.13:2.7.7 +1.2.1:3.5.4:2.3.1:2.3.1:1.13.11:1.1.3:1.17.4:2.8.1 +2.7.1:5.1.3:4.1.1 +1.14.15:1.2.1:2.7.1:2.5.1:2.7.9:1.14.15:1.1.1 +2.2.1:4.1.1 +1.1.2:2.1.3:1.1.1:1.1.1:2.7.4:4.2.1:5.3.1:1.14.14:2.3.1 +5.3.1:5.5.1:1.1.5:5.3.1 +4.3.3:2.7.2:4.4.1:2.7.7:3.1.1:2.2.1:1.1.5:1.8.4:2.7.1 +1.7.1:2.7.1:2.7.1:4.4.1 +2.7.7:2.3.1:4.1.3:1.1.1:1.2.1:2.8.3:2.3.1:2.6.1:2.8.1:1.1.5:2.3.1 +3.3.2:4.2.1:1.14.13:1.14.14 +3.6.1:1.1.1:5.3.3:1.1.1 +1.2.1:4.1.2:2.7.1 +3.1.3:9.9.9:4.4.1:4.2.3 +2.6.1:2.3.1:2.7.1:6.2.1:4.2.1 +4.2.1:1.13.11:1.13.11:1.5.1:5.2.1 +3.1.1:3.1.3:4.2.1 +5.5.1:2.7.2:1.14.14:1.1.5:9.9.9:2.8.3:1.14.17:1.14.14:3.1.1 +5.1.99:1.1.1:1.1.1 +9.9.9:2.8.3:1.1.1 +1.2.1:1.1.1:2.6.1:4.1.1:1.14.14:3.6.1:4.1.2:1.1.1:1.4.4:4.1.1 +1.3.1:4.2.1:1.2.7:2.2.1:2.6.1:1.1.1 +5.5.1:1.1.1:4.4.1:6.3.2:6.2.1:2.7.1:2.6.1:1.2.1:1.13.11:1.1.1:4.2.1:6.4.1 +1.1.1:5.4.2:2.7.9:2.3.1:5.4.2:2.3.1:2.4.2:2.4.2:9.9.9 +1.13.99:1.1.2:2.3.3:1.13.12 +1.1.1:1.2.4:2.3.3:1.2.3:1.1.2:1.2.7 +1.1.1:5.3.1:2.7.1:1.1.1:1.1.1 +5.3.1:1.1.1:4.2.1:2.1.3:2.5.1:2.8.3 +4.3.2:2.6.1:4.2.1:3.1.4:1.1.5:3.1.3:1.2.5 +4.4.1:3.6.1:2.1.1:1.14.13:2.6.1 +2.6.1:1.3.98:3.5.4:1.1.1:3.7.1 +1.1.1:1.5.8:1.3.1:2.7.1 +9.9.9:3.6.1:1.1.1 +1.1.1:2.7.1:1.1.1 +1.1.1:1.1.1 +9.9.9:2.3.1:1.1.1:2.7.1:5.4.2:1.14.14:1.13.11:4.2.1:1.1.1:1.17.4 +5.4.2:1.13.11:2.3.1:5.1.99:4.2.1:4.4.1:2.7.1:2.3.1 +2.3.1:2.8.3:2.1.1:1.1.1:1.1.1:6.2.1:4.4.1:1.1.1:1.1.1:2.6.1:1.2.1:4.2.1 +2.7.1:1.1.1:2.2.1:2.8.2:5.4.99:1.8.1 +1.14.14:1.2.1:2.7.4:4.2.3:1.13.11 +2.7.8:3.1.3:4.1.2:1.3.5 +3.1.1:4.1.1:9.9.9:1.1.1 +5.5.1:4.2.1:2.4.2:4.1.2:1.2.4:1.1.1 +5.4.99:3.6.1:2.1.2:1.13.12:2.1.1 +1.1.1:4.4.1:2.6.1:2.7.1:1.2.7 +2.7.1:1.14.14:2.3.1:2.3.1:1.8.1:1.1.3:2.7.1:1.1.1:2.3.3 +4.1.1:4.2.1:3.1.3:2.7.7:6.2.1:1.4.3:4.1.1 +1.14.14:1.1.1:1.13.99:4.1.1:4.3.3:6.4.1:1.1.2 +5.3.1:1.1.1:1.1.1:1.1.1:6.2.1:1.3.1:1.1.1:1.1.99:1.13.11 +4.2.1:3.1.1:2.3.1:4.1.1:2.7.7:1.1.2 +2.7.7:1.1.2:1.2.3:2.7.1:1.2.1 +1.8.1:2.3.1:1.1.98:1.1.1:1.1.5 +1.1.2:1.13.11:2.7.1 +6.2.1:1.1.5:6.4.1:1.2.1:2.7.7:1.1.1 +5.4.99:1.1.1:1.1.1:3.5.4 +4.1.3:2.8.1:2.8.3:1.1.5 +2.1.1:5.3.1:1.1.1:4.1.3 +5.3.1:1.17.4:5.3.1:2.3.1:4.1.3 +2.3.3:1.1.3:1.1.1:2.1.2:1.1.1:1.14.14:4.99.1:1.1.3:1.13.11:2.7.1 +1.1.2:1.1.1:1.14.15:9.9.9:1.1.5:3.4.24 +1.1.1:1.1.1:1.1.2:2.7.1 +1.13.11:4.2.1:2.7.1:1.14.18:6.2.1 +2.6.1:1.1.1:4.1.1:4.1.2:1.14.11:9.9.9 +3.2.1:1.1.1:2.8.3:1.13.11:1.1.1:1.1.1 +6.4.1:2.1.1:2.8.3:4.4.1:1.14.13:1.14.14:1.2.7:6.4.1 +1.13.11:2.3.1:1.1.1:6.2.1:1.14.14:1.12.98 +3.1.2:2.7.7:1.1.3:1.2.1:1.1.1:1.14.14:1.1.1:2.8.3:1.1.1:5.1.3 +1.14.14:1.13.11:1.1.1:1.5.3 +2.7.1:2.7.1:2.7.4 +2.7.1:1.11.1:6.2.1 +1.1.1:4.1.1:6.4.1:9.9.9:1.1.1:1.1.2 +5.1.3:1.13.11:3.1.3:2.7.8:1.1.1:3.1.1:4.2.1 +3.7.1:1.1.1:2.5.1:3.1.3 +1.7.1:1.1.1:6.2.1:4.1.1:2.6.1 +2.8.3:1.13.11:5.3.3:5.3.3:1.1.1 +5.3.2:1.14.15:5.4.2 +1.1.1:2.3.1:4.2.1 +4.3.1:6.3.4 +1.14.14:1.14.11:1.1.2:1.13.11:1.13.11:2.7.1:1.1.1:1.1.1:2.3.1:3.1.2 +1.13.11:5.3.1:4.2.1:3.1.4:2.7.1:3.5.4:1.1.2:6.3.5:6.3.5 +1.5.8:2.8.3:2.7.6:4.1.1 +5.3.1:1.17.3:3.1.1:4.1.3:4.1.1:1.1.1 +1.1.1:1.1.1:2.3.1:1.1.1 +1.14.14:1.1.5 +3.1.2:2.7.1:3.1.1:1.1.1:1.1.1:2.7.1 +2.5.1:1.13.11:1.14.15:5.4.2:2.6.1:1.1.1:1.8.2:1.1.1 +1.2.1:6.4.1:2.2.1 +1.1.1:1.1.2:1.11.1:1.1.1:1.17.4 +3.6.1:1.1.1:5.5.1:1.1.98 +4.2.1:1.1.1:1.3.8:1.3.1:2.3.1 +1.14.11:1.1.1:2.7.7:1.1.1:1.1.1:2.3.1:3.1.1:1.1.1 +4.2.3:1.2.4 +4.3.1:5.1.2:2.6.1:4.1.1:2.1.1 +1.1.1:5.4.2:4.2.1:5.5.1:1.14.14 +1.7.1:2.7.1:2.3.1:1.14.14:1.14.13 +1.2.1:1.3.1:4.2.3:1.2.1:1.2.1 +1.1.1:2.4.2:1.13.11:5.4.2:4.2.1 +3.1.4:1.8.1:2.1.1:1.14.11:1.1.1:1.2.1:1.1.3:1.2.4:6.3.4 +2.3.1:3.6.1:1.5.8:9.9.9:6.4.1 +1.5.8:5.3.3:5.3.1:1.2.5:2.1.2:3.2.2:2.8.3:1.14.13:5.4.2:2.7.7:2.3.1 +1.2.1:2.7.7:1.8.1:2.7.2:2.3.1:2.8.3:1.1.1 +1.14.13:3.1.2:4.1.1:1.3.1 +2.3.1:3.3.1:3.1.3:4.2.1:4.3.1:1.4.3 +1.11.1:1.1.1:2.1.1:4.1.1:2.6.1:6.2.1 +6.4.1:5.4.99:1.1.2:1.1.5 +2.3.1:5.3.1:4.4.1:4.2.1:5.4.2:6.2.1 +5.3.3:5.3.1:1.2.7:4.3.1 +1.13.11:4.1.2:5.1.3:4.1.2:2.3.1:1.1.1:1.1.1:2.3.1:1.1.1:2.7.1 +4.2.1:3.1.3:1.14.14:1.11.1:1.1.1 +1.13.11:3.1.1:1.1.1:2.1.4 +2.3.1:2.6.1:3.1.2:4.1.2:4.1.2 +2.7.1:4.2.1:1.2.1:4.1.3:1.1.1:1.1.1:1.13.11 +1.1.1:2.3.1:2.4.2:1.1.1:1.2.1:1.3.1:5.4.2:1.1.1:1.13.11:1.13.11:2.7.4 +1.1.1:1.1.3:2.5.1:1.13.11:3.1.2:3.5.1 +2.6.1:1.1.1:2.3.1:1.1.1:1.1.1:1.5.8 +2.8.1:1.18.1:4.2.1:1.1.1:1.1.1:1.14.14:2.1.1 +2.1.1:3.1.2:9.9.9:2.7.1:1.1.3:1.13.11 +2.7.1:1.1.3 +4.3.1:1.1.5:1.1.98:3.1.3 +6.4.1:1.2.5:1.13.11 +2.3.1:2.7.1:6.3.2:5.1.3:3.1.1:1.1.1 +1.1.1:3.1.2:3.5.4 +1.11.1:1.5.8:6.3.5:4.3.3:1.14.16:1.1.1:2.2.1:4.4.1 +1.1.1:2.6.1:2.3.1:2.5.1:1.1.1:1.1.3:2.7.1:1.3.8 +3.1.1:1.14.19:3.5.2:5.3.1:2.7.7:2.7.7:5.3.1 +1.1.1:1.14.13:9.9.9:2.3.1:2.5.1:2.3.1:2.7.2:1.1.1:4.2.1:5.3.1:4.2.1:1.1.1:2.7.9:4.4.1 +2.1.1:2.7.1:4.1.1 +2.6.1:4.3.1:1.1.1 +2.7.1:2.7.1:2.3.1:1.5.8:1.2.4:2.6.1:4.2.1 +1.1.1:1.1.1:1.1.1:4.1.3:5.4.2:2.3.1:2.4.2:1.14.99:2.3.3:2.7.1:2.3.1:4.2.1:4.1.1:1.1.1 +2.7.1:4.2.3:2.6.1 +4.4.1:3.1.3:1.1.1:4.1.1 +1.1.1:1.14.14:6.4.1:3.1.3:2.3.1:1.1.1:2.3.1:1.1.1 +4.1.1:2.6.1:5.4.2:2.5.1:2.6.1:3.3.1 +6.3.4:1.14.19:2.8.3:3.5.1:4.2.1:6.2.1:3.1.2 +1.1.1:2.6.1:3.1.2:2.5.1 +4.4.1:3.1.1:1.3.1:1.1.1:2.7.9 +1.8.1:5.3.1:1.1.5:2.7.4:1.1.5:4.4.1 +4.1.1:2.7.9:4.1.1:3.5.99:6.4.1 +4.1.2:1.14.16:1.2.1 +2.1.1:5.4.2:6.2.1 +4.1.1:1.1.2:2.1.1:1.2.4 +1.1.1:6.2.1:5.5.1:2.7.2:3.1.2:6.2.1:1.1.1:2.6.1:5.3.1 +2.7.7:3.1.1:2.3.1:1.1.1 +2.7.1:2.1.1:1.13.99:3.1.1:4.1.1 +1.8.1:1.1.1:5.4.2:1.14.15:1.1.1:2.7.1:2.3.1 +1.1.1:2.7.7:1.1.1:2.1.1:2.7.2 +1.1.1:5.1.2:1.1.1:2.3.1:3.1.3:1.1.1 +2.5.1:1.1.1:4.2.1:1.14.16:4.1.1:2.7.1 +1.1.1:1.14.14:2.7.7:3.5.1:1.1.1 +1.14.13:2.7.1:2.3.1:2.4.2:4.1.3 +4.2.3:1.1.1:6.3.5:2.7.7:6.3.2 +4.2.3:2.6.1:1.13.11:9.9.9:2.8.3:1.17.1 +3.1.4:1.14.11:4.1.3:2.6.1:2.7.7 +3.5.99:1.2.5:2.3.1:9.9.9:1.14.19 +4.2.1:1.14.13:3.1.3:2.7.4:1.1.1:9.9.9:5.1.99 +9.9.9:4.2.1:1.2.4:4.2.1:2.7.1 +1.13.11:5.1.3:1.1.1:1.5.8:2.7.9 +1.13.11:1.3.1:1.13.11:2.7.7:4.1.1 +1.1.2:2.3.1 +4.4.1:2.7.1:1.17.1:3.1.3:2.7.1:4.1.1 +2.3.1:6.2.1:4.2.1:2.1.1:2.1.1:2.2.1 +2.3.1:1.8.7:4.1.2:5.3.1 +2.7.7:4.1.1:1.3.1:3.1.2:5.3.3:2.7.7:1.1.1 +2.7.7:1.1.1:4.1.2:6.3.5:1.1.99:2.6.1:6.2.1:1.1.1 +4.3.2:1.2.1:3.5.2:2.7.1:2.3.1 +2.6.1:3.5.1:4.1.2:1.13.11:1.1.1:1.1.1:1.1.1:2.7.1:1.1.1:1.14.14 +5.4.2:1.14.14:1.1.1:1.1.1 +1.1.1:6.4.1:9.9.9:2.7.7:2.6.1:3.5.5:2.6.1 +5.5.1:1.13.11:1.2.1:2.7.1 +1.5.1:4.2.1:2.7.1:2.3.1 +3.1.3:1.1.1:4.2.1:6.2.1 +4.1.1:1.4.4:9.9.9:1.1.1 +4.2.3:3.1.3:5.1.3 +1.14.19:2.3.1:3.1.2:1.1.1:1.2.5:6.2.1:6.2.1:1.1.1 +2.7.1:2.2.1:5.5.1:4.1.2:3.1.1:1.2.4:2.5.1 +3.5.4:2.6.1:3.3.2:3.1.3:1.1.5:1.13.11:1.1.1:1.1.1 +2.8.3:2.7.7:1.1.5:1.1.1:2.7.1:1.14.14:1.2.1:1.14.16 +1.1.1:3.1.1:3.1.2:3.5.3:3.1.2:5.3.1:1.14.99:2.7.1:5.5.1 +2.7.7:2.7.1:3.6.1:1.1.1:4.1.1:1.1.1:4.1.2:3.7.1:2.7.1 +9.9.9:2.3.1:1.1.2:1.14.14 +1.2.1:1.14.13:4.2.1:2.7.1:2.3.1 +3.1.1:5.5.1:6.3.4:1.1.1:4.1.1:9.9.9 +4.2.1:1.1.1 +2.7.2:1.1.3:6.4.1:1.14.15:1.1.1:4.2.3 +2.3.1:5.3.1 +2.2.1:2.2.1:1.14.13:5.3.1:2.7.1:6.2.1:1.2.4:1.14.13 +1.3.8:1.1.1:1.13.11:5.1.3 +5.3.1:2.4.2:6.2.1:1.14.15 +1.2.7:2.4.2:1.1.1:1.4.3:1.1.1 +1.1.2:1.1.1:1.1.1:2.3.3 +4.2.1:1.1.1:2.2.1:3.5.1:5.1.3:4.2.3:1.5.8 +2.2.1:9.9.9:2.3.1:1.1.1:1.1.5 +2.7.1:1.14.14:1.2.1 +2.1.1:1.1.1:1.1.1:4.2.1:2.7.6:2.3.1:3.3.1:4.1.2:2.2.1:2.7.1:3.13.1:3.1.2:1.13.11 +4.2.1:2.3.1:2.7.1 +3.6.1:1.1.1:2.7.1:1.1.1:2.3.1 +1.13.11:2.1.2:1.1.5 +4.2.1:1.3.1:2.3.1:4.4.1:2.7.1 +1.1.1:1.1.1:1.3.1:2.7.7:1.13.11:2.3.1:1.8.4 +2.7.1:2.7.4:1.1.1:1.1.99:4.1.2 +3.5.3:2.7.7 +5.4.99:1.1.1:6.4.1:2.7.1 +9.9.9:2.3.1:4.3.1:1.1.1 +1.1.2:1.5.3:1.2.7:1.3.1:1.17.1:1.1.1:1.14.14:3.6.1 +1.1.1:1.1.1:2.6.1:1.14.14:2.7.1 +1.17.3:2.7.1:1.1.1:2.6.1:3.3.2 +1.2.1:1.1.1:2.7.1:2.7.7:5.3.1:2.7.7 +4.2.1:5.3.1:2.7.2:1.1.1:2.3.1:5.3.3:2.6.1:2.7.7:5.3.1:1.1.1:4.2.1 +3.6.1:4.4.1:2.3.1:1.13.11:2.3.1:1.17.99:4.2.3 +4.2.1:1.1.1:1.1.5:1.17.4:1.2.1:2.7.1:2.6.1:1.8.1:2.7.7:1.14.15 +4.1.1:2.7.2:2.3.1:1.1.1:1.1.2:2.3.1:1.1.1:6.4.1 +2.3.1:1.1.1:5.1.3:1.13.11 +2.3.1:2.3.1:2.3.1:4.4.1:2.7.7:4.1.3:2.7.7 +2.7.7:3.1.2:1.1.1:9.9.9:3.1.2:5.3.3 +9.9.9:1.2.1:5.4.2:2.7.9 +1.1.5:1.13.11:4.2.1 +2.6.1:2.7.1:2.3.1:2.7.1:5.4.2 +2.7.2:1.14.13:1.1.1 +1.1.1:2.3.3:1.14.15:2.6.1 +1.1.1:1.1.3:4.1.2:3.1.3:6.2.1 +2.3.3:4.4.1:4.2.1:1.11.1:1.1.1 +2.1.1:4.2.3:5.4.99:1.1.1:1.2.1 +2.3.1:1.3.8:2.7.1:1.1.1:3.1.1:1.14.99:1.14.14 +1.14.16:1.3.1:6.2.1:1.2.1 +1.1.5:5.4.2:9.9.9:2.1.2:4.3.1 +2.7.1:3.1.3:2.6.1 +1.1.1:1.1.1:2.7.7 +9.9.9:1.1.1:1.2.1:1.17.4:1.17.1:5.1.3:9.9.9:1.14.13:1.5.3:5.3.1:1.1.2 +3.1.3:1.1.1:1.1.1:4.2.1:5.3.99:1.1.1 +1.1.1:1.2.1:2.3.1 +2.8.3:1.1.1:3.1.3:4.1.1 +2.3.3:1.1.1:1.4.1:1.1.1:1.1.1:2.7.4 +1.14.14:1.14.13:1.1.1:1.14.19:5.5.1:5.3.2:2.7.1:1.5.1:1.1.1:1.2.1:1.2.1:1.5.8 +2.7.1:4.2.3:1.13.11:1.1.98:1.1.1:1.1.1 +4.1.2:1.2.7:2.6.1:4.2.1 +2.7.8:1.1.1:1.1.1:2.6.1:1.2.1:1.2.1:1.14.14 +1.1.1:9.9.9:4.2.1:3.5.4:2.7.1:1.1.1:1.3.8:1.17.1:2.6.1 +1.3.8:2.7.1:5.2.1:2.7.1:1.17.7:1.1.1 +2.7.8:1.2.1:3.1.4:1.13.11:2.3.2 +1.2.1:1.2.5:1.14.14:1.1.1:2.3.1 +4.3.1:3.1.4:3.1.1:2.7.1:4.3.1 +4.2.1:1.1.1:6.3.2:5.3.99:2.7.8 +2.7.1:1.1.1:2.7.4:3.1.3:2.7.1 +1.2.4:2.1.1:1.5.3:5.4.2:4.2.1 +5.3.1:2.7.7 +6.2.1:3.5.2:6.2.1:3.1.3:6.2.1:1.1.2:1.2.1:5.4.2 +2.7.1:1.2.4 +2.7.1:4.2.3:4.1.2:2.6.1 +5.3.1:1.1.5:2.3.1:2.3.3 +3.7.1:2.7.7:2.6.1:4.2.1 +2.1.1:1.2.1:2.3.1:2.7.1:3.5.2:1.2.1:2.3.1 +1.13.11:1.1.1:5.4.2:6.2.1 +5.1.99:1.14.18:1.14.16:3.5.1:1.3.5 +2.5.1:5.4.2:3.1.1:1.1.5:1.14.13:1.2.1:1.3.8:1.13.11 +3.1.1:5.5.1:1.1.5:1.1.1 +1.2.1:1.14.12:4.4.1 +3.1.2:2.6.1:6.3.1:1.13.99 +5.4.2:3.1.3:4.2.1:2.7.2:2.7.9 +4.1.1:1.17.1:2.6.1:2.7.4:2.7.7:1.2.1:1.1.5:1.18.1:1.14.14 +5.4.2:2.7.7:1.2.1:4.3.1:1.5.1:1.1.1:4.1.1 +4.1.3:5.1.3:1.14.13:2.7.1 +1.8.1:1.13.11:4.2.2:3.5.1:3.1.2:1.1.1:1.1.1 +2.2.1:2.7.1:2.3.1:1.13.11:1.1.99 +2.6.1:2.7.4:1.14.13:3.1.1:1.1.1:2.6.1:4.4.1:2.3.1 +1.8.4:4.1.2:3.1.2:2.1.1 +6.2.1:2.7.7:5.3.1:4.1.1:1.2.7:1.2.7 +2.7.1:3.1.1:2.4.1:6.3.4:4.2.1 +1.1.1:1.13.11:2.3.1:1.1.5:1.1.1:2.4.2 +1.13.11:1.8.1:2.6.1:4.1.2:5.3.2:1.1.1 +6.3.4:1.1.1:2.7.7:2.7.1:1.5.8:4.2.1:1.1.1 +4.2.1:1.2.7:2.3.3:6.4.1:3.1.1:2.3.3:1.3.1:4.2.1:5.3.1:1.1.1 +2.6.1:1.13.11:1.4.3:1.2.1 +4.3.1:2.6.1:1.14.14 +2.3.1:4.4.1:1.1.1:1.1.1 +2.8.3:4.4.1:2.5.1 +3.1.4:4.1.3:1.2.4:1.2.4 +1.13.11:3.5.1:1.14.13:4.2.1 +5.4.2:1.5.3:2.7.1:2.7.4 +2.6.1:2.7.1:2.7.7:1.1.1:3.7.1:1.1.1:1.14.18:5.4.2 +1.1.1:1.1.1:1.14.14 +1.1.1:4.2.1:4.2.1:2.3.3:1.14.14:2.7.1:2.8.3 +6.2.1:2.3.1:6.2.1:1.14.13:1.1.1 +3.1.3:1.1.1:5.99.1:4.2.1 +5.1.99:2.5.1:1.13.99:4.4.1:2.4.2:4.1.1:1.14.14 +2.7.1:4.3.1 +3.6.1:5.4.2:1.3.1:3.1.1:1.1.5:5.1.2:2.7.8 +2.6.1:1.1.5 +1.1.1:1.1.1:1.1.1:1.1.1:2.6.1:1.2.4:6.3.2 +3.1.4:1.1.1:1.1.1:1.1.1 +1.3.1:2.7.1:3.1.3:1.1.1:1.1.2:9.9.9 +1.1.1:1.13.11 +2.7.7:1.14.13:1.3.99:3.1.3:4.4.1:1.5.1 +1.5.8:4.4.1:1.2.7:4.4.1:4.2.1:2.8.3:1.1.98:2.6.1:1.13.11:1.1.5 +4.2.1:1.1.1:2.7.8:1.1.1 +9.9.9:4.4.1 +4.2.1:3.1.4:1.1.1:2.7.7:3.1.1:4.2.1 +1.14.11:1.1.1:2.6.1:2.5.1:1.1.1:4.1.3:2.7.1:1.14.16:1.1.1 +3.5.1:1.1.1:5.3.3:2.3.3:4.2.1:5.4.2 +3.1.2:1.4.3:2.7.4 +2.8.3:1.17.99:2.6.1:1.8.1:2.3.1:3.1.3:2.7.7:3.1.2 +1.2.1:3.5.1:2.7.7:1.1.5:2.7.4 +1.11.1:2.3.1:2.7.7:2.8.3:2.3.1:6.3.5:4.2.1:1.5.8:1.1.1 +3.1.3:2.6.1:1.1.1:2.3.3:1.1.1 +4.1.2:1.1.1:3.1.3:1.1.5:1.1.2 +5.2.1:5.2.1:1.4.3:3.1.4:2.6.1 +2.3.1:2.7.1:3.5.4:1.1.1:1.1.1:1.1.3 +1.14.14:3.1.2 +5.1.3:2.6.1:2.1.1:2.7.7:1.14.13:1.1.1:2.7.1 +3.1.2:3.5.3:4.2.1:6.4.1:2.8.3:1.14.13 +3.1.1:1.3.1:4.2.1:6.2.1:3.1.4:4.4.1:2.6.1 +1.1.1:4.2.1:1.1.1:1.14.14 +1.1.5:9.9.9:1.14.13:2.3.1:4.1.2 +1.1.1:2.7.1:2.6.1:1.1.1:4.1.2:1.1.5 +1.1.1:1.2.7:2.7.7:1.18.1:6.4.1 +1.2.1:1.1.1:1.1.1:4.4.1:2.8.3 +1.1.99:2.7.1:3.1.3:2.4.2:3.1.3:1.4.3:5.3.1 +3.1.2:9.9.9:5.3.1:1.1.1:1.13.11:1.1.1:1.2.1 +1.1.1:1.1.2:4.2.3:2.1.2:2.4.2:4.1.1:1.1.1:1.3.1:5.3.1 +6.4.1:1.2.1:1.3.5:5.3.2:5.5.1:4.1.1:3.5.4 +1.1.99:1.1.1:1.14.11:2.3.1:4.2.1 +3.1.3:1.1.1:2.6.1:1.1.1:2.6.1:2.3.1:1.2.4:3.5.3:1.13.11:1.14.14 +4.2.1:3.1.3:2.8.3:4.1.2:5.3.1:1.1.1:1.1.1:1.1.1 +2.6.1:1.1.1:1.14.11:2.7.1:1.1.3:4.2.1 +2.7.7:6.3.4:1.17.99:2.7.7:1.1.1:1.13.11:1.1.1:3.1.3:2.3.1:2.7.1:1.2.7 +1.1.1:3.7.1:5.3.1:3.1.2 +2.2.1:2.7.7:3.3.1:1.5.3:1.1.2 +1.1.1:6.4.1:3.6.1:1.1.1 +1.8.3:1.2.1:3.6.1:1.14.13:1.1.5:6.2.1 +1.1.1:2.5.1 +2.1.1:5.3.1:2.7.1:5.3.1:1.1.2 +5.3.1:4.2.1:4.2.3:2.7.4:5.3.3:5.3.3 +2.7.1:1.1.1:2.7.1 +4.1.2:4.2.1:1.1.1:4.1.1:1.1.1:4.2.1 +2.4.2:2.3.1:6.2.1:5.3.1 +3.1.1:1.1.1:2.3.1 +1.14.14:1.14.15:5.3.3:6.2.1:1.1.1:1.3.5 +1.1.1:2.6.1:5.5.1:2.7.1:1.1.2 +5.1.1:2.3.1:1.1.1:1.1.5:2.8.3 +5.3.1:1.1.1:9.9.9:1.2.4:5.5.1:1.1.1:1.8.3 +3.1.2:4.4.1:5.4.2:1.2.4:1.14.12:1.13.11:1.2.1 +1.14.14:6.2.1:2.7.1:3.1.4 +2.3.1:2.7.1:3.5.4:1.2.99:3.5.4 +6.4.1:3.6.1:1.13.11:2.3.3:2.6.1:2.3.3 +1.1.2:4.2.1:9.9.9:1.11.1 +1.1.1:2.8.3:1.17.4 +1.1.1:2.7.1:2.1.1 +2.1.1:1.14.15:3.1.3:2.7.7:2.7.7 +1.8.99:1.13.11:3.1.3:1.1.1:2.6.1 +6.2.1:2.3.1:3.1.1:1.1.1:2.3.1:5.3.1:4.1.1:2.5.1:2.7.1:1.14.14:1.14.15 +2.6.1:1.13.11:1.1.1:3.5.1 +5.3.1:3.5.2:4.2.1:1.3.8:5.3.1:2.3.1:5.4.2 +2.3.1:3.5.1:1.4.9:2.6.1:6.2.1:1.2.1:1.3.1 +2.4.2:4.2.1:3.6.1 +1.1.1:1.8.4:1.1.1:1.2.7:3.5.3:4.2.1 +5.1.2:2.3.1:2.3.1:1.13.11:2.3.1 +3.1.1:2.5.1:2.7.1 +4.2.1:1.1.1:1.13.11:2.1.2:2.3.1:1.14.12 +1.8.1:4.1.3:1.1.1:1.18.1:2.3.1 +1.2.1:1.3.1:1.13.11 +1.2.7:2.1.1:2.3.1:1.1.1:3.3.1 +4.1.1:1.2.1:1.3.1:3.1.3:1.1.1:1.1.1 +1.1.1:1.1.1:1.1.1 +1.1.99:1.17.3:2.6.1:5.3.3:1.14.15:5.3.1:6.4.1:2.7.2 +1.2.1:1.1.1:3.1.3:3.1.3 +1.1.1:1.3.1:1.14.11:2.6.1:1.5.3:1.1.1 +1.8.3:4.1.1:1.1.1:2.3.1 +1.1.5:1.2.7:2.7.1:1.2.1:3.1.1:2.7.1 +1.2.4:1.14.14:4.1.1:2.7.7:3.1.3:1.2.1 +2.7.1:9.9.9:4.4.1:2.3.1 +5.4.2:4.2.3:6.2.1:2.7.1 +4.1.1:2.3.1:4.1.1:1.14.13:5.4.2:3.1.1 +2.3.1:1.2.1:1.13.12:1.1.1 +1.3.5:2.7.1:1.13.11:1.1.1:1.1.1 +4.2.1:4.6.1:2.1.1:4.2.1:1.1.1:1.14.15:2.7.1:1.1.1 +1.1.1:9.9.9:1.1.1:1.8.99:1.3.5:2.7.2:1.14.14 +1.14.13:1.1.1:1.1.1:1.1.1 +2.2.1:1.13.11:2.6.1:1.2.5:9.9.9:1.1.1:1.5.8:4.2.1:1.13.11:4.4.1:1.1.1 +1.1.1:2.7.4:1.1.1:1.1.1:9.9.9:3.1.4 +2.7.1:2.4.2:2.3.1:6.2.1 +2.3.1:1.3.1:5.4.2:2.3.1:1.1.1 +1.1.1:1.1.1:1.1.1 +1.18.1:1.2.1:2.6.1:2.7.7:2.1.4:2.7.7 +2.1.1:4.3.1:3.7.1:6.4.1:4.1.3:3.1.3 +1.14.13:3.1.1:4.1.1:5.5.1:5.4.99:3.1.1:2.3.1 +1.1.1:1.14.14:1.11.1 +2.1.1:1.1.1:1.14.13:3.4.24 +1.1.1:3.1.3:2.7.7:5.4.2:2.7.1:1.1.1:4.2.3 +1.1.1:1.14.14 +2.6.1:3.7.1:4.1.2:9.9.9:1.14.12:1.1.1:1.1.1:1.1.1 +2.6.1:2.4.2:1.1.1:1.17.99 +2.6.1:3.1.3:1.1.1:4.1.1:1.1.1:2.6.1:1.1.1 +9.9.9:5.3.1:1.8.7:1.1.1:2.5.1 +5.5.1:1.3.8:2.3.1:1.3.1 +5.4.2:1.1.1:2.3.1:1.1.1:2.3.1:5.4.2 +1.1.1:2.3.1:1.1.1:1.3.1:1.1.1:4.2.1 +1.1.2:6.4.1:4.6.1 +4.1.2:4.3.1:1.1.1:2.4.1:1.8.1:2.1.1:2.7.7 +1.14.15:1.2.7:4.1.3:6.2.1 +4.1.1:2.8.3:1.3.5:4.2.1:6.4.1:2.2.1:1.2.1 +2.7.1:4.2.1:9.9.9 +5.3.1:1.13.11:1.8.2 +2.7.9:2.3.1:1.2.5:2.3.1:2.7.8:1.1.1:2.4.2 +9.9.9:1.8.1:1.14.13:5.3.1 +9.9.9:6.2.1:1.13.11 +2.7.1:2.7.7:2.7.1:2.3.1 +4.2.1:1.13.11:1.3.7:3.6.1:5.3.1:2.1.1 +1.1.1:1.1.99:2.7.1:1.2.1 +2.4.2:1.1.1:2.7.1:1.2.7:1.2.1:1.14.11 +2.7.4:3.1.3:3.6.1:6.2.1:6.4.1:1.1.1:1.1.1:4.2.3:3.1.1 +5.3.2:1.1.1 +2.7.1:1.1.2:1.3.1:4.1.1:1.1.1 +1.1.1:1.1.1:1.1.1:3.7.1:5.4.2 +2.1.1:1.2.1:9.9.9:2.3.1:1.2.7 +2.2.1:1.1.1:2.7.2:1.14.13:1.14.13 +4.1.3:4.4.1:2.3.3:2.7.1:2.2.1:1.1.1:4.2.1:1.13.11 +1.14.13:4.1.1:2.4.2:1.17.1 +4.2.1:4.1.2:6.3.4:2.7.4:1.14.13:1.13.11 +1.2.7:1.1.1:1.2.1:3.1.2:4.2.1:4.2.1:4.2.1:2.1.2:1.3.1:1.13.11:5.3.1 +6.2.1:1.3.8:5.3.1:5.3.3 +5.3.1:3.1.2:1.1.1:2.7.1:2.5.1 +1.1.1:1.1.1:4.4.1:2.6.1:1.8.1:1.2.1 +1.14.15:2.6.1:2.7.7:4.1.1:2.7.7:6.3.3:1.2.5 +4.1.1:4.1.1:1.1.1:2.3.1:1.13.11:1.1.1 +2.3.1:1.1.5:2.5.1:2.6.1:1.2.7:2.3.1:1.1.1:1.1.1:1.14.13 +2.3.3:1.13.11 +3.1.3:1.1.1:2.7.1:6.3.3:4.2.1:1.14.13:1.2.5 +1.1.1:2.3.3:1.1.1:1.14.13:2.7.2:4.2.1:2.1.4:9.9.9 +1.2.7:1.1.5:2.7.7:2.6.1:1.1.1:2.7.1 +2.7.9:1.1.2:1.14.15:3.1.2 +1.1.2:4.2.1:5.4.2:1.1.1:4.2.1:3.1.3:9.9.9:5.5.1:3.1.4 +1.2.1:4.2.1:9.9.9:1.1.1:2.7.1:1.1.1 +4.2.3:2.7.7:1.1.1:5.5.1:5.3.1 +1.1.1:2.1.2:4.2.1:2.3.1 +4.1.2:4.1.3:2.7.7 +5.3.1:5.5.1:3.1.3:4.1.1:2.3.1:4.2.1:4.2.3:2.8.3 +2.7.1:1.1.1:3.1.3:9.9.9:1.3.1 +5.4.99:2.5.1:3.1.4:1.1.1:4.1.2 +1.1.2:1.13.11:5.3.2:4.1.1:1.1.1:5.3.1:1.14.13:4.2.1:4.2.1:5.3.1 +1.18.1:6.2.1:2.7.1:1.2.1 +4.2.1:2.7.7:4.4.1:1.1.1:4.2.1 +3.1.1:1.1.5:3.2.2:2.7.6:1.1.1:1.2.5 +5.1.3:3.1.2:2.7.1:3.2.2:3.1.2:2.7.2:4.2.3:1.1.99:2.7.1 +1.2.1:2.1.4:4.2.3 +3.5.1:2.3.1:5.4.2:1.1.1:2.2.1:1.17.1:1.13.11 +2.7.7:2.3.1:1.14.14:5.4.2 +1.2.1:4.2.1:1.1.1:4.4.1:2.8.3:2.3.1:9.9.9:1.1.3:2.8.3:2.2.1:1.1.1 +3.6.1:1.13.11:2.1.1:1.1.1 +3.1.3:2.1.2:2.6.1:1.14.11 +2.4.2:1.1.1:2.7.1:1.1.3 +2.7.8:1.14.15:1.2.1 +1.1.1:4.2.1:1.1.1:4.1.2:1.1.1:3.1.6 +1.17.1:1.1.5:1.3.1 +3.1.2:2.6.1:1.1.1:4.2.1:4.2.3:2.8.3:1.14.15:1.1.2:1.13.11:5.3.2 +1.14.13:1.8.2:4.1.1:4.2.1:3.6.1:5.1.3 +2.5.1:1.1.1:2.1.1:3.1.4 +5.3.3:4.1.2:1.1.1:1.5.1:6.4.1 +1.5.1:2.7.7:1.3.1 +4.2.1:3.1.1:4.3.1:1.1.1 +1.17.1:4.2.1:9.9.9:1.5.8:2.7.1:4.1.1:1.1.1:1.5.8 +2.8.3:4.4.1:3.7.1:1.14.15:1.5.1:2.7.7:1.13.11:1.8.4:4.2.1 +5.3.1:1.14.12:1.1.1:2.5.1:1.1.99:5.4.2:2.3.3 +3.1.2:1.17.4:1.1.1 +1.1.1:1.14.13:1.1.1:1.1.1:3.7.1 +2.6.1:3.1.2:1.5.1:1.2.1:1.12.98:1.13.12:1.1.1 +2.3.1:1.5.8:3.5.1:1.1.1 +1.14.15:1.4.4:2.1.1:1.1.5:2.3.1 +2.1.2:3.6.1:1.1.1:9.9.9:9.9.9:2.6.1 +4.1.1:3.1.3:3.5.4:2.7.7 +1.1.1:1.1.1:1.3.1:2.1.2:4.2.3:4.4.1:6.3.5:4.4.1:1.3.1:1.1.1:2.3.1 +2.3.1 +1.13.11:3.5.1:1.1.1:1.2.7:3.1.3:1.2.1:4.2.1 +2.7.2:3.1.3:1.3.5:1.13.11:1.14.13 +4.2.1:2.3.1:1.14.14:2.1.2:1.3.5:2.4.2 +1.14.14:1.1.2:1.13.11:5.5.1 +2.8.3:4.1.2:2.7.7:2.3.1:2.7.1 +1.2.1:1.3.8:2.7.7:3.1.2:2.3.1:4.2.1:2.1.3:1.13.11:3.6.1:2.7.1:1.14.13:2.3.1 +2.3.3:1.1.1:5.1.1:4.2.3 +9.9.9:1.1.1:1.1.1:2.3.1:1.1.2 +1.1.1:4.2.1:1.13.11:9.9.9 +4.1.2:1.8.7:1.1.1:1.5.1:3.7.1:6.2.1:1.8.1 +1.2.1:2.3.1:1.1.1 +3.1.3:1.1.1 +1.1.1:1.2.1:1.1.1:1.14.15 +2.3.1:1.14.15:4.2.1:5.1.99:4.1.1:4.2.3:1.1.1:1.1.1 +1.3.1:3.7.1:5.3.1:1.1.2:2.8.3:6.3.4 +2.7.7:3.5.1:2.2.1:1.1.1:1.3.1:2.3.1 +1.14.17:3.5.1:1.1.1:4.3.1 +2.5.1:2.5.1:1.1.1:3.1.1:1.1.1 +9.9.9:1.1.2:2.3.1:1.5.8 +6.2.1:1.4.1:1.1.2:5.3.1:1.1.1:2.6.1 +1.1.1:4.2.1:3.1.2:1.2.4:1.1.1:9.9.9 +1.14.15:4.4.1:1.4.3:1.1.1:1.1.1:1.3.1:1.1.1 +1.5.8:1.13.11:1.2.4:4.1.3 +4.2.2:5.3.3:1.1.1:2.7.9:2.3.1:1.14.13:1.1.1 +4.2.1:1.2.5:6.3.4:3.1.6:2.7.9:2.4.2:4.4.1:4.1.3:2.7.4:9.9.9:1.1.5:2.7.7 +4.1.2:1.1.1:1.17.7:3.1.3:1.1.1 +2.7.7:9.9.9:1.1.98:5.3.1:1.1.2:1.8.1:3.3.2 +1.1.1:1.1.5:2.1.2:3.6.1:4.2.1 +1.14.16:1.1.1:2.2.1:1.1.1:4.1.3 +1.4.3:1.1.1:3.1.3:6.2.1 +1.1.1:5.5.1:2.3.1:1.14.13:4.2.1 +2.3.1:2.7.1:6.2.1:1.2.4:1.1.1 +3.6.1:2.8.3:2.3.1:2.1.2:5.4.2:1.2.1:2.3.1:3.1.3 +1.14.14:2.1.2:3.1.1:1.1.1:2.3.1:5.4.2:4.2.1 +2.3.1:1.8.7:1.8.7:1.8.2 +1.14.11:1.1.1:1.1.1:4.2.1:1.13.11:1.1.1:1.17.4 +5.3.3:1.17.1:2.3.1:1.1.1:2.3.1 +5.4.2:1.2.7:2.3.1:3.5.4:1.3.8:2.7.4:1.2.7:2.7.1:1.14.14:2.8.3 +4.4.1:6.2.1:3.5.4:1.1.1 +1.1.3:1.1.1:5.3.3:2.3.1 +1.1.98:2.7.7:2.7.1:4.1.2:6.3.4:4.1.2 +3.5.4:4.2.3:1.5.1:2.1.1 +1.14.19:1.5.8:2.8.3:1.1.1:2.3.1:1.8.1:4.2.1 +2.3.1:3.1.3:1.1.1:3.1.3:1.14.14 +4.1.2:1.14.15:1.1.1:3.1.1:5.4.2 +4.1.3:4.1.1:3.1.4:1.13.11:2.7.1:1.1.1:1.13.11:6.2.1 +2.7.1:2.3.1:4.1.2:1.1.1:1.1.1 +2.7.1:1.13.11:2.7.7:2.3.3:1.2.1:1.14.16:2.7.1:2.7.1:2.3.1:2.7.1:2.2.1 +2.8.3:2.7.7:3.1.6:5.4.99 +4.1.1:2.3.1:6.3.2 +1.14.14:9.9.9:2.7.1:1.2.1:1.2.5:1.2.1 +1.18.1:4.1.1:1.2.1:1.1.1:1.5.3:1.14.16 +1.1.1:1.1.1:4.2.1:1.13.11:1.14.16:1.1.1:1.5.8:2.7.7:1.1.1:2.7.7:1.1.1:2.3.1:1.1.1:2.3.1 +2.7.8:1.14.13:5.4.99:1.1.1 +2.5.1:3.6.1:2.3.1 +5.4.2:4.1.1:2.1.1:1.14.13:5.4.99:1.14.15 +2.3.1:1.1.1:1.1.3:1.14.99:1.13.11:5.3.1:1.2.5 +6.2.1:1.2.1:9.9.9:4.4.1:2.3.1:3.1.3 +1.1.1:4.2.1:3.5.3:2.4.2:5.3.1 +9.9.9:1.2.1:4.2.1:9.9.9:2.7.6:4.1.1:4.2.1:2.7.7 +4.4.1:1.2.5:2.7.7:2.3.1:2.7.1:2.5.1:4.2.1:2.3.1:1.2.1 +1.14.11:1.1.1:1.2.1:4.1.1:3.6.1:1.1.1 +1.14.13:6.4.1:2.7.2:6.2.1:3.1.2:4.1.2 +6.2.1:1.1.1:2.7.7 +9.9.9:1.1.1:3.1.3:1.8.1:4.4.1:4.2.1:2.7.7:1.2.1 +5.4.99:1.1.1:6.2.1 +5.3.3:1.4.3:3.6.1:1.1.1:2.1.1:2.1.1 +1.1.3:1.1.1:6.3.4:4.4.1:4.1.1:5.1.1 +4.2.1:1.3.99:1.3.5:5.1.3:2.7.1:9.9.9:2.7.1 +4.1.1:1.1.2:3.5.1:2.7.1:1.1.5:2.7.7:3.1.3 +1.13.11:3.1.2:2.3.1:2.7.1:1.14.12:2.1.1:1.1.1:1.14.14 +6.3.5:4.2.1:2.7.7:1.13.11 +5.3.1:5.3.1:3.1.1:2.2.1:3.1.1:5.3.3 +1.17.1:4.2.1:1.2.1:1.8.1:4.4.1:1.2.3 +5.3.1:1.14.14:4.2.1:1.2.4:2.7.9 +2.1.2:4.1.3:2.7.7:1.14.14:4.4.1:6.3.4:1.14.14 +1.1.2:9.9.9:1.1.3:2.4.2:1.1.3:1.1.1 +3.1.3:2.7.1:1.14.15:3.5.4:9.9.9 +4.3.1 +1.17.1:1.14.12:2.4.2:4.1.2:4.1.1:2.1.1 +1.1.98:1.1.1:1.1.3:1.14.19 +1.2.7:2.8.3:1.1.1:5.3.1:2.3.1:5.1.3 +2.7.1:1.2.1:5.4.2:2.7.6:1.1.5:5.4.2:3.1.1:2.8.3:2.7.7:5.3.1:2.7.2 +1.1.2:3.1.3:2.7.7:1.2.7 +3.1.3:2.2.1:2.3.1 +1.1.1:2.3.1:4.2.1:6.2.1:2.5.1:4.3.2:4.2.1:3.1.6:1.1.1 +2.6.1:3.2.1:2.7.1:3.6.1:2.3.1 +1.1.5:1.3.5:1.2.7:2.1.2 +1.1.2:2.7.1:5.4.2:3.1.2:1.1.1:1.4.3:9.9.9:1.1.1 +1.1.1:1.1.1:2.7.1:2.7.4:3.1.3:2.7.1:1.2.1:3.1.2 +1.1.1:2.7.1:2.3.1 +2.4.2:4.1.2:2.3.1:1.14.11:1.8.1:1.1.3:5.3.1:1.1.1:1.1.1:1.1.1 +2.8.3:4.1.2:1.1.1:1.2.1 +2.3.1:3.1.2:1.2.3:4.1.3 +9.9.9:5.5.1:2.7.2:2.4.1:4.4.1 +1.14.11:1.14.14:1.1.1:6.3.4:2.3.1 +2.5.1:2.4.2:6.3.4:4.2.1:1.1.1 +1.17.1:2.4.2:1.1.1:1.1.1 +2.7.4:4.2.1:2.6.1:1.11.1:4.2.1 +2.7.1:5.1.99:5.3.1:2.8.3:1.2.3:1.3.8:1.14.14:2.1.1:1.8.99 +1.1.1:5.3.1:5.3.1:2.7.9 +4.1.1:3.1.3:3.1.1:4.2.1:3.7.1 +1.2.7:4.1.3:4.1.1:4.1.3:1.1.1 +1.23.5:1.4.4:2.1.4:1.1.1:5.3.1:2.6.1:3.5.4:2.1.1 +3.1.1:3.1.6:4.1.2:1.3.1:9.9.9:1.1.1 +2.7.7:2.5.1:2.6.1:1.4.4:1.1.1:3.5.2 +5.3.1:1.14.15:1.1.1:1.2.1:2.7.1:2.7.2:1.2.1 +2.7.7:1.1.1:1.14.15:4.1.3:5.3.3:1.13.11:2.7.4 +4.4.1:1.1.1:2.7.2:1.14.14 +1.14.99:2.5.1:4.1.1:3.5.1:1.14.13:2.7.1:6.4.1:1.1.98:1.3.1 +4.1.1:6.2.1:2.7.1:1.2.1:4.1.1:2.7.1:4.1.1:1.1.5 +1.5.3:2.3.3 +1.14.14:3.3.2:2.6.1 +4.1.3:2.1.2:1.2.1:5.4.2:3.1.1:4.4.1 +6.3.5:1.1.1:1.1.1:3.6.1:3.1.3:1.1.1:1.14.13 +9.9.9:2.1.3:2.3.1:2.7.7:1.2.4:1.14.14:5.4.99:4.1.1 +2.6.1:2.3.1:2.3.1 +5.4.2:1.14.14 +2.6.1:3.1.2:3.1.3:2.7.2:4.1.3:6.2.1 +1.1.1:2.7.4:2.7.1:1.8.4:3.1.1:1.1.1 +2.3.3:4.2.3:6.4.1:1.1.5 +1.1.1:3.1.3:5.2.1:4.1.2 +5.3.1:2.3.1:4.1.1:1.13.12:1.14.13:1.17.1:1.1.1:1.13.99 +1.13.11:2.3.1:1.13.11:5.4.99:2.6.1:1.1.3:1.1.1 +2.7.7:2.5.1:2.8.3:5.3.1 +3.1.3:1.1.1:4.2.1:1.14.13 +3.5.1:3.1.3:2.1.4 +1.1.1:2.7.1 +1.18.1:6.2.1:2.7.1:1.1.1:4.1.1 +3.1.1:4.1.2:1.1.1:2.3.1:3.1.3:1.1.1:1.1.1:5.4.99:4.2.1:5.5.1:1.13.11 +2.1.1:1.13.11:2.7.7:4.1.1:1.1.1:2.3.1:3.1.3 +9.9.9:5.3.1:6.4.1:1.14.13:3.1.3:1.1.1:1.1.1:2.7.1:1.2.1:4.2.3 +5.1.3:3.5.3:1.14.11:1.1.2:1.1.1:5.5.1 +2.1.2:5.4.2:1.1.2:2.7.1:2.3.1:5.4.99:1.13.11 +2.7.1:1.2.4:4.4.1:4.4.1:1.1.1 +2.7.1:2.7.1:1.8.1:2.3.1:4.4.1 +2.4.2:1.1.1 +1.13.11:4.3.1:1.14.11:4.4.1:1.5.8 +2.4.2:1.8.1:3.1.1:3.6.1:4.2.1 +2.6.1:1.1.3:3.7.1:2.6.1:2.1.2:1.2.1:1.1.1 +4.1.2:6.4.1:1.8.1 +2.3.3:1.2.1:4.2.1:2.1.4:2.7.2 +1.1.2:1.14.11:1.14.13 +1.17.1:1.13.11 +4.2.3:1.2.7:1.13.11:1.2.7:3.1.1 +2.3.1:1.1.1:1.3.1:2.2.1:1.1.2:2.7.1:1.1.1:6.4.1:2.6.1:2.7.1 +1.8.3:6.4.1:2.7.1:4.1.3:1.1.5 +1.1.1:2.2.1:1.14.14:2.7.7:4.1.1:2.3.1 +1.1.1:4.1.2:1.1.1:3.1.3:1.2.1:4.2.1:5.4.2:1.2.4:6.2.1:1.2.7:4.1.1:4.2.1:1.1.2 +1.1.1:2.3.1:2.7.1:5.3.3:1.3.5:4.2.3:1.1.1:1.1.1 +1.3.1:1.8.1:6.4.1:1.1.1:1.2.4:2.5.1:1.1.1:9.9.9 +1.1.5:5.4.2:6.3.4:4.1.2:2.3.1:1.2.4:1.14.14 +2.3.1:4.2.3:4.2.1:2.7.7:1.1.1:4.6.1 +2.3.1:3.7.1:3.5.1:2.1.1 +6.3.2:1.14.99:2.7.1:1.1.1 +2.3.1:1.1.1:2.7.1:4.2.1:5.1.3:4.2.1:1.2.4 +1.14.13:2.3.3:9.9.9 +1.1.1:1.1.1:5.3.1:1.1.1:6.3.4:1.1.1:1.8.5:2.5.1:6.2.1 +4.4.1:1.14.14:2.7.7:2.7.1:1.13.11 +1.2.1:3.6.1:2.3.1:1.2.7:6.4.1:4.1.2:2.8.3 +1.11.1:2.1.2:4.2.3 +2.3.1:3.1.2:4.1.3:1.2.1:3.5.4 +2.7.4:1.1.1:1.14.13:1.1.1:4.1.2:2.5.1:1.2.1:1.14.16:3.1.2:6.2.1 +4.2.1:5.3.1:1.8.4:2.6.1:1.2.1:1.17.99 +3.5.4:2.3.1:2.7.4:4.3.2 +2.7.7:1.18.1:1.2.5:3.1.1:1.14.11:4.2.1 +2.5.1:1.1.5:2.1.1:3.6.1:9.9.9:2.3.1:3.1.3:4.2.1 +4.2.1:1.1.99:5.4.2:2.7.8:2.1.2:2.3.1:1.1.1 +1.1.1:2.7.7:1.1.1:3.1.1:1.1.1 +1.3.8:4.2.1 +4.1.2:1.1.1:1.8.2:2.7.1:4.1.1:5.4.2:2.6.1 +2.6.1:1.13.11:1.14.14:2.1.1 +5.3.2:1.14.14:2.3.1:2.7.7:4.1.1 +1.14.11:2.7.2:2.3.1 +4.2.1:1.1.1:2.7.2:4.1.99:4.2.1 +2.1.2:3.2.1:1.3.5:1.2.1:5.1.3 +2.7.7:2.3.3:1.14.13:1.14.14:2.7.1 +2.7.2:1.1.1:2.7.2:2.3.3:1.17.4:1.1.1:2.7.1 +1.1.1:4.1.1:2.7.1 +1.14.14:2.8.2:4.1.3:4.2.1 +2.5.1:3.1.3:1.14.12:1.8.4:3.1.4:3.1.3 +1.1.1:1.5.8:1.1.1 +2.7.7:4.2.1:6.3.2:1.1.1:2.6.1 +1.1.1:1.1.1:4.2.3:2.7.8:2.4.1:1.1.1 +2.1.4:4.2.1:3.1.3:1.3.8:2.6.1:2.3.3 +2.7.1:2.4.2:1.1.1:2.7.1:2.1.4:1.5.1:6.2.1 +5.4.2:2.7.7:4.2.1:4.1.1 +2.7.1:4.2.3:9.9.9 +2.7.7:5.1.2:2.1.1:2.1.2:1.13.11:2.7.7 +3.1.3:1.13.11:2.3.1:2.7.1:2.6.1:2.3.1:1.1.1 +2.7.2:1.2.1:5.3.1:5.5.1:4.2.1 +1.1.1:1.13.11:3.4.11:4.1.1 +2.6.1:1.1.2:1.13.12:5.1.1:1.13.11 +5.5.1:2.1.2:5.1.1 +1.2.1:1.1.1:1.14.15:2.1.2:1.1.1:1.14.14:2.7.7:3.5.4 +2.1.4:2.1.1:1.13.11:1.14.11:3.1.3:1.17.3:5.1.3 +1.1.1:5.4.2:1.14.14:4.2.1 +3.1.3:1.1.2:1.2.4:1.1.1:2.3.1:2.7.1:4.1.2 +1.14.14:1.2.7:1.14.13:4.1.2:1.11.1:4.2.1:1.1.1:1.1.99:4.1.3:4.2.1:4.4.1:4.2.1 +5.3.1:2.5.1:1.1.1:1.14.14:2.7.7 +1.1.1:5.5.1:2.7.7:1.3.1:1.1.1:2.5.1:3.2.1 +3.1.3:2.3.1:1.1.1:1.1.1 +2.7.4:3.1.2:4.2.1:1.14.14:4.1.2 +4.1.2:2.6.1:4.1.3:6.2.1:1.4.3:1.5.8:1.1.1:4.2.1 +1.14.16:3.1.3:5.1.99:2.3.1 +1.17.1:6.4.1:1.1.5:2.1.2:1.1.1:1.1.1:1.2.4 +4.1.2:4.1.1:3.1.3:1.14.99 +3.1.1:2.6.1:1.14.11:1.1.1:2.6.1:1.1.1:2.7.1:1.2.1:2.1.1:2.1.2:2.8.3:2.1.2:5.3.3:2.4.2 +3.1.4:1.4.3:2.7.7:4.1.1:1.1.1:3.7.1:1.2.4 +2.3.1:4.4.1:1.2.1 +4.2.1:1.14.13:1.1.1:2.3.1:1.1.1:5.5.1:3.1.1:4.1.1 +2.7.8:1.1.1:1.2.4:3.5.1:2.7.7 +3.1.4:6.2.1:3.5.4:3.1.4:2.7.1:3.1.1:2.7.1 +2.7.1:1.3.1:2.7.7:2.3.1:2.5.1 +4.4.1:1.8.1:2.3.1:2.3.1:1.3.5 +1.1.1:5.3.1:9.9.9 +1.14.12:3.1.3:1.2.5:1.1.1:1.5.3 +1.2.7:2.1.1:1.2.1:3.1.1:2.7.4:4.2.1 +4.1.2:2.7.7:1.1.1:2.5.1:1.1.1:4.1.3:3.5.4:1.1.1:4.1.2:3.1.3:2.3.1 +1.1.1:1.13.11:5.4.2:2.6.1:1.14.14 +2.3.3:1.14.13:1.1.1:2.7.1:2.1.2 +1.2.1:4.2.1:4.1.1:1.14.14:9.9.9:1.1.1:4.2.1 +6.3.4:3.1.2:1.1.1 +4.1.1:1.1.1:1.1.2:1.13.11:2.3.1:4.1.1 +2.7.1:6.2.1:9.9.9:5.3.1:4.2.1:1.13.11 +1.14.18:1.1.1:2.7.7:2.2.1:5.4.99:5.1.3 +2.4.1:1.3.1:1.4.3:1.13.11:1.13.11 +1.11.1:5.3.1 +1.13.99:9.9.9:6.2.1:1.13.11:9.9.9 +1.2.4:1.13.11:1.1.1:3.1.3:9.9.9:2.7.1:3.1.4:2.3.1 +2.1.3:4.2.3:1.1.2:2.7.1:5.4.99:1.2.1 +2.3.1:1.14.14:1.17.7:2.7.4:1.13.11:4.2.3:2.3.1:6.3.4:1.2.4:2.2.1:2.7.9 +1.2.1:2.5.1:4.1.2:1.1.5:4.2.1:2.6.1 +1.2.5:1.1.1:3.1.1 +1.14.14:1.14.14:1.1.1:4.1.3:2.6.1 +4.2.1:2.6.1:1.1.1:1.1.1 +4.1.1:1.8.7:3.1.3:1.14.14:4.4.1:1.8.7:3.5.4 +1.14.12:1.14.18:1.2.7:1.13.11:1.14.14 +4.2.1:2.4.2:1.2.1:1.1.1 +2.6.1:2.4.2 +1.1.1:1.13.11:1.2.1:5.4.2:2.2.1:4.1.1:2.7.1:6.3.4 +1.2.1:4.2.3:2.3.1:2.1.1:1.1.1:2.2.1 +4.1.1:1.11.1:1.1.1:4.2.3:2.8.3 +1.13.11:1.13.99:1.2.1:2.3.1 +1.17.1:1.2.1:2.7.1:9.9.9:1.1.1:1.14.13:1.1.1 +1.1.1:1.3.5:1.5.8:9.9.9:4.2.1:4.1.2 +4.3.1:1.1.5:1.1.1:4.1.2 +2.3.1:1.1.1 +1.1.1:1.1.1:1.1.1:1.1.1:2.7.1:2.3.1:5.4.2:1.1.1:1.13.11:1.1.1 +3.1.2:3.1.1:1.14.15:1.1.5:2.8.3:2.3.1:1.1.2 +1.14.19:4.1.2:2.8.3:1.14.14:2.1.2:3.2.1 +1.1.1:4.2.1:1.1.1:1.1.5:1.1.1 +3.1.3:1.1.1:4.2.1:1.1.1:5.4.99:9.9.9 +1.3.1:2.1.4:4.6.1:6.4.1:3.6.1 +1.2.1:1.1.1:2.7.7 +1.2.1:4.2.1:9.9.9:1.10.3:4.6.1 +9.9.9:4.2.1:2.7.1:5.2.1:2.7.1:2.8.3:1.14.13:4.2.1 +4.2.1:5.3.1:1.14.13 +4.1.1:9.9.9:5.3.1:1.14.13:4.2.1 +5.1.3:4.2.1:2.4.2:1.14.14:9.9.9:6.2.1:2.7.1:2.7.1:1.13.11:4.2.1:5.3.1:2.5.1 +1.4.3:1.17.4:2.7.1:4.2.1:1.14.12:5.5.1:2.7.2:1.1.1 +2.7.1:1.17.99:4.6.1 +1.1.1:1.3.8:1.1.3:4.2.1:3.1.2:1.1.1:4.1.1:1.1.1:3.1.1 +2.3.1:2.6.1:1.1.1:9.9.9:1.1.1:1.14.14 +1.13.11:4.1.1:1.1.1:1.2.4 +9.9.9:1.2.1:5.3.1:4.2.1:1.2.1:2.7.7:5.4.2 +3.1.3:1.2.1:4.2.1:1.8.4:1.1.1:3.1.3:4.4.1 +4.1.3:4.1.1:1.3.1:5.3.1:3.1.1:4.1.3:2.3.1 +2.7.8:4.2.1:6.2.1:6.2.1:2.3.1 +2.5.1:2.6.1:5.4.2:5.4.2:1.2.1:4.1.1:6.3.2 +1.13.11:4.2.1:1.8.1:1.1.1 +1.1.1:2.3.1:1.1.99:3.5.4:4.3.1:3.5.5 +2.3.1:1.1.1:4.3.1:1.1.1 +1.1.1:2.3.1:4.4.1:2.7.7:2.3.1:2.6.1 +5.3.3:1.1.1:4.1.1:1.14.14:4.2.3 +6.2.1:2.7.1:4.1.2:1.2.5:2.3.1:4.3.2:1.5.8:2.7.1:2.2.1:2.6.1:2.7.7 +4.2.1:1.1.1:2.3.1:1.1.5:1.14.14:2.7.7 +1.1.1:5.3.3:3.1.1:4.2.1:3.1.1 +2.7.1:1.1.1:2.1.1:4.1.2:2.6.1:1.2.1 +2.7.1:4.2.1:2.8.3 +2.7.4:2.3.1:1.2.5:1.1.1:2.3.1:5.3.3:3.5.2:1.1.1 +1.1.1:9.9.9:1.1.1:4.1.1:2.8.3 +9.9.9:2.7.1:2.3.1:5.3.1:2.3.1 +2.5.1:1.14.18:5.3.1 +1.1.1:1.2.1:2.3.1:1.17.7 +9.9.9:1.3.1:2.3.1:5.5.1 +3.5.4:1.14.13:5.3.1:4.1.2:5.4.99 +1.14.14:2.3.1:5.5.1:6.4.1:1.1.1 +1.18.1:2.7.7:2.7.1:1.1.1 +4.2.1:1.2.1:4.4.1:1.1.1 +2.7.1:1.13.11:1.2.1:6.2.1:1.2.1:4.4.1:2.7.1:1.1.1:5.5.1:2.7.7 +2.7.7:1.1.1:2.7.1:1.1.1 +3.1.1:2.1.1:5.4.2:5.3.2 +9.9.9:5.1.3:1.1.1:2.3.1:2.3.1 +1.2.1:3.1.3:1.1.1:1.1.2:4.1.2:2.6.1 +4.2.1:4.4.1:4.1.2:1.1.1 +2.3.1:2.7.1:1.5.3:1.13.11 +5.3.1:2.1.2:2.3.1 +2.5.1:1.1.99:1.1.1:4.1.1:2.6.1:3.1.3:2.1.2:1.1.1 +1.1.1:9.9.9:5.5.1:2.6.1 +4.3.1:2.1.1:6.3.2:4.1.2:2.8.3 +1.14.14:1.14.14:4.2.3:4.1.3 +1.13.11:1.2.1:4.1.1:1.3.1:5.5.1 +1.1.1:1.1.2:5.3.1:1.14.14 +2.2.1:4.4.1:1.3.5:1.3.1:2.3.1:1.17.4:4.1.1 +1.2.1:2.7.2:4.1.1 +3.1.2:9.9.9:1.1.1 +2.6.1:1.5.3:2.6.1:4.2.3:1.14.14 +1.1.1:2.3.3:1.14.14 +1.13.11:3.3.2 +5.4.2:3.7.1:1.2.1:1.1.1 +1.13.11:3.1.6:5.3.1:2.7.7 +1.2.1:4.2.1:1.1.1:4.1.1:1.13.11:9.9.9:2.7.1:2.7.1:1.1.1:1.1.1:1.2.3:1.1.1:2.7.1:4.1.1 +1.1.1:2.5.1:3.1.1:2.3.1:1.1.3:5.1.1 +2.1.1:9.9.9:1.1.2:1.1.1:1.14.11:2.7.7:2.8.1 +4.1.2:1.1.1:1.14.14:2.7.7:2.3.1:3.1.3:2.6.1:4.1.2:9.9.9 +2.7.4:1.1.1:2.6.1:1.2.1:1.14.18:2.8.3:4.2.1:2.2.1:3.1.3 +4.1.2:2.7.7:1.2.1:1.1.1:4.1.3:1.13.11 +6.2.1:2.3.1:4.1.3:1.1.1:6.3.5:2.5.1 +1.1.5:4.1.2:1.14.14:1.2.4:2.7.1 +9.9.9:2.7.1:4.2.3:9.9.9:1.2.1 +1.13.99:2.7.7:4.1.1:1.13.11:1.1.1 +2.3.1:3.1.3:2.7.9:2.8.3:3.6.1:1.14.14 +9.9.9:4.1.2:2.5.1 +2.1.2:1.1.98:3.5.4:4.2.1:3.1.1:1.1.1:1.18.1:2.3.3 +1.14.19:1.2.1:1.14.16 +1.14.12:1.1.1:6.4.1:2.7.1:3.1.3:1.2.4:1.1.1 +2.2.1:1.13.11:2.7.1:2.6.1:1.1.1:1.1.1:1.2.7 +1.2.4:3.5.4:2.7.4:1.4.4:6.3.5:4.4.1 +3.1.2:3.5.4:5.3.1:4.1.1:1.8.7:1.4.4 +2.4.2:1.14.15:2.3.1:1.14.99:1.2.1 +1.3.1:5.5.1:1.14.15:1.11.1:3.3.2:1.1.1 +5.1.2:1.1.1:5.3.1:1.1.2:1.2.7:1.2.1:1.1.1:2.3.3 +1.13.99:6.2.1:4.2.1:1.1.1:5.3.1 +2.4.2:2.1.1:5.3.1:4.2.1:6.2.1 +2.7.1:9.9.9:4.4.1:2.4.2:1.1.2:2.6.1:3.7.1:1.2.5:2.1.1:2.5.1:4.1.1 +1.1.1:4.2.1:2.7.2:2.5.1 +6.4.1:4.2.1:3.1.2:5.4.2 +3.1.3:2.1.2:1.1.1:2.7.1:1.2.7:9.9.9 +3.5.4:1.8.4:4.1.1:1.1.1:1.2.4:4.2.1:1.2.3 +3.3.2:3.5.1:2.3.1:2.7.7:1.1.1:1.1.1:1.3.3 +4.2.1:1.1.2:3.5.4:1.2.4 +2.4.2:1.1.1 +4.4.1:6.4.1:3.1.1:2.6.1 +5.1.2:2.6.1:9.9.9:2.3.1:1.1.1:4.6.1:5.4.2:1.11.1:9.9.9:9.9.9:3.1.1 +1.2.1:2.3.1:1.1.1:1.1.1:2.3.1:2.3.3:1.8.1:1.2.7 +1.14.14:2.2.1:1.13.11:1.3.1:1.2.4:2.6.1:2.7.1:2.3.1 +3.1.1:4.1.3:2.7.7 +1.1.98:2.7.1:1.1.1:5.1.1:2.5.1:1.11.1:1.13.11:4.4.1 +4.1.1:1.1.1:4.1.2 +2.5.1:9.9.9:2.3.1:1.2.5 +1.2.1:1.1.98:1.8.2 +2.4.2:1.14.16:1.1.1 +1.1.1:1.1.1:3.1.2:5.3.1:4.1.2:2.7.4:1.1.1 +4.2.1:6.2.1:3.6.1:1.1.1 +2.3.1:2.3.1:3.1.3:5.1.3:2.3.1 +5.3.1:1.13.11:2.7.9:1.5.1:1.1.1:2.7.1:5.1.3 +2.1.2:5.3.1:5.4.99:3.1.1 +4.2.1:3.1.3:1.2.4:1.5.1:1.1.1:1.3.5:1.1.1 +2.3.1:2.7.1:2.3.1:1.1.2 +1.5.1:1.2.1:1.14.15:1.1.1:4.2.1 +5.1.3:1.1.1:2.7.4 +3.5.4:2.7.2:2.3.3:2.3.3:4.1.3 +1.2.1:2.7.1:4.2.1:1.2.7:4.2.1:4.1.2 +9.9.9:5.1.99:2.5.1:4.1.1 +4.2.1:2.3.1:1.3.1:3.5.1:4.2.1:6.4.1 +1.3.8:2.3.3:1.1.1:2.6.1:1.1.1:1.17.4 +1.1.1:6.4.1:1.1.2:2.3.1:5.4.2 +4.2.1:2.3.1:1.1.5:2.6.1:5.3.1:5.4.99 +1.13.11:5.4.2:1.13.11:1.14.99:5.4.2:4.1.1:4.1.1:4.2.1:1.14.13 +1.1.1:4.2.1:3.1.2:1.14.15:1.2.3:4.1.1:1.1.1 +1.13.11:3.5.4:2.7.7:5.4.2:1.1.1:2.7.1:6.2.1 +1.1.1:3.5.1:1.1.1:2.7.1:1.1.1:2.3.3:2.7.1:2.7.1 +6.2.1:3.5.1:4.1.3:1.4.3:2.5.1 +3.3.1:2.7.1:1.2.7 +2.7.7:1.3.8:1.14.15:2.7.1:2.1.1:2.5.1:4.1.2 +1.8.1:4.2.1:1.4.3:4.2.1:2.3.1:1.1.1:1.1.1:1.3.1 +4.2.1:1.2.1:6.3.2:3.1.3:1.1.1:1.2.1:2.3.1:1.14.15:2.7.1:1.14.14 +1.2.7:1.2.4:3.1.2:1.1.1:1.1.2:2.3.1 +1.2.1:1.14.14:2.3.1:1.1.1 +1.13.11:6.2.1:1.4.4:1.1.1:3.1.2:4.2.1:2.3.3 +2.7.7:3.1.1:2.2.1:4.2.1:2.3.1 +1.1.3:1.1.2:2.4.2:1.1.1 +2.3.1:2.3.1:1.13.12:5.4.99:4.1.1:2.3.1 +5.3.1:5.4.2:2.7.7:4.2.1:4.6.1:1.1.1:3.1.3:4.3.1:2.7.1 +1.2.1:4.1.2:1.14.13:3.6.1:1.14.16 +1.1.1:5.4.2:2.3.1:4.2.3:5.5.1:2.1.2 +6.2.1:1.1.1:1.1.1:2.6.1:1.13.11:1.1.1 +2.3.3:2.7.1:3.1.6:2.5.1:3.1.1:5.3.3 +1.1.1:4.2.1:1.1.1:6.2.1 +1.1.2:2.3.1:2.7.1:2.8.3:2.6.1:1.14.15:2.3.1:1.13.11:2.2.1:4.4.1:1.14.12 +1.1.1:2.7.1:1.1.1:1.1.1:1.1.2:5.3.1:2.3.3 +2.3.1:4.2.1:4.4.1:1.3.1:1.14.13:2.7.7:1.1.1 +1.1.98:1.1.1:5.3.1:1.2.1:5.4.2:6.3.4:2.1.1:3.5.1 +2.6.1:4.1.1:4.2.1 +3.1.2:3.6.1:1.1.98:4.1.3:1.18.1 +2.5.1:1.3.1:1.1.1:3.1.1 +1.1.1:1.1.1:1.1.1:5.2.1 +1.8.1:2.6.1:1.14.14:1.14.14:1.2.1:5.4.2:1.2.1 +4.1.2:4.2.3:4.2.1:2.3.1:2.7.2:2.7.1 +5.3.1:3.5.4:1.1.1:4.2.3:1.2.1 +2.3.1:3.7.1:4.1.2:2.3.1:1.1.1:4.2.1 +2.1.1:2.3.1:1.1.1:1.14.13:1.1.1 +1.14.11:2.5.1:1.2.1 +5.4.99:2.7.1:1.2.4:4.2.1 +1.13.11:4.2.1:4.4.1:2.7.2:1.1.1:3.7.1:1.1.1:2.4.2 +1.14.14:4.2.1:5.3.1:9.9.9:2.7.1 +5.3.1:1.1.1:1.14.12:4.2.1:1.3.1:4.2.1 +3.5.1:3.1.3:1.14.16:2.7.7:1.2.4:1.1.3:2.7.1 +4.4.1:2.4.2:3.1.2:2.7.1:1.4.3:1.4.4:1.13.11:5.5.1 +2.6.1:5.3.3:5.4.2:2.6.1:1.14.14:6.2.1:1.3.8 +2.6.1:2.7.7:2.6.1:2.7.7 +2.7.7:2.8.2:4.1.2:5.99.1 +3.1.1:2.8.3:1.1.2:1.1.1:5.4.2:3.5.3:2.3.1:2.3.1 +1.14.14:2.5.1:4.2.1:1.4.3 +1.1.1:4.4.1:2.3.3:1.1.2 +4.2.1:3.1.3:2.7.4:5.3.3 +2.3.1:5.4.2:4.1.1:2.3.1:3.6.1:1.2.1:1.2.1 +1.2.7:1.1.2:1.1.1 +5.1.3:2.3.1:1.14.11:1.13.11 +5.3.3:4.2.1:1.1.1:2.3.1 +9.9.9:2.1.1:6.2.1:1.1.98:2.7.1:5.4.2:2.3.1 +2.7.1:3.1.1:1.14.14:6.3.5 +1.1.5:1.1.1:4.1.3:2.4.2:2.3.1:1.1.1:1.13.99 +1.1.1:6.4.1:5.5.1:2.6.1:5.3.3 +2.3.1:1.14.11 +2.5.1:1.14.14:4.1.3:2.3.1:2.4.2 +2.7.1:5.4.2:1.2.4:5.4.99:1.1.5:1.1.1 +1.14.13:2.3.1:2.6.1 +3.1.1:1.13.11:5.4.2 +3.5.1:1.2.1:3.1.1:2.3.1:5.3.1:2.3.3:1.8.1 +1.8.7:1.2.1:1.2.4:1.1.1:1.2.1 +9.9.9:5.3.1:6.3.4:1.2.1:2.3.3:1.1.1 +9.9.9:5.5.1:1.14.14:1.1.1:1.17.4:2.4.2 +2.6.1:1.1.1:2.7.1 +1.1.2:3.1.3:4.2.1:4.1.3:1.1.1:1.1.5:4.2.1 +3.5.1:2.5.1:2.6.1:2.3.1 +6.3.3:4.2.1:5.1.3:4.1.3:1.1.1:1.2.1:1.1.1:2.7.2:3.1.3 +3.5.4:1.13.11:1.14.16:2.5.1:1.14.11:1.2.7:1.1.1:2.1.2 +3.5.1:1.14.15:1.13.11:1.1.1:1.13.11:1.2.7:6.4.1 +1.2.7:5.1.99:3.1.3:2.7.1:5.1.3 +2.7.8:4.1.3:2.3.3:3.1.1:2.2.1 +3.1.3:1.1.1:2.7.9 +9.9.9:5.3.1:3.3.2:2.3.2:5.1.3:4.1.3 +1.1.1:1.1.1:4.2.1:1.1.1:9.9.9:9.9.9:2.8.3:3.5.1:1.1.1:2.7.1 +4.2.1:1.1.1:4.2.1:5.3.1:6.2.1 +1.1.1:1.1.1:1.2.1 +1.1.1:2.1.2:1.1.1:1.1.1:1.13.11:1.2.4:1.14.15 +3.1.2:2.3.1:4.4.1:3.1.3:4.4.1:1.1.1:1.2.1:1.1.2:1.1.98 +5.3.1:5.4.2:2.7.4:1.1.1:1.14.15:1.1.1:3.5.3:6.2.1:3.3.1 +6.2.1:2.1.1:4.1.1:4.1.2:4.2.1:9.9.9:1.1.2:2.7.7:1.1.1:2.6.1:1.1.1 +3.7.1:1.1.1:5.3.1 +1.1.1:5.1.3:2.4.1:1.13.11:1.1.1 +4.2.1:1.1.3:2.3.1:4.1.3:3.1.2:1.17.1:1.1.1:1.11.1:1.2.1:2.3.1 +6.4.1:4.1.2:1.1.1 +2.6.1:3.1.1:1.1.1:5.4.2 +3.1.1:1.1.1:1.1.1:4.1.1:2.7.2 +1.14.11:1.1.1:4.1.3:3.1.1:1.1.2:2.3.1:2.1.4:6.2.1 +1.1.1:2.6.1:1.1.1:2.7.1 +1.14.18:1.1.5:1.2.1:1.2.4:1.4.3:1.2.1:1.1.1 +2.6.1:1.2.1:1.1.1:2.3.1:1.2.7:2.6.1:4.1.1:2.1.1 +1.13.12:1.13.11:4.2.1:3.1.4 +1.2.4:1.2.1:5.4.2:1.2.1:2.3.1:2.7.1:3.1.1:1.1.1:5.1.2 +3.1.1:9.9.9:2.3.1 +2.7.2:1.3.5:1.13.11:2.6.1 +5.3.1:2.7.1:1.14.99:1.14.14:4.1.3:3.1.1:1.8.1:1.1.1 +1.13.99:3.1.2:2.3.1:1.2.1:2.7.1 +2.1.1:2.1.2:3.1.1:1.2.1:2.3.1:5.4.2:2.7.4 +4.1.1:2.7.1:1.2.1:1.2.4:2.7.1:3.1.1 +1.8.7:5.5.1:6.2.1:1.2.1:1.13.11:1.1.1:4.4.1 +1.2.1:4.4.1:2.6.1:1.18.1:1.1.1:5.5.1 +3.1.3:1.3.1:1.4.3:4.2.1:4.1.2:6.2.1 +1.2.1:5.1.2:1.1.1:1.8.1:4.2.1:5.3.1 +2.2.1:1.1.1:3.1.1:5.5.1:2.7.1 +2.3.1:2.3.1:1.1.1:1.2.1:1.8.4:1.2.1:2.3.1:1.1.98:5.4.99:4.1.1:1.1.5 +1.14.13:3.1.3:3.1.2:3.1.1:4.2.1:3.5.1:1.2.1 +6.2.1:4.2.1:1.1.1:2.5.1 +1.1.2:2.3.1:1.14.14 +2.3.1:1.14.14:2.7.7:5.3.1:4.3.1 +2.3.3:2.3.1:5.1.99:1.1.2:3.1.1:2.3.1 +4.2.1:1.1.1:3.3.1 +9.9.9:1.1.1:5.3.2:2.3.1:1.5.1:4.1.3 +1.2.4:2.7.7:1.1.1:1.1.1:2.3.1:1.1.1:1.2.1:2.3.1 +2.7.7:1.13.11:2.7.1:1.1.2:5.4.2:5.5.1:2.3.1:6.3.3:3.1.3 +3.2.1:5.3.3:5.5.1:2.7.2:5.4.2:2.5.1:2.5.1 +2.4.2:1.17.1:3.5.4:1.2.1:2.7.1:1.1.1:2.5.1:2.8.3:3.1.2:2.1.4 +1.1.1:1.1.1:1.14.11:5.4.2:1.2.7 +2.4.2:9.9.9:2.5.1:1.1.1 +1.2.1:4.1.3:1.2.1:3.1.1:3.1.1:5.3.1:4.1.2 +4.1.1:1.1.1:4.6.1:4.2.3:3.4.19 +1.3.5:1.13.11:1.1.1:1.3.5:2.7.7 +6.3.2:3.1.3:1.4.4:5.4.2:2.1.1:1.14.11 +2.1.1:2.6.1:2.7.1:1.1.1:1.1.5:2.7.1 +4.4.1:1.1.1:4.1.1:1.1.1 +2.1.1:1.8.1:1.1.1:1.1.1:5.4.2 +3.1.1:1.14.13:1.1.1:6.2.1:1.13.11:1.13.11:2.6.1 +1.1.1:3.5.4:2.3.1:2.4.2:5.1.3:1.1.1:3.1.3:1.2.1 +2.7.7:4.2.1:3.5.4:2.3.1:1.1.1:1.1.99:4.2.1 +2.7.7:1.8.1:1.1.1:5.4.2 +2.6.1:6.2.1:1.3.1:1.1.1:4.2.1 +2.8.2:5.4.2:1.14.13:6.2.1:9.9.9:1.2.1:3.6.1:9.9.9:4.2.1:2.8.3 +1.2.1:6.2.1:1.1.1:2.3.1:1.14.11:1.3.3:2.7.4 +1.2.1:2.3.1:5.5.1:1.14.14:1.1.1 +2.7.7:1.1.1:3.5.4 +1.1.1:1.1.1:5.5.1:3.6.1:4.2.3:4.1.3:2.3.3:2.8.2:1.1.1:2.7.8:1.1.1:2.7.7:1.14.13 +2.3.1:1.2.4:1.1.1:3.6.1 +4.1.2:2.8.3:4.4.1:6.2.1 +1.1.1:2.1.1:2.7.1:1.3.8:5.5.1 +2.5.1:2.6.1:1.11.1:5.3.1:1.1.1 +2.7.1:2.7.2:1.2.1:1.14.13:1.1.1:1.1.1:4.1.2:3.3.2 +1.3.8:1.8.3:1.2.1:1.1.1 +1.13.11:1.18.1:2.2.1:1.1.1:1.13.11:2.3.1 +1.2.1:1.1.1:1.1.5:4.1.2 +5.3.1:1.1.5:2.3.1:2.7.1:1.2.1 +1.1.1:5.3.1:1.1.1 +2.3.1:1.2.7:1.1.5:2.7.1 +1.5.1:2.3.1:9.9.9:3.6.1 +2.1.2:1.3.1:2.7.7 +4.3.2:5.4.2:5.3.1:1.1.1:1.14.14:2.7.1:6.3.5:4.2.3:1.2.1 +9.9.9:1.1.1:2.7.1:1.1.1:1.14.15:6.2.1 +1.5.3:3.1.1:4.3.1:1.14.13 +1.13.11:1.17.1:1.5.1:1.8.1:1.1.1:3.6.1 +5.1.1:5.1.3:1.1.1:5.4.2 +4.2.3:4.1.3:4.2.1:4.1.1:4.1.1 +2.7.7:1.1.1:4.4.1:1.1.1 +4.1.2:4.1.1 +2.6.1:2.7.1:1.1.1:1.13.11:3.6.1:1.2.7 +5.3.3:5.3.2:4.2.1:1.2.1:1.1.1 +2.7.4:4.4.1:4.2.1:1.2.1:2.3.1:4.2.1:1.2.1:2.1.4:2.3.1:1.13.11:2.1.4:1.1.1:1.14.16 +2.1.1:4.2.1:4.4.1:1.1.1:1.13.11:2.2.1:5.3.2 +4.2.1:1.1.1:4.1.2:4.2.1 +1.13.11:1.1.1:1.18.1:2.6.1 +1.1.1:6.3.4:1.1.5:1.2.4:2.7.4:1.13.11:1.1.2 +4.2.1:6.3.5:2.3.1:4.1.2:1.14.99 +2.7.7:4.2.1:1.1.99:1.2.1 +6.2.1:2.3.3:1.13.99 +3.1.3:2.4.2:4.1.1 +1.13.11:4.1.2:2.7.7 +1.14.11:6.4.1:1.1.1:1.1.1:1.11.1:4.2.1:2.3.1:1.14.13:4.2.1 +4.1.2:1.14.14:4.6.1:2.7.2 +1.14.14:2.6.1 +5.5.1:1.1.1:2.7.1:3.7.1:2.7.8:3.1.3:1.1.1:1.4.9:2.7.9:1.14.14:2.2.1 +2.3.3:1.3.1:9.9.9:1.13.11:6.4.1:4.1.1:2.3.1 +1.2.1:4.2.1:5.4.2:2.7.8:1.1.2:3.5.99:6.3.4:6.2.1:1.2.4 +1.1.1:1.14.19:4.3.2:6.2.1 +4.1.1:1.14.19 +6.2.1:2.4.2:1.14.14:4.2.3:1.4.4:1.5.8 +1.1.1:1.1.99:1.1.1:4.4.1:1.1.1 +2.8.3:2.3.1 +9.9.9:2.7.1:1.1.2:2.8.3 +2.1.2:2.7.2:3.5.5:1.13.99:2.3.1:1.14.13 +1.1.1:5.4.2:2.6.1:1.2.1:1.2.1:4.2.1:4.2.1:1.3.8 +2.7.7:1.3.1 +4.1.1:1.2.7:4.2.1:1.1.1 +4.2.3:2.3.1:1.14.13:1.17.7 +4.2.1:2.8.1:6.2.1 +1.1.1:4.2.1:2.7.7:5.4.2 +1.14.14:1.2.1:1.14.13:1.1.1 +1.1.5:1.2.1:5.1.2:4.2.1 +1.1.1:1.1.1:5.3.1 +1.3.1:2.6.1:3.1.3:5.3.1:1.2.7 +2.7.2:5.3.3:1.1.1:1.2.1:2.8.3:4.2.1:6.3.5 +4.1.2:3.3.2:1.1.1:1.17.1:4.2.1:2.4.2:1.1.1:1.1.1 +3.1.1:4.2.1:5.4.2:1.2.4:3.6.1:1.8.5:9.9.9:2.7.2 +1.1.1:2.7.7:1.13.11 +2.1.4:4.1.3:2.1.4:2.7.7:1.1.5 +6.2.1:1.1.1:5.3.1:2.5.1:4.2.1:1.14.13:3.1.3:1.14.19 +9.9.9:1.13.11:2.3.1:1.2.7 +3.1.3:4.1.1:1.13.11:1.1.1 +1.1.1:2.3.1:1.2.7:1.13.11:1.1.1:1.3.1 +5.1.99:1.2.1 +1.14.15:1.1.1 +1.3.1:1.14.13:2.2.1 +2.8.3:2.7.1:2.3.1 +1.14.14:4.2.1 +6.2.1:1.1.1:5.4.2:1.8.1:2.8.3:5.5.1 +2.1.1:1.1.1:5.5.1:1.2.1:1.2.1 +3.6.1:5.4.99:1.1.1:3.1.3:2.6.1 +3.1.3:5.4.2:2.7.2:1.2.1:4.1.2:1.1.1:1.13.11 +6.2.1:4.2.1:4.4.1:1.1.1:1.14.15:4.1.1:1.13.11:2.6.1:3.1.3 +2.6.1:1.1.1:2.3.1:1.1.1:3.1.1 +2.6.1:2.7.2:2.7.4:1.8.1:1.14.14 +1.1.1:1.1.1:1.14.13:2.7.1:1.11.1:2.3.1 +2.7.7:2.2.1:1.1.1:1.14.14 +1.11.1:1.1.1:2.1.1:4.1.1 +4.2.1:9.9.9:5.3.99 +1.14.14:2.7.9:4.1.3 +3.6.1:2.7.8:4.1.2:1.13.11:1.13.11:1.14.13:2.7.8:9.9.9:2.3.1:6.4.1:1.1.1:5.3.3 +1.1.1:1.13.99:1.1.1:2.3.1:1.2.1 +1.1.1:4.2.1:4.1.1:5.3.1:1.1.5:4.2.1:1.13.11:3.1.3:1.1.2:1.8.1 +1.1.1:2.6.1:6.4.1:1.17.1:2.7.7:4.1.3 +3.1.1:1.1.1:1.1.1:1.2.7 +2.7.1:1.5.99:2.8.3:1.14.14:1.2.5:1.1.1 +1.14.15:2.3.1:1.14.19:1.14.12:4.4.1:4.2.1:5.3.2 +9.9.9:2.7.1:1.1.1 +2.1.2:4.2.1:4.2.1:1.1.1:2.6.1 +5.3.1:1.3.1:3.5.4:1.1.2:1.13.11 +1.8.4:9.9.9:1.14.14:2.7.1 +4.2.1:2.7.1:5.1.3:3.1.3:2.1.1 +9.9.9:1.1.1:1.1.3 +1.14.18:3.1.2:6.4.1:4.2.1:1.3.5:1.1.1:1.14.13:1.8.4:1.5.1:3.1.1:2.7.4:6.2.1:4.2.1 +3.1.4:3.1.3:2.5.1:2.1.1:2.3.1:4.2.1:4.1.1:1.1.1 +1.14.13:1.1.1:1.1.1 +1.14.13:3.5.3:1.1.1:2.7.1:3.1.3 +1.5.1:6.3.2:1.17.4:2.5.1:5.4.99:1.1.1 +4.4.1:1.18.1:1.14.14:3.6.1 +1.3.1:1.1.1:2.7.1:1.1.2:1.1.1 +1.1.1:2.1.2:1.1.1:9.9.9:4.1.2:2.4.2 +1.1.1:5.4.99:2.7.1:2.7.4:4.2.1 +4.1.3:1.2.7:3.5.4:5.4.2:2.4.2 +2.5.1:1.2.3:1.1.2:3.1.1:4.2.1 +4.1.1:2.8.1:2.7.7:2.1.1 +5.4.2:1.1.1:2.4.2:3.1.3:2.7.1:2.7.4:1.13.11:1.1.1:2.6.1 +2.4.2:1.17.1:1.8.1:2.7.8 +3.1.3:1.14.13:1.5.3 +2.5.1:4.2.1:5.3.1:5.4.2:5.1.1:4.2.1:1.14.19:4.2.1:1.1.1 +1.1.1:4.1.2:1.1.3:1.1.1:1.1.1:1.1.1:9.9.9:1.1.1 +2.3.1:2.3.1:2.4.2:1.14.18:2.5.1:1.1.1:1.14.15:3.1.4 +3.1.1:2.1.2:2.6.1:3.1.3:3.5.4:5.3.1:4.1.1 +4.4.1:4.2.3:1.1.1:3.6.1:1.2.7 +3.3.2:1.2.1:1.8.1:2.1.1 +2.3.1:3.1.3:1.2.7:2.7.1:6.3.1:1.2.7 +9.9.9:2.7.4:1.1.1:4.2.1:5.1.2:1.8.3:3.1.3 +2.1.1:1.1.1:2.6.1 +2.3.1:2.5.1:1.8.1:1.1.1:2.7.4:2.2.1:1.3.1:3.5.2:1.2.1:1.1.1:5.4.2 +1.1.5:1.3.5:1.1.1:1.14.14:2.3.3:1.1.1:1.1.5:1.3.1 +1.1.1:1.1.1:1.17.1:1.2.1:2.3.1 +2.3.1:1.3.5 +5.1.3:2.7.4:1.13.11 +1.14.14:4.4.1:5.4.99:2.3.1:1.1.2:3.6.1:1.1.99 +2.1.2:3.1.2:5.4.99 +1.5.8:1.13.11:2.7.1:1.14.14:2.7.1 +2.4.2:2.2.1:1.1.1:1.1.1:1.1.1 +1.3.1:5.1.3:2.2.1:2.5.1 +5.1.99:1.13.11:2.6.1:1.4.3:4.2.1:4.3.1:1.2.1 +1.17.3:2.1.1:4.2.1:4.1.2:2.4.1:2.3.1:5.4.99 +2.7.9:4.4.1:4.1.1:4.1.3:5.3.1:1.2.1:1.1.3 +1.14.13:6.2.1:6.3.5:6.4.1:4.2.1:2.7.1:1.1.1:1.3.1:5.3.3:1.1.5:1.14.13:1.2.5:1.13.11 +6.2.1:4.4.1:1.1.5:1.1.98 +5.3.2:4.1.2:2.1.1:3.1.1:6.2.1:3.1.3:3.1.3 +2.7.1:3.1.2:4.1.1:1.14.19:1.3.1:9.9.9:2.7.7:1.1.1:2.7.2 +2.7.1:2.6.1:1.1.1 +4.2.1:2.8.3:1.1.1:1.14.16:1.14.13:1.1.1:2.7.1 +1.1.1:5.3.1:4.2.3:1.14.16:1.1.1:5.1.3:1.1.5 +4.2.1:5.4.2:2.4.2:2.7.1:2.3.1:1.1.1 +1.1.5:1.2.1:1.11.1 +3.1.3:2.6.1:2.3.1:1.2.1:3.1.1:1.2.5 +4.2.1:1.14.14:2.7.1:2.7.1 +2.3.1:5.4.2:2.7.2 +2.7.7:2.4.2:2.7.1:4.1.1:4.3.1:1.1.1:3.1.3:5.4.99 +2.1.1:4.4.1:1.6.2:4.1.2:2.6.1:1.14.14 +4.2.3:1.1.1:1.4.9:3.1.1:2.7.7 +6.3.2:2.3.3:3.1.3:1.1.1 +2.7.7:1.1.1:1.11.1:1.1.1 +3.1.3:2.7.7:1.1.1 +3.1.3:4.1.2:4.2.1 +2.3.1:1.13.11:1.1.1:5.5.1:1.2.7 +3.5.4:4.1.1:6.4.1 +2.3.3:2.2.1:3.5.4:1.14.12:2.3.3:2.4.2:4.4.1 +1.3.1:2.7.1:1.1.1:1.23.5:2.3.1 +2.3.3:3.1.1:4.1.2:4.2.2:5.1.2:4.1.1:3.5.4:9.9.9:1.1.2 +2.3.1:4.1.1 +2.4.2:1.1.1:2.7.1:2.5.1:4.4.1:1.1.1 +5.1.3:2.1.2:2.7.1:4.2.1 +2.6.1:1.2.4:1.1.1 +3.5.4:3.6.1:5.3.1:2.7.1:4.1.1:1.14.15 +4.4.1:3.3.2:1.1.1:2.7.4 +2.6.1:2.7.1:5.4.2:6.3.4:1.1.1:1.1.1:1.1.1 +1.13.11:1.11.1:1.14.19:1.2.1:3.2.1 +2.3.1:5.4.2:3.6.1:4.1.3:1.1.1:5.3.1:1.1.1:1.14.14 +1.4.4:3.1.6:5.3.1 +1.1.5:2.3.3:3.1.1:2.1.1:2.3.1:5.3.3:4.3.1:4.2.1 +1.1.1:2.7.1:2.7.1:3.1.2:2.7.1:2.3.1:1.17.99:3.1.5:4.2.1:1.1.1:2.3.1 +4.4.1:1.14.13:1.2.1 +1.14.14:2.3.1:6.2.1:1.5.8:1.2.1:5.3.1 +1.1.98:5.5.1:3.5.4 +3.1.2:2.3.1:4.3.1:2.1.2:1.3.1:2.7.6 +5.1.2:1.1.1:3.5.1:1.1.1:1.8.1:6.2.1 +9.9.9:4.1.2:2.6.1:2.3.3 +1.1.1:4.1.3:4.1.2:6.4.1:4.3.2:1.1.1:1.1.1:1.2.1:1.1.5 +1.8.4:1.14.11:1.2.7 +1.1.1:1.1.1 +1.3.8:2.4.2:2.6.1:2.8.1:2.7.1:5.1.3:1.1.1:2.7.1 +5.1.3:5.1.3:4.2.3:1.14.13:1.1.2:6.3.5:9.9.9:5.5.1:4.1.1 +1.13.11:1.14.13:2.3.1:1.1.1:1.14.11 +4.6.1:5.4.2:3.5.3:1.1.1:4.1.1:1.17.1 +9.9.9:5.5.1:2.8.3:5.3.1:2.7.1:1.1.1:1.13.99:1.2.1:4.2.3 +1.2.4:6.3.5:2.3.1:1.2.1:3.1.3:1.1.1:2.3.1:1.5.8:1.3.5:1.2.1 +1.1.1:3.2.1:3.3.2:3.1.1:3.1.3:2.7.1:5.4.2 +5.3.1:6.2.1:4.3.3:1.1.1:6.4.1:1.1.1 +3.3.2:1.1.2:4.2.1:1.1.5:2.7.1 +1.8.7:2.3.1:1.1.1:4.1.1:1.1.1:1.14.13:2.4.2:1.2.1 +5.4.2:2.3.1:3.1.3:4.1.2:4.1.1:2.3.1:6.2.1:5.1.1 +3.1.2:3.1.2:2.7.1:4.2.1:4.3.1:1.1.1:4.1.1:1.2.1 +1.14.99:2.7.7:9.9.9:2.1.1:1.2.1:1.2.4 +1.2.1:2.7.7:1.8.3:2.7.8:2.3.1:4.1.1 +1.1.1:2.6.1:2.7.9:1.1.5:2.3.3:1.1.2:1.3.5 +2.5.1:1.1.1:2.3.3:4.2.1:5.1.3:1.2.7 +1.1.1:2.7.2:1.17.3 +2.5.1:2.3.3:2.3.1:1.2.3:2.7.1 +1.1.1:2.3.1:1.5.3:1.1.1:4.2.3:3.1.1:1.14.11:5.5.1:5.1.3 +4.1.3:1.2.1:1.14.19:2.7.1 +2.2.1:2.3.3:1.2.1:2.6.1:1.14.13 +3.5.1:9.9.9:1.1.98:4.2.1 +1.8.1:4.2.1:2.3.1:1.5.1:4.1.1 +2.7.1:2.6.1:4.2.1:2.7.1:3.1.2 +2.7.2:3.1.3:2.3.1:1.1.1 +4.4.1:1.14.11:1.14.11:2.8.2:1.14.16 +1.1.99:2.2.1:2.7.7:1.1.99:3.7.1:1.5.3:4.1.2:1.1.5 +1.2.1:1.8.1:4.1.2:5.3.1:9.9.9:1.13.11:1.2.1 +5.3.1:3.1.1:2.7.4:3.1.3:1.14.19 +2.7.1:4.2.3:1.1.1:4.1.1:1.4.3 +2.7.8:1.8.1:3.5.4:4.2.1:1.1.1:2.3.1 +3.1.3:1.14.13:3.1.1:5.4.99:1.1.1 +2.3.1:9.9.9 +1.2.1:3.13.1:1.2.4:4.3.1:2.3.1 +2.6.1:4.3.1:4.2.1 +1.1.1:3.1.1:2.1.1 +1.1.1:3.2.1:1.1.1:1.1.1:4.4.1:3.1.2:1.3.1:2.8.3 +5.3.1:4.3.1:1.1.1:5.3.1:2.7.7:2.8.1:1.14.13:2.3.1 +1.1.1:1.1.2:1.1.1:1.1.1:4.1.1:1.2.7:4.3.3:2.7.2 +1.1.2:2.3.1:1.5.8 +2.7.7:1.1.2:2.7.1:2.8.3 +5.4.2:3.1.3:2.7.1 +4.1.1:1.1.5:2.7.7:1.3.1 +6.3.4:2.2.1:4.3.1:4.1.3 +5.4.2:1.14.99:4.2.1:2.3.3:5.3.2:1.3.1 +2.7.7:3.1.3:4.2.3:1.1.1 +2.1.1:6.2.1:1.2.4:1.13.11:2.7.1:2.3.3:2.4.2 +2.7.7:2.7.1:2.3.1:1.1.1:1.2.1 +1.1.1:2.7.1:1.3.5:1.1.1:1.1.1:1.1.1:2.3.3:4.1.3 +4.2.1:1.1.2:2.3.1:5.4.2:1.1.1:2.7.4 +1.1.1:5.3.1:4.1.1:1.14.13 +1.1.1:2.6.1:1.1.1:2.3.1 +2.3.1:3.1.2:1.1.5:1.14.13:3.1.3 +2.7.7:2.6.1:1.5.8:9.9.9:1.4.3:3.1.2:3.7.1 +3.1.1 +1.8.7:2.3.1:1.2.1:1.1.1:6.2.1:2.3.3:2.7.2:2.8.1 +4.2.1:1.8.4:4.4.1 +1.1.1:2.6.1:1.18.1:1.2.7:1.1.1:1.14.12:3.3.2:1.14.16:1.1.1:2.7.4:2.7.1:5.4.2 +2.8.3:2.4.2:1.1.1:2.7.7:2.5.1:9.9.9:6.2.1:1.1.1:1.2.1:2.1.1 +2.7.1:5.3.3:2.3.1:2.3.3:2.3.1:1.1.1 +1.2.1:1.14.15:1.1.2:2.8.3:1.1.1 +2.4.1:4.1.2:1.1.1:1.14.16:2.7.1:2.3.1 +1.14.15:4.1.1:1.1.1:2.3.1:4.2.1:1.13.11:1.2.1:1.1.1 +5.1.99:4.6.1:3.5.4:1.8.1:5.3.1 +4.1.2:3.5.4:1.2.4:2.7.7:1.17.1 +2.5.1:1.14.13:6.3.4:1.1.1:6.2.1:1.1.1 +1.1.1:5.4.2:6.4.1 +1.3.1:5.5.1:1.3.1:1.1.1 +6.2.1:2.7.1:1.17.99:1.14.11 +4.1.1:2.6.1:5.1.99:2.5.1:2.3.1:3.7.1:1.3.1:1.1.1:2.4.1:1.14.14:1.1.1 +2.7.1:4.4.1:2.5.1:1.1.1 +5.2.1:1.14.14:4.4.1:5.4.2:4.1.3:1.8.1:5.4.2 +1.13.11:1.1.2:1.1.1:2.7.1:1.1.99 +1.14.15:5.3.1:4.1.1:1.14.14:2.1.3:4.3.1:4.2.1:1.1.1 +1.2.1:5.4.2:2.3.1:1.1.1:4.1.2 +1.17.1:1.2.1:1.1.99:5.4.2 +1.14.14:6.4.1:3.5.4:5.3.3:2.8.3:1.1.1:5.3.1:6.2.1 +1.1.1:2.4.1:1.14.14:1.1.1 +1.2.1:5.5.1:2.1.1:2.7.1 +1.1.1:2.5.1:1.1.1:3.1.3 +1.14.15:2.7.1:1.3.8:1.2.1:1.1.1 +1.1.2:2.7.7:2.7.1:4.2.1:1.1.1:2.7.1:1.1.1:2.7.4 +3.1.3:4.1.3:4.3.1:1.1.1:5.3.3:1.2.1:1.2.7 +2.1.2:2.4.2:6.3.4 +1.1.1:2.7.1:2.1.2 +3.1.1:4.1.2:1.14.15:1.1.2 +1.1.1:1.1.1:1.1.2:2.5.1:1.2.7:1.1.1:1.2.1 +4.2.1:2.3.1:2.7.4:1.17.1:2.8.3 +2.7.1:2.7.1:1.1.1:5.3.3:2.1.4:5.3.1 +1.3.1:1.14.13:1.1.1:2.6.1:2.3.1:2.8.2:4.1.1 +1.13.11:2.6.1:1.1.1 +2.1.1:2.6.1:1.1.1:1.13.12:1.1.1:2.7.1 +1.13.12:3.1.3:2.7.8:1.14.14:3.5.1 +1.1.1:1.1.1:1.3.5:1.14.14 +4.1.2:4.1.1:2.1.1:1.1.1:2.3.1:2.7.1:3.1.3 +2.4.2:1.8.4:2.1.2:1.1.1:1.5.3 +1.3.1:1.4.3:3.7.1:1.1.1:1.1.2 +1.7.3:1.1.1:1.1.1:1.2.1:5.1.3:5.3.1 +2.7.1:3.5.4:1.17.3:1.8.4:1.1.1:4.1.1:1.3.1 +1.1.1:3.1.3:1.1.3:1.13.11:5.3.2:4.1.3 +4.1.1:1.1.1:1.14.14:4.1.2 +1.14.13:1.2.1:1.1.2:1.1.2:2.3.1:2.4.1 +1.2.4:2.3.1:2.7.7:4.2.1:4.2.1:2.3.1 +1.1.1:9.9.9:4.3.1:1.2.7:2.5.1:2.6.1:2.7.9:1.1.1:1.2.4 +2.7.7:4.4.1:1.1.1:1.18.1 +4.2.1:2.5.1:1.2.7:2.1.1:2.7.2:2.7.7:3.1.1:2.7.9 +5.5.1:1.2.1:5.4.2:5.4.99:1.8.7:4.2.1 +2.8.3:2.7.7:2.7.7:3.1.3 +4.1.2:1.13.11:5.4.2:1.14.16 +3.7.1:1.2.1:1.1.1:1.1.2:4.3.1 +2.3.1:4.2.1:1.2.7:4.2.3:1.11.1 +1.1.1:1.13.11:1.18.1:3.1.3:1.1.1:1.3.1 +1.5.8:1.1.1:4.1.2 +1.5.8:2.7.1 +1.2.4:4.2.1:1.1.1 +1.1.1:9.9.9:1.1.1:2.7.1:2.6.1:1.3.5:1.2.7 +1.1.1:5.4.99:3.6.1:4.1.1:6.4.1:3.2.1 +1.2.1:2.7.1:1.2.1:1.14.13:3.1.1 +1.4.3:6.2.1:1.1.1:1.14.11:5.1.2 +2.7.7:1.14.14:5.3.1:4.1.3:1.14.11:1.1.5 +1.14.12:1.2.7:6.4.1:2.4.2:1.14.13:5.3.1:1.1.1:4.1.1 +1.3.5:1.2.7:1.1.1:4.2.1:2.6.1:2.7.9 +1.1.1:1.13.12:4.1.1:3.1.1:1.1.1:1.1.1 +2.1.1:9.9.9:1.1.1:1.1.1:4.1.3 +1.1.2:2.1.2:1.1.5:1.3.1:2.7.7:1.14.12 +4.2.1:4.2.1:4.1.2:1.1.98:5.4.2 +2.3.3:1.1.1:2.1.4 +3.1.1:1.5.3:1.1.1:1.1.1:2.7.6:1.1.1:6.3.4:1.1.1:1.2.1:5.4.2:1.1.1:3.5.1 +4.2.1:5.1.2:4.2.1:3.5.99 +4.6.1:1.1.1:1.14.12:5.4.2:2.7.9:1.13.11:2.2.1:1.2.7 +1.1.1:5.3.1:2.7.1:1.2.7:2.7.1:2.7.1:1.3.1 +3.5.1:4.1.3:5.3.1:1.1.98 +3.5.99:1.14.13:1.1.1:2.7.1 +2.7.1:5.1.1:1.4.3:1.13.11:5.4.2 +5.3.1:5.3.1:3.1.2 +2.3.1:1.14.14:4.1.2:2.7.1 +1.1.3:1.1.1:1.14.14:1.1.3 +3.1.1:2.7.1:1.1.1:2.8.3 +1.1.1:4.4.1:1.1.5 +1.1.1:2.7.2:1.1.1:1.14.18:9.9.9:3.1.1 +2.1.1:1.3.1:2.3.1:4.2.1:2.5.1:4.2.3:2.3.1:1.2.7:4.1.3 +4.2.3:4.2.1:1.2.1:2.7.1 +1.1.1:1.14.16:9.9.9:2.1.2:1.1.2 +1.2.7:5.4.2:2.7.7 +3.6.1:5.1.3:5.3.2:1.3.8 +4.2.1:4.1.1:4.2.1:2.2.1:3.6.1:1.13.11:5.3.1:1.1.1:1.14.14 +2.6.1:2.7.1:1.1.5:2.3.1:2.7.1 +1.14.12:2.1.1:5.4.2:4.1.2 +5.4.2:1.17.4:1.1.1:1.1.1:1.1.1:2.7.1:1.1.2:2.7.1:4.3.1:1.1.2:1.2.7:1.1.1:1.14.14 +2.3.1:2.5.1:4.2.1:3.7.1 +1.1.1:1.1.98:2.3.3:1.1.1:1.1.1 +5.1.3:2.7.1:2.7.6:2.6.1:1.13.11:6.4.1 +1.18.1:2.3.1:1.2.4 +3.1.3:5.1.3:1.1.1:2.7.2 +5.4.2:2.7.7:2.3.1 +1.5.3:5.1.99:2.7.2:1.2.7:1.2.1:2.3.1 +1.1.1:1.1.1:1.2.1:2.7.4:2.4.2 +2.3.3:2.3.1:4.2.3:2.8.2:6.2.1:1.2.1 +2.3.1:1.1.1:2.3.1 +2.6.1:3.1.3:6.2.1:1.5.3:2.3.1:5.5.1:2.6.1:1.1.1:4.2.3 +1.14.17:2.7.7:1.1.5:1.2.1:1.13.11:1.1.5 +1.1.1:4.1.3:1.14.14 +1.8.7:2.4.2:1.2.7:4.3.2:2.3.1:1.1.1:4.2.1:3.1.3:1.13.11 +1.17.4:2.7.1:2.1.2:5.5.1:1.1.1:1.1.5:3.5.4:1.3.1 +2.3.1:1.1.2:4.1.3:4.2.1:3.1.4 +1.1.1:1.14.15:1.1.2:2.7.4:3.2.1:1.2.5:1.1.1 +5.4.99:1.3.8:4.1.3 +1.5.1:1.1.1:2.7.1:1.1.1:2.3.1:2.3.1:1.14.14 +5.1.99:3.1.4:1.14.14:2.6.1 +1.2.4:2.5.1:5.4.2:1.14.19:2.7.1:6.4.1:9.9.9 +3.3.2:2.3.1:1.17.4:2.6.1:4.1.1 +3.1.3:1.2.4:1.14.15:1.1.1:1.1.1 +1.2.7:5.3.1:2.3.3:1.1.5:4.1.2:3.5.2:1.1.1:4.1.1:1.3.1:3.1.4:1.3.1 +2.7.7:1.1.1:4.2.3:6.4.1 +1.1.1:3.1.3:6.3.4:1.1.1:1.1.1:4.1.2 +2.5.1:1.2.1:1.14.14:1.1.5 +1.1.1:3.1.3:2.3.3 +5.3.3:4.1.3:2.7.7:3.6.1:1.1.1:2.3.1 +4.2.1:1.1.2:1.14.14:2.1.4:1.8.7 +1.14.13:1.1.1:4.2.1:1.1.1:1.13.11:1.1.1:3.5.1:1.1.1 +1.13.11:2.7.2:9.9.9 +4.2.1:1.1.1:3.5.1:1.14.16:2.7.1:4.1.1:1.1.5:1.14.11 +3.1.2:1.14.14:2.2.1:3.1.3:1.1.1:2.4.2 +1.1.1:1.13.12:1.13.11:4.3.1:3.1.2:3.1.2:2.7.1 +4.1.1:1.1.2:1.13.11:1.8.1:1.1.1:1.14.14 +1.11.1:9.9.9:2.6.1:2.3.1 +1.14.11:2.8.3:3.1.3:1.4.3 +2.1.1:4.1.2:1.5.8:2.3.3:1.14.14:2.2.1 +2.2.1:1.5.3:1.1.1 +1.14.15:3.1.3:1.1.2:1.1.1:2.7.2:2.1.1 +5.3.1:3.1.2:9.9.9:2.7.1:5.4.2:4.2.1:2.7.1:1.1.1 +1.1.3:3.1.3:9.9.9:1.14.14:6.2.1:3.1.4 +5.3.1:1.1.5:2.3.1:2.7.7 +1.1.1:4.4.1:3.5.5:3.1.3:2.6.1:2.3.1 +1.1.1:4.2.1:5.4.99 +3.1.3:2.3.1:1.1.1:2.5.1:2.7.1 +1.3.1:2.3.1 +1.13.11:6.2.1:5.3.1:2.7.1:1.2.4:9.9.9:6.3.5:5.3.1:9.9.9 +2.4.2:1.1.98:3.1.2:4.2.1 +2.3.1:1.14.11:2.7.7 +4.1.1:3.1.2:3.1.4:4.2.1:1.13.11 +1.1.5:1.17.4:1.1.5:2.6.1:2.1.2:1.5.1:2.3.1 +2.8.3:4.4.1:1.1.1:1.4.9 +2.4.2:1.14.13:1.1.1:3.1.3:3.5.2:1.2.1:1.1.1:5.4.99:2.4.2:1.18.1 +1.1.1:9.9.9:1.11.1:1.1.1:1.14.14:6.2.1:1.14.99 +4.2.1:6.3.4 +4.1.1:1.1.1:2.6.1:1.1.1:4.99.1:9.9.9 +6.2.1:9.9.9:9.9.9:1.14.14:1.1.1:1.1.1:3.6.1 +3.1.3:1.1.1:3.1.2:2.1.2:4.4.1:1.3.5:3.1.3:2.6.1:1.1.1 +1.1.5:2.7.4:6.4.1 +2.6.1:1.1.1:2.7.1:2.7.1:4.1.1:1.2.7:9.9.9:4.1.2:1.1.2:2.1.1 +4.3.1:2.7.1:4.1.3:2.1.1:2.2.1:2.5.1:5.1.3:2.7.1 +1.1.1:1.1.1:1.1.1:1.1.1 +2.3.1:1.1.1:1.1.1:1.13.11:5.2.1:4.2.1:2.4.2:4.1.3:1.13.11:1.1.1 +1.1.1:4.1.3:4.2.3:1.1.2:1.2.1:4.2.1:2.3.1:1.1.1:1.1.1 +5.4.2:4.3.1:1.1.1:6.3.5:1.1.1:1.14.13 +2.3.1:1.2.1:2.1.1 +3.1.3:2.6.1:1.14.13 +1.13.12:2.3.3:1.1.1:3.1.1:6.3.4:5.4.99 +2.7.7:3.1.3:3.2.1:2.7.7:3.1.3:1.1.5:3.1.3 +1.1.1:2.7.1:1.14.14:5.3.2:3.1.3:1.13.11:2.6.1 +2.7.4:1.1.1 +2.5.1:1.13.11:5.3.3 +1.1.1:1.14.14:6.4.1:1.2.1 +4.2.1:2.7.7:4.1.2:3.2.2:2.8.2:2.7.1:1.1.1 +1.8.7:4.1.1:1.1.1:2.8.3:4.2.3 +5.3.1:4.1.1:1.1.1:2.6.1:2.3.1:2.1.4:6.4.1:2.5.1:1.2.1 +1.3.8:3.3.1:5.4.2:2.3.1:4.2.1:1.2.1 +5.5.1:1.4.1:3.5.1:2.4.2:2.4.2:5.4.2:1.1.3:2.7.1:1.1.5 +1.13.99:3.6.1:2.3.3:5.5.1 +5.3.1:1.1.2:1.1.1:2.5.1 +1.1.1:2.8.3:2.3.1:1.1.1:5.1.3:1.1.1:2.7.1 +4.1.3:3.6.1:1.14.14:3.2.1 +2.7.1:1.2.1:1.1.3:5.3.3:5.3.3 +1.13.11:1.14.13:1.1.5:4.4.1:1.14.13:3.5.4 +9.9.9:6.4.1:1.1.2:1.1.1:1.13.11:1.13.11 +1.2.1:1.14.14:5.3.1:1.1.1:1.18.1:3.5.1:1.1.1:2.4.1:4.1.2:4.2.1 +1.2.1:1.1.1:2.6.1 +2.6.1:3.1.3:4.2.1:2.3.1:1.14.11:4.1.3:4.2.1:2.3.1:1.14.15:9.9.9 +2.3.3:9.9.9:4.2.1:3.1.2:5.3.1:2.3.1 +4.1.2:1.1.1:1.1.1:1.1.1 +3.6.1:3.1.1:1.1.1:1.14.13:1.2.5:2.3.2:1.14.14:1.2.4 +1.1.2:9.9.9:1.14.18:4.2.1 +9.9.9:1.1.1:2.7.7:1.1.1 +2.7.7:2.2.1:1.1.1:1.14.11 +2.4.2:4.1.1:6.2.1:5.4.2 +5.4.99:5.3.1:3.6.1:1.1.1:4.1.1 +3.1.1:1.1.2:1.8.1:1.14.13:2.6.1:1.2.1 +1.2.1:2.6.1:1.1.1:2.6.1:2.7.7:1.14.13 +2.7.1:2.3.3:1.14.16 +2.4.2:2.7.1:6.2.1:3.1.3:1.1.1:6.3.4:1.3.5:5.3.3:1.2.1 +1.2.1:1.14.16:4.2.1:5.4.2 +5.3.1:2.7.1:1.1.1:1.14.12:1.14.99 +2.1.2:2.6.1:2.6.1:1.1.2:1.14.13:1.1.1 +1.14.16:4.2.1:1.5.3:1.1.1:2.7.2:2.7.1:1.2.7 +2.7.1:5.3.3:5.3.1:1.14.14:1.1.1:1.8.7:2.6.1 +1.1.1:1.8.4:4.1.3:1.1.1 +6.2.1:2.2.1:1.1.1:3.1.1 +1.7.3:1.1.1:2.3.1:9.9.9:2.4.2:2.6.1 +1.13.11:1.14.13:4.2.1:1.1.1:1.1.1 +2.7.9:4.1.1:1.4.3:1.17.4:1.1.1:1.8.1:3.5.4:1.2.1 +2.3.1:5.4.99:5.5.1:2.7.2:3.1.2:2.1.4:1.1.1:2.7.1 +2.3.3:4.2.1:6.2.1:2.3.3:1.1.1:2.1.1:1.1.2:9.9.9:1.1.1:4.2.3 +3.2.1:1.1.2:4.2.1:1.2.5 +9.9.9:1.1.1:4.2.1:2.6.1:1.1.1 +3.5.3:5.4.2:1.13.11:1.1.1 +9.9.9:1.14.16:2.3.1:4.1.3:2.7.1:2.7.4 +1.2.4:1.2.5:1.1.1:1.1.1:1.1.1 +4.3.1:2.7.7:1.14.19:4.1.1 +5.1.3:9.9.9:6.4.1:1.1.1:4.2.1:4.1.3:2.3.1:4.1.1:1.1.5:1.1.1 +1.2.1:4.1.1:1.1.2 +2.7.1:3.1.3:2.1.1:1.13.11:1.1.1:1.1.1:2.3.1:4.2.1 +4.3.1:6.2.1:2.5.1:2.6.1 +1.14.14:1.1.1:2.7.7:4.2.1:1.14.14:2.1.1 +1.5.1:2.1.1:1.13.11:1.2.1:1.1.1:1.13.11 +1.1.1:2.3.1:4.4.1:5.4.2 +2.1.1:4.1.3:4.1.1:9.9.9 +2.3.1:1.1.1:3.1.3 +2.7.8:2.3.1:4.2.3:2.7.1:2.7.9:1.14.14:2.4.1:2.3.1:1.14.14 +4.4.1:1.1.1:1.1.1:5.5.1:2.1.1 +1.1.1:4.4.1:6.6.1:1.14.19:1.3.1:3.1.4:1.1.1:2.3.3 +6.2.1:2.7.8:1.1.1:4.3.1 +2.3.1:4.1.3:2.7.1:2.5.1:1.3.1:3.1.3:1.1.1 +2.5.1:1.3.1:3.1.3:1.1.1:3.1.3:1.4.3:3.2.1:1.1.5 +1.14.19:4.2.1:5.5.1:2.3.3 +2.7.7:1.1.1:1.1.1 +2.7.1:1.1.2:9.9.9 +1.1.1:2.6.1:1.11.1:2.1.1:1.14.15 +6.2.1:1.2.4:4.1.1:1.3.1 +1.2.7:3.6.1:6.4.1:1.14.14:2.7.7:1.1.1:1.4.3 +5.3.1:1.14.18:4.1.2:2.7.9:1.3.1:1.14.19:3.1.4 +2.3.1:2.6.1:5.3.3:1.2.4:4.1.1:6.4.1:1.1.1:5.4.2 +2.3.3:1.1.1:5.5.1:1.3.1:1.1.1:1.2.1:3.1.1 +4.1.3:4.1.2:2.1.1 +1.1.1:4.1.3:1.1.1:2.6.1:1.18.1:1.13.11:2.3.1 +2.5.1:9.9.9:2.7.1:1.1.1:4.3.1:2.7.1:2.7.7:4.1.1:1.1.1:1.1.1:4.1.2 +1.13.11:3.7.1:3.1.3:1.14.12 +1.14.17:2.3.1:1.4.3:2.7.1:1.4.1:2.7.1:2.7.7:3.1.3 +2.3.1:2.7.7:1.1.1:1.1.1:5.4.2:1.14.13:5.1.3 +5.4.2:2.7.1:2.2.1 +1.2.1:4.1.1:1.1.1:1.1.1:1.1.1 +1.14.15:2.3.3:2.5.1 +3.5.4:9.9.9:2.7.7:1.14.13:2.3.1:1.1.1:4.4.1 +3.1.4:1.1.1:2.6.1:2.7.4 +3.5.1:1.2.1:3.1.3:1.1.1 +2.6.1:1.1.1:2.3.1:1.1.1:4.1.1:1.1.1:1.13.11:1.2.1:4.2.1 +3.1.4:2.7.7:2.7.7:1.14.14 +4.2.1:4.1.3:2.7.1:1.2.1:1.1.1:1.1.1 +3.1.4:1.1.98:6.2.1:3.13.1:4.4.1:1.1.1 +5.4.2:2.7.8:1.1.1:2.1.1 +1.13.11:2.3.1:1.1.1 +2.3.1:1.1.1:1.1.1:1.14.19:1.8.3:3.5.2:2.3.1:1.3.1 +1.17.4:1.1.1:1.14.15:4.4.1:1.4.3:1.1.1 +2.7.1:2.7.1:4.3.1:1.2.1:1.1.98 +1.1.1:2.4.2:1.1.1:2.4.2 +2.3.3:4.1.1:2.3.1:2.7.1 +5.4.99:1.13.11:4.1.1:1.1.1 +3.1.3:1.1.99:2.7.2:2.3.1:1.3.1 +4.1.1:5.5.1:2.3.1:3.6.1:2.7.1:2.7.7:3.5.1:1.8.1 +5.3.99:1.1.1:6.2.1:2.7.2 +2.3.1:1.1.1:2.7.1:2.6.1:2.7.2 +2.7.7:1.1.1:1.14.13:4.1.1 +9.9.9:1.14.14:2.6.1:2.7.1:5.1.3:1.13.11:9.9.9:2.6.1:2.7.1:1.1.2:1.1.2:2.5.1:2.7.1 +1.14.14:2.4.2:5.4.2:3.6.1:3.1.3:4.2.1:1.2.1:1.8.7:2.7.7 +1.3.8:1.2.7:9.9.9:1.1.1:2.7.1:2.7.1 +5.3.3:1.13.11:4.1.3:5.1.2:1.14.13:1.14.14:2.7.2:1.1.2:4.3.1:1.2.1 +1.5.3:1.2.4:4.1.1:4.2.1 +1.1.1:1.1.1:3.5.1:1.8.99:2.7.1 +6.2.1:2.7.1:1.2.7:4.1.1:2.4.1:6.2.1:2.6.1:1.1.1 +1.1.2:1.2.1:1.14.13 +2.7.4:2.4.2:4.2.1:1.1.1 +1.2.4:4.3.1:2.7.2:1.11.1:1.1.5:4.2.1:2.1.1:1.2.7 +9.9.9:1.13.11:1.14.14:1.1.1:4.2.1:1.1.1 +4.1.3:1.2.3:4.1.1 +4.1.1:2.7.7:1.1.1:4.3.1:4.1.2 +1.1.1:2.1.2:1.2.3:1.2.7:4.4.1:1.1.1:5.5.1 +1.1.1:2.7.1:1.1.1:1.5.8:1.1.1 +4.2.3:1.18.1:1.1.2:1.8.1:4.4.1:5.4.99:1.2.1:5.1.3:1.1.1 +2.7.7:4.2.3:3.1.1:2.7.1:4.2.1 +2.7.4:1.2.4:5.4.99:9.9.9:1.5.8:1.1.98:4.2.1:1.1.2:5.1.99:2.4.2:6.2.1 +1.14.14:1.14.14:1.1.5:4.2.3:2.6.1:9.9.9:1.3.5:1.1.1 +1.1.1:1.1.1:1.2.1:1.14.19:4.1.2 +4.1.3:2.2.1:1.1.1:1.14.14 +9.9.9:1.14.12:1.1.2:2.7.1 +2.2.1:3.2.1:1.2.4:2.3.1:1.1.2:3.1.3:2.7.7 +5.4.2:2.5.1:1.14.14:1.1.1:1.1.1 +1.14.12:1.14.99:2.1.1:4.4.1:1.1.1:2.5.1:1.1.1 +2.8.3:2.3.1:1.1.1:2.2.1 +5.3.1:4.1.1:2.7.4:1.1.1:4.2.3:2.5.1 +1.1.1:2.3.3:1.1.5:6.4.1:1.14.11 +9.9.9:6.2.1:2.7.1:9.9.9:2.7.2 +1.1.1:4.2.1:1.1.1:2.3.1 +1.1.1:2.7.4:4.2.1:1.2.1:2.3.1:5.1.3 +1.1.2:1.17.1:1.1.1:2.7.4:2.7.7:3.3.2 +5.3.1:1.1.1 +6.4.1:1.1.1:3.7.1:1.14.11:1.1.3:4.4.1:1.14.13 +1.2.1:4.4.1:2.7.7:2.3.1:1.1.1:1.2.1:2.7.7 +1.1.1:1.1.1:2.4.1:3.6.1:2.6.1 +1.1.1:5.3.3:5.4.2:2.3.1:1.1.1:3.5.1 +1.14.15:1.18.1:2.6.1:2.4.1:3.5.4:3.4.13 +1.1.1:2.6.1:2.3.1:1.2.1:1.1.99:4.1.1:1.1.1:2.7.1:1.1.5 +3.1.3:1.2.1:4.2.1:4.1.2:1.1.1:1.1.98:1.1.5:1.2.3:1.2.4 +1.1.1:4.4.1:4.3.1:4.4.1 +2.6.1:2.7.1 +2.7.7:1.14.14:1.3.8:2.7.1:6.4.1 +1.1.1:2.1.2:1.1.1:1.3.8:1.1.1:1.1.1:2.7.1 +2.1.1:4.2.1:5.3.1:4.2.1:2.7.1 +4.2.3:2.7.4:1.1.1:1.5.1:4.4.1:4.1.2:1.1.1 +1.2.1:1.1.1:3.6.1:4.6.1:5.1.3:4.2.1:3.6.1 +1.1.1:5.3.1:1.1.1:9.9.9:4.2.1 +3.1.2:2.7.1:2.3.1:4.2.1:5.3.1:3.1.3:1.11.1:1.14.14:1.2.1:1.1.1 +2.6.1:2.3.1:1.1.1:3.1.1:1.2.4:2.6.1:1.1.1:2.7.1 +2.7.1:1.1.2:1.1.1:1.4.1:2.7.7 +2.6.1:2.3.1:1.4.3:2.1.1 +2.3.1:1.1.1:6.3.4:1.2.4:1.1.5:1.5.8:1.11.1:4.1.1:1.1.5 +4.1.3:2.5.1:3.6.1:1.3.8 +1.1.99:1.13.11:2.7.1 +1.2.1:2.7.1:3.6.1:5.3.3:1.1.1 +2.7.1:5.3.1:1.1.2:2.8.3:2.4.2:1.1.1 +1.8.7:1.1.1:3.5.2:2.7.7:1.1.99 +2.7.1:1.1.1:1.1.1:6.2.1:3.1.3 +2.3.3:2.6.1:1.1.1:1.13.11:2.7.8:2.7.1:3.1.1:1.14.14:4.1.1 +2.7.1:4.1.2:2.7.7:4.3.1:9.9.9:1.1.1 +1.3.8:5.5.1:9.9.9:4.2.1 +1.1.1:1.14.14:2.7.2 +5.3.1:2.7.7:5.4.2:1.14.14:2.1.4:6.4.1:4.4.1 +1.1.1:2.6.1:2.7.1:1.1.1:2.4.2:2.1.2 +1.2.7:3.2.1:1.1.1:4.1.3:4.4.1 +3.1.1:1.1.1:3.6.1:2.7.1:1.2.1:1.1.5:3.6.1:1.1.2:3.5.1 +6.3.5:1.1.1:2.6.1:3.1.4:2.3.1:4.1.1:1.2.1 +2.2.1:5.5.1:2.3.1:2.7.2:4.2.1 +5.5.1:2.7.1:5.3.1:9.9.9:1.1.1:2.7.1:1.1.5 +3.1.1:1.2.1:4.2.1:1.1.1:1.1.1:5.3.1:4.1.2:5.3.1:1.1.1 +1.2.1:5.4.2:2.7.1:1.1.1 +6.2.1:3.1.3:1.1.5:1.2.1:5.4.99:1.17.3:1.1.1:1.1.1 +6.4.1:3.1.1:1.1.2:1.14.13:6.2.1:2.5.1:1.13.11:2.3.3:3.1.2 +3.6.1:4.2.1 +1.1.1:3.1.2:4.2.1:2.6.1:1.13.99:2.3.1 +1.3.1:5.1.1:2.8.1:1.13.11:1.3.1:1.1.1:3.1.1 +4.4.1:2.3.1:9.9.9:9.9.9:3.1.3 +1.1.1:2.3.1:3.6.1:5.3.1:2.3.1:2.3.1 +4.1.2:2.1.1:2.7.1:9.9.9 +1.1.1:4.1.1:4.2.3:2.3.1:5.3.1:2.7.1:1.1.1:1.8.1:2.1.2 +6.4.1:1.18.1:1.17.4:3.5.1:2.6.1:1.1.1:4.2.1:4.1.1 +2.3.3:5.4.99:1.2.1:4.4.1 +1.1.99:2.7.7:1.1.1:4.1.3:4.3.1:1.3.1:1.14.14:1.1.1 +5.1.3:2.7.1 +2.6.1:3.1.4:9.9.9:2.5.1:3.1.1:3.1.3:9.9.9:3.5.1:1.3.8:2.7.2:2.3.1:1.2.7:1.13.11 +4.2.1:2.6.1:3.5.3:9.9.9 +3.5.1:2.1.1:2.3.1:5.4.2:1.1.1:4.2.3:2.6.1:1.1.1:1.14.15:1.1.1 +1.1.1:9.9.9:1.2.5 +4.2.3:1.1.1:5.4.2:1.1.1:2.3.1:2.3.1 +1.13.11:3.6.1:2.7.2:4.1.3 +1.2.1:1.14.15:1.2.7:1.2.7:1.1.98 +1.2.1:1.1.1:2.7.1 +2.7.1:3.7.1 +3.1.3:6.4.1:1.1.1:4.1.3:1.1.5:1.2.7:1.1.1:1.14.11:3.1.3 +1.14.13:4.1.1:1.6.2:1.14.16 +1.8.99:3.6.1:1.5.1 +3.6.1:4.2.1:4.2.3:1.1.1 +1.13.11:2.3.3:2.8.3:9.9.9 +2.3.1:2.7.1:4.1.3:1.1.1:3.2.1:2.3.1:1.1.1:2.7.7 +1.3.1:1.1.1:4.1.1:4.1.1:9.9.9:5.3.1:1.13.11:1.5.1 +4.3.1:2.4.2:4.4.1 +2.3.1:4.2.1:1.8.4:4.2.3:2.3.1:5.1.3:5.5.1:2.7.7 +1.1.1:2.8.3:1.3.8:1.1.99:1.2.7:2.3.1:3.1.1:2.7.1 +2.7.1:2.7.1:1.1.2:2.7.1:2.8.3:1.11.1:1.1.1:1.1.5:2.4.1 +6.4.1:9.9.9:3.6.1:5.3.3 +5.4.2:6.3.5:2.6.1 +1.1.1:4.2.1:4.1.2 +1.2.1:4.1.1:1.2.1:1.1.1:1.1.1:4.4.1:4.1.2:4.3.2:1.14.14:1.14.14 +1.14.13:1.1.5:2.3.1:3.3.2:1.14.13:1.1.1 +5.4.2:1.1.1:2.6.1:5.3.1:2.1.2:5.1.1:1.1.1:1.1.1 +1.2.4:4.2.1:2.1.2:5.4.99:4.4.1:1.14.18:3.6.1:1.2.4:1.1.1:1.14.14:1.14.14:2.7.1:3.5.4:1.1.1 +1.1.1:2.3.1:1.2.5:1.2.1:5.4.2:2.8.3 +3.5.2:3.5.1:1.2.4:2.3.1 +4.2.1:1.2.4:1.1.1:1.1.2:5.1.1:1.2.1:1.3.1 +2.7.1:2.7.1:5.3.1:3.1.3:2.7.1 +1.1.1:3.5.4:5.1.3:2.3.1 +4.1.1:3.1.1:1.2.7:1.1.1:2.7.7:1.14.13:1.5.8 +4.2.1:4.2.1:1.1.1:2.4.2:5.5.1:1.1.1:1.2.7:1.2.7 +3.1.4:2.5.1:5.5.1:1.1.2:1.17.99 +2.7.8:3.6.1:2.1.1:5.4.2:2.7.4 +2.7.4:9.9.9:2.2.1:5.4.2 +1.14.11:1.11.1:2.3.1 +1.3.3:4.1.2:1.14.99:4.3.1:1.1.1 +9.9.9:4.4.1:1.3.1:1.1.1:5.4.2 +1.1.1:5.3.1:1.14.19:3.1.3 +1.3.8:5.4.99:1.1.1:1.1.1:1.14.16:3.1.1:2.3.1:1.1.5:4.1.1:4.1.2:2.1.2:2.3.1:3.1.4:6.2.1 +1.1.1:1.1.3:5.5.1:2.7.1:3.1.3:4.4.1 +4.1.1:1.8.1:1.14.11:1.2.1:6.4.1 +1.14.13:2.7.9:2.7.1:5.3.1 +1.1.1:2.1.1:2.2.1:2.5.1 +1.1.1:2.7.1:2.3.1:1.13.11:2.1.1:1.2.1:4.1.1 +1.1.2 +1.2.4:2.7.4:5.4.2:2.7.9:1.2.1:2.7.7:2.3.1:1.14.99 +6.4.1:1.1.1:1.1.1:2.1.1:2.3.1:2.4.1 +9.9.9:6.3.4:1.14.13:5.3.3 +1.13.11:4.2.3 +1.1.1:2.7.1:2.7.8 +1.1.1:1.13.11:3.5.4:1.1.3:2.5.1 +1.2.5:4.2.3 +1.4.3:1.2.1:1.2.4:2.7.1:2.7.8 +6.2.1:5.3.3:2.7.8:4.3.1:2.3.1:1.1.1 +3.5.2:1.2.1:4.1.1:1.1.1 +4.1.2:9.9.9:2.7.1:2.5.1 +1.1.1:1.1.1:1.1.98:4.1.1:1.14.14 +1.17.1:2.3.1:3.5.1:1.1.1:2.7.2:1.2.7:1.2.1:1.8.99 +4.3.3:1.5.8:1.1.1 +2.8.3:1.8.4:3.6.1:1.14.14:2.7.1:1.2.4:3.1.3 +1.1.1:4.3.1:5.3.1:5.3.1:2.5.1 +6.3.3:1.2.7:4.1.2:2.6.1:2.3.1:1.1.1:1.1.98:4.2.1 +2.1.1:1.14.13:3.1.1:2.8.3 +1.1.1:1.8.1:9.9.9:2.3.1:3.1.3 +1.2.3:1.1.1:4.1.1:4.1.1:9.9.9 +6.2.1:4.1.3:2.7.1:2.7.2 +1.14.16:2.8.3:3.1.2:1.2.1:2.5.1:1.1.1:3.3.2:1.13.11:4.4.1:1.2.3 +2.7.8:4.1.1:4.2.3:3.1.3 +5.3.1:2.7.1:6.3.4 +1.1.2:2.7.1:5.1.3:9.9.9:1.1.5:2.6.1 +1.1.1:4.1.2:1.1.1:1.13.11:2.3.3:4.2.1:2.4.2 +2.7.7:1.1.1:2.8.3:4.2.1:1.13.11:1.13.11:1.1.1 +1.1.1:2.8.3:3.5.1:4.2.1 +3.1.3:1.1.1:1.2.5:5.3.1 +1.8.5:1.11.1:1.1.2:1.14.99 +1.1.1:5.4.2:1.1.1:1.14.13:2.8.3 +1.14.19:1.13.11 +1.14.19:3.6.1 +1.1.1:1.14.14:5.5.1:2.7.2:2.3.1:5.4.2:1.2.7 +3.5.4:2.7.1:1.1.1:4.2.1:1.2.1:6.3.4 +1.1.1:2.3.1:1.14.11 +1.2.7:1.1.1:5.3.1:5.4.2:6.3.5:2.3.1:5.4.99:5.3.1:1.1.1:5.4.99:4.2.1:4.2.1 +1.14.18:6.3.5:5.3.1:3.5.3 +1.1.5:1.1.1:1.8.2:1.14.18:5.3.1 +2.8.3:2.3.1:3.1.3:5.5.1:1.14.19:1.3.1 +3.7.1:1.14.14:9.9.9:1.2.5:1.14.11:2.3.1 +2.1.1:4.2.1:1.13.11:2.8.3:1.2.1:1.1.1:2.7.7:1.1.1 +2.8.3:2.7.1:1.2.1:3.1.3:5.1.2:1.1.5 +6.4.1:3.3.2:6.3.4:5.3.1:3.3.2 +1.1.1:5.4.99:1.1.1:2.7.1:4.2.3 +1.1.5:2.7.2 +1.13.11:5.4.99:2.6.1:3.2.1 +4.2.1:1.1.1:4.1.2:2.1.1 +3.2.1:6.3.4:1.8.1 +3.5.1 +2.7.1:2.7.1:1.1.1:4.1.3 +2.4.1:1.14.11:5.3.1:1.1.1:1.2.7:4.2.1:1.1.1:5.4.99 +3.1.3:4.3.1:3.5.1:6.2.1:4.2.1:3.1.3:4.2.1:1.13.12 +4.1.1:4.4.1:1.1.1:2.7.7:2.7.1:2.7.7 +2.3.1:1.14.15:4.1.2:3.1.1:2.3.1 +5.5.1:3.1.2:1.1.1:1.1.1:4.3.1 +3.1.3:1.13.11:3.5.1:5.1.3 +1.2.1:1.14.14:5.3.3:9.9.9:3.3.1:4.2.3 +3.1.2:2.7.2:5.3.1:2.6.1:1.1.1 +2.1.2:1.2.1:2.2.1:1.1.1:9.9.9:1.1.1 +1.1.1:2.8.2:1.5.8:4.4.1:2.1.1:5.1.3 +2.7.7:3.1.1:2.1.4:4.4.1:2.7.7 +4.1.3:4.4.1:4.2.1:1.2.7:1.1.1:2.7.1:1.1.1 +1.1.1:1.1.1:2.6.1 +1.14.14:4.2.1:1.2.4:1.14.99:1.1.1:1.13.11 +2.7.7:1.1.1:2.1.1:2.4.2:1.1.1:1.1.1 +2.5.1:5.3.3:1.1.1:3.5.5:1.2.7:2.3.3 +1.14.13:1.1.1:4.1.2:4.2.1:1.4.3 +5.3.3:1.1.1:1.1.1:1.14.14 +1.2.4:2.3.3:2.7.1:2.8.2:5.3.1:2.7.1:5.1.1:2.7.1 +1.1.1:4.4.1:2.7.2:1.5.8 +3.1.2:1.1.5:1.2.1:1.1.1:4.1.2:4.1.1:4.2.1:3.6.1:4.1.1:1.2.1 +2.4.2:1.2.1:4.2.3:3.6.1:1.14.12:5.3.3 +1.2.1:1.14.13:1.1.1 +1.8.7:2.7.9:1.13.11:1.1.1:3.2.1 +1.1.1:1.1.1:1.1.1:1.13.12 +2.5.1:1.14.14:4.2.1 +1.1.1:2.3.1:2.7.1:5.3.1:1.13.11:4.1.2:1.1.1 +3.1.2:2.3.3:4.2.3 +2.8.3:3.1.3:2.8.3:2.6.1:6.3.3 +5.1.99:1.13.11:4.4.1:1.1.1 +2.3.1:2.7.1:2.3.3:1.1.98:2.7.1:4.4.1 +3.1.3:2.6.1:1.14.12 +4.3.2:2.4.1:3.3.1:2.7.1:2.7.7:3.1.2 +2.6.1:3.1.2:2.7.1:1.14.14:1.1.1 +2.5.1:2.3.3:1.1.1:5.1.1:2.3.1 +5.3.1:1.1.1:2.6.1:1.1.1:4.2.1:5.5.1 +1.1.1:1.14.14:5.3.1 +4.1.2:4.1.1:4.2.3 +1.1.1:3.5.4:1.1.1:2.5.1:2.7.1:2.7.2:2.3.1:5.4.99 +2.7.4:2.7.9:1.13.11:4.2.1:5.3.1 +1.14.14:4.3.1:1.1.1:2.3.1:1.1.5:1.1.5 +1.13.11:1.13.11:1.8.4:3.1.3:1.1.1:1.1.1 +1.4.4:1.1.1 +2.7.1:2.8.3:1.13.11:4.2.3 +2.1.1:4.2.3:1.14.12:1.1.2:4.4.1:6.2.1:4.1.1:2.5.1:9.9.9 +2.4.2:5.3.1:1.1.1:2.3.1 +2.7.7:3.1.1:2.3.1:3.7.1 +2.7.9:1.1.1 +1.1.3:1.17.4:3.1.2:2.1.2 +1.1.1:2.3.1:1.14.14:1.14.15:1.8.1 +2.7.4:4.2.2:4.1.1:2.7.4:1.2.7 +5.4.2:1.8.1:4.4.1:2.6.1 +2.7.7:3.1.1:4.2.1:1.1.1 +2.7.1:1.1.1:3.1.3 +6.3.5:9.9.9:2.7.1:4.1.3:2.7.7:1.3.1:1.17.1 +2.7.2:1.1.5:2.8.3:4.1.2:2.7.1:1.3.8:4.4.1:3.2.2:1.2.4 +1.1.1:2.7.1:6.3.4:2.7.1:4.2.1:2.3.1:5.3.1 +2.7.1:1.1.1:1.3.1:2.3.1 +1.1.1:4.1.1:4.2.1:5.3.1:3.1.4 +3.6.1:2.7.1 +2.6.1:2.7.1:1.1.1:1.2.1:1.1.1:2.7.1:2.4.2 +1.1.1:4.2.1:1.17.3:6.3.2:1.1.1:1.13.11 +4.1.1:2.3.3:1.14.13:2.7.1:5.4.2:5.4.2 +1.1.1:6.4.1:1.3.1:2.1.1:2.3.1:2.7.1:2.3.1:1.2.1:4.1.2:1.1.1:2.7.7 +2.5.1:4.3.1:1.2.1:2.4.1:1.1.98 +2.3.1:6.4.1 +3.3.2:1.1.1:2.6.1 +1.2.1:1.1.1:4.3.3:1.8.5 +2.7.7:4.2.1:4.2.1:2.3.1:2.4.2:4.2.1:2.2.1:1.1.1:2.3.1:1.14.14:3.1.2 +1.1.1:1.17.1:1.14.13 +1.1.1:3.2.2:1.1.2:1.2.1:4.2.1:4.1.2:1.14.12:1.11.1:3.5.1:1.1.1:1.14.13:2.7.8:1.2.1:1.2.1:2.5.1:1.1.1 +2.1.1:4.1.1:1.1.3:2.3.1 +3.1.6:1.1.98:5.5.1:3.2.1:1.14.16:1.1.1 +2.3.1:2.3.1:1.14.15:1.17.1:1.13.11:2.3.1 +4.1.2:1.1.1:4.1.1:2.3.1:2.3.3:4.1.3:1.2.7:2.3.3 +2.5.1:1.2.5:1.1.1:5.1.99:1.1.1:2.3.3:2.1.1:1.1.1:1.1.1:1.14.14:2.7.7 +4.2.1:1.14.14:1.13.12:1.14.12:2.6.1:4.2.1 +2.1.4:3.3.2:1.1.1 +1.13.11:1.8.4:2.7.7 +1.5.3:2.8.3:1.1.1:2.3.1:1.1.1 +4.1.1:2.6.1:3.6.1 +1.1.1:2.7.1:1.14.99:5.4.99:2.7.1:1.1.98:2.7.1:2.7.4:4.3.2 +6.4.1:1.1.1:1.1.5:1.3.2 +1.13.11:1.1.1:1.1.1:1.3.1 +2.6.1:1.2.1:2.1.1:1.1.1:2.7.4:2.7.7 +1.1.1:2.3.3:4.4.1:3.5.4:3.1.2:2.7.7:2.7.1 +4.4.1:3.1.3:1.17.1:9.9.9:1.1.1:3.1.1 +1.13.11:2.7.1:9.9.9:4.2.1:1.8.1:1.13.11:1.13.11:2.7.2:1.3.5 +3.1.3:4.2.1:2.6.1:1.2.7:4.4.1:3.1.3:4.1.1 +3.7.1:1.11.1:1.1.1:4.1.1 +2.8.3:2.6.1:2.7.1:1.1.1:3.1.2:3.5.1:3.7.1:4.1.2 +1.13.11:1.1.1:6.3.4:4.2.1:1.5.3:1.14.14 +1.1.98:2.7.2:2.6.1:1.2.1:2.7.4 +1.2.4:1.1.1:2.3.1:1.8.1:1.1.1:2.7.1:1.1.1 +1.2.4:1.2.1:1.1.1:2.7.7 +5.4.2:1.1.3:1.1.1:2.7.1:1.1.1:1.1.1 +4.2.1:2.7.7:4.2.1:2.7.9:1.2.5:5.3.99:1.1.1:5.4.2:4.1.3 +3.5.1:2.1.1:4.2.1:5.4.2:4.2.1:3.1.3:1.14.16:1.13.11 +1.1.3:2.7.1:1.1.99:4.1.2:2.7.1:2.1.1 +9.9.9:6.3.5:1.2.1:2.7.1 +3.1.2:1.14.19:6.2.1:5.4.2 +2.3.1:9.9.9:1.13.11:1.1.1 +2.1.2:5.3.1:1.1.1 +3.1.1:2.7.7:1.1.1:3.1.1 +9.9.9:5.3.3:2.3.1:1.13.11:2.8.1:4.4.1:2.3.1:1.1.1:2.4.2 +1.3.8:2.7.7:5.5.1 +1.1.98:2.3.1:2.3.1:2.4.1:3.1.2:1.13.11:4.3.1:1.8.1 +2.3.3:2.7.7:1.1.1:1.14.16:1.1.2:5.5.1:3.1.3 +1.1.1:1.14.13:1.14.16:9.9.9:2.8.3:1.1.5 +1.2.1:1.14.12:2.7.1:1.14.14:3.5.1:2.7.1 +1.14.13:1.14.14:4.1.99:1.13.99 +1.14.14:2.5.1:1.1.1 +2.8.3:4.4.1:1.5.8:1.3.8:1.1.1:1.14.13:1.1.2:3.1.3:4.1.3:2.7.2:1.1.3:5.3.1 +2.6.1:5.4.99:3.1.1 +1.1.2:1.3.8:1.14.12:2.7.1:1.1.1:2.7.1 +2.6.1:2.3.3:2.3.3 +1.1.2:2.6.1:3.1.2:3.1.1 +1.1.1:2.5.1:1.1.1 +1.2.4:2.3.3:3.1.4:3.1.3:1.3.1 +2.3.1:4.1.1 +1.1.1:1.1.1:2.7.7:1.14.14:2.3.3:3.1.1:2.3.3 +1.13.11:2.3.1:1.11.1:4.1.1 +6.3.4:2.3.1:2.7.1:4.1.1:4.1.3:2.5.1:1.5.8 +1.2.1:4.2.1:1.13.11:2.7.1:2.7.1:1.1.1:1.1.1:4.2.1:2.6.1:6.4.1 +5.1.99:2.3.1:1.1.3:1.8.4 +1.1.1:2.7.7:1.1.1:1.1.1 +3.6.1:2.3.1:1.1.1:2.3.1:1.14.14 +4.1.1:2.3.1:1.1.1:1.14.15 +4.2.1:2.4.2:3.5.1 +1.14.14:1.1.1:1.1.98:3.1.2:1.14.14:3.1.2:2.7.7 +1.1.1:2.2.1:3.5.1:1.1.1:3.5.4 +3.1.3:9.9.9:3.1.3:2.7.1:3.7.1:1.1.5 +6.2.1:1.14.15:1.17.4:1.1.1 +2.3.1:1.1.1:1.1.1:3.1.2:3.1.3:4.2.1:4.1.1:1.13.99:2.3.1:2.1.4:1.3.1:1.2.1 +2.7.1:1.14.13:1.1.2:4.1.1:4.3.1:5.3.1:5.3.1:2.1.1:1.14.15:1.14.14:1.13.11 +1.1.1:4.1.1:1.1.1:2.6.1:2.7.1:3.1.1:1.14.11:2.7.1 +1.1.1:5.3.1:1.14.16:1.1.1 +3.5.1:2.3.1:1.1.1:1.2.1 +3.6.1:1.1.1:1.1.2:4.2.1:1.1.1:1.1.1:1.1.1:5.4.2:2.6.1:3.5.1 +4.3.2:1.14.15:4.2.1 +6.2.1:1.13.11:5.3.1:9.9.9 +1.1.2:5.3.1:1.13.12:4.1.1:1.14.13 +2.7.7:1.13.12:3.1.4:1.13.11:1.1.1:1.14.19:2.7.4:1.5.8:1.14.11 +4.2.1:1.1.1:2.7.4:6.2.1 +1.5.3:2.7.1:1.3.1:1.17.1:2.3.1 +1.1.1:4.3.1:1.2.7 +1.2.1:3.5.4:1.1.1:5.1.99:1.2.1:2.3.3:1.1.5 +1.1.1:1.13.11:1.14.14:1.1.1 +4.3.1:2.7.7:4.4.1:2.7.4:2.7.4:3.6.1:1.2.1:3.1.1:2.7.1:5.3.1:2.3.1:2.3.1:2.5.1 +1.1.1:2.7.7:2.5.1:6.3.5:1.2.1:2.3.1 +2.7.4:5.5.1:2.6.1:2.3.1:1.1.1:1.2.1:2.7.1:4.1.1:5.4.99 +4.1.3:6.2.1:1.1.1:4.4.1:1.1.1:1.13.11:6.4.1 +4.1.3:1.1.98:1.1.1:1.1.1:3.1.2:2.3.1:5.1.3 +2.4.2:4.4.1:2.7.1:9.9.9:3.1.1:6.2.1:4.3.1 +6.2.1:1.1.1:5.3.1 +4.1.1:2.3.1:4.2.3 +4.1.1:1.14.13:1.3.8:1.1.2:2.5.1 +3.5.1:2.7.1:1.1.3:2.7.4 +1.1.1:3.1.1:2.1.1:2.7.8 +4.1.2:1.1.1:2.4.2:1.14.14 +1.13.99:1.8.1:1.1.3:1.1.1 +1.1.3:2.6.1:1.16.1:1.8.4:5.4.2 +1.1.1:1.14.15:2.3.1:1.14.18:2.7.1:1.3.1:1.14.15:9.9.9:5.3.1 +9.9.9:1.13.11:3.2.2:1.1.3:2.7.1:2.8.3:2.1.2:6.2.1 +1.14.11:1.10.3 +1.1.1:4.2.1 +3.1.3:1.1.1 +1.1.1:2.6.1:2.3.1:1.13.11:6.2.1:1.1.1 +1.1.1:1.1.1:4.2.1:2.1.1:4.3.1:5.5.1:5.4.99:3.1.2 +5.3.1:2.7.1:1.3.1:1.1.1:4.1.1:2.3.1:1.13.11:9.9.9:1.1.1 +1.7.1:2.7.7:2.3.1 +2.7.1:3.5.3:1.1.1:1.2.4:9.9.9:1.2.7:3.1.2 +3.3.1:1.1.2:2.4.2:4.2.3:1.1.1:1.2.1:2.3.1:1.1.1 +2.7.1:2.3.3:1.14.15:1.1.1:3.6.1:2.7.1:5.1.3 +2.7.1:3.5.1:2.5.1:1.1.2:6.2.1:6.2.1:2.3.3:3.1.3:1.2.1 +2.7.9:9.9.9:1.14.99:1.8.1:4.2.1:2.7.6:5.3.3:3.1.2:1.1.1:4.4.1 +2.5.1:4.1.3:1.2.1:2.5.1:2.8.3:4.4.1:1.1.1 +6.2.1:3.1.3:4.1.2:4.1.3 +2.7.8:2.7.7:1.1.1:2.6.1:1.1.1 +4.1.1:1.1.1:3.2.1:3.1.2:5.4.2:1.14.14:2.1.2 +2.5.1:2.3.1:1.1.1:1.1.1:2.7.1:1.1.1 +4.2.1:2.7.2:6.2.1:3.13.1:1.13.11 +2.7.4:4.3.1:3.5.4:6.2.1:3.1.1:1.14.11 +1.17.1:2.7.1:6.4.1:1.2.7 +4.1.2:6.3.1:3.6.1:6.4.1 +4.1.1:3.1.3:3.5.4:1.1.1:6.2.1 +4.2.1:1.14.14:3.1.4:5.3.1 +4.1.1:5.4.2:9.9.9:1.14.14:1.18.1:3.3.1:1.1.5:4.2.1:2.7.7:2.6.1:1.1.1 +1.1.5:5.3.1:1.1.1:2.7.1 +1.13.12:5.3.2:1.1.2:4.1.2 +3.7.1:1.17.7:1.2.1 +1.3.7:3.1.3:1.3.3 +1.1.1:4.4.1:2.6.1:2.7.7:1.13.11:2.7.7:2.7.4:1.1.1:1.1.1:4.2.1:2.7.1:4.1.2:1.1.1 +5.1.2:9.9.9:1.14.19 +4.1.1:1.1.1:4.4.1:1.1.2:1.1.1:2.1.2 +2.8.2:2.7.1:2.5.1:1.3.8:2.3.1 +6.2.1:1.2.1:4.3.1:2.1.1:9.9.9:2.7.1:1.2.7 +2.8.3:1.14.14:1.14.11:2.1.2:1.14.15:2.7.1:2.7.9:1.1.1:3.1.4:3.1.3:4.2.1 +1.1.1:2.1.2:4.2.1:1.2.1 +1.1.98:2.7.7:1.17.1:1.14.18:1.8.4:2.5.1 +3.5.3:4.1.2:1.2.1:1.1.1:1.1.1:5.1.99:2.8.1:1.1.1:1.14.13 +1.1.98:2.8.3:1.13.99:2.6.1 +1.2.7:1.1.1:1.2.1:2.3.3:2.7.1:3.1.3 +1.11.1:4.4.1:2.5.1:5.1.3:3.13.1 +5.3.1:1.2.7:1.2.4:4.4.1 +1.14.15:1.1.1:2.7.1:2.7.1 +4.2.3:5.4.99:2.7.6 +2.3.1:3.6.1:1.1.1:4.4.1:3.5.1:4.2.1 +2.7.1:1.8.1:1.13.11:2.7.1:1.14.14:2.3.3 +5.4.99:2.7.7:2.5.1:2.7.1:2.3.1:1.3.5:2.7.2:2.6.1:5.5.1 +4.1.3:1.2.7:1.13.11:1.1.1 +3.1.3:1.1.1:2.7.1:2.7.7:1.3.5:2.7.1:9.9.9 +1.1.1:2.8.3:2.3.1:1.1.1 +2.7.7:2.6.1:1.14.14:1.1.2:2.7.4:3.1.4:1.1.1:4.2.3 +1.14.13:1.3.1:5.3.1 +1.5.8:3.1.1:1.14.14:1.13.11 +4.4.1:3.7.1:6.2.1:2.3.1:2.7.1:2.5.1:1.14.14 +1.2.4:3.3.2:5.3.1 +4.2.1:1.3.1:3.1.3:2.3.3:5.3.1:1.1.1 +1.8.99:3.6.1:3.7.1 +6.3.2:1.2.7:4.2.1:4.2.1:3.1.3:4.1.2 +4.1.1:5.4.2:1.14.14 +1.1.1:3.5.2:2.3.1:1.17.1 +6.3.4:1.1.1:1.1.1 +2.7.4:4.4.1:4.1.1:1.5.1:1.14.14:1.17.4:1.14.13 +4.2.1:1.14.13:5.4.2:1.1.1:1.1.5:5.4.99 +4.2.1:1.1.1:2.1.3:2.7.8 +1.14.11:2.7.9:1.1.1:2.3.1:4.2.1:2.8.3:4.2.1:4.2.1 +2.3.1:1.1.1:2.1.1:3.5.1 +1.17.1:2.6.1:2.3.3:1.3.1:2.7.1 +2.3.1:2.3.1:2.1.2:1.14.14:3.1.3:2.7.2 +1.13.11:5.4.99:4.2.1 +1.14.19:4.2.1:2.7.1:1.1.1:4.1.2:5.4.2:3.1.4:1.14.16:1.1.1:4.1.2:1.14.15:3.4.11 +1.1.5:4.2.1:1.1.1:6.2.1 +4.6.1:6.4.1:3.5.4:1.3.1:1.17.3:2.7.7 +1.1.1:5.3.1:4.1.2:1.4.4:2.1.1:1.1.5 +1.2.7:1.1.1:4.4.1 +3.1.1:1.2.1:1.1.1:1.14.13:4.4.1:1.13.11 +3.5.1:3.1.3:2.2.1:1.2.4:2.7.8:5.3.3 +6.2.1:1.17.1:4.1.1 +3.1.1:3.1.2:1.8.7:4.2.3:1.5.8:1.1.1:1.13.11:1.2.1:6.4.1:1.14.13:1.1.1 +1.14.14:2.7.1:1.1.2:1.2.4:2.3.1 +4.2.1:1.1.1:2.1.1:2.7.4:1.13.11:1.3.5:5.3.3:1.1.1:2.3.1 +5.3.2:3.7.1:2.4.1 +1.1.1:5.3.1:1.1.1 +3.7.1:9.9.9:2.7.1:3.6.1 +1.1.1:2.3.1:5.3.1:1.1.1:4.1.1:2.3.3 +2.3.1:2.7.1:4.1.1:2.7.1:1.1.1:2.7.1 +1.1.1:3.1.3:2.3.1:1.1.1:4.4.1:4.4.1:4.1.1:4.2.3 +2.8.1:2.1.1:2.7.7:2.6.1:2.7.7:4.4.1:1.1.98 +1.1.1:1.2.1:1.1.1 +1.1.1:4.3.1:1.3.1:1.2.4:5.2.1:1.2.4 +2.1.3:1.1.1:1.3.5:2.3.1:4.2.3:1.3.1 +2.6.1:5.4.2:2.3.1:2.3.1:2.5.1:3.1.2:1.14.14:5.5.1 +4.2.1:2.6.1:1.1.1:1.1.1:4.1.1:4.6.1:1.1.5:3.1.3 +2.3.1:1.1.1:4.1.2:1.13.11 +1.8.1:1.2.7:3.1.2 +6.2.1:4.2.2 +4.1.3:4.2.1:4.2.1:3.5.4:4.2.1:2.7.7:4.1.1:4.1.2:5.4.2:1.1.1:3.1.1:1.1.2:2.6.1:2.7.4 +1.2.7:3.1.3:2.6.1:2.3.1:6.4.1 +3.6.1:4.2.1:1.13.11 +1.14.14:1.1.1:1.1.1:1.1.1:2.3.1:2.7.4 +1.1.1:3.1.3:5.5.1:2.8.3:4.1.3 +1.1.1:5.4.2:2.7.4:5.4.2:4.1.1:1.1.1 +1.13.11:3.7.1:1.1.1 +3.5.4:1.1.1 +2.3.1:5.1.1:1.1.1:1.1.1:1.1.1:1.4.4:4.1.1 +2.3.1:3.1.3 +6.3.5:2.3.1:2.3.1:2.5.1:3.6.1:2.1.1 +4.4.1:2.4.2:1.14.12:3.1.3 +2.7.1:5.1.3:5.5.1:2.7.8 +4.1.1:2.3.1:1.1.1 +3.1.2:6.3.2:9.9.9:1.2.7:4.1.1 +2.2.1:1.1.5:2.7.1:5.1.3:2.3.1:3.1.1 +1.5.3:3.1.3:2.7.1:1.13.11:3.7.1:1.1.3:1.1.1:1.2.1:1.8.5 +2.8.3:5.5.1:3.1.3:2.3.1 +1.1.1:3.1.1:1.14.13:1.1.2 +2.3.1:9.9.9:1.1.1 +1.1.1:6.2.1:1.1.1 +2.3.1:3.5.4:2.7.1:1.3.1 +1.2.1:2.7.1:2.7.2:4.1.2:1.1.1:4.1.1:2.3.1 +1.14.13:4.2.1:1.1.5 +5.4.2:2.7.1:2.8.3:6.2.1:2.6.1 +9.9.9:5.4.2:4.3.1 +1.1.2:5.3.1:4.1.3:1.1.1:4.1.1:1.2.4:5.3.1:1.3.1:1.1.1 +2.7.1:1.2.4:1.1.1:3.1.3:1.1.98 +5.4.2:1.1.99:6.2.1:1.1.1:1.17.1 +1.5.8:3.1.3:1.1.1:1.7.1:1.1.1:1.3.1:5.99.1:2.6.1 +6.3.2:4.1.1:2.7.2 +2.7.9:6.2.1:1.3.1:2.7.1:2.7.4 +1.1.1:1.14.14 +1.1.1:6.2.1:3.3.2:2.7.7:2.1.2:2.3.1:4.1.1:5.4.2 +1.2.4:4.2.1:5.4.2:2.6.1:2.7.1 +1.14.14:1.1.1:2.7.7:1.1.1 +9.9.9:1.1.1:2.7.2:1.1.1 +2.3.1:1.1.1:1.2.1:1.1.1 +2.7.2:1.5.8:5.3.2:2.7.1:2.3.1:1.8.99:1.1.2:2.7.1:2.7.2:4.2.1:1.1.1:1.1.1:4.1.2 +2.5.1:2.7.1:2.3.1:3.1.3:2.3.1:4.1.2:1.2.1 +3.2.2:5.4.2:1.13.11:2.7.4:2.7.9 +2.2.1:1.1.1:1.1.1:4.1.1:9.9.9 +4.2.1:2.3.3:2.3.1:1.1.1 +3.1.3:2.7.1:2.3.3:6.2.1:2.7.2:4.1.1:1.14.14:1.14.14:2.1.1 +1.1.1:1.14.14:2.4.2 +1.1.2:2.7.3:2.3.1:4.1.2 +4.6.1:2.7.1:1.13.11 +1.14.13:2.7.1:1.2.1:5.5.1:1.1.5:3.1.3:2.3.1:4.1.3:1.1.1 +4.1.1:2.7.7:2.8.3:2.3.3:2.2.1 +4.2.1:2.3.1:4.1.1:1.1.1:3.5.1 +3.5.3:2.2.1:2.1.1:1.1.1:1.14.14:1.1.1 +2.6.1:6.2.1:1.4.4:2.7.1 +1.1.1:2.7.1:1.14.14:4.4.1:3.1.3:4.4.1 +1.2.1:2.5.1:2.3.3:4.2.1:4.2.1:3.6.1:2.7.8 +1.14.15:3.1.3:1.2.1:2.7.7:6.2.1:2.3.3:1.2.4:1.2.1:5.4.2:5.3.2 +2.7.1:1.14.19:9.9.9:1.2.1:2.5.1:6.2.1:6.2.1:2.3.3:6.4.1 +1.14.14:4.2.1:1.14.18:1.2.1:2.7.4:1.14.14 +1.2.1:5.1.2:2.3.1:1.14.11:1.2.1:4.4.1 +2.7.7:3.1.3:3.5.4:1.4.3:1.1.5:3.1.3:1.14.99:2.6.1:2.7.8 +2.7.1:1.1.1:1.11.1 +4.3.2:2.5.1:3.2.1:1.1.5:1.1.1:4.2.1 +4.2.1:6.2.1:4.4.1:2.3.1 +4.1.2:2.2.1:1.14.19:5.3.1:2.6.1 +4.4.1:1.14.13:5.1.99:2.4.2:1.1.1:5.4.2:1.1.1:5.3.1 +3.1.1:2.3.1:1.8.1:1.3.1:5.3.1:3.1.2 +2.3.1:5.5.1:3.1.1:2.7.1:4.2.1:2.7.1 +2.3.1:1.17.1:4.1.1:9.9.9 +1.2.5:4.1.3:3.1.3:3.1.1:1.1.2:2.1.2:1.11.1:1.14.99:1.14.14 +1.17.1:1.8.1:9.9.9 +1.13.11:1.1.1:1.14.11:1.2.1:1.2.1 +4.2.1:2.4.1:2.1.1:1.2.7:1.3.1 +2.3.1:1.14.17:5.3.1:1.1.1 +1.1.1:1.1.1:1.1.1:3.5.2:1.1.1:1.1.1:6.2.1:2.6.1:2.7.4 +2.3.1:1.5.3:1.17.99:1.1.2:9.9.9 +1.1.98:1.14.15:1.13.11:2.6.1:4.1.2:2.1.2 +4.1.2:2.1.1:1.13.11:2.3.1:2.3.1:2.7.7:4.1.3:1.1.1:4.3.1:2.7.1:4.3.1 +6.4.1:2.3.3:3.1.2:4.1.1:2.1.2:5.4.2:3.6.1:9.9.9:5.4.2:2.7.1 +1.1.2:4.1.3:2.3.1:2.7.4:9.9.9:3.5.1:3.5.4:2.1.2 +4.1.1:4.4.1:1.14.19:1.3.8 +1.13.11:1.1.1:1.4.3:1.1.1:1.1.1:2.5.1:1.1.5 +4.1.3:3.3.1:6.2.1:9.9.9:4.1.3:2.7.8:3.1.1 +1.2.5:5.3.1:4.2.1:1.1.1 +2.8.3:5.3.2:1.13.11:1.1.1 +5.3.3:2.7.1:4.2.1:1.2.1:1.1.1 +2.7.1:3.1.2:2.7.8 +4.2.1:1.1.1:6.3.4:1.2.1:1.1.1:1.1.1:1.13.99 +5.3.3:1.1.1:1.14.11:1.3.8:4.2.1:2.3.1:3.1.3 +1.2.5:1.13.11:5.1.99:1.14.14:6.2.1:4.2.1 +2.3.1:1.5.3:1.1.1:1.2.1:1.8.1:1.1.1:2.7.1:3.3.1 +1.1.1:1.1.5:9.9.9:1.13.11:1.14.11 +3.5.1:2.3.1:1.1.1:3.1.1 +1.1.1:2.7.1 +4.4.1:4.1.1 +4.2.3:4.2.1:2.7.1:3.1.1:1.1.1 +1.2.1:1.4.3:3.1.1 +3.3.2:3.6.1:2.1.4:2.8.3:6.4.1:4.1.3:5.1.99:2.6.1:3.1.3:3.1.3:1.1.1 +1.1.1:3.5.2:1.1.2 +1.14.14:4.2.1:5.1.3:5.4.2:1.14.14:3.1.3:1.2.1:1.1.1:1.1.1:5.3.3 +6.2.1:6.3.3:4.2.1:1.1.1:1.1.1:2.3.1:1.14.13:5.4.2 +5.4.2:1.14.14:5.3.1:3.5.2:4.2.1:5.1.1:2.7.7 +2.3.1:4.1.1:1.17.4:4.1.1:1.2.1:1.1.1:1.3.1 +2.3.1:1.1.98 +1.8.1:5.5.1:3.5.4:1.14.18:2.3.1:4.1.3:5.3.1:3.1.3 +1.14.11:2.7.1:5.4.99 +3.1.2:1.5.1:2.7.1:1.1.1:6.3.3:1.1.2:1.14.13 +1.1.1:4.1.2:6.2.1:4.2.1 +1.8.1:2.8.3:1.13.99:1.1.2:1.14.13:1.2.7:2.5.1 +1.2.1:3.1.3:1.1.1:5.3.1:1.2.7:2.4.2:1.13.11 +4.1.3:1.2.1:5.5.1:2.4.1:3.5.1:1.1.2:1.14.13 +1.2.1:4.1.3:1.14.13 +5.3.1:1.17.1:5.4.2:2.2.1:1.1.1:3.6.1:2.5.1:5.3.1:4.4.1 +2.3.1:5.3.1:9.9.9:1.13.11:1.3.5:5.3.1 +1.1.2:1.14.14:6.3.4:1.14.12:1.14.14:4.2.1 +2.7.7:1.2.4:1.8.1:3.1.2:4.2.3:2.3.1 +2.3.3:3.1.3:2.7.1 +9.9.9:4.1.1:1.18.1:2.6.1:3.1.4:2.2.1:4.1.1 +2.3.3:2.3.1:4.1.2:3.1.6:4.1.3:9.9.9:9.9.9:4.1.1 +1.3.1:1.3.1:1.14.14 +2.7.1:5.5.1:1.1.5 +1.1.1:2.6.1:1.1.1:1.2.7:1.1.1:1.8.1:1.14.13 +1.1.5:1.13.11 +3.1.3:2.3.1:3.1.4 +2.7.1:2.7.7:1.1.1:1.14.11:9.9.9 +2.7.1:3.7.1:3.1.4:1.14.14 +1.2.1:1.1.1:2.6.1:1.2.7:1.2.1:4.4.1:3.1.1 +1.1.1:5.5.1:1.8.99 +2.7.1:2.7.1:3.7.1:1.1.2:1.1.1:1.1.1:1.1.1:1.8.1 +1.2.4:5.4.2:4.4.1:1.1.1:1.1.1 +1.1.1:1.17.3:3.1.1:1.1.98 +1.14.13:2.7.1:5.99.1:2.3.1:1.1.1:1.14.13:2.7.1 +4.3.1:2.6.1:2.3.3:5.4.99:1.1.98 +1.3.1:9.9.9:1.5.98 +1.1.1:1.1.1:2.7.1 +2.4.2:1.3.1:1.1.1:4.2.1:1.1.1:1.14.14:2.5.1:4.4.1 +1.2.4:2.3.3:2.7.1:1.14.14:1.1.1:1.1.5 +1.1.1:1.14.11:1.2.1:2.7.1:1.17.99:6.4.1:1.1.1 +1.1.1:6.3.5:1.1.1:1.1.1:1.2.7:2.7.1:2.3.1:1.4.3:4.1.1 +1.1.5:2.3.1:2.8.3:4.2.1 +3.1.2:2.4.2:1.1.1:1.1.2:1.14.13:1.14.16 +4.1.2:1.14.13:1.2.1:1.2.1:1.5.3:1.1.1:1.1.1 +3.1.3:2.1.1:1.14.13:1.1.1 +2.4.2:3.1.2:1.2.1:5.4.2:1.14.13:1.14.13:4.1.3:5.3.1:3.1.3:1.1.1 +3.5.4:2.7.1:1.1.1:1.1.1:1.14.19:2.6.1:5.1.99 +1.5.3:1.1.1:1.5.8:1.1.1:2.3.1:2.6.1 +2.6.1:2.7.7:5.4.1:1.1.1:4.2.1:2.6.1:3.1.3:1.3.1:1.1.1 +4.3.1:2.3.3:1.1.1:1.1.1:2.7.4:2.3.1:3.1.1:3.5.1:2.1.2 +2.3.1:9.9.9:6.3.5 +3.1.2:5.3.1:5.3.1 +2.3.1:2.3.1:2.1.1:6.4.1:2.3.1:4.2.1 +1.14.14:4.1.1:2.7.1:1.4.4:4.1.2 +4.4.1:5.4.2:1.14.99:3.6.1:5.5.1 +1.1.3:4.1.3:2.1.4:9.9.9:6.2.1 +2.7.7:3.1.4:1.1.5:2.7.1:1.14.14:1.1.1:4.2.3 +2.4.2:1.1.1:4.3.2 +5.4.99:2.7.1:1.1.1:4.2.3:1.1.99:1.1.1 +4.2.1:5.3.1:2.3.3:2.6.1:1.13.11 +1.5.8:9.9.9 +2.5.1:5.3.1:1.2.1:3.1.3:3.1.2:3.5.4 +2.7.1:3.1.3:5.3.3:2.3.3 +2.7.7:2.6.1:4.2.1:2.6.1:4.1.1 +2.6.1:1.1.1:4.2.1:2.8.3:2.3.1:3.7.1 +1.17.4:1.3.1 +5.3.1:4.1.1:2.1.1:3.5.2:1.1.5:4.1.3:1.1.1:1.14.13:2.7.7:1.1.2 +1.1.1:1.1.1:2.7.1:1.13.11:1.1.1:1.2.7:1.4.4:5.3.1 +2.7.1:1.1.5 +3.6.1:4.4.1:5.3.1:1.1.1:2.3.1:2.3.3 +2.7.7:2.3.1:1.1.1:3.5.1:4.2.3:1.1.1:2.7.1:1.1.1:4.6.1:1.2.3 +1.2.1:4.2.1:1.1.5:9.9.9:1.1.1:4.2.1:5.4.2:3.1.3:2.1.1:1.1.1 +1.1.1:4.1.3:1.13.11 +2.7.9:1.14.14:2.3.1:2.3.1:2.3.1:4.3.1:1.2.1 +1.2.1:5.5.1:2.3.1:5.3.1:5.3.3 +1.1.1:1.1.5:5.4.2:2.7.7 +1.13.11:2.1.1:1.1.1:1.13.11:2.3.3:3.3.2:3.5.4 +1.1.1:4.2.1:2.7.1:3.1.1:1.2.1:2.8.3:5.3.3 +2.1.1:2.5.1:1.1.1:3.5.4:2.7.1 +2.1.2:2.7.1:4.1.2 +1.1.1:2.3.3:1.11.1:3.1.3:1.1.1 +5.3.1:1.3.8:5.3.3:2.7.1:4.2.1:1.1.1 +1.8.1:2.7.1:1.1.98 +3.5.4:2.3.3:4.1.1 +4.1.3:2.6.1:3.5.4:2.6.1:1.1.1 +4.3.3:4.2.1:5.4.2:1.14.14:4.1.1:1.2.7:4.2.1 +1.13.11:1.1.1:2.1.2:1.13.11:2.6.1 +3.1.3:2.7.1:2.3.1:2.3.3 +2.1.1:1.14.14:3.1.3:1.1.1:6.3.2 +1.1.1:1.14.14:1.2.1 +4.4.1:2.3.1:3.1.1:6.3.4:2.7.7 +4.1.1:3.1.1:1.3.5:1.1.1:2.4.1:1.13.12:1.11.1:1.14.13 +1.13.11:1.1.1:5.4.2:2.4.2:2.3.1:1.13.11:1.1.1:1.5.8:1.1.1:3.1.3:1.1.1:1.2.1 +2.6.1:1.13.11:2.6.1:5.4.99:1.2.7:3.2.1 +3.1.1:1.1.1:2.7.1:2.7.7:2.5.1:2.7.7:1.4.3 +2.2.1:5.1.3:5.3.1:1.2.1:1.17.99:1.1.1:2.7.1 +4.2.3:4.2.1:4.3.1:1.3.1:9.9.9:1.1.1:1.14.13:2.7.1 +2.7.1:1.2.5:1.13.11:5.3.1:3.2.2:2.7.1 +2.6.1:2.7.1:9.9.9:3.5.4 +3.1.2:3.1.3:1.2.1:5.3.2:4.1.1:5.4.99 +1.14.14:4.4.1:3.2.2:1.2.1:2.6.1 +5.4.2:1.1.1:2.3.1 +1.11.1:1.1.1:3.5.3:4.1.1:4.1.1 +1.1.1:1.1.1:1.13.99:1.1.1:2.7.4 +1.2.1:1.5.3:2.1.1:2.7.1:3.5.3:1.2.1 +2.3.1:1.1.1:3.1.2:3.1.3:1.13.11 +2.5.1:1.2.3:1.1.1:1.13.11:1.17.3:1.1.1:1.1.98 +1.1.1:1.14.99:5.1.99:4.4.1:3.1.3:2.3.1 +1.1.1:2.1.1:2.2.1:4.1.1:5.3.1 +1.13.11:4.4.1:5.4.2:1.1.1:1.3.5:9.9.9:1.14.14:3.1.3:2.3.1 +2.7.2:1.1.1:2.7.4:9.9.9:2.2.1:1.3.1:1.1.5:1.1.1:2.7.1 +2.7.1:2.7.7:1.1.1:1.1.1:2.6.1:2.3.3:1.1.1:1.14.14:5.3.3 +1.1.5:2.7.1:1.1.1:4.1.3:1.2.1:1.1.1:1.1.1:5.4.99:6.2.1 +1.1.98:1.2.7 +2.8.3:4.2.1:1.2.1:2.3.1:4.2.1:1.2.4 +1.1.1:2.7.7:3.1.1:1.14.13 +1.8.1:4.4.1:1.1.1:2.3.3:1.13.11 +1.1.1:2.6.1:1.1.1:9.9.9 +4.1.2:2.8.3:1.8.1:1.1.2:1.8.99:5.5.1:3.1.3:2.4.2:3.5.3 +5.4.2:2.7.7 +2.7.1:4.1.1:4.4.1:4.1.3:3.5.1:2.1.4 +2.7.1:3.1.3:1.1.3:1.2.4 +2.1.1:4.1.2:2.7.1:2.6.1:1.1.5 +1.14.15:1.1.1:2.4.2:1.1.98:1.1.3:1.14.16:1.1.1:1.1.1 +1.2.1:6.3.5:1.2.5 +1.1.98:1.8.4:9.9.9:1.1.2:1.14.13:4.3.1 +2.2.1:1.17.3:1.1.98:4.2.1:3.6.1:1.10.3:1.1.1 +1.1.1:6.2.1:2.7.7:1.2.1:1.14.14:1.1.1:2.2.1:2.7.2 +3.1.1:4.4.1:2.8.3:2.7.7:3.1.3 +2.7.1:1.14.14:1.13.11:1.1.1 +9.9.9:5.5.1:1.13.11 +1.1.1:5.3.1:4.2.1:4.3.2 +1.14.13:3.1.3:2.7.1 +4.2.1:4.4.1:3.1.2:1.3.1:2.7.4:2.7.4:2.7.1 +2.7.1:2.4.1:2.2.1:1.14.16:1.14.14:2.1.2:1.3.5:1.1.2:4.1.1 +2.3.1:2.6.1:1.13.11:1.1.99:5.4.2 +1.1.1:9.9.9:4.1.3:1.1.5:1.1.1 +2.3.1:3.1.3:2.3.1:1.14.13:4.4.1:1.13.11 +4.3.1:2.3.1:1.1.2:4.4.1:4.1.1 +1.8.5:5.4.99:1.2.1:5.3.2:6.2.1:1.14.18:5.4.2 +1.2.1:2.3.1:3.1.1:2.7.8 +1.1.1:2.4.2:1.1.1:1.1.1:1.1.5 +3.5.4:1.17.1:4.4.1:1.1.1:1.1.2:1.1.1:3.1.3:2.7.1:1.14.13:3.5.2:1.2.1 +2.8.3:5.1.1:4.1.2:1.1.1:2.3.1 +5.3.3:2.7.8:1.14.14:3.1.1:1.1.1:4.2.1 +2.7.7:4.1.1:2.6.1 +2.1.2:5.3.1:1.1.2:1.13.11:1.1.1:4.1.1 +1.3.8:9.9.9:1.8.1:3.1.3:2.3.1 +1.8.1:2.7.7:1.3.1 +2.7.1:4.1.1:5.4.99:1.13.11 +1.1.98:4.2.3:1.2.1:6.2.1:3.5.4 +1.14.15:2.3.1:2.3.1 +3.1.1:3.1.4:1.1.1:1.2.1:1.2.1:2.3.1:4.2.1:1.1.1:2.3.1:2.7.2 +2.3.1:2.7.1:4.4.1:1.1.1:1.2.1:4.1.2 +4.2.1:1.2.7:4.1.3:1.1.1:1.2.1:2.3.1 +1.1.2:3.1.1:1.14.11:3.1.2:1.13.11 +1.1.2:4.1.3:2.7.7:1.14.15:4.2.1:3.2.1 +3.1.4:2.7.7:2.7.1:2.3.1:1.1.1:4.1.2:2.5.1 +5.4.2:1.1.1:2.1.2:2.3.1:3.2.1:5.4.99:1.1.1:1.14.13 +2.3.1:1.1.1:1.2.1:2.3.1 +2.2.1:1.2.1:1.1.1:1.1.5:4.2.1:4.2.1:4.4.1:2.7.7:2.4.2 +2.7.4:3.1.1:1.2.1:1.1.5:1.8.1:1.14.13:5.1.99 +9.9.9:2.7.1:9.9.9:1.1.1:1.1.1 +1.1.2:4.2.1:1.8.7:3.1.3 +1.1.1:3.1.3:1.1.1:1.1.1:1.5.3:4.2.1:4.2.1:2.3.1:2.4.2 +3.5.1:2.7.7:4.4.1:1.1.1 +2.6.1:2.3.1 +2.3.3:5.4.2:2.7.7:5.4.2:2.5.1:4.2.1:5.3.2:1.1.1:1.1.1 +5.3.1:2.4.2:2.8.3:1.8.7:3.1.3 +4.2.1:2.7.1:6.2.1:1.1.1 +1.1.5:5.5.1:1.2.7:2.3.1:1.14.13 +4.1.3:2.3.1:1.2.1:2.7.7:4.2.3 +4.6.1:2.7.7:4.1.3:1.8.1:6.2.1:1.3.5 +1.2.4:5.1.3:1.1.5:2.1.1:4.1.2:3.5.3 +2.3.1:4.1.2:1.2.1 +1.1.3:9.9.9:1.1.1:3.5.3:5.1.99:4.2.2:1.11.1:4.2.1 +2.7.1:2.1.1:5.4.2:1.1.99:5.5.1:6.4.1:5.3.1 +6.2.1:4.3.1:1.4.4:1.1.1:1.1.2:1.1.2 +2.4.2:1.14.12:6.4.1:1.14.15:1.1.1:1.1.1:1.1.1:9.9.9:2.1.2:1.1.1:4.4.1 +4.2.1:1.1.1:1.1.1:2.7.1:2.7.4 +4.6.1:2.4.2:1.2.1:1.1.1:5.5.1:1.2.4 +5.3.1:1.1.1:1.1.1:4.2.1 +2.4.2:2.7.7:2.1.2:1.1.1:2.7.1:1.1.2:2.6.1:9.9.9 +2.7.2:4.2.1 +4.4.1:2.3.1:1.2.1:3.1.2 +1.14.13:1.8.1:1.13.11:3.1.2 +5.3.2:2.6.1:6.2.1 +6.3.4:4.2.3:2.6.1 +4.1.1:1.2.1:2.8.3:2.7.1:5.3.1:2.3.1:1.13.12:5.4.99 +4.1.1:1.13.11:2.5.1:1.14.13:2.7.1 +2.7.1:4.4.1:1.14.13:2.1.1 +4.2.1:4.2.1:5.1.99 +5.4.2:3.5.4:2.5.1:2.3.1:6.4.1 +1.14.11:2.7.1:2.1.1:1.14.15 +1.1.1:5.3.1:1.17.99 +1.14.14:1.14.15:5.5.1:1.13.11:2.4.2:4.1.1:3.1.1:3.1.2:1.11.1:1.2.7 +1.8.2:1.1.1:1.14.13:2.7.1:4.1.3 +4.4.1:1.14.15:1.3.1:5.3.1:2.3.1:1.14.13 +4.2.1:2.3.1:5.4.2:1.3.1:1.1.3:2.8.1:1.1.1:9.9.9 +5.1.99:1.1.1:2.1.2 +1.1.1:1.1.2:4.3.1:1.1.5:2.3.1 +5.4.2:1.1.1:3.6.1 +5.1.1:1.3.1:1.2.1:4.2.3:5.3.1:4.2.1:2.7.1:2.3.3:3.1.1:3.1.3 +2.7.7:2.3.1:2.7.1 +1.14.13:5.1.3:4.2.3:1.8.99:1.2.1:4.3.1 +9.9.9:2.1.2:3.7.1:4.1.2:1.5.8:2.1.2:3.1.2:1.1.1:2.8.1 +1.1.1:1.1.1:1.1.1:2.3.3 +4.2.1:4.2.1:9.9.9:3.5.4:2.8.1 +4.2.1:3.1.1:3.1.4:3.3.2:3.1.3:2.6.1:2.3.1:2.1.1:1.1.1 +1.14.13:2.7.9:2.7.1:2.3.1:4.1.3:2.7.1 +1.1.98:9.9.9 +2.7.7:2.3.3:4.2.3 +2.7.1:1.1.98:3.5.4 +9.9.9:6.2.1:2.5.1:1.14.13:1.3.5:2.3.3:2.6.1:1.3.1 +4.3.1:4.2.1:2.8.3:2.3.1:1.14.13:1.13.11 +4.2.1:4.1.1:9.9.9:6.2.1:1.14.19:1.14.11 +2.7.7:1.2.4:1.1.5:1.17.1:2.7.4:2.6.1 +5.4.2:1.2.1:1.1.1:3.5.1:1.1.1:5.1.3:3.5.1 +4.1.2:2.3.1:4.2.1:4.1.3 +6.2.1:4.3.1:2.8.2 +1.1.1:1.1.5:2.7.7:4.4.1:3.5.1:3.1.1:1.2.1:6.2.1:2.7.1 +1.2.5:5.99.1:1.3.1 +2.5.1:1.17.1:1.14.12:1.2.4:9.9.9:1.3.1 +1.1.1:4.4.1:2.4.2:9.9.9:1.2.5:1.3.1:1.14.14:4.1.1:1.1.1 +2.3.1:2.3.1:2.3.1 +2.7.1:2.7.1:5.3.1:2.7.4:1.14.13 +2.1.1:3.5.99:4.1.1:2.3.1 +1.3.1:4.4.1:2.3.1:3.1.3:2.7.4 +6.2.1:1.1.1:2.3.3:1.13.11:4.1.2:1.1.99:2.2.1:2.6.1:1.1.1:1.1.1 +5.3.1:1.1.5:4.2.1:1.1.1 +4.1.2:3.2.1:2.7.1:2.7.2:4.4.1:3.1.2:2.7.1 +1.3.1:2.7.1:4.1.3:1.1.1:1.3.1:1.5.8 +1.3.99:4.2.3:1.17.1 +2.7.1:1.4.7:1.1.1:2.4.2 +2.6.1:1.8.7:3.1.3:4.2.1:2.7.1:6.3.2 +1.13.11:1.1.1:2.7.2:1.13.11:1.1.1:1.4.3 +3.7.1:1.2.1:1.14.16:1.17.4:5.5.1:1.1.1:1.14.11:1.13.11:6.3.2:3.1.4 +3.2.2:1.1.5:1.1.1:1.1.1:1.2.4 +4.2.3:2.7.1:3.6.1:1.1.1 +3.1.3:5.3.3:4.2.1:2.3.1:3.1.1 +2.3.1:2.7.2:2.3.1:2.6.1:1.1.1:1.1.1 +3.5.1:1.1.1:3.1.2:1.1.1:1.14.15 +6.3.5:4.4.1:2.7.7:3.1.3:2.7.1 +1.1.2:1.1.1:1.2.7:2.6.1:5.3.3:2.3.1 +1.14.13:1.13.11:1.2.1:4.1.2:1.1.1:2.3.1:1.1.1:1.1.1:1.14.11 +2.1.1:1.1.1:3.1.3 +2.3.3:5.4.2:1.1.1:1.2.1:1.1.1 +9.9.9:2.3.3:3.5.1:4.2.3 +1.14.15:2.7.1:2.7.7:5.3.1:1.1.1 +3.1.4:5.3.3:2.7.1:1.1.1:1.3.1:9.9.9 +1.1.1:3.7.1:1.1.1:1.2.5:3.1.4:4.2.1:1.17.7:1.2.7:4.1.1:3.1.4:4.1.1:5.4.2:2.7.7:2.7.1 +1.1.1:4.2.1:1.14.14:3.6.1 +1.1.2:3.1.4:4.2.1:1.13.11:1.1.1 +1.2.4:9.9.9:4.2.1:1.14.19 +4.2.1:2.7.1:3.5.4:1.1.1:1.1.1 +2.6.1:1.1.1:4.2.1:9.9.9:3.1.3:2.7.1:3.7.1:4.1.2:1.3.1:2.3.1:4.1.3:1.1.1 +1.1.5:2.3.1 +1.14.11:1.1.1:1.14.14:2.3.1:9.9.9:1.1.1 +1.2.1:1.1.1:3.5.3:2.4.2 +2.3.1:1.1.5 +2.6.1:5.3.1:1.8.1:2.3.1 +1.1.1:1.14.14:1.14.14 +1.1.1:1.3.8:1.14.16:2.8.1 +4.1.1:1.3.1:4.2.1:2.1.1:1.1.1 +2.7.7:1.13.11:1.1.1:5.3.1 +4.2.1:1.1.1:2.8.3:1.1.1 +5.4.99:5.1.3:2.7.7:1.2.7 +2.2.1:1.13.12:2.7.7:1.13.11:1.1.1:1.1.1:2.3.1:2.5.1:1.2.5 +1.2.5:1.1.1:1.1.1 +2.1.1:1.1.1:2.7.8:1.1.99:1.3.1:2.3.1:2.5.1:4.1.1 +4.2.1:5.5.1:6.2.1 +1.13.11:1.1.1:1.14.12:9.9.9:4.4.1 +1.1.1:4.2.1:2.4.2:2.3.3:4.2.1 +1.1.1:1.1.1:1.14.14 +4.2.1:6.2.1:2.3.1 +2.1.1:1.1.1:3.2.1:4.1.2 +2.6.1:2.3.1:4.2.1 +2.8.1:1.14.14:3.2.1:1.13.11:1.14.12 +1.14.13:1.14.13:1.2.1:4.1.1:1.1.1:2.6.1:1.2.7 +2.8.3:1.1.99:4.1.2:9.9.9 +2.3.1:1.1.1:4.1.1:1.1.1:4.1.3:3.2.1:2.7.1 +2.3.3:1.14.19:6.3.4:2.3.1:1.2.3 +1.14.13:1.13.11:1.2.1:1.18.1:6.2.1:4.1.3:1.1.1:2.3.1 +3.3.1:2.7.1:1.1.1:1.2.1:1.14.13 +1.17.4:1.1.1:4.1.1:6.4.1 +3.1.4:1.1.1:2.3.3:2.3.1 +3.6.1:1.2.7:1.14.14 +3.1.3:5.5.1:1.14.16:2.3.1:1.1.5:5.1.3 +1.13.11:1.1.1 +2.3.1:5.4.99:3.1.3:1.14.13:1.13.99:5.3.1:2.3.3:2.2.1:2.7.9:1.14.14 +4.1.1:2.7.1:3.1.1 +4.1.3:1.1.1:2.7.1:3.1.3:3.1.3:3.5.4 +1.1.1:4.2.1:2.5.1:1.2.7:2.7.1:1.2.1:1.1.5:1.1.1:2.1.1:3.1.2 +1.1.1:4.2.1:4.2.1 +1.2.1:3.1.4:1.1.2:9.9.9:1.14.12:1.13.11:1.14.15 +1.1.1:1.1.1:2.1.2:2.3.1:1.1.98:1.14.14:2.3.3 +5.3.1:3.1.4:2.7.7:5.4.2:2.7.1 +4.2.1:1.3.1:2.8.3:2.3.1:2.6.1:6.2.1 +1.14.19:1.1.1:2.3.1:1.1.1:1.1.99:1.4.4 +1.1.1:2.7.7:1.1.99 +5.1.2:4.1.1:2.4.2:1.3.98:4.2.3:2.3.3 +2.4.2:4.3.1:3.1.4 +1.1.1:2.3.1:2.5.1:4.1.1:2.3.1:1.14.99:2.7.4 +6.2.1:1.1.1:5.4.99:2.1.2 +6.2.1:4.2.1:1.14.13:2.2.1:2.7.8 +2.7.1:2.3.3:3.1.2:1.1.1:1.14.14:1.2.1:2.5.1:4.2.1:4.1.1:2.5.1 +5.4.2:1.1.5:1.3.1:1.2.5:4.2.1:1.1.2:2.1.2:1.2.4:3.1.2 +1.1.1:6.4.1:2.7.9:4.2.1:4.2.1:4.1.2:9.9.9 +4.1.1:1.18.1:3.5.1:2.7.4:5.3.1:4.1.1 +2.3.1:1.5.8:2.1.1 +6.3.4:9.9.9:4.2.1:1.8.4:2.3.1:2.7.8 +3.1.4:5.4.2:1.1.1:1.1.3:2.3.1:2.7.7:3.1.3 +2.8.3:1.1.1:1.1.1:9.9.9:1.14.13:9.9.9:2.7.2:2.7.7 +1.17.4:1.1.1:3.3.1:1.1.1 +4.2.3:2.3.1:3.1.3:1.2.3:1.14.13:1.1.1:1.1.1:1.8.4 +1.14.14:2.7.1:3.1.3 +2.7.7:1.3.1:1.2.4:1.1.1:1.1.1:3.1.3:2.8.3 +1.14.15:2.3.1:3.1.4:2.3.1:4.1.1:1.1.1:6.4.1 +6.2.1:2.5.1:5.4.2 +4.1.2:2.1.1:2.1.1:1.1.1:5.3.1 +3.7.1:2.3.3:1.14.14:1.1.1:1.13.11:3.1.3 +4.4.1:2.3.1:1.14.14 +2.7.1:1.17.1:1.2.7:1.11.1:2.6.1:1.5.3:1.14.12:6.2.1 +1.2.1:3.5.2 +6.2.1:5.3.2:6.4.1:1.13.12:1.2.1:5.1.1 +4.4.1:4.1.1:3.1.1:3.6.1:1.13.11:1.1.1:2.6.1 +4.2.3:2.7.8:3.6.1:2.3.1 +1.1.1:1.3.99:4.4.1:5.1.99:5.5.1:1.1.1:1.1.1:4.3.1 +2.6.1:3.7.1:1.5.8:2.7.1:3.1.2 +5.1.3:6.2.1:4.2.1 +2.7.1:2.3.1:1.14.13:1.18.1 +1.1.1:4.2.1:5.4.2:1.1.1 +1.1.1:9.9.9:2.7.1:3.1.3:2.8.2:5.4.2:2.6.1 +4.2.1:1.1.2:1.10.3:1.13.11:6.3.2 +1.14.15:5.3.3:4.2.1:2.8.1:2.8.3 +1.1.2:2.3.3 +1.2.4:6.3.5:3.6.1:4.2.1:5.4.2 +1.1.1:4.1.1:1.13.11:4.2.3:2.7.1:1.1.1 +2.7.1:1.14.15:1.2.1:4.1.1 +9.9.9:1.5.1:4.2.1:5.1.3:2.7.9 +1.1.1:4.4.1:4.2.1:3.1.1:4.2.1:2.3.1 +1.2.1:4.2.1:6.3.4:1.1.1:1.1.1:1.1.1 +1.2.7:1.8.1:2.8.3:1.1.1:4.1.3:2.7.1:1.1.1:1.1.1:2.7.1 +1.1.1:2.7.7:1.14.14:1.2.7 +3.1.1:3.1.3:2.8.3:1.1.1 +1.3.1:1.1.5:2.3.1:2.3.1:5.4.2:3.1.3:2.7.1 +1.1.1:3.5.1:1.1.1:4.4.1:2.3.1:1.8.3 +2.7.1:2.3.1:2.3.1:4.1.1:2.5.1 +1.4.1:2.3.1:1.1.1:1.2.1:4.3.1:1.17.4:1.14.14:9.9.9:3.7.1:2.7.1 +1.14.11:2.6.1:2.5.1:2.7.7 +3.7.1:5.3.3:2.8.3 +1.14.12:1.14.14:1.13.11:1.1.1:2.6.1 +2.7.1:1.14.15:2.3.1:3.1.2:4.2.3 +3.5.4:1.5.1:1.1.1:1.1.1:1.2.4:1.1.1:1.1.1:4.1.3 +2.7.2:2.3.1:1.2.4:1.8.4:5.4.99:1.1.98:1.1.1 +6.2.1:9.9.9:2.7.8:1.8.7:2.6.1:1.2.4 +3.1.3:2.5.1:1.1.98:3.2.1:2.1.4:1.14.13 +2.4.2:3.1.4:1.2.1:1.5.8 +6.3.4:2.7.1:1.1.1 +1.3.8:2.7.1:1.1.2:1.14.14 +1.1.1:1.1.1:1.1.1:2.3.3:4.4.1 +2.2.1:6.3.5:1.14.14:2.6.1:9.9.9 +1.1.1:3.5.1:1.2.1:3.1.2:4.2.1:1.1.1:2.1.1:1.1.5:1.17.1:1.1.1:1.3.1:1.1.1:2.1.1 +3.6.1:1.5.8 +1.14.13:2.7.1:1.1.1:3.1.2:4.2.1:2.3.1 +1.13.11:1.1.98:2.7.2:2.3.1 +3.5.1:1.1.5:6.4.1:2.7.4:4.4.1:2.7.1:6.4.1 +6.2.1:2.7.7:5.4.99:6.2.1:9.9.9 +1.1.1:2.7.1:2.3.1:4.1.1:2.7.1:1.1.1 +5.5.1:2.7.9:2.8.3:1.1.1 +2.7.1:9.9.9:1.1.1:2.3.1:1.1.1 +1.14.13:2.7.7:1.1.1 +3.1.2:2.3.1:1.1.1:1.5.1:1.1.1 +3.1.1:1.1.1:1.3.1:6.2.1:3.1.3:1.1.1:4.4.1:1.1.1 +2.7.7:5.3.1:1.13.11 +1.1.1:2.7.4:3.5.1:2.7.1:1.1.1:1.13.11 +5.4.99:3.5.4:2.2.1:2.6.1:2.1.2:5.3.1:2.7.9 +4.2.1:1.13.12:5.1.3:2.3.1:1.1.1 +5.3.3:1.2.7:3.2.2:2.5.1:3.1.1:3.1.1 +5.1.3:1.2.5:1.17.3:2.1.2:2.7.1:1.2.1:5.4.99 +1.2.1:5.1.3:1.1.1:1.14.18:1.14.14 +1.1.1:2.7.6:3.1.3:1.1.5:9.9.9:2.7.1:1.2.1 +1.1.1:3.5.5:2.3.1:1.1.1:2.7.7 +1.2.1:1.1.99:1.14.15:1.1.1 +4.1.1:1.1.1:1.1.5:3.1.2:1.1.1 +2.7.1:1.1.5:1.1.1:6.2.1:2.3.1:1.1.98:2.7.1:2.7.8 +6.2.1:5.3.1:2.6.1:3.1.1:4.2.1:4.1.1 +1.3.1:1.5.3:5.1.2:4.1.1:1.1.1:2.7.4:2.6.1:2.5.1:9.9.9:5.3.1:1.1.2:5.1.3:1.8.1:2.7.7:1.14.99:2.3.1 +1.1.1:1.2.7:1.8.3:2.7.7 +4.2.3:3.1.3:2.1.2:1.13.11:1.1.1:1.14.18:1.2.7:1.8.1:1.13.11 +3.3.1:6.2.1:4.2.1:3.1.3:5.4.2:1.13.11:3.1.3:1.1.1:4.1.2:1.1.1:1.2.7 +1.1.1:4.1.3:1.1.1:2.5.1:1.1.1:2.6.1:2.3.1:3.1.2:2.7.1:1.1.1:3.1.2 +2.7.7:1.14.11:1.13.11:1.3.1:6.4.1:1.13.11:2.7.7:2.7.1:1.2.4 +2.1.2:2.5.1:1.13.11:4.1.2:1.2.1:1.14.13:1.2.4 +1.1.1:1.1.1:2.3.1:1.11.1:4.2.1:1.1.1 +1.3.1:5.4.2:1.1.1:1.1.1:1.8.1:5.4.2 +4.1.3:2.7.1:2.6.1:1.1.1:4.2.1:2.7.1:2.3.1 +1.13.99:4.2.1:3.1.1:1.1.1:1.14.13:3.7.1 +1.1.1:1.13.11:1.1.1:4.4.1:1.1.1:2.4.1:1.1.1:3.1.3:2.7.8:4.3.1:1.2.4:2.7.7:1.1.2 +4.1.1:1.2.7:1.2.1:1.1.1:4.1.2:1.14.14 +4.2.3:4.1.3:1.1.1:5.1.99:1.4.4:2.5.1:1.14.13:4.2.1:3.1.2:2.4.1:5.1.99:1.1.2:9.9.9:2.7.7:1.14.11:1.14.11:3.1.3 +1.5.1:4.2.1:3.3.1:4.2.1 +3.1.1:9.9.9:4.1.3:4.3.1:6.4.1 +2.5.1:2.5.1:1.2.7:1.13.11:4.1.2:3.1.3:1.1.1 +6.2.1:4.1.1:1.1.1:1.14.13:2.7.1:2.6.1:2.1.2:2.8.3 +2.7.7:4.2.1:1.14.13:2.7.1:1.1.1 +1.1.1:1.13.11:1.13.11:4.2.1:4.1.1:1.14.11 +2.7.1:2.7.1:3.6.1:6.3.1:1.1.1 +1.14.16:1.11.1:4.2.1:1.14.14:2.1.1:2.6.1:1.14.14 +1.2.1:4.2.1:1.2.1:1.2.1:2.7.2:3.1.3:5.4.2 +5.3.1:6.3.5:3.1.2 +2.3.1:3.1.1:5.1.99:1.1.5:3.3.2:1.14.99:5.4.99:4.2.3:1.2.1 +4.2.1:2.3.3:5.3.1:2.1.4 +5.5.1:3.1.2:1.1.1:2.3.3:3.1.3:2.2.1 +2.7.1:1.14.14:2.3.3:2.7.7:1.2.4 +2.7.9:1.1.1:1.1.1:1.1.1 +1.5.3:4.1.1:1.2.4:3.6.1 +1.1.1:1.1.1:3.1.1:1.1.1:4.1.3 +2.7.7:1.1.1:1.1.1:1.1.1 +6.2.1:1.1.1:1.1.1:5.3.3 +5.3.1:2.8.3:4.1.1:9.9.9 +1.2.1:3.1.3:3.6.1:1.1.1:1.1.99 +5.5.1:1.1.1:2.7.4:4.1.3:2.7.2 +4.1.1:2.3.1:1.1.1:3.6.1:3.1.3:4.1.1:5.4.2:5.4.2 +1.1.1:1.1.1:5.5.1:2.6.1:2.7.1:2.7.8:1.1.1 +1.1.1:2.7.4:2.2.1 +2.3.3:1.1.1:4.6.1:3.6.1:2.8.3:4.2.1:1.13.11 +4.4.1:3.1.4:2.7.1:1.2.1:1.1.1 +1.1.1:2.6.1:2.5.1:2.7.1:1.2.1 +1.1.98:5.5.1:2.1.1:1.2.1:1.1.1:3.1.4:3.1.2 +2.3.1:2.7.1 +1.5.1:9.9.9:1.1.1:2.3.3 +1.1.1:6.2.1:1.2.5:9.9.9:3.5.1 +4.4.1:1.1.98:5.4.2:9.9.9:6.2.1 +5.3.1:2.6.1:2.3.3:3.5.4 +1.1.1 +2.4.2:4.1.2:1.1.1:1.1.1:1.1.1:1.3.5:1.3.5:1.1.1:1.1.1 +1.17.4:1.13.11:1.1.5:5.4.2 +2.6.1:2.6.1:1.1.5:1.14.12:5.4.2:5.4.2:1.14.14:9.9.9:2.7.1:4.1.1 +3.1.2:1.1.1:1.1.1:1.14.14:5.4.99:1.1.2 +1.1.5:2.4.2:3.1.3:1.1.5:1.1.1:2.7.1:1.10.3:4.2.1 +2.7.1:3.1.4:2.5.1:2.7.2:2.7.1:1.1.1:3.1.2:2.1.2:2.7.1:6.2.1 +1.1.2:1.1.1:4.1.1:5.5.1:4.2.1:4.2.3:1.2.7:2.3.1:1.1.1 +3.1.3:6.2.1:4.2.1:2.8.3:2.3.1:2.3.1:2.7.4 +1.14.13:1.14.15:2.1.1:3.1.3:1.1.1:1.2.1:3.1.3:1.13.11 +1.1.1:1.5.8:1.1.1:5.3.1:2.6.1 +2.3.1:1.1.1:5.4.2:4.1.1:2.7.1:1.1.1:6.4.1:1.13.11:2.1.2:1.1.1 +1.13.11:2.3.1:2.7.1:2.6.1:3.1.3:4.2.1:1.3.1 +1.2.4:1.1.1:2.6.1:2.3.1:2.7.1:1.2.1:6.4.1:5.4.2 +2.7.7:4.2.1:6.4.1:1.13.11:1.2.4:1.1.1:1.1.1:1.14.13 +2.3.1:4.1.2:1.1.1:1.1.1:4.2.1:2.4.2:2.2.1 +4.2.1:1.1.1:2.5.1:1.2.1:1.1.1 +5.5.1:1.1.1:3.1.2:4.2.1:2.3.1:1.13.11 +1.1.1:2.3.1:2.7.1 +1.14.13:1.1.1 +3.1.1:1.1.1:2.6.1:1.5.1:2.1.1:2.6.1 +1.1.1:1.1.5:1.2.3:3.5.4:2.1.1 +1.1.5:1.4.4:6.4.1:2.3.1:1.14.13:2.7.8 +1.1.1:1.4.3:2.7.1:2.3.1:4.4.1:2.3.3:2.3.1 +4.1.1:4.4.1:5.4.2:4.1.1:1.1.1:2.3.1 +1.2.1:4.2.1 +3.1.5:1.2.1 +1.1.1:1.1.2:5.3.3 +1.3.1:2.3.1:2.2.1:1.1.1 +1.14.18:3.6.1:1.2.1:1.13.11:1.1.1:9.9.9 +3.1.2:1.13.11:1.1.1:2.7.1:3.7.1 +6.4.1:1.14.11:1.1.1:2.7.2:1.14.14:2.7.6:2.3.1 +1.4.1:4.4.1:1.2.1:4.2.1 +1.1.1:1.14.14:2.7.7:9.9.9:1.1.1:1.2.1 +1.14.14:2.7.6:1.1.1:1.13.11 +1.1.1:1.14.15:5.4.99:1.14.15 +3.1.3:1.1.1:1.1.1:1.13.11:1.1.1:2.7.1 +1.5.8:1.2.1:2.2.1:1.14.14 +2.7.2:3.1.1:4.3.1:2.7.7:2.7.1:1.2.4:2.5.1:1.11.1:1.5.8:2.4.2:1.1.1 +1.1.1:3.5.4:4.1.2:4.2.1 +2.7.7:2.7.8:2.3.1:1.13.11:1.14.13:1.3.99 +3.1.3:6.3.2:2.7.1:9.9.9:2.3.1 +1.14.99:1.1.5:2.5.1:1.1.1:2.7.2:1.2.4:4.1.1:1.4.3:4.2.1:1.14.11 +3.1.2:1.18.1:2.7.7:1.14.13:1.5.8 +4.4.1:2.6.1 +1.2.5:1.1.1:6.2.1:4.2.1 +3.1.3:1.1.99 +1.14.14:2.4.2:9.9.9 +1.14.14:1.1.1:2.1.1:1.1.1:1.1.1:1.1.5 +5.4.2:1.2.1:1.1.1 +1.8.1:1.1.1:3.7.1:3.5.4:2.3.1:3.2.2 +2.3.1:1.2.3:4.2.1:2.3.1:1.13.11:2.3.1:5.3.1 +4.2.1:2.3.3:4.4.1:3.1.3:3.5.99:5.4.2:2.7.9 +4.1.2:3.1.1:3.1.3:3.1.1:5.3.1:5.5.1:4.2.3:3.6.1 +3.1.2:2.3.1:1.1.1:6.3.4 +3.5.4:1.2.1:6.2.1 +3.2.1:1.14.16:1.4.3:4.1.1 +5.4.2:1.2.1:3.1.3:5.4.99:1.1.1:1.1.1:3.1.1:2.3.1:4.2.3:1.13.12:1.8.1 +1.14.14:3.1.4:4.1.1:2.3.3:3.1.3 +4.4.1:2.3.1:1.1.1 +2.7.2:1.2.1:3.1.1:4.1.2 +1.3.1:2.4.2:5.3.3:1.1.5:1.1.1:4.2.3:1.5.8:1.14.13 +1.1.1:1.1.1:2.1.2 +2.3.1:2.7.1:1.14.14:4.2.1:2.1.1:3.1.3:4.2.1:1.1.1:2.3.1:1.13.11:2.5.1:4.1.1:2.1.1:2.8.3 +2.7.7:1.14.14:2.3.1:1.1.1:1.2.4:1.13.11:3.1.1:2.1.1 +1.2.1:3.2.2:5.4.99 +3.1.2:3.1.3:2.5.1:3.5.2:1.2.1:5.99.1 +2.3.1:1.17.4:1.1.1:4.1.1:4.1.1:1.1.1 +1.1.5:6.4.1:2.7.1:2.4.2 +3.6.1:1.17.99:1.1.1 +3.6.1:1.14.18:1.8.1:1.3.5:2.1.1 +2.3.1:1.1.1:1.2.1:4.2.3:5.3.1 +4.1.3:3.6.1:2.7.4:2.1.2 +1.1.1:1.13.11:1.1.1:1.1.1:2.7.1 +1.14.12:1.1.1:1.14.11:4.3.1:1.8.2:1.1.1:2.1.2 +1.1.1:6.2.1:2.8.3:1.2.5:1.1.1:2.7.1 +1.14.14:1.1.1:2.1.4 +1.1.1:4.1.2:6.4.1:6.3.5:1.1.1:5.1.3:1.1.5:1.1.1 +1.1.1:1.3.7:2.7.1:2.7.7 +1.1.1:2.5.1:1.2.5:2.6.1 +9.9.9:1.14.13:4.1.2:2.3.1:3.1.2:1.1.1:2.3.1:1.2.1 +4.2.3:2.7.1:1.1.1:2.5.1 +1.1.1:2.7.1:6.2.1:2.3.3:6.3.3 +3.1.2:2.7.1:1.1.1:4.2.1 +6.4.1:1.14.14:1.1.1:2.1.1:2.2.1:1.3.1 +3.2.2:1.1.1:1.1.1:1.8.7:5.3.3:9.9.9:1.3.8 +2.7.1:2.3.1:1.14.13:2.6.1 +1.3.5:5.3.3:5.3.3:2.7.1:4.1.3:1.1.1:1.2.4:2.7.1 +5.5.1:3.1.4:1.3.1:2.6.1:2.7.1:5.4.2:2.3.1:6.3.4:3.5.1:1.1.1 +1.13.11:1.2.1:1.1.1:2.1.1:2.6.1 +5.4.99:4.4.1:1.1.1:1.8.1:1.2.1:1.3.5 +1.5.8:3.1.3:2.1.4:3.1.4 +3.5.1:1.3.1:1.1.1 +2.3.1:1.14.11:3.1.3:2.7.9:1.1.1:2.2.1 +1.1.1:5.4.2:2.3.1:1.5.98:1.13.11:4.3.1 +2.6.1:3.1.2:1.2.1 +2.7.2:2.3.3:1.1.1:1.3.1:3.1.3 +3.4.19:9.9.9 +5.4.2:5.5.1:2.3.1:2.7.7:4.2.3:1.1.1 +1.1.1:1.8.1:1.14.11:2.7.4:4.1.2 +1.1.1:1.1.1:1.2.5:6.2.1:2.1.2 +3.1.3:1.5.8:1.3.1:3.1.2 +2.3.3:1.1.1:2.7.1:1.1.1:1.13.11 +3.1.3:1.2.1:2.3.1:4.1.2 +9.9.9:2.3.1:2.7.1:1.1.1:1.1.1 +4.2.1:1.1.1:2.1.2:3.3.1:2.7.7:2.3.3 +5.2.1:1.8.7 +1.1.1:5.5.1:1.1.1:2.3.1:2.7.8:3.6.1:1.1.1:3.5.4:2.7.1 +2.1.1:1.1.1:2.5.1:2.3.1 +2.7.4:3.1.3:1.13.11:1.1.1 +2.4.2:1.1.1:3.5.4:2.8.3 +2.6.1:1.14.14:2.7.1:3.1.1:4.1.99:2.7.1:1.14.14 +1.2.4:2.7.7:9.9.9:3.7.1 +9.9.9:2.7.9:3.1.2:1.1.1 +4.2.1:4.3.1:1.1.2:2.3.1:3.1.2 +5.4.2:1.14.14:1.8.2:5.99.1:2.7.7:1.3.8:1.1.1:1.2.5:4.2.1 +2.7.4:1.1.1:2.7.4:2.7.1 +5.5.1:2.3.1:3.1.2:1.1.1:4.1.2 +6.4.1:1.1.1:2.3.1:1.1.1 +1.1.1:1.1.1:5.5.1:1.1.1:2.7.8 +4.1.3:1.14.12:4.2.1:1.14.14 +1.8.1:1.1.1:1.13.11:4.2.1:2.7.1:1.8.1:1.1.1:5.5.1:2.7.7:2.6.1 +5.4.2:4.2.1:3.2.2:1.1.1:1.1.2:1.14.18 +1.5.1:2.8.3:2.7.1:1.1.1:5.4.2:1.1.1:2.7.1:4.1.2:1.2.1:1.5.8:4.1.3 +1.1.1:1.1.1:1.2.4 +2.7.7:2.3.1:5.5.1:5.3.1:1.1.1 +4.1.3:1.1.1:4.1.2:1.1.1:3.1.3:2.3.1:1.1.3 +3.1.2:5.3.1:5.4.2:3.6.1:1.1.2:1.2.1:1.1.1:4.4.1:2.3.1:3.1.3:4.2.1:1.13.11 +1.1.1:2.7.1:1.1.1:1.1.1:1.1.1 +4.2.1:2.1.1:1.13.11 +2.5.1:2.7.1 +1.8.1:4.1.2:1.1.1:4.2.1 +1.14.13:3.5.4:4.2.1:1.1.1:2.5.1:4.1.3:3.1.3:4.2.3 +2.3.1:5.3.1 +3.5.1:2.7.1 +1.1.1:3.2.1:1.13.11:2.8.3:1.1.1 +1.1.1:1.17.1:2.2.1:4.1.1:3.1.1:1.1.5:4.1.3:3.5.1 +5.4.2:6.2.1:2.4.2:1.14.14:2.3.1 +2.7.1:3.5.1:6.4.1:3.5.4:1.2.1:1.14.13 +4.2.1:5.3.1:2.7.4 +2.3.1:1.17.1:4.1.1:1.13.11:3.1.3 +4.1.2:2.3.1:1.1.1:2.6.1:4.1.3 +3.1.1:1.14.12:1.1.1:3.1.3:2.8.3:1.1.1:1.1.1 +1.13.11:4.1.1:2.3.1:4.1.1:2.7.1:2.1.2:1.13.99:9.9.9 +2.1.1:1.2.7:1.14.14:3.1.2:3.3.2:3.5.4 +1.13.11:2.7.1:1.1.1:2.7.7:4.4.1:1.1.1:5.3.1:1.2.1:1.1.1 +1.14.16:1.1.5:5.3.1:1.14.16:2.3.1 +2.7.1:2.6.1:2.7.1:1.13.11:2.6.1:1.1.1 +2.7.1:1.1.1:2.7.1:2.7.2:2.7.7:1.1.99:1.2.1 +5.4.2:2.3.3:2.1.2:5.4.2:1.3.1:1.14.15:3.5.2 +2.3.1:4.3.1:1.1.1:1.1.1:1.1.1 +1.1.1:2.5.1:4.1.2:2.7.2:2.3.1:3.1.3:1.2.5 +4.4.1:1.2.1:1.3.1:2.3.1:1.14.16 +6.3.4:2.7.4:1.2.7:1.1.1:1.14.13:2.5.1 +4.3.1:1.1.1:2.7.1:1.14.16:1.14.14:1.5.8:3.1.3:1.2.4:3.5.1:5.4.2 +1.18.1:2.6.1:2.5.1:2.7.1:4.2.1:3.1.1:1.5.3:1.14.16:1.14.16:1.8.1:9.9.9 +1.13.11:2.6.1 +2.7.6:2.7.1:1.1.5:1.1.1:2.1.1 +1.1.1:2.8.3:3.5.4:1.1.1:2.5.1:3.1.3:5.3.1:1.1.1 +3.6.1:1.1.1:3.1.3:2.7.1:1.2.1 +2.3.1:3.7.1:2.2.1:2.1.2 +4.4.1:1.2.1:9.9.9:1.14.16:3.1.1 +1.2.4 +1.1.1:1.1.1:1.1.1:2.1.1:4.4.1 +2.1.2:1.1.1:1.5.3:1.14.11:2.7.7:2.3.1:2.3.1:1.1.1:2.5.1:3.1.3 +1.5.8:2.7.7:6.4.1:2.3.1:1.11.1:1.8.7:4.4.1 +1.1.98:1.4.4:2.3.3:2.7.4:2.1.1 +6.2.1:2.1.2 +3.5.1:1.14.13:1.2.1:2.7.7 +1.1.1:1.1.98:2.6.1:1.14.11:5.4.2:2.7.1:1.2.7:4.1.2:2.7.7 +2.7.1:2.6.1:1.2.7:2.7.7:2.7.1:1.1.5:6.2.1 +2.7.4:2.7.7:3.1.1:1.17.4:2.7.4:2.5.1:1.1.1 +2.3.1:1.1.1:2.7.8:2.3.1:1.2.4:2.4.2:5.3.3:1.2.1 +1.13.11:4.4.1:2.5.1:2.1.2:5.3.1:3.1.2:1.14.14 +5.3.1:2.6.1:2.6.1:4.2.1:2.7.1:1.13.11 +1.1.1:3.1.3:2.3.1:4.2.3 +2.3.1:5.4.2:2.7.7 +1.14.13:1.17.1:1.2.4:1.5.1:2.7.7 +1.3.99:4.2.1:1.17.7 +3.1.2:2.7.7:1.1.1:1.1.1 +2.5.1:9.9.9 +1.1.1:1.14.14:1.8.1:1.13.11 +2.8.3:2.3.1:2.1.1:1.2.1:1.1.1:2.7.1 +4.2.1:2.3.1:1.2.4 +5.3.1:2.7.9:3.1.1:4.4.1:6.4.1:3.2.2 +1.1.1:4.2.1:1.14.13:2.4.1:1.14.19:2.7.1 +2.7.8:6.3.2:1.1.1:2.7.1 +3.1.2:1.1.3:2.7.7:2.3.1:6.4.1 +1.1.1:4.1.1:1.1.1 +2.1.1:9.9.9:3.1.4:2.7.1 +1.2.4:5.4.2:1.1.1:3.1.1:6.2.1:1.4.4 +2.7.1:1.1.1:1.8.1:4.2.3:1.14.11:4.3.1 +1.1.1:2.8.3:1.17.4:2.6.1:5.3.1:5.5.1 +3.1.3:1.1.1:2.8.3:1.2.1:4.4.1:4.1.1:1.1.1:2.7.7 +5.3.1:1.1.1:2.8.3:4.1.3:1.2.5:1.1.1:2.7.8:1.1.1:2.8.3:3.3.2:3.1.3 +4.2.1:1.3.1:1.1.1:3.1.3:9.9.9:1.1.1:3.2.2:2.7.1:1.3.98:2.3.1:6.2.1:1.3.1:2.7.7:4.4.1 +2.7.8:2.7.1:1.2.5:1.13.99 +1.11.1:1.2.4:6.2.1:2.3.3:1.1.1:2.3.1 +1.1.1:2.7.1:4.2.1 +1.14.14:4.2.1:1.1.1:3.1.3:1.1.1:2.7.1:6.3.2:3.1.2:2.3.1:1.1.2:1.17.1:1.1.1:1.1.1:2.7.1 +2.7.9:4.1.1:2.3.1:2.3.1:6.2.1:1.1.1:2.1.1 +5.1.1:2.3.1:2.2.1:2.3.1 +1.14.13:1.2.1:5.3.3:2.3.1:1.3.8 +1.14.14:2.6.1:2.8.3:1.13.11:2.7.7 +2.7.1:5.3.3:2.7.1:4.1.2:1.2.1:1.14.11 +1.1.1:4.2.1:6.3.5:2.7.1 +4.4.1:1.5.3:4.3.3 +1.3.1:9.9.9:4.3.2:1.1.1:1.1.1 +5.1.2:4.2.1:2.3.1 +4.2.1:1.2.4:2.6.1:1.14.11 +5.3.1:1.2.4:2.2.1:6.4.1:1.2.1 +1.1.99:2.8.2:1.1.1:2.3.1 +1.1.1:6.3.4:1.13.11:4.3.1 +2.7.2:2.3.1:5.3.2:2.3.1 +2.1.4:1.8.1:1.1.1 +1.17.3:2.3.1:1.5.3:2.7.1:2.5.1:2.1.1 +1.1.1:2.1.2:3.1.3:1.1.2:2.7.1:1.1.1:1.1.5 +1.14.13:1.2.1:3.5.4:1.11.1:4.1.1:1.1.5 +2.7.7:4.1.1:1.2.1:3.1.3:2.1.1:2.7.2:2.7.7:2.3.1 +4.4.1:1.1.1:1.1.1 +3.1.1:1.1.1:6.4.1:1.1.1:1.14.13 +1.2.7:4.4.1:4.1.2:4.2.1:4.1.1:9.9.9 +3.1.3:1.2.5:2.5.1:1.1.2:1.1.2 +4.2.1:1.3.1:1.14.14:2.1.1:1.1.1:4.1.2:2.6.1:2.7.7 +2.7.4:5.4.2:1.14.13:1.1.5 +1.14.16:6.2.1:1.2.4:5.4.2 +4.4.1:2.7.9:4.3.1:2.6.1:1.5.1 +1.2.7:1.1.3:1.1.1 +1.2.4:1.1.1:1.5.8 +4.2.1:6.4.1:5.4.2:3.1.1:2.7.7:2.7.4 +5.5.1:1.2.1:1.1.1:4.2.1:1.1.1:2.7.1:1.1.2:1.1.1:1.1.5:1.1.2 +2.7.1:3.6.1:4.2.3:2.7.4 +1.1.1:3.1.3:6.4.1:1.14.11:2.8.3:3.1.2:4.1.1 +1.14.13:1.2.1:2.7.7:1.1.1:1.1.98:4.4.1 +2.7.4:1.1.1:1.14.13:9.9.9:2.2.1 +6.3.5:5.3.1:3.1.3:2.7.1 +1.1.1:6.2.1:5.5.1:4.1.2 +6.3.2:1.3.1:2.8.3:4.2.1 +2.6.1:1.17.4:1.1.1:1.3.1:4.2.1:9.9.9:1.1.1:1.1.1 +1.14.11:2.7.9:1.2.1:3.1.2 +1.1.99:3.1.2:3.5.99:1.1.1:1.1.1:1.3.1:1.1.1 +1.2.5:1.13.11:1.2.7 +3.1.1:1.17.4:2.6.1:1.1.98:3.1.2:2.5.1 +2.6.1:1.1.1:2.1.2:1.4.3:1.1.99:1.1.1:3.5.4:2.7.1:3.1.1:5.3.1 +1.1.5:3.1.4:1.1.5:1.1.1 +1.2.1:3.1.2:1.13.11:5.1.3:2.7.7 +3.1.3:6.3.5:2.1.4:1.2.1:1.1.1 +5.3.1:4.1.3:1.1.1 +1.13.11:1.1.1:3.7.1:1.2.1:2.7.1:1.1.98:2.3.1 +2.7.4:4.1.1:1.13.11:1.14.11:1.13.11:1.1.98:3.1.3 +3.5.1:3.6.1:1.1.1:2.6.1:1.1.1:4.2.3 +2.3.1:2.6.1:6.2.1:1.5.1:1.1.1:1.1.1:5.5.1 +1.8.1:1.1.1:2.6.1:6.2.1:4.1.1:4.2.1 +4.1.2:1.13.11:1.1.1:1.1.1:1.1.2:1.18.1:2.7.1:1.1.1:1.14.14:2.7.4:2.4.1:5.4.2 +1.13.11:2.7.1:2.1.2:2.5.1:4.2.1:4.4.1 +1.1.5:3.1.4:2.3.1:1.14.12:4.1.1:3.1.2:1.8.4:3.1.1 +4.2.1:4.2.1:1.2.1:1.3.8 +1.14.13:1.1.1:1.8.1 +2.5.1:3.1.3:6.2.1:5.3.1:4.2.1:1.14.13:2.6.1:3.6.1 +3.5.4:2.1.2:4.3.1:2.1.1 +2.7.1:1.8.1:3.13.1:2.3.3:1.1.5:4.1.1:1.1.1 +1.13.11:2.7.4:5.4.2:5.3.3:2.6.1:6.4.1 +1.1.1:1.1.1:1.14.16:1.1.3:1.2.4:2.3.1:1.1.1 +5.3.1:1.1.2:1.1.5:3.1.2:1.1.1:5.4.2:2.6.1 +2.7.7:6.2.1:2.7.1:2.3.1:2.7.7:1.1.1:2.1.1 +2.3.1:2.7.1:2.7.7:5.3.1:1.1.1:2.7.9:2.6.1:1.8.5:1.1.1:1.3.1 +6.2.1:2.7.1:3.1.1:1.14.14:3.1.3:1.1.1:2.3.3 +4.2.1:1.14.14:1.2.4 +4.1.1:1.14.11:1.14.14:1.13.11 +3.7.1:2.6.1:2.7.1:1.1.1:1.14.14 +1.14.19:1.17.4:1.1.99 +2.6.1:2.6.1:1.1.1:1.1.99:4.1.2:4.1.3:6.2.1 +1.1.3:6.2.1:2.3.1 +1.14.13:1.1.3:2.6.1:2.7.1:1.3.1:2.7.4:2.8.3 +5.3.1:1.14.14:4.1.2:2.7.2:1.14.13:4.1.1:3.1.1:1.13.11:4.2.1 +2.7.1:4.6.1:2.7.1:3.1.1:2.4.2:3.1.3 +2.3.1:4.1.2:3.1.1:3.5.4:4.3.2:3.5.3 +2.6.1:4.2.1:2.1.1:2.7.1:3.1.2 +5.5.1:1.1.1:4.1.1:2.7.7:5.3.3:5.4.2:3.1.3:3.1.3:1.17.99 +1.5.1:4.4.1:1.1.1:2.1.1:5.4.2 +1.14.15:2.5.1:2.3.1:1.3.5 +1.13.11:3.5.1:1.1.1:2.3.1:1.14.12 +1.14.14:2.7.4:3.1.3:1.1.1:4.2.3:5.4.2:2.4.1:2.6.1:3.6.1:2.7.2 +3.1.4:5.3.1:4.2.1:2.1.1 +5.4.2:1.2.4:9.9.9:4.4.1:2.7.7:1.1.1 +1.1.1:1.14.13:2.6.1:2.7.7:2.1.2 +2.7.1:4.2.1:1.14.14:2.7.8:1.1.1:2.6.1:1.1.1:2.3.1 +4.4.1:2.3.1:1.2.1:2.3.1 +2.3.1:3.1.3:2.7.1:2.3.3 +1.1.1:5.5.1 +1.2.1:3.6.1:2.7.7:1.3.8 +1.1.1:2.7.7:6.6.1:1.1.1:6.4.1 +2.7.1:1.1.1:1.2.1:5.3.1:1.1.1:1.14.14:1.1.1:2.1.2:5.4.99:2.7.4:4.1.2 +1.1.1:1.1.3:2.7.1:2.6.1:4.4.1:2.6.1 +2.8.2:5.4.2:1.13.11:4.4.1:9.9.9:1.1.1:3.5.4 +2.3.1:9.9.9:3.1.1:3.3.2:1.1.1:4.2.1 +5.3.1:2.4.2:1.1.1:5.3.3 +1.3.1:3.5.5:1.1.1:6.3.3:2.7.1:4.2.1:1.1.1:1.14.13:4.1.2:1.1.1:1.1.2:2.5.1:1.1.1:2.2.1 +1.3.1:4.2.1:1.1.2:1.1.1:6.2.1:4.2.1:1.1.1:4.1.99 +1.14.16:6.4.1:9.9.9:1.14.99 +4.4.1:1.1.99:5.4.2:5.3.1:5.3.1:1.1.1 +3.5.4:2.6.1:4.2.3:1.14.12:1.1.5:1.1.1:1.13.11:1.3.8 +6.2.1:1.2.4:4.3.1 +2.3.1:4.1.2:2.7.1 +4.2.1:1.1.5:4.1.1:1.1.1:4.1.1 +1.1.1:2.7.7:1.1.3 +5.1.3:3.1.3:5.4.99:2.1.1 +2.7.1:1.1.2:2.4.2:4.1.3:2.6.1:2.6.1 +4.4.1:2.3.1:2.7.7:5.1.2 +1.2.4:1.13.11:1.14.14:3.1.2:1.8.1:1.1.1 +5.3.2:1.14.12:4.1.2:1.1.2:4.4.1:2.6.1:2.7.1:1.1.1:1.1.5 +1.2.4:4.2.1:2.3.1 +4.4.1:1.13.99:2.4.2:4.1.2 +4.2.1:2.3.1:2.7.4:2.7.1:9.9.9 +2.7.7:5.1.99:2.3.1:2.7.1:3.1.2:3.6.1:1.14.14:1.4.3 +3.2.1:1.14.14:5.3.1:2.3.1 +1.1.1:1.1.2:5.4.2:1.13.11:3.7.1 +1.3.1:6.3.5:1.1.1:2.7.1 +2.3.1:1.1.1:4.4.1 +1.1.1:2.1.1:2.6.1:1.13.11:4.1.1:5.4.2:2.7.6 +3.1.3:3.1.3:2.3.1:1.1.1:5.4.2 +4.4.1:9.9.9:1.1.1:5.3.3:1.14.14:2.7.1:1.1.1 +1.1.1:2.8.3:1.14.15:1.2.1:1.1.1:6.4.1:1.13.11:2.1.1:2.7.1:2.1.4:1.13.11:4.2.3 +2.5.1:1.17.4:4.4.1:1.1.1 +1.1.1:1.8.1:4.2.1:2.7.7:1.1.1:1.1.1 +1.14.13:1.3.1:2.7.7:5.4.2:1.1.1:1.1.1:2.7.1 +2.7.1:2.7.1:2.1.1:2.7.7:5.4.2:5.3.1:1.1.1:1.13.11 +2.4.2:5.5.1 +1.1.5:1.1.1:1.1.1:1.2.1:6.2.1 +2.5.1:5.5.1:4.2.3:1.14.14:1.1.1 +5.4.2:3.1.2 +3.1.3:2.7.7:1.14.99:2.5.1:4.2.1 +2.3.1:4.1.2:1.1.5:1.1.1 +3.6.1:2.7.2:4.1.2:1.1.1:2.5.1:6.4.1:1.14.99:1.14.14:4.1.1 +2.3.1:4.2.1:1.2.7:1.1.1:1.2.7 +1.1.1:5.1.2:1.2.1:2.1.4 +1.5.8:3.2.1:1.2.4:1.1.1:1.1.1 +9.9.9:3.5.1 +2.7.7:2.3.1:1.1.1:1.1.1:2.7.1 +3.1.1:2.1.1:1.1.2:4.2.3 +1.5.8:1.14.14:1.1.1:4.4.1 +3.1.2:4.2.1:1.2.7:1.2.4:1.1.1 +1.2.1:6.3.5:2.3.3 +3.1.3:2.7.7:1.1.1:9.9.9:1.1.1 +1.14.13:1.14.12:2.3.3:4.1.1:1.1.98:1.14.13:2.7.2:5.3.1 +1.1.99:1.1.1:1.1.1:3.6.1 +1.1.1:4.1.3:2.7.1:2.7.2:2.3.3:1.1.1 +9.9.9:1.2.1:1.1.1:4.1.2:1.14.18:1.1.98:5.4.2:2.4.2 +3.1.3:9.9.9:1.1.1:1.14.14:2.5.1:6.2.1 +2.4.2:1.1.1:1.1.5:1.2.1:2.6.1:1.18.1:2.7.1:9.9.9 +1.14.99:9.9.9:4.2.1:2.7.4 +3.6.1:4.3.2:2.1.1:1.3.1 +3.1.3:2.4.2:3.7.1:1.1.1:1.14.19:1.1.1 +3.1.1:9.9.9:2.7.7 +1.1.5:5.4.2:1.3.1:1.1.1 +2.1.2:4.1.3:1.2.1:4.1.2:2.7.2:1.1.1 +2.1.2:1.1.1:2.7.1:4.6.1:3.1.3:1.14.13:1.13.12 +4.1.3:2.2.1:1.14.14:3.1.3:6.2.1:1.1.1:1.14.14 +1.1.1:5.3.3:1.1.1:1.1.1:1.1.1:2.7.7 +2.7.2:2.7.8:1.2.4 +1.1.1:1.17.4:2.1.1:1.1.1:1.2.1:2.4.2:1.1.1 +2.3.1:3.1.1:2.3.3:2.7.9:2.7.2:4.2.1:1.1.1:5.3.1 +3.1.2:1.14.14:4.2.1:2.3.3:5.5.1:1.2.1:1.1.1 +3.6.1:1.17.4:3.5.1:4.2.3:1.2.7 +6.6.1:4.3.1:3.5.3:1.1.1:1.1.1:1.14.13:1.1.1:2.3.1 +4.1.1:1.2.1:2.7.1:1.4.3:1.2.1:5.1.3:2.3.1 +1.1.1:1.1.1:3.1.3:3.1.1:1.14.14:2.1.2:3.1.1 +2.6.1:1.14.13:1.1.1 +1.14.13:1.8.1:1.1.1:2.7.4:1.2.4 +5.3.1:1.1.1:2.3.1:4.1.99:1.1.1:1.13.11:1.1.1 +1.14.11:1.1.1:4.4.1:3.1.1:2.7.1:5.3.1:1.2.1:5.3.2:2.8.1:6.2.1:3.6.1:1.1.1 +1.2.1:1.2.4:1.1.3 +2.7.1:2.7.2:6.2.1:1.13.11:5.3.1:2.3.2:1.1.1:4.2.1:6.2.1:1.1.1:2.4.1:2.7.8:1.14.13:2.7.1 +1.1.1:4.1.3:1.1.1:3.1.2:1.1.5:2.3.1 +4.1.1:4.4.1:1.2.1:3.1.3 +1.14.14:1.1.1:5.1.2:1.1.1:9.9.9:4.1.2 +3.1.1:1.1.99:1.1.2:6.2.1:2.7.1:4.1.2:2.7.2:5.1.2:1.1.1:1.1.5 +1.2.4:1.14.14:1.1.5:1.1.1:2.7.8:1.1.1:5.4.2:5.5.1 +4.1.2:5.1.1 +2.1.4:2.3.3:1.14.16:2.3.1:1.1.1 +1.13.11:2.2.1:2.7.7:6.2.1 +2.7.4:1.1.1:1.1.99:5.3.3:1.14.15:4.1.1:1.17.1 +3.1.3:4.2.1:1.1.1:1.2.4 +2.1.1:2.7.4:2.6.1:9.9.9 +2.7.1:2.5.1:2.3.3 +2.6.1:6.2.1:3.2.2:2.1.1:2.5.1:1.14.15:2.3.1:9.9.9:1.14.18 +1.17.4:2.7.1:3.5.2:4.2.1:2.1.1 +4.1.1:6.4.1:3.1.2:3.1.1:1.1.1 +2.4.2:3.5.1:5.2.1:2.7.7 +3.3.1:1.2.1:1.1.99:4.4.1:3.1.1:1.1.1:1.1.1:5.4.2:2.1.4:3.1.3:1.1.2 +5.4.2:5.3.3:5.4.2:1.1.1 +2.6.1:2.3.3:5.5.1:4.2.1:1.3.1:2.3.1 +3.6.1:1.14.15:4.1.1:1.1.1:1.1.1:2.3.3:1.18.1 +6.2.1:2.7.1:1.14.11:2.3.1:6.3.4:1.14.15:5.3.1:1.1.1:1.14.16 +3.5.4:4.2.1:5.5.1:4.1.1:2.7.1:1.2.1:4.1.1:1.1.99 +2.7.4:1.14.19:4.2.3 +2.6.1:1.14.14:5.5.1:2.7.9:1.1.1:4.1.3 +2.4.1:1.2.1:4.2.1:3.5.2 +2.2.1:2.5.1:9.9.9:2.8.3 +1.2.5:1.1.1:4.2.1:2.6.1:6.2.1 +1.1.1:1.14.13:1.1.1:1.1.1:1.1.1:3.5.2:2.3.3 +4.1.1:2.7.1:4.1.3 +1.1.1:3.1.3:1.1.1:4.2.1:2.6.1 +4.2.1:1.1.1:4.1.3:1.1.1:2.6.1 +5.5.1:4.4.1:1.2.1:2.7.1:2.7.4:1.1.1:1.1.1 +2.1.1:4.2.1:1.1.1:4.1.1:6.3.5 +3.1.2:1.1.1:2.1.2 +1.14.15:4.1.1:3.5.1 +3.7.1:5.5.1:2.7.1 +1.1.1:1.13.11:5.3.1:2.7.7:1.1.1:4.2.1 +2.3.1:3.5.1:2.7.1:1.13.11:1.2.1:1.1.99:1.1.1:1.1.1 +1.1.1:3.1.1:6.2.1:2.1.2 +2.7.1:1.2.1:1.1.3:4.1.2 +2.7.2:1.14.11:1.1.98:1.1.1:4.1.1:2.7.7:5.4.2 +4.1.1:4.4.1:1.1.1:5.1.99:2.7.1:1.17.4 +2.7.1:2.3.1:1.2.1:2.6.1:2.3.1:2.8.2 +2.3.3:1.13.11:1.1.1:1.1.1:1.11.1:2.1.1 +1.1.2:1.1.1:1.1.1:1.1.1:2.3.1:6.4.1:3.1.3 +4.1.1:1.1.5:1.3.1:9.9.9:6.4.1:1.1.98:2.7.1:1.17.99:1.8.1:1.3.5 +3.3.1:1.1.3:1.1.1:2.8.3:5.4.2:9.9.9:5.5.1:6.2.1:4.2.1:2.3.1:3.6.1 +4.1.1:5.4.2:2.8.2:1.1.1 +1.1.1:1.14.11:2.3.1:2.7.9:2.3.1:2.6.1:1.1.2:1.1.1 +2.7.2:4.2.1:1.13.11:2.6.1 +1.14.99:1.2.5:4.1.1:1.1.1:4.1.2:1.14.11:3.1.3 +1.14.13:4.4.1:1.14.11:1.1.1:1.1.99:4.1.2:9.9.9 +1.1.1:2.7.7:1.1.1:6.3.2 +1.1.1:1.3.1:2.7.8:4.3.1:1.2.5 +2.7.7:1.1.5:1.1.1:1.4.3:1.1.1:1.2.1:5.3.3:1.13.11 +2.7.4:4.4.1:1.1.1:2.1.1:2.5.1:1.2.7:9.9.9:2.6.1:4.1.1:4.2.1:3.1.6 +1.2.5:2.7.2:1.1.2 +1.1.1:5.3.1:5.3.1:2.7.1:1.2.7 +1.1.1:2.8.3:1.5.8:2.7.1 +2.8.3:1.14.13:3.1.4:4.1.3:2.6.1:1.1.1:2.3.1:1.1.98:1.1.1:1.1.1 +1.1.2:2.7.1:4.3.1:2.3.1:9.9.9 +2.3.3:1.1.3:4.1.3:1.14.14:2.1.1:1.13.11:9.9.9 +5.3.1:2.3.1:3.6.1:1.4.9 +4.2.1:5.4.2:1.3.1:1.14.16:2.7.7 +4.3.1:1.2.5:1.1.1:4.2.1 +4.2.1:1.14.14:2.4.2:1.1.1:1.3.1:1.2.1 +3.1.3:1.14.14:4.1.1:1.1.1 +1.1.1:3.3.2:1.13.99:1.1.1:1.1.1:2.3.1 +3.1.1:3.1.3 +2.1.1:1.13.11:1.13.11:2.7.7 +1.1.1:1.1.1:1.1.2:1.1.1:5.5.1:1.1.2 +1.1.3:1.13.11:6.2.1:1.17.1 +1.2.1:9.9.9:2.7.7:4.2.3:1.1.5 +9.9.9:2.7.2:1.2.5:1.14.99:1.2.4:2.3.1:9.9.9:2.3.1:1.1.1:1.2.1:2.3.1:2.3.1:2.7.1 +2.7.1:3.7.1:2.7.7:3.3.2:2.7.1:4.2.1:1.13.11 +5.4.2:4.6.1:2.3.1:1.1.98:1.1.2:2.6.1 +3.1.3:5.1.3:9.9.9:1.1.1 +1.2.1:3.1.3:4.1.3:5.3.3 +1.13.11:1.17.1:1.1.1:1.2.7:1.1.5 +3.1.3:2.7.1:2.1.2:6.2.1:6.4.1 +2.7.1:5.4.2:1.5.3:4.1.1:4.2.1:1.13.11:2.7.1:1.14.14:1.3.1:1.13.12 +5.3.1:9.9.9:3.6.1:1.1.5:9.9.9:1.14.13 +4.2.1:2.4.2:4.2.1 +1.1.1:9.9.9:1.14.13:2.8.3:4.4.1:4.1.1 +2.7.2:2.7.1:2.3.1:1.2.4 +4.2.1:3.13.1:3.1.2:5.4.2:2.1.1:1.2.1:4.2.1 +2.6.1:2.2.1:4.1.1:1.14.15:1.1.5:9.9.9:3.1.3:1.1.1 +6.2.1:1.14.14:5.1.1:4.1.2:2.7.7 +1.1.1:1.1.1:2.6.1:1.1.1:4.2.1:1.13.11:4.2.1 +2.7.7:1.14.14:1.14.15:4.4.1 +4.1.3:4.1.1:1.1.2:6.2.1:1.1.1 +4.3.1:1.1.1:6.2.1:2.7.1 +1.1.1:3.6.1:3.1.3:2.3.1:2.1.1 +5.5.1:1.14.16:1.1.1:2.6.1:2.1.1 +2.3.1:5.4.2:1.14.18:1.1.1:3.1.2:2.8.1 +2.7.1:1.1.1:5.3.1:2.3.1:2.6.1:1.14.14 +4.1.3:6.2.1:1.2.1:1.2.4 +2.7.7:1.2.1:2.5.1:2.8.1:6.4.1:2.7.1:1.2.4 +1.14.14:3.7.1:3.1.3 +1.4.3:4.1.1:2.7.1:5.3.1:1.2.1:1.1.1:2.7.1:3.1.1:1.11.1:4.2.1:4.4.1:1.2.1:4.1.1 +5.3.1:2.7.2:1.14.13:9.9.9 +4.2.1:2.3.1:5.3.1 +2.6.1:1.14.16:1.1.1:2.4.1:1.3.8:1.1.1 +1.14.18:1.13.11:2.3.1:1.13.11:1.17.3:2.6.1 +1.14.13:2.7.4:4.1.1:2.7.7:3.1.2 +2.5.1:4.2.1:1.1.1:1.1.1:1.14.13 +1.1.1:1.2.1:3.6.1:3.1.3 +3.1.4:2.1.1:1.2.7 +4.4.1:3.1.2:1.1.99:2.3.1:6.2.1:2.5.1:2.3.1:6.2.1:2.7.4:1.11.1:1.1.5:3.1.2:9.9.9:1.1.1:1.14.14 +5.4.2:1.1.1:1.1.1:3.1.2 +2.7.7:1.2.7:2.5.1:1.4.3:6.3.4 +1.14.11:6.4.1:1.1.1:5.1.3 +1.1.1:2.3.3 +2.1.1:5.4.2:4.2.3:2.3.1:2.3.1:1.1.1:2.7.4:1.1.2:3.5.4:2.7.1:1.17.1:1.1.1:4.2.1 +3.1.3:1.14.14:1.1.1:2.3.1:2.7.1:4.2.3:1.2.7:5.3.3 +1.1.1:2.7.7:2.5.1:4.1.2:6.2.1:1.4.1 +2.8.3:1.1.99:5.1.2:1.4.4:4.4.1:2.6.1:2.7.2:3.4.19:1.1.1:1.1.1:9.9.9:4.4.1:5.5.1:2.3.1 +2.3.3:1.1.1:4.2.1:3.1.2:3.1.1 +1.14.14:1.1.1:6.2.1:1.14.13:1.1.1:1.2.4:1.1.1:1.2.4:3.6.1 +2.7.4:4.1.1:4.3.2:1.13.11 +4.2.1:1.14.11:2.7.1:2.4.2:2.6.1:2.3.1:1.1.1:2.3.1 +2.7.1:1.14.13:2.6.1:3.6.1 +2.6.1:2.3.1:1.1.1:3.5.4 +1.2.1:3.1.1:2.3.1:5.3.3:3.4.11:5.3.1 +1.2.4:5.3.1:4.4.1:1.14.14 +1.13.11:3.1.1:2.2.1 +2.3.1:9.9.9:1.1.1:9.9.9:4.1.1:6.4.1:2.7.1:3.1.1:2.7.6:3.5.4:4.1.3 +4.1.1:3.1.1:3.6.1:2.3.3:4.2.1 +2.7.9:2.3.3:5.4.2:2.7.7:1.1.1:1.8.5 +1.14.16:2.1.1:1.13.11:1.1.2:3.1.2:2.3.1 +1.1.1:2.3.3:4.1.1:4.2.1:1.2.4:1.1.98:2.8.3 +4.4.1:1.1.1:1.1.1:1.13.11:3.6.1:1.2.1:4.1.1 +1.1.1:1.1.1:1.13.11:4.2.2 +2.1.1:1.1.1:1.3.1:2.8.3:5.4.1 +1.1.98:1.8.1:4.1.2:1.2.4:2.7.1:5.4.2:2.5.1:1.1.1:5.3.1:1.1.1:2.7.7 +9.9.9:2.7.9:9.9.9:2.7.7:5.4.2:2.7.1:1.14.14:2.7.1:3.1.2:1.5.8:4.2.1:3.1.4:4.1.1 +1.1.5:1.2.7:2.7.7:1.14.13:2.2.1:5.3.1:4.1.1:3.1.3 +6.4.1:3.5.4:9.9.9:9.9.9:2.7.7:2.3.1:3.5.1:4.1.1:2.3.1 +1.1.1:1.1.1:3.1.2:1.2.1:2.7.7:5.4.2 +3.6.1:4.2.1:1.8.4 +6.3.4:9.9.9:1.1.3:2.3.1 +2.4.1:1.1.1:2.1.1:1.1.5:2.2.1 +1.1.1:1.17.7:1.1.1:2.3.3:2.7.9:3.3.2:1.5.8:5.4.99 +4.1.3:5.3.2:2.7.7:2.8.3:2.3.1:1.5.1:2.7.1:5.3.1 +1.13.11:6.4.1:1.1.1:2.3.1:1.2.3 +2.3.3:2.1.1:4.1.1:1.14.14:1.14.15 +2.4.2:3.6.1:2.2.1 +1.1.1:4.1.2:2.7.1:3.5.1:9.9.9 +1.11.1:1.14.13:1.1.1 +1.14.14:4.3.3:1.14.16:1.1.1 +1.14.13:2.7.1:2.3.1:2.8.3:3.5.4:2.1.1:3.1.3 +1.8.3:2.5.1:2.7.7:1.3.1:1.3.98:1.1.1:1.11.1 +5.5.1:4.2.1:3.1.3:1.1.1 +2.6.1:2.7.1:9.9.9:4.2.1:2.3.1:1.2.1 +2.5.1:2.2.1:2.7.7:1.1.1:4.1.1:2.7.9 +4.1.1:2.7.1:1.4.5:3.6.1:1.2.7:1.14.14 +9.9.9:2.6.1:4.4.1:2.8.3:5.2.1:6.3.2:9.9.9 +5.4.2:2.6.1:2.5.1:2.7.7 +4.1.1:4.4.1 +1.14.16:1.14.14:6.2.1 +2.7.1:1.1.98:2.3.1:1.2.1:6.2.1 +2.3.1:1.8.3:1.1.1:6.4.1:5.5.1:4.2.1:5.3.1 +5.1.99:2.7.1:9.9.9 +6.2.1:1.1.1:4.1.1:2.7.9:4.1.2:3.1.1:1.14.16:1.1.99:1.1.1:2.1.1:2.7.8 +2.3.1:2.1.1:2.7.1:9.9.9 +1.1.1:2.1.1:3.1.3:5.4.2 +1.1.1:6.4.1:1.13.11:4.2.1:2.1.1 +2.7.1:2.7.7:2.4.1:2.3.1 +1.1.1:2.5.1:4.2.1:1.1.5 +2.3.1:1.17.4 +1.3.1:1.1.5:9.9.9:1.5.3 +2.3.1:1.2.1:1.1.1:5.4.2:5.4.2:1.2.3:1.3.1:5.3.1:1.14.14:1.1.1 +2.3.1:1.14.14:1.1.1:2.7.9:3.6.1:4.2.3:2.6.1 +1.14.15:4.1.1:1.5.3:1.2.1:2.3.1:4.2.3:6.4.1 +1.1.1:1.1.1:3.1.1:3.1.1 +4.2.3:1.14.15:5.3.1:9.9.9 +3.1.3:2.1.2:2.7.1:1.2.1:6.2.1:2.1.1:2.2.1 +2.3.1:4.1.3:1.1.1:1.14.11:6.2.1 +1.1.1:9.9.9:2.7.1:1.14.15:2.1.1:1.2.1 +1.2.1:2.7.7:1.1.5:4.2.3:1.2.4:2.7.3:3.1.3 +4.1.3:1.1.1:2.3.1:6.3.5:2.1.1 +1.8.4:2.5.1:3.1.2:1.14.13:1.2.7:4.3.1:1.1.1 +3.1.3:1.1.1:6.3.5:4.2.1:4.2.1 +1.1.1:1.11.1 +2.3.1:6.2.1:2.8.3:1.8.1:1.2.1 +4.2.1:1.2.1:1.1.1:3.1.3:5.4.2:3.1.3:2.3.1 +1.14.13:1.2.1:1.1.1 +1.13.11:2.7.1:2.6.1:2.4.2:2.4.2 +1.2.1:4.2.3:1.2.1:2.1.1:1.1.5 +2.3.1:1.13.11:4.1.1:2.3.1:2.8.3 +2.7.2:5.4.99:1.14.13:3.1.1:3.5.4 +2.5.1:1.1.1:2.3.1:2.1.1:2.3.1 +1.2.1:4.1.2:1.1.2:1.5.8:1.1.1:2.7.1:6.2.1 +9.9.9:1.1.1:2.3.1:1.1.1:5.3.3:5.3.3:3.6.1:6.2.1 +1.2.7:1.1.1:1.1.1:1.14.13:1.1.5:3.2.1 +1.1.5:1.13.11:1.1.1:2.1.2:3.5.1:4.1.1:1.13.11:2.3.1 +1.1.2:3.1.2:9.9.9:4.2.1:5.3.1:1.2.4 +2.7.1:1.13.11 +2.7.1:1.2.1:2.7.1:1.1.1:1.1.1:4.1.3:6.4.1:1.1.1 +2.1.2:5.4.2:5.3.3:1.1.1:1.1.1:2.6.1:9.9.9 +5.5.1:2.7.7:1.2.1 +2.6.1:5.4.2:5.3.2:1.2.1:4.2.3:2.6.1:1.14.15:1.1.1:1.1.1:3.6.1:1.14.13 +2.5.1:1.13.11:3.1.3:4.4.1:5.3.3 +1.14.14 +3.4.19:2.8.2:1.1.1:1.1.1:2.7.4:2.7.2:1.2.1 +1.14.14:1.17.4:2.3.3 +1.1.1:1.13.12:1.1.98 +1.1.5:3.1.1:1.3.5:2.1.4 +5.4.2:1.3.1:6.2.1:1.4.3:3.5.4:4.1.2:2.7.9:4.1.1:1.5.3 +1.14.14:4.2.1:2.3.1:1.1.1:4.2.1:1.2.1:3.1.2 +1.14.99:1.1.1:1.17.3 +1.1.1:1.2.1:6.2.1:4.4.1:1.1.1 +4.4.1:4.1.2:1.1.1:3.1.3:2.3.1 +4.1.1:1.1.2 +3.1.1:1.14.14:4.2.1:4.2.1:6.3.2 +4.2.1:3.4.11:2.4.2:2.6.1:1.2.1:1.1.1:2.3.1:3.1.3:1.2.1:2.3.1 +1.5.3:2.3.1:1.1.1 +1.1.1:3.5.3:1.1.1:3.5.3:5.3.3 +1.2.4:3.6.1:2.6.1:4.3.1:1.2.4:2.7.4:9.9.9:1.14.99:2.1.1 +1.1.98:1.14.13:3.1.2:1.1.1:6.3.4:1.1.1:9.9.9:5.3.1:3.1.1:1.1.1 +1.1.1:9.9.9:1.13.11:6.4.1:3.5.4:2.1.1 +3.1.3:2.3.1:5.5.1:1.1.1:1.14.16:4.1.1 +1.8.1:4.1.2:3.5.4:1.1.1:3.1.2:1.1.3:2.2.1 +2.6.1:1.14.12:1.1.1:1.2.1:1.14.13 +1.3.8:2.4.2:1.13.11 +4.1.2:9.9.9:1.14.14:4.1.3:1.8.1:2.7.4:1.1.1:5.4.2 +3.1.3:1.1.98:1.1.1 +2.2.1:1.1.1:2.7.1:1.2.7 +1.1.1:1.14.16:1.1.1 +2.7.8:4.1.1:1.17.7:1.1.1:9.9.9:1.17.1:1.2.1 +1.17.1:2.4.1:4.4.1:4.4.1:2.2.1:4.1.1:4.2.1:2.7.1:3.2.1 +2.7.1:1.1.1:1.14.14:2.4.1:1.4.3:3.5.3 +1.14.16:6.2.1:4.2.1:2.3.3:1.14.14 +6.3.4:1.1.3:1.1.1:1.1.1:1.2.4:2.1.2:1.14.13 +1.14.14:1.2.1:5.3.1:2.7.1:2.2.1 +1.17.3:3.1.1:3.5.1 +3.6.1:1.1.1:1.3.1 +2.3.1:4.2.3:1.1.1:2.5.1:4.2.3:1.2.7:1.1.5 +1.14.13:1.1.1:1.2.7:2.7.1:4.4.1:2.7.1:2.6.1 +1.1.1:1.3.98:9.9.9:1.2.5 +3.1.1:2.2.1:4.2.1:1.14.16 +1.1.98:4.2.1:2.7.1:1.14.12:1.1.1 +2.3.1:9.9.9:1.1.1:1.14.14:5.3.1:2.7.1 +4.2.1:1.1.1:5.4.99 +3.1.1:1.14.14:2.7.7 +1.1.1:1.13.11:2.7.7 +6.4.1:1.2.1:1.2.1:9.9.9:2.7.1:4.2.1 +1.2.1:3.4.24:1.1.1:6.2.1 +2.3.3:1.14.11:4.4.1:1.17.1:5.5.1 +2.6.1:4.2.1:4.2.1:1.1.1 +5.4.2:2.3.1:1.17.1:2.4.2:5.3.1:4.3.1 +1.1.1:1.13.11:3.1.2:2.6.1:2.4.1:3.1.3 +1.1.1:1.14.13:1.2.1:4.1.2:3.2.2:2.3.1 +4.1.2:1.1.1:2.3.1:1.1.1:2.7.2 +2.3.3:5.4.2:1.4.3 +1.1.1:5.4.2:2.3.3 +4.2.1:2.7.1:1.13.11 +4.2.1:4.2.1:2.7.7:2.3.1:2.1.1 +3.1.4:5.3.3:1.2.4:1.17.1:3.5.4:1.14.14:9.9.9 +1.8.3:2.3.1:1.1.1:1.2.1:1.14.14:2.8.3 +2.3.3:4.1.1:2.7.4:1.1.1:2.6.1:3.1.4 +1.2.7:2.4.2:2.7.1:3.5.4:3.1.2:9.9.9:1.14.14:3.1.3:2.7.1:1.14.16:1.14.14 +5.3.1:2.4.2 +2.4.2:2.8.1:9.9.9:4.2.1:9.9.9:4.4.1:5.4.2 +2.7.9:3.5.4:1.2.1:1.2.7:2.7.1:2.3.1:6.2.1 +4.2.1:3.5.2:3.1.2:5.4.2:5.1.99:2.6.1:2.3.3 +3.1.3:3.1.3:4.1.2:1.1.1:1.14.13 +4.1.3:5.5.1:2.6.1 +6.3.5:1.13.11:2.6.1:1.1.1:4.2.3:4.1.1 +4.2.1:1.1.1:5.3.1:2.3.1:4.6.1:4.2.1:1.3.1:1.14.11 +2.8.1:2.7.4:6.2.1:1.3.1 +4.1.3:1.1.1:5.3.1:1.1.2:2.7.4 +2.7.7:2.3.1:1.1.1 +2.3.1:1.2.5:1.17.4 +3.1.1:2.5.1:1.1.1:1.13.11:1.14.13:4.2.1:1.1.1:4.2.1 +4.2.1:2.3.1:1.13.11:1.1.3:1.13.11:3.5.1:2.4.2 +2.7.1:3.1.2:3.1.1:2.3.1:4.4.1 +1.1.1:5.3.1:3.1.2:1.1.1:2.7.2 +1.1.99:1.14.14:5.3.1:2.7.2:4.1.3 +1.18.1:2.7.1:9.9.9:2.3.1 +1.13.11:1.14.15:2.1.2:1.14.15:1.3.1:4.1.2:1.1.1:4.4.1 +2.7.4:1.1.1:2.7.1:3.1.4:5.1.2:1.1.1 +6.4.1:4.1.1:1.1.1:3.5.4 +4.1.1:1.1.1:1.13.11:2.7.1:1.1.1:2.6.1:1.8.1:2.7.1:2.7.1:4.3.1:1.3.1:3.1.3:1.1.3 +1.1.1:3.5.4:1.1.1:5.4.2:3.1.2:2.7.7:1.1.1:4.2.1 +5.4.2:1.1.1:3.1.3:2.7.1:5.4.2:4.1.1:9.9.9:2.3.3:1.1.1 +2.3.1:1.1.1:1.2.7:5.1.3 +3.1.2:1.14.14:1.2.5:2.7.2 +5.3.1:5.3.1:1.2.1:2.7.1 +1.1.1:6.3.5:2.7.1:4.1.3:1.1.5 +3.1.2:1.2.5:2.3.3:2.5.1:1.1.1:1.1.1:1.1.1:2.6.1:1.1.1 +1.2.1:2.7.8:1.2.1:1.2.1 +2.6.1:2.3.1:4.2.3:1.1.1:5.1.3:6.2.1 +3.5.1:1.2.1:1.1.1:4.1.2:1.14.16:6.2.1:1.1.1:1.2.5:2.3.1:1.14.11:1.1.1 +3.1.1:5.4.2:1.1.1:1.1.1:1.2.1:1.2.7:4.1.1:2.6.1:4.2.1 +1.1.1:1.1.1:2.7.1:1.1.1:1.14.11:3.6.1 +4.2.1:5.4.99:2.7.1:1.3.1 +2.3.3:4.2.1:2.7.1:5.3.1:4.2.1 +2.7.1:2.6.1:1.2.1:4.1.1:1.14.14 +9.9.9:5.5.1:3.5.1 +1.1.1:5.3.1:4.1.2:1.1.1 +1.1.5:2.7.1:1.1.1:2.7.8:1.2.5 +4.1.1:4.1.2:1.3.1:2.3.1:1.14.14 +1.17.1:5.4.2:1.1.1:1.13.11:3.2.1:2.7.1:1.1.1:9.9.9:1.3.1:5.3.3:4.2.1 +6.2.1:2.8.3:2.3.1 +1.1.1:2.2.1:2.2.1:1.2.1:2.6.1:1.2.7 +1.5.1:4.1.1:1.4.3:2.7.7:1.13.11:1.1.1 +4.2.1:2.3.3:1.17.99:1.13.99:1.3.1:1.17.3:2.6.1:2.7.7:1.13.11:2.3.1 +3.2.1:2.6.1:1.13.11:3.1.3:9.9.9:1.2.1 +2.3.1:2.7.7:5.3.2 +4.2.3:2.1.1:2.5.1:1.1.1:4.1.1:1.14.15 +1.14.12:1.14.13:1.1.1:1.1.1 +5.1.2:5.4.2:6.3.5 +2.3.1:1.1.1:4.2.1:1.1.1 +2.7.1:3.1.3:4.2.1:5.4.2:1.1.2:4.2.1 +4.2.3 +1.14.13:2.7.7:1.1.1:2.4.2 +4.1.3:2.7.1:4.2.1:1.1.1:5.5.1:1.14.13:4.1.1 +4.2.3:6.2.1:3.1.1:1.1.1 +3.1.3:3.1.2:3.1.3:1.14.14 +2.3.1:3.1.3:1.1.2:4.2.3 +9.9.9:2.4.2:4.2.1 +1.1.1:2.8.3:5.1.1:3.1.1:6.4.1:1.13.11 +2.6.1:4.2.1:4.2.1:2.6.1:1.1.1 +3.1.4:6.4.1:4.1.1:1.2.1:4.3.1 +1.1.1:4.1.2:2.7.9:1.7.3:5.4.2:1.1.1:6.2.1:2.6.1 +1.17.1:3.6.1:4.2.1:1.8.1:1.1.1:2.7.1 +4.2.1:1.2.1:3.1.2:1.13.11:1.2.4:1.1.1 +1.5.98:4.4.1:3.1.3:2.7.1:2.3.3:1.14.13 +4.2.1:9.9.9:4.1.1:4.1.1:2.7.1:2.6.1 +4.1.1:3.5.3:3.5.2 +3.1.1:3.1.2 +1.17.4:2.5.1:2.7.7:9.9.9:1.1.1 +2.5.1:1.1.1:1.1.1:4.1.2:5.3.1:3.1.2 +4.6.1:1.14.11:1.1.1:4.1.2:1.1.5:2.6.1:1.1.1:1.1.1:4.2.1:3.1.6:1.14.15:2.3.1 +4.2.1:1.14.18:2.5.1:1.1.1:3.1.3:2.6.1 +1.1.1:4.1.1:1.1.98:4.4.1:1.3.8:2.3.3:3.1.3 +2.1.2:2.7.7:4.1.3:1.1.1:4.2.1:4.2.1 +1.1.1:2.7.4:1.17.4:3.6.1 +2.7.1:2.8.2:3.1.3:3.1.3:1.14.13:1.14.14:2.2.1:9.9.9:2.6.1 +4.2.1:2.6.1:4.2.1:1.1.5:3.4.19:1.1.5:9.9.9 +1.14.13:1.1.1:1.14.18:1.2.1:2.7.4 +1.2.1:2.7.7:4.1.2 +9.9.9:1.2.3:1.1.1:2.1.2:2.3.1 +1.3.5:1.1.3:3.1.2:1.1.2:1.14.11:4.1.2:5.3.1 +2.7.1:2.6.1:2.4.2 +2.3.1:1.14.16:4.4.1:1.1.2:4.4.1 +1.1.1:2.7.4:4.2.1:1.14.13:2.5.1 +1.1.1:9.9.9:4.3.3:1.1.1:5.4.2 +1.1.1:5.4.2:2.3.1:1.3.1:3.5.4:3.3.2:1.2.5 +3.1.1:2.7.1:2.3.1:1.1.1:6.2.1:1.14.11:1.3.1 +3.1.2:1.1.5:1.3.98:1.14.14 +1.2.1:2.7.1:1.14.13:4.1.2 +1.2.1:6.4.1:4.1.1:1.1.5:1.1.1:2.3.1:2.7.1:1.1.2:1.1.1 +1.1.1:1.1.1:4.2.1:1.14.12:1.1.1:3.7.1 +1.3.1:3.1.4:1.14.14:1.2.4 +3.1.2:1.1.1:1.13.11:3.1.3:1.14.14:3.1.3 +2.7.7:2.7.1:2.1.1:2.6.1:6.3.5:1.1.1:4.4.1:4.1.2 +1.2.1:4.1.2:6.2.1:4.2.1:1.14.14 +3.1.3:5.3.1:2.7.8:6.4.1:1.1.1 +1.14.13:1.2.7:1.1.1:1.14.18:4.1.1:4.3.2:4.1.1:4.1.2:5.3.1 +2.1.1:1.1.1:1.13.11:3.1.1:4.2.1:1.2.1 +1.1.5:4.2.1:4.2.3 +2.4.1:9.9.9:2.7.7 +3.1.3:4.2.1:1.8.4:1.1.1:1.14.13:4.1.2 +2.3.1:3.1.3:3.1.3:1.1.1:3.1.3 +1.1.1:3.1.2:1.1.1:2.3.1 +1.1.1:6.2.1:5.4.2:9.9.9 +2.7.1:2.3.1:3.1.2:2.3.1:2.7.1 +3.1.3:1.1.2:1.1.1:2.3.1 +6.4.1:5.4.99:5.3.2:1.14.14:3.6.1:4.2.1:1.2.7:1.2.1:2.7.1 +2.6.1:5.4.2:3.5.1:2.7.4:6.3.4:1.14.13 +2.7.1:2.7.1:5.4.2 +3.5.4:1.1.2:1.1.1:1.11.1 +2.3.1:3.1.3:1.3.1 +6.4.1:4.1.2:1.17.1:5.1.3:1.1.5:2.6.1:5.1.2:2.6.1:1.18.1 +5.4.2:4.1.1:6.2.1:2.7.7:2.7.7:1.1.5 +2.3.1:5.4.2:3.6.1:4.2.1:2.7.9:5.5.1:1.1.3:1.2.1:1.14.11 +1.14.16:1.2.1:3.1.3:5.4.2:4.1.2:2.2.1 +1.1.1:2.3.1:4.4.1:5.3.1 +3.1.1:6.4.1:2.1.2:1.13.11:2.6.1:1.3.5:2.7.1:4.2.1:1.14.14 +3.1.2:4.1.1:1.1.1 +1.1.5:4.2.1:9.9.9:1.14.14:2.1.2:1.1.1:2.7.7:1.13.11:3.6.1 +1.1.1:2.3.1:1.13.11:2.1.4:2.7.1:2.7.7:1.1.1:2.2.1:1.1.1:1.3.8 +1.14.13:3.1.1:5.1.3:2.7.1:1.1.2:2.7.1:2.1.1 +2.3.3:5.3.1:6.2.1:1.13.99:1.1.1 +3.1.1:1.2.1:6.3.4:1.1.98:4.1.1:4.1.2:1.14.14 +2.7.2:1.14.13:1.2.1:2.3.1:1.3.8 +9.9.9:6.3.4:4.4.1:1.1.1:4.1.1:4.2.1:2.3.3:2.4.2:3.5.4:1.14.13 +2.4.2:1.1.1:1.2.1:5.3.1:1.14.18:1.1.1:4.2.1:4.2.3 +1.14.15:1.2.1:1.1.1:2.5.1:9.9.9:2.3.3:2.8.3:2.6.1 +2.3.1:2.1.2:1.1.2:1.14.14:1.5.3:1.8.1 +1.1.1:2.6.1:1.1.1:6.4.1 +2.7.1:1.1.1:1.2.7:3.1.3:2.7.7:3.6.1 +1.13.11:3.1.4:2.3.1:4.4.1:4.2.1:2.1.2:2.3.1 +4.1.2:1.1.1:1.1.1:2.3.1 +5.1.3:1.1.1:1.1.2:5.5.1:1.1.1:1.1.1:3.1.3 +1.1.2:1.1.1:5.3.1:2.8.3 +2.4.1:1.1.1:1.14.99:4.2.1:9.9.9:2.7.1:3.1.2 +1.2.1:1.14.14:2.1.1:4.2.3:1.1.1:1.1.1 +2.6.1:1.8.1:5.3.1:1.14.13:1.13.12:1.2.7 +3.1.1:2.1.1:1.14.14 +2.3.1:1.14.13:3.1.1 +2.6.1:1.17.1:2.7.1:5.4.3 +1.14.16:5.4.2:4.1.3:1.1.1:9.9.9:1.1.1:4.2.1 +1.14.14:2.1.4:1.14.14:2.8.3:1.14.15:5.4.2:5.5.1:2.7.1 +1.14.15:4.1.1:2.3.1 +5.4.2:3.1.3:4.2.1 +1.1.5:4.4.1:1.1.1:5.1.3 +1.1.1:5.3.1:3.1.1:5.5.1:2.4.2 +1.1.1:5.4.99:2.3.1:1.14.11 +2.8.3:1.1.1:4.2.1:4.1.1:1.14.99 +5.4.99:3.1.3:1.13.12:1.1.1 +3.1.1:1.1.5:2.5.1:9.9.9 +2.7.7:4.1.3:4.2.1 +5.3.1:1.1.1:4.1.1:1.1.1 +2.1.2:5.3.1:2.3.1:2.6.1 +5.3.1:1.2.4:4.1.2:1.1.1:2.1.2:2.4.2:1.2.7:2.7.1:1.3.5:2.6.1 +2.4.1:1.1.1:2.6.1:5.3.1:1.1.1:2.6.1:1.1.1:3.1.1:2.7.4 +5.4.2:1.14.16:2.7.1:4.4.1:4.1.3:2.2.1 +1.1.1:1.3.5:5.4.2:2.3.1:4.2.1 +1.1.1:1.17.1:2.7.7:2.1.1 +2.7.1:2.3.1:2.7.1:5.3.1:4.2.1:1.1.1 +1.1.1:1.1.1:2.7.1:5.3.1:3.1.3 +2.8.1:2.6.1:4.2.1:1.17.1:2.7.2:1.5.3 +2.7.1:5.3.1:1.5.3:2.1.1:2.1.2 +2.7.2:3.7.1:2.3.1:3.1.5 +1.1.5:1.2.1:1.13.11:1.1.1 +6.3.4:3.1.1:2.3.1:1.1.1:2.5.1 +2.7.4:3.5.4:1.1.1:2.3.1:2.1.2:1.17.1:5.3.1 +1.1.1:5.1.99:2.7.1:1.1.1:1.1.1:2.7.7:6.4.1:9.9.9 +4.2.3:1.1.3 +3.7.1:1.1.1:2.3.1 +1.1.3:1.5.3:3.1.3:2.3.1:1.8.1 +1.2.5:2.4.2:4.2.1:3.1.3:2.3.3:2.7.1:3.1.3:2.7.1 +1.1.98:4.1.3:6.3.4:1.1.1:2.7.7:1.1.1:1.1.1 +1.1.1:2.1.1 +4.2.1:5.4.2:2.8.3:9.9.9:1.3.1:1.1.1:1.14.12:1.4.4:2.7.1 +1.1.2:5.3.1:6.2.1:1.1.1:1.14.14:4.1.3:1.1.1:1.1.5:1.2.4 +4.2.1:3.5.3:1.14.13:1.1.1:1.14.18 +5.5.1:2.7.7:2.7.4:1.1.1 +3.1.1:2.7.1:2.3.1:4.1.1:2.6.1:4.2.1 +3.1.2:1.1.1:9.9.9 +2.5.1:1.14.18:1.4.5:5.3.3:4.3.1:3.1.3:1.1.1 +1.1.1:2.6.1 +2.4.2:3.1.3:2.7.1:1.13.11 +3.1.3:2.7.7:1.2.1:1.1.1:5.3.1 +1.1.1:1.1.2:1.1.5:3.3.2:3.1.2:2.6.1:2.3.3 +4.1.3:5.4.2:1.13.11:2.2.1 +2.7.7:1.3.8:1.13.11:1.2.1:2.3.1:1.1.1 +4.1.2:1.1.5:2.7.1:1.1.1:2.7.7:3.1.2:2.6.1:2.6.1:4.4.1:2.7.4:1.1.2:1.16.3:3.1.3 +4.2.3:1.1.1:1.8.4:4.1.3:1.14.13:1.1.1 +1.1.1:2.3.1:4.3.1 +4.2.1:4.1.1:1.2.7:6.4.1:1.14.14 +1.14.99:2.1.1:1.8.1:1.14.16:2.7.7:3.1.2 +2.6.1:2.2.1:1.1.1:1.13.11:1.14.12:1.5.1:9.9.9:1.2.1 +1.1.1:1.14.13:1.1.1:2.7.8:2.7.7:1.4.4:1.2.1:1.1.1 +1.13.11:1.1.5:2.6.1:2.7.1 +4.2.3:1.13.11:2.1.1:1.1.1:5.4.99:4.2.1:2.7.7:4.2.1 +2.7.1:5.3.1:1.1.5:2.7.9:4.2.1 +2.3.1:2.6.1:1.1.1:2.1.2 +3.5.1:5.5.1:3.5.3:1.14.11 +2.3.3:5.4.2:1.5.8 +1.14.15:2.3.1:3.1.2:3.6.1 +4.1.2:3.6.1:1.3.8:1.2.7:1.1.1 +2.7.1:1.13.12:5.4.2:9.9.9:2.7.1 +2.4.2:3.5.4:3.1.3:1.14.14:1.1.1:3.1.1:1.1.1:1.1.1 +5.1.99:3.1.1:1.5.1:1.3.1:1.1.1 +2.7.1:2.1.2:4.1.2 +1.17.1:5.3.1:4.4.1:9.9.9:1.5.8:1.1.1:1.14.14 +1.17.7:2.3.3:1.8.1:6.4.1:1.1.2:1.1.1:5.5.1 +5.3.1:2.7.1:3.1.3 +4.2.1:4.2.1:6.4.1:3.7.1 +2.7.8:4.2.1:2.7.7:1.14.14:3.1.3:1.1.1:1.2.1 +1.14.18:3.6.1:4.1.1:4.4.1:6.3.3 +1.13.12:2.3.1:1.8.4:2.6.1:3.1.3 +2.6.1:3.1.3 +1.2.1:2.3.1:2.7.8 +1.1.98:1.1.5:2.8.2:1.2.1:5.3.1:3.5.1:1.1.2 +1.1.1:4.1.1:1.11.1:1.1.5 +4.4.1:2.7.1:3.1.3:1.2.1:4.4.1 +1.13.11:1.1.1:1.1.2:1.1.1:3.1.2:5.3.1:1.2.1 +4.3.2:4.2.1:1.2.1:3.5.2:4.1.2:2.4.1 +2.7.1:4.1.1:5.4.2:1.2.1:2.7.2:1.5.3 +4.3.3:1.1.3:1.14.13:1.1.1:2.7.1:4.2.1:1.1.1 +1.1.1:1.3.1:6.2.1:5.4.2 +6.2.1:3.1.2:6.3.1:2.3.1 +2.3.1:2.3.1:1.13.11 +3.1.3:1.1.1:4.2.1:4.1.3:2.3.1 +1.14.13:1.1.1:4.1.2:1.14.13 +1.1.1:1.1.1:2.7.1:2.7.1:4.2.1:2.1.1:6.4.1 +3.6.1:2.7.7:2.5.1:1.1.5:2.5.1:6.2.1 +3.1.3:1.1.1:1.1.1:3.1.3 +1.13.11:2.4.1:3.1.3:1.14.19:5.1.1 +1.1.1:5.1.3:1.14.14:2.7.1:1.1.1:2.3.1:3.5.4:2.7.4 +6.2.1:4.1.2:3.1.3:4.1.2:1.17.4:4.4.1:1.2.1 +1.1.1:1.14.13:5.4.99:1.14.14:1.1.1:1.5.1:2.1.1:1.8.1:1.1.1 +1.1.1:9.9.9:5.3.1:1.1.1:3.1.2:1.3.1:1.2.7:2.3.1:1.2.1:1.13.11 +3.1.3:2.7.1:2.3.1:1.1.1:2.7.1:1.1.1:2.3.3:2.7.7:2.1.1:1.1.1 +1.1.2:2.8.3:4.4.1 +1.1.1:1.1.1:2.3.3 +1.1.1:2.1.1:1.1.1:4.1.1:2.7.7:1.1.1:1.3.1:2.3.1:1.2.1 +4.1.2:1.1.1:6.4.1:5.1.1:1.3.5:2.6.1:1.1.1:3.7.1:6.4.1:2.7.1:3.5.4:2.7.7:4.1.2 +1.1.1:1.3.1:1.1.98:6.2.1 +1.1.1:4.4.1:2.3.1:1.13.11 +1.1.1:1.1.1:9.9.9:2.7.1:9.9.9 +2.7.1:1.1.5:5.4.2:2.7.1:3.5.2 +1.1.1:1.2.4 +4.4.1:1.1.2:9.9.9:2.1.1:2.7.8 +1.2.1:4.1.1:1.11.1 +2.7.1:1.3.1:4.1.2:2.5.1:1.1.1 +1.1.1:2.6.1:1.14.13:1.17.7:2.2.1:1.1.1 +1.5.8:1.13.11 +2.3.1:1.1.1:1.1.1:9.9.9:2.5.1:4.1.1 +4.2.3:1.1.1:2.3.1:6.2.1:4.2.1:3.1.3:1.5.1:1.1.1:2.7.7 +6.2.1:2.3.1:2.3.1:2.7.1 +1.3.1:1.1.1:3.5.99:2.3.1:1.1.1:4.2.3 +1.8.7:1.1.1:4.2.1:4.3.2:5.3.3:4.1.3 +9.9.9:1.1.1:5.4.99 +2.7.1:6.3.2:1.17.7:1.2.1:6.4.1:1.1.2:6.2.1:1.2.5:4.1.3:2.5.1:1.2.4:2.6.1:1.2.5:5.4.99:4.3.3 +1.1.99:1.1.1:4.2.3:1.1.1:2.7.1:1.3.1:2.7.1:1.13.11 +2.3.1:2.7.1:2.7.1:1.2.1:1.1.1:9.9.9 +1.13.12:2.3.1:6.2.1 +2.5.1:3.1.3:1.1.1:2.7.1:1.1.1 +1.1.1:3.1.3:5.4.2 +9.9.9:4.6.1:1.3.1:9.9.9:5.4.2:2.7.6 +6.2.1:2.7.1:1.13.11:3.6.1 +1.3.8:1.1.1:1.2.1:1.2.4 +4.2.1:2.3.1:1.2.1:3.6.1:2.8.3 +1.11.1:5.3.3:1.1.1 +5.4.2:4.4.1:1.1.3:5.5.1:4.1.3 +1.1.1:3.1.4:4.2.1:2.7.2:3.5.1:2.7.1:1.2.98 +1.1.1:3.1.3:1.1.1:2.5.1 +2.7.1:1.2.1:1.1.1:4.2.1 +1.13.11:2.5.1:3.1.3:5.3.2:5.3.1 +2.7.1:4.1.2:2.4.2:1.5.8:6.4.1:5.1.3 +4.1.2:5.4.2:1.1.5:1.1.1:1.1.1:3.2.2:1.1.1:2.3.1:1.1.1:2.7.7:1.14.16:1.2.1 +2.5.1:2.3.1:2.8.3:1.14.13:2.7.1:2.8.3:1.1.1:1.13.11:1.1.5 +5.4.2:2.3.3:1.1.3:1.1.5:2.6.1 +5.3.1:1.14.14:1.2.1:5.3.3 +3.1.4:1.13.11:2.7.9:3.6.1:3.1.2:4.2.1:1.13.11:2.1.2 +1.5.8:4.2.1:2.6.1:2.8.3:4.2.1 +2.3.1:2.7.4:5.1.3:2.6.1:1.1.1:2.3.1:3.6.1:9.9.9:1.1.98:1.1.1 +1.1.1:1.14.14:4.1.3:1.1.5:1.1.5:2.4.2:4.2.1:6.3.4 +2.7.2:1.14.14:6.2.1:1.1.1:1.8.5:1.1.1:3.2.2:1.1.1:6.4.1 +2.6.1:1.14.12:4.2.1:2.7.1 +1.17.7:1.3.1:6.2.1:2.7.1:1.13.11:1.1.1 +5.3.1:1.13.11:5.4.2:1.2.7 +1.14.13:2.3.1:5.3.1:6.2.1:6.4.1 +4.2.1:1.1.1:5.1.3:3.1.3:2.7.7 +1.1.1:2.3.1:3.1.2 +4.2.3:2.3.3:2.6.1 +3.5.1:2.7.1:2.8.3:1.1.1 +2.7.1:2.5.1:4.2.1:2.7.7:1.2.1:1.14.14:2.1.2:1.14.16:1.14.16:1.1.5:1.14.14 +1.14.99:2.6.1:1.1.1:1.1.5:2.1.2 +1.1.1:2.7.1:2.7.1:4.4.1:1.1.1:1.13.99:4.1.2:3.7.1:1.1.1:2.3.1 +2.1.1:4.1.1:1.1.1:4.1.1:1.1.1:1.1.5 +2.3.1:2.7.1:4.4.1:1.13.11:4.1.1 +4.1.3:1.3.1:3.1.3 +2.3.1:2.7.4:1.1.1:1.4.3:4.2.1:2.7.4:1.1.1:1.17.4 +1.1.1:2.7.1:2.6.1:1.1.1 +1.3.1:2.4.2:1.1.1 +5.4.2:2.5.1:2.7.1:5.4.2:1.1.1 +9.9.9:1.1.99:4.1.1:1.1.1:3.1.1:2.7.1:4.4.1 +5.5.1:1.13.11:3.1.3:3.1.3:4.4.1:3.5.4 +1.2.5:1.3.5:1.1.1:2.8.3:4.1.1 +1.14.14:2.3.1:2.1.1:2.1.2:1.14.13 +1.17.3:4.3.1:1.7.1:2.7.4:1.1.2:1.1.1:9.9.9 +1.13.11:3.1.3:2.7.1:1.1.1:1.1.1 +2.7.7:2.7.1:1.2.7:2.6.1:2.7.1:1.1.1:3.1.2 +2.3.1:1.1.1:4.1.1:1.5.8 +1.1.2:3.1.3:1.17.1:1.1.1:4.4.1:4.2.1:1.1.2:2.4.2 +1.17.7:2.6.1:2.3.1:1.1.98:2.7.1:1.17.1 +1.2.1:9.9.9:4.2.1:2.2.1:3.1.4 +1.1.2:3.2.1:2.3.3:2.1.1:1.1.1:1.1.1:4.1.1 +2.3.3:3.1.3:2.3.1:2.1.1 +1.2.1:1.1.1:5.1.1 +2.4.1:1.1.1:2.7.1:1.1.1:2.7.7:4.1.2 +2.6.1:1.1.1:4.4.1 +1.11.1:2.5.1:5.3.3:2.7.7:5.3.3:1.1.1:1.2.7:1.13.11 +1.2.7:3.1.3:2.3.1:2.1.2 +5.4.2:2.8.3:9.9.9:1.1.1:1.13.99:4.2.1:1.1.1 +3.1.2:1.14.14:2.3.1 +4.3.3:4.1.99:5.4.99 +2.5.1:1.2.1:4.1.2:3.1.1:1.1.1:1.8.1:2.7.1 +1.3.1:6.3.2:1.2.1:1.13.11:4.1.2:3.5.4:1.3.1 +4.1.1:3.2.1:5.1.3:4.4.1:3.2.1:1.14.12 +1.1.5:3.1.2:3.1.1 +1.1.1:4.1.2:2.7.4:1.1.1:5.4.2:2.3.1:1.1.2:4.2.1:6.3.4:1.1.1 +1.13.11:3.1.5:1.1.1:3.1.4:2.3.1:1.1.5:1.1.1 +9.9.9:4.2.1:1.14.14:1.2.1 +2.3.3:1.1.1:1.1.2:2.1.1:2.7.1 +2.3.3:4.1.2:1.1.1:9.9.9:4.2.1:9.9.9:1.1.1:3.6.1 +2.7.7:4.1.1:1.13.11:2.3.1:5.3.1 +2.4.2:1.1.1:2.7.7:1.17.4:4.2.3:4.1.1 +1.17.7:1.14.19:2.7.4:2.7.2:1.1.2:2.5.1 +4.2.1:2.5.1:1.2.3:3.6.1:2.7.1:1.1.1 +2.4.2:1.1.1:1.1.1 +2.3.1:2.7.6:1.2.7:5.3.1:9.9.9:1.1.1:4.1.3:1.2.7:5.4.2:1.14.13 +1.1.1:4.3.1:5.3.1:2.1.2:5.4.2 +1.14.13:1.1.1:1.1.1:4.4.1 +1.1.5:2.3.1:1.13.11:2.6.1 +1.13.11:5.4.2:1.1.1:3.1.3 +4.4.1:4.3.2:1.13.11:4.2.1 +1.3.1:1.1.1:2.3.1:1.14.15:5.3.3:4.1.2:3.1.2 +4.4.1:4.3.1:1.8.1:3.1.3 +2.7.1:1.14.15:2.3.1:3.1.3 +5.4.2:2.7.8:3.1.1 +3.1.3:1.1.1:4.1.1 +6.4.1:2.1.1 +1.1.1:1.1.1:1.1.1:1.3.1 +1.1.1:2.8.3:4.2.3:1.1.1:1.14.14:3.1.3:5.5.1 +1.1.1:3.1.2:3.3.2:1.2.5:4.2.1:9.9.9:1.13.11 +2.3.3:5.1.2:2.7.8:2.3.1:1.14.15 +2.6.1:2.7.7:2.8.3:1.14.12:1.14.16:4.2.1:9.9.9 +2.3.1:1.14.14:1.2.1:2.1.1:4.1.2:4.1.1 +5.4.2:1.2.1:2.7.1:2.6.1:4.1.2 +1.5.8:6.4.1:3.1.1:1.2.7:1.1.1 +3.1.2:3.7.1:3.1.1 +2.8.3:4.1.1:2.7.1:1.1.1:2.6.1:2.3.3 +1.3.1:1.1.1:1.1.3:5.3.1 +2.8.1:2.7.7:1.1.5 +1.14.14:1.1.1:1.1.1:4.1.3:9.9.9:5.4.99:1.11.1 +5.3.1:1.1.2:1.14.17:2.3.1:2.3.1:1.13.11 +1.1.1:5.5.1:1.1.1:1.8.4:4.1.1:1.1.5 +3.7.1:1.13.11:9.9.9:2.2.1:2.3.3:1.1.1:4.2.1:1.2.7:9.9.9:2.7.1:1.1.1:1.1.2:1.2.4:2.6.1:2.7.7 +1.2.7:1.2.3:1.14.11 +2.4.2:6.2.1:1.1.1:5.1.1:6.2.1:3.1.3:1.1.1 +1.1.1:4.1.2:1.1.5:2.3.1:2.1.1:1.2.1:1.14.15 +1.1.1:9.9.9:5.4.2:1.13.11:1.14.15:4.1.3:1.1.5:6.3.2:6.4.1:3.1.3:1.3.7:1.1.5 +1.1.1:2.5.1:1.1.1:1.13.11:5.5.1 +1.14.13:1.1.1:1.14.18:2.7.7:4.1.2:1.1.1:9.9.9:4.2.3:1.1.1:5.4.2:1.13.11:1.1.1:4.1.1:2.3.1 +1.1.1:3.1.1:2.7.7:5.5.1 +2.5.1:2.7.7:4.4.1:1.1.1:4.1.2 +1.17.1:2.3.1:1.1.1:1.14.14:1.14.17:2.3.1:2.7.1 +3.1.3:1.2.4:1.1.1:2.3.1 +1.3.8:1.1.1:1.1.1:1.1.1:2.5.1:5.4.2:5.3.1:1.1.1 +1.1.1:1.1.1:2.1.1:2.7.1 +1.1.1:2.3.3:2.3.1:5.5.1:2.6.1:1.1.1 +1.8.99:2.1.1:1.14.11:2.7.7:1.8.3 +4.1.2:2.3.1:4.1.3:9.9.9:6.3.4:1.2.1:2.7.8:3.1.2 +1.1.1:1.17.1 +1.4.4:3.7.1:5.4.2:1.1.1:2.6.1 +1.1.1:1.1.5:3.1.3:3.6.1:1.1.1:2.6.1:1.1.2 +1.13.12:1.1.1:4.2.1 +4.1.2:4.99.1:3.5.4:1.1.1:3.1.3:1.1.1:1.1.1:2.3.1:2.1.1:4.2.1:3.1.2 +1.1.1:1.18.1:1.14.14:2.7.8 +1.1.2:2.3.1:2.7.7:2.1.1:5.3.1 +1.14.14:6.3.4:2.2.1 +4.1.2:9.9.9:1.2.7:1.8.2:3.5.1:2.6.1:1.1.1 +4.4.1:1.1.1:1.1.1:1.14.14 +1.1.1:2.7.7:2.5.1:6.2.1:5.3.1:4.1.3 +2.7.1:1.5.3:1.1.1:1.4.4 +1.14.16:1.1.1:2.1.1:5.3.1:4.4.1 +1.1.1:2.7.1:4.6.1:3.1.1:1.14.13:1.7.3:5.5.1:1.1.1 +5.3.1:4.2.1:2.1.1:1.14.14 +3.6.1:2.7.7:2.5.1:1.17.4:4.1.2:5.3.2:5.3.1 +3.6.1:1.5.8:1.1.5:1.14.15:2.7.2 +3.5.1:4.2.1:1.1.1:2.7.1:1.1.1 +2.3.1:1.1.1:1.1.1:2.7.1:1.1.2:5.4.99:3.1.4 +3.5.2:2.7.1:1.1.1:3.1.2:3.3.2:1.1.1:4.2.1 +4.3.3:6.3.5 +2.3.1:4.2.3:3.5.1:1.1.1:1.1.1:1.1.1 +1.3.1:4.1.1:1.13.11:1.13.11:9.9.9 +3.1.4:9.9.9:2.7.7:2.7.1:2.7.8 +1.2.1:2.6.1:4.2.1:1.2.5:3.1.3:3.1.3 +2.7.1:2.3.1 +1.1.1:4.3.3:2.7.2:2.6.1:1.14.16 +1.1.1:2.7.1:3.1.1:1.13.11:1.13.11 +2.5.1:1.1.1:2.6.1:5.4.99 +1.1.1:2.4.1 +1.1.1:3.7.1:6.3.2:3.1.3:2.7.1:1.14.12 +6.2.1:1.1.1:2.7.7:1.1.1 +2.1.1:4.1.1:1.1.1:2.3.1:4.2.1:1.14.13 +4.2.3:3.1.1:1.14.13 +9.9.9:2.3.1:3.2.1:1.1.1:2.6.1:1.1.1:2.1.2:2.7.8:2.7.1 +2.7.7:1.1.1 +1.1.1:1.1.1 +2.8.3:2.6.1:1.1.1:1.8.1 +9.9.9:2.6.1:5.5.1:6.4.1:2.7.7 +3.1.3:2.4.2:2.6.1 +1.1.1:2.7.7:2.6.1:2.7.1:6.4.1 +2.7.8:3.1.1:1.8.1 +1.3.8:2.3.3:1.1.1:4.4.1:1.1.1:6.2.1:1.1.98 +1.1.1:2.1.1:1.14.13:6.2.1:2.5.1:1.1.2 +6.2.1:9.9.9:2.7.1:6.3.3 +1.1.1:1.1.1:5.3.3:1.8.5:1.2.7:2.7.1 +3.1.1:5.3.1:1.1.1:2.3.1:2.7.1:2.5.1 +4.1.2:2.7.1:1.1.1:1.1.1 +5.5.1:2.2.1:6.2.1:2.7.7:1.1.1:2.6.1 +1.1.1:1.1.99:1.4.3:1.14.99:4.2.1:5.1.3:1.2.4:1.14.15 +2.7.7:4.2.1:3.1.3:1.1.5:1.17.3 +4.2.1:2.1.1:5.3.1:4.2.1:1.13.99:1.3.1:2.6.1:5.3.1 +1.1.1:1.1.1:9.9.9:1.1.1:1.18.1 +2.3.1:1.1.99:2.3.1 +1.1.1:1.1.1:5.3.1:9.9.9:2.1.1:1.1.1 +1.14.13:1.1.1:3.1.3 +1.1.1:2.7.7:1.2.4:1.14.13:3.6.1 +2.7.9:5.4.2:3.1.3:9.9.9:3.6.1:3.1.3:1.13.12:3.1.3:1.1.1 +4.2.1:1.14.13:5.4.2:2.8.3:1.1.1:2.7.1 +1.5.8:4.2.1:3.6.1:1.5.1:1.3.1 +5.3.1:2.7.4:1.1.1:1.14.13:2.7.1:1.14.12:4.1.1:2.6.1:1.3.5 +3.1.4:2.6.1:1.1.3:1.1.1:2.7.7:1.1.1:6.4.1:1.2.1:5.1.3:1.13.11:1.1.1 +1.1.1:1.1.2:1.1.1:4.2.1:1.1.1 +2.6.1:2.7.4:2.1.1:2.7.9:1.1.1 +3.1.2:1.1.1:1.1.1:1.13.11:4.1.2:3.1.3 +3.5.1:2.2.1:4.1.2:9.9.9:2.7.1:3.1.3:5.2.1:1.1.1 +3.1.3:2.6.1:2.7.1 +2.4.2:1.13.11:3.1.6:1.1.1 +2.7.1:1.1.1:3.1.3:6.2.1:1.1.2:3.1.1 +1.14.15:3.1.3:2.8.3:1.2.4:1.1.2 +1.13.11:2.3.1:2.5.1:2.7.1:5.3.1 +3.1.1:2.7.1:9.9.9:9.9.9 +1.1.1:4.1.1:5.3.2:1.2.1:4.2.1:1.1.1:2.5.1:2.3.1 +4.1.2:4.1.2 +1.1.1:1.1.1:1.13.11:1.14.13:2.2.1:2.7.7 +2.7.1:1.1.2:9.9.9 +1.14.12:6.3.3:2.7.7:4.1.1:3.1.3:3.5.1 +4.4.1:1.14.14:6.2.1:1.2.1:2.1.1:5.4.2:3.5.4:1.2.1:2.7.9 +2.1.1:2.7.2:2.7.7:1.13.99:2.3.1:2.7.7:1.17.3 +1.13.11:4.3.1:9.9.9:1.1.1:5.3.3:1.1.1:5.4.99:4.2.1:1.1.1:4.1.2 +2.3.1:3.1.1:1.1.1:1.1.1 +2.8.1:1.14.14:2.1.1:1.1.1:2.8.3 +4.4.1:3.1.3:2.7.1 +3.1.2:3.5.1:1.1.1:1.13.11 +1.3.1:9.9.9:1.1.1:2.7.2 +1.1.5:1.14.14 +1.17.1:1.8.1:2.8.1:4.1.2:1.2.1:1.1.5 +1.1.1:1.2.1:1.1.1:2.7.1:4.3.1:1.2.4 +3.1.3:1.1.1:1.1.1:4.1.2:1.13.11:2.3.3:1.1.1:4.2.1:2.5.1:2.7.2:2.7.4:1.2.7:2.6.1:1.1.1 +2.8.3:1.2.1:1.14.14:2.7.1 +2.1.1:1.2.7:2.7.7:4.1.1:4.3.1:2.6.1 +5.3.2:2.7.1:2.1.2:3.1.1:1.2.1:4.2.1 +2.3.3:1.1.1:1.14.12 +2.7.4:2.7.4:6.2.1 +1.2.4:2.3.1:2.6.1:2.7.7:1.3.1:5.4.99:1.1.1:6.3.2 +5.4.2:4.2.1:2.3.1 +2.7.7:9.9.9:2.7.7:3.1.3:1.5.1 +1.14.15:1.2.1:1.1.1:2.3.1:1.2.7:5.3.1:2.7.7:2.7.1 +2.3.1:1.14.14:3.1.3:4.2.1:2.6.1:2.7.4:4.2.1:2.1.1:5.5.1 +4.4.1:4.2.1:5.1.2:3.1.3:1.1.1:2.2.1 +5.4.2:4.2.1:5.4.99 +3.1.1:1.1.1:2.2.1:1.14.14:1.1.1:1.2.4:3.1.3:1.1.1:3.1.1:1.14.18:5.1.3:4.4.1:1.2.1:1.1.1 +1.3.1:1.1.1:2.7.7 +3.1.1:2.3.1:1.1.5:4.1.3:2.3.1 +1.2.1:2.7.1:2.7.2:2.3.1:4.3.1:1.1.1:1.1.1:1.14.16:9.9.9:1.5.8:1.14.13:2.3.1 +2.3.1:2.7.4:1.1.2:1.14.14:2.3.1:4.1.2 +1.13.99:2.3.3:2.3.1:1.1.1 +3.6.1:1.2.1:2.8.3:1.13.11:2.3.1:2.3.1:1.1.1:3.6.1:3.1.3:2.7.1 +3.3.1:1.1.98 +4.4.1:2.7.4:1.1.1:1.17.1:5.3.1:1.17.1:9.9.9 +4.1.1:2.8.3:2.7.1 +1.1.1:2.3.1:3.6.1:2.2.1:4.2.3:3.1.3:6.2.1 +1.13.11:1.1.1:1.2.1:2.3.3:1.14.14:1.1.1 +1.5.8:4.2.1:3.5.2:1.5.8:4.3.1:1.18.1:1.13.11 +4.1.2:1.1.1:1.1.1:3.1.1 +2.7.1:1.1.1:1.1.1:2.3.1:3.1.3 +2.7.1:4.4.1:5.4.2:1.1.2:3.5.2:1.1.1:5.3.1 +4.1.1:2.6.1:2.7.6:1.1.1:2.7.1:2.3.1:1.13.11:2.6.1 +4.2.1:1.1.2:1.1.1:2.3.1 +2.2.1:1.2.1:1.14.13 +1.1.1:5.4.2:5.1.3:1.1.1 +3.1.2:1.2.7:1.1.1:2.7.7:1.14.14:2.5.1 +1.2.1:2.6.1:4.2.3:2.6.1:1.2.1:1.17.4:6.4.1:5.1.99:1.1.1:2.7.1 +1.17.4:1.14.99:1.14.14 +1.1.1:1.1.99:1.1.1:3.1.1 +2.7.7:1.1.1:3.1.3 +2.1.1:1.14.15:1.1.5 +4.1.1:2.7.2:1.14.11:3.5.1 +2.5.1:2.7.2:1.2.7:2.3.1 +2.6.1:2.7.8:4.1.3:1.14.15:2.7.4 +1.1.1:3.1.3:1.13.11 +2.4.2:4.1.99:4.4.1:3.1.6:1.1.1:6.2.1 +9.9.9:2.1.1:5.4.2:4.3.1 +1.1.1:2.7.1:1.4.3:1.1.3 +5.4.99:2.3.1:1.1.1:1.1.1:4.2.1:4.1.3:1.13.11:1.14.11:1.1.1 +2.8.3:6.2.1:5.4.2:1.2.1:2.3.1:1.1.99:3.5.99:1.1.1:1.1.1 +1.17.3:2.3.3:6.2.1:2.4.2:1.1.3 +2.7.1:5.3.3:1.14.14:2.3.1:2.3.1 +1.4.3:1.8.4:6.2.1:2.1.2:1.14.15:1.1.1:1.1.1 +2.7.1:5.3.1:4.1.3:4.1.2 +3.1.1:1.1.1:1.2.1:1.14.15:2.7.8:4.2.1:2.7.7 +3.6.1:5.5.1:1.1.1:1.3.1:3.1.3:2.3.1 +2.6.1:5.3.3:5.4.2:5.4.2 +5.3.3:2.6.1:1.14.19:2.3.3:4.4.1:1.1.1:2.3.1 +6.3.2:5.3.3 +1.1.1:2.5.1:2.7.1:2.7.8 +5.3.3:5.3.1:1.2.1:2.7.1:4.3.1:2.3.1:1.1.3:3.1.3 +2.3.1:2.3.1:1.2.1:2.7.1:4.1.1:3.1.1:4.1.2 +2.3.1:1.2.4:2.7.2:2.7.7:2.3.1:2.3.1:1.3.7 +2.7.7:2.4.2:1.5.1 +1.1.98:1.1.1:2.7.1:1.1.1:2.3.1:1.1.1 +1.12.99:3.5.1:1.1.1:1.1.1 +1.5.8:1.1.1:1.1.1:1.1.1 +1.1.1:3.5.1:3.5.4:1.1.1 +3.1.1:4.2.1:2.8.2:2.7.1:9.9.9:2.1.4 +2.3.1:2.7.7:1.1.1:2.7.7:1.1.1:4.1.3:1.8.1 +5.3.1:2.6.1 +2.1.1:2.7.4:1.3.8:4.2.3 +2.3.3:6.3.2:2.7.7 +6.2.1:6.2.1:1.17.4:1.2.1:4.3.1 +4.1.1:1.14.13:4.1.1:1.14.14:1.14.13:2.7.1:3.1.2 +2.7.1:1.1.1:1.8.1:1.1.1 +3.1.2:3.1.1:3.2.1:1.1.1:3.1.1:1.14.15:2.3.1:4.1.3:2.1.1 +1.1.1:6.2.1:1.13.11:4.2.3:1.3.1 +1.1.1:3.6.1:1.14.15:3.5.4 +5.3.1:5.4.2:4.4.1:2.7.1 +5.3.1:1.1.1:2.6.1:6.2.1:5.3.1:2.4.1:1.1.1:1.13.99 +3.5.3:2.7.8:5.1.2:2.3.1:3.1.3:1.1.1:2.7.1:4.2.1:1.1.2:1.1.1:3.6.1:3.6.1:1.2.1 +2.7.7:1.3.1:1.2.1:1.1.1:1.14.15:4.6.1 +2.6.1:3.5.1 +1.1.1:2.3.1:2.7.7 +2.5.1:2.3.1:4.2.1:2.5.1 +9.9.9:2.6.1:4.1.2:1.14.14 +5.3.1:2.3.1:1.17.4:1.14.13:2.4.1:4.1.1 +5.3.1:1.14.14:1.2.1 +3.1.2:1.5.8:2.3.1:1.1.2:1.2.7:4.2.3 +1.2.1:1.2.1:4.3.1 +1.1.1:1.2.1:1.1.1:1.1.1:2.8.3:3.1.3 +2.7.1:4.4.1 +9.9.9:2.7.1:2.3.1:4.1.1:4.1.1:2.4.1 +1.17.4:1.4.1:2.3.1:1.3.8 +1.1.3:2.3.1:3.6.1:4.4.1:3.5.1:2.5.1 +1.17.3:2.3.1:1.13.11:2.7.2 +4.2.1:1.3.5:1.1.1:2.2.1:1.1.5:4.2.1:2.3.1 +1.13.99:1.14.14:1.1.1:1.13.11:3.5.4 +2.5.1:4.4.1:1.1.1:1.1.1:1.1.1:5.3.1 +1.1.1:2.3.3:2.1.1:2.3.1 +1.8.1:9.9.9:1.8.98:1.1.1:3.1.5:4.4.1 +1.3.8:1.2.1:9.9.9 +2.7.1:1.1.2:2.5.1 +3.1.1:2.3.1:3.1.3 +1.1.99:2.7.4:2.1.1:2.3.1:1.1.3:2.7.7:1.1.1:4.1.2:2.7.1:4.2.1 +4.1.2:5.3.1:3.1.3:6.2.1:3.1.3:5.4.2:3.2.1:5.5.1 +1.1.1:1.1.1:6.3.5:4.4.1:1.2.7:5.3.2 +1.14.15:2.6.1:2.3.3:3.6.1 +3.1.3:2.7.1:1.1.1 +1.1.1:1.1.1 +3.1.3:2.7.1:1.2.1:1.13.11:2.5.1:2.1.1:5.4.99:3.5.4 +2.7.7:1.1.1:2.3.1 +3.1.1:1.13.11:1.2.1:5.3.1:1.1.1 +2.6.1:4.4.1:1.2.1:2.2.1:2.7.1:5.4.2:2.7.4:2.1.1 +5.4.2:3.1.3:1.1.1:6.3.2:3.1.2:1.3.1:1.14.13:1.1.5 +1.13.11:2.7.2:2.7.4:1.1.1:1.1.1:1.1.1:1.17.99:2.7.1:4.2.1:1.14.14 +1.14.16:4.1.2:1.14.11:9.9.9:3.1.3:2.7.4:4.1.2 +3.7.1:4.1.1:3.1.1:4.1.1 +5.1.99:3.5.2:6.3.2:2.7.1:1.2.1:4.2.3:3.1.3:1.1.98:6.3.5 +1.14.13:2.3.1:2.1.3:2.7.4:1.1.5 +3.1.2:9.9.9:4.2.1:3.1.1 +1.1.3:1.13.11:2.7.1:2.7.1:2.8.3 +2.7.1:1.8.1:2.3.3:5.4.2:1.1.5:4.2.1:1.8.7:1.1.1:2.3.1:3.5.3 +2.7.1:4.4.1:1.1.2:5.4.2:3.2.1:5.4.99 +2.7.7:6.4.1:1.8.1:1.14.16:1.8.1:1.1.1:1.13.99:1.13.11 +4.2.1:1.2.1:1.1.1:3.5.4:2.3.1:4.1.1 +4.3.1:4.1.3:1.1.1 +5.4.2:2.7.1:1.1.5:1.17.4:1.11.1:2.8.3:2.3.1:1.1.1:1.1.1 +5.5.1:3.1.4:4.2.1:1.1.1:1.1.5:1.14.19:1.14.15:5.3.1:1.1.1 +9.9.9:2.2.1:9.9.9 +1.14.16:1.2.1:1.14.13 +2.7.1:2.5.1:2.3.1:2.7.1 +1.13.11:2.7.7:1.14.14:4.2.1 +1.14.13:1.18.1:1.1.1 +4.2.1:4.2.1:1.1.1:3.6.1:4.2.3:1.1.5:4.3.1:4.2.1:1.3.3 +2.8.3:1.2.4:3.1.2:3.5.99:1.14.16 +1.8.1:4.4.1:4.4.1:1.1.5:9.9.9:2.3.3 +4.2.1:5.3.1:2.7.1:3.5.4:1.1.98 +4.2.1:6.3.5:2.3.1:1.1.99:1.1.1 +3.1.2:2.4.1:1.14.19:1.1.1:2.6.1:4.4.1:4.1.2 +3.1.3:1.1.1:6.3.4 +9.9.9:2.3.1:1.14.15:4.4.1:5.3.1:1.1.1:1.1.1:1.2.1 +2.7.1:2.3.1:2.3.1:2.4.2:2.7.7:1.1.1:4.1.3:3.1.3:2.7.1 +2.7.1:5.3.3:1.1.1:2.7.7:1.1.98 +1.13.99:1.1.1:3.1.3:9.9.9:6.2.1 +1.1.2:2.5.1:1.1.98 +4.1.3:4.1.3:2.7.8:1.2.4:5.4.2:1.1.1 +3.1.3:1.1.1:1.1.98:1.13.99:1.1.1:1.1.5:1.14.12:2.4.1:1.2.7:1.1.1 +2.7.7:2.8.3:5.5.1:1.1.1:1.1.1:1.1.1:4.3.1 +2.3.3:1.5.1:2.6.1:1.11.1:1.1.1:1.1.1 +1.8.7:2.1.2:2.3.3:4.1.1:4.3.1:1.1.1 +3.1.3:4.1.1:5.4.2:2.6.1:1.2.1:1.2.4 +5.3.2:6.2.1:3.5.4:1.1.3:1.1.1:6.2.1 +1.1.2:1.14.14:4.3.1:4.1.2:2.7.1:3.1.2 +4.3.1:2.6.1 +9.9.9:2.3.1:2.5.1:1.14.13:2.7.4 +1.1.1:1.2.1 +2.3.1:1.1.1:1.1.1:1.1.1:2.3.1:1.5.8 +2.3.1:3.1.4:1.1.1 +1.1.1:6.4.1:4.1.3:1.3.1:9.9.9:1.14.14:2.3.1 +2.1.1:2.8.3:1.14.13 +1.3.8:6.3.2:1.14.14:2.5.1 +1.1.1:1.2.5:3.1.2:1.14.18:1.13.11:4.1.1:2.7.1:1.1.1:1.13.11:1.1.1 +1.1.1:5.1.99:1.11.1:1.13.11 +2.6.1:2.3.1 +1.14.14:1.14.13:1.14.15:2.5.1 +2.3.3:1.14.14:1.1.1:1.14.13:1.14.14:1.2.1:1.1.1:5.4.2:4.2.1:2.3.3 +1.13.11:3.1.7:3.6.1:3.1.3:2.3.1:2.7.1 +1.1.1:2.3.1:4.4.1:2.7.2:1.13.11 +1.1.1:5.3.1:1.1.1:1.1.1:1.3.5 +1.14.13:4.2.3:4.1.1:1.2.7:1.13.11 +1.1.1:5.4.2:2.5.1:1.18.1:4.4.1:2.8.3:2.7.1:2.4.2:2.1.1 +4.1.3:2.3.1:2.6.1 +2.7.7:3.6.1:1.2.1:4.2.1 +9.9.9:9.9.9:1.1.1:1.1.1:5.4.2:3.6.1:2.7.1 +5.3.1:4.1.1:2.7.8:3.1.1:1.13.11 +2.7.1:6.4.1:2.3.3:9.9.9:3.5.1:4.4.1:1.1.1:1.8.4:1.2.1:1.1.1:4.6.1:2.7.8 +2.3.1:4.1.1:2.3.3:1.4.3:2.3.1:1.2.4:2.7.8:4.1.1:2.3.1:1.14.14:6.2.1 +3.5.1:1.2.1:6.2.1:3.1.2:1.4.9:2.7.4:4.2.1 +6.4.1:4.3.2:2.6.1 +2.3.3:1.1.1:3.1.1:2.6.1:4.3.1:1.2.5 +1.5.1:1.4.4:4.3.1:2.5.1:4.1.3:4.2.1:2.7.1:1.1.1:5.1.3:1.2.1 +2.1.1:3.1.1:1.14.14:9.9.9 +2.7.3:1.1.1:1.13.11:2.6.1:2.7.7:1.1.2 +1.2.5:1.1.1:1.1.1:1.2.5:2.7.8:3.1.2 +2.7.7:1.1.1:2.1.1:2.7.1:4.1.2:4.1.3 +1.3.8:4.1.3:3.1.2:4.2.1 +1.2.1:4.2.1:2.7.1:1.1.1:1.1.1 +2.7.7:1.1.99:1.8.1:2.7.1:5.3.1 +2.7.9:2.3.1:2.1.1:2.7.1:5.1.3:2.1.1 +2.1.2:1.1.1:3.5.3:1.2.7:1.1.1:1.1.1 +4.1.1:1.1.5:1.1.1:1.2.1:5.3.1:2.2.1 +1.8.1:1.8.4:2.5.1:1.1.1:1.14.14 +4.1.1:2.6.1:2.7.1:1.1.1:5.1.99:1.1.1 +4.1.1:1.1.1:2.4.2:2.7.1 +1.3.8:4.3.1:1.18.1:1.1.1:3.5.4:2.3.1:1.14.14 +2.2.1:2.7.7:3.6.1:1.14.11:4.4.1:1.5.8 +4.2.1:3.6.1:6.2.1:1.2.4:6.3.4:1.2.1 +3.1.3:1.2.1:1.14.16:2.3.1:2.6.1 +1.1.1:5.5.1:1.3.1:3.6.1 +1.1.1:1.17.1:4.1.1:1.1.1:4.2.1:1.1.1 +1.1.1:6.2.1:1.1.3:1.2.1 +2.7.7:1.17.1:1.2.7:4.1.3:1.1.2 +1.5.3:3.1.3:1.14.14:2.5.1:2.8.2:2.1.1 +2.7.9:1.2.5:2.6.1:4.3.1:2.3.1:2.5.1:4.1.1 +4.1.2:1.2.7:2.7.4:1.2.7:1.2.1 +1.1.1:1.1.1:1.2.7:2.7.4:1.14.18 +2.7.1:1.1.1:1.17.3:3.6.1 +1.1.1:1.2.1:1.1.1:2.6.1:2.3.1:1.14.14 +1.13.11:1.1.1:4.2.1:4.2.1:1.14.14:4.1.2:2.7.1:1.2.1 +2.4.1:9.9.9:2.7.1:2.8.3:2.1.1 +1.1.1:1.13.11 +4.2.3:1.1.1:1.1.1:9.9.9 +5.3.2:1.1.1 +9.9.9:6.2.1:5.3.1:1.13.11 +1.1.1:1.2.4:5.3.3:1.14.15:1.1.1:4.6.1 +1.14.19:2.3.1:9.9.9:3.7.1:2.3.1:2.2.1 +1.1.1:3.7.1:2.1.1:2.3.3:2.7.7:4.2.3:2.7.7 +1.1.1:9.9.9:1.1.1:2.6.1:1.17.1:3.1.3 +1.2.3:4.2.1:1.1.1 +4.4.1:6.2.1:2.7.1:1.14.15:1.1.1:2.1.3 +1.1.1:1.8.3:1.13.12:4.2.1:2.3.1:2.7.7:3.1.1:2.3.3 +1.17.99:5.3.3:2.7.1:4.1.2 +1.2.4:1.1.1:1.2.1:5.3.1:1.1.1 +1.14.14:2.7.9 +3.5.2:1.1.1:9.9.9:4.1.1:1.1.1:5.3.3 +4.3.1:1.3.5:5.4.99:5.4.2:1.1.1:6.3.5:3.1.3:2.4.2:5.5.1:3.1.3 +6.4.1:1.1.2:2.1.1 +2.3.1:1.1.1:3.5.4:6.3.2:4.2.3:2.3.1 +1.13.11:4.2.1:2.7.1:3.1.3:1.3.8:9.9.9:1.1.5:2.8.3:1.1.5:2.7.7:1.14.18:1.1.1 +4.2.1:3.1.3:1.1.2 +2.3.1:2.7.1:1.2.1:1.1.1:1.2.7:5.4.2:3.1.3 +2.3.1:1.2.1:3.1.1:4.2.1:1.1.1:3.1.3:2.1.2:6.3.4 +2.7.7:2.5.1:1.10.3:9.9.9 +2.8.3:1.8.4:1.2.5 +1.1.5:2.1.2 +4.2.1:3.6.1:2.3.1:1.1.1:1.1.1:1.2.4:5.3.1 +2.3.3:1.1.1:1.8.1:3.1.1:6.2.1:3.1.2 +3.5.4:2.7.1:2.3.1:2.7.1:1.1.1:1.1.1:1.14.14:1.1.1 +1.1.1:1.1.1:2.2.1:1.13.11 +2.8.3:2.2.1:6.2.1:1.1.1:1.1.1:1.14.18 +4.3.2:1.1.1:1.17.4:5.5.1 +3.1.2:9.9.9:3.1.1:5.5.1:9.9.9:1.13.11:1.2.7:6.2.1:2.3.1 +5.1.3:1.1.1:4.2.1:2.1.2:2.3.1:1.1.1:2.1.2:1.11.1:3.5.1:1.2.7:1.1.2:1.1.1:1.1.1:4.1.2 +3.5.4:1.1.1:4.1.99:5.4.2:2.3.1:2.7.7:2.7.1:1.13.99:1.14.16 +4.1.2:1.1.3:2.7.1:1.5.8:2.8.3:3.6.1 +1.17.1:1.1.98:2.3.3:4.1.3:2.7.2:1.5.1:1.2.1:4.2.1:6.2.1:1.2.1:3.1.3:2.3.1 +2.7.1:2.7.6:1.1.1:1.2.1:2.7.1:1.1.2 +4.2.1:6.4.1:3.5.4:1.14.14:6.4.1:1.2.7 +3.6.1:2.7.1:5.3.1:3.1.1:1.13.11:4.2.1 +2.8.3:1.1.1:3.7.1:1.1.1 +2.5.1:4.2.1:2.7.1:2.7.7:1.2.7:4.2.1 +1.8.1:1.1.3 +2.7.1:2.6.1 +1.1.2:1.13.11:1.14.11:4.2.3:2.7.7:1.1.1 +3.1.1:2.3.1:1.14.12:1.2.1:1.1.1:1.14.13:5.3.3 +1.1.1:4.2.3:1.1.1:2.3.1:5.3.1:2.3.1 +2.7.7:2.7.9:2.7.1 +2.3.3:4.2.3:2.6.1:2.7.1:2.7.1 +6.4.1:1.1.1:2.8.3:3.1.1:2.1.1:1.4.3:1.1.1 +4.1.2:1.1.1:4.1.2:1.14.11:4.3.1:1.1.1:1.13.11:1.2.1 +5.3.1:1.1.1:5.5.1:1.1.1:1.1.1:1.4.5 +4.2.1:2.1.2:5.4.2:1.5.1:1.2.1 +4.1.3:1.14.18:2.1.2:1.14.99:2.7.1:1.1.1:4.1.1 +2.3.1:2.4.2:5.3.1:2.7.1:2.3.3 +1.14.19:4.4.1:2.1.2:2.8.3:1.1.1 +1.14.13:2.3.1:2.7.1:2.8.3:2.3.1:2.6.1:1.1.1 +1.14.18:2.4.1:1.1.2:2.7.1:1.1.2:2.6.1:4.2.1 +1.2.7:5.4.2:1.1.1:2.7.7:1.14.13:2.7.6:4.1.1:1.3.1:3.1.3 +1.1.1:1.5.8:1.1.2:1.13.11 +1.2.4:1.3.1:2.2.1 +1.13.11:2.3.1:1.17.1:1.2.7:4.1.1:2.3.1:2.7.1 +5.3.3:1.1.1:3.1.2:1.5.1:2.7.7:1.1.1:2.5.1:4.1.1:1.3.1 +4.1.2:2.7.4:1.5.8:2.6.1:6.3.2:1.1.1:5.3.1:4.2.3 +2.3.1:2.5.1:1.3.1:2.7.1:1.14.14:4.4.1:4.2.1:1.1.1:2.1.2:5.1.3 +2.7.7:3.4.11:1.1.3:1.1.1:1.1.1:2.3.1 +2.7.1:2.7.7:2.1.1:1.14.11:1.13.11:5.3.1:1.14.14 +1.1.1:9.9.9:2.3.1:6.3.2 +3.2.1:1.17.99:2.7.1:6.2.1:1.14.15:1.1.1:4.1.3:2.3.1:1.1.1:1.1.1:2.6.1:2.8.3:4.1.1 +1.2.7:4.2.3:5.3.99:5.3.99 +3.1.3:1.14.14:1.8.1:5.4.2:1.2.1:5.4.99:2.2.1 +9.9.9:1.1.1:1.17.4:3.6.1:1.1.1 +2.3.1:3.5.1:1.1.1:1.1.1:3.5.4 +1.1.99:3.1.4:1.14.15:1.3.1:1.14.15:1.11.1 +4.1.3:2.6.1:4.2.1:9.9.9:1.13.99 +4.4.1:1.1.5:4.3.1:3.5.1:1.1.5:1.14.14:1.1.1:4.2.1:1.2.7 +1.1.1:1.13.11:1.1.1:1.1.1:2.3.3:3.1.2 +4.2.3:2.2.1:1.4.3:4.2.1:4.1.2:6.4.1:5.5.1:1.1.1:1.3.1 +2.7.1:1.8.4:1.14.14:1.1.1:2.3.1 +2.4.2:6.4.1:1.17.4:1.1.1:1.13.11:9.9.9 +2.7.2:1.14.13:2.7.1:1.1.1:2.7.1:1.1.99:4.2.1 +1.1.1:1.17.1:9.9.9:2.7.1 +9.9.9:1.13.11:1.5.1:6.2.1:1.1.1:1.1.1 +1.1.1:2.3.3:1.1.1:1.3.8:1.1.1:4.2.1 +2.5.1:4.1.2:4.2.1:4.2.1:1.14.13:5.5.1:4.2.1:2.3.1:6.3.2:1.11.1:1.8.99 +1.17.99:2.6.1:2.7.4:2.3.1:2.7.4:1.2.1 +2.3.1:1.2.3:9.9.9:1.1.1:1.13.11:4.1.2:1.13.11:2.7.1:4.2.1 +1.3.5:2.7.1:1.14.14:1.2.1:4.1.1:3.1.3:1.1.1:2.3.1:1.13.11:4.2.3:6.2.1 +1.14.14:9.9.9:3.1.3:1.1.1:1.1.1 +1.14.14:3.1.1:1.1.1:2.6.1 +5.4.99:1.1.1:4.2.1:1.14.13:2.7.1:1.1.1 +1.3.8:3.1.2:4.4.1:3.6.1 +2.7.7:2.7.1:1.1.98:1.3.8 +1.2.4:2.8.3:1.1.1:4.4.1:2.7.2:2.8.3:1.1.1 +4.2.1:4.2.1 +1.1.1:2.7.7:1.1.1 +1.1.1:2.5.1:2.7.2:5.3.3:1.2.1:2.6.1 +2.8.3:1.1.1:4.2.3:2.1.1:2.1.1:4.3.1:2.1.1 +1.1.1:1.1.1:2.5.1:3.5.1 +5.4.2:2.3.1:2.7.1 +1.8.4:4.1.2:4.1.2:1.14.14 +6.4.1:1.1.1:3.1.1 +4.4.1:2.3.1:2.1.2:5.3.1:3.5.1:4.2.3:3.2.1:1.13.11 +2.8.3:1.14.14:3.1.2:1.13.11:1.1.2:1.1.1:1.14.14 +1.1.1:4.2.1:1.2.7:2.8.3:9.9.9 +2.7.1:5.1.3:2.7.7 +4.2.3:2.7.7:1.14.14:2.7.2:5.3.1 +4.4.1:2.7.9:1.17.1:5.4.2:1.1.1:1.2.1:1.1.2:5.4.99 +3.5.1:1.1.1:2.7.1:4.2.1:2.6.1:2.2.1 +1.14.13:1.1.1:3.1.3:1.4.3 +4.4.1:2.8.3:4.1.1:1.2.7 +6.4.1:3.5.4:5.5.1 +2.1.4:4.1.1:4.2.1:3.1.2:4.2.1:1.1.1:1.1.1:1.2.1 +1.14.14:9.9.9:4.1.3:1.1.1:2.3.1:4.3.1 +1.8.1:3.6.1:3.7.1:1.1.1:2.3.1 +2.7.7:3.5.4:4.4.1:2.4.2 +1.1.1:4.4.1:2.8.3:1.5.8:2.5.1 +2.6.1:4.1.2:1.8.4:5.4.2 +3.1.3:1.1.3:1.1.1 +1.3.1:6.2.1:4.1.2:5.4.2:1.1.1:2.1.1 +4.4.1:1.14.13:3.5.3:4.4.1:5.1.3:2.3.1 +3.3.2:2.7.7:2.1.1:1.18.1:5.3.1:1.2.1:4.2.1:1.1.1:2.7.7:1.14.15 +3.1.1:4.2.1:1.14.14:1.14.14 +2.3.1:1.8.1:5.4.2 +6.2.1:1.2.7:2.8.3:1.14.13:1.1.1:1.2.1:1.14.13:1.2.7:3.1.3:2.3.3 +1.1.1:1.8.1:9.9.9 +1.1.98:1.1.1:5.3.3:3.1.1:1.1.1:2.1.1:2.3.1 +5.3.2:2.3.3:4.2.1:2.5.1 +1.1.1:1.1.1:4.2.1:6.2.1:1.1.1 +1.1.1:1.1.1:2.3.1:1.1.1:9.9.9:6.2.1:1.1.3 +2.7.1:1.14.15:3.1.3:6.2.1:4.1.2:1.3.5 +1.1.1:4.2.1:1.14.11:1.2.4:2.6.1:2.7.1 +4.2.1:9.9.9:1.2.1 +2.3.1:1.1.1:4.1.1 +2.7.2:2.8.3:1.1.1:2.8.3:2.7.1:2.7.1:1.13.11 +4.1.3:4.1.1:1.4.4:4.3.2:2.3.1:4.1.1 +1.1.1:2.1.1:9.9.9:1.1.2:2.3.1:4.4.1:1.5.8 +5.3.1:5.4.99:1.1.2:5.3.3 +1.1.1:1.14.13:3.1.1:1.1.1:3.1.1:1.14.16:6.4.1 +1.1.1:2.8.3:1.2.4:3.7.1 +6.4.1:4.2.1:4.2.1:4.1.1 +1.13.11:2.7.9:1.14.14:4.1.2:2.6.1:3.1.4 +2.1.1:3.7.1:2.7.7:1.1.2:1.14.14:2.6.1:1.1.1 +2.7.1:2.6.1:4.4.1:3.5.1:3.1.2:5.5.1:1.2.7:1.2.1 +6.3.5:2.3.1:1.2.7:4.1.2:1.1.3:6.3.2:2.3.1:1.13.12 +5.1.3:1.1.1:3.5.1:2.7.7 +1.1.1:2.7.6:1.3.8:2.1.1:1.2.7 +4.2.1:1.1.2:2.7.8:2.1.1:1.14.13:3.5.4:2.7.7 +1.1.1:1.2.1:2.3.1:4.1.2:4.2.1 +1.13.11:2.1.1:5.1.3:2.3.1:2.3.1:1.1.1:2.3.1:1.1.1 +1.2.5:5.1.3:4.1.3:1.1.1:2.7.1:5.1.2:1.5.3:1.1.2 +2.5.1:2.7.8:3.1.3 +1.1.1:3.1.1:3.5.1:4.2.1:5.5.1 +2.7.1:2.3.3:1.13.11:2.7.7:1.2.1 +6.2.1:1.2.3 +6.2.1:1.2.7:1.2.1:6.2.1 +2.1.1:1.4.3:2.7.7:6.3.5:2.7.7 +2.3.1:1.2.4:4.1.1:5.4.2:1.14.14:2.5.1 +1.14.13:1.18.1:1.2.1 +2.1.2:4.2.1:1.1.1:4.1.2:2.3.3:1.1.1 +2.7.9:5.4.2:2.7.1:3.1.1:6.4.1:1.13.11 +1.13.11:4.2.1:2.7.1:1.1.1:1.14.14 +2.7.1:1.1.1:2.3.1:1.1.1:1.1.1:2.3.1:2.1.2:2.7.4:1.1.5 +6.3.4:1.13.11:4.2.3:1.1.1:1.1.1:5.3.1:1.1.5:5.3.1:1.3.1:1.13.11 +1.1.1:2.7.1:2.8.3:1.13.12:4.2.1:2.7.9:2.1.1:6.4.1:2.7.1:2.6.1 +1.1.1:1.13.11:1.13.11:1.2.5:2.3.1 +3.1.2:1.1.1:1.2.4 +1.1.98:5.1.99:2.7.1:2.6.1:2.2.1:1.14.14 +2.6.1:1.14.19:4.6.1:6.2.1:1.2.7:4.4.1 +1.2.7:1.14.13:1.13.11:1.1.1:5.1.2:1.1.1:5.4.2:2.1.1 +1.1.2:3.1.2:1.1.1:2.6.1:2.6.1:4.4.1:2.7.1:2.1.1 +3.5.4:1.1.5:1.1.5:2.7.7 +1.13.11:3.1.1:4.2.1:1.1.1:3.1.3:1.1.1:2.7.1 +1.11.1:1.14.14:3.1.1:2.3.3:1.1.1:2.6.1:1.14.14:3.1.1 +1.1.5:1.14.11:1.18.1:5.4.2:1.1.1:6.2.1 +5.4.2:1.14.14:2.7.1:1.1.1:1.14.13 +4.1.2:2.7.9:2.7.4 +1.1.1:3.1.3:1.1.1:2.7.1:3.1.3:1.2.1:1.11.1:2.3.1:1.1.1:2.7.7:2.4.2 +1.1.2:2.7.1:3.7.1 +1.1.5:1.1.1:4.2.1:1.1.1:4.2.1:1.14.13:1.13.12 +6.2.1:1.1.1:3.7.1:5.3.3:2.7.1 +2.7.1:4.3.2:1.1.1:2.7.7 +1.8.1:2.7.7:5.3.99:1.1.1:4.1.2:2.6.1 +5.1.2:2.3.1:2.3.1:2.7.1 +2.7.1:1.13.11:2.1.1:1.2.7:3.7.1:2.1.4:1.17.4:1.1.2 +2.3.3:4.2.1:1.1.1:1.5.8:2.8.3:1.14.14:3.6.1:2.7.8:3.6.1:2.4.2:1.14.13:3.5.1:1.1.2:1.1.1:4.1.2 +3.1.3:1.2.1:4.2.1:1.13.11:3.1.2:1.1.2 +5.3.3:1.1.1:6.2.1:2.7.1 +5.1.3:1.3.5:3.6.1:4.1.1:1.1.1:2.7.4 +3.6.1:1.1.1:1.1.1:2.6.1 +2.5.1:2.5.1:2.4.2:1.1.1:1.3.8:1.1.1:2.1.4:5.4.99 +1.14.14:2.7.8:1.5.8:1.1.5:1.1.1 +4.1.2:4.3.1 +1.14.15:3.1.3:1.1.1:2.8.2:2.7.1:1.14.11 +2.3.1:1.2.1:2.6.1:2.7.7:1.1.1:1.1.1:2.2.1:2.7.7 +6.4.1:6.2.1:4.1.2:2.1.1:1.1.1:1.1.1 +5.3.3:3.6.1:1.2.4:1.1.1:2.3.1 +3.5.3:1.2.1:3.5.4:3.1.3:2.3.1:5.5.1:1.1.1 +1.2.4:2.3.1:3.6.1:1.1.1:1.14.17:1.1.1:2.8.3 +3.6.1:1.14.11:2.3.1:5.3.1 +1.1.1:3.1.2:2.7.1:1.5.8:1.17.4:1.13.11:2.1.1 +3.1.3:2.7.1:2.4.2:1.1.1:3.1.3:4.2.1:6.2.1 +6.2.1:1.2.4:1.2.5 +6.4.1:2.8.1:1.13.11:9.9.9:4.2.1 +5.3.1:1.14.15:2.6.1:1.1.1 +2.6.1:2.7.4:6.2.1:4.1.1:4.2.1:1.1.2 +5.3.1:1.17.1:1.1.2:1.1.1:2.7.1:1.14.14 +3.5.4:5.1.3:1.2.1:1.14.13:2.8.3:4.1.3:1.1.1:5.3.3 +5.4.99:3.5.1:2.7.9:5.1.99:2.7.1:1.2.1 +1.2.1:1.1.99:1.18.1 +1.14.19:1.1.1:3.1.3:4.2.1:2.1.1:2.3.3 +3.1.3:4.1.2:2.6.1:4.1.3:1.1.2:1.5.1:1.13.11:3.1.1:4.4.1 +3.1.3:1.1.1:1.2.1:2.4.2 +1.1.1:5.3.1:1.17.1:2.1.1:1.1.1:5.3.1 +1.2.1:4.6.1:5.3.3:2.7.1:1.1.1 +1.2.1:3.6.1:2.1.1:2.7.1:4.1.1:2.3.3 +2.7.1:4.1.1:4.4.1 +1.1.1:1.1.1:1.1.1:5.5.1:2.1.1:2.8.3 +9.9.9:1.1.1:2.5.1 +1.5.1:1.2.4 +2.7.1:5.3.1:2.7.1:1.14.13:5.3.1 +1.1.1:1.2.1:1.1.1:3.6.1:1.1.1:1.1.1:1.1.1 +2.7.1:2.3.3:6.3.2:1.5.1:1.1.1:4.2.1 +2.7.1:2.7.1:1.13.11:2.7.1:2.7.1:1.3.8:1.14.14:1.1.1:4.2.1:3.1.3 +3.1.3:1.8.1:3.1.3:2.7.1:2.7.7:3.1.2:2.7.1:2.3.1 +1.14.16:1.1.1:1.1.1:2.6.1:2.7.1 +2.3.1:6.2.1:1.2.1:1.1.1:4.4.1 +5.5.1:1.1.1:3.5.4:9.9.9:1.13.11 +9.9.9:1.1.2:5.3.1:1.1.1:5.4.2:1.14.13:1.3.1 +1.1.5:4.4.1:1.1.1:3.5.4:1.14.15:1.13.11:2.4.1:1.14.14 +3.1.3:1.3.1:2.3.1:1.1.1:1.8.1:2.7.4 +1.14.13:1.1.1:2.7.8:2.7.9:9.9.9 +2.2.1:1.5.8:1.14.15:3.1.1:1.8.1:1.1.1:5.4.2 +1.1.2:2.3.1:1.14.11:1.1.1:1.1.2:1.1.1:1.1.1:1.2.1:1.3.1 +3.6.1:1.11.1:1.1.1:1.1.2:1.1.5 +5.5.1:1.1.1:2.1.1:1.1.1:4.2.1:2.7.7:2.6.1:2.1.2 +1.2.7:4.1.1 +1.13.11:2.6.1:4.4.1:1.14.14:2.6.1:4.2.1 +5.3.1:1.1.1:4.4.1 +2.7.2:2.1.1:1.2.1:1.1.1 +9.9.9:1.1.1:1.17.1:4.2.1:4.4.1 +6.2.1:4.1.1:6.3.4:3.7.1:1.2.1:1.13.11 +4.1.2:4.1.2:3.2.1:1.1.1:1.2.1:5.4.2:4.2.1:1.3.8 +3.1.3:2.1.2:1.13.11 +1.1.1:1.1.1:1.14.14:3.5.4 +2.3.3:2.1.2:1.2.1:1.3.1:5.3.1 +5.4.2:3.1.6:2.1.2:1.1.1 +1.2.4:1.5.3:2.3.3:1.1.1 +1.14.16:1.14.14:2.7.7 +9.9.9:2.7.2:1.1.1:2.7.7:3.6.1:3.1.3:1.2.3 +2.7.7:4.1.1:1.1.1:3.5.3:1.1.1:1.14.14 +3.5.4:4.2.1:1.17.99:1.1.1:6.4.1 +2.7.2:9.9.9:1.1.1 +1.1.1:1.1.5:2.3.3:5.3.1 +2.3.1:1.1.1:1.1.98:3.7.1:2.3.1:2.3.3:2.6.1:2.1.2:1.13.11:1.1.1 +2.3.1:3.1.1 +2.6.1:1.1.1:5.1.3:3.1.3:4.1.3 +1.2.7:1.1.1:1.1.2:5.1.3:1.2.1:3.5.1:1.8.4:1.4.4:1.1.1 +3.1.1:1.3.1:2.3.1:1.13.11:6.2.1:1.2.7:5.3.1 +1.1.1:2.7.1:5.3.99:6.4.1:6.3.5:1.5.8:9.9.9:1.2.1:4.1.3:1.1.1:2.7.7:4.2.1:1.1.1 +1.1.2:1.1.1:2.7.1:9.9.9:2.7.1 +2.7.1:1.1.1:1.2.4:9.9.9:3.5.1:3.1.3 +2.7.2:3.1.1:1.14.14:6.2.1 +3.1.1:2.7.7:2.7.7:2.7.4:1.2.1:1.1.1:1.14.13 +1.1.1:6.3.5:2.6.1 +1.2.4:1.13.11:5.3.2:2.3.3:1.8.4:2.7.4:2.1.1:3.5.1 +2.6.1:1.1.1:1.1.1:1.1.1:1.2.1 +1.1.1:2.7.9:2.1.2:1.13.99:3.1.3:1.1.1 +1.2.1:2.7.1:1.1.5:2.1.1:1.5.8:5.4.2:1.17.7:1.8.5 +1.1.1:1.10.3:4.4.1:2.7.1 +4.2.1:1.1.3:1.14.13:2.7.8 +6.3.5:5.3.1:5.3.1:2.7.1:5.4.2:2.1.2 +4.2.1:4.2.1:3.1.3:4.1.3:2.6.1:2.3.1 +2.7.8:9.9.9:1.1.1:2.7.4:5.3.1:1.8.7 +1.1.1:1.17.1:1.1.1:4.1.1 +2.3.1:2.4.2:1.5.1:1.17.7:3.5.4:1.13.11:1.1.1:3.1.1:3.1.3:2.5.1:1.3.5 +4.1.2:4.2.1:1.1.1:1.1.1 +1.1.1:6.4.1:1.1.1:5.4.99 +3.1.3:2.7.7:1.1.1:4.2.1:4.1.1:1.13.11:3.1.1 +3.6.1:1.2.4:2.3.1 +6.2.1:6.4.1:1.8.1:4.1.2:1.1.3 +3.6.1:1.1.1:3.1.3:4.1.1:1.1.1:3.6.1:3.1.3:1.1.1 +1.1.1:1.1.1:1.1.5:1.1.5:1.1.1 +4.4.1:5.1.3:5.4.1:2.7.7:5.4.2:2.6.1 +5.4.2:3.1.2:4.1.1:2.3.1:1.1.1:4.4.1:3.3.2:1.1.1:4.2.1 +1.8.1:1.1.1:2.1.1:9.9.9:1.5.8 +4.99.1:1.14.14:2.3.1:1.14.14:3.1.2:5.4.2:1.1.5 +1.14.13:2.7.1:4.2.1:6.3.2:1.13.11:2.3.1 +2.6.1:3.1.3:4.1.2:2.1.2:1.13.11 +5.4.2:1.1.1:1.1.1:4.1.1:3.1.3:1.1.1 +3.6.1:4.1.1:1.14.16:1.17.7:2.2.1 +1.2.1:3.1.4:4.3.3:1.17.99:2.5.1:1.1.1:2.3.1:2.8.3:4.1.3 +1.1.98:2.8.3:4.2.3:1.1.1:1.1.1 +5.3.1:1.1.2:2.7.7:1.1.1:1.1.1 +1.1.1:4.2.1:2.7.7:5.4.2:4.2.1:3.6.1:1.1.1:1.14.16 +1.14.18:2.1.1:1.1.1:1.1.1:3.6.1:1.2.1 +2.4.2:4.4.1:1.1.1 +2.7.7:4.1.2:2.3.1 +2.7.7:2.7.1:5.1.99 +5.1.1:3.1.2:6.2.1:3.1.1:9.9.9 +1.1.1:3.1.2:4.1.1:4.2.1:1.14.11 +5.3.1:2.7.1:1.14.14:5.1.99:1.5.1:2.3.1 +2.8.3:1.1.1:2.3.1:3.1.5:1.3.1:1.3.1:9.9.9 +9.9.9:2.7.1:2.5.1 +4.1.2:3.1.1:1.2.1:2.3.1:4.1.2:2.3.1:3.2.1 +1.1.1:2.3.1 +3.1.3:4.1.1:4.2.1:1.1.1:4.1.1 +1.1.1:1.8.4:4.3.1 +1.2.1:1.1.1:2.3.1 +2.7.7:4.2.1:1.1.1:4.1.2:1.13.11:2.4.2 +2.1.1:1.1.1:1.17.3:5.3.1:2.7.7:1.2.4 +3.1.3:4.2.1:1.14.99:2.3.1:2.3.1:5.4.99 +1.2.7:1.14.14:1.1.1:1.18.1:2.7.1:1.2.1:2.1.2 +4.1.1:9.9.9:1.1.1:2.5.1 +2.3.3:3.1.4:4.4.1:2.6.1:5.2.1:9.9.9:4.3.1 +2.7.7:2.3.1:1.8.5:2.7.1:1.1.1:4.1.2 +3.1.3:2.3.1:5.3.1:1.14.14 +1.14.15:2.6.1:1.1.2:1.2.7:4.1.1 +2.7.1:1.1.1:1.14.14:3.1.1:2.6.1:4.1.1:2.3.1 +9.9.9:1.1.1:2.4.2:2.1.2:4.1.1 +2.7.6:1.4.3:4.4.1:4.2.1 +1.1.1:2.5.1:2.7.1:1.1.1:2.1.1:1.14.14:4.1.1:6.3.2 +1.1.1:4.3.1:2.7.1:1.1.1:2.7.1:1.1.1:2.1.2:1.1.1 +1.2.4:2.6.1:3.1.1:2.3.3:2.3.1:1.1.1:3.1.3 +1.2.1:2.7.7:1.1.1:6.4.1:6.2.1 +2.7.2:2.5.1:1.4.3:4.2.1:2.5.1:1.1.99 +1.8.1:1.1.1:2.3.1:1.1.2:9.9.9:3.1.1 +1.8.3:4.1.3:2.6.1:4.3.1:1.1.1:6.2.1:1.1.1 +1.1.5:5.5.1:1.1.1:6.2.1 +1.14.14:1.1.1:5.3.1 +1.14.11:1.1.1:2.5.1:2.4.2:1.5.8 +2.7.1:5.4.2:2.7.7:1.13.11 +2.7.1:3.5.1:1.1.2 +1.14.15:1.14.99:4.1.1:1.1.99 +2.3.1:4.2.1:2.1.2:5.3.1:3.1.3:4.2.1:4.1.3 +1.1.5:4.4.1:3.3.1:6.3.2:3.5.4:2.3.1:1.3.5 +4.1.1:2.7.1:5.1.2:4.2.1:1.3.1:6.3.4:2.5.1:6.2.1 +1.1.1:1.1.1:5.3.1:2.7.7:4.4.1:1.1.1:2.7.1 +1.13.99:1.14.13:1.2.4:2.6.1:5.5.1:2.3.1:1.14.14:3.1.3 +1.2.1:4.4.1:2.7.1:4.2.1:1.13.11:5.3.1:1.1.5:4.2.1:1.2.1:1.1.1:2.5.1 +1.1.1:1.1.2:2.3.1:5.3.1:2.3.1:1.13.11:4.2.1:4.2.1 +1.3.99:2.7.8:4.2.1:1.2.5:4.2.1 +1.2.1:1.2.1:1.17.4:5.3.1:1.14.13 +1.1.1:2.7.1:5.4.2 +5.4.2 +1.14.14:4.1.2:1.1.1 +3.1.3:4.2.3:3.1.2:4.1.1:4.2.1:5.4.2:1.13.11:1.2.4:4.4.1:2.1.1 +5.3.1:3.1.2:6.3.1:1.14.12 +4.2.1:1.1.1:4.1.1:5.3.1:2.3.1:6.4.1:1.2.4 +2.3.1:2.3.1:2.2.1:1.1.99:1.1.1:1.14.12:3.1.3:1.1.1:2.6.1 +1.14.13:1.3.5:2.4.1:2.1.4:1.3.1:2.3.1:1.1.1 +1.1.1:1.14.14:2.3.1:1.1.1:1.14.13:1.2.1 +2.7.1:2.1.1:1.2.7:4.4.1:4.3.1 +2.3.1:2.1.1:1.1.2:1.8.3:3.1.3:1.2.4:4.2.3 +1.1.1:1.5.8:2.8.3 +1.1.1:3.1.3:1.1.3 +3.1.3:1.13.11:2.4.2:2.4.2:1.13.11:4.2.1:1.4.3 +3.1.2:1.1.1:3.1.2:1.1.1:4.1.3 +1.1.5:5.4.2:3.1.3:3.1.4:2.7.7:1.1.3:5.1.3 +1.1.1:1.17.3:1.17.1:1.1.3:3.1.3:1.1.1:1.14.11:4.2.1:4.6.1:2.3.3:4.2.3:2.7.2 +2.1.1:2.3.1:4.2.1:1.1.1 +3.1.3:4.4.1:3.1.2:1.2.1:1.1.1:1.14.13:2.8.3:4.2.1 +2.7.1:1.1.1:4.4.1:1.1.1:4.3.2 +2.1.1:1.4.3:3.5.2 +5.3.3:4.4.1:2.7.4:4.2.1:9.9.9:5.3.3 +2.7.1:1.1.1:2.7.1:3.6.1:2.8.3:6.2.1:2.7.2 +1.14.15:3.1.3:4.1.1:2.7.4:6.3.5:1.1.1:5.1.3:4.2.3 +4.4.1:2.6.1:3.1.1:2.3.1:4.1.2:4.1.2:1.1.1:2.7.7 +4.4.1:2.8.3:1.1.1:3.1.1:2.3.1 +1.14.15:2.3.1:5.4.2:1.2.1:1.14.18:2.3.1:4.3.2 +2.7.1:4.4.1:1.1.1:4.1.1:1.1.1:3.1.4:1.14.14 +4.1.2:1.2.1:2.3.1:2.3.1:1.1.1:2.6.1:1.1.1 +2.7.1:4.2.2:1.4.4:1.18.1:1.1.1 +2.1.1:3.1.3:1.1.2:4.2.1:2.7.1:1.2.1 +1.13.11:2.7.7:1.14.13:4.1.1:4.2.1:1.1.1:1.1.5 +2.3.1:2.7.1:3.1.3:1.17.4:2.4.2:2.1.1 +2.7.1:2.2.1:1.1.1:1.13.11:2.7.2:1.2.1 +2.1.4:4.1.1:2.7.1 +9.9.9:1.3.1:1.1.1:1.1.1:5.1.3:6.4.1:2.5.1 +2.7.1:1.13.11:2.7.9:5.3.3 +5.3.1:4.1.1:5.3.1:1.1.1 +1.1.1:1.3.1:1.13.11:1.13.11 +3.6.1:1.1.1:2.6.1:4.3.1:1.13.11 +2.5.1:4.1.1 +2.7.4:1.14.13:9.9.9:1.13.11 +2.7.7:4.2.1:4.1.1:1.1.1:2.3.1:1.1.1:1.5.1 +1.14.11:2.1.1:1.14.14:4.3.1:1.1.1:1.14.15 +5.3.1:5.3.1 +2.1.1:1.1.1:2.6.1:4.2.1:1.1.1 +2.7.1:6.2.1:3.1.2:2.4.2:1.1.5:1.14.19:1.1.99:2.7.6 +2.7.1:6.3.2:4.2.1:2.3.1:2.3.1:6.4.1:2.6.1 +2.3.1:5.3.1:5.1.2:2.7.8:3.1.2 +4.4.1:1.11.2:1.2.4 +1.1.3:2.3.1:1.1.1:5.4.2:2.7.7:1.2.7:1.1.1 +5.4.99:1.1.1:3.1.1:1.1.3:1.1.1:3.1.3:1.1.1:9.9.9 +2.3.1:1.13.99:1.14.11:1.1.1:3.1.3:1.1.1:4.2.3:4.1.2:9.9.9:9.9.9:1.4.1 +2.7.1:1.1.1:1.1.1:5.3.1:4.2.1 +2.7.1:1.1.1:1.2.5:1.1.1:4.1.1 +4.2.1:2.7.1:4.4.1:2.7.7:2.5.1:2.1.2 +2.1.4:1.1.1:4.2.1:4.1.1:2.7.9:2.3.1 +3.1.3:4.3.1:1.1.2:1.2.1 +1.1.1:4.1.1 +1.17.4:1.14.15:1.1.1:1.5.8:2.2.1:4.2.1 +1.2.7:2.3.1:1.1.1:3.1.3:2.7.4:1.14.14:1.2.3 +3.1.1:1.2.1:2.8.3:1.1.2:2.7.1:1.2.1:1.1.1:3.1.1 +2.3.1:5.1.2:2.7.1:1.1.1:1.1.1:4.1.2 +5.3.1:5.1.1:3.5.1:1.1.1:3.1.2 +2.7.1:6.4.1:1.14.13:1.13.11:1.1.1 +1.1.1:1.2.7:5.5.1:2.7.7:1.3.8 +2.3.1:4.2.1:2.5.1:1.14.14:3.1.3:2.7.1 +2.5.1:1.1.5:4.2.1:1.1.1:4.1.1:5.4.2:3.1.3:1.2.1:1.1.1:1.2.7 +2.5.1:2.6.1:5.3.1:6.2.1:6.3.5:1.2.1:1.2.1:3.1.3:5.3.1:1.8.1:3.1.1:4.2.1 +1.14.13:4.1.1:5.5.1:1.1.1 +1.14.11:3.1.4:2.1.1:4.2.1 +2.7.4:2.7.7:2.7.1:2.6.1 +5.4.2:1.2.1:1.1.1:1.14.17 +2.7.1:3.5.4:1.1.1:4.1.1:1.1.5:1.2.1:2.7.1 +4.2.1:6.2.1:1.1.1:1.14.15:1.1.1:5.3.1:1.14.11:4.1.3:1.2.1:1.1.5:1.1.1:9.9.9:2.7.7:1.1.1 +3.7.1:1.1.1:2.1.1:2.7.7:1.1.98:1.2.1:2.7.1:2.1.1:1.1.1 +2.3.1:1.1.1:1.8.7:3.1.3:5.1.3 +3.5.3:2.7.1:4.2.1:2.3.1:1.1.1:3.1.2 +1.14.15:3.1.3:2.6.1:2.7.2:1.14.13:3.6.1:3.2.1 +4.4.1:2.3.1:3.1.2:2.3.1:1.4.3 +6.4.1:5.4.99:1.8.1:1.2.4:4.2.1:4.2.1 +1.1.2:2.4.2:2.5.1:4.2.1:1.13.11:6.3.2:1.2.4 +4.2.1:5.3.1:5.5.1:3.6.1:9.9.9 +2.6.1:2.8.3:2.7.4:1.3.3:4.1.1 +4.4.1:3.1.1:2.2.1:2.7.7 +1.1.2:1.1.1:1.4.3:4.1.2:4.1.3:4.2.1:4.2.1 +1.1.1:2.7.2:4.4.1:6.4.1 +5.3.1:3.1.3:5.3.1:2.3.1:4.2.1:4.1.1 +1.17.1:1.3.5:4.2.3:2.3.1:1.3.1:1.1.1:1.1.1:2.7.4:1.2.3 +2.7.6:5.3.3:2.3.1 +3.1.4:2.7.2:1.2.4:3.1.3:1.5.8:1.14.13:2.3.3:1.2.1 +9.9.9:1.1.1:1.2.1:1.1.1:3.1.2:1.2.5:4.4.1:1.3.8:1.13.11:1.1.1:4.1.3:3.6.1:5.5.1 +5.3.1:1.1.1:1.1.1:3.6.1:5.4.99 +2.7.7:1.3.5:1.1.1:2.6.1:1.1.2:1.17.1 +2.6.1:2.1.1:4.1.2:1.1.1 +3.1.3:2.7.1:1.14.16 +4.1.1:4.1.3:1.14.15:5.3.1 +1.14.16:1.1.1:4.2.1:1.14.13:4.2.1:2.7.1 +2.1.1:3.5.4:4.1.1:1.1.1:1.3.1:6.2.1:1.1.5 +2.7.1:1.1.1:2.7.1:2.3.3:2.7.1 +1.1.1:1.2.4:2.6.1:2.3.1:3.7.1:4.1.1 +1.1.98:9.9.9:1.1.1:1.2.1:1.2.1:2.3.1:1.8.1 +1.8.1:1.2.1:1.3.5:1.13.11:1.1.1:1.14.15 +4.1.1:1.5.1:1.5.1 +1.14.15:3.1.3:2.7.2:1.1.1:4.2.3:4.1.1:1.14.15:5.4.2:2.3.1 +1.1.1:5.3.2:4.1.1:1.1.5 +2.3.3:1.3.1:1.1.1:2.7.2:1.14.11:1.14.13:2.4.1:2.3.1:1.2.7:1.1.1:2.8.3 +4.1.1:2.5.1:6.2.1:2.7.4:5.1.3:1.14.19:4.1.1:2.5.1:2.1.2 +1.2.1:2.7.4:5.3.3:2.7.2:3.5.4:4.4.1:3.5.4:2.1.1 +3.3.2:4.2.3:3.1.4:1.18.1:2.7.7:4.3.2 +5.3.3:5.3.1:2.1.3 +1.1.1:4.2.1:1.14.14:5.3.2:4.2.1:2.8.3 +4.2.1:3.1.2:4.4.1:2.8.3:4.2.3 +1.1.1:2.7.1:2.7.7 +2.1.2:1.14.11:1.1.1:1.1.1:4.2.3:3.5.4 +1.1.1:2.3.1:1.1.3:2.4.2:4.2.1:1.1.1:3.1.1 +9.9.9:2.3.1:1.13.12:9.9.9 +2.8.3:1.14.14:2.1.2 +3.1.1:1.5.1:1.2.7:4.4.1 +1.1.1:2.7.7:2.7.2:2.1.1:2.3.3:4.1.2:1.2.7 +4.2.1:2.3.1:1.10.3:1.1.1 +1.14.18:4.1.2:2.1.2:4.2.1 +2.3.3:3.1.3:1.17.3:1.1.1:1.1.1:1.1.1:3.5.3 +4.1.1:1.17.99:2.3.3:1.13.11:1.1.1 +2.7.1:1.1.2:5.4.2 +1.2.1:2.8.3:4.4.1:5.1.2:1.1.1 +9.9.9:9.9.9:2.7.1 +1.14.13:6.3.2:1.8.3:2.8.3:4.3.1 +1.14.16:2.6.1:1.3.8:2.1.4:6.4.1:1.1.1:1.1.98:1.1.1:1.1.2:2.4.2 +2.3.1:1.13.12:2.2.1:1.8.5:3.3.2 +5.3.3:5.4.2:2.6.1:6.2.1:2.7.6:6.3.4 +2.7.9:2.5.1:4.1.1 +9.9.9:2.7.1:4.2.1:1.1.99:2.3.1:2.3.1 +1.14.16:1.17.1:4.2.1:1.14.15:1.1.98:1.1.2:5.1.2 +1.14.15:2.7.6:5.4.2 +5.3.3:2.8.2:1.1.99 +1.1.1:2.8.3:2.3.1:4.1.3:1.10.3:1.14.16:1.1.1:2.7.1:1.1.1 +6.2.1:1.14.13 +4.1.1:9.9.9:4.2.1:5.4.99:1.5.1 +2.3.1:1.2.4:1.1.1:2.7.7:2.7.7:3.2.1:4.1.2:5.1.3 +1.14.12:1.5.3:1.1.1:4.1.3 +2.7.7:1.3.8:9.9.9:5.4.99 +1.8.2:1.1.5:2.3.3:1.13.11:2.7.1:3.5.1:1.1.1:2.7.1:1.1.1 +4.2.1:2.4.2:1.2.4:6.2.1:2.8.3:1.17.3:1.1.2 +1.14.14:2.5.1:1.1.1:3.6.1 +4.2.1:1.8.4:5.4.2:3.1.1:1.1.1:2.6.1:2.7.1:1.1.2 +4.1.3:1.14.11:1.1.1:4.2.1:3.1.1:1.1.1:1.1.5 +4.4.1:6.2.1:1.1.1:1.3.1:1.2.1 +5.3.1:5.1.3:1.1.1:1.8.7:2.3.3:3.5.4 +2.8.3:1.1.99:3.1.3:1.1.1:5.1.99:1.1.1 +5.4.2:5.4.2:2.7.7:4.2.3 +2.1.4:6.2.1:5.1.3:3.1.3 +5.3.2:6.2.1:4.2.1:1.1.1:6.2.1:9.9.9 +1.1.5:2.3.1:1.1.1:4.1.3:1.5.8:2.7.1:1.13.11:2.6.1:3.1.3:2.1.4 +3.6.1:3.6.1:5.4.99:1.1.1:4.2.1 +1.1.1:3.1.1 +1.1.1:1.1.1:3.1.3 +5.5.1:5.3.1:4.1.1:2.7.9:1.1.1 +5.1.3:1.1.2:1.17.1:4.2.1 +1.2.7:4.2.1:1.1.1:2.4.2 +6.2.1:1.1.1:1.1.1 +4.2.1:1.1.1:2.4.2:1.13.11:2.3.1:5.3.1:1.1.1:6.3.2:1.1.1:3.1.2:4.3.1:4.1.2:1.4.5 +4.2.1:1.1.1:6.2.1:2.7.4:1.1.1:3.1.2 +2.5.1:1.1.1:3.1.3:1.1.1:1.1.1:2.1.2 +1.17.1:9.9.9:4.2.1:3.1.2:2.1.2:3.5.1:4.4.1 +1.14.14:2.7.1:6.3.4:2.8.3:2.1.2:2.7.1:1.1.1:1.14.14:6.4.1:2.8.3 +1.1.1:1.13.99:3.1.1 +5.4.99:6.4.1:6.2.1 +2.5.1:2.6.1:2.3.1:4.2.1:1.1.1:3.1.3 +1.1.98:2.1.3:1.1.1 +1.1.5:1.2.1:5.2.1:1.2.5:4.2.3:1.1.1:1.14.15:1.14.15 +4.6.1:2.7.1:1.13.12:1.13.11:4.1.2:2.6.1:4.1.2:3.1.2 +1.1.1:3.6.1:2.5.1:1.2.1:2.7.1:1.1.1 +3.1.3:3.5.1:1.14.14:6.2.1:3.1.3:2.7.1 +3.5.1:5.3.1:1.1.1 +5.5.1:1.1.1:1.1.1:3.6.1:2.7.1 +5.3.3:1.14.13:5.4.2:4.2.1:5.3.3:4.2.1 +4.2.3:9.9.9:2.7.7:2.1.2:1.1.1:2.3.1:2.1.2:1.1.1 +2.7.1:9.9.9:1.1.1:2.7.1:3.1.3:1.17.7:9.9.9:1.1.1 +2.7.7:1.1.1:1.1.1:3.1.1:1.2.1:4.1.1:2.3.1:4.1.2:2.8.2:3.1.3:4.3.1:1.5.1 +1.2.1:1.13.11:2.7.1:4.1.2:1.1.1:1.13.11 +5.4.2:3.5.4:1.14.14:2.3.1:2.7.1 +4.1.3:4.1.2:4.1.1:2.6.1:1.14.16:2.6.1:2.7.4:2.1.2 +2.6.1:5.3.1:4.1.1:2.4.2:2.5.1:4.2.1 +3.1.3:1.13.99:3.1.1:3.1.2 +1.1.1:1.14.15:2.3.1:1.13.11:2.7.1:1.1.1:1.1.1:1.1.1 +4.2.1:2.7.1:4.2.1 +2.4.2:3.5.1:2.3.1:2.1.1:9.9.9:3.1.3:1.14.14:1.2.7:2.7.1:2.7.1:1.14.16 +4.1.3:1.8.1:2.7.8:3.1.3 +9.9.9:1.2.1:5.3.1:4.2.3 +1.1.1:3.6.1:1.1.1:2.2.1:1.1.1:3.5.99:2.4.2 +1.14.13:2.7.1:1.5.1:4.2.1:2.8.3:2.6.1:4.3.2 +1.1.1:1.2.1:2.7.7:2.7.7:1.1.1 +1.13.11:6.4.1:4.1.2 +5.3.3:1.1.1:1.14.14:1.14.13 +1.1.1:4.4.1:3.1.3 +5.3.1:1.1.5:2.8.3:1.13.11 +1.1.1:1.14.16:1.1.1:2.7.1 +2.7.1:1.1.1:1.1.5:2.7.1:3.7.1 +5.3.3:1.1.1:4.2.3 +5.4.2:2.3.1:5.3.2:3.5.4:3.1.6 +2.8.1:4.2.1:2.6.1:3.6.1:1.13.11 +2.3.3:4.2.1:3.1.3 +2.7.1:4.3.1:1.2.1:4.2.3:2.3.1:2.7.1:1.3.1 +3.5.99:1.1.1:1.1.1:1.17.4:2.3.3:2.3.1 +1.1.1:1.1.1:1.1.1:1.1.1:1.14.13:1.13.11:4.2.1:5.1.2:3.1.3 +1.1.1:4.2.1:4.2.1:1.3.1:3.1.1:1.8.1 +3.5.2:1.14.15:3.8.1:5.4.2:2.7.1:1.2.1:4.2.1 +1.1.1:1.2.7:9.9.9:2.3.3:2.3.1:1.1.1:4.2.1 +2.3.1:1.1.1:4.2.1:6.2.1:1.2.1:4.2.1:1.14.15:4.2.1:2.3.1:4.1.1:1.1.1 +1.1.1:1.14.15:3.1.3:1.1.1 +2.1.1:5.4.2:2.1.2:2.3.1 +1.2.1:5.5.1:1.1.1:1.17.1:6.2.1:3.1.4:4.1.2:2.7.1:1.2.1:1.13.11 +2.1.1:1.14.14 +2.3.1:1.2.1:2.3.1 +6.2.1:1.2.4:2.3.1:2.3.1:3.1.2:2.1.4:2.7.1:1.14.15:1.5.8:1.1.1 +4.3.3:2.7.1:1.1.5:1.1.1:2.1.4 +3.1.1:1.2.1:3.1.2:4.2.1:1.1.1:3.1.3:2.4.1:2.8.3:1.1.1 +1.1.1:1.14.13:1.1.1:2.1.4 +1.1.1:1.17.1:4.2.3:1.2.1 +4.2.1:1.14.14:2.3.3:2.7.1:1.1.1:2.7.1 +1.1.1:6.3.4:2.5.1:4.2.1:1.23.5 +2.7.1:2.1.1:2.5.1:5.5.1:1.5.1 +2.2.1:4.1.1:1.17.99:3.7.1:4.1.1:1.1.1 +2.1.1:2.6.1:2.3.1:2.3.1 +1.1.1:3.1.4:2.7.1:2.3.3:1.17.4:5.3.3:3.3.2:1.1.1 +1.1.5:1.1.1:1.14.14:1.1.2:1.1.5:2.7.9:1.2.4 +4.2.1:1.1.1:1.2.1:1.8.99:2.7.7:2.3.1 +1.1.1:4.4.1:1.1.1:4.1.2:2.1.1:6.3.5 +4.1.2:2.7.1:4.1.3:1.1.1:2.5.1:1.1.1:1.8.2:2.3.1:9.9.9 +1.1.1:4.1.2:4.4.1:3.6.1:3.5.4:2.7.1:2.7.7:5.4.2:6.4.1 +2.3.1:1.1.98:4.2.1:1.2.99 +3.5.4:5.3.1:5.4.2:1.1.5:1.17.4:4.1.1:1.2.1:1.1.2:3.5.4 +5.4.2:2.7.7:1.1.1:4.2.3:4.2.1:6.3.5:1.1.2 +4.1.2:4.1.3:4.1.2:2.7.7:2.7.9:5.1.2:1.2.5 +4.2.1:3.1.2:2.7.1:1.2.7:3.6.1 +2.7.1:2.6.1 +1.1.1:3.1.3:4.2.1:2.7.1:2.4.2:5.3.3 +2.4.2:2.7.1:2.7.7:1.13.11 +4.4.1:1.8.7:1.2.7:5.3.1 +2.7.1:3.5.3:1.1.1:1.5.3 +1.1.5:1.1.2:1.13.11:3.1.1:2.3.1:1.13.11:1.1.1 +5.3.1:1.1.2:1.1.1:1.3.1:2.1.2:3.5.1:1.1.5 +5.3.2:1.2.1:1.14.11 +4.3.3:1.14.14:2.7.7:2.3.1:1.2.5 +1.1.98:1.3.1:1.1.99:1.14.16 +3.1.2:1.14.99:1.14.14 +1.14.14:4.1.2:2.6.1:1.2.3:6.2.1:1.2.1:1.1.1 +2.3.1:2.3.1:1.1.1:1.1.99 +2.1.1:5.1.2:1.2.7:1.1.1:3.5.2:4.1.2 +2.7.1:1.1.1:2.7.7:2.7.1:1.13.11:6.2.1:1.1.99:6.4.1:2.3.1:1.14.13:5.4.2:4.1.1 +1.14.14:4.2.1:1.1.1:6.4.1 +5.4.2:2.4.2:1.1.5:3.1.3:1.4.5:5.3.1:4.2.3 +1.14.14:2.7.8:3.6.1:2.3.1:4.2.2:2.5.1:2.7.7 +3.1.3:1.14.99:1.14.99:1.1.1:5.3.1:1.14.16:1.1.1:6.2.1:6.3.3 +1.2.5:3.6.1:1.1.1:1.5.8:4.2.1:2.6.1 +1.1.1:3.5.1:1.4.3:4.2.1 +1.13.11:2.3.1:2.4.1 +2.7.8:6.2.1:6.2.1:2.7.7:2.3.1 +5.4.99:4.2.1:1.1.98 +2.3.3:2.7.1:4.1.2:9.9.9:1.13.11:1.17.1 +1.1.1:1.2.5:2.6.1:1.1.1:1.14.11:6.3.4 +4.2.1:1.2.7:1.1.1:5.3.1:4.4.1:1.13.11 +1.2.4:2.7.7:1.1.1:3.1.1:3.1.1:3.6.1:1.2.7:5.5.1 +2.7.1:2.1.1:1.13.11:1.1.1:2.7.8:6.2.1 +1.1.1:4.1.1:4.1.3 +1.1.1:2.3.1:4.1.1:5.4.2:3.1.1:2.3.1 +3.5.1:3.6.1:1.2.1:4.2.1:1.2.7 +1.8.4:1.1.1:2.3.1:6.2.1:2.8.3:1.1.1:2.7.1:2.7.9:2.3.3 +1.1.1:4.1.2:4.1.1:2.7.1 +2.6.1:1.1.1:1.13.11:2.7.7 +1.1.1:2.7.1:1.1.1:1.1.1:5.3.3:3.1.1:2.7.1 +2.3.1:2.6.1:6.2.1:1.13.12 +6.3.4:2.3.3:1.2.1:2.1.3:2.6.1:1.3.5 +2.7.4:1.2.1:2.3.1:2.4.2:5.1.3 +1.1.1:3.1.3:1.1.1:1.14.13:1.13.11:5.3.3:1.2.7 +5.3.3:4.2.1:2.7.7:1.14.15:4.4.1:2.7.1 +9.9.9:1.14.12:2.3.1:2.6.1:2.7.2:4.2.1:2.7.7 +2.3.1:4.4.1:5.3.3:4.1.2:1.2.1:1.1.5 +5.4.2:5.4.2:1.2.5 +4.2.1:1.3.1:2.4.2:4.1.1:1.1.1 +1.3.1:2.7.1:1.1.2:1.2.1:2.6.1:2.3.1:3.13.1 +1.14.14:1.1.1:4.2.2:2.7.1:1.1.1 +1.14.14:1.8.99:1.3.1:2.6.1:2.7.8 +2.1.4:6.2.1:3.1.3:2.6.1:4.1.2:3.1.1 +4.4.1:2.7.2:2.3.3:1.1.1 +1.14.14:1.1.1:1.1.1 +1.1.1:3.1.3:1.2.1:3.1.3:1.2.1:2.3.1:1.1.1:3.5.2:4.2.1:2.7.1:4.1.1 +1.14.14:1.17.1:2.1.2:1.14.12 +2.1.1:4.4.1:2.6.1:4.3.3:1.13.11 +4.1.2:1.2.1:1.1.1:2.3.1:1.14.12 +1.2.1:6.4.1:2.3.3:2.7.8:1.1.1:2.3.1 +5.4.2:1.1.1:1.1.2:1.2.4:4.1.2 +2.1.1:2.7.6:1.1.1:2.6.1:1.18.1 +6.3.5:1.1.1:1.1.5:1.2.1:2.7.1:1.5.1:4.4.1:9.9.9:1.1.1:6.4.1:4.2.1:5.4.2 +4.3.1:2.7.1 +2.3.1:3.6.1:5.4.2:2.7.2:2.7.1:1.1.1 +2.7.1:9.9.9:5.3.3:5.5.1:4.1.3:2.1.4 +1.17.1:1.1.1:6.3.5:2.7.6:1.1.1:1.1.2:1.14.14 +1.1.1:3.5.1:1.2.7:1.13.11 +2.6.1:2.7.7:1.14.13:6.3.5:1.2.1:3.1.1:1.1.1:2.6.1:1.2.1 +3.1.2:1.1.1:5.1.2:1.1.1:9.9.9:2.8.3 +2.3.1:1.1.1 +1.1.2:3.5.4:6.3.3:1.1.5:1.8.1:1.2.1 +3.1.4:2.7.1:2.6.1:4.2.1:6.2.1:1.14.15:5.4.2:1.14.14 +1.14.14:4.1.2:2.7.1:5.4.2:4.1.2:3.1.2:1.1.1:1.13.11:1.1.1:3.1.3 +1.2.1:4.2.3:4.1.3 +5.5.1:3.5.4:1.1.1:2.7.7:1.1.1:2.7.7:2.7.2:1.14.14 +4.1.3:2.3.1:1.8.4:2.6.1 +2.2.1:4.2.1:1.2.1:2.7.1:5.1.3:1.14.99:2.3.1:1.2.1:1.13.11 +2.4.2:1.2.4:2.7.7:2.1.2 +2.3.1:1.1.1:3.1.3 +4.4.1:1.1.98:2.8.1:2.6.1:2.7.8:5.5.1:2.7.1 +1.1.1:2.7.1:4.2.1:1.1.1:5.3.1:1.8.1 +4.2.1:1.2.4 +1.2.7:1.1.1:2.7.1:6.2.1:2.5.1:2.3.1:2.8.3 +1.13.11:1.1.1:1.2.1:1.1.1:2.2.1:1.1.1:3.1.1:1.1.2 +4.2.1:3.5.4:9.9.9:1.1.1:1.14.13:2.7.2:1.1.1 +2.3.1:1.2.5:5.5.1 +1.1.3:1.1.1:1.3.7:1.2.4 +1.1.1:1.13.11:1.1.1 +2.3.1:1.1.2:1.14.13:3.1.2 +3.1.2:4.1.1:1.3.1:2.4.1 +6.2.1:2.8.3 +1.1.1:1.3.1:4.2.1:3.1.3:3.1.3:1.8.1 +4.2.1:1.1.1:1.2.7:2.3.1:1.1.1:1.1.1:1.1.1 +6.3.2:9.9.9:1.1.1:4.1.1:3.1.1 +1.1.1:2.3.1:2.6.1:4.2.1:1.1.1 +2.3.1:2.2.1:2.1.2:2.8.3:1.1.1:5.3.1:1.2.1 +3.1.3:2.7.7:2.7.1:4.2.1:1.1.1:4.2.1:4.2.3 +2.6.1:3.5.2:3.5.4:4.1.1:2.3.1 +4.2.1:1.2.1:1.14.13:4.1.1:2.3.1 +4.1.3:1.13.11:1.3.8:1.14.13 +2.3.1:4.2.1:1.1.1:4.1.2:2.6.1 +4.2.1:3.6.1:2.4.2:2.7.1:2.5.1:1.1.1 +4.2.3:4.4.1:1.2.7:1.1.1:2.3.3 +2.3.3:1.1.1:2.5.1:1.5.1:2.1.2 +1.2.1:1.1.1:1.1.1:1.2.7:1.14.15:1.4.3:4.3.1:1.8.1:1.1.1:1.1.2:3.1.1:5.4.2:4.1.1:6.2.1 +1.2.7:1.3.5:2.3.1:5.3.1:1.2.1 +6.2.1:5.3.1:4.1.3 +4.2.1:1.1.1:4.3.1:1.14.14:2.7.2:2.7.1 +1.1.1:2.3.1:2.7.1 +3.5.1:1.1.1:2.7.1:2.4.1:5.4.2:1.14.14 +4.2.3:1.2.1:9.9.9:2.3.1:2.6.1:2.3.1 +5.1.3:9.9.9:2.6.1:4.1.1:5.3.1 +2.3.3:5.3.1:1.13.11:1.2.1:4.1.1:1.2.1:1.1.1:2.7.1 +1.1.1:3.6.1:1.8.1 +1.1.1:4.2.1:2.7.7:2.7.7:2.7.1:3.1.3:2.3.1 +1.8.99:9.9.9:6.4.1:1.1.1:3.5.99 +1.2.1:1.1.1:1.1.2 +1.2.7:3.6.1:1.1.98:1.1.1:2.7.1:1.1.1 +1.14.11:1.14.15:2.1.1:1.1.1:3.1.3 +6.2.1:2.7.7:1.1.1:1.3.1:2.6.1:1.1.1:3.7.1:4.1.2 +4.3.1:1.2.5:1.1.1:1.13.11:1.14.14:1.1.1:2.7.2:2.5.1:2.7.1 +2.5.1:1.2.7:3.5.4:5.4.99 +2.7.1:1.17.7:1.14.19:1.1.1:5.3.99 +3.1.1:5.1.2:1.2.1:1.1.1 +4.2.1:4.2.1:5.3.1:1.1.1 +2.1.4:4.1.2:1.14.14:1.13.11:4.4.1:2.1.4 +1.1.98:2.1.4:2.7.7:1.1.1:3.5.4:5.3.1:4.1.1:2.3.1 +1.1.5:1.3.1:1.1.1:5.1.99:3.1.1:1.2.4:1.14.15 +1.1.1:5.4.2:1.1.1 +1.1.1:3.1.2:3.1.2:1.2.4:2.7.1 +2.4.2:3.6.1:6.2.1 +3.1.3:1.14.12:4.1.3:4.3.2 +2.3.1:1.1.1:1.1.1:3.2.1:5.3.3 +2.6.1:4.2.1:2.3.1:6.2.1 +3.3.1:2.5.1:1.1.1:5.4.99:3.3.2:4.1.2:2.3.3 +3.1.4:2.3.1:5.4.2:1.1.5 +4.4.1:4.1.3:2.1.1:2.3.1:1.11.1:6.2.1:1.2.5:4.2.3:4.2.3:1.2.5 +2.7.7:5.4.2:2.6.1:2.1.4 +1.2.4:1.2.1:1.1.1:2.1.1 +1.3.1:1.14.14:5.1.3:4.4.1:9.9.9 +4.4.1:1.1.2:1.1.1:6.4.1:1.14.14:2.7.1:1.1.1:2.7.1 +9.9.9:1.1.1:2.3.1 +1.1.1:3.7.1:3.5.4 +2.3.1:5.4.2:1.1.1 +5.3.1:1.2.1:1.14.14:2.4.2:2.3.3 +9.9.9:6.2.1:1.1.2 +4.1.1:1.13.11:2.7.7:4.1.2:1.1.1:2.1.2:1.8.4:2.5.1:1.1.1:2.3.1 +2.7.1:1.13.11:2.7.4:1.1.1 +1.1.1:1.1.1:2.6.1:2.3.1:4.1.2:4.1.2 +3.6.1:1.1.1:1.2.1:2.7.1:1.1.1 +1.17.4:5.3.2:4.4.1 +2.8.3:1.1.1:9.9.9:3.1.2:1.14.12 +5.3.1:1.2.5:2.7.1 +2.3.1:1.1.1:1.1.1:1.1.1:1.14.13 +2.4.2:6.2.1 +2.3.3:2.7.1:1.14.14:1.1.2:4.1.2:1.1.1:5.3.1 +1.14.12:4.2.3:4.2.3:5.3.1:2.1.4:1.1.1:3.1.1:1.1.1 +5.3.1:6.3.4:2.7.1:1.13.11:1.2.1:1.17.4:1.1.1 +3.7.1:9.9.9:2.4.2:2.1.1:2.3.3 +1.1.2:1.8.5:5.5.1:9.9.9:4.2.1 +1.2.5:2.3.1:4.1.1:2.6.1:4.1.2 +1.13.11:2.3.1:1.1.1 +6.4.1:3.5.4:2.7.7:1.2.4:4.2.1 +1.14.15:1.13.11:4.1.3:1.3.8:1.1.1 +3.6.1:1.17.7:1.14.14:2.1.1:4.3.1:9.9.9 +1.1.98:1.14.13:2.2.1:1.1.1:9.9.9 +9.9.9:5.3.1:4.2.1:1.14.13:5.5.1 +2.3.1:2.4.2:3.1.2:2.5.1 +2.4.2:1.13.11:2.3.1:2.7.7:4.2.1 +9.9.9:1.14.14:1.1.1:5.5.1:2.4.2:2.8.3:1.14.14 +1.3.8:9.9.9:1.1.1:2.1.1:1.3.5:3.1.1:4.2.3:2.7.1:2.7.9 +1.13.99:9.9.9:1.13.11:5.4.2 +2.7.1:1.14.14:1.1.1:1.1.1:1.1.1:5.5.1:3.1.2 +1.1.1:6.2.1:1.1.1 +9.9.9:1.1.1:5.5.1:1.1.1:4.2.3:2.1.2 +1.1.1:5.4.2:5.3.3:2.7.1:2.3.1:3.5.4:1.1.1:2.6.1:5.3.1 +4.2.1:1.1.1:1.1.1:2.7.2:3.1.3:3.1.1 +2.1.1:5.1.99:1.1.5:1.2.1:5.4.2:1.1.1:2.5.1:3.6.1:2.1.1 +1.1.1:5.1.99:1.14.13:4.2.1 +2.7.7:1.8.7:1.2.1:4.2.3:1.14.99:2.7.1:5.3.1:1.1.1:2.6.1 +2.7.7:1.1.5:1.13.11:5.5.1:2.1.2:1.1.1:1.1.1:1.14.99 +1.14.13:1.14.11:4.1.1:4.4.1 +1.14.15:2.5.1:1.14.14:3.1.1:2.7.7:2.5.1 +2.8.3:2.1.2:1.1.1:5.3.2 +2.3.1:1.8.1:2.6.1:1.1.5:2.6.1:4.4.1 +1.1.1:5.3.1:1.1.1:2.6.1:2.7.2:1.1.1 +4.1.3:2.3.1:9.9.9:2.5.1:1.13.11:2.7.2 +1.17.1:3.4.19:4.2.1:1.17.4:4.3.1 +4.1.3:1.1.1:3.1.3 +2.3.3:1.4.1:1.1.2:2.7.2 +4.4.1:2.7.1:6.2.1:1.17.1 +1.17.4:3.1.1:1.2.7:1.8.1:1.13.11:2.7.7:2.7.7:1.2.1 +4.2.3:1.14.14:1.8.1:1.1.5:1.1.98 +1.1.1:1.2.1:1.5.8:3.1.3 +2.3.1:1.1.1:4.2.1:1.1.5:3.1.3:1.5.1 +2.4.2:1.1.1:2.1.1 +5.3.1:4.1.3:1.1.1:2.8.3:4.2.1:5.1.3 +1.8.3:1.1.1:1.1.1:4.3.1:1.1.1:3.6.1 +6.3.5:1.1.1:5.1.99:2.7.1:4.4.1:3.1.2:4.1.1 +2.6.1:1.1.1:2.7.2:2.3.1:1.5.8 +2.2.1:1.1.1:4.1.2:1.11.1:2.3.1:1.3.1:5.4.99:3.1.3:3.1.1 +1.1.1:1.1.5:1.14.13:2.3.1:3.1.1 +1.1.1:1.11.1:5.4.2:1.1.98:1.1.1:4.1.1 +2.3.1 +4.3.1:4.1.3:1.1.1 +3.1.2:1.1.1:6.4.1 +2.7.1:2.1.1:1.1.1 +1.1.1:3.1.1:4.2.1:5.3.1:4.2.1:1.13.11 +3.1.2:3.2.1:2.7.1:1.1.1:3.1.3:2.3.3 +2.3.1:5.4.2:1.1.1:1.1.1:2.3.3:4.2.1 +4.4.1:1.14.14:2.3.3:3.1.1 +1.1.1:1.2.1:1.8.1:1.1.1:4.4.1:2.3.1:1.13.11:4.1.2:2.5.1:1.1.1 +1.14.13:4.1.1:1.14.11 +2.3.1:2.7.1:1.1.1:2.7.1:5.3.1:1.13.11:2.5.1 +5.3.1:1.2.7:1.4.3:2.7.1 +4.1.1:1.1.1:2.7.1 +1.14.13:5.4.2:1.17.1 +1.1.1:6.4.1:1.3.98:3.3.2:1.1.5:4.3.1:1.1.1 +1.1.2:2.6.1:3.1.3:2.7.1 +2.7.1:3.1.3:9.9.9:2.3.1:2.1.1 +3.6.1:2.7.6:2.7.1:3.1.3:3.5.3:2.3.1 +1.13.11:1.1.1:1.1.2:1.14.12:1.14.14:3.5.1:2.7.4 +2.3.1:2.7.4:1.2.1:2.3.3 +5.5.1:1.3.5:1.14.14 +5.4.99:1.1.1:4.1.2:2.1.1:1.2.7:1.1.1:4.2.1:4.2.1:3.6.1:1.1.1 +1.1.1:1.13.11:1.2.7 +5.4.2:1.1.1:2.2.1:6.3.4:2.3.1:1.17.4:3.1.1:1.1.5:4.2.1 +1.2.1:9.9.9:2.8.3:1.14.13:3.1.1:9.9.9:1.1.1:5.4.2 +2.5.1:5.4.2:1.2.4:4.4.1:1.1.1:1.1.1:2.7.7 +2.3.3:1.1.1:1.14.13:2.2.1:5.4.2 +3.1.3:3.5.3:4.2.3 +4.2.1:2.6.1:2.3.1:5.5.1:1.1.1 +1.14.15:2.4.2:1.8.1:1.1.1:1.1.98:4.2.1 +3.1.3:4.2.3:4.2.1:2.2.1:1.1.1:2.7.1:2.5.1:5.1.3:2.3.1:1.1.2:2.7.9:2.3.1 +2.7.3:2.3.1:3.5.4:1.3.1:5.3.3:4.2.1:4.1.3 +2.7.4:2.7.4:1.1.1:1.14.12 +1.2.1:2.1.1:1.1.2:1.2.1:2.3.1:1.13.11 +2.3.3:2.1.1:1.2.1:1.17.1:2.3.3:4.4.1:2.4.2:1.17.7 +2.3.1:2.7.9:1.1.1:1.1.1:2.3.1 +2.7.4:5.5.1:3.6.1:1.2.7:1.13.11:2.3.1:4.1.2:1.17.4 +2.3.1:1.1.1:3.1.2:1.13.11:3.1.6 +1.14.14:1.1.5:2.7.9:3.6.1:2.3.1:4.1.1:3.5.4 +1.14.19:6.2.1:4.2.3:5.4.2:2.4.2 +2.3.1:1.1.1:2.6.1:2.2.1:2.7.1 +1.5.1:2.7.4:2.7.1:1.1.2:2.7.7:5.4.2:9.9.9:1.1.1:2.6.1 +1.2.1:3.5.1:2.3.1:2.7.2:1.1.1 +1.5.8:2.3.3:3.1.3:4.2.3:2.3.1 +4.1.1:1.1.1:1.13.11 +4.2.1:1.14.14:1.1.1:4.2.1:3.1.3:2.7.1:5.3.2 +4.2.3:4.2.1:5.1.1:4.1.1:2.7.7 +3.1.1:2.6.1:1.1.1:2.7.9:4.1.1 +3.1.4:1.1.1:3.1.1:2.7.7:3.5.1:1.17.1 +2.3.1:2.7.2:2.6.1:4.3.1 +2.8.3:1.13.11:1.14.12:1.1.1:9.9.9 +4.6.1:1.14.13:4.1.3:4.1.2:3.1.4:3.1.3:2.7.1:1.13.11:2.3.1:1.2.4 +1.13.11:1.1.1:1.1.1:1.18.1:4.2.1:2.1.1 +9.9.9:1.1.1:2.8.3:1.1.1:1.1.1:1.1.1:1.14.14 +2.8.3:2.7.8:1.1.1:1.1.1:2.7.9 +3.1.1:3.1.1 +4.1.1:1.2.1:1.1.98:2.7.4 +1.2.7:1.13.99:1.14.14:4.4.1:1.1.1:1.1.1:1.2.1:1.5.1 +2.4.2:4.2.1:6.2.1 +2.3.1:1.1.1:2.5.1:1.1.2:5.5.1:5.5.1 +1.2.7:5.4.99:5.4.2:2.7.8 +3.2.1:1.1.5:3.1.2:4.1.2:1.1.1:3.1.3:2.3.1:1.1.1:5.4.2 +1.1.1:4.1.3:1.5.8:4.1.1:1.14.14:1.1.1:1.1.1:4.2.3 +2.7.7:4.1.1:1.1.1:1.1.1:1.1.1:3.1.1:1.14.14:1.13.11:1.1.1:4.2.1 +1.14.14:2.7.8:3.5.3:5.5.1:1.1.1:1.3.1:5.3.1 +5.3.1:2.6.1:1.1.1:1.1.1:3.1.3:9.9.9 +1.1.1:4.2.1:2.7.4:1.5.1:1.1.5:1.2.4:4.2.1 +1.1.1:1.1.1:2.6.1:2.3.1:2.3.1 +4.4.1:4.1.2:1.1.2:1.1.1 +9.9.9:1.8.4:4.2.1:3.1.3:1.14.11 +2.7.4:1.4.3:4.1.3:6.2.1:3.5.1:2.7.1 +2.6.1:5.3.1:6.4.1:1.2.5:5.3.3:5.1.3:1.1.1:3.1.2:4.1.3:5.4.2:4.1.2 +1.1.1:1.2.1:3.5.2:3.6.1:1.1.1:4.1.2:9.9.9:5.3.1:5.4.2 +1.14.13:2.3.1:4.1.2:1.4.4:3.1.1:2.6.1:6.4.1:2.8.1:2.3.1 +1.1.5:3.1.3:1.1.2:1.1.1 +2.7.1:1.2.7:2.1.1:4.1.2:1.2.1:1.2.4 +1.1.5:1.1.1:1.1.1:1.1.1:1.1.1 +5.5.1:1.1.1:1.14.12:1.14.19 +1.2.4:1.1.1:4.1.3:1.2.1:1.1.1:5.3.3:1.1.1:5.4.2:3.1.3:1.1.1 +6.3.4:5.5.1:5.3.3 +4.1.1:2.1.1:4.2.1 +2.3.1:1.2.7:4.2.1 +1.14.15:4.2.1:6.2.1:1.1.1:1.13.11:3.6.1 +2.7.1:4.1.3:4.1.2 +1.14.99:4.4.1:1.1.1:5.3.3:4.2.1:1.1.1:1.2.1 +2.6.1:5.4.2:6.2.1:1.14.14:1.1.1 +4.4.1:2.3.3:1.14.17:1.1.99 +4.4.1:1.5.3:4.2.1:1.2.5:1.1.1:5.3.3:1.1.1 +5.3.3:3.5.4:2.6.1:2.7.7 +1.2.1:5.4.2:2.8.3:3.1.3:1.13.99 +1.14.14:1.1.1:6.4.1:2.2.1:2.7.1:2.1.1 +3.1.1:9.9.9:1.1.2:4.2.1:2.7.7:6.3.4:2.7.7 +1.3.1:2.7.2:1.14.99:1.5.98:1.1.1:6.2.1:1.13.99:1.1.1:4.2.1:2.3.3:4.1.1:9.9.9:3.1.3:4.2.1 +1.2.1:2.3.1:1.1.1:1.3.1 +2.7.7:1.1.1:3.6.1:4.1.1:3.1.3 +3.1.3:1.17.1:1.1.1 +2.7.1:2.6.1:5.1.3:1.1.1 +5.3.3:1.13.11:2.3.1:1.14.13:2.3.1 +1.1.1:1.3.1:1.1.1:1.3.1:2.5.1:1.14.13:2.7.7 +2.7.1:4.2.3:1.1.1:4.2.1:1.1.1:2.1.2:4.2.1:1.14.11:5.4.2 +4.3.1:2.7.6:4.2.1:4.1.2 +1.13.11:1.8.1:5.5.1:5.4.2:5.5.1 +5.3.1:9.9.9:2.1.2:1.14.19:4.4.1 +1.1.1:4.2.1:1.1.1:6.2.1:5.3.3:4.2.1:1.3.99 +1.2.1:4.2.1:1.14.15:3.1.6:9.9.9:4.2.3:1.17.1:1.1.5 +4.1.1:4.1.2:1.14.14:4.1.2:4.1.3 +6.4.1:5.3.1:1.1.1:1.14.16 +1.14.13:4.1.1:5.4.2:5.3.3:1.1.1 +1.14.13:3.1.1:1.1.1:6.2.1:5.4.2:2.6.1 +1.1.1:3.1.2:1.1.98:1.1.1:3.1.3:1.1.1:1.1.1:3.1.3:4.1.1:2.7.7:2.6.1 +2.5.1:4.1.2:1.1.1:4.2.1:2.7.7:1.14.14:1.14.14:1.1.1:1.1.1 +1.14.11:4.1.1:1.8.7:4.2.1:2.7.7:1.2.1 +3.6.1:2.7.2:2.2.1:2.7.1:2.3.1:1.1.1:3.1.3:4.3.1 +3.1.4:1.5.3:1.1.1:6.3.2:1.17.7:2.7.1 +1.1.1:1.11.1:3.2.1:2.7.7:1.1.1:3.1.4:1.17.4:1.1.2:2.3.1 +2.1.1:3.1.3:9.9.9:9.9.9 +5.3.3:5.5.1:1.1.1:1.1.1:1.14.14:4.1.2:2.6.1:4.4.1:2.7.7 +1.1.1:1.2.1:2.3.1 +2.7.1:2.3.1:2.8.3 +2.7.2:5.1.3:1.18.1:1.4.3:6.4.1 +1.1.1:3.5.4:1.17.1:1.1.1 +1.1.1:2.3.1:9.9.9 +4.1.2:2.7.1:1.2.1:4.2.1 +5.3.3:2.7.1:3.1.4:9.9.9 +1.14.14:5.4.2 +6.3.4:1.1.1:4.1.1:1.2.5:2.6.1:4.2.1:1.17.1:1.1.1 +1.8.1:2.4.2:1.14.14:4.2.1:1.1.1:1.14.13:2.7.7 +4.2.1:1.8.1:2.1.1:3.1.3:1.14.11 +3.1.2:4.2.3:2.7.1:1.3.1:1.14.14:3.3.2:1.2.1 +1.1.1:1.14.15:4.2.1 +3.1.1:2.7.1:1.1.5:1.1.99:1.1.2:1.1.1:1.13.11 +1.1.1:1.1.2:1.3.5:1.1.1:5.4.2:3.1.3:1.1.1:2.7.8:1.2.1 +1.1.1:1.1.5:1.1.1 +2.3.3:5.4.2:1.11.1:3.1.1:2.3.1 +1.14.12:2.7.9:1.14.14:1.1.5:4.2.3 +4.1.1:2.7.1:1.1.1:1.8.1:4.2.1 +1.1.2:9.9.9:1.1.1 +1.1.5:1.13.11:1.1.1:2.4.1:6.2.1:2.7.4 +1.1.1:2.3.1:2.3.1:1.1.1:2.7.1:2.3.1:1.13.11 +2.7.8:1.1.2:1.14.14:2.7.7 +1.4.3:1.1.99:6.4.1:1.2.5 +9.9.9:1.14.12:3.1.3 +1.1.1:1.13.11:3.5.4:6.2.1 +1.5.8:2.6.1:2.8.2:5.1.1:2.3.1:6.3.4 +1.1.2:2.1.2:1.1.1:5.3.3:2.8.2:6.3.2:2.7.1 +4.1.3:2.7.7:2.1.4:4.1.2:1.14.14 +2.3.3:1.14.18:2.3.1:1.2.4:4.1.1:2.3.1:4.1.2:2.1.2:4.2.3:2.2.1 +1.14.15:4.2.1:3.6.1:2.1.1 +6.2.1:5.3.3:5.4.1:1.13.11 +2.7.1:3.1.3:3.1.3:1.4.3 +2.1.1:3.1.3:3.1.3:5.1.3:2.3.1:1.11.1:1.1.5:2.7.7 +1.14.15:1.17.1:1.14.15:1.1.2:4.1.1:5.1.3:1.1.1:6.4.1 +1.2.4:3.3.2:1.1.1:4.1.2:1.1.1 +5.4.99:1.2.7:1.1.5:1.5.8:4.3.3:1.2.1:2.6.1:1.2.1 +5.5.1:9.9.9:1.2.1:9.9.9:2.1.2:1.2.7:1.1.1:2.7.1:9.9.9 +1.2.4:1.2.1:1.1.2:1.1.1:2.3.1:5.3.1:6.3.4:1.1.1:5.4.2 +4.2.1:3.1.3:4.4.1:5.1.3 +4.2.1:2.8.3:5.3.2:1.1.5:1.2.3:2.1.1:5.3.1:3.1.3:2.7.1:9.9.9:3.6.1 +1.2.4:4.2.1:2.7.1:2.3.3 +4.1.1:2.7.7:2.7.1:2.7.1:2.6.1:2.3.1:2.7.8 +1.1.1:4.1.2:2.6.1:1.13.11:1.1.1 +1.14.14:2.1.2:6.2.1:4.1.1:5.4.2 +1.1.1:1.14.11:1.2.4:1.2.1:2.5.1 +1.1.98:5.3.2:6.2.1 +1.17.1:1.3.1:5.4.2:2.1.1 +5.4.2:1.13.99:2.3.1:2.6.1:1.1.2:4.1.3:2.7.1 +1.14.18:1.1.1:1.14.14:2.1.1:1.8.4 +2.7.7:1.13.11:1.1.1:2.7.6 +1.1.1:2.6.1:3.1.2:4.1.1:1.13.11 +2.3.3:2.7.7:2.3.1:1.1.1:4.2.1:1.1.1:2.7.1:4.2.1 +1.1.1:2.3.1:2.7.1:3.5.4:9.9.9:3.1.2:6.2.1:1.2.4:1.5.8:4.1.3 +1.13.11:2.1.1:4.1.1 +1.1.1:1.1.1:1.1.1:1.1.1 +1.8.1:3.1.3:1.1.98:6.2.1 +5.1.99:1.1.3:1.1.2:1.14.14:2.7.4:1.1.1:1.8.4:1.1.5 +5.1.3:1.14.13:1.1.1:2.3.1:2.6.1 +1.1.1:4.2.1:1.2.1:6.2.1:3.5.4:6.4.1:2.5.1 +1.1.1:3.1.3:6.2.1:2.3.1:1.3.1:5.1.3:1.3.1 +1.2.1:2.7.1:2.1.1:5.1.99:5.3.1:9.9.9:3.7.1 +2.7.1:2.1.1:1.2.4:1.13.11 +1.1.1:4.2.3:1.2.1:2.3.1:2.3.1:2.3.3:1.13.11 +9.9.9:2.3.1:1.1.1:2.7.1:1.2.1:2.7.7:1.14.13 +4.1.2:1.1.1:1.14.15 +4.1.1:2.4.2:2.6.1:3.1.3:1.2.1:4.3.1:5.5.1:1.2.5:3.3.2:4.3.1 +2.6.1:2.7.1:5.4.99 +2.1.2:4.1.3:1.2.1:5.5.1:9.9.9 +2.3.3:2.1.1:1.18.1:4.2.1:1.14.11 +2.7.1:2.7.4:4.1.2:1.1.1:1.14.13:4.4.1:1.13.11:1.1.2 +2.7.1:1.1.1:2.7.1:5.4.2 +4.4.1:1.1.1:1.14.14:2.7.4:9.9.9 +1.13.11:2.7.2:2.3.1:1.1.1:1.1.1:1.11.1 +2.3.1:6.2.1:2.4.2 +3.1.1:4.1.3:2.1.1:4.4.1 +1.2.1:2.7.7:3.1.2:2.8.3:2.7.1:6.4.1:2.3.1 +1.1.1:3.5.1:1.1.1:5.3.1:2.3.1:1.2.1:4.4.1 +3.1.3:1.5.1:5.1.3:2.7.8 +1.2.7:2.3.1:1.13.11:2.1.1 +4.1.1:1.14.13:1.14.13:9.9.9:2.7.1 +1.1.1:1.2.1:1.2.1:3.1.3:1.14.13:1.1.1:2.5.1:1.3.5 +1.13.11:1.1.1:3.1.3:1.2.1:2.3.1 +4.1.3:2.7.1:5.4.99:1.17.1 +6.2.1:9.9.9:6.2.1:2.7.1:5.4.2:1.1.1 +4.2.1:2.7.1:3.1.3:1.14.14:6.4.1 +1.1.1:6.4.1:1.1.1:1.1.1:1.1.1:6.2.1:1.1.1 +1.1.1:2.1.1:3.1.2:2.7.7:1.2.1 +4.2.1:1.1.99:6.2.1:1.14.13:2.7.2:2.7.4:4.2.3 +1.2.1:2.3.3:4.1.3:4.4.1 +1.1.1:5.3.2:2.6.1:3.5.2 +4.1.1:5.1.2:3.7.1 +2.8.3:1.1.1:4.1.2:2.7.2:2.7.1:2.2.1 +1.14.13:2.3.3:2.7.1:3.5.1:2.3.1:3.1.1:1.17.99:2.7.1 +1.1.1:1.17.7:2.4.2:2.3.1:2.2.1:1.1.5:2.1.1:4.1.1:3.1.1:1.17.7 +5.3.1:1.2.1 +2.7.1:2.7.1:1.13.11 +1.1.1:1.1.2:2.8.3:1.1.1:9.9.9 +3.6.1:2.3.1:1.14.19:1.1.1 +3.1.1:4.3.1:2.7.1:3.1.3:2.3.2:2.6.1 +1.2.7:3.1.1:1.1.1:4.2.1:1.1.1:4.2.1:1.1.1:1.1.1 +1.14.11:2.1.3:1.14.13:4.2.1:1.2.1:1.4.1:4.1.2 +5.4.99:1.1.1:1.1.1:1.2.1 +5.4.2:1.14.13:1.2.1:1.8.2:2.3.1 +5.3.1:1.17.7:1.2.4:5.1.3:2.7.7:2.7.1 +1.5.3:2.7.1:1.2.1 +1.1.1:2.3.1:1.1.1:1.14.16 +1.13.11:1.14.14:2.5.1:2.7.1:1.3.1:2.1.1:5.3.1:2.7.8:9.9.9 +1.2.7:1.2.1:1.1.5:1.1.1:1.2.1 +4.2.3:4.1.2:3.1.3:1.14.14 +2.6.1:5.3.1:2.1.2:9.9.9:2.6.1:1.1.1:1.1.1 +1.3.5:2.3.1:5.99.1:6.2.1:1.1.1 +2.7.4:2.3.1:4.1.2:1.13.11:1.11.1:1.1.1:2.3.1:4.2.1 +4.3.3:4.4.1:2.1.2:2.7.1:1.14.14:9.9.9:2.6.1 +9.9.9:2.7.1:1.1.1:1.1.1 +2.3.1:2.6.1:3.1.1:4.2.1 +1.1.1:1.14.13:1.1.1 +2.6.1:1.1.1:1.2.5:1.8.1:4.2.1:2.7.2 +2.7.1:5.3.3:2.3.1:2.3.1:2.7.7 +1.1.1:1.2.1:4.1.3:2.7.7:5.4.2 +1.1.1:9.9.9:1.2.1:3.5.3:2.7.1:5.4.2:3.1.1:1.1.1:1.1.1:1.1.5:2.3.1 +1.14.14:2.1.4:1.1.1:1.1.1 +2.7.4:1.2.1:1.1.1:1.2.4 +3.1.3:2.1.1:1.5.8:5.3.1 +2.7.2:6.4.1:2.7.4:1.1.1:1.8.3 +4.2.1:1.1.1:1.1.1:1.14.14 +4.4.1:5.4.2:2.6.1:1.1.1:3.1.2 +2.1.1:1.2.5:2.3.1:2.4.1:1.13.11:2.6.1:2.1.2:2.4.2:2.7.4:2.6.1 +2.7.1:4.1.3:1.14.14:1.1.5:4.6.1:3.1.3 +2.5.1:1.2.7:4.3.2:1.1.1:1.1.3 +1.2.1:1.1.1:1.1.1:1.14.13 +1.14.14:4.2.3:4.2.3:1.5.8:1.11.1:1.1.1:6.3.4:1.1.1 +6.2.1:2.4.2:3.1.3:9.9.9:3.1.1:1.2.7 +2.3.1:2.7.4:4.2.1:1.1.1:3.1.2 +4.1.2:5.1.3:2.7.1:5.3.1:5.4.2:3.6.1:1.1.1:4.2.1:4.1.3:2.6.1 +1.1.1:1.17.1:2.2.1:2.1.1:1.3.8 +2.7.1:5.1.99:9.9.9:2.7.1:3.1.3:1.14.15 +2.7.7:2.7.4:2.7.1:3.7.1:2.7.1 +2.8.2:1.2.7:1.1.2:1.13.99:2.7.1:5.4.2 +2.7.4:1.1.1:1.1.1:1.1.1 +9.9.9:2.3.1:6.2.1:1.13.11:1.1.98:1.13.11:4.2.1 +2.1.2:1.14.16:4.1.1:6.2.1:1.1.1 +2.6.1:2.3.1:1.2.1:2.6.1:2.7.1 +1.1.1:1.1.1:1.13.11:1.8.7:2.5.1:2.8.3 +2.1.1:5.4.2:6.3.4:1.1.1 +4.1.3:2.1.2:3.2.1 +2.3.3:2.8.3:1.1.1:5.4.2:5.3.1:9.9.9 +1.3.99:1.8.7:1.2.1:1.14.12 +1.1.1:1.1.1:3.5.4:2.5.1:1.2.1:4.1.2:1.1.1 +3.1.2:1.13.11:2.7.1:2.7.1:2.3.1:5.3.3:2.7.7:1.2.1 +1.2.1:1.1.1:2.1.2:1.1.1:2.7.1 +2.7.2:4.2.1:2.7.1:4.2.1 +1.2.4:1.2.7:3.1.2:3.1.1:4.2.1:2.7.8:2.4.2:1.1.1:1.1.1:2.5.1:3.1.3:9.9.9:1.1.1:2.8.3:1.13.99:5.4.2 +3.1.3:1.1.1:1.1.5:1.14.13:2.6.1:1.13.11 +2.4.2:4.1.3:2.1.2:2.7.7 +1.5.8:4.1.1:1.1.1:1.13.11:3.1.3:2.7.1 +5.3.1:1.2.7:1.14.11:1.1.1 +1.1.1:1.5.1:4.2.3 +2.7.1:1.14.15:2.7.7 +2.4.2:1.1.1:3.5.4:1.1.1 +2.7.7:1.14.16:3.1.3:1.3.8 +4.2.1:1.1.5:2.6.1:2.1.1:3.1.1:2.7.7:2.7.2 +1.1.1:2.3.1:3.5.1:2.1.1:5.5.1:5.1.1:2.1.4 +1.1.1:2.3.1:2.7.4:9.9.9:1.14.16 +1.1.1:1.1.1:4.2.1:3.1.2:9.9.9:4.1.1:6.4.1 +4.6.1:2.7.7:1.14.14:1.1.1:2.6.1:5.3.1:4.2.1:9.9.9:1.13.99:6.2.1:2.6.1 +1.8.1:2.1.1:1.2.1:5.5.1:4.2.1:1.14.14:4.1.3:1.14.14 +1.1.1:5.1.3:1.13.11:1.3.1 +1.1.5:2.7.1:2.2.1:1.1.1:2.3.1 +1.1.99:1.1.1:2.1.1:5.4.2:2.1.1:4.2.1:3.1.2:2.7.2 +3.2.1:4.1.3:1.5.8 +1.1.1:3.1.1:6.2.1:1.13.11 +1.1.1:1.1.1:2.7.6:1.1.1:3.1.2 +2.3.1:1.1.1:1.1.1:1.1.2 +5.3.1:1.17.3:3.1.1:6.2.1:1.1.98:4.2.1:4.1.3:4.2.1:1.3.5:4.2.1:1.1.1:1.5.3 +4.2.1:1.5.3:2.3.1:2.3.3:2.7.8 +1.3.8:2.3.1:2.5.1 +2.6.1:1.2.1:1.13.11:1.1.1:2.7.1:9.9.9:1.1.1:1.14.14:2.3.1:9.9.9:4.4.1 +3.1.3:4.4.1:2.7.1 +2.3.1:5.3.3:3.1.1:2.1.2:3.1.1 +1.2.1:1.1.1:2.2.1:1.1.1:1.1.1:1.2.4:1.2.7:6.3.2:2.7.7:1.2.4:4.1.1:2.4.2:2.7.1:4.2.1 +1.1.1:1.1.1:1.14.15:2.7.9:1.3.8 +2.7.8:1.1.1:1.14.17:4.1.3:2.6.1:2.4.1 +1.1.1:2.1.2:2.3.1:1.1.1:4.1.1:2.3.1:1.2.4 +2.6.1:6.2.1:1.5.1:1.5.3:2.7.7:2.7.1:1.1.1:2.7.1 +3.3.2:2.7.1:2.1.1:1.8.3:4.2.1:4.2.1 +2.1.2:1.14.11:1.1.1:3.1.1:3.5.1:1.2.1:1.2.1 +1.3.1:1.2.1:1.1.1:1.1.1:6.4.1:6.2.1 +1.1.5:2.3.1:5.4.2:6.2.1:3.1.1:4.1.1 +3.5.3:2.6.1:5.3.1:4.1.2:6.4.1:1.1.1:1.8.99 +2.6.1:2.1.1:2.7.1:5.3.3:2.7.1:1.1.1:1.5.3 +1.3.8:2.3.1:1.1.1:1.1.5:1.8.1:1.1.1:1.14.14 +2.6.1:2.3.1:2.1.1:3.1.5:1.1.2 +4.2.1:2.3.1:1.14.14 +4.1.1:3.1.3:1.1.2 +1.1.1:1.13.11:1.13.11:1.17.1:4.1.1:4.1.2 +2.3.1:1.17.1:3.1.3:4.1.2:1.14.14:5.3.1 +5.5.1:2.3.1:2.3.1:2.3.1:1.1.1 +4.1.3:1.1.1:2.4.2:1.13.11 +1.8.3:1.14.12:1.1.1:1.1.1:4.2.1 +5.3.1:2.7.1:5.4.2:6.3.5:1.8.4:4.2.3:1.1.1:1.14.11 +1.14.14:3.1.3:2.3.3 +6.2.1:2.7.7:1.2.1:2.6.1:1.1.1:2.1.1:2.7.1:2.8.3:3.1.2 +6.2.1:1.13.11:6.2.1:2.3.1:1.13.11:1.1.2:3.1.1:2.8.3 +1.1.2:3.1.6:5.3.1:1.17.7:2.7.4 +1.1.1:2.7.1:1.1.2:1.1.1:4.2.3:1.14.16:2.4.2:1.1.1:2.8.3 +1.17.99:4.1.2:1.3.1:4.4.1:3.5.4:2.3.3 +1.1.1:9.9.9:1.1.1 +1.1.1:1.1.99:2.7.7:2.7.7 +2.7.1:4.4.1:3.4.13:6.3.4:1.11.1:1.1.1:1.2.1 +6.2.1:6.4.1:2.7.7:3.1.1:1.1.2:1.1.5:2.3.1 +6.2.1:5.3.3:1.1.2:2.7.1 +5.1.99:2.7.9:2.7.7:1.11.1 +1.1.1:2.7.1:4.2.1:1.1.98 +1.2.1:2.4.2 +2.3.1:5.1.99:2.3.3:2.7.1:9.9.9:4.2.1:2.6.1:1.1.1:4.2.1:2.7.1:1.1.1 +1.14.15:2.3.1:2.6.1:3.1.3:1.1.1 +3.1.3:2.6.1:1.17.1:1.1.5:5.3.1:1.7.1:9.9.9 +3.1.3:6.2.1:4.1.1:2.7.1:1.13.11:1.1.2 +1.1.98:1.1.1:1.8.7:1.1.1:3.1.6:2.7.7 +2.6.1:1.1.2:1.1.1:1.1.1:2.7.1 +2.3.1:2.6.1:2.7.1:1.14.14 +4.3.1:1.1.99:1.1.1:5.4.2:2.7.1:4.1.1:1.13.11:2.4.2:3.6.1:1.1.5:1.14.18:4.4.1:2.7.1 +2.3.1:1.1.1 +2.3.1:1.14.14:1.1.1:2.7.7:3.1.3:2.8.1:1.14.13:1.4.1 +1.1.1:1.1.2:1.1.98:1.1.1 +4.1.1:1.2.4:4.4.1:2.6.1 +6.3.4:1.1.98:4.1.1:1.1.5:2.5.1:5.3.1 +2.7.1:1.14.11:9.9.9:3.5.4:2.7.1 +1.1.1:4.2.1:1.2.7:3.1.4:1.1.1:2.8.3:1.14.11:1.2.1 +3.6.1:1.1.1:1.1.1:4.1.1:1.13.11 +1.1.99:5.3.1:2.4.2:4.2.1:2.6.1:5.3.1:1.14.17:1.10.3:3.2.1:1.4.4 +6.2.1:9.9.9:1.2.1:4.1.3:3.1.3:5.4.2:1.1.1 +1.14.15:1.3.8:1.17.1:1.14.14:1.14.16 +2.7.2:1.8.1:1.14.12:2.7.1:3.1.3:1.13.11:1.1.1:4.2.1 +5.3.2:1.14.14:2.6.1:2.7.7:2.3.1:2.4.2 +1.1.1:1.14.19:1.1.99:2.3.1:2.4.2:2.7.6 +2.3.3:2.6.1:3.5.1:2.7.8:1.1.1:1.13.11:2.7.4:2.3.3 +6.2.1:2.7.2:5.4.99:2.3.1 +5.4.2 +2.7.2:1.11.1:1.1.1:5.1.3 +3.5.2:1.2.1:1.1.1:4.2.1:4.1.1:2.7.2:1.2.5:1.5.3:2.7.1 +1.1.1:3.1.3:1.1.1:9.9.9:9.9.9:6.2.1:5.4.2 +5.4.2:4.2.3:1.14.14:2.4.1:1.1.1:5.4.2 +9.9.9:9.9.9:1.10.3:4.1.2:1.2.1:1.8.1:2.7.1:3.1.3:1.13.11 +1.13.11:2.6.1:5.3.1:2.3.1 +2.3.3:2.3.1 +1.1.1:1.4.3:5.5.1:4.2.1:1.8.1:2.3.1:1.2.1 +2.1.4:5.1.1:4.4.1 +5.1.1:4.1.3:1.2.4:1.1.5 +1.2.3:2.3.3:2.8.3:1.14.19:1.2.7 +5.4.2:2.3.1:2.7.7:1.2.4:4.1.1:4.2.1:2.2.1 +3.1.2:5.5.1:1.1.98 +2.7.4:9.9.9:5.3.1:1.17.1:2.8.3 +5.3.1:4.1.2:2.3.1:6.4.1:2.4.1:4.1.3 +2.1.1:4.2.1:4.1.1:1.14.13:1.1.1:1.1.5:1.1.1:1.1.1:1.3.1:9.9.9 +2.7.1:1.13.11 +4.2.1:2.7.1:5.1.3:2.8.1 +9.9.9:5.3.3:4.1.1:1.1.1:1.1.1:4.1.3:2.3.3 +6.3.3:9.9.9:2.6.1:4.1.2:5.3.1 +2.2.1 +1.1.1:5.1.2:2.3.1:2.7.1:9.9.9:4.4.1:4.2.1 +2.2.1:2.7.1:3.6.1:2.1.2 +3.1.1:4.2.1:1.1.2 +2.5.1:1.1.1:2.1.2:5.3.1:2.7.7:5.3.1 +1.2.7:6.4.1:1.1.1:2.7.4 +1.1.2:5.1.3:1.14.14:5.4.2:1.1.99:2.6.1 +4.4.1:4.4.1:2.1.1:3.1.3:1.17.4:2.3.3:5.3.2:1.1.1:2.7.8:2.7.4 +1.18.1:1.5.8:1.3.1:2.4.1:3.1.3:6.3.1 +1.14.15:1.1.1:4.2.3:1.1.1 +1.5.3:3.1.3:5.4.2:4.2.1:1.2.1 +5.4.2:4.6.1:2.7.1:1.13.11:1.14.15:1.1.1 +2.7.4:1.1.5:1.1.1:1.1.1:3.1.2:2.3.3:5.1.3:4.2.3 +2.6.1:5.3.3:1.2.1:2.3.1:3.6.1:2.8.1 +2.7.1:1.5.1:2.4.2:1.14.14:2.7.7:4.2.1:4.2.3 +2.6.1:9.9.9:1.1.1 +3.5.4:1.8.1:1.13.11:2.7.7:2.5.1 +1.14.13:1.1.1:1.14.14:1.1.1:1.3.1:3.5.4:2.7.1:1.1.1:2.7.1:5.3.1 +4.1.1:1.13.11:4.1.1:1.1.1 +1.8.3:1.14.11:4.1.2:3.6.1 +2.7.1:1.1.1 +2.3.1:2.3.1:6.4.1:1.1.1:1.8.1 +1.14.14:1.1.1:2.4.2:3.1.3 +1.3.8:5.4.2:2.1.2 +1.14.13:2.7.7:2.7.9:1.1.1:1.1.1:1.2.1:1.1.1 +1.1.1:1.2.1:3.6.1:1.5.8 +1.1.2:1.1.1:1.1.1 +2.6.1:2.3.3:2.8.3:4.2.3:1.1.1:6.2.1:5.3.1:1.1.1 +6.2.1:1.1.1:1.1.1:1.2.4:1.14.19:4.1.1 +3.5.4:5.3.1:4.2.1:1.14.11:1.1.1 +2.3.3:5.3.3:1.1.1:1.14.14:4.2.1 +4.1.3:1.1.1:4.1.2:4.2.1:1.1.1:5.4.99:1.1.1:1.1.1:1.1.1:1.2.1 +3.1.3:5.3.2 +1.1.1:2.7.1:1.2.1:1.1.1 +1.1.1:1.2.5:4.3.1:1.14.14 +2.5.1:1.17.99:2.7.1:3.6.1:1.1.1:1.2.7 +1.14.16:5.1.3:3.5.1:1.1.1:5.4.99:2.6.1:2.4.2:2.6.1:3.1.1:2.6.1:3.1.3 +1.1.5:1.1.1:1.5.8:1.1.1:1.14.14 +2.2.1:1.13.11:4.4.1 +4.2.1:1.14.15:3.1.3:2.3.1:1.2.4:6.2.1 +2.3.1:2.7.1:1.1.1:1.1.1 +3.1.1:4.1.2:1.1.5:3.1.3:1.1.1:4.1.2 +6.2.1:1.2.1:2.7.7:3.1.3 +6.2.1:2.7.4:1.2.4:2.7.1 +1.1.1:2.7.4:1.1.1:1.14.16 +1.1.1:2.3.1:4.2.1:1.1.1:4.2.1:1.2.7:4.1.2:5.3.1:2.7.1:1.4.9:2.7.4:4.1.1:2.2.1:4.2.1 +5.3.1:1.1.2:6.2.1:2.3.3:6.2.1:2.7.4:3.1.1:2.3.1:1.1.2 +2.3.3:1.1.2:1.1.2 +1.1.1:3.1.3:2.7.7:4.1.1:4.2.1:2.7.1 +1.1.1:2.3.1:9.9.9:2.3.1 +1.1.1:4.1.1:1.13.11:2.3.3 +1.2.1:1.13.99:2.7.1:1.1.1:3.1.3 +1.13.11:1.14.13:1.1.1:2.7.1 +1.1.2:1.1.1:3.2.1 +1.1.1:2.3.1:2.7.1:2.3.1:1.2.1:5.5.1 +1.2.1:3.6.1:2.7.1:2.2.1 +5.4.99:1.14.14:3.1.2:3.1.3:1.1.1 +5.3.1:1.2.1:2.4.2:1.1.98:1.14.16:1.13.11 +1.14.13:5.3.1:2.2.1:4.2.1:3.6.1 +1.13.11:4.1.1:2.5.1:1.1.3 +1.8.1:5.4.2:9.9.9:2.1.4:4.1.3:1.8.4:1.1.1:3.1.1 +1.1.1:4.2.1:6.2.1:3.1.3:1.14.14:2.7.7:1.1.1 +1.14.15:1.1.1:3.1.1 +1.1.1:1.2.7:1.2.1:4.2.3 +1.2.1:3.5.1 +2.4.2:2.7.6:1.1.1 +5.3.1:2.3.1:5.3.1:5.3.1:1.1.1 +6.2.1:1.14.11:2.4.2:2.6.1:4.2.3:1.2.1:9.9.9:1.1.1 +2.1.1:1.1.1:1.14.13:1.1.1:1.1.1:4.4.1 +1.14.16:1.1.1:3.5.99:1.14.14:4.2.1 +2.1.1:1.13.11:4.1.1:3.1.2:2.7.1:1.2.1:1.14.17 +4.1.2:4.2.1:2.7.1:6.2.1:1.1.1 +1.1.1:2.7.7:2.7.7 +2.7.7:1.1.1:1.3.1 +6.2.1:5.4.2:4.2.1 +2.8.3:3.1.3:3.1.3:1.11.1:1.1.5 +9.9.9:2.7.2:6.4.1:1.1.1 +2.6.1:3.6.1:2.3.1:1.1.2:1.13.11:3.5.1 +4.1.2:4.1.2:4.4.1:4.2.1:1.11.1:6.4.1:6.3.5:4.2.1 +4.1.2:1.1.1 +2.3.1:1.2.1:1.13.11 +1.17.3:2.4.2:6.2.1:1.1.1:1.1.1:1.14.15:1.1.1:1.13.11 +1.1.1:1.13.11:2.1.1 +2.8.3:5.3.3:1.2.4:1.1.1:1.14.13:1.1.1:1.13.11:2.1.1:2.3.1:1.1.1 +1.13.12:1.14.11:1.1.1:4.1.1:1.2.7:4.1.1:2.3.1:1.8.4 +3.1.3:3.1.3:3.1.2:3.2.1:9.9.9:2.7.7 +1.1.1:2.6.1:1.5.8:5.4.99:2.3.3 +1.1.1:2.6.1:4.1.1 +2.8.3:4.1.2:5.4.99:1.1.1:2.7.1:2.7.7:4.2.1:3.3.1:4.1.3:2.7.3:2.1.1:1.14.13:1.1.1:5.4.99:3.5.2 +2.7.2:1.2.4:1.1.1:4.1.1:1.1.1 +4.2.1:9.9.9:1.3.5:2.3.1:2.6.1:4.4.1 +1.1.1:1.14.14:4.1.1 +1.1.1:2.4.2:1.1.1:1.13.11 +2.6.1:1.1.1:4.4.1:1.13.11:1.1.1 +9.9.9:5.3.3:1.1.1:3.1.1:2.7.1:1.2.4 +1.2.7:2.1.2:3.5.2:3.1.4 +6.3.5:2.7.1:1.13.11:9.9.9 +4.2.1:5.3.1:1.5.8:1.1.1:4.1.1:1.14.14:3.1.1:4.2.1:5.3.99 +3.1.1:1.1.1:2.7.1:4.4.1 +2.6.1:2.6.1:1.13.11:2.7.1:1.17.3:5.3.1:1.1.1:1.2.1:1.1.1:2.6.1:3.5.1:4.1.1:1.1.1:1.1.1 +6.2.1:4.1.2:6.2.1:1.1.1:1.14.14:4.4.1:2.7.1 +2.1.2:2.7.1:5.3.1 +2.7.1:2.6.1:3.6.1 +4.1.2:2.3.1:6.3.4:1.1.1:5.1.99:1.14.11:1.1.99 +3.1.1:3.1.1:1.1.1:2.7.1:1.1.1 +1.1.1:2.3.1:6.2.1:5.1.2 +1.1.1:3.5.1:6.4.1:1.1.5 +2.5.1:5.4.2:6.2.1:1.14.16:1.1.2 +1.2.7:4.2.1:2.3.1:6.4.1:2.3.1 +5.3.1:1.23.5:3.5.4:4.2.1:3.1.4 +1.1.1:1.1.1:2.7.1:1.14.11:2.7.4:3.5.4 +2.7.1:4.2.1:1.14.14:1.2.4 +1.1.1:2.7.7:3.1.2:1.1.98:1.1.1 +2.7.1:1.8.4:5.4.2:4.1.2:9.9.9:1.1.1:1.2.1 +2.7.8:5.3.1:9.9.9:5.4.2:1.2.1 +2.3.1:4.2.3:4.2.1:2.7.8:1.14.19:4.1.1 +1.14.99:2.7.1:2.7.7:4.2.1:5.4.2:2.7.7 +5.3.1:2.7.7:2.8.3:2.1.1:1.1.1 +1.1.1:1.17.1:3.1.2:4.1.2:1.2.7:1.1.1 +2.7.7:6.3.2:2.4.2:6.4.1:1.1.1 +1.1.1:1.14.13:1.14.14:2.8.3:6.4.1 +6.2.1:6.4.1:1.1.1:2.7.1:2.6.1 +2.6.1:1.1.1:1.1.98:4.3.2 +1.13.11:1.5.8:5.3.1:2.3.1:1.1.1 +3.3.1:6.4.1:1.1.1:1.3.8:6.4.1:1.13.12:3.1.3:9.9.9 +6.2.1:2.7.7:1.18.1:1.1.1 +2.6.1:1.1.1:1.1.1:6.3.5:1.13.11:6.2.1:3.1.3 +4.2.1:5.4.2:1.14.14:1.13.11 +2.7.1:1.13.99:1.1.1:2.6.1:1.8.4:2.6.1:1.1.1:1.14.14:1.14.13:1.1.98:5.5.1 +1.1.2:5.3.1:2.7.7:2.3.1 +5.4.2:1.14.13:1.2.4:1.1.1 +5.3.1:1.1.1:2.3.1:1.2.1:4.1.1:4.4.1:2.6.1:4.1.1 +2.5.1:4.2.1:1.14.14:1.1.1:2.7.1 +2.3.1:2.1.2:2.1.1:1.1.1:2.6.1 +3.1.3:1.14.99:3.1.2:2.7.1 +2.7.1:2.3.1:1.1.5:5.4.2:1.14.16:2.3.1:1.14.13:1.14.13:4.1.2 +2.2.1:1.5.8:2.6.1:1.1.1:2.3.1:1.1.5:1.1.1 +2.4.1:1.1.1:3.1.1:5.5.1:5.5.1 +2.6.1:1.1.98:1.1.5:3.6.1 +2.1.4:5.3.1:2.7.7:2.6.1 +2.3.1:1.1.1:5.3.1:1.14.14 +1.13.11:2.7.7:1.3.8:4.1.3:4.2.1:2.6.1 +1.8.1:4.2.1:4.1.2:2.6.1:2.7.7:1.1.1:2.1.2:6.4.1:1.14.13:1.14.15 +1.2.1:1.1.1:1.1.1:2.7.8:2.1.3:1.1.1 +2.3.1:1.2.4:1.8.4:1.1.1:9.9.9:4.2.1:1.2.1:1.14.15:3.1.1 +1.1.2:1.1.1:1.2.1:1.5.3:2.7.7 +6.6.1:2.3.1:2.6.1 +2.7.1:3.1.3:3.6.1:2.3.1:1.13.11:1.1.1:3.1.1 +1.1.1:1.3.1:5.5.1:3.5.1:3.5.2:3.1.4:2.4.1 +9.9.9:4.1.2:5.4.2:3.1.2:1.1.1:4.2.1 +4.2.1:1.14.11:2.6.1:4.2.1:6.3.2 +1.1.1:1.2.7:3.5.99:9.9.9:2.6.1:2.8.3:3.1.1:9.9.9:4.2.1 +1.13.11:2.3.1:1.1.1:1.3.8 +1.1.1:1.1.1:4.2.1:1.14.16 +2.3.1:4.1.2:1.1.1:1.3.1:1.17.4:2.4.1:4.4.1:1.1.5 +1.1.2:2.7.8:1.2.7:2.5.1 +5.1.2:1.14.14:2.7.1:3.4.19:1.4.3:1.3.1:1.13.11:1.2.1:1.18.1 +1.1.1:2.3.3:9.9.9:4.1.1:2.6.1:4.2.1 +2.8.3:4.1.2:1.2.7:1.5.3:2.8.3 +3.1.2:1.5.8:1.3.3 +1.1.1:1.2.1:6.2.1:1.2.1:6.2.1:4.1.1 +4.2.1:2.7.4:4.1.1:1.2.1:3.6.1:4.4.1:1.14.16:1.1.1:2.5.1 +3.1.1:1.17.7:2.3.1:6.4.1:2.7.1:1.1.1 +2.6.1:4.2.1:4.1.1:1.13.11:5.4.2:4.2.1:4.2.1:2.6.1:4.3.1:2.3.1:1.1.1 +3.1.2:5.4.2:1.1.2:2.1.2:1.13.11 +1.13.12:2.7.1:3.5.1:1.2.1:3.1.2:1.1.1 +2.3.3:1.2.7:1.2.4 +6.4.1:2.3.1:1.1.1:3.1.1:6.2.1 +2.1.3:1.11.1:2.3.1:4.2.1 +1.17.4:1.1.1:1.3.8:2.3.3 +5.3.1:4.4.1:3.6.1:2.1.4:1.1.98:5.3.1:3.1.2 +5.5.1:2.3.1 +4.1.2:3.1.3:4.1.2:2.7.7:9.9.9:4.1.2 +1.1.1:3.1.3:4.2.1 +4.4.1:4.2.3:1.2.7 +1.1.1:5.4.2:1.1.1:1.14.16 +3.2.1:1.2.5:4.2.1:1.1.1:1.2.4:1.2.1 +3.1.2:3.1.2:1.5.8:2.4.2:3.1.3:1.14.14 +1.17.1:5.3.3:4.2.1:2.3.1 +5.4.2:2.1.1:2.3.1:1.1.1:1.13.11:1.1.1:1.1.1:1.13.11:4.2.1:2.7.1 +1.2.1:3.1.3:1.1.1:2.7.7:2.6.1:4.2.1 +1.1.1:1.18.1:1.2.1:4.2.1:3.1.3:2.3.3:4.3.1:4.2.1:1.1.1 +1.1.1:1.13.11:1.14.11:1.13.11:4.1.1:2.6.1:2.7.1 +2.7.1:1.14.99:1.13.12 +4.4.1:2.7.2:1.14.13:1.14.14:2.3.1:6.2.1 +2.3.3:1.2.1:2.7.7:1.13.11:3.5.4 +1.17.7:1.14.13:3.1.1:4.1.1 +4.4.1:2.2.1:1.1.1:3.1.3:6.3.4:1.1.1 +1.2.4:4.4.1:3.5.1:4.2.1:4.1.2 +1.4.3:1.17.1:3.5.1:2.7.7:1.1.1:1.14.15:4.1.3 +3.1.3:1.2.5:1.1.1:3.1.3:1.1.1:5.3.3 +3.1.3:2.6.1 +1.1.1:2.5.1:1.3.5:6.3.5 +1.1.1:6.3.4:1.1.1:4.1.2:1.1.1:1.1.1:4.4.1:1.1.1:1.1.1:5.3.1 +2.1.2:4.2.3:1.1.1 +5.3.1:2.3.1:2.6.1:1.1.1:1.2.1:2.7.1:2.3.1:2.3.3:2.3.3:1.1.1 +1.1.1:2.7.1:4.2.1:2.3.1:2.6.1 +1.5.8:3.5.4:4.2.1:2.6.1:2.3.1:3.1.4:5.1.2:1.2.3:2.7.2:1.8.7:6.2.1:1.1.1 +2.7.7:1.2.1:1.1.1:1.1.1 +2.8.3:1.14.13:2.7.1:9.9.9:1.1.1:1.1.1:4.1.2 +1.1.1:9.9.9:1.1.2:6.2.1:1.2.4 +2.2.1:2.3.1:2.3.1:2.7.7:3.5.4:3.1.1 +1.17.4:2.7.1:2.7.2:1.1.1:1.2.1:1.3.8 +2.6.1:4.2.1:6.4.1:1.14.12:6.2.1:2.3.1:1.2.1 +2.1.1:2.1.2:2.1.2:1.1.99:1.2.3 +3.1.2:1.13.11:4.2.1:5.4.2:2.7.2:2.4.1:4.2.3 +5.1.99:1.2.1:1.1.99:1.13.11:2.3.1:2.3.1:1.13.11 +1.17.1:1.1.1:4.2.3:2.5.1:1.1.1:1.2.7:9.9.9 +4.2.1:1.13.11:1.14.14:5.5.1:5.3.3:1.1.2:1.1.1:1.14.15:1.1.1:2.7.1 +1.1.1:1.2.1:3.1.2:3.5.4:2.2.1:1.2.7:1.2.7 +2.7.1:1.1.1:1.14.14:3.1.2:1.2.1 +1.1.2:5.1.3:1.17.7 +3.1.3:1.1.1 +4.2.3:1.2.1:2.7.1:2.3.1:6.4.1:2.7.2:4.2.1:5.3.3:5.3.1 +2.3.1:2.7.7:2.7.8:1.13.11 +1.1.1:4.2.1:4.2.1:1.13.11:4.4.1:1.2.1 +4.1.1:2.7.1 +6.4.1:1.1.1:2.7.1:2.7.1:3.5.1:1.1.1:4.1.2 +1.2.7:1.1.1:1.1.1 +2.7.1:1.1.2:1.8.4:3.1.5:2.4.2:1.8.1 +1.17.1:1.2.1:5.4.2:2.5.1:2.3.1:1.1.1 +1.1.5:2.3.1:1.13.11:2.6.1:1.1.1:4.1.1:2.3.1:1.1.1:2.3.3:4.3.1 +2.7.1:1.1.99:1.2.5:6.2.1:1.14.14:4.2.1 +4.1.2:3.5.2:1.1.1:3.1.1:6.4.1:2.8.2 +1.5.8:1.1.1:1.1.99:2.3.1:3.1.1:1.3.8 +1.1.1:1.2.4 +2.6.1:1.1.1:4.1.1:5.3.3:1.1.1:1.13.11:1.1.1:5.3.3:1.1.3:2.7.7:2.3.1 +1.14.15:1.14.14:1.1.1:5.4.2:3.1.2:2.3.1 +1.14.13:5.4.99:5.3.2:6.2.1:1.1.1:5.3.1 +3.5.4:2.3.1:4.1.2 +1.1.1:5.4.2:4.4.1:5.5.1 +9.9.9:5.4.2:3.1.2:1.1.1 +1.2.1:2.3.1:1.2.7:2.6.1 +3.5.4:2.8.3:3.1.1:5.1.99 +3.1.3:1.14.15:1.1.1:4.3.1:1.1.1:1.2.7:1.1.1:4.2.1 +3.1.1:1.14.11:2.7.1:1.1.2:4.2.1 +2.5.1:1.1.99:1.1.1 +2.5.1:3.5.1:4.1.1:1.1.1:1.8.99 +6.4.1:1.2.1:1.1.2:2.8.3:3.5.3:1.1.1:1.14.13 +1.3.1:1.1.1:2.7.1:2.7.1:3.5.1:2.5.1:4.1.3:1.1.1:1.1.1 +1.1.1:2.6.1:5.5.1:1.8.7 +4.1.1:2.7.1:1.1.1 +1.5.1:1.13.11:1.2.1:4.4.1:4.1.2:1.1.1:1.1.1:4.1.3:1.1.1:2.3.1 +1.1.1:2.7.1:3.7.1 +1.14.14:3.1.1:2.7.7:2.1.2:9.9.9 +2.3.1:1.18.1:2.5.1:2.1.1:1.17.1:5.5.1:5.5.1 +1.1.1:1.1.1:4.1.3 +2.3.1:1.1.1:1.1.1:4.2.1:3.5.4 +5.3.1:1.1.1 +1.1.2:1.14.15:4.4.1:2.7.1:1.13.11:1.1.1:1.1.98 +1.1.1:1.1.1:2.7.1:1.2.4:4.3.2:1.8.5:4.2.1 +6.2.1:1.1.1:1.2.1:1.14.99:4.1.2:1.8.1 +5.1.1:1.1.1:4.1.3:2.7.7:1.1.1 +5.3.1:5.1.3:1.13.11:2.3.1 +2.3.1:1.14.13:1.13.11:2.6.1:2.7.7 +2.6.1:2.7.1:1.5.3:2.7.7:2.4.1:1.14.14 +3.1.3:2.6.1:4.3.2:2.3.1:1.1.1 +1.1.2:4.1.2:2.7.4:1.3.1:1.14.13:6.4.1:2.3.1:2.7.9 +2.4.1:2.6.1:2.6.1 +4.4.1:1.3.1:1.1.1:1.14.13:9.9.9:1.1.1 +1.2.1:2.8.3:4.1.2:1.3.1:1.14.13 +2.7.1:1.1.1:2.6.1:1.2.1:1.1.1:1.13.11:1.1.1:2.7.7:2.7.1:1.1.1 +4.1.2:1.14.13:2.7.1:1.3.1 +2.7.9:1.1.1:4.4.1:3.1.1 +4.4.1:1.2.1:2.6.1:2.3.1:4.1.3:1.1.1:2.3.3:4.2.3:3.1.3:1.1.1 +1.2.1:5.3.1:1.13.11:1.2.7:5.5.1:2.7.1:3.1.2:2.7.1:6.4.1 +2.8.3:2.7.7:1.1.5 +1.3.5:1.1.1:4.2.1:1.1.2 +9.9.9:4.1.2:3.6.1:4.2.1:3.1.3 +1.14.13:3.1.6:1.1.1:2.7.4:1.5.3:3.1.1:3.1.1:2.7.1 +9.9.9:1.14.16:3.1.4 +4.1.1:3.1.3:1.5.3:5.5.1:2.7.7:1.1.1 +4.1.1:3.1.3:1.13.11:4.1.1:1.1.1:3.1.3:2.7.1 +1.1.1:6.3.2:1.1.2:1.1.1:1.14.14 +2.3.1:2.1.1:3.2.1:2.1.1:4.4.1:3.1.1:1.1.2:1.1.1:1.3.8 +1.2.7:4.2.1:1.1.1:2.3.1:4.1.3:2.5.1:1.1.1 +1.3.98:1.1.1:3.1.4:2.1.2 +2.5.1:2.3.1:1.1.1:4.1.1:2.6.1 +4.1.2:4.1.2:2.3.1:5.4.2:1.11.1:1.1.1:6.4.1 +1.1.1:3.3.1:2.7.1:2.8.3 +3.1.2:2.7.1:2.3.3:5.3.1:1.14.14:1.1.1:1.1.1:1.1.1 +3.1.3:1.2.1:1.1.1:2.7.1:2.7.1:2.8.3:4.1.1 +2.6.1:9.9.9:2.7.1 +2.6.1:2.3.3:1.2.1 +2.3.1:2.7.1:3.7.1:2.7.1:2.5.1:4.1.3 +2.7.1:1.3.1:2.5.1:1.11.1:2.7.1:4.1.3 +1.1.5:3.1.3:1.3.99:1.1.1 +5.4.99:1.17.1:5.4.99:4.2.3:1.1.1:3.1.1:1.1.5:3.1.1:3.1.3:5.4.99:2.7.7:3.1.3:2.1.4:5.4.2 +9.9.9:1.13.99:1.2.1:1.1.1:2.7.8:2.7.1:1.1.1 +1.14.15:1.13.11:2.1.1:2.3.1:2.3.1 +4.2.1:5.3.1:1.1.1:1.8.4 +1.1.2:6.2.1:1.1.1:9.9.9:5.3.1 +2.7.1:1.8.4:1.3.1:5.1.3:2.3.1 +1.1.2:2.7.1:1.5.3:1.1.1:3.1.3:2.7.1:1.3.5:3.1.1 +1.1.5:1.17.3:2.1.3 +2.3.3:1.13.11:2.7.7:5.4.2:1.11.1:2.2.1:4.2.1:2.7.1 +2.4.1:1.1.1:2.3.1:1.1.1:3.1.1:1.3.1:4.1.1 +3.1.3:1.1.1:2.7.1:3.5.1:2.3.1:1.2.4 +4.1.3:3.1.3:4.1.3:1.1.1 +1.14.12:2.1.2:2.7.1:1.1.1 +3.1.1:1.1.99:1.14.14:1.1.1 +4.3.1:5.5.1:1.3.8:3.2.1:1.1.5:1.13.11:2.1.4:6.3.4:5.4.2 +1.14.15:2.3.1:1.17.4:1.1.1:1.14.15:4.2.1 +2.7.7:1.2.1:1.1.1:1.1.1:4.1.1:4.1.1:2.6.1:1.5.1:5.4.99:6.2.1 +1.1.1:2.7.1:5.4.2:3.1.1:2.5.1:2.7.1:2.2.1:1.13.11:5.4.2 +1.14.15:6.4.1:1.1.1:3.1.1:1.14.16 +1.2.4:4.4.1:2.6.1:5.3.3:5.3.1:2.5.1 +1.2.5:1.14.13:1.13.99:1.14.14:6.3.2:1.1.1 +2.1.3:1.1.2:4.1.1:1.2.7:4.2.1:1.18.1:1.1.5:2.3.1:3.1.2 +1.1.1:1.2.1:2.6.1:2.3.1 +5.4.2:1.13.11:4.4.1:5.4.2:5.3.1 +1.13.11:1.1.1:2.3.1:2.8.3:1.1.1:5.3.1 +1.1.1:2.8.3:5.3.3:1.13.12:1.2.7 +1.14.13:1.1.1:1.1.1 +3.6.1:5.1.99:1.8.4:2.7.2:1.14.11:2.7.9:1.14.11 +2.3.1:2.7.8:2.6.1:9.9.9:1.14.13 +1.1.1:4.2.3:1.2.7:1.1.1:4.1.3:1.1.1:3.1.2:3.1.1:4.4.1:1.13.11 +9.9.9:1.3.8:2.5.1:2.7.1:2.7.6:3.1.1 +1.8.1:1.1.1:1.1.1:1.1.1:1.13.11:3.5.1:3.1.3:5.4.2 +4.1.2:1.13.11:2.7.1:1.14.14 +2.3.1:1.14.15:5.5.1 +1.14.18:1.2.1:1.1.1:2.1.2:2.7.7 +2.8.3:1.17.99:1.17.1:5.1.99 +1.1.1:5.3.1:2.7.7:1.1.5:1.18.1 +3.5.4:2.7.1:3.3.2:4.2.2:9.9.9:4.1.2:2.7.1:2.6.1:5.4.2 +9.9.9:2.7.1:1.1.1:2.8.3:6.2.1:2.7.7 +1.13.11:2.6.1:9.9.9:1.14.14:1.1.99:2.7.1:2.7.2 +1.2.1:1.14.11:1.1.1:2.7.1:1.1.1:1.14.13 +2.7.1:6.2.1:3.3.2:5.4.2:1.2.1:5.4.2:1.1.2 +3.1.3:2.7.1:1.14.14:2.4.2:2.7.1 +4.2.1:2.3.1:1.1.2:2.7.1 +2.3.1:4.2.1:2.7.7:1.1.2:9.9.9:4.2.3:1.1.2:1.14.14 +5.1.2:4.4.1:1.17.99:1.1.1 +1.13.11 +1.1.1:4.1.3:2.7.7 +2.3.3:6.3.4:4.1.1:5.3.1:2.7.7 +9.9.9:2.7.1:3.5.3:1.1.5:6.4.1 +4.1.3:5.3.1:1.1.2:9.9.9:4.4.1:1.2.1:2.7.9 +4.4.1:2.3.1:5.3.3:2.6.1:2.7.1:1.1.1 +1.2.1:1.2.4:1.1.1 +3.5.4:2.7.6:2.7.7:3.2.2:1.1.1:1.3.5 +1.1.1:4.3.2:5.4.2 +5.3.3:1.17.1:1.2.1 +2.7.7:1.1.1:2.4.2:1.14.15 +2.7.6:2.3.1:4.2.1:3.1.2:1.13.11 +3.1.3:1.1.1:5.4.2 +2.7.7:1.3.5:1.1.1:2.6.1:1.5.8:4.1.3:2.7.1 +2.7.1:2.3.1:1.1.1:1.18.1:1.1.1:5.1.1 +5.3.1:1.5.1:1.1.1:1.1.1 +1.14.16:5.3.1:1.1.1 +2.3.1:1.1.1:5.3.1:2.2.1:5.3.1:1.1.2 +5.4.99:5.3.3:1.4.4:2.7.1:2.3.1:1.1.1 +1.1.1:3.6.1:1.3.1:2.7.4:1.14.14:1.1.1 +1.1.1:2.7.1:2.7.1 +1.3.8:1.1.1:1.1.1:2.1.2:2.1.1 +1.18.1:1.14.14:1.14.14:1.1.98:4.3.1:1.5.8:1.1.1:9.9.9:1.1.1:6.2.1:4.2.1:2.6.1:2.3.3:5.5.1:3.1.6 +1.14.19:4.2.1:1.3.1:1.2.7:3.1.3:2.3.3 +2.3.1:3.1.2:4.2.1:2.7.1:1.2.7:5.4.99:1.17.4:2.7.1:1.5.3:4.1.1 +4.1.3:2.3.3:5.2.1:4.2.1:2.8.3:1.2.1 +4.1.2:1.14.16:1.1.1:2.5.1:1.14.14:1.18.1:9.9.9 +3.1.4:2.7.7:1.2.1:4.2.1:1.2.7 +1.1.1:2.3.1:3.1.3:1.1.1:2.7.7:4.2.1 +3.1.2:2.3.1:1.1.2:4.1.1 +1.3.1:3.5.1:2.7.1:1.1.1:1.2.1 +1.1.99:5.4.2:1.2.7:4.1.1:1.17.7 +2.7.1:5.3.2:1.3.98:2.7.1:1.14.13:1.1.1:1.1.1:4.1.3:3.1.2:3.1.2:4.1.2 +3.5.4:2.5.1:1.17.1:2.3.1:1.1.3:3.5.4 +2.7.4:3.1.2:6.3.4:2.5.1:5.1.3 +1.1.5:1.1.1:2.7.2:1.1.5:3.3.1:1.1.5:2.6.1 +1.1.1:6.2.1:4.4.1:5.3.1 +1.2.1:1.8.7:2.8.3:1.3.1:6.3.2:2.7.7:2.2.1 +1.1.1:5.1.3:2.3.1:4.1.1:2.3.1:1.14.13:4.3.1:3.1.3:2.3.1 +1.11.1:1.1.1:4.2.1:2.4.2:1.1.1:2.7.9:3.1.2:2.7.1:2.3.1:3.6.1:2.1.1:2.7.7:2.1.2 +2.2.1:1.13.11:1.1.1:2.3.3:1.2.1:2.7.7:4.3.1 +2.1.2:1.14.13 +2.3.1:1.1.1:3.1.2:4.2.3 +1.17.4:4.2.1:4.3.1:4.1.2:3.1.3:2.1.1 +6.4.1:2.7.1:1.1.1:4.2.1 +3.6.1:2.6.1:2.5.1 +1.1.1:1.3.1:9.9.9:2.1.1:1.8.1:3.4.19:1.2.1:1.2.1 +1.3.8:1.2.3:2.3.1:4.2.1:1.3.8:1.5.3:2.4.2:1.1.1 +1.1.1:2.7.7:5.3.1:2.7.1:1.1.5 +2.7.1:1.14.14:2.7.2:1.1.1:2.3.1:2.7.7:4.1.3:3.1.5 +2.6.1:1.1.1:1.14.14:4.1.1:1.3.8:2.3.1:1.13.11 +1.1.1:1.2.1:2.3.1 +6.2.1:1.1.1:1.18.1:2.6.1:1.14.19 +1.2.7:5.4.2:1.13.11 +1.3.1:5.3.1:1.2.7:1.1.1:3.5.4:5.3.1:1.5.1 +1.1.1:3.5.99:1.1.5:1.1.1 +1.3.1:6.3.4:3.5.1:1.4.3:1.2.7:2.2.1 +1.2.1:1.10.3:2.7.1:1.17.1 +4.4.1:3.1.1:1.17.3:2.3.1:1.2.1:1.14.13:1.14.15:1.14.14:1.2.1:1.13.99 +1.1.1:3.1.3:4.4.1:1.2.1:2.5.1:1.1.1:2.3.1:2.3.1 +1.1.1:4.4.1:3.1.3:3.1.1:1.13.11:2.7.1 +9.9.9:2.7.6:1.8.3 +1.8.1:4.1.3:2.7.7 +1.2.1:2.7.1:2.2.1:1.17.4:2.6.1:1.2.1:4.4.1:2.6.1:1.1.1 +3.1.1:5.5.1:1.1.2:1.1.1:1.1.5:2.7.1:1.1.1 +4.4.1:1.1.1:1.1.1:1.17.7:9.9.9:2.5.1:9.9.9:1.1.1:5.4.2:2.6.1 +3.1.1:4.2.1:1.1.1:1.14.11:2.1.1:2.7.4:1.14.13 +1.1.1:5.3.1:4.3.1:1.1.1:1.17.4 +1.1.5:2.7.7:1.1.2:2.7.1:1.2.7:1.14.16:1.1.1 +2.2.1:4.1.2:1.1.1:1.1.99:4.1.1:1.1.99 +5.3.1:2.7.1:2.6.1:1.8.7 +4.2.1:2.8.3:2.7.1:2.7.4:4.1.2:1.14.12:2.1.1:2.7.1:1.14.14:2.3.1 +1.1.1:1.1.1:1.1.1:1.1.1:1.2.7:2.7.2:1.1.1:1.1.1 +3.1.1:4.3.1:2.7.1:1.2.7:1.11.1:4.4.1:3.5.1 +4.2.3:2.7.1:1.1.98:3.1.2:1.11.1:1.8.4 +1.2.1:4.2.3:1.1.1:5.3.1:2.3.3:4.1.1:3.1.2 +5.4.2:1.1.1:2.7.1:4.1.1 +2.6.1:1.2.7:4.2.1 +1.2.4:2.3.1:1.1.1 +1.14.19:2.7.2:6.4.1:1.1.1:2.3.1 +6.3.5:1.1.1:1.14.14:5.3.1:1.1.1 +3.6.1:1.1.1:1.13.11:2.2.1 +2.1.2:1.14.13:2.7.1:1.1.2:1.1.2 +1.14.14:1.1.2:1.1.5:1.1.1:2.3.1 +2.7.1:2.7.4:1.13.11:1.3.1:1.1.1:4.1.1:1.13.11:1.1.1 +4.1.3:3.7.1:4.2.1:3.1.2:2.1.4:3.1.2:4.1.3:5.3.1:2.7.1:2.5.1 +2.3.3:9.9.9:3.6.1:4.2.2:1.14.14:4.2.2:2.3.1 +5.5.1:3.1.2:1.1.1:5.4.2 +2.7.1:1.14.15:3.6.1:1.5.8:3.1.3:1.5.8:5.4.2:2.1.1 +1.1.1:1.2.1:2.3.1:1.1.2:1.14.14:1.1.1 +4.2.1:1.1.1:4.2.1:1.8.1:1.8.1:1.2.3:1.1.1 +1.2.1:1.5.1:3.1.1:1.14.16:2.2.1:4.1.1:1.3.1:1.1.1 +1.2.1:2.7.7:1.1.5:3.3.1 +1.1.1:2.7.8:2.7.1:1.3.5:1.1.2:1.17.7 +3.1.3:5.3.3:1.14.14:1.2.1:1.1.1:2.7.1:2.7.1:1.17.7:2.7.7:1.1.1 +1.1.99:1.8.4:1.1.2:2.1.2 +1.1.2:1.4.4:2.5.1 +1.1.5:6.2.1:3.1.1:4.1.2:2.7.1:3.1.2 +2.4.2:1.2.7:4.2.3:9.9.9:2.7.2:9.9.9:4.2.1:1.3.1 +1.8.4:4.1.3:1.1.1:6.2.1:1.1.1 +2.6.1:2.7.1:4.1.1 +3.1.2:2.3.1:2.7.1:2.8.3:2.1.3 +4.2.3:5.3.99:4.4.1:2.7.7 +2.4.2:2.6.1:1.1.99:2.7.7:4.4.1:3.1.1 +1.1.5:2.6.1:5.3.1:1.13.99:1.1.5:2.3.3:1.1.1:4.1.3:2.4.2:1.1.1:2.7.1:1.1.99:1.2.1:1.1.1:1.14.18:1.14.13 +4.2.1:3.1.3:3.5.1:4.1.3:4.2.1:2.3.1 +3.5.1:1.1.1:2.7.4:5.4.2:2.3.1:4.1.2:3.1.3 +5.3.1:9.9.9:5.5.1:4.1.1 +1.1.1:1.2.1:1.8.1 +1.1.1:1.13.11:2.6.1:4.2.1:1.18.1:3.1.3:1.1.1:1.2.1:4.2.1:1.1.1 +5.4.2:1.2.1:1.14.14:1.1.1:4.2.1:1.1.98:2.8.3 +1.6.5:4.2.1:2.7.7:1.14.99:2.1.2 +3.5.1:2.5.1:4.4.1:1.14.99:2.1.4:3.5.1:3.1.3 +4.1.1:3.1.3:2.7.1:1.14.11 +1.1.1:3.1.2:1.14.13 +1.14.16:1.2.1:1.1.1:2.3.3:1.1.98:2.4.1 +5.5.1:5.3.3:1.2.1:1.1.2:2.7.4:9.9.9:2.1.2:3.5.4:2.5.1:4.2.1:1.1.1 +9.9.9:5.3.1:6.2.1:2.7.7 +2.7.1:2.7.1:3.1.1:4.4.1:2.8.1:3.1.1:2.7.7:1.1.1 +1.1.1:5.4.2:2.3.1 +1.1.1:5.3.3:2.3.1:2.7.7 +1.2.5:4.4.1:1.1.1:4.2.1:4.1.3:2.7.1 +5.4.2:2.3.1:1.2.1:2.6.1:1.3.98:1.1.5 +5.3.1:1.1.99:4.2.1:6.4.1:3.6.1:3.6.1:2.7.1 +2.1.1:1.2.1:4.1.2:4.3.1:1.2.4 +2.6.1:4.1.2:1.1.1:2.7.7:1.5.1:1.13.11:1.1.1:3.1.1:2.4.2 +2.2.1:2.7.1:1.1.2:1.1.5:4.2.1:3.6.1 +6.3.4:1.2.1:1.14.14:1.3.1:1.2.1 +1.1.1:2.7.7 +1.1.1:5.3.1:2.7.7:9.9.9:1.1.1 +9.9.9:1.1.1:2.7.9:4.1.3 +1.1.1:1.1.1:4.2.3:4.2.3:1.1.99:4.1.2:2.3.1:4.4.1 +6.3.2:3.1.3:1.1.1:1.2.1:1.14.11:1.1.2 +2.6.1:1.1.1:1.1.1:1.1.1:1.18.1 +2.5.1:6.3.2:3.1.4 +1.2.3:5.4.99:1.3.5:1.2.1:1.2.4:2.7.2 +3.6.1:1.1.98:1.1.1 +2.7.1:2.4.2:1.2.1:1.1.1:5.3.3:2.4.2:2.7.7 +1.14.15:5.4.2:1.1.1:1.1.1 +1.3.1:1.1.1:4.1.1:3.1.5:2.3.1 +1.2.1:1.13.99:2.1.2:1.2.1:1.1.1:1.1.1:1.1.1 +2.7.4:1.1.1:1.3.8:6.2.1 +1.17.2:1.14.14:2.2.1:6.2.1:4.2.1:2.7.1:3.6.1 +5.3.1:2.7.7:5.5.1:2.3.3:1.1.1:4.2.1 +2.3.1:2.7.1:1.2.1 +3.1.2:3.7.1:1.14.13:4.3.1:2.6.1 +6.3.5:3.1.2:2.3.1:2.1.2 +2.7.1:2.6.1:3.2.2 +2.6.1:3.6.1:1.1.3 +1.1.2:1.2.4:2.4.2:1.1.1:1.17.4:4.2.1 +4.1.1:1.1.1:1.1.1:4.2.1:2.8.3:9.9.9:4.1.1:1.2.4 +1.1.99:2.1.1 +2.1.2:3.1.2:1.14.99:3.1.2 +1.11.1:4.3.1:6.2.1:1.1.2:5.4.2:2.3.1:3.1.3 +3.1.1:5.3.3:6.3.4:1.1.1 +2.8.3:2.1.1:1.8.4:4.1.2 +1.2.1:1.14.14:2.7.1:9.9.9:1.14.14 +1.14.14:1.3.1:1.1.1:1.1.1:1.2.1 +1.3.1:1.1.98:2.3.1:2.1.4:3.1.3:1.3.5 +3.1.1:4.2.1:4.4.1 +1.14.15:3.5.3:2.3.1:3.1.3:4.4.1:5.4.2 +2.5.1:3.1.2:2.6.1:3.1.2 +1.2.5:1.2.1:2.7.2:1.2.1 +3.1.3:2.1.2:1.14.13:4.1.2:1.1.2 +4.1.3:5.3.1:4.1.2:2.3.1:2.3.1:2.3.1:9.9.9 +1.14.14:2.3.1:1.1.2:3.1.3:2.1.4:3.6.1:2.4.2:4.2.1:5.2.1:2.7.1:1.1.1 +3.7.1:2.8.3:2.7.1:2.7.1 +2.3.1:1.13.11:9.9.9:1.1.2 +4.4.1:2.3.1:3.1.2:1.2.1:9.9.9 +1.1.1:4.1.1:1.1.1:1.2.1:1.18.1 +4.4.1:4.1.3:2.8.3:3.1.3:1.14.14:2.3.1:4.2.1:2.6.1:4.1.3:6.3.4 +1.1.1:4.3.1:1.14.12:4.1.1 +2.7.7:1.14.15:1.1.1:5.4.2 +6.3.5:1.2.1:3.1.3:1.1.1:4.1.3:1.8.1:1.1.1 +4.1.2:1.5.8:1.1.1:2.7.7:1.1.1 +1.14.15:2.3.1:2.6.1 +2.5.1:3.1.2:1.14.99:2.4.1:2.8.3 +4.2.3:1.1.1:4.2.3:2.3.1 +1.14.14:2.1.1:1.1.3:4.2.3 +1.1.2:1.14.13:3.1.1:1.1.2:2.7.1:2.7.6 +1.2.1:4.4.1:1.14.14 +3.1.4:2.3.3:5.3.1:3.5.4:1.1.5:2.2.1:2.3.1 +3.1.3:4.1.1:2.3.1:3.1.3:2.2.1 +2.8.2:6.2.1:4.4.1:1.14.13:1.1.1:1.1.1:5.4.2 +1.3.8:1.1.1:1.13.11:1.1.1:6.3.4:2.8.3 +2.7.1:1.1.5:2.6.1:4.1.2:5.3.3:5.4.2:2.6.1 +1.1.1:4.1.2:1.1.1:1.1.1:1.5.8:5.3.99 +1.1.1:1.1.99:1.5.3:2.1.1 +5.3.3:4.2.1:2.7.7:2.3.1:1.2.1:1.14.14:9.9.9 +3.7.1:2.3.1:2.7.1:1.17.1 +1.1.1:3.1.2:5.4.2:4.4.1 +2.6.1:3.2.1:1.14.15:2.3.1:3.1.2 +2.7.1:3.1.3:1.1.99:2.7.4:4.2.1:2.3.1:1.1.1 +9.9.9:2.7.1:2.1.2:1.1.1:1.17.1:1.1.1 +5.4.2:4.4.1:4.1.2:1.1.1 +1.1.1:6.4.1:1.17.1 +2.7.1:9.9.9:2.3.1:1.1.1:6.4.1:1.2.1:4.2.1:4.2.1 +2.3.3:3.5.4:1.2.4:1.2.7:4.3.1:2.1.3:2.7.8 +3.1.3:2.3.1:2.3.1:5.3.1:3.5.1:2.8.3:4.2.3 +2.3.1:2.1.2:1.2.1:1.14.11 +1.1.1:6.2.1:1.1.1:2.3.1:2.4.2 +9.9.9:2.3.1:1.14.15:4.1.2:1.8.1 +2.5.1:1.1.1:1.2.1:2.3.1:1.1.1:2.1.1:3.1.3 +3.6.1:1.14.11:1.8.3:4.2.1:1.3.5 +1.5.8:2.7.1:1.14.14:2.3.1 +1.2.1:2.7.1:1.1.98:1.2.7:1.1.1:1.14.15:1.14.15:3.1.3 +2.7.1:1.1.1 +4.2.1:1.1.1:2.6.1:2.7.1:2.7.7:3.6.1 +5.3.2:2.3.1:2.7.7:2.7.2:6.4.1 +4.2.1:1.2.1:2.1.2:1.1.1:2.1.4:4.1.2:2.8.3 +1.4.3:1.1.1:5.3.3:4.2.1:2.7.7:2.1.1 +1.2.4:1.1.2:9.9.9:1.5.3:3.1.4:1.3.1 +2.7.1:2.7.1:4.4.1:3.4.11 +1.1.1:5.1.1:2.3.1:1.3.1:2.7.1:4.2.1:1.1.1 +4.1.2:1.1.1:1.14.15:3.5.4:3.1.1 +1.8.4:2.1.2:3.3.2:2.3.3:5.3.1 +1.1.1:5.4.2:1.2.5:1.1.1:2.6.1:1.14.14 +3.1.1:2.7.4:1.1.1:1.13.11:1.5.3 +4.4.1:4.2.1:1.8.1:1.13.11 +2.7.9:2.5.1:2.3.1:2.2.1:2.1.1:1.14.11:4.1.2:5.4.2:2.7.1 +3.7.1:2.3.1:1.2.4:1.14.19:1.14.14 +2.1.1:1.14.11:2.3.1:1.13.11 +3.1.3:1.1.1:1.1.1:5.1.2 +1.1.5:4.1.1:1.2.1:2.7.1:2.3.1 +1.1.1:3.5.1:2.1.1:1.1.2:3.1.4:1.1.1:3.1.1 +2.3.1:1.1.1:4.2.3:4.1.1 +1.1.1:1.1.1:6.4.1:5.3.1:2.7.1:4.2.1:1.2.4:6.2.1:1.3.1 +2.5.1:1.14.14:2.7.1 +2.6.1:2.5.1:3.1.3:5.3.3:1.3.1:2.3.1:3.1.1:2.4.2 +1.2.7:2.8.3:4.3.1:4.4.1:5.1.2:2.3.1 +4.1.2:1.1.1:5.4.2:1.1.1 +1.8.1:3.1.3:1.1.1:1.1.1:2.3.1 +2.6.1:3.1.2:4.1.2:1.1.1:2.1.1 +1.1.1:1.1.1:1.1.1:1.13.11:4.1.1 +4.6.1:2.7.1:1.14.15:6.3.2:1.18.1:6.2.1 +1.1.1:5.3.1:3.1.1:2.3.1:1.2.1 +1.14.14:3.1.3:2.1.2:1.1.3:1.14.14:1.1.1 +2.7.1:3.1.2:4.2.1:3.5.2 +2.7.7:1.3.1:4.1.3:1.17.1:1.1.1 +9.9.9:1.13.11:1.1.1 +1.2.7:2.1.1:1.14.99 +3.1.3:4.2.1:1.2.1:2.4.2:2.6.1:1.1.1:1.1.5 +1.2.1:2.7.4:1.1.1:5.4.2 +4.2.1:2.3.1 +1.8.3:1.2.5:5.3.1:5.3.1 +5.4.99:4.1.1:5.4.2:1.1.1:1.17.7:1.2.7:2.4.2 +1.2.1:1.1.5:1.17.4 +2.3.1:1.1.1:1.5.8:5.5.1 +1.1.1:1.2.1:3.1.3:3.1.4:4.2.1 +1.3.1:1.1.1:4.2.1:1.1.1:1.1.1 +1.1.1:2.7.7:4.1.3:1.3.8:5.3.1:1.1.1:1.1.99 +1.1.1:1.14.14:2.3.1:4.1.3 +9.9.9:1.1.1:2.3.3:1.14.12:4.2.1 +2.7.1:2.7.7:2.7.1:4.2.3:4.4.1:4.2.1 +3.5.1:1.1.1:3.1.2:5.1.2:1.3.1:1.1.1:2.3.1 +2.7.2:2.7.1:5.4.2 +4.2.1:3.7.1:1.1.1:1.1.99:2.7.1:4.4.1:2.3.1 +4.2.3:9.9.9:1.3.1:2.1.1 +3.1.3:1.1.5:1.1.1:1.13.12:1.2.4:4.2.1:6.3.5 +5.3.1:1.1.1:1.3.1:5.1.99:2.1.2 +4.2.1:2.6.1:2.1.1:1.1.2:3.1.3 +2.7.4:1.14.16:4.1.2 +1.1.1:1.13.11:1.1.1 +1.5.8:1.1.1:6.2.1:3.1.3 +4.2.1:1.1.1:1.1.2:6.2.1:2.4.2:2.3.1 +1.1.2:2.5.1:9.9.9:1.8.3:1.17.1:1.14.14:2.7.7 +2.7.1:2.4.2:4.2.1:1.1.1 +2.1.2:1.13.11:1.2.7:1.1.1 +2.7.1:3.1.1:1.2.1:9.9.9:1.1.3:1.1.99 +1.1.1:1.1.1:1.13.11 +2.8.3:5.3.1:1.1.1:2.7.4:1.4.1:1.2.7 +2.7.1:1.1.1:5.5.1:1.1.1:2.8.3:6.4.1 +1.13.11:1.14.14:1.1.2:1.1.2:2.7.4:2.3.1 +2.3.1:1.1.1 +1.1.5:3.1.3:2.7.6 +1.1.1:1.1.1:2.3.1:1.2.5:1.1.1:1.1.1:1.2.7:1.1.1 +2.3.1:2.5.1:2.3.1:4.2.1:1.13.11:2.7.1:1.1.5:2.1.2:4.2.1 +1.1.98:9.9.9:2.6.1:1.13.11 +2.3.1:1.14.15:9.9.9:4.2.1:3.6.1:3.5.4 +2.3.1:5.3.1:2.6.1:1.14.19:1.1.1:1.1.1:4.2.1:2.7.1 +2.1.1:1.8.7:1.1.2:4.2.1:1.14.19:1.2.1:1.1.1:4.2.1 +2.3.1:3.1.4:2.3.1:2.7.7:1.1.2:1.1.1 +3.1.1:4.2.1:4.1.1 +1.1.1:3.1.3:5.3.1:4.3.1 +1.13.11:1.1.1:3.3.2:3.1.3:3.1.4:5.4.99:2.8.3:2.3.1 +2.7.1:1.13.11:1.1.2:2.3.3 +1.1.1:1.13.11:1.5.8:1.14.13:1.1.1:5.3.2:5.3.1 +4.4.1:2.7.1:1.1.2:2.3.1:2.1.1:1.14.13 +1.1.1:1.2.7 +5.3.1:9.9.9:4.1.2 +2.3.1:1.18.1:2.6.1 +3.1.1:1.1.1:3.5.1:1.1.3 +2.3.3:5.5.1:1.1.1:2.3.1 +1.14.14:1.1.98:2.7.1 +3.3.2:2.1.1:2.7.2 +1.14.13:1.3.1:1.1.1 +2.3.3:2.7.1:3.1.1:3.1.3 +1.13.11:2.7.1:2.3.3 +4.1.2:2.4.2:1.2.1 +1.1.1:1.1.1:2.1.2:5.1.2:2.3.1:3.3.2:1.2.7 +1.1.1:1.5.8:4.2.1:1.8.1:3.2.1:9.9.9 +2.7.1:1.17.1:5.3.2:3.1.2:4.1.3:2.7.9:4.2.1:4.2.1 +3.1.3:2.8.3:2.3.1:1.1.1:1.1.1 +3.6.1:4.2.3:2.1.1:3.6.1 +2.7.1:1.1.1:3.1.3:3.1.1:2.7.2:1.2.1:1.1.1:1.1.1:3.1.3:2.5.1 +1.5.8:4.4.1:4.1.1 +4.1.3:1.1.1:1.13.11:3.1.3:2.7.8 +1.1.2:1.13.11:3.1.3:4.2.1:4.3.1:4.2.1:1.14.15:1.13.11:1.14.14:9.9.9 +2.7.4:1.1.1:2.7.7 +4.4.1:2.3.1:1.14.14:3.1.1:2.7.1:1.1.1:2.7.1:5.4.2 +1.1.1:1.1.2:1.14.19:5.5.1:1.1.1:4.2.1 +1.13.99:1.1.1:1.14.12:3.6.1:4.3.1 +1.1.1:1.17.1:4.4.1:1.8.1:1.2.4 +5.5.1:3.1.1:9.9.9 +2.6.1:6.3.5:1.13.11:2.6.1:2.1.1:6.4.1 +2.7.7:1.14.11 +1.1.1:3.5.4:1.1.1:5.3.3:1.1.1:2.6.1:3.1.2:2.3.1:1.14.14:4.2.1:5.1.3 +2.3.1:2.7.1:2.7.1:1.13.11:1.8.1 +1.14.14:5.3.1:1.1.1 +1.2.1:4.2.1:2.7.1 +1.2.7:1.1.1:2.6.1:3.1.1 +2.7.1:1.5.8:2.3.1:1.14.14:1.1.1:2.7.6:2.1.2 +1.1.1:3.1.1:1.3.3:6.2.1 +6.2.1:2.3.1:1.2.1:3.6.1:2.6.1:1.1.1:1.1.1 +2.3.1:4.1.1:5.3.2:2.5.1:1.1.1:2.1.4:2.7.4 +1.3.5:2.7.9:2.3.1:5.3.3:1.1.1:2.1.1:6.4.1 +1.1.5:2.7.7 +2.3.1:5.3.1:1.10.3:1.1.1:1.2.1 +5.3.1:1.8.1:9.9.9:9.9.9:4.4.1:4.1.1 +6.2.1:1.5.8:1.14.11:4.4.1:1.1.1 +5.4.2:6.2.1 +4.2.1:2.7.4:1.1.1:6.2.1 +6.2.1:1.14.16:1.1.1:1.2.4:1.2.4:2.3.3:1.13.11 +2.3.3:4.4.1:3.1.3:5.3.1:1.14.19:9.9.9:2.3.1:2.6.1 +1.5.8:6.6.1:6.3.2:3.5.4 +1.1.1:3.5.1:4.2.1:1.1.1:5.4.2:1.13.11:6.4.1 +2.7.7:2.7.4:4.4.1:2.3.3 +1.1.1:1.1.1:2.7.1:1.13.11:1.14.14 +1.14.16:1.4.4:2.4.2:1.1.1:1.14.15:4.3.3:2.6.1:2.3.1 +4.1.3:4.2.1:1.2.1:3.1.2:1.3.1:2.3.1 +1.1.5:1.1.2:1.13.11:1.1.1:4.2.1:1.1.1:9.9.9 +1.1.1:3.1.3:1.3.5:6.4.1:2.1.2 +4.1.1:4.1.2:1.3.1:2.7.1 +1.14.11:2.5.1:3.1.3:2.4.1:4.1.2 +3.2.1:4.1.1:5.3.1:1.1.1:3.3.1 +3.1.1:2.6.1:4.2.1:2.7.7:2.7.6 +1.14.14:1.3.1:1.1.1:2.4.1:1.1.1:1.13.11:2.6.1 +1.1.1:2.7.8:3.1.6:2.3.1:2.3.3:6.4.1:1.2.7 +2.7.2:4.2.1:5.4.2:1.1.1:3.1.1:1.14.13:1.1.1:2.3.1 +1.1.1:1.2.1:1.14.11:3.6.1:3.6.1:5.3.3 +2.7.2:2.3.1:3.1.1:2.7.4 +1.1.1:1.1.1:4.2.1:2.7.2:2.7.1:2.7.4:4.2.1 +1.1.1:4.2.1:4.2.1:2.6.1 +3.5.1:4.1.3:1.1.1:1.5.1:6.4.1:2.8.3 +5.1.99:1.1.98:4.2.3:4.4.1 +1.1.1:1.1.1:4.2.3:1.2.5:1.14.14:1.1.1 +6.2.1:5.5.1:1.3.1:1.2.7:2.3.1:2.7.7:6.4.1:1.1.1:4.1.2:4.1.2 +6.2.1:4.1.1:1.1.1:2.5.1:1.13.99:5.3.1 +2.3.1:4.2.1:1.1.1:4.1.99 +2.7.8:1.1.1:1.1.1 +2.4.2:4.2.1:1.14.13:5.5.1:2.3.1:2.7.7 +3.5.4:4.2.1:4.4.1:3.1.2:2.7.4:2.2.1 +1.13.11:3.5.4:2.3.1:9.9.9 +4.1.2:2.6.1:1.1.1:4.1.3 +2.4.1:5.1.3:1.2.4:2.7.1:1.1.1 +3.6.1:1.2.4:6.3.4 +5.4.2:1.3.1:2.6.1:2.3.3 +1.1.1:4.4.1:1.3.1:5.1.2:2.1.1:1.1.1:1.2.7:4.2.1:1.17.4 +1.1.1:1.2.1:1.1.1:1.13.11:2.6.1:4.4.1 +1.1.1:4.2.3:3.1.6:2.7.2:1.4.1 +1.14.14:2.7.2:2.7.7:1.13.99:1.2.1:2.3.1:1.1.5 +1.1.2:1.1.2:6.2.1:1.13.12:2.7.9 +2.6.1:1.1.1:1.1.1:2.3.1:1.1.1:1.1.1:2.3.1:1.8.4 +2.4.2:2.1.1:2.7.1 +1.3.1:2.3.3:2.3.3:2.7.9:4.1.1:4.1.2 +1.2.1:4.2.3:2.4.2:1.17.4:1.2.4:6.4.1 +5.1.99:9.9.9:1.1.1:2.1.1 +6.3.4:2.3.1:5.4.2:2.5.1:1.1.1:1.13.11 +5.1.3:2.7.7:1.1.1:2.7.1 +3.5.4:1.1.1:4.1.1:4.4.1 +1.14.14:1.1.1:1.1.98:1.4.4 +2.7.9:1.14.14:1.17.4:1.14.14:4.1.2 +9.9.9:3.7.1:3.1.1:2.8.1:1.14.12:2.3.1:4.1.1:4.1.1 +1.14.15:1.2.1:1.1.1:6.4.1 +1.2.1:1.8.5:2.7.4 +1.13.11:2.7.1:2.7.7:6.2.1:2.7.1:4.2.1:1.1.1 +1.1.1:1.14.13:1.13.11 +2.3.1:4.3.1:1.5.8:2.5.1 +3.5.3:2.7.2:1.8.99:3.1.3 +9.9.9:4.1.2:3.1.1:4.4.1:1.5.8:1.2.7:1.3.1 +3.1.2:1.1.1:1.1.3:2.7.1:1.1.2:1.3.1:2.3.1 +1.1.1:5.3.1:2.7.2:4.1.3:1.2.1 +9.9.9:2.8.3:1.14.14 +6.2.1:1.11.1:2.7.1:1.13.11:3.1.3 +5.3.1:4.2.3:5.3.2:1.2.1:1.1.1:2.1.1:4.1.1:5.4.99:1.13.11 +4.2.3:2.3.1:1.3.1:6.3.3:1.2.4:4.1.1:4.99.1 +1.2.4:1.8.7:2.7.7:5.4.2:5.3.1:1.2.1:1.14.16:4.1.1:2.3.1 +1.1.1:2.5.1:1.5.8:2.5.1:2.4.2:3.6.1:2.7.6 +2.7.1:5.3.1:3.1.3:1.14.14:1.1.2:1.1.1:1.1.1:3.1.3:4.1.2:1.1.1 +3.3.2:4.2.1:3.1.2:1.1.5 +1.1.1:1.1.1:5.3.1:5.3.2 +2.1.1:1.2.7:1.2.1:4.1.2:4.4.1:1.2.5 +4.6.1:1.14.13:1.2.1 +1.1.1:1.1.1:1.14.13:1.13.11:3.1.2:1.1.1:1.1.1:2.8.3 +3.1.3:4.1.3:4.4.1:1.1.1:1.14.13:1.2.1:5.3.1 +1.1.2:2.6.1:5.3.1:9.9.9:1.1.1 +4.1.2:5.3.3:1.14.14:2.8.3:4.4.1:1.1.1:1.1.1:2.7.1:4.1.1:1.1.1:4.1.3 +2.4.2:3.1.3:1.1.1:1.1.1:1.1.1:1.14.13 +2.3.1:1.14.11:1.13.11:1.14.14:2.7.1:5.1.3 +1.2.4:6.4.1:3.1.1:1.2.7 +1.14.14:2.3.3:6.2.1:2.3.1:2.7.1:3.3.1 +6.4.1:3.1.1:5.4.2:1.1.1 +2.5.1:2.3.1:1.3.1:1.1.1:2.3.1 +1.1.2:3.3.2:4.4.1:5.3.1:1.1.98:2.6.1:1.1.1:3.1.3 +1.1.3:9.9.9:3.1.3:6.3.5:6.4.1:4.1.3:1.1.1 +2.7.4:1.2.1:1.1.1:1.13.11:2.7.8:2.6.1:1.14.15:2.7.1 +3.5.1:1.1.1:9.9.9:1.1.1:3.1.3:1.14.14 +2.6.1:4.1.3:1.18.1:1.13.99:2.7.7:2.7.1 +9.9.9:4.1.2:6.4.1:1.2.7 +2.3.1:3.1.2 +5.1.3:1.1.1:1.1.1:1.14.13:2.1.1 +2.8.2:1.1.1:1.1.1:1.1.1 +2.1.2:4.2.1:3.1.3:2.8.3 +3.1.1:1.1.1:1.1.1:1.1.1:1.11.1:1.3.1:1.1.1 +1.4.4:6.3.2:3.1.3:2.7.1:3.5.2 +1.1.1:1.1.1:4.2.1:3.1.3:4.1.1:4.4.1:4.1.2 +2.4.2:1.17.3:2.4.1:1.3.8:1.1.1:9.9.9:1.1.5:3.1.3 +1.2.7:1.1.1:5.5.1:1.2.5:1.1.5:1.4.9:1.1.1:1.1.1 +1.11.1:1.8.1:5.3.3:1.1.1 +5.3.1:2.2.1:1.1.1:3.1.3 +4.1.2:1.3.5:2.5.1:2.4.2:5.3.1:1.1.1 +1.1.1:2.3.1:2.1.2:1.2.3:1.2.7:3.1.3:1.2.1:2.4.2:2.3.1 +3.1.4:2.5.1:2.4.2:1.1.1:2.7.1:1.3.5:3.1.3 +2.2.1:4.6.1:1.14.99:1.1.1:9.9.9:1.1.1:3.7.1:4.4.1 +1.13.11:5.4.2:1.1.1:1.1.1:5.1.99:2.3.1:3.1.2:2.1.1:2.7.1:2.3.1 +1.1.1:1.1.1:1.14.14 +1.14.15:3.1.4:2.3.1:1.1.1:1.2.4:2.6.1 +5.1.99:2.8.3 +3.1.3:1.1.1:2.1.1 +1.11.1:1.14.19:4.1.1:4.1.1 +1.2.4:3.1.1 +3.1.2:2.7.1:2.7.7 +1.1.2:2.7.2:1.3.1:1.1.1 +2.3.1:9.9.9:2.7.1:1.14.13:2.1.1:1.2.4 +3.1.3:2.3.3:1.1.1:4.2.1:5.1.99:2.1.1 +2.7.1:1.1.1:2.7.2:2.7.8 +1.2.7:2.5.1:1.3.5:1.1.1:4.3.1:5.3.1 +1.14.11:6.2.1:4.1.2:1.1.1:1.3.5:2.3.1:1.4.3 +1.1.1:4.1.2:3.1.3:2.3.1:4.2.1:1.2.1:2.7.2 +4.2.1:2.7.2:5.3.3:1.13.12:1.1.1:1.1.1:6.2.1 +4.1.1:2.7.1:2.3.1:1.1.2 +2.8.3:3.1.3:4.2.1:4.2.1:4.2.1:4.1.2:4.1.3:1.3.1:1.13.11 +4.1.3:2.7.1:1.1.1:2.7.7:2.7.1:4.1.2:3.1.4:1.2.1:6.3.5:1.14.14:2.3.1:9.9.9:2.6.1:1.1.1:1.17.4:1.1.1 +2.7.4:3.6.1:4.3.1:5.4.2:2.1.1:3.1.3:9.9.9:1.13.11:1.2.4:1.5.3 +2.1.1:6.4.1:2.5.1 +2.7.1:1.1.1 +1.1.1:1.14.99:1.8.4:1.1.1:1.2.1:1.13.11:4.2.1:1.2.7:2.8.3:1.1.1 +4.3.1:2.2.1:3.1.1:2.5.1:1.1.1 +2.7.7:2.1.4:6.3.3:1.13.11:3.1.1:2.3.3:1.1.1:6.4.1:1.1.2:5.4.99:1.14.19 +5.1.3:6.2.1:1.14.13 +1.14.14:5.1.3:1.2.1:9.9.9 +2.6.1:4.2.1:1.1.1 +9.9.9:2.3.1:1.2.1 +1.2.4:6.4.1:4.2.3 +1.1.5:4.1.1:9.9.9:2.5.1:1.1.1 +2.3.3:3.1.2:1.1.1:1.1.1:1.1.1 +2.4.1:1.1.1:3.1.4:2.3.1:5.1.3:9.9.9 +5.3.1:5.1.99 +3.5.4:1.1.1:4.1.1:1.1.1:1.1.1:1.1.1:2.7.7:4.2.2 +2.3.1:1.1.1:1.1.1:2.3.3:1.14.13 +1.5.8:6.2.1:3.5.2:2.4.2:6.2.1:4.1.2:1.5.8:1.13.11 +1.2.1:6.4.1:3.3.1:3.1.1:4.4.1:3.5.4:5.4.2 +1.2.1:1.14.12:5.3.1 +2.7.4:1.4.4:1.14.15:2.6.1:2.7.1 +1.14.14:1.14.14:1.11.1:4.4.1:1.2.5:1.1.1:4.3.1:2.6.1:1.1.1 +2.7.1:5.4.2:3.1.3:4.2.1 +1.14.14:4.1.3:2.3.1:2.4.2:5.4.2 +1.14.11:1.2.4:2.3.3:4.2.1:2.7.1:3.1.1:1.2.3:1.3.1 +2.5.1:1.14.13:6.3.4:3.1.2:2.3.1 +2.7.7:2.7.7:2.7.7:1.1.1:5.3.3 +4.1.1:9.9.9:2.6.1:1.1.1:2.7.1 +2.6.1:5.4.99:2.7.1:1.2.4:1.2.1 +6.2.1:2.7.1:3.1.3 +2.3.3:3.1.3:1.1.1:2.1.2:1.1.3 +4.2.1:2.7.7:4.2.1:4.2.1 +3.5.4:4.2.1:1.1.1:1.1.2:1.14.11:5.3.1:3.1.2:6.3.5:4.1.3:2.7.9 +2.3.1:1.2.1:1.14.16:1.1.1 +1.14.15:1.2.7:1.1.1:1.2.7:4.1.3:1.1.1 +1.1.1:4.2.3:1.13.11:1.14.14:5.3.3:4.2.1:1.1.1:4.2.1:4.99.1:1.18.1 +2.3.1:1.14.99:2.7.7:1.1.1:1.2.7 +1.1.2:2.8.3:4.3.2:1.1.1:4.1.1 +1.1.1:4.4.1:1.17.4:2.3.1 +3.1.3:2.6.1:2.7.8:2.8.3:2.7.7:5.1.2:5.3.3:1.14.14:1.1.1:2.7.1:1.1.2 +2.7.7:4.1.3:1.1.1:1.14.13 +1.1.1:1.1.1:1.2.4:1.2.1 +1.1.1:1.1.1:5.3.3:2.6.1:2.7.2:1.1.1:2.3.3 +1.14.14:1.8.7:1.2.1:2.3.1:3.5.3:1.3.8:9.9.9 +1.1.1:4.2.1:2.5.1:2.3.1:1.8.4:1.16.3:1.1.1 +2.3.1:2.7.7:1.13.11:1.14.14:5.3.1:2.3.1 +3.1.3:1.1.1:2.8.3:1.1.2:2.7.7:1.1.1 +2.8.1:1.1.1:3.1.2 +1.1.1:4.1.2:2.3.1:1.14.15:1.14.11:1.1.1 +1.1.2:2.7.7:5.3.3:1.2.1:1.1.1:2.1.1:4.2.1:1.2.4:1.13.11 +1.2.1:2.7.7:4.4.1:1.14.11 +1.2.7:1.2.1:1.11.1:4.2.1:2.7.1:4.1.1 +1.1.1:1.2.7:2.7.1:4.2.1:1.8.7:1.1.1:4.2.1:2.3.1:2.3.1 +5.99.1:4.2.1:1.2.7:4.2.1:4.3.1 +1.1.2:2.1.2:1.8.3:1.13.11:3.1.3:1.1.1:1.2.1:1.1.2 +2.7.1:4.2.1:5.3.1:3.5.1:1.2.7 +5.3.2:1.2.1:1.1.1 +1.1.99:5.1.3:1.1.1:2.7.8:4.1.2:1.14.14:3.6.1:1.2.1:2.7.1 +2.5.1:1.1.1:1.1.1:4.2.1 +1.1.1:2.7.4:2.7.1:2.8.3:2.7.1:1.2.4 +1.3.8:6.3.4:2.6.1:1.1.1:5.3.1 +1.1.1:2.3.1:4.2.1:1.1.1:6.2.1 +5.3.1:2.7.7:1.1.1:3.1.3:2.7.7:1.4.3:1.2.1 +1.1.1:5.1.3:4.1.1:1.1.1 +4.2.1:4.4.1:4.2.1:2.3.1:4.2.1 +1.1.3:1.5.98:2.6.1:2.7.7:1.1.1 +2.7.4:5.3.1:1.14.13:9.9.9:1.2.4:6.2.1 +5.4.2:1.5.3:1.2.7:1.2.4 +4.1.3:1.2.1:1.4.4:1.1.1:2.7.4 +2.7.7:4.2.1:4.1.1:1.1.1 +3.5.3:2.7.4:2.3.1:4.1.2:1.2.5 +9.9.9:1.17.1:1.2.7:1.1.1:2.7.4:3.6.1 +2.4.2:1.2.4:1.5.3:4.2.1:9.9.9:1.1.99:2.7.1:1.14.14:5.3.1:9.9.9:9.9.9 +4.1.3:4.2.1:1.1.1:1.1.1:2.8.3:3.1.1:5.4.2 +5.4.2:3.1.1:1.1.1:1.1.1:5.1.3:2.2.1:2.1.2 +2.7.1:4.1.2:1.1.98:1.1.1:1.1.1:4.2.1:1.1.1 +1.17.7:3.3.2:1.2.1:1.13.11 +5.1.1:1.17.4:1.1.1:5.3.1:1.1.1:3.1.3 +1.2.1:4.2.1 +1.13.11:1.3.1:5.4.99:1.2.1:3.1.3:9.9.9:1.1.1 +1.14.99:4.2.1:2.3.1:2.7.7:1.1.1 +5.1.2:2.3.1:1.2.4:2.7.1:1.5.8:4.2.3 +1.1.1:2.3.3:2.2.1 +2.6.1:5.5.1:1.1.1:3.1.4:2.6.1 +2.6.1:9.9.9:5.3.3 +2.3.1:2.7.1:2.3.1:2.7.1:5.3.3 +6.3.4:1.14.99:1.1.2:5.3.1:1.1.2:4.4.1:4.2.1 +1.13.99:1.1.1:2.7.1:3.1.3:4.2.3:1.1.1:3.6.1:1.14.13:1.1.1:1.1.1:1.2.1 +1.17.1:5.3.1:3.6.1:2.3.1:1.14.13:1.1.5 +2.8.3:2.7.7:2.3.3:2.3.1:2.7.7:6.4.1:1.2.1 +1.13.11:2.3.1:2.3.1:2.3.3:1.17.3:3.1.1:4.2.1:1.1.1:4.2.3:3.1.3:1.2.1 +4.1.3:1.3.1:1.14.11:1.1.1 +2.7.1:5.1.99:1.13.11:1.14.13:1.8.99 +1.1.1:3.1.1:4.4.1:1.3.1 +1.14.14:2.4.2:2.7.9:2.7.8:2.1.2:3.1.1 +2.5.1:1.1.1:1.1.1:2.7.4:5.4.2:2.3.1 +4.1.2:5.4.2:4.2.1 +1.2.1:2.7.1:2.1.1:4.2.1:1.1.5 +2.3.3:1.14.13:4.1.1 +1.1.1:3.5.1:4.4.1:3.1.1:1.7.3 +4.1.1:2.7.7:6.2.1:2.7.7:3.1.4:3.5.4 +1.1.1:4.2.1:2.5.1:1.2.1:1.3.1:4.4.1:1.14.14:4.2.3:1.1.2 +1.1.1:2.6.1:1.3.1:5.4.2:1.3.7:1.1.1:4.2.1:2.3.1 +5.5.1:2.7.8:1.1.5:2.7.1:1.2.1:1.2.1 +5.3.1:1.13.11:1.1.1:5.4.2:3.5.3:2.2.1:1.2.7 +1.13.11:2.7.1:1.1.1:9.9.9 +5.3.3:2.7.7:2.7.1:1.1.1:3.1.2:2.6.1:2.3.1:1.13.12:3.5.4:1.13.99:3.1.2:1.2.1 +1.1.1:1.1.1:4.1.2:1.14.13:4.1.2:2.3.1:5.3.2:1.1.99:1.13.11 +4.1.2:2.7.1:1.13.11:1.2.1:1.3.5:2.3.1:4.2.3 +2.1.1:1.1.1:1.1.1:2.6.1:1.2.1 +2.6.1:2.1.4:2.7.1:1.1.5:3.6.1:2.1.1:1.14.15:3.1.1:1.13.11 +3.1.3:2.6.1:1.1.98 +1.1.3:5.3.3:5.4.2:2.7.1:1.8.1 +4.4.1:5.3.1:1.14.13:1.1.1:1.1.1:3.1.3 +3.1.3:2.4.2:1.1.1:2.7.1:2.3.3:2.7.8:1.1.1:1.13.99:1.1.1 +1.14.14:4.1.1:1.8.1 +2.3.1:1.14.14:5.3.1:1.14.14:1.1.1:2.8.3:1.14.13:1.1.1:4.2.3:1.1.1:5.1.3 +4.2.1:1.1.1:2.3.1 +1.2.1:4.1.1:1.2.7:2.3.1:5.3.1:6.2.1 +1.1.5:3.6.1:1.2.1:1.2.1 +1.14.18:2.7.1:2.3.1:2.2.1 +3.2.1:1.1.1:1.1.1 +2.3.1:1.1.1:1.1.1:2.3.3:3.1.3 +2.3.1:6.3.4 +2.3.1:1.1.1 +1.2.5:4.3.2:1.5.8:1.5.8 +2.7.4:1.14.16 +4.3.2:1.13.11:1.1.2:2.5.1:1.1.99:4.2.1:1.1.98 +6.4.1:2.3.3:1.1.5:1.3.8:1.1.1 +5.3.1:2.1.2:5.3.3:2.8.3:2.3.1:3.1.3:1.1.98 +2.6.1:1.2.1:6.3.5:4.2.3:1.1.1:2.7.1:2.3.1 +1.5.1:6.4.1:3.1.1:1.2.4 +2.3.3:1.14.14:1.1.1 +2.3.1:2.8.1:1.1.5 +1.1.1:4.2.1 +2.7.1:3.1.2:1.1.1 +3.1.1:2.7.1:2.1.2 +4.1.1:2.3.1:1.14.13:1.2.1:1.1.5:3.1.3 +1.2.7:1.1.1:2.3.1:2.7.4:4.2.3:2.1.2:2.1.1 +3.6.1:2.3.1:1.1.1:6.2.1:2.1.2:3.6.1:2.7.7:1.2.1 +2.7.1:4.2.3:2.3.3:1.1.1:9.9.9:1.2.1:2.1.2:1.2.1:1.14.15:4.2.1 +1.1.1:3.1.6:4.2.1:5.3.1:1.1.1:3.6.1:1.14.13 +5.3.1:2.3.1:1.13.11:4.1.3:2.7.1:2.7.7:2.7.8:1.1.1:2.1.1 +1.1.1:1.1.1:9.9.9:5.3.1:2.7.7:1.13.11:2.3.1:1.1.1 +1.1.1:4.1.1:4.1.2:1.2.7:2.2.1:2.7.1:1.8.4:1.2.4 +2.7.7:2.6.1:1.14.14:2.1.2:1.4.3 +4.2.1:2.3.1:2.1.1:1.1.1 +1.13.11:2.3.1:1.14.13 +1.1.1:1.1.2:1.1.1:1.8.1 +2.7.8:2.1.1:1.2.1 +2.8.3:1.1.2:1.1.1:1.5.8 +2.6.1:2.7.7:1.1.3:2.3.1 +4.1.1:4.2.1:1.3.5:3.1.3:1.1.1 +2.1.4:1.1.1:3.5.4:1.2.4 +2.7.1:2.3.1:4.1.1:2.7.1:1.1.98:6.3.5:1.14.17 +2.7.1:1.1.99:2.8.3:1.1.1:1.3.5:1.1.2 +1.2.1:2.5.1:3.1.3:1.1.1:2.7.8:1.1.1 +3.1.3:1.1.2:1.14.18:2.3.1:4.1.1:2.3.1:3.1.2 +5.4.2:6.4.1:1.1.1:4.2.1:1.1.1:2.7.6 +2.7.1:2.7.1:4.4.1:1.1.99:4.2.3 +2.3.1:5.3.1:3.1.2:4.3.1:1.13.11 +6.2.1:1.1.1:2.3.1:1.8.1:9.9.9 +9.9.9:1.3.8:2.8.3:4.1.3:3.1.2:1.17.4:9.9.9 +2.3.1:2.3.1:5.1.3:1.1.1 +1.13.11:4.4.1:1.3.98:3.1.3:5.1.3:4.1.2:5.4.2:2.5.1:1.14.14:1.18.1:6.3.4 +4.2.3:2.6.1:2.8.3:1.1.1:2.3.3 +3.1.4:1.8.4:2.3.1:4.2.1:2.3.1:4.1.2:2.6.1 +2.3.1:2.6.1:2.7.1:2.3.1:1.17.1:4.1.2:1.13.11:2.3.1 +9.9.9:1.14.13:1.13.11:2.2.1:3.1.1 +2.2.1:2.7.1:1.14.11:4.1.2:3.1.2 +4.2.1:1.3.1:2.3.1:5.1.1:4.1.1:2.7.1 +9.9.9:1.14.13:1.1.1:2.4.2:1.1.1:1.14.15:4.2.3:3.1.2:2.7.7:5.3.1:2.7.1:1.13.11:9.9.9 +1.1.1:2.3.1:2.5.1:2.5.1:1.3.1:2.7.4:1.11.1 +2.2.1:1.1.1:1.2.4:4.2.1 +3.1.3:4.3.1 +3.1.1:1.14.14:1.8.4:3.1.3:1.1.1 +1.1.1:2.3.1:3.5.4:9.9.9 +1.2.1:4.2.1:2.5.1:1.2.1:6.4.1:1.14.19 +4.2.3:3.1.1:2.6.1:1.14.11:3.1.3:2.7.1:1.1.3:2.6.1:1.11.1:2.6.1:4.2.1 +1.3.1:1.1.1:4.1.3:1.14.14:2.3.1:2.6.1 +2.3.1:3.5.4:2.7.7:3.1.4:4.1.1 +6.4.1:1.1.5:4.2.3:2.7.1:1.14.14 +1.14.19:3.1.3:5.4.2:6.3.3:2.6.1:1.2.1 +1.14.14:1.13.11:1.14.18:5.3.2:3.1.3:4.4.1 +3.5.4:1.14.14:2.3.1 +2.1.2:5.4.2:1.1.1:3.5.3:2.1.1:2.7.7 +1.4.4:2.7.7:3.5.1 +1.13.11:2.3.1:3.1.3:1.8.4:2.1.1:1.1.1:1.13.11 +2.6.1:1.3.99:2.3.1:1.14.14:3.6.1:4.6.1:1.1.1:4.1.2 +2.5.1:4.2.1 +1.2.5:1.2.1:1.17.1:1.14.15:1.5.8 +2.3.1:3.1.3:4.4.1:2.1.2:1.14.14 +1.2.1:1.14.13:6.2.1:1.3.1:2.6.1:5.5.1:2.7.1 +4.2.3:2.3.3:6.3.4:4.1.3:4.1.1 +2.7.1:2.8.3:2.7.1:2.7.1:2.7.1:1.1.1 +1.1.2:2.5.1:2.6.1:2.7.2:2.7.1 +1.17.3:4.1.1:1.2.1:5.1.99 +4.2.1:1.1.5:4.99.1:1.14.15:1.1.1 +4.1.2:1.1.1:1.1.1:2.1.1:1.1.1 +5.3.1:1.1.1:1.1.5:1.1.1:1.2.4 +5.3.2:4.1.1:1.14.15:5.3.3:1.1.1 +9.9.9:1.1.1:4.2.3:5.4.2:1.13.11:4.2.1:3.1.2 +3.5.3:1.3.8:9.9.9:1.1.2:2.7.1:2.7.1 +1.14.11:1.1.1:2.3.1:2.8.3:5.4.2:5.1.3:2.3.1 +1.14.14:4.2.1:1.2.1 +1.1.1:1.2.1:6.3.5:2.3.1:6.2.1 +2.7.7:4.2.1:1.2.7:1.14.15 +1.17.1:1.1.1:1.1.1:1.2.4 +4.1.1:2.7.1:2.7.6:3.1.4:2.7.1:1.1.1 +2.6.1:2.7.7:1.1.1:1.14.13:3.5.1:4.4.1:4.3.1:1.1.1:1.1.2:2.7.7:5.1.3 +1.1.1:4.2.1:4.1.2:1.1.5:1.13.12 +5.3.3:2.3.1:2.1.1 +2.7.1:1.1.1:1.2.1 +4.2.1:9.9.9:5.3.1:5.4.2:1.3.5:2.3.1:6.3.5:4.2.1 +6.3.2:1.14.14:1.14.13 +4.1.2:2.7.4:3.1.3:1.1.1:1.1.5:1.3.8 +1.13.11:1.13.11:9.9.9:5.1.3:4.2.1:2.7.7:4.3.1 +4.2.1:1.14.13:1.13.11 +1.2.1:1.2.1:1.2.1:2.8.3 +1.1.1:2.4.2:5.3.1:2.7.1:6.2.1:1.1.1:1.1.1:4.2.1 +1.1.1:2.7.9:2.3.1:5.1.3:2.3.1:1.5.8 +4.4.1:1.2.1:4.4.1 +2.6.1:1.1.5 +2.3.1:1.3.1:5.4.99:2.3.1:4.2.1 +1.1.5:2.7.7:4.1.1:1.1.1:4.1.1:1.14.12:3.1.4:1.14.16:1.1.1 +4.3.1:1.1.1:5.4.2:3.1.4:1.2.1:1.2.1 +1.2.1:1.1.2:1.1.1 +1.2.4:1.2.5:1.1.1:4.2.1 +5.3.1:4.4.1:9.9.9:2.3.1:4.2.1:1.4.3:3.1.2:4.1.2 +1.1.1:4.4.1:2.3.1:1.2.1:5.4.2:1.1.2:1.1.1:3.1.3 +1.1.1:6.3.3:3.1.1:1.13.11 +6.2.1:3.7.1:3.5.1:2.6.1:4.2.1:2.7.6 +1.1.1:3.5.1:1.1.1:3.1.1 +5.4.2:1.14.13:6.4.1:4.1.1:1.1.98:1.14.13:4.3.1 +4.1.3:9.9.9:2.4.2:2.7.1:1.14.99:1.2.7 +3.1.1:2.1.1:1.1.1:4.1.1:1.1.1:1.14.11 +4.2.3:1.1.1:3.5.1 +1.13.12:1.14.11:1.8.1:3.1.4:4.2.1:6.4.1:2.7.1:9.9.9:2.1.4:5.1.3 +1.14.13:1.1.1:1.1.1:1.14.16:1.1.1:2.7.1:3.1.3:6.2.1 +6.2.1:1.1.2:4.1.2:4.1.2 +1.14.11:1.1.1 +1.1.1:1.2.4:2.7.1:1.1.1:1.1.1:1.4.4 +9.9.9:2.3.1:1.17.7:2.7.8:3.1.1:3.1.3:2.7.1:1.5.1:2.3.1:1.1.1 +1.1.1:4.6.1:5.4.2:5.3.3:2.5.1:4.1.2:1.13.99 +5.5.1:4.1.2:3.6.1 +2.3.1:1.1.1:2.6.1:2.7.1 +1.1.5:1.2.1:4.2.3:2.7.7:3.5.1:2.7.1 +2.6.1:3.1.3:3.6.1 +2.4.2:1.1.5:1.8.4:1.1.2:4.4.1:1.2.4:1.1.1:1.2.1:1.2.7:1.1.1:2.4.2 +1.2.1:4.2.1:2.7.1:1.13.11:1.1.1 +1.1.99:4.4.1:2.8.3:2.3.3:1.1.98:1.1.1:3.1.3:9.9.9 +1.1.1:1.1.1:3.2.1:2.3.1:2.3.1:3.5.1 +1.1.1:1.1.1:2.3.1:1.8.1:4.2.1:3.1.3 +1.5.8:1.1.1:2.7.7:1.13.11:1.1.1:4.1.1:3.1.3:1.17.7 +1.14.13:1.1.1:3.1.1:1.1.5:4.3.1 +3.1.3:1.1.1:2.3.1:2.7.7:2.4.1 +2.3.3:1.1.2:3.1.3:2.3.1 +4.1.3:2.7.1:1.2.1:1.13.12:1.1.1 +1.3.1:4.1.2:1.1.1:3.1.5:1.1.1:1.14.14 +2.1.2:1.14.14:2.7.7:2.3.1:4.1.3:1.2.1 +5.5.1:2.7.1 +2.7.1:2.1.1:6.2.1:4.1.2:1.14.14:5.3.3:2.7.1:1.5.8:4.2.1 +2.7.2:2.3.1:2.7.1:1.14.99 +1.14.13:1.2.1:4.1.2:1.1.1:5.3.1:3.7.1:5.3.1 +1.1.1:1.2.1:2.7.1:2.7.6:4.2.1:1.1.1 +3.1.2:1.2.4:2.1.1:9.9.9 +2.4.1:4.4.1:3.1.3:4.1.1:1.1.1 +5.4.2:1.2.1:4.1.2 +1.1.1:5.1.1:1.1.1:2.6.1:1.13.11:1.1.1 +3.1.4:4.2.1:1.1.1:1.1.2 +2.7.1:2.1.2:6.3.5:3.5.1:9.9.9 +4.2.1:5.1.3:2.8.3:3.4.11:1.13.11 +4.2.1:2.6.1:2.7.2:1.1.1:6.4.1:4.2.1 +1.2.7:1.1.1:1.1.1:1.1.1:1.1.1:1.1.1:2.7.1 +4.2.1:9.9.9 +5.4.99:1.13.11:5.3.1:1.13.11 +3.5.2:3.5.1:2.3.1:3.3.1:2.6.1:1.1.99:5.4.99 +2.3.1:2.7.4 +5.1.3:4.1.2:2.7.4:1.1.1:4.3.1 +2.3.1:2.3.1:4.2.1:6.4.1 +4.3.1:2.7.1:3.1.3 +6.2.1:2.1.2:1.2.1:4.4.1:1.2.1:4.1.3:2.7.2:4.2.1:4.2.1 +4.1.1:1.2.7:1.14.13:4.1.2:1.2.4:2.6.1:2.4.2:2.2.1 +2.3.1:1.1.2:2.7.7:3.5.4:5.3.1:5.3.1 +4.1.2:1.1.1:1.1.1:3.1.1:5.5.1 +4.1.3:4.2.1:5.5.1:1.1.1:4.1.2 +1.1.1:1.1.3 +6.3.4:1.1.1:2.7.1:4.2.1:2.3.1 +1.1.1:1.1.5:1.2.7:3.5.99 +1.2.1:3.5.2:1.3.1:2.7.1 +2.7.7:1.1.1:1.1.1:1.2.1:2.3.1 +2.8.2:2.7.8:1.14.14 +1.1.99:1.2.1:3.1.1:1.2.7 +4.2.1:2.6.1:4.2.1:4.2.1:9.9.9:2.7.1 +5.3.2:4.2.1:5.3.1 +4.2.1:2.1.1:2.3.1:4.1.1:4.2.1 +2.5.1:2.3.1:1.3.1:2.2.1 +5.1.3:4.2.1:1.13.11:1.1.1:2.7.7:2.5.1:1.14.13:4.1.2:1.11.1:4.2.1:4.1.2:5.3.3 +2.8.3:2.7.1:6.2.1:3.1.1:5.3.1:1.13.12 +4.6.1:6.2.1:4.2.1:4.2.1:4.6.1:3.7.1:2.5.1:1.1.1:1.1.1 +3.5.4:5.3.3:2.6.1:2.3.1 +1.1.1:2.1.1:1.1.1 +4.2.3:2.3.1:3.1.3:2.3.1 +1.14.15:1.3.5:6.3.4:4.1.2:1.14.13:1.13.11:2.4.2 +4.2.1:1.1.1:2.7.4:2.1.1:1.5.1:2.3.1:1.14.14 +1.1.1:1.2.1:4.2.1 +4.1.1:2.7.7:2.6.1:4.1.2:1.1.1:4.3.1:2.6.1:1.2.1:4.1.3 +5.3.1:1.1.1:4.1.3:4.1.1:1.13.11:4.1.1 +1.5.1:2.7.1:2.1.2:1.1.1:4.2.1:1.1.1:1.2.1 +1.17.1:2.7.7:2.5.1:1.2.1:2.1.2 +1.17.1:1.1.1:2.7.7:1.14.14:2.1.2:2.7.1:2.6.1 +2.1.2:1.2.5:4.2.3:3.1.3:3.1.3 +1.1.1:2.3.3:2.7.1:1.1.5:4.2.1:1.1.1:3.1.1:3.1.3:1.14.14 +9.9.9:1.1.1:1.14.14:2.3.1 +2.4.2:3.1.3:3.1.1 +2.7.7:2.6.1:4.2.3:2.3.1:9.9.9:1.1.1 +1.1.5:6.2.1:3.5.2 +6.4.1:3.1.2:1.1.1 +6.3.2:1.1.2:1.14.14:4.1.2:1.1.1:1.1.2:1.1.2 +1.3.8:2.6.1:2.3.3:1.3.1:1.1.1:4.2.1:1.2.1 +1.14.12:3.1.3:2.3.1:2.3.3:1.1.1:1.1.2:1.5.8:1.1.1 +4.2.1:1.1.1:1.1.1:1.1.1 +4.2.3:6.2.1:2.7.7:4.1.1:2.1.2:1.13.12 +1.14.13:4.1.2:4.1.3 +2.3.1:2.7.1:1.1.1:6.2.1:5.3.1:1.5.1 +1.1.1:1.1.1:2.7.1:2.7.3:2.7.1 +1.14.15:5.4.99:4.3.1:3.2.2:2.5.1:1.1.1 +3.1.3:1.13.11:1.13.99:3.1.2:1.1.98:5.4.2:2.7.1 +1.14.11:2.7.1:3.1.3:9.9.9:2.1.1 +3.1.3:1.3.1:1.1.1:1.1.1:2.3.1:4.1.3:4.1.1 +1.11.1:5.5.1:2.1.3:4.1.3:4.2.1:5.3.1:1.1.1:6.3.2:1.3.7 +1.14.13:3.1.1:1.1.3:4.2.1:1.1.1:3.6.1:2.1.1 +4.2.1:9.9.9:5.3.1:2.7.4:2.7.1 +1.1.99:9.9.9:5.4.2:2.7.9:4.1.1:2.7.4:2.7.1 +3.1.3:2.7.7:1.1.1:2.6.1:1.1.1:4.2.1:5.4.2:4.2.1:1.1.5:4.2.1 +3.1.4:4.2.3:1.2.4 +2.7.1:1.1.1:4.2.1:2.3.1:1.1.1:2.7.1 +3.1.4:4.1.2:4.2.1:6.3.4:4.1.2 +2.3.3:3.1.3:1.1.1:4.4.1:4.2.3:5.5.1:2.3.1 +6.4.1:5.1.3 +2.7.7:2.7.7:3.6.1:1.14.12 +9.9.9:5.4.2:1.14.18:5.3.1 +1.18.1:5.5.1:1.1.1:2.8.3:1.5.3:1.1.2:1.1.1:2.7.1:1.1.1:4.4.1:1.1.1:1.8.1:1.13.12 +5.1.3:2.7.7 +5.1.3:6.4.1:1.1.1:3.6.1 +3.5.4:4.2.1:4.1.2:1.2.1:4.2.1 +4.2.1:5.4.2:5.3.1:1.1.1:1.13.11:2.1.2 +1.1.1:1.2.1:3.1.2:1.1.1 +1.2.4:1.1.1:3.1.4:3.6.1:5.3.2 +4.1.2:5.3.1 +1.13.11:1.14.12:4.2.1 +2.1.2:4.4.1:1.1.1 +2.6.1:6.3.4:2.7.1:3.6.1:1.8.1 +1.2.1:4.2.1:1.1.1:4.2.1:5.3.3:2.1.2 +2.1.4:1.8.7:1.1.3:5.3.1 +1.1.1:1.1.1 +1.1.1:1.1.1:1.1.1:1.14.13:2.4.2 +2.4.2:1.1.5:1.2.1:5.3.2:1.5.8:2.1.3:1.3.1 +9.9.9:1.1.1:5.4.99:1.1.1:1.1.1:4.2.1:4.1.2:2.3.3:1.2.1:1.14.14 +2.3.1:3.5.1:4.1.2:2.7.1 +1.1.1:4.3.1:4.2.3:1.1.1:2.3.1 +2.1.1:2.6.1:4.2.1:3.7.1 +1.1.1:1.1.1:1.1.1 +2.3.1:5.3.1:2.7.8:4.4.1:2.7.1:1.14.13:6.4.1:1.2.4:2.2.1 +1.1.99:6.3.4:3.6.1:2.6.1:1.5.8:1.2.7 +2.1.2:2.4.2 +1.17.3:1.1.1:1.1.1:3.5.4:3.1.3:2.8.3 +1.2.4:1.1.1:3.6.1 +1.1.1:2.3.1:5.5.1:1.1.1 +4.4.1:3.1.3:1.1.5:1.14.19:2.6.1:1.1.1:1.1.1:1.2.1:2.7.1:2.7.7 +4.2.3:2.7.2:2.3.3 +2.7.1:1.3.5:6.3.5:2.1.1 +2.1.3:3.1.2:1.1.1:5.5.1 +4.1.3:4.2.1:1.1.1:1.3.1:2.3.1:9.9.9 +4.2.3:2.1.2:2.1.2:1.1.1:1.17.1:5.4.2:5.3.1 +1.14.18:9.9.9:1.3.1:1.14.11:1.1.1:4.2.1 +1.2.5:2.7.6 +2.7.7:1.1.1:1.1.1:1.2.1:1.1.5:6.2.1 +1.13.11:1.1.1:2.5.1 +4.2.3:1.1.1:3.1.3:2.8.3:1.5.1:2.7.4 +1.1.1:1.2.7:1.1.1 +4.3.2:2.3.1:1.1.1 +1.1.1:4.1.2:3.5.99:1.1.1 +2.5.1:6.2.1:4.2.1:1.2.3:1.1.1:2.1.1:5.3.1:3.5.1:2.7.7 +3.1.3:2.7.7:4.2.1:1.3.1:3.5.2:2.7.7 +2.7.7:2.3.1:3.1.2:6.2.1:4.2.3:1.1.98:1.1.1 +2.8.3:4.3.1:2.1.2:2.4.1:9.9.9:3.1.3 +4.2.1:4.2.3:4.1.3:1.14.11:1.1.1 +2.6.1:9.9.9:2.7.1:1.2.4:1.4.4:3.1.2:2.1.1 +3.1.2:1.1.1:1.2.4:1.1.5:2.3.1:2.7.1:1.1.1:1.1.99:2.3.1:6.4.1:1.2.4 +1.2.7:3.6.1:1.1.1:1.11.1 +2.3.1:2.3.1:1.13.11:2.7.1:2.7.7:1.1.1:1.1.1:2.1.1 +2.1.1:4.2.1:2.7.7:1.1.98:5.1.99:1.14.14 +2.1.2:3.5.4:6.2.1:1.1.1:1.14.13:3.1.1 +1.5.8:4.4.1:3.7.1:3.1.3:1.1.5:1.5.1:1.1.1:3.7.1 +4.1.1:1.8.7:1.2.1:4.1.3 +1.1.1:2.6.1 +1.1.1:4.1.1:3.1.3:1.1.1:6.4.1:4.4.1 +2.3.1:1.14.14:1.17.1:1.1.1 +5.3.1:2.7.1:3.1.2:2.7.7:4.2.1:5.3.1:4.2.1:9.9.9:6.2.1:2.3.1:1.1.1 +2.7.2:2.4.2:5.4.99:1.14.18:2.3.3 +4.2.1:2.6.1:1.13.11:4.1.1 +2.6.1:2.7.1:3.6.1:5.1.2 +1.13.11:1.2.1:2.7.7:1.1.1:1.2.4:4.1.2:3.5.1 +3.1.3:1.1.1:1.1.1:1.2.1 +1.1.1:3.1.3:1.14.14:6.3.5 +1.1.1:1.1.98:1.1.1:1.1.1 +4.2.1:4.2.3:1.1.1:1.2.4 +4.2.1:5.3.1:3.6.1:1.2.4 +4.2.3:4.1.1:4.2.1:1.1.1:3.6.1:2.8.1 +3.5.3:5.3.3:4.2.3:4.2.1:5.3.3:2.3.1 +1.1.1:1.1.1:2.3.3 +2.3.3:1.13.11:2.6.1:1.1.2:1.2.7:2.3.1 +3.7.1:3.5.1:2.8.3:3.2.2:6.3.5:2.7.8:5.3.1:5.4.2:1.1.2 +1.14.14:5.5.1:5.3.3:3.5.4:1.14.13:3.6.1:1.1.1:2.7.1:6.4.1 +2.8.3:1.1.1:9.9.9:5.3.1:9.9.9:3.5.4:3.1.2:2.6.1 +5.1.3:1.17.1:2.7.1:4.1.3:2.3.1 +1.1.5:5.3.2:2.1.2:9.9.9 +1.1.1:1.1.2:1.14.11 +1.1.1:1.2.1 +1.1.1:2.1.2:4.6.1:1.14.99:1.1.1 +2.3.1:1.1.1:2.6.1:2.7.1:1.1.1:1.5.8:1.14.16:2.6.1:2.1.2 +3.1.3:2.8.3:4.2.1:1.1.1:1.18.1 +2.7.1:2.5.1:9.9.9:3.2.1 +1.14.13:1.2.1 +4.2.1:1.1.1:6.2.1:1.2.1:5.4.2 +3.5.4:1.1.1:2.1.2:1.1.5:1.1.1:1.2.1 +1.14.14:3.1.3:2.1.4:2.3.1:1.1.1:1.8.3:3.6.1 +1.13.11:3.1.2:2.5.1:4.1.1:1.1.1:1.1.1:3.7.1:1.1.1 +5.4.2:2.4.2:4.2.1:6.3.4:3.6.1 +2.6.1:2.1.1:1.1.1 +2.1.1:5.1.3:1.8.4:3.5.3 +4.3.3:2.3.3:1.3.1:4.2.1:2.3.1:4.1.1 +9.9.9:1.17.1:5.3.1:2.1.1:5.3.1:1.13.11:2.7.7:1.1.99:1.13.11 +4.4.1:4.1.1:1.1.1:1.1.1:2.6.1:4.4.1:3.5.1 +5.4.99:1.14.14:1.2.4 +1.1.1:4.1.2:3.1.3:2.7.8:1.1.1:1.1.1:6.2.1 +1.1.98:3.1.3:6.3.5:2.2.1 +4.2.1:4.3.1:2.7.7:5.5.1 +1.1.98:3.6.1:5.3.99:5.5.1:1.13.11:2.7.1 +1.14.14:2.3.1:2.3.1:4.2.3:1.1.1:2.6.1 +2.1.2:2.7.2:1.13.11:2.7.1 +6.4.1:2.1.4:2.7.1:1.14.12:1.14.11:2.3.1:6.2.1:2.3.1:4.1.3:2.7.1:3.1.3:1.1.1 +4.2.1:1.1.5:1.1.1:4.3.1:4.2.1 +2.3.3:2.7.1:1.2.4:3.2.2:5.1.3:2.4.2 +4.1.1:2.7.4:4.2.1:1.1.99:1.1.1:2.3.1 +5.4.2:1.14.15:4.4.1:5.1.2:3.3.1:9.9.9:3.7.1:1.1.1:4.1.1:1.8.1:2.3.1:1.14.13:2.7.2:2.5.1 +9.9.9:2.7.1:1.1.1 +2.1.4:6.2.1:5.4.2:2.7.1:1.1.1:2.7.7 +1.1.1:1.1.1:5.4.2:2.7.1:1.14.15:2.3.3:1.1.1 +1.2.7:2.5.1:1.2.4 +5.3.3:2.7.1:3.5.1:1.3.5:2.7.7 +1.14.11:2.7.1:1.1.1:1.13.11:1.1.1:4.1.2:1.1.1 +4.2.1:2.7.7:1.2.7:4.2.1:1.1.1:3.1.4:1.1.1 +2.6.1:1.13.11:1.1.2:1.2.5:2.4.2:9.9.9:2.3.1:3.6.1:4.3.1 +1.1.1:1.14.16:4.1.3:4.1.1:5.3.1 +4.1.2:4.2.1:5.3.3:1.8.1:1.1.1:4.2.1:1.1.1:1.8.1 +2.7.7:2.7.1:4.1.1:5.4.2:2.4.2:1.1.1 +2.3.1:1.5.8:1.1.1:3.1.4 +1.3.1:2.3.1:4.3.1:3.6.1:2.7.9 +2.8.3:2.2.1:5.4.99:3.1.1:1.1.1 +1.8.2:6.2.1:1.1.1:2.7.2:1.3.1:1.1.1:3.5.3:1.1.1:1.13.11:2.8.3 +4.2.1:2.3.1:2.6.1:4.1.2:2.3.1:4.2.1:2.5.1:1.14.14 +1.17.1:1.13.99:2.1.2 +2.7.1:1.17.1:2.7.1:3.5.4:3.1.1:3.1.3 +1.1.1:1.1.1:2.3.1:1.1.1 +6.2.1:2.1.1:3.2.1:4.1.2:1.1.1:9.9.9 +1.1.1:1.2.1:1.1.1:4.1.1:1.1.1:1.1.1:2.3.1 +3.5.2:3.6.1:9.9.9:1.13.11:2.7.1:1.1.1 +2.7.1:1.17.1:1.1.1 +2.3.1:1.5.1:4.2.1:4.1.1:2.8.2:2.1.2:5.4.2:6.2.1 +2.3.1:2.7.2:3.5.1:2.3.1:1.1.98:2.7.2:2.2.1:1.1.1:4.1.1:1.13.11 +1.1.1:1.2.1:1.1.1:3.1.3:2.3.1:2.7.7 +4.3.1:2.7.1:1.2.7:2.4.2:2.3.1:5.4.2 +1.14.99:1.1.1:2.3.3:2.7.1 +3.1.2:4.2.1:2.1.1 +4.2.1:3.5.1:1.1.1:1.1.1 +5.5.1:5.4.2:1.1.1:1.13.11:1.1.1:1.2.5:1.1.1:1.17.1:6.4.1:5.3.1 +1.11.1:5.3.1:5.3.1:1.1.1:1.1.1:2.3.1 +2.3.3:6.2.1:1.8.4:1.14.14 +1.1.1:1.8.1:1.1.99:1.14.11:2.8.3:4.1.1:1.14.14:1.1.1:9.9.9:4.2.1 +2.1.1:1.1.5:2.8.1:4.2.1 +1.2.1:1.1.1:3.6.1:1.14.13:1.1.2:1.17.7 +1.14.14:1.13.11:1.1.2:6.4.1:2.7.4:1.1.1 +1.2.4:2.7.9:4.1.2 +1.1.2:1.2.1:1.1.1 +4.1.2:4.2.1:1.1.2:2.6.1 +5.5.1:1.14.14:1.2.1:1.1.1 +1.1.1:1.14.14:5.4.2:4.4.1:2.6.1:1.1.1:1.2.1 +1.2.7:3.1.1:2.1.2:2.1.1:5.3.1:1.1.1:2.1.3:1.1.98 +2.5.1:1.1.2:2.6.1 +2.7.1:2.3.3:2.7.1:1.14.11 +2.7.1:2.3.1:1.17.99:2.7.7 +2.3.3:2.6.1:1.14.13:1.14.14:1.1.1:4.1.3 +1.1.98:1.5.1:1.1.1:2.7.1:1.1.1 +1.13.99:2.3.1:2.8.3:9.9.9 +1.1.99:1.1.99:4.4.1:2.7.7:6.3.4 +2.6.1:1.1.2:2.7.1:3.1.1:3.6.1 +4.2.1:3.1.4:9.9.9:4.2.1 +1.2.1:3.1.1:5.3.1:2.6.1:4.1.3:1.1.1:1.2.1 +5.1.3:1.1.1:1.1.1:2.3.3:3.1.3 +3.3.2:5.3.99:5.1.3:2.1.1:2.7.2:2.3.1:3.2.1:1.1.1:1.14.13 +1.1.1:1.1.2:2.2.1:1.1.5:6.4.1:1.1.1:5.3.1 +1.1.1:5.3.2:2.7.1:1.2.7:3.5.4 +1.1.1:2.6.1:1.1.1:1.2.5 +4.1.3:4.2.1:2.2.1:1.2.5:4.1.2:1.1.1 +4.2.1:1.1.1:2.3.1:1.2.7:4.4.1 +6.4.1:5.3.3:4.2.3:4.1.3:2.8.3 +1.14.14:1.2.1:5.5.1:4.1.1:4.2.1 +4.2.1:1.2.5:4.2.3:1.1.1:2.3.1:1.1.2:2.7.1 +2.3.1:1.2.1:3.5.3:2.7.1 +1.1.1:5.3.2:2.6.1:1.3.1:4.4.1:1.5.8 +1.2.7:1.1.2:2.3.3:2.6.1:1.1.3:2.6.1:2.3.3:2.3.3 +2.6.1:1.1.1:1.1.1:3.6.1:3.5.4:4.3.3:1.1.5:2.7.7:4.1.2:1.1.1 +1.1.1:1.5.8:1.14.15:2.4.2:5.4.2:2.3.1:2.7.1 +2.3.1:1.2.4:1.13.11 +2.1.1:5.3.1:2.8.3:5.1.2:1.1.1:5.5.1 +5.3.1:2.6.1:4.1.1:2.3.1:1.1.1:4.1.1:2.8.3 +5.3.1:2.4.2:1.18.1:4.1.1:2.1.2:2.1.1 +1.1.1:4.1.2 +3.1.2:1.2.1:9.9.9 +1.2.1:2.7.7:2.7.7:3.1.2:2.7.1:4.1.2:2.7.7 +3.5.1:2.3.1:2.1.1:1.2.1 +1.1.1:2.7.8:2.6.1:1.1.1 +9.9.9:1.1.1:5.1.1:2.7.1:5.4.99:1.1.1:2.7.1:1.1.1 +2.3.1:1.2.7:3.5.4 +1.13.11:3.1.2:1.1.1:5.3.1:1.1.3:2.3.1 +2.6.1:1.1.1:2.6.1:3.6.1:5.4.2 +6.4.1:2.8.3:9.9.9:1.3.5:1.14.11:4.1.3:2.1.2 +2.6.1:2.7.7 +1.1.2:2.7.1:3.1.4:6.4.1:1.1.1:1.1.1 +3.1.2:2.3.1:9.9.9:1.1.1:4.2.1:1.1.1 +2.3.1:2.3.1:2.7.7:6.4.1:2.3.3:1.1.1 +1.14.19:2.6.1:1.3.98 +1.13.11:2.3.3:4.2.1:1.8.1:5.1.1:1.1.1 +1.1.1:1.14.15:2.6.1:3.1.2:1.1.2:2.6.1 +4.3.1:2.3.1:5.3.1:1.1.98:1.5.3 +2.6.1:2.1.1:1.14.14:2.7.7:2.1.1:4.4.1 +1.1.1:2.3.3:1.17.1:2.4.2 +1.1.1:1.13.99:2.3.1 +1.13.11:6.4.1:5.4.99:1.1.5:1.1.1:1.3.5 +1.1.1:3.6.1:9.9.9:1.14.14 +1.5.8:2.7.1:5.3.1:1.1.1:4.2.1 +5.3.1:1.4.4:1.1.1:2.7.1:1.5.8:2.8.3:1.14.14:3.1.3:1.1.98:1.1.5 +2.7.1:2.3.1:2.3.1:1.5.1:1.4.3:3.5.4 +1.1.1:4.2.1 +3.1.1:3.2.1:1.14.14:1.11.1:3.7.1:2.4.2 +3.1.2:4.2.3:1.14.14 +4.1.1:1.14.15:5.3.1:1.5.8:1.1.1 +6.2.1:1.1.1:2.6.1:1.1.1:1.14.14:4.2.1 +3.1.1:2.7.4:5.1.3:1.2.1 +2.1.2:1.1.1:4.1.3:9.9.9:1.1.1:2.7.1 +1.1.1:2.8.3:2.6.1:4.2.1:2.7.7 +9.9.9:2.2.1:4.2.1:4.2.1:2.7.1 +2.7.7:2.7.1:2.3.1:2.7.1:2.6.1:1.2.7:9.9.9:3.5.1:2.1.1:2.7.4 +2.3.1:1.1.1:1.14.13:3.5.3 +3.5.3:1.11.1:1.3.1:2.5.1:4.1.1:2.4.2 +2.8.3:3.1.1:1.1.1:1.2.1 +2.5.1:2.3.1:2.7.1:2.3.1:1.14.15:1.1.2:2.5.1:1.1.1 +1.1.1:4.2.1:2.7.1:2.3.1:1.2.7:4.4.1 +1.14.14:2.3.1:6.4.1:1.1.99:5.4.2:1.1.1 +1.1.1:4.1.3 +1.4.3:1.8.1:3.5.1:9.9.9:1.2.7:2.3.1:9.9.9:5.4.99:1.2.1:1.1.2:4.1.2 +1.2.7:2.7.1:1.3.98 +1.7.3:1.1.1 +3.1.3:1.1.1:1.2.7:1.3.1:4.1.3 +1.2.1:4.1.3:1.14.13:4.1.1 +3.3.1:4.1.2:1.3.3:2.1.1:1.1.1:5.4.2:1.1.2:2.3.1:2.7.1:1.13.11 +2.6.1:6.4.1:1.2.1:1.8.5:1.14.14 +3.5.4:4.2.1:2.6.1 +1.1.1:9.9.9:6.2.1:2.7.1:1.14.13 +2.6.1:9.9.9:2.7.1:4.2.1:1.1.1:3.2.1 +4.1.3:1.8.4:3.1.1:1.14.12:2.3.1:1.1.1:1.14.14:1.1.1 +1.1.1:2.3.3:2.6.1:6.3.4:1.4.3:1.1.1 +1.14.14:1.1.1:3.1.2:2.3.1:4.3.1 +1.14.13:3.6.1:1.8.1 +1.14.15:1.1.1:2.3.3:6.3.5:1.1.1 +4.4.1:9.9.9:2.1.4:1.1.2:3.4.19:1.14.14 +4.4.1:1.1.1:5.99.1:1.1.1 +9.9.9:5.3.1:1.11.1:1.5.8:5.5.1 +1.14.16:1.18.1:1.1.1:4.2.1:1.13.11:6.2.1:1.3.1:5.3.3:4.1.2:4.3.1 +1.2.1:1.14.15:1.2.4:1.1.1:2.5.1:1.14.14:1.14.13 +1.2.1:5.1.3:1.1.1:1.2.7:1.11.1 +2.1.1:5.3.1:3.1.1:1.5.8 +1.14.19:4.2.1:1.1.1:1.14.19:1.1.1:2.3.1:1.1.1:1.1.1:2.1.4:9.9.9 +1.2.7:1.1.1:1.1.1:1.2.1:9.9.9 +2.7.7:1.14.13:2.3.1:6.2.1:1.13.99:2.7.7 +1.11.1:1.13.11:1.1.1:1.2.7:4.1.2:3.1.1:2.3.1 +2.7.1:4.3.1:4.1.1:2.7.7:2.8.3:4.1.2:2.5.1 +1.1.1:5.5.1 +4.99.1:1.1.1:2.3.1:2.1.4 +1.14.14:2.7.9:1.1.1:1.14.14:1.14.13 +4.1.2:1.1.1:1.1.1:1.1.1:4.1.1 +2.3.1:1.14.19:4.1.2:4.2.1:3.1.3:3.1.3:1.1.1:1.1.1 +3.3.2:1.1.5:2.6.1:2.7.1:1.2.4:2.3.1:2.3.1:2.8.1:3.1.4:3.1.2:2.3.1:2.7.1:2.6.1 +5.3.2:4.2.1 +2.7.1:2.7.7:1.1.5:1.2.5:4.3.1 +4.1.1:1.1.3:1.14.15:3.5.1:4.2.1 +2.4.2:1.2.1:4.1.1:4.2.1:1.17.99:9.9.9:1.1.1 +4.2.1:2.7.1:2.3.1 +1.1.1:4.1.1:2.3.1:2.7.1:6.2.1:3.5.3:2.4.1 +1.2.3:1.1.1:6.2.1:2.1.4:1.1.2 +4.1.1:1.3.8:1.1.1 +1.1.1:2.6.1:1.14.13:4.4.1:2.7.7 +1.1.1:1.1.1:1.3.5:4.1.2:3.1.4:2.7.7:1.1.1 +2.7.1:2.7.9:1.1.1:5.4.2:1.1.1 +2.7.7:1.2.1:1.1.1 +4.2.1:1.1.1:1.14.16:6.3.4:6.2.1:3.5.3:1.2.4:1.1.1:4.2.3 +4.2.1:2.7.1:5.4.2:4.3.1:2.1.1:2.3.1:4.1.1:2.1.1:6.2.1 +4.1.2:1.1.1:1.14.12:6.2.1 +1.5.3:1.1.1:1.1.1:1.2.7 +2.6.1:1.17.1:1.8.1:1.1.1 +6.2.1:4.1.3:1.1.1:2.7.7 +2.1.1 +5.3.3:2.7.1:1.13.11:4.2.1 +5.4.2:1.1.1:3.1.1:1.1.1:1.5.1:2.1.2:1.1.1:1.14.18 +1.2.4:2.7.1:1.1.1:1.1.1:5.4.2 +3.1.1:5.4.99:9.9.9:1.1.1:1.2.1:1.1.1:4.1.2:5.5.1 +3.5.3:1.11.1:1.1.1:2.7.2:5.3.2:5.3.1:3.1.2:1.13.11:1.1.1:1.3.8:9.9.9:4.1.1:3.7.1 +1.17.4:4.1.1:1.1.1:6.2.1:3.5.4:1.1.1:2.1.1:1.14.14 +1.1.1:2.3.1:2.6.1:3.1.3:1.8.1:3.1.3:3.1.1:1.1.1:2.7.1 +2.7.2:1.14.14:1.1.1:2.3.1:1.1.1:1.1.1:2.1.1:2.3.1:5.3.1:2.3.1:2.7.1:3.1.3:1.14.14 +2.5.1:2.5.1:1.17.99:2.6.1 +2.1.2:2.3.1:1.1.1:3.6.1:4.4.1:6.3.2 +4.2.1:5.4.99:1.1.2:1.3.1:1.1.99:4.1.1 +4.2.1:1.1.1:6.3.2:1.1.1 +1.14.18:1.14.13:1.1.1:1.13.11:1.3.1:1.14.13 +2.8.3:1.1.1:2.8.3 +2.3.1:4.2.1:1.2.4:1.1.1:2.6.1 +4.1.3:1.1.1:3.5.4:4.1.2:1.3.5:1.14.14 +4.1.3:3.5.4:1.1.1 +4.3.1:1.2.4:2.7.1:2.1.1:3.6.1:2.3.1 +1.2.1:1.1.1:1.1.5:3.1.3 +2.3.1:2.4.2:2.3.1:1.2.1:1.3.1:1.1.1:3.5.4 +1.14.11:3.1.1:1.2.5:1.2.1:1.2.1:1.1.99 +2.4.1:1.13.11:5.4.2 +6.4.1:1.1.1:3.6.1:2.1.1:1.1.1:4.3.1:1.1.1:2.7.1:1.1.1:1.5.1:1.1.1 +4.1.3:1.2.1:2.7.1:1.1.1:4.2.1:4.2.1:4.3.1 +1.1.1:2.8.3:3.1.3:2.7.1:2.7.1:2.2.1:1.1.1:1.1.1 +4.1.1:1.5.8 +1.17.4:2.3.1:2.3.3:1.5.1 +1.14.99:3.1.2:1.14.17:1.1.5:1.1.1:1.2.1:2.6.1 +6.2.1:1.1.1:2.7.2:1.3.1:1.1.1 +3.5.1:1.2.1:3.5.1:4.1.3:6.3.5 +1.1.1:2.7.1:1.2.4:2.7.1 +1.14.11:5.4.2:3.1.2:2.6.1 +1.8.1:9.9.9:1.1.1:4.1.1:4.1.1:4.1.2 +2.7.1:4.3.3:3.1.3:1.1.5:2.7.1:2.7.1:1.1.1 +1.1.2:1.8.3:1.14.14:3.1.4:1.14.14 +4.1.1:5.3.1:6.2.1 +2.5.1:2.7.1:4.2.3 +1.1.1:1.1.5:1.1.1:3.1.3:1.1.1:1.1.2:5.3.1:4.2.1:2.7.7:1.2.4:1.14.15:2.3.1 +3.1.3:4.3.1:4.2.1:3.1.1:2.3.1:2.3.3:4.4.1:1.1.1:2.7.8:1.5.1:2.7.6:2.6.1:1.13.11 +1.1.1:5.3.1:2.4.1:5.4.2:3.1.3:2.8.3:1.13.11 +2.7.4:2.1.1:4.2.3 +2.7.1:4.1.3:6.3.4:1.1.1:2.7.7:5.4.2 +4.1.1:2.7.6:2.4.1:1.2.4:5.1.3 +4.1.1:5.3.1:6.4.1:2.7.1:3.6.1:2.5.1:2.7.1:9.9.9 +1.2.7:1.1.1:1.1.1:1.1.1 +1.3.1:1.14.11:2.7.1:1.2.5:9.9.9:2.7.1:3.1.3:5.3.1 +5.3.1:1.14.14:4.2.3:6.3.4:2.7.1:1.1.1:2.3.1 +1.1.1:3.1.3:1.1.1:5.1.99:9.9.9:1.2.4 +2.7.2:3.6.1:1.13.11:1.1.5:4.1.3:2.7.6 +1.1.2:5.3.3:2.3.3:1.18.1:2.5.1:2.6.1:4.3.1:5.3.1:5.1.2:1.8.4 +2.5.1:1.3.1:1.14.13:3.2.1:1.2.4:4.1.1 +1.1.1:1.1.1:5.2.1:4.4.1:3.5.1 +2.7.4:4.2.1:1.1.2:1.5.1:2.7.1:5.3.3:1.1.1 +2.6.1:2.7.7:3.1.2 +1.1.1:2.7.1:5.4.2 +1.1.1:2.6.1:1.14.16:1.17.1 +2.8.3:1.1.1:1.14.13:2.4.1 +2.3.1:2.4.2:1.1.1:4.1.2:1.1.1:1.1.1:1.1.1:4.1.1 +1.14.14:2.7.1:2.6.1:9.9.9 +4.2.3:5.3.3:5.4.2:1.2.1:4.1.2:6.3.1:1.4.3 +1.16.1:2.6.1:1.1.1:1.1.1:2.3.1 +4.4.1:4.1.2:1.1.1:1.1.1:4.1.1:1.3.1:1.3.1 +2.7.1:1.1.5:1.1.1:4.1.1 +1.1.5:1.2.1:2.7.7:6.4.1:1.2.1:3.1.2:1.1.1:5.3.2:2.3.1:4.2.3 +1.3.8:1.5.3:1.14.14 +1.13.11:1.2.1:1.11.1:1.2.1:3.1.3:1.1.1:2.2.1:3.1.1 +2.1.1:2.3.1:4.4.1:4.4.1 +1.1.99:1.14.15:2.3.3:1.1.1:2.7.1:2.6.1:1.1.1:5.4.2 +1.1.1:2.5.1:1.1.1:1.2.5 +2.1.1:1.2.7:2.3.1:5.3.1 +4.1.2:5.4.99:1.1.1:1.13.99 +4.2.3:1.1.1:4.1.2:1.14.13 +1.1.5:3.1.2 +6.2.1:5.4.2 +9.9.9:2.7.9:1.14.13:3.3.1:1.1.1:5.4.2 +1.1.1:4.4.1:2.7.1:3.1.1:5.4.99:2.3.1:1.5.8 +2.3.1:1.1.2:4.1.2:2.7.7:4.1.3:1.13.11:2.3.1 +1.1.1:4.2.1:1.2.1 +1.1.1:2.7.1:1.3.5:2.7.1 +4.2.1:4.3.1:1.2.1:1.2.1:2.3.1 +1.2.1:2.4.2:2.7.1:1.14.13:4.1.1:1.4.3:2.7.1:1.14.15 +1.1.1:2.7.1:2.1.2:6.4.1:1.3.8:1.14.13 +2.1.2:4.2.1:1.1.1:4.2.1 +3.4.13:4.2.3:3.1.3 +2.3.1:4.2.3:4.2.1 +1.1.1:4.2.1:1.1.1:1.1.1:2.7.7:1.8.1 +1.14.18:1.1.1:1.1.1:2.2.1:1.1.1:1.14.14:5.1.1 +4.2.3:3.5.3:2.3.1:4.2.1 +6.2.1:2.5.1:4.1.1:2.7.1:1.1.1:1.14.15 +2.7.7:2.7.1:1.14.13:1.1.1:3.1.1:3.1.3:1.3.5 +1.1.2:2.8.3:2.1.4:1.1.1:5.3.1 +1.14.15:2.7.7:5.3.1:1.14.16 +1.2.1:2.5.1:3.1.3:2.1.2:2.7.7:1.14.12 +1.14.11:1.1.1 +1.13.11:1.2.5:4.4.1:9.9.9:2.3.1:2.3.1 +9.9.9:1.1.1:4.2.3 +2.1.1:2.5.1:4.1.2:1.13.11:1.1.1:1.1.1:1.1.1:1.1.1:1.1.1:1.2.4:5.4.2 +4.4.1:1.2.7:5.4.2:1.3.1:4.2.1:1.1.1 +2.4.2:4.1.1:2.7.1:6.2.1:1.1.1 +6.2.1:4.2.1:5.5.1:2.7.1:2.7.1:2.6.1:6.4.1:9.9.9 +2.6.1:1.1.1:4.1.1 +5.3.1:6.3.3:1.1.99:2.7.7 +2.3.1:2.5.1:2.4.2:3.1.3 +2.3.1:1.14.16:4.1.2:6.3.5 +1.1.1:1.14.13:4.2.3:2.3.1:2.7.1:1.2.7 +1.1.1:1.2.1 +2.3.1:5.4.2:1.1.1:1.2.1:1.1.1:4.1.2:2.7.7:2.8.3 +3.1.1:2.1.4:5.1.3:1.14.14 +3.1.3:9.9.9:4.2.3:2.6.1:4.4.1 +2.3.3:1.1.1:2.2.1:5.1.1:1.1.1 +2.1.4:1.2.4:1.14.14 +9.9.9:2.3.1:2.6.1:4.2.1:2.7.1:3.6.1 +5.3.2:2.6.1:2.7.1 +4.2.1:1.1.1:2.7.2:2.4.1 +1.1.5:2.7.7:2.3.1:2.7.7:3.7.1:2.3.3:4.1.1:1.2.7:1.1.1:1.17.7 +1.1.1:4.1.2 +2.3.3:2.3.1:3.3.2:2.7.4 +5.3.3:4.2.1:2.7.1:3.1.4:9.9.9 +1.5.3:2.3.1:2.6.1 +1.17.99:1.1.1:1.13.11 +2.7.7:1.1.1:1.1.2 +4.1.3:1.1.1:1.1.98:2.7.7 +1.2.4:4.2.1:2.7.4:1.14.13:2.7.1:1.3.1:4.1.3 +1.1.2:5.3.3:1.1.1:4.4.1:2.6.1:1.1.1:4.1.2:3.1.1:1.14.15:1.1.5:1.1.1:1.3.98:1.14.14:2.3.3 +1.2.5:1.2.1:1.14.16:6.2.1:1.14.13:1.1.1:1.1.1 +4.2.1:1.1.1:1.1.3 +2.6.1:2.7.1:3.1.2:1.1.1:3.2.1:1.1.1:4.1.2:4.2.1:1.1.1:1.1.1:3.1.2:2.4.2 +2.6.1:2.4.2:6.2.1:1.1.1:2.1.2 +2.3.3:1.1.1:1.14.13 +3.1.3:6.2.1:2.7.7 +2.3.1:2.2.1:1.1.98:1.3.1:2.3.1:3.1.1:2.3.1:2.5.1:3.1.3:1.1.1:2.7.1 +2.7.1:1.1.1:1.4.4:2.3.1:3.1.3:1.14.14 +1.1.1:1.14.16 +1.17.3:1.1.1:1.1.5:2.3.3 +2.6.1:5.3.3:4.2.3 +2.5.1:4.3.2:1.2.1:2.1.2 +3.1.3:9.9.9:9.9.9:2.1.4:1.1.1 +4.2.3:4.2.1:1.14.14:3.7.1:2.1.1 +1.1.1:2.7.1:4.2.1:2.3.1:2.7.1:2.2.1 +1.1.1:1.14.13:3.7.1:1.1.1:3.1.3 +4.2.1:1.2.7:1.1.1:5.4.2:1.4.3:1.1.1:3.1.3 +3.1.2:4.1.2:2.8.3:1.4.3 +2.3.1:4.3.1:4.2.1 +2.5.1:2.7.1:3.1.1:1.1.1 +1.1.1:6.2.1:2.8.1:1.1.1 +4.2.1:2.7.2:2.3.1:1.1.5:2.6.1:1.2.7:6.2.1:3.5.1:1.1.1 +4.2.3:1.1.1:1.1.1:1.1.1:2.5.1 +1.1.1:1.1.2:5.1.3:5.1.3:1.14.14:2.7.9:1.1.1 +2.1.2:2.6.1:1.1.1:2.1.3:5.3.1:2.3.3 +6.2.1:4.2.1:5.3.1:2.3.1 +1.1.1:1.13.99:1.1.2:2.1.1 +1.14.13:2.7.2:1.14.16 +1.1.1:1.1.1:2.3.1 +3.6.1:2.7.1:3.5.3:1.13.11:1.11.1:3.1.3 +1.1.1:2.5.1:3.1.1:1.17.3:1.1.1 +1.14.11:1.1.1:3.1.3:4.2.1:2.6.1 +5.4.1:3.6.1:2.6.1:4.1.1:1.1.1:5.1.3:4.3.2 +2.5.1:1.14.12:3.1.3:1.1.1 +1.1.1:1.3.1:1.3.1:1.13.11:2.6.1 +2.7.7:1.1.1 +1.1.1:2.3.3:6.3.2:1.1.99:2.2.1:1.1.1 +3.5.4:1.14.12:1.1.1:3.1.2:2.3.3:5.3.1 +1.14.14:1.1.1:4.2.1:1.2.4:4.2.1:3.5.1:6.2.1:3.1.1 +1.14.14:6.2.1:4.2.1:1.1.1 +1.14.16:5.4.2:4.1.3 +1.2.5:1.1.1:1.1.1:6.2.1 +2.3.3:1.1.1:1.1.1:4.4.1:3.1.1 +2.3.1:2.7.1:1.1.1:1.1.1:2.1.1:2.7.1 +9.9.9:6.3.2:2.1.1:5.1.3 +1.1.1:4.1.1:6.4.1:2.8.3:6.4.1:1.1.5:2.7.1:2.5.1:5.4.2 +4.1.2:1.5.8:2.3.1:4.4.1:4.1.3 +2.4.2:6.3.4:1.13.11:2.7.1:2.1.1:6.2.1 +1.1.1:6.2.1:2.7.7:3.1.1:2.7.1:5.1.99 +3.1.3:2.7.1:2.3.1:1.2.1:2.7.7 +1.13.11:1.1.1:3.5.2:3.1.2:4.1.1 +1.13.11:3.1.3:2.7.1:4.1.1:1.1.1 +1.13.11:2.7.1:2.1.1 +9.9.9:1.1.1:3.1.1:1.1.1:1.13.11:1.1.1:2.7.1:3.2.1 +2.3.1:2.4.2:1.2.1:5.1.1:2.6.1 +5.4.2:2.7.7:4.2.1:2.7.1:9.9.9:1.14.14:3.6.1 +2.8.3:1.14.11:2.7.1:3.2.1:1.3.1:6.2.1:1.4.9:1.1.1:6.2.1 +4.2.1:1.14.19:1.1.5:2.7.1:1.2.1 +1.2.1:1.5.3 +1.1.5:1.14.13:4.1.1:1.2.7:1.1.1 +2.4.2:1.14.99:2.7.2:1.1.2:1.14.14:2.1.1:4.1.1 +6.2.1:1.14.14:5.4.2:9.9.9 +9.9.9:1.1.3:2.3.1:4.1.1:5.3.3 +4.1.2:5.3.1:3.1.3:2.3.1:2.7.9 +9.9.9:1.1.1:1.5.8:1.1.1:1.13.11:5.4.2:1.13.12 +6.2.1:4.2.1:1.2.1:1.2.1 +1.2.7:2.7.8:1.14.13:1.2.4:2.6.1:2.1.2:6.3.5:1.3.1:1.1.5:1.8.1:9.9.9 +9.9.9:2.7.7:1.1.1:5.1.99:1.2.1:1.1.1 +1.2.4:4.1.1:3.5.3 +2.7.2:1.5.8:4.1.1 +4.2.1:5.3.99:2.6.1:3.5.4:1.13.99 +1.1.1:2.3.1:3.1.2:1.1.2 +1.2.7:5.4.2:1.14.15:6.4.1:1.1.5:4.1.2:2.7.7:4.2.1 +1.1.1:6.3.5:1.14.18:1.2.1:4.2.1 +5.5.1:1.14.99:3.2.1:2.7.4:1.5.1:1.14.13:4.1.2 +1.1.1:2.7.2:1.2.7:2.6.1:5.4.99:3.1.3 +4.1.2:2.6.1:5.1.99:1.1.1 +1.1.5:4.2.1:4.2.1 +1.14.19:1.1.1:1.2.1:4.4.1 +1.1.99:1.1.1:2.3.1:1.1.3:1.8.7 +1.1.1:3.7.1:1.14.14:3.6.1:4.1.1:2.5.1:2.6.1:6.3.2:1.17.4:1.2.1:4.3.1 +2.7.6:2.3.1:2.7.7:2.1.4:1.1.98 +1.14.16:6.2.1:1.2.4:2.7.7:3.6.1:5.3.99:2.5.1:1.5.98 +2.3.1:1.1.1:1.1.1:2.7.1:1.1.1 +1.14.14:3.1.3:1.14.13:4.6.1:1.1.1 +3.1.3:2.2.1:1.1.99:2.7.1:1.1.1 +1.1.98:2.7.7:1.2.1:1.1.5:1.1.1:1.14.99:1.1.1:2.7.8 +2.3.1:1.13.11:1.13.11:1.8.7:2.7.1:5.4.2:1.3.8 +2.7.1:1.1.1:3.1.1:2.3.1:4.6.1:4.2.3:1.14.13 +3.1.3:2.7.1:4.2.1 +3.6.1:5.4.2:3.1.3:1.1.1:4.3.1 +1.1.1:2.7.1:5.5.1:1.1.99:2.3.1:2.7.7:3.1.3 +2.8.3:1.2.1:5.4.99 +2.7.1:2.5.1:2.6.1:2.2.1:1.1.1:2.5.1 +1.1.98:1.2.1:4.1.2 +2.7.1:2.7.1:1.5.8:4.2.3 +4.1.2:2.7.4:3.1.3:6.2.1:1.14.14:2.7.1 +2.3.1:2.3.1:4.4.1:2.7.2:3.1.1:2.7.7:1.8.7 +2.3.1:3.7.1:2.7.2:1.1.99:3.3.1:2.7.8:3.1.3 +1.1.2:2.5.1:2.7.1:1.3.1 +2.3.3:3.1.3:3.5.1:2.7.1 +2.7.7:2.3.1:1.1.1:4.1.1 +2.3.1:4.1.1:2.7.2:2.3.1:5.5.1:2.6.1:1.2.1:1.1.1 +1.14.13:5.3.99:6.2.1 +9.9.9:5.4.2:2.7.7:1.1.2 +3.1.3:1.17.1:3.6.1:5.1.2:2.7.1:1.1.1:5.4.2 +4.1.2:3.5.4:5.4.2:4.1.2 +4.2.1:2.1.2:4.3.1:2.2.1:5.4.2:4.1.1:2.6.1 +1.1.1:2.7.1:1.1.1:1.2.1:4.2.1:1.1.2 +1.13.11:1.1.1:4.3.3:1.13.99:6.4.1:4.1.2 +6.4.1:3.1.3:1.4.3:1.2.1:2.7.1:1.1.1:9.9.9:4.1.1:1.1.1:5.4.2:6.2.1 +6.2.1:2.1.1:2.3.1 +4.1.1:1.1.1:2.6.1:1.2.1 +3.2.1:3.2.1:1.14.15:2.3.1:1.1.5:5.1.2:1.2.5:4.2.1:2.5.1:1.2.1:5.3.1:1.4.4:4.2.3:1.2.4:1.14.16 +2.7.7:5.3.3:1.5.1:2.6.1 +1.2.1:1.1.1:1.2.1:3.1.2:1.1.2 +2.7.1:2.7.7:2.6.1:3.1.3:1.1.1:1.1.2 +3.2.1:1.1.1:1.1.2:3.1.3:1.14.14 +2.3.1:4.2.1:1.11.1:2.3.1 +4.4.1:1.1.1:5.5.1:2.3.3 +1.1.3:1.1.5:3.6.1:3.3.1:2.7.1:1.14.16:1.14.14 +1.1.1:1.1.1:2.1.1:1.1.1:3.1.3:1.5.8:2.7.7:2.5.1:1.2.1:2.7.7:2.5.1:2.3.1 +1.1.99:2.3.1:1.1.1:1.2.1:2.5.1:3.1.3:5.3.1 +2.3.3:2.3.1:2.3.1:1.1.1:6.4.1:1.1.1 +2.7.1:1.1.1:4.2.1:2.7.1 +4.1.3:9.9.9:5.3.1:1.1.1 +3.1.3:1.2.4:5.3.1:4.1.2:1.1.1 +1.1.1:5.3.3:2.6.1:2.7.1 +1.1.1:4.1.2:4.2.1:2.4.2 +5.3.99:9.9.9:2.7.1:3.1.2:1.1.1:2.6.1 +2.3.1:2.7.1:3.5.99 +2.1.1:2.7.1:2.3.1 +1.1.1:1.14.14:6.2.1:1.17.99 +5.5.1:1.14.13:1.1.1:1.13.11 +1.1.99:1.3.98:6.4.1:1.1.1:2.3.1 +2.7.1:3.1.4:1.2.4:1.13.11:5.1.99:2.3.1:3.5.2 +2.7.7:2.3.1:2.7.7:4.2.1 +3.1.3:1.17.3:1.1.1:2.7.1 +4.1.1:1.1.1:1.1.1:2.7.1:1.1.1 +2.2.1:2.6.1:1.1.1:2.1.1:1.1.1:4.2.1:1.1.1:2.4.2:5.3.1:2.3.3:1.5.1 +2.4.2:1.14.99:1.13.99:1.1.99:4.2.1:2.4.2 +9.9.9:4.2.1:9.9.9:4.2.1:1.1.1:2.5.1:4.2.1 +5.4.2:2.7.7:6.2.1 +1.1.1:2.7.1:1.13.11:1.1.1:2.7.8 +1.14.12:2.1.3:1.1.2:4.1.1:2.3.1:2.2.1:1.13.11:5.4.99 +1.1.1:3.5.2:2.8.3:1.13.11:2.3.3 +5.4.2:1.1.1:1.3.1:1.1.1 +2.3.1:1.14.15:4.1.2:3.1.4:2.3.3:5.3.3 +4.4.1:1.2.7:4.2.1 +9.9.9:4.1.1:2.3.1:1.1.1:2.4.2 +5.4.2:2.2.1:6.2.1:1.14.14 +2.1.1:1.1.2:9.9.9:1.1.2:1.3.8:6.3.4:1.1.1:3.1.4:2.3.1 +2.1.4:9.9.9:1.2.1 +3.7.1:1.1.1:2.6.1:2.7.1 +4.2.1:1.14.13:1.1.1:1.14.13:2.8.3:1.1.5 +1.2.1:4.2.1:3.1.3:4.1.1 +1.1.1:5.3.1:4.1.2:2.7.1:1.1.1:1.17.1:1.13.11:1.11.1:1.1.1:1.1.1 +1.13.11:2.7.4:1.13.11:3.1.3:1.1.1:1.1.1:6.2.1 +6.2.1:4.3.2:1.2.7:1.13.11 +9.9.9:1.3.1:1.13.11:1.8.7 +1.2.1:2.7.1:2.8.3:3.1.1:1.2.4 +2.3.1:2.7.1:2.7.1:2.3.1:1.14.16:4.2.1:5.4.2 +2.3.1:1.2.4:2.7.1:1.1.1:1.1.1:1.1.1:3.1.3 +1.14.15:1.17.3:2.7.1:2.7.1:1.8.1:1.1.3:1.1.5 +1.2.1:2.7.2:1.1.1:1.17.1:5.4.99:2.5.1:5.3.1:1.10.3 +5.4.99:3.5.4:5.4.99:5.4.99 +1.2.7:2.6.1:1.5.8:1.1.1 +1.1.1:1.17.4:5.4.2:1.1.2:1.1.1:1.2.1:3.1.2 +1.13.11:2.3.1:2.3.1:2.4.2 +1.2.4:4.2.1:2.3.1:3.1.3:2.7.1:1.8.1:2.8.3 +5.1.99:1.1.1:3.5.2:1.1.1:1.14.17 +1.1.1:1.2.7:2.3.3:4.2.1 +1.1.1:1.1.1:5.3.1:9.9.9:2.6.1 +1.1.1:3.5.1:1.1.1:5.4.2:4.2.1:1.13.11 +4.2.3:6.2.1:4.1.1:1.13.11:1.5.1:6.2.1 +1.14.12:1.1.1:3.1.2:2.6.1:4.2.1:1.1.5 +2.5.1:1.1.3:1.1.1:2.7.1 +2.7.1:1.2.4:2.7.1:4.2.1:1.2.3:1.14.13:1.2.1:5.3.1 +2.3.1:1.2.1 +5.4.2:2.4.2:2.1.3:4.1.2:6.2.1 +2.8.3:3.1.3:2.6.1:2.3.1:1.14.11:2.7.1:4.2.3:4.2.1 +2.3.3:4.1.2:2.7.1:1.14.14:2.7.2 +3.5.3:1.2.1:1.14.15:4.2.1:4.4.1:3.1.3:1.2.4:1.1.1:2.1.2:9.9.9:4.2.1:1.14.13 +1.14.11:2.3.3:1.1.5:4.1.1:1.1.1:4.1.1 +2.7.1:4.1.1:3.1.1:2.1.3 +4.2.1:1.1.1:1.2.1:1.5.8:1.1.1:2.1.1:1.1.1:1.3.1 +5.4.2:2.7.1:6.3.4 +2.1.1:1.14.14:1.14.14:1.14.12:4.2.1:5.3.3:4.3.1 +4.2.1:1.3.1:2.7.7:1.14.13 +1.1.1:2.6.1:2.7.1:1.1.1:4.2.1:1.1.1:4.2.1 +1.2.1:3.5.1:5.4.2:2.1.1:2.6.1 +5.3.1:2.7.1:3.1.3:2.7.7:1.1.1 +2.7.4:1.1.1:6.2.1 +1.1.1:2.1.3:4.2.1:4.2.1 +2.5.1:1.2.7:1.1.1:3.1.1:1.14.13 +2.7.1:2.1.3 +2.3.1:1.14.14:3.5.4:1.13.11 +3.6.1:4.1.2:2.5.1:2.3.1 +2.7.1:4.1.1:2.7.7:1.14.13:1.2.1:2.6.1:1.14.14:4.4.1:6.2.1:1.14.11 +2.7.1:1.1.1:1.14.11:3.1.3:4.2.1:1.14.15:4.6.1 +4.2.1:2.1.2 +1.1.98:1.5.8:6.4.1:9.9.9:2.4.2 +1.14.13:2.7.1:5.4.99:1.5.1 +1.1.1:1.2.4:5.1.99:5.1.99:1.1.1:1.1.1 +1.1.1:2.7.1:3.1.4:1.1.1:1.14.13:2.1.1:9.9.9:1.1.3 +1.1.1:2.4.1:9.9.9:1.1.98:2.7.7 +3.1.2:1.1.1:2.2.1:1.13.11:1.14.14:1.1.3:1.1.1:1.1.1 +1.3.1:1.1.5:4.1.1:1.1.1:2.7.2:1.2.7 +6.2.1:2.2.1:1.2.1:2.7.1:2.7.1:1.2.1 +3.6.1:1.1.99:1.1.1:2.2.1:2.3.1:1.2.4:3.6.1 +5.3.3:1.3.1:2.5.1:1.13.11 +1.5.1:1.14.14:2.3.1 +1.14.12:1.1.2:5.4.2:1.2.1:1.1.1:2.6.1 +1.2.7:2.2.1:6.4.1 +4.3.2:1.5.8:4.4.1:2.7.4:2.7.1 +1.2.1:1.13.11:4.4.1:5.3.1:2.1.1:3.3.2:1.1.1 +1.2.1:3.5.1:2.7.7:1.2.1:1.8.4:1.14.13:2.4.2:1.1.1:2.7.4:1.3.7:3.1.2:2.1.1 +6.4.1:1.1.1:2.7.7:1.1.1:1.14.11:3.6.1 +2.3.1:1.2.5:1.1.1:4.2.1:5.4.2:1.8.4:3.5.1 +5.1.3:1.1.1:2.2.1:1.13.11:1.1.1:1.1.98:1.1.5:2.7.1 +2.7.7:2.2.1:4.2.1 +1.1.1:2.7.1:1.1.1:5.4.99:4.1.2:4.4.1 +1.1.1:1.1.1:2.3.1:2.7.1 +3.5.2:4.2.1:1.1.1:1.1.1:1.1.1:2.4.2:1.2.7 +4.1.2:1.1.2:9.9.9:1.1.1:4.1.1:1.13.11:2.7.1 +1.14.12:1.1.1:2.3.3:2.7.1 +4.4.1:4.4.1:1.14.13:5.5.1:1.1.1:1.5.8:6.2.1:4.4.1:1.14.13:1.1.98 +1.2.4:3.5.4:6.2.1:5.1.3:1.2.1:1.1.1:1.2.4 +2.7.1:5.3.1:2.6.1:2.6.1:3.1.3 +2.6.1:2.7.1:1.1.1 +2.3.1:1.1.5:1.1.2:4.2.1 +3.1.3:1.14.18:2.7.1:1.2.7:2.3.1:1.14.14:4.2.1 +3.6.1:1.1.1:3.1.3:5.3.1:3.1.1 +6.4.1:2.2.1:9.9.9:2.7.4:5.5.1:2.7.1 +5.4.2:4.2.1:1.3.5:1.1.1:1.1.1:1.1.5 +1.14.13:5.4.2:2.7.1:3.1.3:1.1.1 +2.7.7:1.1.1:1.13.12 +1.2.5:1.1.2:2.3.1:3.5.4 +2.7.7:4.2.3:3.6.1:1.1.1 +3.6.1:3.1.3:1.14.15:2.1.2 +1.13.12:1.1.1:2.7.4:3.1.3 +5.4.2:5.4.99:4.1.1:5.1.3:1.14.15:2.7.1:1.3.5 +2.3.1:1.1.1:2.1.1:1.14.14:3.1.1:2.7.6:3.1.2:1.1.1:1.2.1:6.3.5:1.2.4 +3.1.2:1.2.4:2.7.7:1.1.1 +6.4.1:4.2.1:1.1.1:4.2.1 +2.1.1:1.1.1:3.1.2:1.1.1:1.14.11:4.1.2 +2.7.7:5.4.99:2.3.1:2.7.1:2.7.7 +1.1.1:1.14.14:1.13.11:2.3.1:3.1.3 +2.6.1:4.2.1:4.2.3:4.2.3:2.6.1:1.14.13:6.3.5 +1.2.1:1.13.99:2.7.2:1.14.13:1.2.1:1.2.1 +2.7.1:1.1.1:4.1.2:1.1.1:3.5.4 +4.1.1:1.14.14:9.9.9 +1.14.99:2.7.7:1.1.1:6.2.1:2.1.1:4.4.1:4.1.3 +1.3.1:1.1.1:1.2.7:2.3.3 +1.14.13:1.1.5:1.14.14 +3.1.3:2.3.1:4.4.1:1.8.4:1.2.1:3.5.4:5.4.2:2.7.1:5.1.99:1.1.1:2.4.2 +4.2.1:1.1.1:1.14.11:5.4.2:2.7.1:4.1.2:1.13.11 +2.3.1:1.14.14:1.1.1 +2.2.1:2.7.7:1.1.99:1.2.1:1.1.1 +2.3.1:2.7.1:2.5.1 +1.1.1:1.1.1:2.7.7:6.3.5:5.1.99:1.14.15:1.5.3:1.17.4:2.3.1 +1.13.11:2.3.1:1.14.13 +1.13.11:2.3.1:5.5.1 +2.6.1:1.2.4:3.1.3:1.18.1:1.1.1 +1.8.1:2.7.7:2.6.1:2.3.1:2.3.1:4.3.1:2.1.2 +1.14.16:4.4.1:1.1.1:1.1.1 +5.3.2:4.2.1:6.2.1 +1.14.13:1.14.14:6.4.1:1.2.1 +5.3.1:1.2.1:1.1.1 +4.3.1:2.3.1:3.1.3:4.2.1:1.1.1:1.1.1:1.13.11 +3.6.1:1.1.1:1.1.1 +1.1.1:2.1.4:2.6.1:6.2.1:1.1.1:3.1.3 +1.2.1:1.14.14:2.3.1:4.2.1:2.7.1:1.1.1:5.5.1 +1.1.1:1.2.1:1.1.1:1.1.1 +5.4.2:1.2.7:1.14.12:1.13.11:1.14.13:1.14.16:4.2.1 +2.7.7:1.14.13:2.8.3:1.2.7:3.1.2 +5.1.3:2.7.2:5.1.3:1.14.19:4.1.1:6.2.1 +3.5.4:2.4.2:1.1.5:1.1.1:5.3.1:1.1.3 +1.1.1:1.14.15:9.9.9:1.13.11:2.1.1:3.3.1:6.4.1 +1.1.1:1.1.1:1.2.7 +3.1.3:2.5.1:1.1.1:1.1.3:6.2.1:4.2.1 +2.6.1:4.2.3:2.5.1:4.1.1:9.9.9:2.6.1:1.13.12 +1.13.12:2.1.2:1.8.4:1.4.3:1.1.1:1.13.11 +1.2.4:1.14.18:2.7.9:3.5.1:1.1.1:1.1.1 +4.2.1:5.3.1:2.7.7:1.1.1 +2.7.1:2.8.3:6.4.1:9.9.9:1.2.4:1.1.1:9.9.9:1.2.4:6.3.2:4.2.1:1.14.13:1.17.4:2.7.7 +2.7.7:1.2.3:1.1.1:2.3.1:2.6.1:2.6.1 +2.7.7:6.2.1:1.1.2:1.3.99:9.9.9:2.1.1 +2.1.1:1.8.1:5.4.99:4.4.1:2.4.2:1.3.1:6.4.1 +4.1.2:1.2.4:6.4.1:2.5.1:1.2.7 +3.1.3:2.1.2:1.14.16:4.1.3:3.1.2 +2.7.1:1.1.1:5.4.2:4.1.2:1.1.1:1.2.1:6.3.4 +1.1.1:4.1.1:2.3.1:2.7.1:5.4.2 +2.8.3:1.1.1:4.2.1:2.3.1:4.2.1:3.1.3:3.1.3:2.1.2:2.7.2 +1.1.1:2.3.1:1.14.13:1.1.1 +2.7.1:4.1.1:2.4.2:2.3.1:2.1.2:3.1.4:2.7.7 +1.1.1:1.14.19:2.8.1:5.3.3:3.1.4:1.1.5:2.3.1:2.5.1 +1.8.1:1.2.1:2.7.1:3.1.3:2.7.1 +1.1.1:2.7.1:1.1.1:4.2.1:1.3.1:2.6.1:1.1.99:2.7.1 +3.6.1:2.8.3:3.1.3:2.3.1:1.1.1:1.3.1 +2.3.1:2.6.1:2.8.3:1.14.15 +1.14.13:3.7.1:1.14.19:1.1.1:2.1.2:1.1.1:4.4.1 +1.5.1:1.14.13:2.1.1:9.9.9:6.4.1:1.2.1 +2.7.7:2.7.1:1.14.99:4.2.1:4.1.2:3.1.1 +2.3.1:3.1.3 +2.7.2:4.1.1:4.2.1:6.2.1:2.7.7:2.2.1 +2.7.7:4.2.1:2.1.1:1.1.1 +1.1.1:1.1.1:5.4.2:1.2.1 +2.7.4:2.7.1:2.6.1:2.3.3:1.13.11:2.7.1:4.1.1 +1.1.5:2.7.1:1.1.2:6.2.1:4.1.2 +2.3.1:4.4.1:5.3.1:3.6.1:1.17.1 +4.2.1:1.1.1:5.3.1:4.4.1:1.1.1:3.1.2:1.17.1:3.1.1 +6.4.1:2.7.7:1.1.1:9.9.9 +4.4.1:1.1.1:2.3.1:1.2.7:3.1.1:1.1.1:1.4.3 +1.1.3:2.6.1:4.2.1:4.2.3:2.7.1:2.7.1:2.7.1 +5.3.1:1.1.1:2.8.3:5.1.3:5.5.1 +4.2.3:1.1.1:1.1.5:4.4.1:1.14.14:1.1.1 +1.2.1:1.18.1:9.9.9:2.3.1:1.1.1:1.8.7 +1.1.98:2.5.1:3.1.2:3.1.4:1.1.5:3.1.3:1.2.4:1.14.13 +2.3.1:2.3.1:3.1.3:2.8.3:2.7.1 +2.3.1:2.8.3:4.1.3:4.2.3 +4.2.1:1.1.1:1.14.14:2.3.1:4.2.1 +3.1.2:2.8.3:3.1.1:4.2.1 +5.3.1:1.17.1:1.1.1:1.1.5 +3.1.3:4.2.1:2.1.2:3.1.1 +1.1.1:2.7.1:1.1.1:2.1.2:1.1.1:1.4.3:1.1.1 +2.6.1:1.1.1:5.4.2:1.1.1:2.6.1 +2.7.7:1.14.14:3.1.4:1.1.1:1.14.15:4.2.1 +1.13.11:5.1.3:2.6.1:2.7.4 +2.1.1:3.1.1:2.7.7:1.17.4:1.1.5:1.5.1 +1.5.3:6.4.1:1.2.1 +1.14.11:1.1.1:9.9.9 +5.4.99:4.1.1:3.7.1:1.2.4:1.1.1:3.5.1:2.7.1 +5.3.3:4.2.2 +1.1.1:4.1.3:9.9.9:1.1.1:9.9.9:1.1.1:1.5.1 +1.1.1:1.1.3:1.13.11:2.1.4:2.6.1:1.1.2:2.7.1:1.1.1:5.4.2 +2.1.2:2.6.1:3.1.3 +2.7.9:2.7.1:4.2.1:2.7.7 +1.14.14:1.14.13:2.3.3:2.7.1:4.1.3 +2.3.3:6.3.3:2.3.1 +1.1.1:4.1.1:2.6.1:2.1.3:2.7.1:1.1.1:1.17.1 +1.1.1:2.7.7:1.1.1:3.1.6 +3.1.2:2.3.1:3.1.3:1.1.2:5.3.3:1.3.3:1.1.1 +2.7.1:6.2.1:1.14.16 +4.1.1:1.1.1:3.5.4:2.8.3:1.17.1:2.7.4:4.2.1:1.2.1:1.13.11 +2.6.1:2.6.1:1.1.1:1.14.11:1.14.14:1.1.1:1.14.14 +1.17.99:1.14.14:2.7.1:2.7.1:3.5.3 +6.2.1:5.3.1:3.1.3:2.7.1:5.4.99:3.1.1:1.1.1:9.9.9 +6.3.5:1.14.14:2.3.1:3.5.4 +2.6.1:3.1.3:1.14.14 +2.8.3:1.1.1:9.9.9 +1.1.5:4.2.1:4.2.1:1.2.7:3.1.4:9.9.9:3.1.1 +4.2.1:2.3.1:3.6.1:5.3.1 +2.3.1:2.4.2:2.7.1 +1.14.14:1.1.1:1.1.1:3.1.3 +2.3.1:2.7.1:1.14.19:1.14.14:2.7.1:1.1.5:1.1.1:1.1.1:2.5.1:3.1.3:4.1.2:1.14.13:2.8.3 +3.6.1:1.17.3:4.1.2:1.14.19:2.3.1:4.3.1 +1.13.99:1.1.1:2.7.1:3.1.3 +1.1.1:2.3.1:5.5.1 +2.4.2:1.13.11:6.2.1:5.1.1:1.1.1:3.5.1 +1.1.1:1.14.15:2.7.1:1.1.1:1.8.4:3.1.4:2.7.1:2.7.7:2.7.7 +2.3.1:3.5.1:2.3.1:1.2.4 +1.5.8:2.7.2:6.4.1:3.1.1:2.8.4 +1.1.1:5.3.1:3.1.3:1.14.19:1.1.1 +3.1.3:4.1.1:2.1.1:5.3.1 +2.7.1:1.2.1:1.14.13:1.1.1:1.2.5:1.2.4 +1.13.11:1.1.98:1.2.3:2.7.1:1.2.1:1.3.1:1.14.13:1.1.1:5.3.1:2.3.1 +1.1.1:4.2.1:2.7.7:4.2.1 +1.1.1:2.7.1:1.13.12:4.1.3:1.1.5 +4.2.1:4.1.3:1.1.1:2.7.7:1.17.4:2.7.9:2.7.1 +3.5.1:3.5.1:1.3.1:4.2.3:1.1.1 +1.1.99:1.5.8:1.3.1:2.3.1:5.3.1 +1.1.2:1.13.11:1.1.1:3.1.3:4.2.1 +1.1.1:1.2.1:1.1.1:1.14.19:2.7.3:1.1.1 +2.6.1:1.3.1:2.3.1:4.2.2:2.7.2:1.2.1:1.2.1:1.1.2 +1.1.1:4.1.3:1.2.1:4.1.2:9.9.9:2.3.1:4.4.1:9.9.9:1.17.1:1.11.1:2.6.1 +2.7.7:4.3.3:4.2.1:4.2.1 +1.1.2:3.1.1:3.6.1:1.1.1:1.2.4:6.2.1 +1.1.5:2.7.7:4.1.2:1.1.1:1.1.1:2.3.1:2.4.2:5.1.99 +9.9.9:1.2.1:1.1.2:5.4.2 +4.4.1:1.14.11:9.9.9:6.4.1:9.9.9:1.1.1:2.6.1:1.1.98 +1.1.1:5.3.3 +6.2.1:1.13.11:1.2.4:4.6.1:4.1.1 +1.1.1:4.2.1:2.3.1:1.1.1:1.1.1:1.2.7:1.3.1:3.1.1:4.2.1:1.4.3:5.4.2:1.14.12:1.1.1 +1.1.1:1.1.1:1.17.1:3.6.1:5.1.3:5.5.1:3.1.3:4.2.1:2.7.7 +2.5.1:6.4.1:5.3.2:6.3.4:2.4.2 +1.14.14:2.7.1:3.3.2:1.1.1:2.7.1 +2.3.3:5.1.2:4.2.1:2.7.1 +1.1.1:1.1.1:9.9.9:1.2.1 +2.7.1:1.1.1:4.3.1:1.2.7:2.3.2:2.3.1 +2.7.1:5.5.1:2.5.1:9.9.9:1.1.1 +6.4.1:3.1.2:2.7.1 +1.13.11:1.1.1:6.2.1 +1.1.1:2.3.1:2.7.1:5.5.1:2.7.1:2.6.1:4.1.3:5.4.2 +1.3.1:3.1.4:1.2.1:5.3.3:1.1.1 +1.3.1:3.7.1:2.7.1:6.3.4:1.8.5 +5.5.1:2.7.7:1.1.5:2.7.1:1.3.5:5.4.2:3.1.3:2.6.1 +2.7.1:1.1.1:5.4.2:1.1.3 +2.8.3:2.3.1:3.5.4:1.13.11:1.3.8:3.1.1:4.2.1:1.1.1 +2.7.7:3.1.3:2.7.1:5.5.1:2.5.1:2.6.1:4.2.1:9.9.9:1.13.11:1.8.4:2.4.2:2.7.7:1.1.1:1.13.11 +1.1.1:2.7.1:3.1.3:1.1.2 +5.1.3:4.1.2:1.1.1:5.3.1:1.8.1:4.1.2:1.17.3 +4.2.1:5.3.1:4.4.1:1.1.1:1.4.3:2.7.7:1.14.13 +2.7.1:3.6.1:2.2.1 +4.1.1:4.1.1:1.2.1:9.9.9:1.5.8 +2.7.2:1.13.11:1.2.1:4.2.3 +5.1.3:5.3.1:1.2.4:4.2.1:2.1.1:4.1.1 +1.2.4:2.1.2:1.1.1 +1.1.1:1.2.7:2.1.1:3.5.3:2.6.1:1.14.16 +1.1.1:1.1.1:1.1.1 +2.3.1:1.3.1:1.1.1:6.2.1:3.2.2:1.2.1:3.6.1:4.3.3 +2.7.7:2.8.3:1.13.11:2.4.1:2.3.3:2.3.3:1.1.1:3.1.1:1.1.1 +4.2.1:1.3.7:4.1.3:2.1.1:1.1.1:2.7.7:4.1.1:1.2.1:1.1.1:5.4.2:2.3.1 +1.14.14:1.1.1:2.3.1:6.4.1:2.3.3 +2.7.1:9.9.9:1.13.12 +4.4.1:1.2.1:2.6.1:1.1.99:2.7.7 +9.9.9:4.1.1:1.14.14 +2.7.4:3.1.6:1.2.1:4.1.1:5.1.99:2.4.1:2.4.1:5.4.2:1.14.13:1.1.2 +1.5.8:2.7.4:3.1.2 +1.1.1:3.1.3:1.1.1:4.6.1:3.5.1 +5.99.1:1.1.5:4.1.1:4.1.2:2.4.2:1.14.18:6.2.1 +1.2.1:1.1.1:1.2.7:2.7.1 +4.1.2:1.1.1:4.1.1:2.5.1 +1.14.11:1.1.2:4.2.1:3.5.3:1.1.1 +6.3.4:1.1.99:2.7.7:1.1.1 +1.1.1:1.13.11:5.4.2 +4.2.1:1.14.13:2.6.1:4.1.1:5.3.1 +1.1.1:6.4.1:4.4.1 +2.3.1:2.3.3:3.6.1:1.1.99:1.1.1:4.2.1:1.2.1:2.7.7 +1.13.11:6.2.1:6.4.1:2.1.2 +1.2.1:1.2.1:1.2.7 +2.7.1:1.1.1:6.3.2:1.11.1:2.3.1:1.3.1:2.3.1 +5.3.1:4.1.99:1.3.5:1.2.5:5.4.2:1.1.1:1.1.1 +9.9.9:1.2.1:5.3.3:4.1.1 +1.14.13:4.2.1:5.3.3:3.5.3:5.3.1:1.1.1:2.6.1:5.5.1 +1.1.1:1.1.1:3.2.2:1.1.3:2.2.1:2.7.7:2.7.7:2.1.3:4.1.3 +3.5.4:2.3.1:3.1.1:3.1.2:2.8.3:3.1.3:2.7.2:2.3.1 +2.5.1:4.4.1:1.2.5:2.8.2:1.18.1:2.6.1:2.3.1:5.3.3 +2.1.1:6.2.1:1.2.7:3.1.1:1.1.1:1.3.8:1.2.4:1.1.1:3.1.3 +2.7.7:1.3.1:2.7.1:1.3.1:2.1.1:1.1.3:2.7.7 +3.1.4:2.3.1:2.8.2:2.3.1:1.1.1:6.2.1:2.6.1:3.5.2 +2.7.1:1.1.1:2.7.7:1.5.1 +1.1.1:3.1.2:2.7.7 +1.14.12:1.1.1:3.1.3:1.1.1:1.1.1:1.2.4:6.4.1:6.2.1:1.2.1 +2.1.1:1.1.1:1.2.1:1.1.1:1.1.1 +5.3.1:5.3.1:4.1.1:1.1.1:4.2.1:2.4.2:2.7.8 +1.2.1:1.13.11:4.1.3 +1.14.14:4.1.3:4.3.1:4.1.2:2.6.1:1.14.17:3.1.4:1.1.1 +9.9.9:1.14.14:2.7.7:1.5.8:9.9.9:1.13.11 +1.1.1:1.14.13:1.1.1:4.4.1:1.1.5:2.7.1:2.7.1 +1.1.1:2.4.2:1.1.1:1.2.7:3.1.2:1.1.5:1.1.1 +1.2.1:1.4.3:2.3.3:2.1.2:2.7.1:1.2.4:1.14.15:2.2.1:3.4.19:1.17.7:2.8.3 +2.7.1:5.4.2:4.2.1:2.7.1:1.14.11:1.2.7 +2.7.8:5.3.3:1.13.11:4.1.1:2.7.1:2.7.1:1.1.1:5.3.3:3.5.1 +2.8.3:4.2.1:2.3.1:2.3.1 +3.5.3:4.4.1:5.4.2:1.17.1:3.1.1:1.1.5:2.5.1 +1.1.2:1.13.11:1.1.1:2.3.1:1.14.11 +4.2.3:1.1.1:3.1.2:2.7.1:2.7.1:1.14.19 +1.2.1:1.8.7:4.1.2:1.1.1:1.13.12:4.2.1:2.7.7:2.3.1:1.1.1:1.1.1 +1.2.5:1.13.11:1.17.1:3.1.1:2.5.1:2.2.1:5.4.99 +2.3.3:2.3.3:2.7.1:9.9.9:2.1.1:2.1.1:1.1.5 +1.1.1:2.7.1:1.17.7:1.3.99:1.1.1:1.8.3:3.1.3:2.7.1:1.14.15 +4.2.3:2.7.1:1.1.1:4.3.2:1.2.1:2.3.1:1.3.1:3.1.2:6.2.1:1.1.1:1.1.1:6.4.1:3.1.2:4.2.1 +5.4.2:5.3.1:9.9.9:1.1.1 +3.5.4:1.1.1:1.1.1:2.7.1:2.6.1:1.13.11 +1.13.11:3.1.3:1.1.1:1.1.1:4.2.1:2.7.7 +3.1.3:5.4.2:1.3.1:6.2.1 +5.3.3:2.7.2:4.2.1:4.2.1 +4.2.1:4.1.2:1.13.11:2.3.1 +2.7.6:4.1.1:1.3.1:1.14.14:2.3.3 +5.4.2:1.8.7:5.4.2 +1.1.1:1.1.1:4.2.1:1.5.8:6.2.1:3.5.3:3.1.3 +5.3.3:1.17.1:1.1.1:1.1.1 +4.2.1:6.2.1:4.2.3:3.1.1:4.2.1:2.7.7:2.6.1 +1.1.1:5.4.2:1.5.3:3.1.3:2.7.7 +5.4.2:1.2.7:1.2.1:2.3.1:2.3.3:1.1.1 +2.8.3:2.3.1:3.7.1:9.9.9 +1.1.1:1.1.1:1.1.1:1.1.1:4.1.1:1.1.1:3.1.3 +3.1.1:6.4.1:5.5.1:1.2.7:4.2.1 +2.7.1:1.1.1:2.5.1:4.2.1:4.2.1 +1.1.1:6.2.1:1.14.14:2.1.2:4.4.1:1.14.14:2.6.1:2.3.1:4.1.2 +4.2.1:1.1.1:1.1.1:4.4.1 +1.3.8:1.17.4:6.2.1:6.3.3:1.1.1 +5.3.1:1.1.1:9.9.9:1.14.14 +2.6.1:2.6.1:1.14.19:9.9.9 +6.4.1:2.7.1:4.2.1 +9.9.9:1.13.11:1.1.1:3.1.2 +1.14.13:2.5.1:1.14.14:1.17.99:1.3.1:5.5.1 +1.4.4:1.1.1:3.1.2:1.1.1:2.7.1:1.1.1:2.7.3:1.1.1 +1.1.1:4.2.1:4.3.3:2.7.1:2.3.1:1.1.1:3.5.1 +1.13.11:2.3.3:4.4.1:1.1.1 +1.3.8:1.8.1:2.7.2 +1.1.1:1.1.2 +4.2.1:5.1.1:1.1.1 +2.7.1:4.2.1:2.6.1:2.7.1 +1.1.1:2.7.4:4.2.1:4.2.1 +3.1.1:4.4.1:4.2.1:2.7.2:2.3.1:1.1.1:4.4.1 +6.3.4:1.13.11:6.2.1:1.2.1:1.1.2:1.2.5 +2.7.4:1.1.1:1.1.1:3.1.4:9.9.9:1.1.1 +1.1.1:2.3.1:2.1.1:6.3.5 +3.1.3:1.5.3:1.17.1:5.4.2:3.5.3:5.3.3:3.1.2:1.2.4 +2.7.1:2.7.7:2.3.3:1.1.99:1.1.5:1.1.1:1.17.4 +6.2.1:4.2.1:1.17.7:1.14.13:2.3.1:1.13.11:2.7.2 +2.7.1:3.1.2:2.1.1:1.1.1:3.1.3:1.2.7:2.7.9 +5.3.2:4.2.1:2.7.1:4.1.2 +4.4.1:6.2.1:3.1.4 +4.1.1:1.14.19:1.13.11:1.1.1:6.3.4:1.2.7:1.1.1:4.2.1 +1.1.2:1.1.1:2.5.1:5.3.1:2.1.1:4.3.1:4.4.1:2.7.1 +1.1.2:1.14.14:5.5.1:5.3.2 +1.1.1:1.1.1:2.7.1:1.5.3:2.5.1:1.13.11:1.14.14 +2.6.1:2.7.1:4.1.1:2.7.1:4.2.1:5.4.2:6.3.4:1.1.1 +2.7.1:1.1.1:1.1.5:3.2.2:9.9.9:1.14.15:2.3.3 +2.3.1:1.1.1:1.13.11:1.14.13:9.9.9:5.3.1:4.1.3:1.1.1 +1.14.14:2.6.1:3.1.6:5.4.2:4.2.1:1.1.1:1.1.1:1.1.1:1.1.1:5.3.2:4.3.1:4.2.1 +2.3.1:1.1.1:1.1.1:1.2.7:5.4.2 +1.1.5:1.2.5:1.1.1:2.7.8:1.14.11:1.2.1:1.1.1:1.1.1 +2.6.1:2.7.2:1.14.14 +5.4.99:2.7.7:1.1.1:2.1.1:4.1.3:2.7.7 +1.1.1:1.14.12:2.7.7:1.1.2 +2.3.1:5.3.1:1.1.1:1.14.15:2.1.2:2.7.4:2.4.2 +4.1.1:3.1.1:1.1.1 +6.2.1:4.2.1:1.14.16:2.7.1:5.5.1:3.1.3:1.1.1:4.1.1:2.7.1 +2.7.1:2.3.3:2.7.7:5.1.3 +1.14.15:5.3.1:1.14.11:9.9.9:6.3.5 +1.14.15:3.5.1:2.3.1:2.7.1:1.2.1:6.2.1:3.5.1:1.1.1 +2.6.1:1.3.8:1.1.3:6.4.1:1.2.1:1.1.2:9.9.9 +1.14.13:4.4.1:3.5.2:5.3.1:3.1.3:2.5.1:1.1.1:1.14.15:1.11.1:4.4.1:2.7.4 +3.5.4:2.1.2 +4.2.1:2.7.9:4.6.1:4.4.1:1.1.5 +1.2.5:1.2.7:1.1.1:2.7.6:2.7.7:2.7.7 +2.6.1:5.3.1:1.11.1:1.17.4:4.4.1 +1.1.1:1.8.1:1.1.1:1.13.11:3.5.4:4.2.1:9.9.9:1.1.1 +1.3.1:2.7.1 +4.4.1:1.3.8 +1.13.11:1.2.1:9.9.9:6.4.1:2.4.2 +1.1.1:1.1.1:1.2.1:4.1.1:1.1.1:1.2.7:1.1.2 +6.2.1:1.1.1:2.7.1:1.2.1:1.1.1:3.1.2:1.14.19:2.3.1 +5.4.99:1.14.15:1.1.5:3.6.1:9.9.9 +1.2.5:1.1.1:2.7.1:1.13.11:2.6.1 +2.7.4:1.17.4:2.3.1:5.1.3:4.1.1:3.1.2:4.1.1:1.8.3:1.1.1:2.3.1 +1.1.1:1.1.1:1.1.3:1.1.1:2.3.1 +2.2.1:1.1.5:1.2.4:2.7.1 +1.14.13:1.2.4:1.2.7:1.1.1:1.1.1:3.1.3:2.8.3:3.1.1 +2.8.3:5.3.1:2.7.2:3.5.4:3.1.1:2.7.1 +4.2.1:2.7.4:5.3.3:1.17.4:4.2.3 +5.3.3:5.3.1:2.3.1:5.4.2:1.1.1:1.1.98:2.5.1:2.7.1:2.3.1 +1.1.1:4.1.3:2.7.4 +2.3.1:3.4.19:1.1.5:2.3.3:4.1.1:2.7.1:1.11.1:1.13.11 +1.4.3:3.1.2:9.9.9:3.3.1:2.1.1:2.4.2:1.8.4 +2.6.1:5.5.1:1.13.11:1.1.1:1.2.1:1.1.1:1.2.7:5.4.2:2.7.2 +2.7.1:1.2.3:3.1.1:1.1.1:4.1.2:1.1.1:1.1.1:9.9.9:2.7.8 +2.5.1:1.1.1:4.1.1:4.4.1:1.2.7:1.1.1:1.14.99 +1.1.1:2.8.1:2.1.1:2.7.1:4.1.3:4.1.2:1.2.1:5.3.3:2.6.1:9.9.9 +1.14.13:1.1.1:4.6.1:2.6.1:4.1.2:2.7.2:1.8.4:1.14.14 +1.1.1:2.3.1:2.5.1 +1.2.7:1.1.1:3.1.1:2.3.1:1.1.1 +4.4.1:1.1.5:1.1.1:5.4.2 +1.13.11:4.2.1:4.2.1:1.1.1 +1.1.1:1.2.1:1.1.1:5.1.3 +4.2.1:1.1.5:2.7.1:1.3.7:3.1.3:3.6.1 +4.4.1:1.1.1:2.3.1:1.14.12:1.1.1:5.3.1:1.2.4:4.6.1:5.3.1:1.5.8 +4.1.1:2.7.8:2.7.9:2.7.1:2.7.7:1.2.1:1.14.14:2.7.1:1.1.1:1.1.1:4.1.3 +1.2.7:2.3.1:2.3.1:2.7.1:2.7.1:1.1.1:2.7.7:1.2.1:5.5.1:2.6.1 +9.9.9:1.14.16:4.4.1:6.4.1 +1.1.1:2.7.4:1.1.1:1.14.14:5.3.3 +1.14.13:2.3.1:3.1.3 +4.1.3:1.13.11:1.1.1:1.1.1:1.3.1:1.1.98 +2.7.1:3.1.2:2.3.1:1.8.5:2.1.2 +2.3.1:1.14.12:1.1.1:2.1.4:1.1.2:4.1.1:1.1.1:2.7.7:2.7.1 +4.2.1:1.1.1:1.1.1:1.1.5:1.1.1:1.1.1 +4.2.1:2.6.1:4.4.1:1.13.11:2.7.7:4.4.1 +1.14.99:3.1.3:4.2.1:1.1.1:1.14.14:5.3.1:1.3.1:1.5.3 +1.14.13:3.1.3:4.1.1:9.9.9:1.4.3:4.2.1 +6.4.1:3.1.3:2.8.3:1.17.4:5.1.3:5.1.3:2.7.7 +1.1.2:2.4.2:5.3.3:2.7.1:1.4.9 +4.2.1:2.4.2:4.1.1:1.1.1 +1.1.1:3.6.1:1.17.7:4.3.1:2.6.1:1.1.1 +1.14.99:1.13.11:1.14.12:1.4.3:4.1.2:2.7.7 +4.4.1:2.7.1:1.17.4:2.6.1:2.7.2:4.2.1:3.1.3:2.7.1:1.14.14:5.5.1:2.3.1:4.1.1:2.7.2 +1.1.98:4.1.2:4.1.3 +3.1.1:1.3.1:4.1.2:4.2.1:1.1.1:1.1.99 +4.2.1:2.4.2:1.1.1:5.3.1 +4.4.1:1.1.1:1.1.2:3.6.1:1.17.4 +1.1.1:6.2.1:2.7.7:1.14.19:9.9.9:2.3.1:1.1.1 +3.1.1:2.1.1:4.1.2:1.14.13:1.2.1:1.1.1:1.1.1 +1.17.4:3.1.3:1.13.99:2.1.4:4.1.2:4.2.1:1.14.15:2.3.1:2.7.7:2.1.1:3.1.2 +1.3.1:1.13.11:1.4.5:2.1.1:1.3.1:1.14.16:1.1.1:5.3.1 +4.2.1:2.7.1:1.1.1:4.1.1:1.1.1:1.13.11:3.1.3 +2.5.1:1.2.4:1.2.1:1.1.1:1.1.1:2.1.2:1.4.3 +4.2.3:2.3.1 +1.2.1:6.3.4:2.1.1:3.2.1:1.2.1:1.1.1:1.1.1:1.2.5 +2.6.1:1.2.7:3.1.3:5.4.2:2.6.1:3.1.3:1.1.1 +5.5.1:5.1.3:4.1.2:2.4.2:4.1.2:1.2.1:1.1.2:1.14.13:5.3.3:1.1.2:1.14.14:2.8.3:2.7.4:9.9.9:1.2.5:2.7.4 +4.3.1:2.7.1 +5.1.3:2.7.2:5.3.1:2.7.9:5.3.3:5.5.1:6.3.4:1.1.1 +1.2.1:3.5.1:2.7.1:1.1.1:2.3.1:6.2.1:4.1.2 +1.2.1:2.6.1:2.7.1:1.14.13 +9.9.9:1.1.2:5.4.2:2.1.1:1.14.12:1.1.1:1.8.7 +2.7.1:1.2.5:2.6.1:4.2.1:1.14.13:1.1.1 +1.14.13:5.4.99:1.1.1:2.3.3:4.1.2 +1.1.1:1.1.1:1.1.1:1.2.7 +2.7.1:4.4.1:3.6.1:2.3.1:1.11.1 +1.1.3:6.4.1:3.3.2:2.3.1:1.1.1:2.1.2:1.1.1:2.3.1 +2.2.1:1.14.15:1.13.11:1.1.1 +5.3.1:1.1.1:1.1.1:2.3.3 +2.7.7:2.1.3:2.7.1:4.2.1 +2.7.1:2.4.2:1.8.5:2.7.7 +5.3.1:1.14.16:1.13.11 +1.5.1:1.1.3:6.3.2:1.14.14:2.7.4:1.1.1 +1.2.7:9.9.9:1.1.1:1.1.1:5.1.3:1.1.1:6.4.1:3.1.3:1.2.5:2.3.1:1.13.11:2.6.1:3.7.1 +3.5.4:1.1.1:2.7.6 +1.13.12:1.1.1:1.14.15:1.1.1:9.9.9 +1.3.8:1.1.1:4.1.1:1.1.2:4.1.3:9.9.9 +4.1.3:9.9.9:1.3.1:5.4.99 +1.14.15:1.11.1 +4.2.1:9.9.9:1.1.1:1.14.13:2.1.1 +4.2.1:5.3.1:1.5.1:4.1.2:5.4.2:5.3.1 +4.3.1:2.1.2:4.1.1:1.1.1:1.13.99:2.7.2 +2.7.7:1.2.3:1.1.1:3.1.1 +2.7.1:2.7.1:1.14.14:2.3.3:1.14.15:1.1.1:1.1.2:4.6.1:2.7.8 +2.6.1:2.3.1:4.2.1:3.7.1 +3.1.2:2.6.1:6.2.1:3.6.1:3.6.1 +2.3.1:1.2.7:2.3.1:1.1.1:2.1.1:4.1.2:2.3.1 +2.6.1:2.6.1:1.2.4 +2.1.1:2.7.1:1.18.1 +1.5.1:5.1.3:2.3.3:4.1.1 +1.2.1:1.2.1:1.2.3:6.3.4:1.1.1:1.13.11:4.4.1:5.4.2:1.1.2:2.1.1:6.2.1:3.6.1 +1.1.1:2.6.1:2.5.1:2.4.2 +1.1.1:2.7.1:3.1.3 +2.3.1:1.1.1:1.1.1:1.1.99:1.1.1:1.1.2:3.1.1 +4.1.2:1.1.99:1.13.11:2.7.4:1.2.1:3.1.3:2.1.2:3.1.2 +5.3.3:4.1.1:2.3.1:1.1.2 +3.1.3:1.14.13:2.3.1:4.4.1:5.3.1:2.7.1:1.1.1:2.7.7:2.7.7:3.1.3 +2.5.1:2.3.3:1.1.1:5.4.2:1.2.1:2.3.1 +1.1.1:4.1.1:2.5.1:4.2.1:2.8.3:4.1.2:3.1.2 +6.4.1:1.13.11:2.3.1:5.4.2 +1.1.1:1.13.11:1.1.1 +1.1.1:1.2.4:5.1.99:1.2.4:2.3.1 +2.6.1:4.1.3:2.7.1 +5.1.3:5.4.2:6.4.1 +1.14.16:4.4.1:1.3.1:2.7.1:1.1.1:2.6.1 +2.3.3:1.1.1:1.1.5:2.7.7:3.3.2 +5.3.1:1.1.1:2.2.1 +4.1.1:1.1.1:1.1.1 +4.1.3:5.1.2:1.1.1:3.6.1:3.1.3:2.3.3 +2.3.3:1.17.1:2.7.1:1.1.1:1.1.1:1.17.3:1.1.1 +1.8.1:1.2.7:1.1.1:1.3.1:1.1.1:5.3.1:2.3.1:1.1.1 +4.2.1:1.13.11:2.4.2:1.14.14:2.1.2:4.2.1 +1.1.1:1.2.1:3.7.1:2.7.7:9.9.9 +4.1.1:1.2.5:1.1.1:6.3.5 +1.3.8:2.1.1:2.5.1:1.1.5:2.6.1:4.1.3:4.4.1 +2.6.1:3.1.1:1.1.1:1.1.5:2.1.1:2.3.1:6.4.1:1.1.1:1.1.1 +3.1.1:2.7.7 +2.6.1:3.1.3:1.14.13:4.2.1:6.2.1:1.1.2 +2.3.3:1.2.7:4.1.1 +4.1.99:2.4.2:1.17.4:2.7.7:5.3.1:1.1.1 +1.14.15:1.1.1:2.7.1:1.1.1:9.9.9:1.1.5 +1.1.2:4.2.3:1.1.1:1.1.2:5.3.3:4.1.1 +2.1.2:3.1.2:2.6.1:1.1.1 +6.2.1:3.1.1:5.1.1:4.1.2:2.3.1:1.1.1:1.1.1 +4.2.3:2.7.7 +2.1.2:6.3.4:2.7.4 +1.14.14:2.3.1:2.7.1:2.6.1 +2.7.7:1.4.4:1.3.1:1.1.1:9.9.9:1.1.3:1.8.1:1.1.5 +4.1.2:1.1.1:4.2.1:5.4.2:1.1.1:1.13.11 +6.4.1:1.1.1:1.14.14:2.7.7:4.1.1:1.17.4 +2.1.1:2.8.3:2.3.1:2.7.7:3.6.1:4.2.1:1.2.7:4.1.1:2.3.1:2.7.1:1.17.7 +2.3.3:1.1.1 +1.1.1:2.7.1:4.1.2:1.1.1:9.9.9:4.4.1:1.18.1 +1.2.1:2.6.1:1.1.98:1.1.99:2.6.1:9.9.9 +6.2.1:1.1.1:1.1.5:2.6.1 +5.3.1:4.2.1:2.1.1:1.3.8:1.1.5:1.14.14 +2.7.1:2.7.8:5.3.1:5.1.99:1.14.14:1.1.1:1.13.11:1.1.2:1.5.1:5.3.1:1.1.1 +4.1.3:1.17.1:5.3.1:1.4.3:1.1.1 +2.8.2:2.3.1:1.13.99:1.14.14 +1.1.1:1.2.7:1.1.1:1.2.1:1.4.1:1.1.3 +4.1.3:2.7.2:1.1.1 +1.13.11:9.9.9:4.2.1:3.7.1:4.2.1:4.4.1 +2.1.2:1.13.11:9.9.9 +2.3.1:5.3.2:1.1.1:1.1.1 +1.1.3:5.4.99:1.1.1:1.2.1:1.2.7:1.14.13 +3.5.4:1.2.1:1.14.15:1.13.11:1.1.1:9.9.9:2.7.1:5.4.2 +2.8.3:1.14.13:3.6.1:1.3.5:5.3.1:2.6.1:3.1.3:4.1.3:1.1.1:2.7.1:1.1.1 +5.5.1:2.3.3:1.3.5:1.13.11:1.2.5:4.2.3:1.1.1:2.7.7 +1.1.1:2.4.2:1.1.99 +1.14.17:2.7.9:2.4.2:1.1.1:1.14.13:2.7.3:1.13.11:1.2.7 +3.5.1:3.1.3:4.2.3:1.1.1:3.1.2 +1.1.1:4.2.3:1.1.1:2.1.3:3.7.1:1.13.11:1.1.3 +1.14.13:3.1.3:2.3.1:1.1.1:4.1.1:4.1.1:1.1.1:5.5.1:2.1.1:1.17.99:1.17.4 +2.3.1:1.1.2:1.2.5:1.2.4:1.2.7:2.5.1:4.2.1:4.4.1:1.1.99 +1.14.15:4.2.3:2.3.1:3.1.3:2.6.1:2.4.1:2.7.4 +1.2.7:2.7.1:1.1.1:2.8.3:1.14.14:3.1.4:1.14.14:5.3.2 +5.3.3:1.1.1 +1.3.1:5.3.3:3.1.3 +2.3.1:2.7.1:1.1.1:4.2.1:2.3.3 +1.1.1:9.9.9:4.1.2:1.14.13:2.7.1:2.2.1:2.8.3:1.2.1:2.7.1 +1.1.1:4.1.3:4.2.1:1.1.1:4.2.3 +1.2.1:1.13.11:4.1.1:4.1.2:5.4.2:1.1.1:1.1.1:1.2.7 +3.1.3:1.14.16:4.2.3:2.1.1:5.3.1 +1.1.1:1.1.2:2.1.1:1.8.7:1.1.2:1.2.1:2.6.1:1.1.98:1.1.1:2.6.1:1.1.2 +6.2.1:1.2.1:3.1.2 +2.7.7:4.4.1:2.7.9:1.1.1:2.3.3:1.13.12 +5.3.1:1.14.13:4.1.2:1.14.13 +1.18.1:1.1.1:9.9.9:4.3.1:1.2.7:5.3.3:4.2.1:1.1.1 +1.1.1:1.1.1:1.1.1:1.1.99:1.1.1:2.3.3:2.7.7:4.2.1:5.5.1 +1.13.11:1.1.1:4.2.3:1.13.11:1.1.1:1.14.99 +2.3.1:2.3.1 +1.1.1:1.5.3:2.7.7:1.13.11:3.1.3:4.1.2:9.9.9:3.6.1:1.4.3:4.4.1 +4.1.1:1.14.14:1.1.1:2.3.1:5.4.2 +4.2.1:1.13.11:3.6.1:1.1.1:1.1.1:1.13.11 +4.2.1:2.6.1:3.1.2:4.4.1:1.2.1:1.14.14:5.1.1:2.7.7:1.1.5 +2.7.1:2.3.1:2.3.1:2.7.7:4.4.1:3.2.1:4.3.1:9.9.9:2.3.1:2.7.7:3.1.2:2.5.1 +3.5.4:3.1.3:4.4.1:6.2.1 +9.9.9:1.17.1:1.2.1:1.1.1:2.3.1:1.7.3 +4.3.1:2.7.1:1.14.14 +4.1.1:1.14.13:2.3.1:2.7.1:1.1.1:6.3.2 +2.6.1:3.5.4:1.2.1:5.4.2:2.3.1 +3.1.3:5.4.2:5.5.1 +1.2.1:2.7.7:5.3.3:1.1.1:3.1.3 +2.7.1:2.3.1:1.1.1:3.1.3:3.7.1:3.1.3:1.2.1 +4.1.3:2.6.1:5.3.3:2.3.1:1.1.1:2.3.1:4.1.2:1.2.1:1.2.7:1.13.11 +1.1.1:2.7.1:6.2.1:1.5.8:2.5.1:5.3.1:1.8.4:1.3.5:3.5.1 +6.3.5:2.7.1:4.2.3:2.3.3:2.7.7:4.1.1:1.2.4:1.11.1:3.1.3 +1.14.14:5.5.1:3.2.1:4.1.2:1.1.1:2.7.4 +1.17.1:6.2.1:1.1.1:1.1.1:1.14.14 +2.7.9:5.4.2:1.17.1:2.7.1 +3.1.4:6.2.1:2.7.9:1.1.1:1.13.11:2.7.7 +1.1.1:9.9.9:3.1.3:9.9.9 +1.1.1:1.1.1:1.2.4:4.2.1 +1.1.1:5.3.1:1.14.13:1.2.1 +1.3.5:3.3.2:1.1.1:2.8.2:5.1.3:1.1.1 +1.17.1:4.4.1:1.3.1:2.6.1:1.2.4:1.1.1:4.1.3:1.2.1:1.1.1:4.2.1:3.3.2:5.3.99:6.3.2 +1.14.11:1.1.1:4.1.1:1.1.1:1.1.5:2.7.2:4.3.1:4.2.1:1.1.1:2.7.2 +2.8.3:1.13.11:2.7.1:1.2.1:1.2.7:1.1.1:1.1.1:1.13.12:2.4.2:1.3.8:2.3.1 +2.3.1:5.4.2:1.14.13:1.1.1:1.1.1 +6.3.5:1.1.5:1.3.8:4.6.1:1.17.1:1.1.1 +2.1.2:9.9.9:4.2.1:2.4.2:3.1.3 +4.3.1:1.5.3:4.2.1:5.3.1:2.3.1:2.2.1:4.3.1 +4.2.1:2.6.1:1.1.1:3.1.2:5.4.2 +4.4.1:9.9.9:5.1.1:1.14.15:1.13.11 +2.7.1:4.2.1:1.1.5:1.5.3:2.3.1 +1.8.7:1.3.1:1.8.1:3.1.1 +1.1.5:1.17.7 +1.8.4:1.1.1:3.1.3:9.9.9:1.14.12:5.3.1 +1.1.1:5.3.1 +1.14.14:1.17.99:2.7.1:1.14.13:1.2.1:4.4.1:1.13.11:1.1.1:1.2.1:5.3.1 +2.7.2:9.9.9:1.17.99:2.1.2 +1.3.8:1.2.1:1.1.1:2.7.1 +1.14.16:2.3.1:1.2.1:1.2.1:1.14.14:1.1.2:1.14.13 +1.4.4:2.6.1:1.5.8:4.2.1:2.7.2:6.2.1:2.1.2 +4.2.1:2.7.1:2.7.2:4.2.3 +1.1.1:1.11.1:1.11.1:3.1.3:1.1.1:6.4.1 +2.7.7:1.1.1:1.14.99:4.1.1 +1.14.13:2.3.1:2.1.1:1.1.1:1.2.4:2.2.1:3.1.1:1.1.1 +1.1.1:2.3.3:5.3.1 +1.14.12:3.1.2:2.7.1:1.1.1 +6.2.1:2.6.1:4.1.2:3.1.1:1.3.8:6.2.1:1.1.99:2.7.1 +1.1.1:4.1.1:4.1.1:9.9.9:3.1.2:3.1.1:2.5.1 +2.8.3:2.7.1:2.7.2:1.11.1:1.14.11:1.4.3:1.13.11:1.14.19 +2.5.1:5.3.3:2.8.3:4.4.1:2.6.1:1.1.1 +2.3.1:1.1.1:2.5.1:5.1.1:2.4.2:3.1.3 +1.13.11:1.14.12:4.2.1:3.1.2:4.2.1:2.7.4 +1.5.1:6.2.1:4.2.3:1.1.1:1.14.16:5.1.3:2.7.1:1.1.1 +3.2.1:1.2.4 +2.7.7:2.7.8:4.1.2:1.8.7:4.2.1:1.1.1 +3.1.3:1.14.13:2.7.1:9.9.9 +4.2.1:1.14.15:2.2.1:1.1.1:2.7.4 +1.1.1:4.2.1:1.1.1:2.6.1:1.1.1:4.2.1 +2.1.2:1.1.1:1.1.1 +2.7.1:1.1.2:9.9.9:5.4.99:4.1.1:1.2.7:4.4.1 +1.1.1:4.1.2:1.2.1 +2.7.9:2.3.1:2.6.1:1.1.1:4.2.1:2.7.9 +5.3.1:2.3.1:3.1.2:1.3.1:4.1.1:1.3.5:4.1.3 +1.1.1:1.1.2:3.1.3:5.4.2:2.7.1:4.6.1:4.1.3 +2.5.1:2.3.1:3.1.2:1.17.4:4.2.1:4.1.1:3.3.2:3.5.2:2.5.1 +1.1.1:3.1.3:3.1.2:6.2.1:4.1.2 +1.1.1:2.3.1:4.3.2:4.1.2 +4.1.3:2.7.4:3.1.6:2.1.3:5.5.1:3.7.1:2.7.7:1.1.1 +9.9.9:1.2.7:3.6.1:1.2.4:5.1.99:5.4.2:6.2.1:4.1.1:1.17.1 +3.5.4:1.3.1:1.3.1:2.1.2:1.1.1:2.1.1:1.14.13 +2.3.1:2.2.1:2.7.4:5.5.1:9.9.9:1.1.1:1.3.8:2.6.1:4.2.1:2.6.1:1.13.11 +4.1.2:3.1.3:1.1.2:2.7.1 +1.8.4:2.3.3:9.9.9:1.1.1:3.5.4:2.7.7 +2.3.3:2.3.1:2.6.1:2.7.4 +2.3.1:2.7.1:3.1.3 +1.14.11:1.13.11:1.1.1 +1.1.1:1.1.1:1.14.14:2.7.7:1.13.11 +2.3.1:4.1.3:2.7.8:1.1.1:1.1.1:2.7.1 +3.1.3:2.7.4:3.1.1:2.3.1 +3.1.2:1.1.1:1.13.11 +1.13.11:1.14.15:1.13.11:1.1.1:2.3.1:1.1.2 +1.14.13:1.13.11:2.6.1:1.1.1:1.5.8:2.6.1:5.1.99 +9.9.9:1.1.99:1.2.1:2.3.1:4.1.1:1.1.1:2.7.7:3.1.2:2.7.1 +1.14.13:1.14.14:1.1.1:2.7.7:2.6.1:2.4.2:2.2.1:3.5.4:1.13.11 +4.4.1:1.1.1:2.3.3:1.1.1 +2.7.1:4.1.1:2.1.1:1.4.3:2.3.1:5.3.1:4.2.1:2.7.4:1.1.1 +4.2.1:1.2.7:1.13.11 +2.7.1:2.8.3:6.2.1:1.1.1 +2.3.1:1.2.7:1.14.11:1.3.1 +6.4.1:1.2.1:1.1.1:1.1.1 +1.1.3:1.1.1:5.4.2:1.2.1:2.7.1:2.3.1:3.6.1:4.3.1:1.14.13:2.7.1:1.1.1 +1.2.5:3.1.1:2.3.1:3.1.2:2.7.4:3.2.2 +1.1.1:1.1.1:9.9.9:2.4.1:4.1.1:3.6.1:9.9.9:2.6.1 +1.1.1:1.1.98:2.3.1 +1.1.1:1.2.7:3.5.1:4.2.1:1.3.8:2.3.1 +1.1.98:1.13.11:5.4.2:1.14.13:9.9.9:4.2.1:4.1.99 +3.1.3:1.13.11:3.6.1:1.13.11:2.6.1:5.4.99:5.1.99 +2.7.4:9.9.9:1.13.11:3.1.3:1.1.1:2.3.1 +2.3.3:1.1.1:1.14.15:2.6.1:2.3.1:2.3.1:1.1.1:1.1.1:4.2.1:1.1.5:6.2.1:2.3.1 +4.1.2:2.7.7:2.7.1:5.3.1:2.1.2 +9.9.9:1.1.1:3.1.2:2.7.1:1.1.5:3.1.3 +1.2.1:4.1.2:2.3.1:4.2.1:2.6.1 +4.1.1:3.5.2:4.1.3:6.4.1 +1.8.4:4.2.1:9.9.9:2.3.1:3.6.1 +1.13.11:2.7.7:1.1.1:1.1.1:4.1.1 +2.7.1:1.1.5:3.6.1 +1.1.2:2.2.1:2.6.1:3.7.1:1.13.11:1.13.11:1.1.1 +1.1.1:1.5.8:1.1.5:3.1.3:2.7.8 +3.1.3:3.7.1 +2.8.3:5.4.2:1.1.1:2.3.1 +4.2.1:3.1.6:2.3.1 +1.18.1:1.3.8:2.7.1:3.6.1 +1.1.1:9.9.9:1.13.11:4.4.1:2.1.2 +5.5.1:1.2.1:3.1.4:1.2.1 +1.1.1:5.3.1:1.1.1 +3.5.3:1.1.1:6.2.1:6.6.1:2.7.2:1.8.4:2.6.1 +3.2.1:1.1.1:2.2.1:5.4.2:1.1.1:1.3.1:2.3.3:4.1.3:1.13.11 +2.5.1:2.3.1:1.14.14:4.2.3 +1.2.1:1.14.14:4.2.3:2.6.1:5.3.1:5.3.1:1.1.1:6.2.1:3.1.3 +5.3.1:1.1.98:6.4.1:1.1.1 +6.2.1:2.3.1:1.3.5 +3.1.3:1.14.14:2.7.7:2.7.1:2.7.1 +2.1.1:1.1.2:1.2.1 +1.1.1:1.14.14:1.14.14:4.1.2:2.6.1 +1.1.2:1.1.1:3.7.1:2.1.2:3.1.2:1.1.1:2.7.4 +2.3.1:1.1.1:1.1.1:2.8.3 +2.4.1:6.2.1:3.1.3:1.1.1:4.4.1:1.2.1:1.5.1:2.1.2:2.3.1 +2.3.1:3.1.1:2.4.1 +2.7.1:1.2.3:5.4.99:1.1.1:1.1.3 +1.3.8:4.3.1:1.14.14:2.6.1:1.2.1 +1.3.1:1.14.14 +1.1.2:3.7.1:1.13.11:1.2.1:1.13.11 +4.1.1:4.1.1:1.1.1:1.17.1:2.4.1:2.7.9:4.3.1:1.3.5 +4.2.1:1.1.1:2.7.7 +2.3.1:1.3.3:1.14.16:9.9.9:1.1.1:2.7.1:2.7.2:4.1.1 +1.1.5:1.17.7:1.2.5:1.1.1 +2.7.1:1.1.1:1.13.11:3.6.1:5.4.99:2.7.1 +4.2.3:3.6.1:4.2.1:1.5.8:2.3.1:2.7.1:1.7.3 +1.14.13:2.3.1:4.1.3:3.6.1:5.4.2:3.2.1:2.3.3 +5.4.2:1.13.11:1.13.11 +6.2.1:1.1.1:3.1.1:3.5.4:4.1.2:4.1.2:5.1.99:1.1.1:2.2.1:9.9.9:2.6.1:3.1.2:2.7.7 +1.1.1:6.3.4:3.6.1:5.99.1:1.14.15:2.7.1:6.4.1 +4.2.3:1.2.5:2.3.1 +1.5.1:1.1.1:2.7.7:1.2.1 +4.3.1:9.9.9:1.1.1:4.2.1:2.7.7 +9.9.9:2.7.3:5.5.1:2.7.1:2.7.1:2.5.1 +5.4.2:3.5.4:1.2.7:1.1.1:1.1.1:2.7.1 +1.1.99:1.2.7:5.5.1:2.4.1:2.7.2:1.1.1:5.3.2:2.4.2:1.14.13 +1.14.16:6.4.1:4.2.1:1.2.1:1.13.11:1.13.12:9.9.9 +1.1.1:1.2.1:2.7.7:2.1.1:1.8.1:2.4.2:4.2.1:1.2.5:2.2.1:3.1.3:1.3.1 +4.4.1:1.1.1:1.13.11 +2.3.1:1.3.5:1.1.1:2.3.1 +1.1.1:1.2.5:1.1.1:1.14.16:2.7.1:3.1.3:4.1.1 +1.1.1:1.2.1:2.7.2:2.1.2 +1.1.1:3.3.2:2.7.7:2.6.1:2.7.1:4.4.1 +5.1.1:2.3.1:3.1.1:9.9.9:1.2.4:2.1.1 +2.5.1:2.6.1:3.1.2:3.3.1 +3.6.1:1.1.2:1.1.1:3.3.2 +4.1.1:2.7.1:1.14.11:1.1.98:3.5.1:1.13.11:2.3.3 +2.7.1:1.1.1:3.1.3:1.5.1:2.4.2 +1.13.12:2.7.6:3.1.3:4.1.2:2.7.1:2.6.1:4.1.1 +9.9.9:2.3.1:3.1.1:4.1.1:4.1.1 +3.6.1:2.7.7:5.4.2:2.2.1:3.6.1:1.2.1:1.1.1:2.6.1 +1.3.8:1.14.14:1.1.3:1.11.1:1.1.2:1.13.12:1.5.8 +4.1.2:1.1.1:2.1.2 +4.2.1:2.5.1:4.2.1:2.3.1:1.1.98:2.7.4 +2.7.1:2.5.1:9.9.9 +2.3.3:2.3.1:1.14.14 +5.3.1:2.6.1:2.4.2:4.4.1:1.14.13:1.13.11:5.1.2 +5.4.2:1.1.1:1.1.1 +1.2.1:1.1.1:2.6.1:2.3.1:4.1.1:5.1.99:2.4.2 +6.2.1:2.7.1:1.2.4:1.1.1:1.2.1 +1.14.14:2.3.1 +3.1.2:1.1.1:1.2.4:2.7.1:1.1.1:1.5.8:2.7.7 +2.4.2:1.3.1:1.1.1:2.6.1:1.1.5 +1.8.3:1.1.1:1.14.13 +1.1.1:3.5.4 +1.14.14:2.3.1:1.1.3:2.1.2 +1.1.1:1.3.1:1.1.1:1.1.1:1.1.1:9.9.9:2.6.1:3.5.4:1.1.1:4.3.1 +1.2.1:3.5.2:1.8.7:4.2.1:2.3.1:2.6.1:1.4.3 +1.4.4:2.7.1:1.13.11 +4.1.2:4.2.1:2.6.1:3.1.3 +2.7.1:2.6.1:9.9.9:2.7.1:2.3.1:1.2.5:1.1.1:6.2.1:1.1.1:2.4.2 +6.3.5:1.5.3:4.4.1:4.2.3:1.13.11:3.6.1 +2.7.2:3.5.1:1.1.1:2.3.1 +1.2.4:4.2.1:3.5.4:5.4.2:1.14.99 +3.1.2:2.3.1:2.6.1 +6.4.1:3.4.11:5.3.3:1.5.8:2.6.1:1.11.1:1.1.1:1.1.1:2.3.1:3.1.3 +3.1.3:1.1.1:2.7.1:3.6.1:1.2.1:1.1.1:2.3.3 +4.1.3:1.1.1:2.6.1:1.2.4 +4.2.3:3.1.1:5.3.1:1.2.1:4.2.1:2.7.1:1.14.11 +1.3.5:2.7.1 +1.14.11:6.3.3:6.3.5 +1.1.5:5.3.3:2.3.3:1.2.4 +4.4.1:1.2.1:2.6.1:1.1.1:4.1.2 +4.1.1:1.1.3:1.1.1:1.13.11:4.2.1 +4.1.1:2.1.1:3.5.1:2.7.7:4.2.1 +1.5.8:4.1.3:1.14.12:1.1.1:2.7.1:4.1.1 +4.2.3:1.14.14:1.1.1:4.2.1:2.7.1:2.3.1:5.3.1:1.17.99:5.3.2 +2.2.1:1.1.3:3.1.4:4.1.2:1.13.99 +1.13.11:9.9.9:2.3.1:4.2.1 +1.14.11:1.2.1:2.3.3:3.5.4:1.13.11:5.5.1:3.1.3 +2.5.1:2.3.1:2.7.8:1.14.14:2.5.1 +5.1.99:4.2.3:5.4.99:1.13.11:4.2.1:4.1.1:4.2.3 +2.3.1:1.2.1:6.2.1:1.13.11:9.9.9 +6.2.1:4.1.2:1.1.1:1.3.1:1.1.1 +1.1.1:2.7.2 +4.1.1:2.5.1:1.3.1:1.1.98:2.7.1:1.3.1 +5.3.1:1.14.15:1.1.1:1.2.1:1.1.1:2.7.9 +3.1.3:1.2.4:4.1.3 +2.5.1:4.2.1:4.2.1 +4.2.1:1.1.1:5.4.99:2.1.2:1.1.1:5.4.2 +5.4.2:1.2.1:2.3.3:2.7.4:2.5.1:2.3.1:2.6.1:2.6.1 +1.1.1:1.1.1:1.8.7:3.1.2:1.1.1 +6.2.1:1.13.99:2.3.1:1.13.11:1.1.1 +2.7.2:5.3.2:2.7.1:1.2.7 +1.1.1:1.5.8:1.3.1:4.1.2:1.5.8:4.3.1:1.13.11:4.2.1:6.2.1 +2.1.3:2.3.1:9.9.9:9.9.9:1.1.3 +1.1.1:3.1.2:2.6.1 +3.3.1:2.3.1:3.1.4:2.6.1:2.7.7:2.7.7:2.4.2:4.1.3 +1.14.13:3.1.1:4.1.3:2.3.1:1.1.1:9.9.9 +3.1.3:3.5.4:4.2.1:2.7.7:5.1.99:4.1.2 +2.7.4:2.8.1:3.1.3:1.14.99:2.7.7 +2.7.7:4.2.1:3.1.3:2.8.3:2.6.1:2.1.2 +2.8.3:2.7.7:1.1.1:4.2.3:1.14.14:9.9.9 +2.8.3:1.1.2:1.1.1:2.4.2:1.2.1:2.3.3:3.1.2:1.14.19:2.3.1 +1.1.1:1.1.1:5.4.2:4.2.3:3.5.1:1.11.1 +9.9.9:4.3.1:1.8.7:1.1.1:2.5.1:2.3.1 +1.1.1:1.1.1:2.7.1:1.13.99:4.1.1:1.1.5:2.6.1 +2.3.1:1.8.3:2.4.2:5.4.2:6.2.1:1.1.1:3.2.1 +5.3.3:4.1.1:5.3.1:1.1.1:1.13.11 +5.4.2:2.7.1:1.2.1:1.2.4:2.3.1:2.6.1 +1.3.1:5.4.99:2.6.1:2.3.1:1.1.1 +5.4.2:1.4.1:2.7.1:3.1.6:9.9.9 +1.1.1:1.1.1:3.2.1:1.13.11:1.1.1 +6.2.1:2.7.7:1.1.1:1.1.1 +1.14.11:1.1.1:3.5.2:1.13.99:4.2.3 +2.4.2:2.7.1:4.4.1:3.1.4:6.3.5:2.7.7:3.1.3 +1.13.11:2.3.1:1.13.99:2.7.4:1.1.2:1.1.1:2.7.7:2.7.1:3.1.3 +2.3.1:3.1.3:3.1.3:1.1.1:6.2.1:2.6.1 +1.13.99:4.2.1:6.2.1:1.3.5:4.1.1:3.7.1 +1.2.1:2.7.6:3.3.2:2.7.1:5.5.1:4.1.1:5.1.99:1.2.1 +1.2.1:2.8.3:1.1.1:1.8.3:1.1.1:1.3.8:1.1.1:3.1.3:5.1.3 +1.14.14:1.1.1:4.2.1:3.1.3:4.2.1 +9.9.9:4.2.1:2.3.1:9.9.9:1.3.1:1.5.8:2.6.1:1.2.1:5.3.3 +1.1.2:2.4.2:2.3.1 +2.7.1:2.6.1:1.2.1:9.9.9 +1.2.4:3.1.1:4.1.3:1.2.1:1.1.1:1.2.4:1.14.99:1.17.4:1.1.1 +1.1.1:4.2.1:2.5.1:1.1.1:9.9.9:1.1.1 +3.1.1:2.7.7:2.4.1:1.14.14 +1.8.7:2.5.1:6.2.1:2.3.1:4.2.1:5.1.99 +3.1.2:2.5.1:6.4.1:9.9.9:2.4.1 +2.7.9:1.13.11:1.1.1:2.7.7 +2.2.1:1.1.1:5.4.2:6.2.1 +3.1.1:6.4.1:1.1.1:1.1.1 +5.5.1:6.2.1:3.7.1:2.7.1 +1.1.1:6.3.4:4.4.1 +3.1.3:1.8.99:2.3.1 +1.14.14:5.4.2:1.1.1:1.14.15 +2.7.4:1.1.1:4.1.3:4.4.1:2.5.1:1.5.1 +1.4.9:2.3.1:1.1.5 +1.1.1:4.2.1:3.1.3:6.2.1:3.1.4 +2.7.7:2.7.1:2.3.3 +1.1.1:1.8.1:5.4.2 +2.3.1:3.5.3:2.5.1 +1.1.1:1.3.1 +1.1.1:4.1.3:1.1.1 +5.1.3:1.14.13:2.6.1:6.2.1:1.2.7:1.1.1 +2.6.1:5.3.2:1.2.7:1.2.1:9.9.9 +1.1.1:4.1.1:2.1.2:2.6.1 +1.8.4:4.1.3:2.3.1 +2.7.2:4.2.1:2.5.1 +4.2.1:4.1.1:4.1.2:1.14.13:1.1.1:1.1.1:1.14.15 +1.1.1:2.3.3:1.1.98:2.2.1:1.1.5:1.1.1:4.2.1 +3.1.3:3.1.5:4.2.1:4.2.3:4.2.1:4.2.1:1.1.1:1.2.1 +2.3.3:2.1.1:1.17.1:1.14.12:1.1.98:1.1.2 +5.4.2:4.2.1:3.1.3:2.3.1:4.2.1:2.7.7:2.7.1 +1.1.1:2.4.2:1.1.2:3.1.3:3.1.2:1.1.1:1.14.11:3.5.3:5.4.2 +1.1.99:4.2.1:1.11.1:3.5.2:4.1.1:5.3.3:1.3.1:2.7.2 +2.7.1:1.1.1:2.7.1:2.6.1 +1.1.1:1.2.1:2.7.4:2.3.1 +1.17.1:4.2.1:4.1.3:2.7.7:2.8.3:6.2.1 +2.7.7:2.5.1:4.2.3:5.3.3:5.4.2 +2.7.1:1.4.3:1.1.1:2.6.1:1.1.1:2.3.1 +1.1.1:1.1.1:2.3.1:2.1.1:1.13.11:2.7.7:4.2.1 +2.7.9:2.3.1:1.3.1 +1.1.1:1.5.8:2.5.1 +1.13.11:1.1.99:1.1.1 +1.1.1:2.3.3:2.3.1:1.1.5 +5.4.2:5.4.2:4.2.1:3.5.4 +2.6.1:1.1.1:4.1.3:1.13.11:2.6.1:1.1.1 +2.3.1:3.5.3:2.4.2:3.7.1 +2.7.1:4.3.1:1.1.1:3.1.3 +1.1.1:1.5.1:4.4.1:2.6.1:3.1.3 +2.1.1:1.8.4:1.3.1:5.3.1:2.3.1:2.8.3:5.5.1 +1.3.8:4.2.1:1.1.1:1.1.1:1.8.1:4.2.1 +4.2.1:1.13.99:2.6.1:3.1.1:2.7.7:2.7.9 +1.1.1:1.1.1:4.1.2:1.1.1:1.5.8:1.2.1 +1.1.1:2.7.2:1.1.2:6.2.1:2.7.1 +1.2.1:2.5.1 +1.14.14:1.1.1:1.5.1:1.2.4 +1.1.1:1.1.3:1.14.11:3.6.1:1.2.5:1.13.11:6.2.1 +1.1.1:1.1.1:9.9.9:1.1.1:5.5.1:4.4.1:3.1.3:1.2.1:1.2.4:1.1.1 +4.1.2:5.4.2:1.8.4:4.1.1 +2.1.1:1.5.3:1.17.4:4.4.1:4.1.1:2.7.1:4.4.1:3.5.4 +1.1.1:1.1.1:2.3.1:5.4.2 +4.4.1:1.14.14:1.2.7:4.1.3:2.7.4:3.1.3:2.7.1:2.1.1 +5.3.1:2.3.1:5.3.1:1.1.1:4.2.1:1.14.15 +1.2.5:1.14.12:4.1.3:3.2.1:2.7.1 +2.1.1:1.2.5:1.2.1:2.7.1 +2.3.1:1.1.5:2.3.1:1.2.7:2.6.1 +2.7.1:6.2.1:1.14.12:1.1.1:1.1.5:2.7.1:2.4.2:6.2.1 +1.2.4:1.14.19:4.2.1:1.1.1 +4.1.3:4.6.1:4.2.1:6.3.4:1.17.4:4.2.1:4.2.3:2.3.3:2.7.9:4.1.2:2.6.1:1.13.12 +4.2.1:4.2.1:1.3.99:2.8.3:1.14.99 +4.2.1:1.1.2:4.3.1:2.7.1:1.1.1:2.6.1:1.14.14:3.1.1:3.1.3:1.14.99 +2.7.7:1.1.1:4.1.2:2.7.1:2.7.2 +9.9.9:4.3.1:1.5.3:3.6.1:4.4.1:1.1.1 +1.18.1:4.2.1:1.1.3:2.7.1:3.1.3:1.1.1:1.13.11:2.4.1:1.1.1:2.6.1 +1.14.14:1.2.7:1.1.1:9.9.9:1.1.1:4.2.1 +1.1.1:2.7.7:1.1.5:3.1.4:2.7.4:1.5.1:5.3.1 +2.3.1:2.3.1:1.8.1:1.14.14:9.9.9:2.4.2:2.3.1:1.13.11:1.3.1 +1.17.1:1.1.1:1.1.2:2.3.1:5.3.1:2.7.1 +1.3.1:1.1.1:2.7.1:2.6.1 +2.7.4:2.5.1:2.7.1 +2.3.1:2.7.8 +1.14.14:2.7.7:2.6.1:1.1.1:4.1.1:1.1.1:2.4.2 +1.2.1:2.7.8:1.1.2:6.2.1:1.13.11:2.6.1:4.4.1 +2.7.1:3.1.1:2.7.8:1.2.5:2.1.2:9.9.9:1.14.12:1.14.13 +1.1.1:1.1.1:2.7.4:4.1.3:2.1.2:6.3.4 +1.3.1:1.1.1:1.13.11:6.3.4:1.2.1:3.1.3:2.7.7:4.2.1:4.2.1:1.18.1 +4.1.2:1.1.2:4.1.1:1.14.13:3.1.3:1.1.1:1.1.1 +5.4.2:1.1.1:4.1.2:1.1.1:5.3.1:3.1.2:3.1.3 +1.1.1:1.1.2:2.7.7 +1.1.1:4.2.3:1.13.11:6.4.1:2.5.1:9.9.9 +1.2.5:2.3.1:1.1.1 +1.17.1:2.3.1:4.2.3:1.17.4:2.6.1 +2.6.1:6.4.1:4.1.3:5.3.3:1.1.1:1.3.1:9.9.9:2.7.1 +1.8.7:3.1.2:2.4.2:5.4.2:4.1.3:1.2.1:3.5.1:5.4.99:3.1.3:2.8.3 +1.2.4:1.1.5:1.14.13:1.1.1:4.3.1 +1.14.14:2.3.3:1.13.11:1.1.1:1.13.11:1.13.11:1.13.11:2.3.1:1.1.1 +4.6.1:4.1.2:6.4.1:2.1.1:4.2.1:1.1.1:2.6.1:1.1.1 +4.1.3:1.17.7:1.14.13:2.7.7:1.1.5 +6.3.3:1.14.14:2.4.2:3.1.3:4.1.2:2.6.1:1.14.15:1.1.1:3.1.3 +3.1.3:1.2.4:5.3.1:2.8.3:1.1.3:1.17.1:1.1.5 +2.7.1:2.5.1 +1.1.1:3.1.1:9.9.9 +1.13.12:1.14.14:1.1.1:1.14.13:4.1.1 +1.1.1:2.1.1:2.8.3:2.1.1:1.1.1:1.14.15:1.1.1:2.7.1:1.2.1:2.7.4 +3.1.1:2.6.1:1.1.1 +1.14.12:1.1.1:4.1.2:2.8.3:1.14.13 +1.14.13:1.1.1:3.1.3:2.2.1 +4.4.1:4.1.3:1.1.1:2.2.1:4.3.1:2.7.2 +9.9.9:4.2.3:1.2.1:1.8.1:1.13.11:2.3.1 +5.1.99:1.1.1:2.8.3:1.1.1:1.14.19:2.3.1 +5.4.2:2.3.3:1.1.1:5.1.3:2.7.7 +1.1.1:3.1.4:2.7.7:1.3.1 +1.1.3:1.1.1:2.4.2:3.1.3:3.1.2:2.7.1:1.14.14 +1.1.1:1.17.3:1.3.1:3.1.2:5.1.99:3.5.4:2.7.1:1.2.1:4.2.3:3.6.1 +3.1.3:1.1.1:1.1.2 +2.3.1:1.13.11:2.1.4 +2.7.1:1.1.1:3.6.1:3.1.1 +5.3.99:4.2.1:9.9.9:4.1.2 +1.1.1:1.1.1:3.5.4:1.1.5:1.14.13 +5.3.3:1.1.3:1.2.1:2.6.1:1.1.1:1.2.4:4.1.1 +1.2.1:4.1.3:3.1.3:1.1.1:3.1.2:1.4.3:1.2.4 +2.3.1:4.2.3:1.1.1:3.1.3:4.2.3 +5.3.3:1.1.1:1.17.1:2.6.1:4.2.1 +1.3.5:1.14.11:5.5.1:1.1.1 +2.7.6:3.5.1:1.1.1:6.3.3:2.7.1:1.1.1:2.3.3:3.5.4:1.2.1:4.1.1 +4.2.1:4.1.1:4.2.1:4.2.1:2.3.1 +3.5.4:4.2.3:2.3.1:3.2.1 +2.2.1:1.14.16:1.14.11:4.2.1:1.14.13 +1.13.11:1.14.14:2.7.7:2.7.1:1.2.1:1.2.5 +5.4.2:1.1.98:3.1.3:9.9.9 +3.1.2:1.14.11:5.3.1 +2.3.1:1.2.3:1.14.14:1.3.1 +2.3.1:1.14.11:4.1.1 +1.1.1:5.4.99:4.1.2:2.7.1 +1.2.1:2.6.1:1.3.1:1.14.16:4.2.1 +1.17.3:2.3.1:1.1.1:2.8.3:1.14.13:9.9.9:1.2.1 +4.1.3:6.2.1:3.7.1:1.2.7:2.5.1:1.1.1 +6.2.1:2.7.1:2.3.1:1.1.1 +2.3.1:9.9.9:2.7.1:4.2.1:9.9.9:6.4.1:2.1.2:2.7.1:4.3.3:2.6.1:1.1.1 +5.5.1:2.3.3:1.1.1:2.7.9 +5.3.1:2.7.1:1.14.13:1.1.1:1.13.11:1.2.1 +5.3.1:1.14.13:1.1.1:1.18.1:1.1.1:1.1.1 +4.1.2:5.4.99:2.3.1:2.1.1:2.5.1:9.9.9 +1.13.11:1.14.14:1.5.3:4.4.1:1.8.5:3.1.3:3.6.1 +3.5.1:1.1.1:2.3.1:3.5.4:2.7.7:2.3.1:2.1.2 +2.1.1:2.8.3:1.2.1:5.3.1:2.3.1 diff --git a/utilities/tests/trash/random_index.txt b/utilities/tests/trash/random_index.txt new file mode 100644 index 0000000..c781f7f --- /dev/null +++ b/utilities/tests/trash/random_index.txt @@ -0,0 +1,7970 @@ +1 6.3.2:1.4.1:2.7.6:2.1.3:4.1.2:1.4.1:4.3.1:2.7.7:1.1.- +2 3.2.2:4.1.2:2.7.8:5.3.1:2.4.1 +3 4.2.1:2.1.3:2.8.3:2.3.1:2.7.8:6.3.4 +4 3.5.3:4.1.2:2.2.1:1.1.1 +5 6.3.4:2.5.1 +6 3.5.1:4.1.2:2.6.1:5.1.2:1.5.1:5.-.- +7 2.4.1:6.2.1:4.1.3:1.1.1:6.3.5:4.1.1 +8 2.3.1:1.1.1:1.2.1:4.4.1:4.1.2:2.7.1:4.1.1 +9 2.1.2:4.1.1 +10 4.3.1:2.6.1:1.4.1:1.1.1:2.7.1:3.6.1:1.2.4:2.1.3:1.4.1:1.4.1 +11 4.2.1:6.3.5:4.2.3 +12 2.7.2:4.1.3:2.3.1 +13 2.7.8:6.3.2:3.1.2:3.1.3:6.3.4:5.4.99:1.5.1:5.1.3:3.1.3 +14 2.6.1:2.5.1:6.3.1 +15 2.7.1:6.3.4:2.-.-:4.1.1:2.7.1:3.1.7:4.3.1:4.3.1 +16 5.3.1:4.2.1:6.3.4:1.2.1:2.3.1:2.7.4 +17 4.2.1:2.3.1:4.2.1:1.2.1:4.2.3:2.7.4:5.5.1 +18 5.4.99:2.3.1:4.1.1:4.3.2:1.1.5 +19 2.7.2:1.2.4:2.5.1:2.4.2 +20 6.3.4:3.1.3:2.4.2 +21 2.4.2:2.7.2:3.5.1:2.3.1 +22 1.5.1:3.6.1:2.3.1 +23 4.1.3:5.4.2:6.3.4:2.7.6:6.3.4 +24 4.2.1:4.3.1:1.5.1:5.1.1:3.5.1 +25 1.8.1:3.1.2:4.2.1:2.3.1:3.5.1:2.6.1:2.7.1 +26 1.2.1:3.5.1:1.2.1:2.3.2 +27 2.3.1:1.1.1:4.2.1 +28 2.7.7:3.5.1 +29 3.5.1:1.4.1:1.2.7:3.5.3:2.1.1:2.6.1:5.1.3:2.3.1:4.2.-:2.6.1 +30 4.3.2:1.2.1:6.3.2:3.4.11:2.3.1 +31 2.7.7:6.3.5:2.4.2:2.6.1:2.5.1:2.7.4:2.7.6 +32 2.7.2:2.1.1:4.1.3:2.7.8:5.-.-:2.7.7:4.1.3 +33 6.3.4:2.4.1:3.5.1 +34 4.2.3:2.3.1:2.1.2 +35 2.7.1:2.6.1:3.5.3:4.2.1:6.3.5:2.4.2:2.3.1 +36 3.2.1:6.3.4:2.7.1 +37 1.13.11:2.3.1:4.1.2:4.3.2:2.3.1:2.3.1:1.1.1:1.1.5 +38 1.1.1:2.3.1:1.7.1 +39 3.5.1:1.1.1:5.4.99:6.3.4:6.3.3:4.2.1 +40 6.3.2:2.6.1:3.5.2:5.4.99:2.5.1:5.3.1:2.7.2:2.7.1:5.-.-:4.1.1 +41 3.2.1:4.2.3:3.5.1:2.5.1:2.5.1:4.1.3:2.7.1:2.6.1 +42 4.4.1:5.3.1:6.3.4 +43 2.7.1:2.7.4:1.2.1:6.3.5:2.3.1:2.3.1:2.3.1:3.1.3:1.2.1:4.1.1:6.3.1:2.1.2:1.4.1 +44 3.5.1:2.1.1:4.1.1 +45 5.3.1:1.5.1:2.1.2:4.3.1:5.3.1:2.7.1:1.4.3:1.5.1:1.1.1:2.3.3:4.1.1 +46 1.2.1:5.4.99:2.7.2:2.7.1:4.4.1:3.5.1:3.5.1 +47 3.5.3:3.5.3:2.7.1 +48 2.7.1:1.5.1:2.6.1:2.7.1:2.5.1:5.3.1:4.2.1 +49 6.3.4:2.7.1 +50 6.2.1:3.5.1:2.5.1:2.7.7:3.5.4:2.7.1 +51 3.6.1:2.4.1:2.3.1:6.3.1:2.7.7 +52 1.3.99:4.3.2:5.4.2:6.3.4:2.3.1:5.4.2:1.1.1 +53 4.3.2:2.7.1 +54 2.7.1:1.7.99:2.7.2:3.1.3:1.1.1:2.7.9:4.1.1 +55 2.6.1:6.3.4:2.7.7:1.1.1 +56 2.7.1:5.3.1:2.7.4 +57 4.2.1:3.5.1:4.1.1 +58 1.14.11:1.1.1:2.7.1 +59 3.2.1:2.4.2:1.4.1:6.3.4 +60 3.1.1:1.5.3:5.3.1 +61 3.1.3:4.1.99 +62 2.6.1:5.1.3 +63 1.2.1:2.7.1:2.5.1 +64 5.3.1:3.1.1:2.3.1:6.4.1:4.1.3:1.4.1:6.3.2:1.5.1 +65 2.6.1:2.6.1 +66 1.2.1:6.3.5:2.5.1 +67 2.3.1:3.5.4:1.13.11 +68 6.3.4:1.2.1:6.2.1:1.1.1:4.3.1 +69 4.4.1:5.4.2:1.1.1 +70 2.3.1:1.1.1:9.9.9:4.2.1:1.2.1:4.1.3 +71 2.7.1:6.3.2:6.3.4:6.3.2:4.3.1 +72 2.7.1:2.1.1:1.4.3:2.4.2 +73 1.5.1:5.1.1:2.7.7:4.1.1:2.5.1:4.3.2 +74 3.4.11:3.6.1:4.4.1 +75 4.1.1:2.7.1:3.1.4:2.7.2:1.5.3:6.3.2 +76 1.1.1:1.17.4:1.2.1 +77 1.1.3:4.1.1:3.6.1 +78 1.13.11:4.2.1:2.4.2:1.4.1 +79 1.1.1:2.-.-:1.8.1:3.5.1:3.5.4:2.5.1:4.1.3:6.3.3:4.2.3:1.1.1:2.3.1:1.2.4 +80 2.3.1:2.7.1:2.5.1:3.1.2 +81 3.5.4:4.2.1:2.1.2 +82 2.5.1:4.1.1:3.1.3:1.1.1 +83 5.4.99:3.1.7:1.7.2:5.4.2:3.4.11:6.3.3:4.1.3 +84 6.3.2:1.1.1 +85 6.3.4:2.6.1:4.4.1:2.5.1:2.7.7:2.7.2:6.3.5 +86 4.1.1:4.1.1:6.3.4 +87 4.1.2:5.4.2:2.4.2 +88 5.1.2:2.4.2:2.7.1:2.7.7:1.13.11:2.7.1:4.4.1:1.1.1 +89 4.1.1:6.3.4:6.2.1 +90 2.1.3:1.2.1:3.6.1 +91 4.1.2:4.1.1:3.5.3:1.2.1:4.3.1:4.2.1:1.1.1 +92 5.4.99:6.3.5:2.7.2:3.5.1:1.5.1 +93 2.6.1:2.3.1:2.7.4 +94 5.4.99:2.1.2:2.3.1:2.3.1:4.2.3 +95 1.1.1:2.8.1:4.1.1 +96 3.1.1:2.7.9:3.5.1:1.1.1:1.17.1 +97 2.6.1:2.7.7:4.3.1:2.5.1:2.1.2:4.3.1 +98 4.1.1:3.5.1:4.3.1:1.13.11:4.2.1 +99 1.2.1:2.4.1:5.3.1:4.1.1:6.3.1:1.5.1:1.1.1:5.4.2 +100 1.8.1:2.5.1:2.4.2 +101 2.3.1:2.3.3:2.5.1:2.4.2:1.2.4:9.9.9:1.5.1 +102 3.6.1:1.1.1:6.3.4:2.7.1 +103 1.1.1:1.4.1:6.3.4:1.2.4:3.2.1:2.7.1:5.1.3 +104 3.2.1:1.3.3:2.3.1:3.6.1 +105 1.14.16:2.5.1:2.7.4:2.7.1:3.2.2 +106 2.7.2:5.1.1:2.7.4:2.3.1:4.3.1 +107 2.7.7:3.5.1:5.4.2:3.5.3:5.4.2:2.7.1:3.2.1:2.7.1 +108 2.3.1:4.3.2:1.17.1:5.4.2:1.1.1:3.5.1:1.3.3 +109 1.2.1:4.1.1 +110 2.3.1:5.3.1:2.2.1:4.3.1 +111 2.6.1:4.3.1:2.4.2 +112 6.3.4:2.7.2:1.4.1:2.7.6:3.5.4:2.4.2:6.2.1 +113 2.3.1:2.6.1:3.5.2:6.3.2 +114 5.4.99:2.7.8:4.1.1:4.3.1:3.2.1:6.3.2 +115 4.4.1:2.1.4:2.7.4:4.2.3 +116 2.8.1:2.7.7:3.5.1:4.4.1:1.1.1:4.2.3:2.7.1:1.1.1 +117 1.2.1:3.1.1:2.6.1:5.3.1:2.1.2:6.3.5:1.4.3 +118 1.3.3:2.7.7:2.4.2:4.1.1:4.2.1 +119 5.4.2:6.3.5:2.7.4:2.4.2:1.1.1 +120 2.2.1:2.1.1:2.5.1:3.5.1:3.6.1:2.7.2 +121 1.2.1:6.2.1:3.5.4:4.1.2:6.3.1:2.6.1 +122 4.2.3:4.1.1:6.3.1:2.1.2:2.3.3:2.4.2:4.1.1 +123 3.1.1:2.4.2:1.2.1:5.3.1:2.7.2 +124 1.5.1:3.5.99:2.1.3 +125 5.1.2:6.3.2:2.7.4:3.1.3 +126 1.2.1:6.3.2:2.7.1:1.14.12:1.2.1:2.7.7 +127 4.3.1:2.3.1:1.5.1 +128 4.3.1:1.1.1:2.5.1:1.8.1:2.3.1:1.14.12 +129 4.1.1:3.6.1:5.3.1 +130 2.7.7:2.3.1:1.14.13:6.3.5:3.5.1 +131 2.3.1:6.2.1:5.3.1:4.3.2 +132 4.2.2:2.1.2:1.3.99 +133 1.1.3:2.1.2:4.1.2:5.3.1:2.5.1:6.3.2:9.9.9 +134 2.7.1:6.3.4:6.3.2:6.1.1:1.5.1 +135 2.7.2:4.2.1:2.7.1:2.7.2 +136 4.1.1:1.4.1:1.4.1:2.6.1 +137 2.3.1:5.4.99:1.5.1 +138 4.2.1:2.4.2:2.6.1:6.3.2:2.3.1:4.2.1 +139 1.17.1:1.14.13:2.6.1:4.2.1:4.2.3 +140 2.1.1:3.5.1 +141 1.2.1:4.4.1:2.5.1:4.1.1:4.1.1:4.1.1:1.5.1 +142 1.5.1:6.2.1:1.1.1:3.1.3:5.4.99:4.1.2:5.4.2:2.7.2:2.7.4:1.3.1:2.7.7 +143 3.8.1:2.7.1:3.5.1:3.6.1:3.8.1:4.2.3:2.6.1 +144 2.6.1:5.3.1:3.1.3 +145 2.5.1:2.5.1:5.4.2:1.17.4:1.2.5:1.3.99:1.1.1 +146 1.8.1:3.2.1:4.1.1 +147 3.5.3:1.2.1:3.13.1:1.1.2:3.2.1 +148 4.3.2:1.2.4:3.5.1:2.5.1:2.6.1:4.3.1:1.1.1:1.4.1:4.3.2 +149 2.3.1:6.3.5:5.3.1 +150 2.7.7:1.5.1:1.2.1:6.3.4 +151 1.5.1:2.3.1:1.5.1:5.4.2:2.7.6:4.1.1:4.1.1 +152 1.4.1:4.1.2:2.4.2:3.1.4:6.3.2:2.7.1:9.9.9:4.3.1:4.2.3 +153 4.1.1:2.1.1:3.5.4:3.4.13:2.3.1:4.4.1:1.2.1:3.1.4:2.1.2 +154 2.1.3:2.7.7:2.3.1 +155 2.6.1:2.3.1:4.1.1:2.6.1:1.2.1 +156 6.3.4:1.4.3:3.5.4 +157 5.3.1:2.7.8:4.2.1 +158 4.1.1:2.6.1:6.3.4:2.7.1:2.7.4:2.6.1 +159 2.6.1:3.1.2:6.3.4:4.4.1:2.5.1:2.6.1:2.7.8 +160 1.3.1:2.7.1:3.1.3 +161 4.1.1:1.2.1:1.13.11:6.3.2:5.3.1:3.2.1:2.4.2 +162 6.3.4:1.5.1:4.2.-:1.5.1 +163 2.3.1:3.2.2:4.1.1 +164 4.3.1:2.7.4:2.3.1:2.4.1:1.2.1:4.3.2 +165 1.5.1:1.1.1:6.1.1:1.1.1:4.99.1:2.7.1:2.5.1:2.6.1 +166 4.3.1:1.4.1:4.3.1:6.3.3:2.7.1:1.1.1:5.3.1 +167 1.3.3:4.3.1:1.4.1:3.5.1:2.7.4 +168 1.1.1:2.7.8:2.3.3:6.3.5 +169 3.1.3:3.5.1:2.3.1:1.2.1 +170 6.3.4:3.5.1:4.1.1:3.5.3:4.1.1:3.6.1 +171 4.4.1:1.1.1:1.2.1 +172 4.1.2:2.6.1:1.4.1 +173 4.1.1:2.3.1:6.2.1:6.3.4 +174 6.2.1:1.2.1:5.1.1 +175 1.3.1:2.4.2:1.2.4:4.1.2 +176 4.4.1:1.2.1:2.7.2:1.3.99:2.8.3:6.3.5:2.7.1 +177 2.7.7:9.9.9 +178 3.5.1:4.1.3:2.7.7:4.2.1:3.13.1 +179 6.3.5:4.1.3:2.3.3:4.3.1 +180 3.6.1:2.7.1:2.7.2:1.2.1 +181 3.5.1:6.3.3:2.5.1:4.1.1:2.6.1 +182 6.1.1:3.1.4:2.6.1:1.1.1:4.1.2 +183 2.4.2:1.5.1:9.9.9 +184 2.5.1:4.2.3:4.1.2:2.7.7 +185 3.5.3:3.5.1:2.6.1:2.5.1:1.2.1:1.17.4 +186 1.2.1:2.6.1:6.3.4:4.2.3 +187 2.5.1:2.7.1 +188 2.7.2:4.6.1:2.6.1 +189 2.7.6:2.7.2:4.3.1:6.3.4 +190 1.1.1:2.7.7:1.4.1:2.2.1 +191 1.1.1:4.1.1:4.3.1:2.6.1:2.3.1:2.4.2:1.3.1 +192 1.13.11:3.1.3:3.1.3 +193 2.1.3:2.3.1:1.3.3:2.7.2 +194 3.5.1:4.3.1:2.7.1:2.7.1:2.8.1 +195 2.7.8:2.6.1:6.3.1:2.1.2:4.2.1 +196 4.1.2:4.2.1:2.7.6:4.1.1:5.4.2 +197 6.3.4:2.7.6:4.3.2:1.1.1:4.1.1 +198 5.4.99:5.3.1:4.3.2:6.3.4:1.5.1:4.4.1:3.5.1:1.2.1:6.3.2 +199 1.17.4:3.5.1:1.3.1:2.7.7:4.2.3:4.3.1:2.7.2:4.1.2:2.1.2:4.4.1:4.1.1:4.1.1:4.2.1 +200 1.1.1:2.1.3:3.5.5:1.3.1:5.5.1:4.2.1 +201 2.7.1:6.3.1:1.5.1 +202 3.1.3:5.4.99:2.5.1:2.6.1:2.3.1:2.4.2 +203 4.1.1:5.4.2:5.4.99:3.5.4 +204 2.7.1:2.3.1:2.1.3:5.3.1:2.5.1:1.4.1:2.4.2:1.1.1:3.5.1:2.4.2:2.4.2:4.2.1:2.3.1 +205 2.7.2:2.1.1:3.5.4 +206 5.1.2:4.2.1:1.5.1 +207 6.3.5:2.7.7:4.3.1:4.3.1:4.4.1:2.7.2:2.6.1:3.5.1 +208 6.3.4:1.2.1:2.6.1:2.1.1:3.1.3:4.1.2 +209 6.4.1:3.2.2:2.5.1:2.1.2:5.4.99:4.1.1:2.7.2 +210 2.4.2:2.7.1:2.6.1:3.4.13:2.1.3 +211 1.7.99:2.5.1:4.1.1 +212 4.2.1:2.7.1:6.3.2:2.3.1:5.3.1 +213 6.3.5:1.2.4:6.3.4 +214 3.6.1:5.1.3:4.3.1:2.7.7 +215 1.2.4:4.3.2:2.6.1 +216 1.1.1:3.1.3:2.3.1:4.2.1 +217 6.3.5:2.4.2:2.3.3:4.1.1:2.1.1:1.1.2:1.5.1 +218 5.3.1:4.4.1:2.7.7:4.1.1:5.5.1 +219 6.3.5:6.3.4:2.7.1:4.3.2 +220 1.2.4:1.1.5:2.6.1 +221 2.1.3:2.1.2:1.2.1:5.4.2:4.1.2:2.7.7:5.1.1 +222 3.5.1:1.4.4:2.6.1:1.5.1:4.3.2:2.1.2 +223 4.4.1:6.3.4:4.1.1:3.2.2:2.1.3 +224 3.5.1:2.1.2 +225 6.3.4:2.7.1:2.7.4:4.4.1:4.4.1:1.5.1 +226 6.3.5:2.4.2:2.4.2:6.3.1:3.1.4:2.3.1:5.1.2:4.2.3 +227 2.7.6:1.4.1:2.4.2:2.5.1 +228 3.5.3:3.1.3:1.1.1 +229 2.1.1:4.4.1:2.7.4:4.1.1:1.5.1:1.2.1 +230 3.1.2:4.3.1:1.2.5 +231 2.4.2:1.5.1:3.1.3:4.1.3:6.3.4 +232 2.1.3:6.3.5:1.5.1:4.1.1:4.1.2:2.7.1 +233 5.4.99:5.3.1:6.3.4:2.1.2 +234 2.7.1:3.1.4:2.3.1:2.7.4:3.5.1:2.7.2:2.7.4:5.4.99:2.1.2:2.6.1:2.1.2:6.3.3:3.6.1:4.2.1:6.2.1 +235 6.2.1:2.7.1:1.2.4:2.1.2:1.2.1 +236 2.1.2:2.7.4:2.7.8:2.4.2:4.2.3:1.1.5:1.1.1 +237 2.7.2:5.4.99:2.3.1:6.3.5:2.5.1:2.7.1:6.4.1:4.4.1:4.1.1 +238 2.7.8:1.2.4:5.1.3:2.3.1:1.2.1:2.6.1:2.1.1 +239 6.3.3:2.5.1:2.7.2:2.4.2:2.4.1:6.3.4:2.5.1:4.4.1:4.1.2:2.6.1:4.4.1 +240 6.3.2:4.3.2:2.7.4:2.7.2:4.4.1:4.3.2:3.5.4 +241 2.4.2:3.6.1:1.2.1:3.1.3:3.2.2:2.4.2 +242 1.1.1:4.3.2:2.7.8:3.5.4:2.7.1:3.1.3:4.1.1:2.7.4:2.3.3 +243 6.3.4:5.1.2:4.1.99:2.7.4:1.2.1 +244 4.1.2:3.1.1:2.6.1 +245 1.4.3:2.7.1:2.5.1:3.1.1 +246 1.1.1:2.6.1:2.7.1:4.2.3 +247 1.5.1:3.1.3:2.7.2 +248 2.3.1:3.5.4 +249 2.3.1:4.4.1:2.6.1:6.3.3:2.1.3:2.1.1 +250 4.1.1:5.4.99:3.1.4:2.3.1 +251 4.2.1:4.1.2:1.2.1:6.3.5:2.4.2 +252 2.3.1:3.5.1:3.5.3:1.1.1:1.5.1:5.4.2 +253 1.2.4:2.6.1:2.6.1 +254 2.7.4:2.2.1:2.4.2:4.1.2:6.3.4:4.4.1 +255 6.3.5:2.4.2:3.6.1:3.1.3:1.1.1:4.4.1:3.1.1:2.3.1:6.3.4:6.3.3 +256 3.5.1:1.5.1:3.5.1 +257 3.5.4:4.6.1:3.1.1:2.7.4:1.13.11:2.4.2:3.2.1:2.1.1:3.6.1:2.7.7:6.3.4 +258 4.2.1:3.2.1:2.7.7:2.3.1 +259 1.1.1:2.5.1:1.11.1:3.6.1 +260 2.7.8:4.1.1:6.3.4:2.7.8 +261 6.3.3:2.1.3:1.5.1:2.7.1:4.2.3:4.3.2 +262 1.1.1:2.5.1:3.1.1 +263 5.3.1:6.3.4:1.5.1:1.3.1:2.5.1:6.3.4 +264 1.1.1:4.3.2:2.7.7:2.6.1:2.6.1 +265 6.2.1:1.2.1:2.6.1 +266 1.5.99:1.1.1:5.4.99:3.6.1:1.2.1 +267 3.5.99:4.3.1:1.5.1 +268 3.5.1:3.5.1 +269 1.2.1:2.7.4:2.5.1 +270 4.2.3:2.5.1 +271 1.1.1:1.2.1:4.2.1:2.1.2 +272 3.5.1:6.3.4:2.1.1:2.4.2:2.3.3:4.1.1:4.2.1:2.5.1 +273 2.6.1:1.7.2:4.3.2:2.7.1:4.2.3:1.4.1:2.1.1 +274 4.1.1:2.7.1:3.3.1:6.4.1 +275 6.3.1:5.4.99:1.2.1:4.2.1 +276 3.3.1:4.2.1:2.7.2:5.4.2:3.1.4:5.4.99:1.2.1 +277 1.14.13:1.4.1:2.7.1:2.3.1:1.2.1:4.2.1:5.1.2:4.2.1:2.7.7:4.2.1 +278 3.2.1:2.7.1:4.1.1:1.5.1:2.7.4 +279 2.3.1:2.7.1:3.5.3:4.1.1:2.4.2 +280 2.7.2:4.1.1:2.1.2:4.1.1:1.1.1:3.1.3 +281 2.7.2:1.1.1:1.2.1:4.1.1:5.1.3:6.3.5 +282 2.6.1:2.6.1:2.1.3:2.7.1 +283 6.3.4:2.7.1:2.5.1 +284 1.4.1:2.7.1:2.3.1:5.4.99:6.3.4:6.3.5 +285 6.3.4:2.7.7:2.1.1:4.2.1:3.6.1:3.5.1:3.5.3:4.2.1 +286 1.13.11:4.3.2:2.7.1:6.3.4 +287 4.2.1:2.3.1 +288 2.1.3:3.5.1 +289 3.5.3:1.1.1:6.3.3:2.3.1:1.4.4:2.5.1:1.7.2:2.7.4:5.4.2:6.3.4 +290 2.1.3:6.1.1 +291 4.3.1:5.1.1:3.1.1:1.1.1:6.3.2:3.1.3 +292 2.5.1:2.5.1:2.7.4:1.1.1 +293 3.6.1:4.2.1:2.7.9:4.1.2 +294 2.7.7:4.3.2:4.1.1:6.1.1:2.7.1:5.4.2:3.5.4:4.2.1 +295 1.2.1:6.3.2:2.6.1:3.2.1 +296 2.3.1:2.7.2:2.1.1:1.1.1:1.2.7:4.1.1:2.4.1:2.7.1:2.4.1:2.8.1 +297 3.6.1:3.2.1:2.4.2:6.3.5:1.1.1:2.7.2:5.3.1 +298 6.4.1:4.1.1:3.4.11 +299 6.3.4:5.4.2:2.7.2 +300 1.2.1:6.3.4:6.3.2:4.1.2:2.2.1:5.4.2 +301 3.5.1:2.4.1:4.4.1:1.1.1 +302 2.7.1:5.4.99:2.6.1:3.5.1:4.3.2 +303 9.9.9:2.3.1:4.4.1:1.4.3:2.7.2:2.3.1:3.5.1:4.1.1 +304 2.4.2:1.2.1:4.2.3 +305 5.1.2:2.3.1:2.4.2:3.5.4:1.2.4:5.4.99 +306 1.2.7:2.1.3:6.3.1:1.2.1:5.4.99:4.1.1:2.7.2:5.1.1:2.3.1:2.3.3:3.1.1:1.2.4:3.6.1:1.4.1 +307 6.3.2:2.5.1:2.1.1:2.1.1:5.4.99:3.5.1:3.1.3 +308 2.7.4:6.3.2:3.1.3 +309 5.4.99:2.7.4 +310 2.1.2:5.1.1:4.3.2:2.7.6:2.4.2:2.8.1:1.2.1:1.2.1:1.4.1 +311 1.4.1:2.7.7:2.3.1:3.1.3:2.7.2 +312 2.3.1:6.3.4:2.4.2 +313 4.3.2:1.1.1:2.6.1:1.2.1:1.2.1:1.2.4:2.5.1:3.1.4:4.2.1:1.2.1:4.3.2:4.3.2:2.7.2 +314 4.3.2:5.4.99:2.5.1 +315 3.5.5:2.4.2:3.5.1:3.1.3:2.7.4 +316 2.7.1:3.6.1:2.4.2:9.9.9:2.4.2 +317 2.1.1:2.3.1:3.5.2:6.3.4:4.3.2 +318 2.5.1:4.3.2:9.9.9:2.7.2:1.1.1 +319 6.3.2:2.7.1:2.6.1:1.2.1:4.2.1:5.3.1:2.8.3 +320 2.7.4:4.3.1:2.7.8:4.4.1 +321 1.5.1:3.1.4:6.2.1:2.6.1:2.3.1:3.5.1 +322 2.1.2:2.7.1 +323 6.3.4:2.6.1:1.2.1:1.5.3:4.2.1:2.1.2 +324 3.2.1:4.2.1:6.3.4 +325 3.2.2:2.7.1:1.2.1:2.3.1:2.7.1:2.6.1 +326 3.5.4:2.1.2:1.5.1 +327 3.5.1:2.4.2:2.4.2:6.3.4:2.7.7:2.7.6:2.7.6:3.1.5:2.7.7:4.4.1:6.3.5:2.1.2:3.5.1 +328 6.4.1:6.3.2:3.1.3 +329 2.1.3:4.1.1:4.1.2:3.5.3:5.3.1 +330 3.1.3:4.3.1:1.3.3:2.2.1:5.1.1:6.3.2 +331 3.2.1:1.2.1:2.1.3:1.1.1:2.6.1:2.1.1:3.2.1 +332 1.14.13:2.3.3:4.1.1:5.3.1:2.1.3:4.2.3 +333 2.3.3:3.2.1:2.3.1:2.7.7:1.2.1:6.3.2:2.7.7 +334 3.5.5:1.2.1:4.1.3:1.2.1:1.2.1:1.14.13:2.5.1 +335 1.13.11:2.3.1:3.5.1:2.5.1:2.1.2 +336 2.3.1:2.7.1:2.3.1:5.1.3 +337 2.7.1:1.3.3:2.1.2:4.2.-:4.1.2:1.5.1:2.5.1:6.3.4:2.6.1:2.7.1 +338 2.7.7:3.6.1:6.3.5:3.1.3:2.5.1:1.3.99 +339 3.1.3:6.3.4:3.6.1 +340 2.3.1:2.2.1 +341 4.1.3:3.1.1:2.3.1:6.3.4:4.3.1:1.13.12 +342 3.5.1:2.7.7:4.3.2 +343 2.1.3:4.4.1:5.1.3:3.5.4:5.4.3:3.5.2:5.1.3 +344 6.3.4:1.5.1:2.1.1:3.5.1:4.2.1:3.2.1:2.7.1 +345 4.2.3:5.1.3:1.1.1:2.5.1:6.2.1 +346 2.7.6:1.97.1:2.7.1 +347 6.3.3:3.1.2:2.7.8:3.5.5 +348 2.3.1:5.4.2:2.4.2:1.2.1:2.7.7:2.7.1:1.2.1 +349 1.1.1:4.4.1:2.7.4:2.5.1:2.3.1 +350 6.3.2:1.1.1 +351 5.1.3:1.3.3:1.3.3:1.1.1:2.7.1:1.3.99:4.2.3 +352 3.5.1:2.7.6:3.6.1:1.1.1:2.7.7 +353 4.2.1:1.14.13:2.7.1:2.5.1:5.4.2:6.3.4 +354 1.2.1:6.3.5:2.7.7:4.3.2:4.3.2:4.1.2 +355 3.5.1:2.6.1:2.3.1:6.3.4:3.1.3 +356 4.4.1:4.2.3:1.5.1:3.5.5:2.7.1:4.1.1 +357 2.6.1:1.1.1:3.5.3:3.5.1:2.3.1:4.1.2:6.3.1:2.7.4:4.1.1 +358 2.7.4:2.3.1:4.1.1:1.7.99:3.6.1:2.4.2:2.7.1 +359 3.1.4:1.1.1:2.1.1:3.5.5:6.4.1:2.7.1:1.2.1:2.1.1:2.6.1 +360 2.7.2:1.1.1:4.1.1:2.4.2 +361 4.1.1:1.11.1:2.7.6:5.4.99:1.2.1 +362 1.4.1:4.2.1:4.3.1:3.1.1:3.5.2 +363 2.1.3:4.1.1:1.1.1 +364 1.5.1:5.4.2 +365 2.7.1:1.5.1:4.1.1:6.3.3:6.2.1:4.1.1:2.3.1:1.2.1:2.7.4:2.7.2 +366 4.2.1:4.1.1:4.2.1:1.5.3:2.3.1:2.6.1:2.7.7:2.6.1 +367 3.6.1:2.6.1:9.9.9:2.7.2:2.1.1 +368 6.3.4:3.4.13 +369 5.3.3:4.1.1:1.1.2:2.2.1:1.1.2:2.7.2:2.6.1 +370 1.1.1:4.2.1:4.6.1:6.3.2:2.6.1 +371 2.7.8:2.3.1 +372 5.3.1:4.2.3:1.1.1:1.2.1:1.5.1:1.1.1 +373 2.1.2:4.1.2:4.3.2:5.3.1 +374 4.2.1:4.2.3 +375 2.4.2:6.3.4:2.7.1:2.7.2:4.1.1:2.6.1:3.1.3:4.2.1 +376 2.5.1:2.7.2:5.3.1:4.2.1:2.6.1:2.7.8:4.2.-:2.7.1 +377 4.2.3:2.5.1:5.4.2:3.1.3:3.5.1 +378 1.14.13:1.14.12:3.5.1 +379 1.2.4:6.3.4:2.6.1:4.3.2:4.1.2:2.3.1:2.7.1:4.2.1:4.3.1:5.4.2 +380 2.4.2:2.4.1 +381 2.1.1:3.6.1:1.1.1:4.2.1:4.1.1 +382 2.4.1:3.5.3 +383 6.3.4:2.6.1:4.3.2:3.1.3 +384 6.3.2:2.7.1:4.4.1:4.3.2:5.4.99:3.1.2:1.5.1:1.5.1:6.3.3:3.2.1 +385 3.1.2:3.3.1:2.4.2:6.2.1:2.5.1 +386 2.3.1:2.5.1:4.2.1:4.1.2:2.1.1:5.3.1:4.2.3:2.3.1:4.3.2 +387 3.2.1:1.2.1:2.1.3:3.5.1:6.3.2:6.3.5 +388 3.1.4:1.2.4:2.7.2 +389 6.3.5:2.7.1:2.6.1:1.1.1:4.3.1:2.5.1:2.3.1 +390 2.7.2:3.6.1:5.3.1:2.5.1:1.5.1:3.5.3:4.2.1:4.2.1:2.4.2 +391 4.4.1:1.1.1:2.7.2:1.1.1:3.5.1:3.5.4:2.7.1:4.3.2:2.7.2:2.3.1 +392 2.3.1:3.5.2:2.1.1 +393 4.1.3:2.7.7:2.7.1 +394 4.1.1:4.1.1:2.1.3:3.5.1:5.4.99:5.4.2 +395 1.5.1:6.3.2:3.6.1:2.7.1:1.1.1:2.7.1:4.3.1 +396 2.4.2:6.3.2:1.4.1:2.4.2:4.4.1 +397 4.3.1:6.3.2 +398 2.7.1:1.1.1 +399 4.1.2:1.2.1:4.2.1:4.2.1:2.7.6:4.2.1 +400 2.5.1:1.1.1:2.1.2:5.4.99:2.5.1:4.1.1:1.2.1 +401 5.2.1:1.4.3:4.1.3 +402 2.7.7:4.1.1:3.5.1:2.7.7 +403 2.7.2:2.4.2 +404 1.4.1:2.1.1:1.1.3 +405 3.5.1:4.2.1:4.2.1:5.4.2:2.7.7 +406 1.1.1:6.4.1:1.2.1:5.4.99:3.6.1 +407 2.1.1:2.6.1:3.6.1:4.2.1:3.5.2 +408 3.1.3:5.4.2:2.8.1:1.2.1:4.2.1 +409 1.2.1:2.2.1:4.1.2 +410 6.3.3:1.3.3:4.2.1 +411 4.2.-:1.2.1:5.3.1:3.1.5:2.5.1:4.2.1:2.7.4:2.6.1 +412 4.3.1:4.1.1:2.7.1:1.3.99:2.3.1 +413 6.2.1:1.2.1:3.5.4:1.2.5:3.5.1:5.4.2:2.1.3 +414 2.6.1:3.6.1:1.2.1:2.7.6:1.1.1:2.1.2 +415 3.1.3:2.7.1:5.3.1:1.3.1:2.3.1 +416 2.6.1:1.1.1:1.1.1:2.6.1:2.7.4 +417 2.2.1:2.7.7:2.4.2 +418 4.4.1:2.6.1 +419 3.5.1:3.5.1:1.8.1:1.2.1:6.3.3:2.1.3:3.5.1:3.5.1:2.3.1:4.4.1:3.4.11 +420 2.4.2:3.5.3:6.3.3:1.13.11:2.5.1:6.3.4:2.7.1:2.7.2:3.2.1:2.7.4:4.2.1:2.3.1 +421 2.7.4:4.1.1 +422 3.5.1:1.1.1:1.3.1:5.3.1:6.3.4 +423 2.7.4:3.5.1:6.3.3 +424 1.4.1:4.4.1:1.2.1:2.5.1 +425 4.1.3:3.5.1:4.3.1:3.5.3:2.4.2:2.4.2:2.7.2:4.3.1:1.1.1:2.4.2:2.5.1:2.3.1:2.3.1 +426 3.3.1:1.2.1:1.1.1 +427 1.1.1:6.3.4:5.4.2 +428 2.3.1:2.8.3:2.1.3:1.2.1:1.1.1:2.7.2:4.4.1 +429 2.1.2:2.7.4:2.1.2:2.1.1 +430 2.6.1:4.1.1:5.4.99:2.7.1:2.6.1 +431 1.2.1:3.1.3:2.7.2:2.4.2:4.2.1:3.1.3:2.1.3:4.2.1:1.1.1:4.2.1:3.1.3:5.3.1:4.3.2:1.2.1 +432 2.1.1:1.2.1:3.1.4 +433 2.3.1:2.3.1:4.3.2:4.1.1:4.2.1 +434 1.2.1:2.7.7:2.5.1:3.2.1:4.2.1:1.2.1 +435 1.2.1:3.2.1:6.3.4 +436 2.7.2:5.1.1:2.7.8:2.4.2:2.4.1 +437 2.3.1:1.2.4:4.2.1 +438 2.3.1:2.7.1:3.1.3:4.3.2 +439 3.3.1:2.1.1:5.4.2:4.1.1 +440 1.8.4:2.4.2:4.1.2:2.7.1:2.5.1:2.7.1:2.1.3:1.14.16:1.2.5 +441 2.3.1:1.5.3:2.7.2:1.1.1:4.1.1:1.1.1:2.1.4:2.4.2:4.2.3:2.3.1:4.1.1 +442 6.3.4:2.5.1:6.3.4:2.7.1:2.7.1:1.2.1:4.2.1:1.14.13:1.4.99 +443 3.1.4:3.6.1:5.3.1:3.1.3:2.7.1:1.5.1:4.2.1 +444 2.3.1:2.7.8:4.1.2:1.17.7 +445 6.1.1:3.4.11:2.7.1:2.6.1:1.4.3:6.3.4:2.6.1 +446 2.6.1:1.2.4:2.5.1:1.1.1:4.1.1:3.3.1:9.9.9 +447 2.7.1:1.4.3:6.2.1:4.1.1:2.1.2:6.3.4 +448 2.7.1:1.8.1:2.6.1:2.7.6 +449 6.3.5:2.1.3:4.2.1:2.1.1:5.3.1:3.1.3:2.5.1 +450 2.3.1:4.1.1:3.4.11:2.5.1 +451 2.3.1:2.3.1:5.3.1:1.2.1:6.3.1:6.3.4 +452 2.7.2:3.2.1:2.1.1 +453 4.2.1:2.6.1:2.7.7:2.4.1 +454 5.4.99:3.5.1:4.1.1:4.1.1:5.3.1:2.3.1 +455 6.3.3:2.3.1:4.2.1:2.7.7 +456 2.4.2:4.1.2:2.5.1:1.5.1:1.2.1:2.1.1:6.3.4 +457 2.4.2:4.3.2:3.5.1:3.5.1:4.1.1:4.3.2:2.1.1 +458 3.4.11:6.3.4:1.1.1:2.1.2:4.4.1 +459 2.7.1:2.4.2:4.1.2:5.4.99:6.3.4:2.6.1:4.3.2:5.4.99:4.3.1 +460 3.5.4:1.7.99:3.1.5:4.1.3:2.7.2:2.6.1:6.3.2:5.4.99 +461 6.3.1:4.3.1:2.7.1:2.7.2:3.2.1 +462 4.2.3:1.2.1:2.7.4 +463 3.1.3:1.1.1 +464 2.6.1:2.7.7:2.4.2:2.6.1 +465 2.7.9:2.6.1 +466 2.7.1:3.4.13:2.3.1 +467 2.-.-:2.3.1:2.7.6:3.4.11 +468 2.7.1:2.6.1:2.7.4:2.7.1 +469 2.7.1:3.5.1:2.5.1:4.1.1:4.2.1:2.5.1:3.5.1:2.7.4:4.4.1:2.7.1:1.1.1:1.1.1:3.1.1 +470 1.1.1:2.3.1:4.2.1 +471 3.6.1:4.4.1:2.8.3:2.6.1:3.5.1:2.5.1 +472 2.7.2:2.7.2:2.3.1:1.2.1:1.2.1:2.5.1:2.7.6:2.3.1 +473 6.3.1:2.4.2:2.7.1:1.14.12 +474 4.1.2:2.7.1:2.4.2:1.1.5:2.7.7:2.6.1:4.1.1 +475 2.3.1:6.3.4:2.3.1:2.6.1 +476 3.5.2:1.2.4 +477 4.2.1:2.7.7:5.4.99:1.1.1 +478 6.3.4:1.7.2:3.3.1:3.5.5 +479 1.2.1:4.4.1:2.7.8:2.6.1 +480 1.8.1:5.3.1:3.1.2:2.3.1:4.4.1:5.3.1 +481 5.3.1:4.2.1:1.1.3:6.3.3 +482 2.3.1:2.6.1:4.4.1 +483 3.2.1:2.7.1:2.3.1:2.2.1:3.2.1:5.1.3:1.17.4:1.5.99:1.1.1:2.5.1:3.5.1:2.6.1 +484 4.4.1:1.2.1:4.2.1:1.5.1:4.1.1 +485 6.3.4:2.7.2:2.2.1 +486 2.6.1:4.2.1:5.3.1:2.3.1:2.7.2 +487 2.7.1:2.7.4:2.7.2:3.5.3:2.7.2 +488 4.1.2:2.1.1:2.3.1:2.5.1:2.1.1 +489 2.4.1:3.5.3:4.2.3:2.6.1:2.5.1:2.7.4:2.1.1:4.4.1:2.3.3 +490 2.7.7:4.1.3 +491 5.1.3:4.1.1:2.5.1 +492 6.3.3:4.1.1:2.6.1:4.1.2 +493 3.2.1:2.7.2 +494 2.3.1:4.1.2:3.1.4:2.7.7:1.3.99:1.2.1:1.4.1 +495 5.3.1:1.1.1:1.1.1 +496 9.9.9:1.2.1:2.6.1:2.3.3:1.8.1 +497 5.4.2:1.2.4:4.3.2:6.3.4:2.6.1:5.4.2:1.2.1:4.2.3 +498 2.7.4:2.8.3:2.7.4:4.1.1:5.4.99:1.2.1:6.3.4:1.1.1:5.3.1 +499 1.2.5:4.1.1:2.7.4:2.3.1 +500 1.4.1:2.4.2:4.3.1:1.2.1:4.1.1 +501 2.1.1:2.7.7:2.3.1:2.2.1 +502 1.1.1:1.2.1:2.2.1:4.1.1:9.9.9 +503 2.3.1:3.6.1:4.1.1:3.1.2:5.4.99:2.7.2:2.5.1 +504 2.4.2:1.5.1:4.1.1 +505 2.4.1:1.2.5:1.17.1:2.3.1:1.1.1:9.9.9:2.3.1 +506 2.5.1:3.5.2:2.6.1:1.1.1:1.1.1:1.2.1 +507 2.7.8:2.4.1:1.4.1:4.3.2:2.7.4:1.2.1:3.5.1:6.3.4:2.1.1 +508 1.1.1:2.3.1:4.1.3 +509 1.1.1:4.1.2:1.2.1:6.3.4 +510 2.7.2:4.1.1:3.2.1:1.1.1:6.3.1:4.3.2 +511 4.4.1:6.3.4:2.7.4:2.7.7:2.7.4:5.3.1 +512 1.8.1:4.3.2:1.14.13:2.3.3:6.3.4 +513 2.7.4:2.7.9:6.3.2:2.7.1:5.4.2 +514 2.7.4:4.2.1:1.1.2:6.3.3 +515 4.3.1:4.3.1:2.7.2:1.4.1:2.7.6:2.7.2:5.3.1 +516 1.14.16:4.1.1:2.7.8 +517 1.1.1:4.2.1:5.4.2:1.8.1:2.4.2 +518 2.3.1:6.3.3:1.4.1:4.2.1:5.1.1:2.7.1:3.1.1:4.3.1 +519 1.8.1:4.1.3:2.5.1:1.2.1:2.4.2 +520 2.1.3:2.3.1:1.5.1:2.2.1:1.5.1:2.3.1:3.5.3 +521 3.6.1:1.17.1 +522 1.1.3:4.2.3:2.3.1:1.2.1 +523 3.2.2:6.3.4:1.5.99:2.7.2:2.3.1 +524 4.2.3:1.1.1:5.4.99 +525 3.1.1:2.3.1:2.7.1:3.6.1:2.1.3 +526 6.3.4:2.7.7:4.1.1:1.2.1 +527 1.3.3:4.1.1:2.7.2:2.1.2:3.6.1:2.5.1:3.5.1:3.1.1:2.3.1:2.3.1:2.4.2 +528 1.4.1:6.3.2:2.7.6:2.5.1:3.5.1 +529 6.3.3:5.3.1:2.6.1:2.6.1:4.1.1 +530 4.3.2:1.1.1:1.2.1:2.7.1:1.5.1 +531 1.2.1:2.3.1 +532 4.1.2:2.1.2 +533 4.1.2:2.1.1:4.1.2 +534 5.5.1:1.1.1:1.1.2:6.3.4:6.3.4 +535 5.4.3:2.4.2:2.7.2:1.5.1 +536 4.2.3:1.2.7:2.1.2:2.7.1 +537 3.5.1:2.7.2:4.2.3:1.1.1:2.5.1 +538 6.3.4:2.2.1:2.3.3:6.2.1 +539 2.7.2:2.7.1 +540 3.1.4:2.7.4:2.1.2 +541 4.2.1:2.4.2:3.1.1:6.2.1:4.1.1 +542 1.4.1:6.3.3:2.1.1:6.3.2:3.5.1 +543 1.3.3:2.3.1:2.4.2:2.7.7:3.1.3 +544 4.3.1:4.3.1:3.6.1:2.7.2:4.1.1:6.3.2:3.5.2:3.5.1:4.3.1 +545 3.1.3:2.3.1:6.2.1:3.5.3:2.7.1:1.2.1:1.13.11:2.3.1:4.4.1:1.7.2 +546 6.3.1:2.8.1:3.6.1:2.4.2:5.3.1:6.3.4:3.1.3:2.4.1:3.5.1:3.5.1:1.5.99:5.4.2 +547 3.2.1:1.7.1 +548 5.4.2:3.1.2:2.3.1:3.1.1 +549 5.3.1:2.4.2:4.1.3:5.3.1:1.1.1:2.6.1:2.3.1 +550 3.6.1:2.2.1:2.7.2:3.7.1:2.4.1:2.1.1:6.3.4:2.5.1 +551 4.1.1:6.3.4:4.1.1:2.7.1:6.3.2:6.3.2:2.3.1:4.1.1:2.1.3:2.6.1:2.7.1:1.4.1 +552 1.7.99:1.2.1:2.7.2:4.1.1 +553 3.2.1:2.1.1:2.7.1 +554 1.2.1:5.4.2:3.3.1:2.7.2:1.5.1:1.2.4:2.3.1 +555 2.3.1:2.6.1:2.1.1:3.5.3:1.3.99:2.4.2 +556 1.5.1:3.4.13:5.4.2:4.1.2:1.4.4:4.1.2:3.2.1:2.7.1 +557 2.7.1:1.4.99:3.1.1:5.4.2:6.2.1:2.3.1:6.3.4:2.7.7 +558 3.6.1:4.1.1 +559 4.2.1:2.7.8:1.1.1 +560 4.3.2:3.1.2:4.2.1 +561 3.5.4:4.1.3 +562 5.4.99:6.3.2:4.3.2:6.3.3:2.7.2:4.1.1:5.1.3:1.2.7:1.1.1:2.1.1:2.3.1 +563 4.2.1:2.7.7:1.5.99:2.1.1:1.2.4:2.4.1:1.17.1:2.7.1 +564 6.4.1:2.7.2:1.7.99:2.7.1:1.3.99 +565 2.4.2:2.1.1:4.2.3:2.5.1:2.7.4:1.2.1:2.1.3 +566 4.3.2:5.3.1:4.1.1:4.4.1:2.3.1:4.3.1 +567 4.2.3:1.1.1:2.3.1:1.1.1 +568 2.1.1:1.17.1:2.6.1:4.3.2:6.3.4 +569 2.3.1:2.1.2:1.2.1:4.1.2:6.3.5:1.2.1 +570 6.3.2:2.1.1:4.3.1:2.7.7:4.3.1:4.2.1:5.4.99:1.1.1:4.1.1 +571 5.1.3:3.5.3:3.2.1:3.5.4:2.7.1:2.7.1:1.1.1:2.7.2:2.1.3:2.1.3:1.1.1:4.1.3 +572 2.6.1:4.3.2:5.4.99:3.6.1:3.1.3:3.5.1:2.4.2 +573 1.5.3:2.7.8:2.7.7:4.1.3:2.7.1:1.2.4:1.4.1:2.5.1:2.7.2:4.1.1:4.4.1 +574 2.7.7:1.2.4:2.3.1:1.14.13:4.2.1 +575 2.3.3:2.7.1:2.1.3:6.3.2:4.1.1:4.1.1 +576 4.2.3:1.17.4:5.3.1:6.3.3 +577 2.1.2:3.5.3:1.2.1:2.1.2 +578 6.3.3:1.5.1:4.1.1 +579 6.3.4:4.3.2:4.1.1:1.2.1:5.4.99 +580 2.3.1:2.7.2:4.1.1:2.1.1 +581 2.2.1:4.2.3:2.7.4:1.2.1:6.3.3 +582 2.1.3:4.1.3:3.4.13:2.3.1:2.5.1:5.3.1:2.4.2:3.2.2 +583 2.1.2:1.2.1:1.1.1 +584 3.2.1:2.5.1:2.1.1:1.1.1:3.2.1 +585 2.3.1:2.7.1:3.2.1:3.1.3:3.5.1 +586 2.7.1:3.5.1:1.1.1:2.3.1:6.3.2:1.17.1 +587 2.5.1:1.5.99:2.7.1 +588 3.6.1:2.1.3:3.6.1:6.3.4:4.3.1 +589 2.1.2:4.2.1:2.3.1:2.7.7:2.4.2:2.7.7 +590 2.5.1:2.3.1:2.7.4 +591 2.1.1:3.5.1:1.3.3:3.1.1:4.2.1:2.6.1:5.4.2 +592 6.3.4:6.3.5:2.5.1 +593 6.1.1:4.1.1:2.1.2:3.5.1:2.7.2:4.4.1:2.7.1:1.-.-:5.3.1 +594 6.4.1:6.3.5:1.3.99:4.3.1 +595 2.7.7:3.2.1:2.1.2:2.1.3:2.7.1:4.1.3:2.1.1:2.7.4:5.3.1:4.4.1 +596 6.3.3:6.3.3:3.5.1 +597 4.2.3:4.3.2:2.7.2:1.4.3 +598 2.5.1:1.2.1:6.3.4:2.3.1:3.5.3 +599 5.3.1:2.6.1:1.14.16:4.1.1:2.3.1:2.7.1:2.7.2 +600 1.4.1:3.6.1:4.4.1:1.5.1:2.7.4 +601 5.4.2:4.1.1:2.6.1:2.4.2 +602 1.5.99:2.6.1:2.7.2:2.1.3 +603 2.3.3:1.1.1:4.3.2:2.4.2:3.1.2:2.1.3:5.3.1:2.7.7:2.3.1:4.2.1:2.7.1:1.2.1:2.5.1 +604 2.1.3:2.1.2:1.1.1:6.3.4 +605 2.1.2:2.7.9:4.1.1:2.3.3 +606 2.7.1:5.1.3:4.2.1:2.5.1:1.1.1:2.1.1:4.4.1:5.3.1:2.7.8 +607 6.3.4:2.3.1:3.5.1:2.6.1:3.1.3:2.7.1:4.1.2 +608 1.8.1:2.9.1:5.4.99:2.4.2:3.5.3:1.11.1:4.1.3:2.8.1:9.9.9 +609 2.3.1:2.7.6 +610 2.7.6:1.1.1:5.4.2:5.4.2 +611 3.5.1:2.7.2:6.3.5:1.7.99:5.3.3:3.5.1:2.4.2:2.7.4:2.1.1:2.7.8:1.3.99 +612 2.7.9:2.7.9:2.7.2:1.2.1:4.4.1 +613 6.3.4:2.3.1:1.3.3:2.7.8 +614 1.2.4:2.5.1:2.5.1:3.5.3:2.7.7 +615 3.1.2:2.7.7:9.9.9:1.1.1:2.3.1:4.3.2:6.3.5:1.3.99 +616 3.2.1:4.3.1:2.7.1:2.7.1:5.4.99:4.1.1:2.1.3:3.5.1:1.1.1:2.7.1:1.5.1 +617 3.4.11:2.7.1:2.4.1 +618 2.3.1:2.7.1:1.2.1:6.3.4 +619 2.5.1:6.3.4:3.3.1:3.4.11 +620 4.1.3:3.6.1:2.7.2:4.3.1 +621 3.5.1:4.4.1:6.3.4:1.1.1:6.3.3:6.3.4 +622 5.3.1:3.6.1:6.3.3:6.3.1:1.5.1:2.3.1:2.7.4:1.1.1:1.2.1 +623 3.5.3:2.6.1:1.2.1:1.1.1:4.1.2:2.3.1:4.2.1:2.1.2:1.2.1:4.1.1 +624 2.3.1:5.3.1:2.3.1:4.4.1:1.2.4:1.4.1:5.4.2:3.6.1 +625 4.3.2:5.4.99:4.2.1:3.5.1:1.2.1:6.4.1:2.7.4:4.1.1:2.3.1:2.4.2 +626 4.3.1:1.7.99:2.5.1:2.7.2:3.5.1:5.3.1:2.6.1 +627 3.5.1:2.3.1:1.1.5:4.4.1 +628 3.5.3:1.2.1:4.2.1:3.1.4 +629 3.5.1:2.7.4:2.3.1 +630 3.6.1:1.1.1:2.7.1:4.2.1:1.2.1 +631 2.3.1:5.4.2:3.1.3:1.3.99:1.2.1:4.1.1:4.-.-:1.3.1:6.3.3:1.5.1:2.1.1:2.7.7 +632 2.1.3:1.1.1 +633 1.1.1:4.1.1:1.4.1 +634 2.4.2:1.1.1:4.3.2:1.5.1:4.1.1 +635 4.2.1:1.5.1:3.5.1:4.3.1:2.6.1:2.1.4:2.5.1:3.2.1:2.1.1:2.4.2:4.3.1:1.4.1 +636 2.6.1:2.4.2:3.5.4:4.2.3 +637 2.5.1:3.2.1:3.1.1:2.7.1:4.1.1 +638 2.4.2:2.2.1:3.5.1:3.1.3 +639 1.13.12:2.7.7:4.1.1:2.7.6:2.4.2:2.7.2:6.3.2 +640 2.7.6:1.14.13:2.7.1:4.1.3 +641 2.7.1:4.2.1:2.1.2:3.5.3 +642 2.7.2:2.6.1:3.1.3 +643 1.1.1:2.7.6:2.1.2:5.1.3:3.2.1:2.1.1:2.7.4 +644 2.5.1:5.4.2:3.1.3:4.1.1 +645 2.3.1:2.1.3:2.4.1:2.8.3:2.5.1:1.4.1 +646 1.8.1:3.1.5:2.3.3:5.1.3:6.3.4:5.1.2:4.3.1:1.1.1:4.1.1:6.2.1 +647 3.1.3:3.5.1:2.7.2:3.6.1 +648 4.2.1:2.1.3:3.5.3:2.3.1:1.4.4 +649 4.2.3:4.2.1:4.2.1:2.6.1 +650 4.3.2:4.4.1:5.3.1:3.5.3:2.7.1:2.7.4 +651 1.2.1:1.4.3:4.2.3 +652 2.1.1:4.3.1:2.5.1:2.7.8:2.7.4:4.1.1:4.4.1:2.7.1 +653 2.3.1:3.5.3:2.1.3:3.5.4:1.5.1:1.2.1 +654 4.4.1:2.3.1:3.4.13:3.1.3:5.1.3 +655 4.4.1:6.4.1:1.5.1:2.7.1:2.1.1:3.1.4:3.5.1 +656 5.4.99:6.3.4 +657 4.1.2:4.2.1:2.8.1:3.5.1:1.5.1 +658 6.3.4:2.4.2:1.4.4:1.4.1:2.6.1:4.1.1 +659 2.5.1:2.6.1:4.2.1:2.5.1:1.1.1 +660 3.1.4:2.4.2:2.1.2:5.4.2:1.5.1 +661 4.1.3:2.1.1:2.7.1:2.1.3:2.7.2:2.6.1:6.3.4 +662 2.6.1:2.6.1:4.1.3:4.4.1:3.5.2:3.5.3:3.1.1 +663 2.1.1:4.3.1:1.1.1:2.1.1:4.3.2:3.5.1 +664 1.1.1:2.5.1:5.3.1 +665 2.7.2:4.3.1:1.5.1:2.7.9:2.7.1:1.3.1:4.1.1 +666 2.7.4:4.2.1:2.5.1:2.6.1:6.3.4 +667 2.7.7:2.7.7:5.3.1:2.1.1:5.1.3:4.1.1 +668 6.3.4:2.3.1:3.5.1:3.1.4 +669 1.1.3:6.3.4:2.6.1:6.3.3:3.5.2 +670 1.13.11:6.2.1:4.2.1 +671 2.7.1:1.2.1:1.4.3:4.4.1:4.1.1:4.1.1:2.2.1:1.5.1:2.7.1:3.5.99:1.7.1 +672 2.5.1:2.1.3:2.7.1:3.6.1:1.4.4:4.2.2 +673 2.8.1:4.1.1:2.7.2:6.3.1:4.4.1:2.7.8:5.1.3 +674 4.1.1:3.6.1:2.7.8:2.7.4:3.2.1:6.3.2:4.1.1 +675 2.1.3:1.2.4:5.3.1:5.4.2 +676 2.6.1:2.3.1:6.3.2:4.2.3:1.2.1:6.4.1:2.8.1:4.1.1:6.6.1:1.1.1:2.3.1:2.4.2 +677 5.3.1:2.3.1:3.2.2:1.2.1 +678 1.7.1:3.5.4:6.3.4:6.3.5:3.1.3:4.1.1:5.3.1 +679 6.3.2:3.5.3:1.1.1:2.6.1:2.7.4 +680 2.1.3:2.7.7:2.6.1:2.4.2:6.3.4:3.1.2:5.3.1 +681 4.1.99:2.7.2:2.4.1:2.5.1 +682 4.3.2:2.7.6:2.7.7 +683 3.5.1:1.5.1:3.2.1:5.3.1:4.1.1:2.2.1:2.3.1:4.3.2:2.7.1:2.7.1:2.3.1 +684 3.5.1:2.3.1:2.7.4:2.7.1:1.4.1:1.4.1:1.1.1:1.7.99:6.3.2 +685 6.4.1:2.7.1 +686 2.7.2:4.3.2:2.5.1:3.1.3:1.2.1:3.1.3:3.1.4:2.1.3 +687 5.1.3:1.3.99:2.7.1:2.3.1:2.1.3 +688 4.2.1:6.3.4:2.7.7:2.6.1:2.7.1 +689 2.3.2:2.3.1 +690 5.1.3:4.2.-:1.1.1:3.5.1:3.1.4:2.3.1:1.1.1:4.2.1:2.5.1:1.1.1 +691 2.1.2:6.3.3:2.6.1:1.2.1:4.1.1:1.2.1 +692 3.5.3:1.1.1:2.7.2:3.5.2 +693 3.5.99:6.3.2:2.1.1:6.3.5:4.1.1:6.3.1 +694 1.1.1:5.3.3:4.1.2:4.1.1:2.6.1:4.3.2:3.2.1:2.6.1:1.5.1:2.3.2:1.8.1:2.3.3:1.14.16:1.5.1:1.17.4 +695 4.2.1:1.5.1:2.7.4:4.2.1 +696 4.1.1:3.5.1:3.2.2:4.1.1:1.7.2:2.8.1 +697 3.4.13:2.5.1:1.1.1:1.5.1:1.2.1:3.6.1:3.4.11 +698 3.6.1:4.1.1:4.3.1:2.7.1:2.3.3 +699 3.1.3:6.3.2:4.2.1:4.2.3 +700 1.4.1:2.4.2:2.7.2:2.7.7 +701 1.2.1:1.1.1:2.1.3:6.4.1:2.4.2:2.1.2:1.1.1:1.14.11:4.1.2:2.7.7:2.2.1:4.1.2:2.3.1 +702 2.6.1:2.3.1:2.6.1:4.1.1:2.6.1 +703 3.5.2:3.5.1:2.7.4:2.9.1:4.1.1:2.7.4 +704 3.2.1:1.13.11 +705 1.2.1:2.6.1:4.3.1:4.1.1:2.7.1 +706 5.4.4:3.4.13:1.7.2:4.2.3:2.7.1:1.2.1:5.3.1:1.2.1 +707 9.9.9:1.3.1:2.5.1:2.4.1 +708 2.5.1:2.3.1:2.1.2:6.2.1 +709 1.1.3:2.7.1:3.1.1:4.4.1 +710 3.7.1:2.6.1 +711 1.4.3:1.2.1 +712 4.2.1:2.4.2:6.3.4:2.7.8:4.3.2:2.3.1:4.2.3 +713 1.1.1:4.2.1 +714 2.3.1:5.3.1:2.4.2 +715 6.3.4:6.3.4:3.5.1:2.7.1 +716 2.7.1:3.5.3:2.1.1:2.7.1:6.3.2:2.6.1:3.5.3:4.1.1:4.3.1:2.1.1:1.7.99 +717 2.8.1:4.3.2:6.3.5:2.1.2:2.7.4:4.3.2:2.5.1 +718 4.4.1:5.3.1:2.1.4:1.7.99:2.7.1:5.1.3:2.7.1:1.7.99:1.1.1 +719 2.7.2:4.2.1:6.3.4:4.2.1:4.1.3:2.5.1 +720 2.7.1:4.2.3:2.7.1:2.7.7:2.5.1:5.3.1 +721 4.2.1:2.7.2:4.1.2:2.1.1:2.5.1 +722 6.3.4:5.3.1:2.7.2:2.6.1:4.1.1:2.5.1:2.7.2:2.6.1 +723 2.3.1:2.7.4:2.5.1:2.4.1:5.4.2 +724 6.3.3:2.6.1:2.7.4:3.2.1:4.2.3 +725 6.2.1:2.4.2:1.13.11:3.5.4:2.7.2 +726 4.1.1:4.3.1:2.6.1:2.5.1:4.1.1:6.3.3:3.3.1:2.7.7 +727 2.3.1:2.7.2:1.2.1:3.5.1 +728 2.4.2:2.5.1:3.4.13 +729 4.1.2:5.4.2:1.2.1:2.7.2:2.4.2 +730 2.7.6:1.2.1:2.7.9:5.4.99:3.6.1:4.2.1:4.1.3 +731 2.7.2:2.5.1:3.1.3:4.1.3 +732 4.99.1:3.5.1:3.5.1 +733 4.1.1:5.1.3:1.5.99:2.1.2:2.7.2:4.2.1:3.5.3:5.4.2 +734 5.4.2:4.2.1:1.3.3 +735 2.7.6:2.7.1:4.2.1:3.5.1:3.6.1:2.6.1 +736 4.2.3:4.3.1:6.3.4:2.1.1:4.1.2:2.7.1:3.1.3 +737 2.7.1:1.3.3:6.3.5:4.2.1 +738 2.7.2:3.5.1:3.5.3:4.1.3:6.3.1:2.7.1:4.3.2:4.2.1 +739 2.1.1:2.6.1:2.7.7:6.3.4:2.1.1:1.2.4:2.3.1:3.6.1 +740 6.1.1:6.3.2:2.3.1:3.1.4:3.1.3:2.3.1:5.3.1:2.6.1:2.7.2:4.3.1:3.6.1 +741 3.5.1:2.7.1:4.3.2 +742 4.1.2:1.7.1:2.1.2:1.5.99 +743 1.2.1:1.1.1:2.1.1:2.1.1:2.3.3:4.1.2:4.2.1:1.13.11:2.4.2 +744 2.6.1:2.3.1:3.5.1:2.7.1:2.7.4:2.1.2:2.4.2 +745 4.2.3:2.5.1:6.3.2:1.14.13:1.4.1:6.3.4:1.14.12:5.4.99:2.3.1:2.5.1:5.4.99:1.5.3 +746 1.2.1:2.-.-:1.1.1 +747 2.5.1:1.5.1:3.5.1:6.2.1 +748 4.1.2:2.6.1:3.1.3 +749 2.1.1:1.3.99:2.7.1:6.3.3:3.4.13:1.2.1:3.6.1:2.4.2:2.6.1 +750 1.2.1:1.4.1:2.4.2:6.3.2 +751 1.8.1:3.1.3:3.5.1:3.1.3 +752 2.3.1:6.3.5:4.3.2 +753 3.5.1:2.4.2:4.4.1:2.7.7 +754 2.7.6:5.4.2:6.3.1:2.7.1 +755 2.7.2:4.2.3:1.2.1:3.2.1 +756 4.1.1:3.6.1:3.1.3:4.1.3 +757 2.7.2:3.2.1:1.5.1:2.8.1:2.8.1:1.5.3:4.1.1:3.5.1 +758 6.3.4:2.3.1:4.4.1:2.4.1 +759 1.2.4:2.5.1:3.5.1:1.3.1:2.7.4:4.2.- +760 4.3.2:2.7.7 +761 2.4.2:6.3.2:2.3.1:4.1.2 +762 2.3.1:6.3.2:6.2.1:3.1.3:1.1.1:6.3.4:2.7.2 +763 2.7.4:3.5.1:2.7.7:4.2.1 +764 2.3.1:3.6.1:2.3.1 +765 4.3.1:2.4.2:1.2.1:4.2.3:2.7.4:3.5.1 +766 4.1.1:2.7.7 +767 2.4.2:4.3.2:1.8.1:4.3.2:2.7.7:3.2.2:2.7.6:4.3.2:1.5.1 +768 2.5.1:6.3.4:2.6.1:6.3.5:9.9.9 +769 1.1.1:2.6.1 +770 6.3.4:2.6.1:2.7.7 +771 2.7.7:5.3.1 +772 2.1.3:2.7.2:2.3.3:1.1.1 +773 2.7.9:2.7.1:2.3.1:2.1.1 +774 6.3.2:2.7.2:4.6.1 +775 3.4.11:1.8.1:2.7.4 +776 2.6.1:3.5.3:3.5.1:3.1.2:6.2.1:1.1.1 +777 4.3.1:3.5.3:1.13.11:2.6.1:2.5.1:3.5.3:4.1.3:2.5.1 +778 3.1.3:4.3.2:5.3.1:1.4.1:1.2.1 +779 3.5.4:2.3.1:1.1.1:2.3.1:6.3.4:6.3.4 +780 1.1.1:4.4.1:3.2.2:2.3.1:3.5.3:1.1.1 +781 2.3.1:6.3.4:1.4.1 +782 4.1.1:1.5.1:3.5.3 +783 2.7.2:2.6.1:5.4.1:6.3.4:2.6.1:6.3.3 +784 2.1.1:1.1.2:2.5.1:1.1.1 +785 4.2.1:2.7.2:2.3.1 +786 2.3.1:4.2.1:1.5.1:1.2.1 +787 2.6.1:5.3.1:3.5.1 +788 1.5.1:3.5.3:2.3.1:4.2.1:2.3.1:2.6.1:2.6.1:3.6.1:2.7.7:1.1.1:2.6.1:1.3.99:6.2.1 +789 1.4.99:5.3.1:4.3.1:2.4.2:2.5.1:2.1.3:2.4.2:2.7.1:2.7.2 +790 4.1.3:4.1.1:1.1.1:2.6.1:2.7.1:4.2.3:2.1.3:6.3.4 +791 2.7.4:3.2.1:2.1.2 +792 4.4.1:2.7.4:3.1.3 +793 3.5.1:1.2.1 +794 2.5.1:2.7.2:2.5.1:1.2.1:3.5.1 +795 1.2.1:2.3.1:1.5.3:1.2.1:1.1.1:2.6.1 +796 2.3.1:6.3.4:2.1.2 +797 6.3.5:6.2.1:5.4.2:1.5.1 +798 3.1.3:6.3.3:6.3.3:1.2.1:6.3.4:2.7.7:1.4.1:3.5.3:2.4.2 +799 4.2.1:2.3.1:2.6.1:6.3.3:2.7.1:2.7.7 +800 1.8.1:5.4.99:1.1.1 +801 3.2.1:6.3.4:4.1.2:4.3.1:2.4.2:1.1.1 +802 3.6.1:4.1.1:2.5.1:4.3.2:3.5.3:9.9.9:4.3.1:5.4.2 +803 2.7.1:2.5.1:4.4.1:1.1.1:2.7.2 +804 2.7.2:1.1.2:2.3.1:2.7.8 +805 3.5.1:6.2.1:3.2.2:3.4.11 +806 1.1.1:2.7.2:6.3.4:3.6.1:6.3.4:6.3.5 +807 2.3.1:2.7.1:2.7.1:5.4.2:1.2.1:1.13.12:1.2.1:2.7.1:3.5.1:2.3.1:1.17.4:1.1.1:2.6.1 +808 2.7.1:3.5.3 +809 1.2.1:2.3.1:2.5.1:1.1.1:2.3.1 +810 5.1.2:4.3.1:3.1.3:6.3.4:2.5.1 +811 6.3.3:6.3.2:2.7.1:1.4.1 +812 2.7.1:6.3.4:6.1.1:2.7.1:2.7.1:2.1.4 +813 1.1.1:2.1.2:3.6.1:2.7.1 +814 6.3.2:3.1.3:4.1.1:2.3.1 +815 6.3.2:2.7.4:2.4.2:9.9.9:6.3.5 +816 4.2.1:3.1.3:2.3.1:1.2.4:1.2.1:2.1.1 +817 5.1.2:1.2.1:2.3.3 +818 4.1.2:5.4.99:4.2.1:2.3.1:1.2.1:1.1.1:6.3.3 +819 2.5.1:2.7.1:1.1.3:4.3.2:2.7.2 +820 2.4.2:6.3.4:3.5.1:1.8.1:1.3.1:6.3.4 +821 4.3.1:2.5.1:4.1.2:4.1.1 +822 4.1.1:3.5.4 +823 1.2.1:6.3.4:3.6.1:2.1.1 +824 2.5.1:1.1.1:3.2.1:2.1.2 +825 2.4.1:6.2.1:2.3.1:4.2.1:4.2.1 +826 1.1.1:9.9.9:2.6.1:3.4.13:4.3.1 +827 2.1.2:6.3.4:6.3.5:3.5.4:6.3.2:2.7.2:1.2.1:4.2.3:2.3.1:2.1.1 +828 5.4.2:5.4.2:3.5.3:6.3.2:2.7.2:2.1.1 +829 2.7.2:2.6.1:2.3.1:4.1.2:2.7.1 +830 2.7.1:3.5.99:2.7.6 +831 4.2.1:1.2.1:5.3.1:4.2.3:1.1.1 +832 3.6.1:2.3.1:2.5.1:4.3.1 +833 1.17.4:3.5.1 +834 2.7.2:2.4.2:2.1.1:2.6.1:3.2.1 +835 4.3.2:2.1.1 +836 4.1.1:2.4.2:2.3.1:2.6.1:4.1.1 +837 1.2.4:2.4.2 +838 3.5.1:5.1.3:2.4.2 +839 2.8.1:1.1.1:3.5.1:4.1.1:4.1.1:2.3.1:4.1.3:2.7.7:3.5.1:4.1.1:1.1.1:2.6.1:2.7.7 +840 2.1.2:5.4.99:3.5.1:1.3.99:5.4.2 +841 9.9.9:3.5.1:4.4.1 +842 5.4.2:3.1.4:1.2.1:2.1.1:5.1.3 +843 2.6.1:5.1.2:3.5.1:1.2.1:4.3.2 +844 2.5.1:1.1.1:1.2.1:4.3.2:2.6.1 +845 3.5.2:4.1.3:2.7.7 +846 2.7.1:3.2.1:1.2.4:6.3.4:2.7.1:2.6.1:3.5.3:1.3.3:2.7.1:3.6.1:2.1.2:1.5.1 +847 3.5.1:1.2.1:4.3.1:2.5.1 +848 2.1.2:1.1.1:2.6.1:3.5.4 +849 5.3.1:2.5.1:1.1.1:1.13.11:1.14.13:5.3.1 +850 6.3.4:3.2.2:4.2.1:3.5.1 +851 2.3.1:2.7.4:2.3.1:4.1.3:3.5.3 +852 1.14.-:2.3.1:2.7.1:3.6.1:2.4.2:4.3.1:2.7.1:6.3.4:4.1.99:3.5.1:1.1.1:3.6.1 +853 4.2.1:2.7.4:2.7.1:2.3.3 +854 2.1.3:2.1.1:4.3.2:4.2.1:4.1.2:5.3.1 +855 3.1.3:4.3.1:1.3.99 +856 6.3.4:2.3.1:4.3.2:3.5.3:2.6.1:2.5.1:2.5.1:1.5.99:3.2.1:1.8.1:1.5.99:2.7.1 +857 3.2.1:2.2.1:6.3.4:4.2.-:2.5.1 +858 3.4.11:2.1.3:4.1.2:2.3.1 +859 4.3.2:2.1.1:1.2.1:4.4.1:3.5.1:4.3.1:1.1.1:2.3.1 +860 2.7.1:6.2.1:2.3.1:2.7.7 +861 2.4.2:2.7.2:2.4.2:1.2.1:6.3.5 +862 1.1.2:1.2.1:5.3.1:6.3.5:1.1.1:1.14.16 +863 6.2.1:2.7.1:4.1.3 +864 2.1.1:2.3.1:2.3.2:4.2.3:2.1.1:3.5.1:5.1.1 +865 1.4.3:1.3.1:1.5.1:4.2.1 +866 2.8.1:4.3.1:1.5.99:3.5.3 +867 2.5.1:2.5.1 +868 2.7.4:3.1.4:4.4.1:2.7.2:2.7.2:2.7.1:6.3.4:6.3.1 +869 1.1.1:4.1.1:2.7.9:2.4.2:4.2.1:2.6.1 +870 1.1.1:2.7.2:3.5.1:3.5.4 +871 3.4.13:2.7.4:3.2.1 +872 1.1.1:2.3.3:3.7.1:2.7.2:1.1.5 +873 2.5.1:1.2.1:4.3.1:3.2.1:1.1.1:2.7.7 +874 1.4.1:6.3.4:1.1.1:1.2.1:5.4.99:2.7.1:2.1.1:2.7.1 +875 6.3.4:3.5.1:2.1.2 +876 2.7.7:4.2.1 +877 1.3.99:2.7.1:4.1.1:2.7.1:3.5.2:2.3.1 +878 3.6.1:2.1.2:2.1.1 +879 1.1.1:2.6.1:4.2.1:4.2.3:3.1.3 +880 2.1.2:4.1.1:3.5.1 +881 3.5.3:4.3.1:4.2.1 +882 3.6.1:2.7.1:2.4.1:2.7.6:1.7.99 +883 6.3.3:2.6.1:2.1.1:4.3.2 +884 3.1.3:5.4.2:2.7.1 +885 1.3.3:1.1.1:2.5.1:2.7.1:4.1.1:2.7.1:2.7.6:2.3.1:5.1.3:6.3.4:5.1.3 +886 6.3.5:6.3.4:1.4.1:2.1.3:2.3.1:2.7.2:2.7.1:3.1.3:2.7.4:2.7.1:6.3.2:4.2.3:6.3.3:1.5.1:5.4.99 +887 2.7.2:2.1.1 +888 2.7.7:4.2.1:4.1.2:2.7.7:2.5.1:3.1.4 +889 2.1.2:2.1.2:4.2.1:6.3.5:1.4.1:2.3.1:6.3.5 +890 3.5.3:4.2.1:4.1.1:2.1.3:5.3.1:2.7.4 +891 1.4.1:5.4.2 +892 3.5.3:4.2.1:6.3.4:2.3.1 +893 3.5.3:3.5.3:1.1.1:2.7.1:1.2.4:2.6.1 +894 2.6.1:2.7.8:4.2.1:3.5.1:2.7.9:3.1.3:2.4.2:4.4.1:4.2.1 +895 1.4.1:3.4.13:2.1.2:4.4.1:2.7.1 +896 4.1.1:1.3.99 +897 4.2.1:2.4.2:4.3.1 +898 5.3.1:2.3.1:2.5.1:3.4.13:2.7.7:3.2.1 +899 1.1.1:2.6.1:2.7.1:6.3.2:3.5.1:2.1.3:1.2.1:6.3.4:2.7.2 +900 2.6.1:2.4.2:2.7.1:4.1.1:2.7.2 +901 5.1.3:2.7.1 +902 2.7.2:4.4.1:3.5.3:6.4.1:2.4.2:2.7.7:1.1.1 +903 6.3.2:2.7.1:1.3.1:4.1.2 +904 4.1.1:3.5.1:1.5.99:6.3.4:3.5.1:6.3.5:4.1.1:3.5.1:1.2.1:1.5.1 +905 4.1.2:3.5.1:2.6.1:2.5.1:2.6.1:1.1.5 +906 4.1.1:6.3.5 +907 2.7.7:3.5.3:4.1.1:6.3.4:2.4.2 +908 1.5.1:3.1.3:3.2.1 +909 4.3.1:6.3.2:2.5.1:6.3.4 +910 2.3.1:2.7.2:2.3.1:4.1.2:5.1.3:2.2.1:3.1.2 +911 4.3.1:6.3.4:9.9.9:2.7.9:3.5.1 +912 1.2.1:3.1.3:6.3.4:5.3.1:1.1.1:6.3.4:4.2.1 +913 2.3.3:2.3.1:2.6.1:5.3.1:5.3.1 +914 4.2.1:2.3.1:6.3.2 +915 3.6.1:2.3.3 +916 2.8.3:4.2.1:2.7.7:4.1.3:2.4.2:1.1.1:1.17.4 +917 1.2.4:1.4.1:6.3.4:2.7.1:6.3.5:3.1.4:2.6.1:1.4.1:3.4.13:6.1.1 +918 4.1.1:3.5.1:2.7.7 +919 1.1.1:1.1.1:2.7.1 +920 5.4.2:1.1.1:6.3.5:1.5.1:6.3.2 +921 5.1.3:1.14.12:3.1.3:6.3.4 +922 1.1.1:4.1.2:3.5.1 +923 2.4.2:1.2.4:6.3.3:2.6.1:2.5.1 +924 2.3.1:5.4.2:1.1.1:2.4.2:2.8.1:2.1.2 +925 6.3.4:4.4.1:1.5.99:3.4.11 +926 6.3.5:4.1.3:1.5.1:2.6.1:2.1.1:2.6.1:2.7.7:2.7.6 +927 3.5.3:1.4.4:1.2.4:4.4.1:2.7.2 +928 4.1.1:5.1.1:2.5.1:1.2.1 +929 5.3.1:2.7.1:3.5.2:3.1.5:1.14.16 +930 4.3.2:5.1.3:2.3.1:6.3.2 +931 6.3.4:1.5.1:1.8.1 +932 2.4.2:1.4.1:2.6.1:2.7.1:2.7.6:1.13.11 +933 3.5.1:1.17.1:6.3.2:3.6.1:3.5.1:2.3.3:1.1.1:6.3.2:3.6.1:4.3.2:4.3.1 +934 6.3.1:4.1.1:2.6.1:3.1.1:2.7.1:2.4.2 +935 2.7.7:4.1.2:4.1.2:3.5.1 +936 3.5.1:2.1.1 +937 1.13.11:2.5.1:3.6.1:2.7.6 +938 2.4.2:4.1.1:2.7.2:1.4.1 +939 2.3.1:2.5.1:1.4.1:2.4.1:9.9.9:2.4.2:1.2.1:5.3.1:2.7.1:1.2.1 +940 2.1.2:1.8.1:2.1.3:3.5.1:6.3.4:6.3.5:4.3.2:2.1.2 +941 1.4.3:5.3.1:1.2.4:2.6.99 +942 6.3.4:6.3.2:2.7.8:1.5.99:1.1.1 +943 2.4.1:5.3.1:2.3.1 +944 3.6.1:2.7.8:6.3.2:1.5.1:6.3.4 +945 6.3.5:4.3.2:3.2.1 +946 2.6.1:1.17.4:5.4.2 +947 5.4.2:3.1.2 +948 4.1.1:4.1.1:5.3.1 +949 2.7.2:2.5.1:2.7.1:1.1.1:2.3.1 +950 4.3.1:1.2.4:6.3.5:3.5.1:1.5.1:1.8.1:6.3.3 +951 2.4.2:2.3.1:4.2.1 +952 2.7.1:2.7.2:2.1.1:4.2.1:1.5.1 +953 3.4.11:1.1.1:2.5.1:2.3.3:4.2.1:3.5.1:6.3.2:2.2.1 +954 3.1.3:1.1.1:4.3.1:1.1.1:2.3.1:2.1.1:3.1.2 +955 6.3.2:2.4.1:2.7.1:1.3.3:2.3.1:3.4.13:2.7.7:1.2.1 +956 1.2.1:2.3.1 +957 2.1.3:1.14.11:4.4.1:2.1.2 +958 2.3.1:2.7.1:5.4.99:3.5.1:4.1.2:2.5.1:5.4.99:6.3.2:3.5.4:2.1.2 +959 3.1.4:1.1.1:1.1.2:1.1.1 +960 5.3.1:2.7.1:1.2.1:4.1.1:6.4.1:2.5.1:3.4.13:4.1.2 +961 2.1.1:6.3.5:1.5.1:2.5.1:2.7.4 +962 6.3.4:2.5.1:2.3.1 +963 1.1.2:2.4.2:1.1.1:4.1.1:5.3.1:2.7.7:3.5.1 +964 2.7.1:1.8.1:1.1.1:2.7.1 +965 2.3.1:2.3.1:6.4.1:6.3.5 +966 2.7.1:4.2.1:3.1.3:2.4.2:2.7.2:3.1.3:2.5.1:2.5.1:2.7.4:2.3.1:1.2.1 +967 2.7.7:2.7.1 +968 5.4.4:3.1.3:5.4.2:6.3.4:2.2.1:4.3.1 +969 1.13.11:2.5.1:4.2.1 +970 3.2.2:4.99.1:3.1.5:3.5.4:2.4.2:4.1.2:5.3.1:5.3.1:2.3.1:3.4.11 +971 6.3.4:6.3.4:2.4.2:5.4.2:4.4.1 +972 6.2.1:2.7.1:2.7.4:1.2.4:4.3.2:2.7.2:4.1.1:2.4.2 +973 4.1.2:2.3.1:3.1.3:5.1.3:6.3.4 +974 2.6.1:1.5.1:4.3.2:3.1.1:2.7.1:2.1.1:4.3.1:1.4.1 +975 2.6.1:3.5.1:6.3.4:1.13.11 +976 4.3.2:2.6.1:1.14.13:2.3.3:2.6.1:4.4.1:1.2.4:1.2.1:1.2.1:4.99.1 +977 1.7.2:2.5.1:4.3.2:1.8.1:3.5.5:5.3.1 +978 1.7.2:2.5.1:4.1.1:4.1.2:2.7.4:5.4.99:1.1.1:1.4.1:5.3.3:2.4.2 +979 2.6.1:5.3.1:2.3.2:3.6.1 +980 4.2.1:2.7.8 +981 4.4.1:3.5.1:2.7.7:4.4.1 +982 3.1.3:2.7.1:1.2.1:1.7.2:1.5.1 +983 6.3.2:2.3.3:2.5.1:4.1.1:4.1.2:3.4.11:2.5.1:6.3.4 +984 2.7.1:2.5.1:4.1.1:6.3.4:3.1.3:3.6.1 +985 6.3.5:3.4.13:2.5.1:2.1.3:2.1.1:3.6.1 +986 4.3.1:4.2.1:2.3.1:6.3.1:1.5.1 +987 2.7.1:5.1.1:3.5.1:4.1.1:4.3.2:1.1.1 +988 2.1.3:1.2.1:1.14.13:2.7.2:2.7.1 +989 1.5.1:2.5.1:6.3.2:1.17.4:2.1.1:2.1.1:5.4.2:2.7.2:1.14.12 +990 4.2.3:2.1.3:2.4.2 +991 2.7.1:6.3.4:2.7.1:2.5.1:3.5.1:4.1.1:3.6.1:2.6.1:1.2.1:6.3.4:1.14.13:4.2.3:6.3.2 +992 4.1.1:2.3.1:1.2.1:2.7.7 +993 1.1.1:2.4.1:1.4.3 +994 6.3.4:2.7.4:1.4.1:3.1.2 +995 1.1.1:5.3.1:3.1.3:2.4.2:3.5.1 +996 3.5.1:2.5.1:3.2.2:2.3.3:1.14.12 +997 2.6.1:2.7.1:1.5.99:4.4.1 +998 4.3.1:5.4.99:3.1.3:4.2.1:3.3.1:2.3.1 +999 4.2.1:2.7.2:6.2.1:1.2.4:2.3.1:2.7.4:4.2.1:2.7.1:2.6.1:3.1.7:4.3.2 +1000 4.3.2:4.2.1:1.2.1:2.4.1:6.3.4:3.5.1:9.9.9 +1001 2.3.1:2.5.1:1.1.1 +1002 1.5.1:5.4.2:6.3.2:2.7.2:2.7.1:6.6.1:2.6.1 +1003 5.4.99:2.5.1:3.5.1:4.2.1:2.7.1 +1004 2.5.1:4.2.3:3.6.1:2.7.7:2.1.3:1.4.1:2.7.7 +1005 1.2.4:1.1.1:2.7.6:4.3.2:1.1.1:2.3.1 +1006 2.4.2:2.7.7:4.4.1:1.4.1:2.7.7:3.5.1:3.5.1:2.2.1:3.5.4 +1007 5.3.1:2.4.2:2.7.1:4.2.1 +1008 1.18.6:2.4.2:4.1.1:2.3.1:2.7.2:2.3.1:5.4.2:3.5.1:2.3.1:4.1.3 +1009 5.4.2:6.3.4:3.5.1:5.4.2:4.3.1:1.1.1:6.3.4 +1010 2.1.3:6.3.2:2.3.1:6.2.1:4.4.1:2.3.1:2.4.1 +1011 4.2.3:3.6.1:4.1.1 +1012 1.1.1:6.3.2 +1013 2.6.1:2.7.1:2.7.7:2.3.3 +1014 5.1.1:2.7.2:2.1.3:2.4.2:3.4.13 +1015 2.5.1:2.3.1:2.7.7:6.2.1:6.3.4:2.7.6 +1016 1.3.99:5.3.1:2.3.1:2.5.1:3.1.1 +1017 2.3.1:4.1.1:1.5.1 +1018 4.1.3:5.3.1 +1019 5.4.2:1.2.1:6.3.4:6.3.4:4.2.1 +1020 4.1.2:1.2.1:1.3.99:2.7.4:1.2.1:3.1.4:4.3.2:2.6.1:4.1.1 +1021 2.7.1:5.3.1:1.8.1:6.3.4 +1022 3.1.3:2.7.1:3.1.3:5.4.99:2.6.1:2.3.1:1.2.5 +1023 4.1.1:2.6.1:2.7.6:3.5.1 +1024 2.3.3:2.7.1:2.6.1:2.7.6 +1025 2.7.2:3.1.3:6.3.2:2.5.1 +1026 4.3.2:6.3.3:2.6.1:1.3.3:1.1.1:1.5.1:2.7.4:2.3.1:4.3.2:4.1.2:1.1.1:2.7.1:2.1.2:2.1.2 +1027 1.5.3:6.3.1:5.3.1 +1028 1.5.99:6.3.2:1.1.5 +1029 1.2.1:4.3.1:4.1.3:3.5.1:2.3.1 +1030 3.5.4:4.2.3:3.5.3 +1031 4.2.3:2.7.7:2.7.2:2.1.2:2.4.2:4.3.2:1.1.1:3.1.4:4.1.1:3.1.3 +1032 4.2.1:3.5.1:2.1.1:2.3.1:1.2.1:6.3.4:1.3.3:4.2.3:4.3.1 +1033 1.5.1:2.7.4:1.1.1:4.3.2:2.7.6:6.3.3:4.2.3 +1034 6.3.4:3.2.1:3.2.2:4.4.1:4.2.1 +1035 3.6.1:2.7.7:9.9.9:1.3.3:4.2.1:1.2.1 +1036 4.99.1:2.7.2:2.4.2:1.2.4:3.1.3:1.1.1 +1037 1.2.1:2.3.1:2.5.1:4.2.1:4.3.2:1.2.1:4.2.1:4.1.2:2.7.1:1.4.1 +1038 2.7.1:2.4.2:2.7.2:2.3.1:5.4.99:2.7.4:4.1.2 +1039 4.2.1:4.3.1:2.7.7:5.1.3:4.2.3:6.2.1:1.5.1:4.1.1:1.5.1:1.1.1:1.5.99 +1040 4.1.3:2.3.1:4.4.1 +1041 2.6.1:2.1.1:2.7.7 +1042 2.1.2:4.3.1:1.1.1:3.4.13:2.1.3:5.4.99:4.1.1 +1043 2.7.1:1.5.1:3.1.2:4.1.1 +1044 1.2.1:4.2.1:2.4.1:2.3.1:3.5.1:1.8.1:2.7.1 +1045 1.5.99:4.1.2:1.1.1 +1046 4.3.1:2.5.1:5.4.2:3.5.1:1.4.99 +1047 1.2.1:4.2.1:2.3.1:2.1.1:2.4.2:2.3.1:2.7.1 +1048 4.1.1:2.3.1:2.7.1:2.5.1 +1049 6.4.1:5.3.1:3.5.1:1.1.1 +1050 3.6.1:1.4.1:1.1.1:6.3.2:2.6.1:3.2.1:3.2.1 +1051 1.4.1:2.7.6:6.3.1:5.4.2:1.2.4 +1052 2.7.1:1.2.1:3.6.1:6.3.4:4.4.1:4.1.1:2.7.2 +1053 6.3.4:3.5.3:5.4.99:1.5.1:2.3.1 +1054 3.5.1:1.5.99:6.1.1:2.7.2:2.7.7 +1055 5.4.2:4.4.1:5.4.2:6.3.4 +1056 4.1.3:6.3.3 +1057 2.5.1:2.7.1:1.4.1:1.5.1:2.7.2:1.4.1:3.5.1:1.1.1:6.3.4:2.4.2 +1058 4.3.1:5.3.1:2.3.1:4.3.1:3.4.13:2.3.1:1.3.99:1.13.11:5.4.99:4.1.1:1.1.1 +1059 2.3.1:1.4.3:2.8.1:2.5.1:2.7.2:3.2.1:1.5.1 +1060 4.1.1:1.5.1:2.7.2:5.4.2 +1061 2.3.1:2.7.1:2.8.1:3.5.1:2.3.1:1.3.3:2.7.7 +1062 2.5.1:1.17.1:4.4.1 +1063 1.5.99:2.6.1:2.4.2:4.1.3:4.1.1:2.7.2:2.4.2:2.6.1:2.3.1:4.1.1:2.5.1 +1064 4.2.3:2.5.1:6.3.4:3.1.3 +1065 2.7.1:3.6.1:2.1.2:3.5.1 +1066 1.3.3:3.5.1:2.4.2:2.-.-:3.1.4 +1067 4.1.2:4.3.2:1.1.1:1.2.1:5.4.99 +1068 2.5.1:3.5.1:1.3.99 +1069 3.1.3:1.5.1:5.3.1:2.4.2:2.3.3 +1070 6.3.4:2.1.3:1.1.1:1.1.1 +1071 2.7.2:1.1.1:3.1.3:2.1.3 +1072 2.1.3:2.7.7:4.1.1 +1073 2.3.1:4.3.2:2.3.1:2.7.4 +1074 3.6.1:3.2.1:1.13.11 +1075 4.1.1:4.4.1:4.3.2:4.1.1:2.6.1:4.3.1:5.4.1 +1076 4.2.1:2.4.2:1.2.4 +1077 2.6.1:5.4.2:2.7.6:2.7.1 +1078 4.2.-:2.1.2:2.7.9:6.3.3:3.6.1:2.1.1 +1079 1.4.1:2.6.1:3.1.3:6.3.1:2.7.6:2.7.1 +1080 4.2.3:1.1.1:6.4.1:1.11.1 +1081 6.3.3:1.2.1:2.4.2:2.7.4 +1082 6.3.3:4.4.1:4.3.1:2.7.4:1.2.4 +1083 2.7.1:2.3.1:2.6.1:5.4.3:2.7.1 +1084 1.1.5:1.1.1:3.5.1:3.5.4 +1085 1.2.1:2.3.1:4.1.2 +1086 4.1.2:3.6.1:4.1.2:1.5.1:1.2.4:1.13.12 +1087 2.4.2:4.2.1:2.4.2:2.4.2 +1088 4.1.2:1.1.1:1.14.16:1.4.4 +1089 3.1.3:5.3.1:1.2.1 +1090 4.1.1:3.2.1:2.6.1 +1091 2.7.4:4.3.2:4.1.3:3.1.3:2.7.2:6.3.3:5.3.1:5.4.2 +1092 1.4.1:2.2.1:5.3.1:2.5.1 +1093 2.5.1:2.4.2:4.1.1:1.4.1 +1094 5.3.1:3.1.3 +1095 1.4.3:3.5.1:9.9.9:1.5.1:2.1.3:4.1.2 +1096 2.7.6:3.1.4:2.7.2:2.7.2:2.5.1:2.7.4:2.6.1:6.3.5 +1097 4.2.3:2.1.1:6.3.4:2.5.1 +1098 3.6.1:1.2.4:1.3.99:2.7.7 +1099 2.3.1:4.2.1:4.4.1:5.4.2:5.3.1 +1100 4.3.2:5.4.99:2.7.7:6.3.4:1.18.6:3.1.3 +1101 1.2.4:4.2.1:1.13.11:2.3.1 +1102 2.5.1:2.7.7:4.3.1:2.7.2:6.3.4:2.7.7:4.1.2:6.3.3 +1103 2.1.1:4.3.2:2.6.1 +1104 1.3.3:2.4.2:2.3.1:4.3.2:6.3.1:6.3.1:2.6.1 +1105 6.3.5:5.3.1:1.2.1:3.5.3 +1106 1.14.12:2.7.1:2.7.4:4.3.1:2.7.4:2.3.1:2.3.1:6.3.4:3.1.5:2.7.1 +1107 4.1.3:1.2.1:3.5.1:2.4.2:3.5.3:2.6.1:5.3.1:2.6.1:2.1.2:1.2.1:4.4.1:1.1.1:1.7.99:3.1.1 +1108 2.7.1:4.1.3:1.1.1:2.5.1:2.1.1:1.2.1:1.2.1:2.3.1 +1109 1.1.1:4.2.1:2.7.1:4.2.1:4.2.1 +1110 1.4.1:1.1.1:4.3.2 +1111 2.3.3:4.1.1:2.5.1 +1112 3.5.1:4.2.1:6.3.4:4.1.1:6.3.4 +1113 2.2.1:4.1.1:6.3.4 +1114 2.1.1:4.3.2:2.7.7 +1115 2.3.1:4.1.1:1.2.1:2.7.2 +1116 2.5.1:3.5.3:2.1.3:3.5.1:3.5.1 +1117 1.5.1:3.1.3:5.4.2:2.5.1 +1118 3.1.3:2.7.7:3.1.3:4.3.2:3.5.2 +1119 4.1.1:6.3.4:2.7.4:1.4.1:1.1.2:4.1.3:2.6.1:2.7.7:1.18.-:2.3.1 +1120 2.3.3:2.6.1:2.6.1 +1121 3.5.1:2.6.1 +1122 2.4.2:1.2.1:2.7.8:3.6.1:2.3.1:2.7.1 +1123 1.7.2:2.3.1:2.3.1 +1124 2.7.1:2.7.1:3.5.1:1.4.1 +1125 1.7.2:2.7.4:2.3.1:2.7.4:2.1.2 +1126 4.1.2:4.3.2:3.5.1:5.4.99:2.7.1:5.3.1:1.1.1:6.3.2:2.5.1:1.4.1:2.7.1:2.7.4:3.1.3 +1127 2.7.1:1.2.1:2.5.1:6.2.1:4.2.1 +1128 6.3.1:3.5.2:1.2.7:2.7.4 +1129 3.5.3:1.8.1:3.1.3:5.3.1 +1130 2.7.1:2.3.1:4.3.1:2.1.1:2.1.1:2.7.4:1.4.4:5.4.99 +1131 4.3.1:1.2.4:3.5.3:2.5.1 +1132 3.5.1:1.2.4:2.7.1 +1133 3.5.3:4.1.1:1.13.11 +1134 1.2.1:4.1.1:4.2.1:2.6.1:4.1.1:6.3.2 +1135 4.1.1:2.1.1:2.7.2:1.1.1 +1136 2.6.1:4.1.2:2.7.4:2.7.1:4.1.3 +1137 2.7.9:1.2.1:2.5.1:3.4.11:3.1.2:3.5.1:4.1.1:2.4.2 +1138 2.7.1:2.3.1:2.5.1:3.6.1:3.6.1:6.3.2:4.1.3:3.5.3 +1139 6.4.1:5.3.1:3.6.1:2.1.1:2.7.1:1.7.99:3.5.3:3.2.1:4.3.2 +1140 3.1.3:4.3.1 +1141 3.1.3:5.4.99 +1142 6.4.1:2.5.1:2.6.1:3.6.1:4.2.1:2.7.1:6.2.1:3.5.1 +1143 2.3.1:2.3.1:6.3.1:2.7.2:2.7.1:2.7.1:2.7.1:2.7.1:5.4.99:6.3.4:1.-.-:2.7.1:3.5.1:1.5.99 +1144 3.5.3:3.5.1:5.3.1:2.6.1:2.6.1:1.4.1:2.7.1:2.1.3 +1145 2.1.3:5.1.2:3.5.1:1.2.1:4.2.1:2.3.3:6.3.2 +1146 3.5.2:1.17.4:1.1.1:9.9.9:2.3.1:1.4.1 +1147 6.3.4:4.2.1:2.7.2:2.7.8:4.2.1:3.1.3 +1148 1.5.1:2.7.1:2.7.7:2.7.1:2.7.7:1.1.1:2.6.1 +1149 2.7.2:2.6.1:2.5.1:1.1.1:4.1.1:3.5.1:4.3.2 +1150 4.3.1:1.1.1:1.1.1 +1151 2.6.1:4.3.1:3.5.1 +1152 1.1.1:3.5.4:1.2.4 +1153 1.2.1:2.6.1:2.7.6:2.3.1:2.3.1 +1154 2.1.1:1.8.1:4.2.1:4.3.2:2.1.1:2.1.1:2.7.1 +1155 2.7.7:1.17.4:6.3.5 +1156 3.5.1:2.3.1:2.3.1:2.8.1 +1157 4.3.1:1.8.1:1.2.1:1.1.1:1.2.1:2.3.3 +1158 2.4.2:1.2.1:1.1.5:2.7.7 +1159 4.1.1:1.5.1:3.5.4 +1160 3.6.1:4.1.1:4.2.3:2.7.1:1.1.1:5.4.1 +1161 4.2.1:2.7.1:2.3.1 +1162 6.3.5:2.4.2:2.7.2 +1163 2.5.1:5.4.99:4.2.3:1.5.1 +1164 2.3.1:3.5.1:2.7.8:3.2.2:2.3.3 +1165 1.14.16:2.3.1:2.7.2:2.1.2:2.7.4 +1166 2.1.1:2.7.1:2.1.1:4.2.3:6.3.2:2.1.1 +1167 1.1.1:6.3.4:3.5.1 +1168 1.1.1:3.1.1:4.2.1:4.2.1:2.6.1:9.9.9 +1169 2.7.8:5.4.2:3.5.3:2.6.1 +1170 2.1.2:2.1.3:5.1.3:2.7.7:4.2.3:2.3.1 +1171 3.2.2:4.1.1:2.4.2:3.2.1 +1172 3.1.3:3.1.3:4.2.3:6.3.3 +1173 6.2.1:3.4.13 +1174 4.1.1:1.1.2:2.3.1:4.3.2:3.6.1:2.7.7 +1175 1.5.1:4.3.2 +1176 1.2.5:1.8.1:2.7.2:3.1.2:3.2.1:1.5.1:1.2.4:2.6.1 +1177 2.4.2:3.5.1:1.14.16:2.7.4:2.3.1:3.1.1:2.1.1:6.3.3 +1178 1.1.1:2.3.1:6.3.5:4.1.2 +1179 6.3.4:2.6.1:6.3.5 +1180 1.5.1:2.7.1:5.4.2:2.3.1:4.1.2:2.6.1:1.1.1:2.6.1:2.7.1 +1181 2.1.1:4.3.2:2.1.3:1.2.1:3.6.1:4.4.1 +1182 5.4.2:1.3.99:2.6.1:2.1.4:1.4.1:4.1.2:4.3.2:2.4.2:4.1.1 +1183 1.2.1:2.7.4:2.7.2:1.1.1:2.3.1 +1184 2.5.1:4.2.1:3.5.1:1.5.1 +1185 2.5.1:4.2.1:4.3.2 +1186 2.5.1:2.7.2:4.2.3:1.1.1:2.3.1:2.7.6:2.4.2 +1187 3.2.2:2.6.1:2.3.3:4.1.1:2.7.2:6.3.2:5.3.1:1.1.1:1.2.4:4.2.1 +1188 1.2.1:2.3.1:1.5.1:1.4.1:2.7.7:2.5.1:4.1.1:2.3.1 +1189 2.3.1:5.1.3:4.3.2:4.1.1 +1190 2.7.4:4.3.2:5.4.99:1.2.1 +1191 2.7.2:2.5.1:4.3.1:3.5.1:1.2.1:2.3.1 +1192 2.7.6:3.6.1:4.3.2:1.1.1 +1193 5.4.2:2.7.1:3.6.1:1.2.1 +1194 1.4.1:5.4.2:1.2.1:2.4.2 +1195 1.5.1:2.3.1:4.2.3:1.1.1 +1196 3.1.7:2.7.1:2.7.7:2.3.1 +1197 1.1.5:1.4.1:6.3.2:2.6.1:3.5.1:4.99.1 +1198 2.4.2:4.1.1:2.4.1:1.8.1:3.4.13 +1199 1.1.1:2.7.7:2.5.1:3.6.1:5.1.3:1.2.1:2.4.2 +1200 4.2.3:6.3.4:2.7.7 +1201 1.4.1:2.7.2:1.7.2:3.5.1 +1202 4.1.1:4.2.3:2.5.1:5.3.1:2.5.1:3.5.1 +1203 3.5.1:2.7.2:5.1.1:3.5.1:6.3.3 +1204 3.5.1:3.1.2:5.4.2:2.4.2:2.5.1 +1205 2.7.2:2.2.1:2.7.1:2.4.2:2.7.7 +1206 3.6.1:1.13.11:2.7.1:4.1.1:2.6.1:4.3.1 +1207 1.5.1:3.5.1:1.2.1 +1208 2.5.1:2.3.1 +1209 6.3.2:4.1.1:2.4.2:2.7.1:1.4.1:4.2.1 +1210 2.7.1:1.2.1:5.4.2 +1211 5.4.99:2.4.2:1.1.1 +1212 1.2.1:6.2.1:1.1.1:1.5.1:3.5.2 +1213 1.1.3:2.5.1:4.4.1:2.3.1:4.1.1:4.4.1:2.1.3 +1214 3.5.3:2.7.1:5.1.3:2.7.4 +1215 5.4.2:1.2.1 +1216 5.1.3:2.7.2:3.1.2 +1217 3.1.1:4.1.1:5.4.99:5.4.99:2.5.1:2.7.1:2.7.2 +1218 1.1.1:1.1.1:2.1.1 +1219 2.4.2:2.4.2:2.5.1:2.7.1:2.3.1:3.1.1:2.7.1:1.1.1 +1220 6.3.4:2.4.2:4.2.1:5.1.3:4.2.3 +1221 2.3.1:3.5.3:1.-.-:5.4.99:3.6.1:2.6.1:6.3.4 +1222 2.7.1:4.3.1:2.7.6 +1223 2.1.2:3.3.1:3.1.1:6.3.5:2.3.1 +1224 2.7.2:2.5.1:2.4.2:5.3.1:2.6.1:6.1.1:2.4.2 +1225 2.7.4:6.3.2 +1226 1.7.99:6.3.4:2.1.1:2.7.1:3.4.13:3.1.3 +1227 2.4.2:2.3.3:2.5.1:1.2.1:4.2.- +1228 5.1.3:2.7.2:4.3.1:2.4.2:1.-.-:3.5.1:5.3.1:5.3.1 +1229 2.3.3:2.7.2:2.7.7:2.7.7 +1230 2.5.1:2.7.4:4.3.1:5.1.3:5.3.1 +1231 2.4.1:2.3.1:2.6.1:3.2.1 +1232 2.7.4:3.6.1:5.1.3:3.1.1 +1233 1.5.1:2.5.1:1.2.1:2.3.3:2.1.1 +1234 2.3.1:1.1.1:2.7.1:9.9.9:1.5.1:1.2.1 +1235 1.1.1:3.5.3:1.4.1:6.3.4 +1236 2.7.7:5.4.2:2.8.1:3.5.3 +1237 1.5.1:4.2.3:1.2.1:2.7.7:3.5.1:3.5.1:2.1.2:3.4.13 +1238 4.2.1:2.7.4:6.3.4:4.3.2:2.7.1 +1239 2.1.1:4.3.2:3.4.13:2.1.2:3.5.2:2.7.1:6.3.5:3.4.11 +1240 2.7.2:2.7.1:2.1.1 +1241 1.5.1:2.1.1:2.7.2:2.7.7:2.7.1:1.2.1 +1242 1.2.1:5.4.2:4.2.1 +1243 2.5.1:4.3.1:4.2.1:1.13.11:3.5.1:3.6.1 +1244 4.1.2:2.7.7:2.1.1:5.3.1:4.1.1 +1245 2.3.1:5.4.99:2.3.1:4.1.1:6.3.5 +1246 2.6.1:3.1.4:5.4.99 +1247 6.3.4:6.4.1:2.7.2 +1248 2.3.1:2.6.1:2.3.1:3.5.1:2.7.6 +1249 4.1.2:4.1.1:1.5.1:3.1.3:2.4.2 +1250 1.17.1:2.7.7:5.3.1 +1251 1.3.3:2.7.1:3.2.1 +1252 4.3.2:4.2.1:2.1.1:2.7.2 +1253 3.5.1:3.5.4 +1254 2.7.1:2.7.1:2.3.1:2.5.1 +1255 1.1.1:4.2.1:6.3.2 +1256 2.7.1:1.2.1:2.7.4 +1257 2.5.1:6.4.1:3.5.1:3.1.1 +1258 2.3.1:2.3.1:2.7.1:4.4.1:3.4.13 +1259 3.1.3:1.2.1:1.2.1 +1260 4.3.2:4.3.1:6.3.4:1.1.1:2.1.3:2.5.1 +1261 3.2.1:5.3.1:2.5.1:6.3.4:2.3.1:4.1.1:1.4.3:1.7.1:6.3.2 +1262 5.4.99:4.1.1:2.6.1:6.3.5:3.1.3:1.3.3:2.6.1:3.1.1:2.2.1:2.6.1:1.3.1:2.7.1 +1263 2.4.2:1.1.1:4.4.1:2.7.4:2.3.1 +1264 5.3.1:4.2.1:2.7.7:3.5.1 +1265 2.7.8:2.5.1 +1266 4.1.2:2.6.1:1.2.1 +1267 6.3.4:3.1.3:5.3.1:4.3.2:1.2.1:3.5.1:6.2.1:3.5.1:2.2.1:6.3.3:2.4.2:3.1.3 +1268 4.3.2:2.1.1:4.3.2:2.4.2:3.1.1 +1269 2.7.1:5.5.1:4.1.1 +1270 4.3.1:6.3.4:2.7.1:2.5.1:5.3.1:2.6.1 +1271 4.1.3:2.3.1:1.-.-:6.3.5:2.5.1:4.1.1:6.3.4 +1272 2.4.2:1.5.1:1.1.1 +1273 2.1.2:2.4.2:1.4.3:5.3.1:5.3.1:6.2.1:1.17.1 +1274 2.3.1:1.2.4:2.2.1:5.4.2:1.1.1 +1275 2.5.1:2.7.1:3.1.3:3.4.13:4.1.2:4.3.1 +1276 6.3.4:6.3.3:4.2.1 +1277 2.3.1:2.1.3:4.2.1 +1278 6.3.1:2.1.3:2.7.9:2.7.4:1.5.1 +1279 2.7.1:2.4.2:2.7.7:1.3.1:6.3.3 +1280 4.4.1:6.3.4 +1281 3.6.1:1.1.1:5.4.2:6.3.5:2.3.3:1.5.1:2.7.2 +1282 5.3.1:6.3.3:3.2.1:4.1.1:5.1.3:2.6.1:2.3.1:2.7.7 +1283 2.3.1:4.1.2:4.1.2 +1284 1.5.99:2.7.2:2.7.2:5.3.1:2.7.2 +1285 2.7.1:3.5.1:4.3.1 +1286 4.2.3:1.4.1:6.3.1:4.2.3 +1287 3.5.3:2.7.1:2.7.1:5.4.99:2.1.1:4.2.1 +1288 5.3.1:2.7.1:2.7.7:1.4.1 +1289 1.1.1:3.2.1:2.5.1 +1290 2.7.2:3.5.1:3.5.1:1.1.1:4.4.1:3.5.2:6.3.4 +1291 2.1.3:2.7.6:2.6.1:2.7.8:2.4.2:2.3.1:2.7.1:1.1.1:2.4.2:3.1.1:1.8.1:4.2.3:2.7.1:3.6.1 +1292 2.7.4:5.3.1:2.1.1:2.7.2:1.5.99:3.1.1 +1293 1.5.99:2.7.1:1.2.1:5.1.3:1.5.1:2.7.2 +1294 2.5.1:4.4.1:1.4.1:6.3.1:1.1.1 +1295 4.2.3:2.7.6:1.4.4:3.4.13:1.1.1:3.5.3:3.1.3:1.1.1:2.3.1 +1296 2.4.2:2.6.1:2.5.1:2.4.2 +1297 1.1.1:1.2.1:2.6.1:2.6.1 +1298 1.4.3:2.7.1:2.7.1 +1299 2.7.1:1.4.1:2.6.1:4.3.1:5.3.1 +1300 3.1.2:3.4.13:1.1.1:4.2.1:2.4.2:3.5.1:2.3.1:5.4.2 +1301 4.2.3:4.1.3:2.7.1:2.1.4:5.4.2:5.3.1:6.3.1:1.14.13 +1302 4.1.2:2.7.4:6.3.4:2.7.2:4.1.2:2.6.1 +1303 2.1.2:6.3.4:1.13.12:1.3.1:3.5.3:2.6.1:4.99.1:2.1.2:1.1.1 +1304 5.1.3:3.5.1 +1305 2.3.1:4.2.1:2.5.1:2.6.1 +1306 2.7.1:9.9.9:2.7.7:1.2.1:6.3.4 +1307 2.7.1:1.2.1:6.3.4:2.7.1:6.3.2 +1308 1.1.1:1.1.1:2.3.1:4.3.1 +1309 4.1.1:3.1.3:5.4.2:2.3.1 +1310 4.3.2:9.9.9:2.3.1:2.3.1 +1311 4.1.1:6.3.1:1.1.1:2.7.1:2.1.3:4.2.1:4.2.3 +1312 1.1.1:1.2.1:5.4.3:2.1.1:1.2.4 +1313 4.2.3:2.5.1 +1314 2.7.7:2.6.1:1.1.1 +1315 1.3.99:2.6.1:4.2.1:3.1.3:3.5.4:2.6.1:2.7.2:5.4.99 +1316 1.1.1:2.8.3:3.5.4:4.1.1:4.1.3:1.5.99:2.7.4:3.5.1:6.3.4:1.3.3:6.3.5:1.1.3 +1317 4.3.2:2.5.1:5.3.1:1.5.1:3.1.4:2.1.2:4.3.1:2.7.1 +1318 1.8.4:1.2.1:5.4.1:4.2.1:3.1.3 +1319 2.1.1:5.4.99:6.3.4:5.4.99:6.3.2:2.3.1:1.5.3 +1320 2.5.1:2.3.1:4.3.2:2.3.1:2.5.1:6.3.4 +1321 3.6.1:4.1.2:2.2.1:1.1.1:2.3.1:2.5.1:4.1.1:2.3.3:3.5.1:3.5.4 +1322 2.4.2:4.2.1:4.1.2:2.7.2:3.5.3:2.3.1 +1323 6.3.4:6.3.5:2.5.1:2.7.8 +1324 2.7.9:4.1.1:2.7.1:4.1.2:4.2.1:2.7.9:2.2.1:4.1.2 +1325 2.3.1:1.1.2:1.14.15:4.2.1 +1326 6.3.5:1.2.1:3.5.3 +1327 1.1.5:6.3.5:2.2.1:2.4.2:1.14.16:5.3.1 +1328 2.7.4:5.4.2:2.7.4:2.3.1 +1329 3.1.2:2.7.1:2.8.1 +1330 2.4.1:4.4.1:3.5.1:3.2.1:2.7.1:1.14.- +1331 5.3.1:4.2.1:2.1.2:2.3.1:2.7.1:4.2.1:2.4.1:4.1.99 +1332 3.5.1:2.1.3:3.5.5 +1333 4.1.2:1.4.1:6.3.2:5.3.1:1.1.1 +1334 4.4.1:2.3.3 +1335 2.7.1:1.1.1:4.2.1:2.3.1:3.1.4:2.5.1 +1336 3.4.13:6.3.4:2.5.1:5.1.3 +1337 1.8.1:9.9.9:3.6.1:6.3.1:1.4.1:4.2.3:3.5.1:2.7.1 +1338 4.2.1:4.3.2:2.5.1:2.5.1:2.3.1 +1339 6.4.1:4.1.1:6.3.2:2.3.3 +1340 1.3.99:2.4.2:1.2.1:6.3.2:4.3.1:1.2.1 +1341 2.7.4:2.1.3:6.3.4:2.5.1:2.5.1:2.7.9:6.1.1 +1342 6.4.1:1.2.1:2.6.1:2.7.1:2.5.1 +1343 1.3.3:2.4.2:4.1.1:1.2.1:9.9.9:5.4.2 +1344 4.1.1:6.3.4:2.5.1:2.4.2:2.7.2 +1345 1.7.1:4.3.1:2.4.2:2.7.4 +1346 6.3.2:3.1.3:3.5.1 +1347 2.7.1:3.5.4:1.11.1:2.3.1:6.3.4 +1348 4.3.1:5.4.99:6.3.2:2.3.1 +1349 2.6.1:3.6.1:2.5.1:2.7.8:6.3.1:2.2.1 +1350 2.1.2:3.5.1:6.3.3:2.4.2:1.3.1 +1351 5.3.1:1.1.1 +1352 3.5.2:2.5.1:2.1.2:2.6.1 +1353 2.1.2:1.2.1:2.7.1 +1354 2.7.1:2.7.1:2.7.2:2.6.1:2.4.1:2.7.1:3.1.3:5.3.1:2.4.2 +1355 2.3.1:6.3.5:1.3.99:1.13.11:2.7.1:3.5.3:2.6.1:4.1.1:3.1.3:6.3.3:1.5.1 +1356 1.18.6:2.6.1:1.5.99:2.1.3 +1357 2.7.8:2.3.1:4.1.3:1.5.1:3.5.1:1.4.1:2.7.2:3.5.1:2.1.1:2.5.1:2.5.1:6.3.5:6.3.2 +1358 3.1.3:4.3.2:1.5.1 +1359 2.1.2:3.5.1:4.4.1 +1360 1.7.2:3.1.1:3.5.3 +1361 3.5.1:2.3.1:6.2.1:6.3.2:2.7.4 +1362 2.1.3:2.7.6:2.3.1 +1363 2.7.1:2.6.1:2.6.1 +1364 2.7.1:4.1.1 +1365 3.1.7:2.1.1:1.2.1:2.3.1:6.2.1:5.4.2:2.1.3:6.3.1:3.1.2:2.5.1 +1366 6.3.2:5.3.1:6.3.4:1.1.1 +1367 4.3.1:4.1.2:3.2.1:4.3.1:4.2.1:2.6.1:1.8.1:6.3.4:2.5.1:2.3.1:2.5.1 +1368 3.1.3:5.4.99:1.2.1:3.5.1:6.2.1:4.2.1:4.1.1:4.3.2:4.3.1 +1369 2.3.1:5.4.2:5.3.1:4.3.2:6.3.3:1.3.99:2.3.1:1.8.1:1.2.1:3.5.4 +1370 4.3.2:2.7.4:4.2.1:3.5.1:2.7.7:2.3.1:2.3.1 +1371 3.2.1:2.6.1:2.6.1:2.7.2:3.2.1 +1372 1.2.1:3.1.3:3.5.1:1.3.3 +1373 4.3.2:2.7.1:4.3.1:4.4.1:3.6.1:4.3.2:4.3.2 +1374 4.2.1:2.6.1:2.1.2:2.7.2:3.5.1 +1375 4.4.1:1.17.1:1.2.1:6.3.4 +1376 4.2.1:2.7.4:2.6.1:1.2.4:1.5.1 +1377 5.3.1:6.2.1:2.3.1:1.2.1:4.4.1:2.7.2 +1378 6.3.5:2.4.2:2.1.2:3.5.3:1.2.1:6.3.3:2.6.1:5.1.1 +1379 2.3.1:6.3.1:3.5.3:4.3.2:4.1.1:1.18.6:2.1.3 +1380 2.1.1:4.1.2:4.3.1 +1381 5.1.3:5.1.1:2.3.1:2.3.1:5.3.1 +1382 2.4.1:4.1.1:2.7.8:2.7.1:1.2.1:1.5.1 +1383 2.6.1:2.3.1:2.1.2:2.7.4:2.7.2:1.4.1 +1384 2.1.3:4.4.1:6.3.4:1.3.1:1.2.1:5.3.1:2.6.1:6.3.4 +1385 2.1.2:4.2.1:6.2.1 +1386 6.3.5:1.2.1:3.5.3 +1387 1.4.1:2.1.3:2.5.1 +1388 3.5.3:2.8.3:2.3.1:2.1.2 +1389 6.2.1:2.7.1:3.1.4:1.1.1 +1390 2.4.1:2.3.1:2.7.2:4.1.1:3.2.1:3.1.3:2.7.1:2.7.1:4.2.1:2.7.1:1.5.1:4.1.3:5.1.2:2.7.7 +1391 2.1.2:6.3.4:1.1.1 +1392 2.7.2:2.6.1:3.6.1:2.4.2:2.5.1:2.3.1 +1393 5.3.1:4.1.1:4.2.3 +1394 2.6.1:3.5.99:4.99.1:4.1.2:1.1.1:3.1.2:2.7.2 +1395 1.2.1:1.1.1:3.7.1:6.4.1:2.5.1 +1396 3.1.4:2.3.2:2.3.1:4.3.2:4.1.1:2.7.7 +1397 2.1.2:3.5.4:3.4.13:5.4.2:2.7.8 +1398 4.4.1:2.1.2:2.4.2:1.1.1:4.1.2 +1399 1.1.2:3.1.1:6.3.2 +1400 2.3.1:4.4.1 +1401 2.7.1:3.5.3:2.7.1 +1402 5.3.1:2.3.1:5.4.2:1.5.1 +1403 2.3.1:2.3.1:1.2.1:1.3.1:2.6.1:5.4.2:3.5.1 +1404 1.5.1:3.1.2:5.4.2:2.3.1:2.1.2:1.5.1 +1405 2.5.1:3.5.1:2.5.1:5.4.99:2.6.1 +1406 2.4.2:9.9.9:1.2.4:4.3.2:4.3.1:3.1.1:4.1.1:4.4.1:4.3.1:2.7.1:2.7.7 +1407 2.3.3:5.4.99:2.7.1 +1408 4.2.3:2.7.1:4.2.1:1.2.1 +1409 2.3.1:1.4.1:2.4.2:2.6.1 +1410 1.4.3:5.4.99:3.1.2:4.3.2:1.13.11:1.4.1 +1411 2.7.2:2.3.1:2.7.2:2.6.1:2.1.1:2.7.1:2.1.4:6.3.4:2.3.1:4.1.3:5.1.3:4.1.1:4.1.1 +1412 9.9.9:2.6.1:2.7.1:1.2.1:2.3.1 +1413 4.2.1:2.3.1:1.1.1 +1414 6.3.4:1.2.1:3.5.1:3.1.3:3.1.4:2.7.7 +1415 3.2.1:2.7.1:3.5.1 +1416 2.7.1:2.4.2:6.3.4 +1417 1.13.11:2.5.1:4.2.1:6.1.1:2.7.1 +1418 3.6.1:1.1.1:2.7.4:1.2.4:4.3.2:1.5.99 +1419 6.3.4:2.7.7:2.7.4:2.3.3:2.7.2:3.6.1:2.3.1:2.3.3:4.1.1:2.7.2 +1420 2.7.2:2.7.1:3.2.2:3.6.1:2.1.4:2.7.7:2.7.1 +1421 1.2.4:2.1.1:3.5.1:2.7.1:2.3.1:2.7.1:3.5.3:1.5.99:2.5.1 +1422 2.6.1:2.7.1:1.2.1:4.1.1:6.3.5 +1423 2.6.1:1.2.1:2.7.2:1.1.1:4.2.1:2.1.3:2.1.2:2.5.1:2.6.1:2.4.2 +1424 2.1.2:2.3.1:1.1.1:1.17.1:2.4.2 +1425 3.1.3:1.8.1:4.1.3:4.3.2:6.3.5:1.2.1:5.1.3 +1426 2.4.1:4.1.3:3.1.3 +1427 2.7.1:1.1.1:1.3.99:2.1.1:1.5.1 +1428 1.1.1:4.2.1:5.4.4:6.3.1:4.1.1:3.5.1:6.3.4 +1429 6.3.5:2.7.2:1.2.1:6.3.4:2.7.1:2.3.1:1.2.1 +1430 6.3.2:2.7.1:6.3.3:4.3.1 +1431 1.2.1:1.2.4:1.1.1:2.1.1:2.7.1 +1432 1.1.1:2.7.1:2.4.2:6.3.3:2.4.2:4.3.2 +1433 3.4.13:4.3.2:2.3.1:2.4.2:3.5.1 +1434 2.7.7:4.1.1:1.5.1:2.7.7 +1435 5.3.1:3.5.4:2.3.1:2.1.3:1.2.4 +1436 2.7.7:1.2.1:1.1.1 +1437 6.2.1:1.1.1:2.3.1:3.5.1:1.5.1:3.4.11:2.7.1:1.1.1:2.7.2:1.3.99:2.4.2:1.5.1 +1438 1.1.1:2.3.1:2.7.1:2.1.2 +1439 5.4.2:3.2.1 +1440 5.4.2:4.3.2:2.6.1:4.3.1:1.1.1 +1441 1.1.1:1.5.1:6.3.2:1.2.1:3.1.3:4.2.2 +1442 3.6.1:2.3.1:3.1.3:4.1.3:3.1.2 +1443 6.3.2:5.3.1:2.5.1:2.5.1:2.7.7:2.7.2:6.3.4:2.1.1:2.1.3:2.1.1:2.7.2 +1444 1.4.3:6.3.5:4.4.1:1.1.1:2.7.1:2.7.1:2.2.1:6.3.4 +1445 4.1.3:1.2.1 +1446 4.4.1:1.3.99:5.3.1:2.1.2:5.1.3:3.5.2:3.1.3:3.5.4:2.3.1 +1447 4.4.1:2.6.1:2.7.1 +1448 4.3.1:2.1.1:4.4.1:6.3.2:6.3.2:2.1.1:4.2.1:4.6.1:1.1.1:3.6.1:2.6.1 +1449 4.1.1:2.7.4:5.3.1:5.4.3 +1450 1.4.1:6.2.1:5.4.99:4.1.1 +1451 4.4.1:3.5.1:2.6.1:2.6.1 +1452 3.5.1:6.3.5:9.9.9:2.1.1:3.6.1:2.4.1 +1453 1.7.2:4.1.2:3.6.1:2.6.1 +1454 1.1.1:2.7.7:6.3.4 +1455 5.3.1:2.5.1:5.4.2:2.5.1 +1456 3.5.1:3.4.11:1.1.1:3.1.3:5.4.2:1.3.3:1.3.99 +1457 4.1.1:1.2.1:1.1.1:3.4.13:2.3.1:2.7.2:4.1.1:3.1.1 +1458 5.4.99:4.1.1:3.5.4:3.1.4:2.6.1:4.1.1:1.8.1:5.3.1:3.5.3:4.1.1 +1459 4.3.1:3.2.2:5.3.1 +1460 4.1.1:2.4.2:6.3.1:6.3.4 +1461 3.1.3:4.1.2:1.1.1:3.5.3:2.1.1:2.1.4:1.2.1:1.4.1:1.8.1:1.5.1 +1462 1.1.1:6.2.1 +1463 1.1.1:4.4.1:2.6.1 +1464 3.1.3:4.1.1:4.2.1 +1465 2.4.1:2.6.1:4.3.2:2.5.1:2.1.3 +1466 1.1.1:4.3.1:6.4.1:6.3.2:2.5.1:4.3.2:1.1.1:4.4.1:2.3.1:2.7.4 +1467 2.7.2:2.7.1:4.1.1 +1468 2.5.1:2.6.1:3.4.11 +1469 2.7.8:2.3.1:1.1.1:4.2.1:2.7.7 +1470 2.7.6:6.3.4:3.5.1:1.3.99:4.3.1:4.4.1 +1471 1.1.1:1.1.5:4.1.1:2.7.2:9.9.9:4.1.1:2.7.2:2.3.1:1.4.1:2.3.1:3.1.3:2.7.2 +1472 3.5.99:4.3.1:3.5.4:2.7.2:4.1.1:6.3.4:6.3.1 +1473 2.2.1:1.14.12:2.3.1 +1474 2.7.4:2.3.1:2.3.2:2.3.1:1.2.1:2.7.7:2.3.1:1.5.1:2.7.1:2.4.2:6.4.1:4.2.1:2.4.2 +1475 4.3.1:1.3.99:2.7.8 +1476 2.7.7:1.4.3:2.7.9:4.3.1:2.7.1:2.2.1:6.3.4 +1477 2.7.2:1.4.3:1.1.1 +1478 2.1.1:4.2.3:3.5.3 +1479 2.5.1:2.1.2:1.5.1 +1480 9.9.9:6.3.5:3.5.1:6.3.3 +1481 2.3.3:2.7.2:1.8.1:2.7.7:1.1.1:1.2.4:4.2.1 +1482 3.5.1:5.4.99:4.1.2:2.7.1:2.7.2:4.3.1 +1483 2.7.1:1.2.1:6.3.3:6.3.4:5.1.1 +1484 4.1.1:5.4.2:1.5.1 +1485 1.5.1:4.1.1:6.3.4:2.7.7 +1486 2.7.1:2.5.1:2.7.1:4.3.1:2.1.2:2.5.1:2.4.2:3.5.4 +1487 4.1.2:5.4.1 +1488 3.3.1:4.1.1:2.7.1:2.7.6 +1489 4.3.1:4.1.2:1.1.5:4.2.3:3.5.4:4.3.1:1.1.1:6.3.3:4.2.1 +1490 2.6.1:4.3.2:1.2.4 +1491 4.1.1:2.1.1:4.1.1:2.1.3:2.6.1:2.8.1:2.4.2:2.6.1:4.1.2:3.6.1 +1492 2.3.1:1.1.5:1.5.1:1.7.99:1.4.1:3.1.3:2.7.1:9.9.9 +1493 1.3.99:4.3.2:2.3.1 +1494 3.1.3:1.4.1:1.4.1:4.1.1 +1495 4.1.3:3.5.1:2.7.7:5.4.99:2.7.4:2.1.1:1.1.1:4.1.1:1.4.3:6.3.2:3.5.1:2.3.1:1.1.1:2.1.1 +1496 5.3.1:3.1.3:1.5.99:3.1.1:2.7.1:3.5.3:3.6.1:3.4.13 +1497 2.7.2:1.1.1:1.2.1:6.3.2:4.2.1:1.5.1:2.6.1:6.3.4:2.3.1:1.1.1 +1498 4.4.1:1.14.13:1.4.1:2.3.1:4.3.2 +1499 6.3.4:2.1.2:1.1.1:3.5.1 +1500 6.3.4:2.1.3:4.1.2:2.7.9:2.5.1:2.1.3:1.2.1 +1501 3.5.4:6.3.4:2.7.1:1.5.99:1.1.1:6.3.2 +1502 2.5.1:4.2.1:2.1.1:1.2.7:6.3.1:2.7.2:2.3.1 +1503 6.2.1:4.1.2:6.3.4:2.7.1:2.3.3 +1504 5.4.99:1.4.4:2.7.1:2.3.1:3.4.11:1.2.1:3.4.11:4.3.1:3.5.1:2.4.2:5.4.99:3.5.1:4.2.1 +1505 2.1.1:2.7.8:6.3.2:3.5.3:5.3.1:2.3.1:2.7.1:5.4.2:4.2.1:1.1.1:4.2.1:2.3.1 +1506 1.4.1:3.5.1:5.4.2:3.1.3:9.9.9:6.3.4 +1507 3.5.4:2.1.1 +1508 4.2.3:3.4.11 +1509 1.8.1:2.4.2:1.1.1:4.4.1 +1510 4.3.2:4.3.2:5.3.1:2.1.2:2.7.2:1.7.99:2.5.1:1.1.1:1.1.1:2.4.2:6.3.3 +1511 1.2.1:2.6.1:1.2.1:3.6.1:3.6.1:3.5.1 +1512 3.5.3:3.5.3:2.7.4:6.3.4:3.5.1:5.1.3:3.5.1:6.3.2 +1513 6.3.2:2.3.1:2.5.1:4.2.1:2.3.1:4.4.1:1.2.7:4.2.3:2.7.1 +1514 3.1.3:4.3.2:2.3.1 +1515 2.7.2:1.3.99:4.1.2 +1516 1.5.1:1.2.1:1.1.1:3.2.1:6.3.3:4.3.1:6.3.3:5.3.1:2.1.1 +1517 1.11.1:2.7.7:4.4.1:2.1.2:3.1.2:4.3.1:5.4.2:1.1.1:6.3.2:6.3.4:2.6.1 +1518 3.1.3:2.3.2:1.4.1 +1519 3.4.13:4.2.1:1.1.1:2.7.7:2.3.1 +1520 3.1.3:3.6.1:6.3.1:1.7.2:2.6.1:2.7.7:3.6.1:2.7.6 +1521 3.5.1:1.1.1:4.1.1:5.4.2:1.1.1:2.3.3:2.3.1:4.2.1:1.5.99 +1522 1.14.13:2.5.1:4.1.1:4.3.2:3.6.1:2.3.1 +1523 4.3.1:4.2.1:1.17.4:2.7.2:3.5.1:4.1.1:2.1.1:1.5.1:2.4.2:4.2.1:2.7.4 +1524 2.1.1:4.4.1:2.4.2:5.3.1:4.3.2:2.4.2:2.3.1:5.3.1 +1525 2.6.1:2.5.1 +1526 4.1.1:1.11.1:1.4.3:3.5.3:2.7.7:2.4.2 +1527 1.2.1:4.1.1:5.4.99:2.7.1:2.3.3:2.7.4:4.1.1:4.4.1:1.4.1 +1528 1.5.99:2.1.2:4.3.1:1.8.1:2.7.1:3.5.1:3.1.4:3.2.1:1.1.1:6.3.3:5.4.99:2.3.1:2.1.2 +1529 2.3.1:2.7.4:1.17.4 +1530 4.3.1:3.1.4:2.7.2:1.1.1 +1531 2.5.1:5.4.2:2.6.1:2.4.2:1.2.4:5.1.2 +1532 1.3.3:2.7.7:1.5.99:1.2.1:1.2.4:4.1.3:1.7.3:2.7.4 +1533 4.1.1:1.5.1:5.3.1 +1534 9.9.9:4.3.1:2.7.1:2.1.1 +1535 4.1.1:6.3.4:2.5.1:5.3.1:2.4.1 +1536 1.5.99:5.3.1:2.4.2:6.3.5:2.7.1 +1537 1.2.1:2.7.2:2.7.1:4.2.1 +1538 3.5.1:1.2.4:2.3.1:3.1.5 +1539 1.7.2:1.3.1:2.5.1:4.4.1:2.3.1:2.7.1:1.4.1 +1540 6.3.5:1.1.2:6.3.4:2.7.1 +1541 2.1.2:2.1.3:3.6.1:5.3.1:3.1.2:1.1.1:2.4.2 +1542 5.3.1:2.7.7:3.5.4 +1543 3.1.3:1.1.1:2.7.7 +1544 6.3.4:1.5.1:2.5.1:6.3.2:4.2.1:2.1.2:6.3.2:1.5.1 +1545 6.3.4:2.1.1:1.4.1:5.1.3:3.1.1:1.8.4:2.5.1:2.7.7:2.3.1:2.2.1 +1546 1.1.1:6.4.1:2.1.2:2.1.2:4.4.1:2.5.1:2.1.3:9.9.9 +1547 1.1.3:3.1.3:1.1.1:1.5.1 +1548 1.3.1:5.4.2:3.5.1:2.4.2:2.3.1 +1549 4.2.3:1.3.99:2.4.2:2.1.1:4.2.3 +1550 2.5.1:2.4.2:2.3.1:5.4.3 +1551 1.2.1:1.4.4:2.3.1:4.1.2:4.4.1:3.5.3 +1552 4.1.1:2.7.1:2.7.7:2.1.3:6.2.1:1.2.1:1.2.1 +1553 4.1.2:2.7.1:2.6.1 +1554 2.7.1:1.1.1:5.4.99 +1555 2.7.1:1.13.11:2.6.1:2.6.1 +1556 1.2.1:4.1.1:5.4.99:3.2.2:1.4.3 +1557 6.3.2:9.9.9:4.1.3 +1558 3.1.3:4.3.1:4.1.3:2.1.3:5.4.2 +1559 2.5.1:3.5.1:3.5.1:5.1.3 +1560 2.7.1:2.6.1:1.2.1:1.5.1 +1561 4.2.3:1.4.1:2.3.1:6.3.1 +1562 4.1.2:4.1.1:1.17.4:4.2.1 +1563 4.4.1:2.6.1:4.4.1:2.7.7:2.1.1:3.5.3:4.3.1:2.3.3 +1564 2.8.1:3.5.3:5.4.2:5.3.1:4.3.1:2.3.1 +1565 6.2.1:2.4.1:4.1.2 +1566 1.4.1:4.4.1:2.7.2:6.3.1 +1567 3.1.4:1.1.1:1.4.1:2.1.1:1.2.1 +1568 2.6.1:2.3.1:4.4.1:2.1.1 +1569 2.4.1:6.3.4:1.2.7:2.3.1 +1570 1.1.1:4.1.3:1.1.2 +1571 3.5.1:2.6.1:2.3.1:4.1.2:1.2.1:2.3.1:5.3.1:6.4.1 +1572 3.5.1:2.7.7:2.3.1:3.4.11:5.4.99 +1573 2.4.2:6.3.3:4.2.3:6.3.2:2.3.1:2.4.2:1.1.1 +1574 2.5.1:3.6.1:6.4.1:2.7.7:3.1.3:4.1.1 +1575 2.5.1:4.1.3:3.6.1:1.5.1:3.5.1 +1576 2.7.4:2.4.2:1.17.1:2.7.4:6.3.4 +1577 4.1.3:6.3.4 +1578 2.7.1:4.2.1:4.2.1:3.5.3:4.2.1 +1579 4.2.1:4.1.1:2.7.4:2.3.1:1.2.1:4.1.1:1.2.1 +1580 1.2.1:1.5.1 +1581 3.5.1:5.3.1:2.7.4:2.3.3:5.4.99 +1582 1.3.99:2.2.1:6.2.1:2.3.1:2.4.2 +1583 6.3.1:1.2.1:1.1.1 +1584 4.6.1:1.1.1:5.4.3:5.3.1:2.1.3:2.5.1:3.5.99 +1585 4.2.-:6.3.3:2.7.6:2.4.2:4.4.1:2.7.6:4.1.1 +1586 2.5.1:2.4.2:4.1.2:2.6.1:2.1.2 +1587 2.7.2:2.1.4:3.6.1:4.4.1 +1588 2.7.8:2.3.1:1.8.1:2.3.1 +1589 4.3.2:1.14.11:3.5.2 +1590 2.8.1:2.7.1:2.1.1:5.1.2 +1591 5.5.1:1.1.1 +1592 4.3.1:3.5.3:4.2.1:3.2.1:6.3.5:2.7.7:2.6.1:5.4.2:2.7.6 +1593 2.7.2:5.4.99:4.4.1:6.3.4:2.1.1:4.2.3 +1594 3.7.1:6.3.4:2.7.1:1.1.1:1.5.1:2.6.1:6.3.4:3.5.1:2.7.4:3.1.3 +1595 4.4.1:2.7.1 +1596 3.5.2:1.1.1:2.5.1:2.7.4:4.4.1:2.1.2 +1597 2.1.1:1.2.1 +1598 4.3.2:2.7.4:2.7.8:2.7.1:1.5.1:1.1.1:2.7.1:5.4.99:2.7.7 +1599 2.7.4:2.6.1 +1600 2.4.2:2.6.1:1.5.99 +1601 2.3.3:3.5.1:1.1.1:4.2.3:4.4.1:1.1.1:2.4.2:6.3.4:1.3.1:2.5.1:4.99.1:2.7.1:4.3.1:4.2.1 +1602 4.1.1:6.3.5:4.1.2:1.1.1:4.1.1 +1603 5.3.1:3.1.4:2.6.1:2.2.1:2.1.1:3.5.2 +1604 6.3.2:4.1.1:2.7.1 +1605 2.1.3:1.11.1:1.4.99:6.3.4:1.5.1:2.7.1:2.7.2:2.5.1:4.1.1:6.3.1:4.3.1 +1606 3.5.1:6.3.5:1.2.1:2.-.-:2.7.4:2.4.1:2.3.1:4.4.1:2.3.1:2.6.1 +1607 2.7.6:6.3.3:3.5.3:6.3.4:2.1.2:1.1.1 +1608 2.5.1:1.17.4:2.3.1:1.1.1:2.5.1 +1609 2.1.2:4.4.1:2.4.1:1.5.1:1.5.1 +1610 4.1.1:4.4.1:2.3.1:2.6.1:2.5.1:2.4.2:4.1.1:2.3.1:4.3.2 +1611 2.7.1:4.1.1:6.3.1:4.3.2 +1612 2.1.3:1.97.1:1.5.1:1.2.4:3.5.1 +1613 6.3.4:2.7.1:1.4.1 +1614 4.2.1:4.3.2:4.3.1:4.1.1:2.7.2:6.1.1:2.7.2:6.3.4:2.7.8:6.3.4 +1615 6.3.5:4.1.1:2.4.2:2.5.1:2.1.3:2.7.6 +1616 4.1.2:2.5.1:1.4.1:1.5.1 +1617 4.2.1:3.5.1:5.4.2:1.2.1 +1618 2.7.1:1.2.1:2.4.2 +1619 2.5.1:2.4.2:4.1.1:2.3.1 +1620 1.2.1:2.7.8:2.7.7:4.4.1:2.1.3:1.2.1:1.8.1 +1621 6.3.3:1.5.1:3.5.1:2.4.2:4.2.1:5.4.2:2.7.1:5.1.1:4.3.1:2.4.1 +1622 6.3.5:5.1.2:4.3.2:5.3.1:4.3.1:1.1.1 +1623 2.7.4:4.1.1:2.3.1:2.5.1 +1624 2.5.1:3.6.1:4.1.2:2.7.1:2.7.1:3.3.1:2.3.3:4.99.1:4.2.1 +1625 2.6.1:2.7.2:6.3.5:2.3.1:2.3.1:2.6.1:3.5.2 +1626 3.5.3:3.1.3:4.3.1:2.7.2 +1627 6.3.4:4.1.1:6.3.5:5.1.3 +1628 2.7.2:5.3.1:4.2.1:2.4.2:4.1.1:2.3.1 +1629 2.7.1:6.3.4:6.3.3:1.2.4:2.6.1:1.2.1:2.6.1 +1630 2.7.2:2.1.2:4.4.1:2.3.1:4.1.2:4.3.2 +1631 2.1.1:2.3.1 +1632 6.3.4:4.3.1:2.1.1:2.4.2:2.6.1:4.1.2 +1633 2.3.2:2.7.1:2.3.1:4.2.3:3.5.3:3.1.3:5.4.99 +1634 4.3.1:2.3.1:2.9.1:3.5.1:1.2.4:5.3.1:1.7.99 +1635 3.5.1:1.5.1:2.5.1:2.7.6 +1636 2.6.1:4.2.1:4.2.1 +1637 2.8.1:2.5.1:1.5.1:2.7.2:2.1.4:2.7.1:2.4.2:2.7.2 +1638 2.7.1:1.13.11:4.4.1:1.5.1:2.5.1:1.5.1:2.5.1 +1639 2.3.1:3.5.3 +1640 4.3.1:2.3.3:6.3.1:2.4.2 +1641 1.4.1:4.3.1:2.3.1:1.8.1:2.7.8 +1642 4.2.1:3.5.99:5.3.1:2.7.6:1.1.1 +1643 6.3.5:4.3.1:2.4.2:2.3.1:4.3.1:2.6.1 +1644 2.7.1:4.3.2:6.2.1:3.5.4:5.4.99 +1645 1.3.3:2.3.1:3.4.13:2.7.7:1.5.99:5.2.1:4.3.2:2.1.4 +1646 1.3.99:1.4.1:2.7.2:1.2.4:4.3.2 +1647 3.5.1:3.6.1:2.6.1 +1648 4.2.1:2.3.1:2.1.2:2.7.1:2.3.1:4.3.1:2.7.2:5.3.1 +1649 2.7.1:2.2.1:5.4.99:4.4.1:3.6.1 +1650 2.3.1:2.1.1:5.1.3:4.2.1:4.1.1:1.2.1:3.5.3:6.3.4 +1651 2.6.1:2.7.6:2.7.2 +1652 3.6.1:6.3.2:4.2.1:2.3.1 +1653 1.2.1:6.3.5:2.7.2:2.5.1:2.6.1:4.2.1:2.1.1:2.4.2 +1654 6.3.5:6.2.1 +1655 2.4.2:2.4.1:6.3.4:2.4.2:3.5.4:2.7.4:2.5.1 +1656 2.7.4:2.5.1:4.1.1:2.7.6:2.7.8:6.3.4:2.5.1 +1657 4.3.1:3.1.1:5.4.99:2.7.2:2.7.1:3.2.1 +1658 6.3.1:2.1.4:6.3.5:1.2.1:1.1.1:5.4.99 +1659 3.5.4:2.7.6:5.3.1:2.3.1:2.3.3:6.3.4:2.5.1:3.5.1:4.4.1 +1660 2.7.7:1.1.1:2.4.2:3.6.1:2.7.1:2.4.1:1.4.99 +1661 2.3.1:6.3.4:4.1.2:1.3.1:2.5.1:4.3.1:5.1.1:1.1.5 +1662 1.2.4:2.3.2:3.4.11:4.1.1:2.7.1 +1663 1.1.1:4.3.2 +1664 6.3.2:1.1.1:1.4.1 +1665 4.1.2:3.7.1:6.3.1:3.5.3:5.4.99:2.1.1 +1666 1.1.1:2.7.6:4.3.2:2.5.1:2.3.1 +1667 2.7.2:6.3.4:4.1.1:1.4.1 +1668 5.3.1:2.7.1:2.3.1:5.4.99:4.3.1:2.1.3 +1669 6.3.2:1.5.1:4.2.3:5.3.1:3.1.3:3.2.1:2.4.2:1.2.1 +1670 1.7.2:4.1.1:2.6.1:6.3.4:1.1.1:2.4.1:4.2.1:2.7.1:2.3.1:4.3.1 +1671 1.2.1:6.3.4:3.5.1:2.1.1 +1672 2.5.1:1.2.7:2.7.4:4.3.2:2.1.1:1.2.1:6.3.4 +1673 2.3.3:2.4.1:5.4.2:3.6.1:1.1.1:1.4.1 +1674 4.1.1:4.1.1:2.7.1 +1675 4.2.3:3.5.1:1.7.99:4.2.3:4.2.1 +1676 6.3.4:6.3.4:2.1.1 +1677 5.4.99:2.5.1:1.4.3:5.3.1:3.5.3 +1678 2.3.1:2.4.2:6.3.1:4.3.2:2.1.2:4.1.1 +1679 4.1.2:2.4.2:1.7.1 +1680 4.1.2:1.8.1:2.3.1:3.5.1:6.3.4:2.7.7:5.3.1:4.2.3:3.1.4:2.9.1:1.13.11 +1681 4.3.2:2.7.1:3.6.1:4.1.1:3.6.1:3.1.3:1.2.4:3.4.13:1.2.1 +1682 1.5.1:2.7.4:2.7.4:6.3.4:4.4.1:2.3.1:2.7.2:2.7.1:1.1.1:5.4.2 +1683 5.3.1:2.6.1:3.1.3:2.5.1:1.4.3 +1684 1.2.1:3.5.4:2.5.1:5.4.2:2.4.1:3.5.1:5.3.1:1.14.12:1.1.1 +1685 1.2.1:1.7.2:4.1.1 +1686 1.1.1:2.7.4:4.3.2:4.1.2:1.7.2 +1687 2.7.7:4.1.1:2.3.1:4.3.-:3.5.1:4.3.1:4.2.1:1.2.1 +1688 2.3.1:6.3.5:3.1.2 +1689 1.5.1:2.1.3:6.3.1:3.2.1:4.2.1:6.3.3:4.1.2 +1690 2.7.1:2.5.1:1.2.4:1.4.1:2.6.1:1.1.1:4.1.1:2.6.1 +1691 2.7.1:4.1.3:1.7.2:4.2.1:1.5.1:2.3.1:5.4.2:4.2.1:4.1.1:6.3.4:3.5.1:2.7.1:3.5.1 +1692 4.3.2:2.7.4 +1693 4.1.2:5.4.99:2.7.4:3.5.3:3.5.1:3.5.3:3.1.1:4.1.1 +1694 6.3.2:2.5.1:2.1.1:2.1.2 +1695 1.5.1:3.1.3:3.6.1:6.3.1 +1696 1.1.1:6.3.4:2.3.3:6.3.4:3.1.1 +1697 3.1.3:4.2.1:3.6.1:6.3.3 +1698 6.2.1:4.1.1:2.7.1 +1699 9.9.9:2.7.1:2.1.1 +1700 1.3.3:2.3.1 +1701 3.1.3:2.7.2:1.7.2:4.3.2:5.4.2:3.5.3:3.1.1:2.6.1:1.2.4 +1702 4.4.1:2.7.2:4.3.1:4.2.1:2.7.1:1.5.1:2.7.1:5.3.1 +1703 1.2.1:4.3.2:4.3.2:4.3.1:4.4.1 +1704 4.4.1:1.3.99:6.3.1:4.2.1:2.7.4 +1705 3.1.3:2.7.1:2.4.1:1.2.4:4.1.2:2.4.2 +1706 2.6.1:2.4.2:4.3.1:6.3.4 +1707 4.1.1:2.4.1:2.3.3:1.2.4:2.4.2:2.5.1:2.1.2:3.4.13:2.6.1:6.3.2 +1708 3.2.1:2.6.1:2.3.1:5.1.1:4.1.1:2.1.2 +1709 2.6.1:1.2.1:6.3.5:2.5.1:6.3.4:4.1.1:2.7.4 +1710 2.7.8:2.-.-:1.5.1:2.1.3:4.1.1:2.6.1:1.17.4 +1711 2.6.1:4.3.2 +1712 1.3.99:1.1.1:4.1.1:3.5.1:1.2.4:3.5.2:3.5.1 +1713 3.1.3:4.2.1:3.1.3:2.7.4:1.1.1:1.1.1:6.2.1:1.1.1:4.2.1:5.4.99:4.4.1:2.7.1:2.7.4:5.3.1 +1714 6.3.2:2.5.1:2.4.2:2.7.4:2.1.3:2.3.1:1.2.4:4.3.2 +1715 2.1.3:4.1.2:2.3.1:2.3.1:4.2.1:2.7.2:6.3.2:1.1.1 +1716 2.6.1:2.3.1:2.4.2:1.2.7:3.1.4:4.1.99:5.1.3:4.1.1:1.5.1 +1717 2.3.1:2.7.7:4.1.2 +1718 3.6.1:3.5.3:1.2.7:5.4.2:2.7.1 +1719 4.1.1:2.5.1 +1720 1.5.1:2.7.1:2.7.1:6.3.2:2.1.3 +1721 2.3.1:2.3.1:2.3.1:6.3.4 +1722 1.2.1:1.1.1:3.4.13:2.7.7:6.3.4 +1723 1.2.1:4.3.1:2.7.1:4.2.1 +1724 2.7.1:2.4.2:3.5.1:1.2.1:4.3.1:2.7.1:2.1.1:2.1.3 +1725 4.1.2:3.5.2 +1726 4.4.1:2.5.1:3.2.1 +1727 2.3.1:2.7.1:4.3.1:5.4.2:4.3.1:1.2.1:2.7.1:4.3.2:5.4.2:5.1.3 +1728 6.3.3:2.7.4:1.2.1:3.5.1:2.3.3:5.4.99 +1729 2.7.4:2.7.4:1.1.1:1.2.1:4.2.1:4.1.1:4.4.1 +1730 6.3.2:3.5.1:1.1.1:2.7.1:4.1.1:1.14.13:2.3.3 +1731 5.1.3:9.9.9:1.4.1:1.7.99:4.1.3:1.1.1:4.1.2:3.1.3:4.1.1:6.3.4 +1732 2.4.2:1.2.4:4.1.1:4.1.1:4.2.1 +1733 2.3.1:1.5.1:6.3.2:2.7.2 +1734 1.1.1:1.1.1:6.3.4:3.5.3:1.3.3 +1735 2.7.2:4.3.1:2.4.2:3.4.13:4.3.1:2.1.1:2.1.3:1.8.1 +1736 2.1.1:2.3.1:5.3.1:6.3.4 +1737 2.7.1:2.1.2:2.7.4:2.4.2 +1738 3.13.1:2.7.2:2.5.1:1.1.1:4.1.3:2.7.4:2.6.1:5.3.1:2.3.1:2.1.3:4.1.1:1.5.99:5.4.99:2.7.1 +1739 2.3.1:1.2.1:1.1.1:2.7.6:3.1.1:2.7.1:1.1.1:2.2.1 +1740 3.1.3:2.1.2:2.7.1 +1741 6.3.2:5.1.3:2.7.2:2.1.3:1.1.1:1.2.4:2.7.1:2.5.1 +1742 1.13.11:1.3.3:4.4.1:2.4.1:3.1.4:2.7.1 +1743 4.2.1:2.3.1:3.6.1:2.3.1:5.3.1 +1744 5.4.99:6.3.4:2.7.2:1.2.4:4.3.2:2.7.1:2.6.1 +1745 6.3.4:3.1.4:4.3.1:3.5.99:1.2.1:3.5.3 +1746 5.4.99:3.5.1:2.3.1 +1747 3.1.5:2.5.1 +1748 2.6.1:3.4.11:4.1.2:2.7.1 +1749 2.6.1:4.3.2:1.2.4 +1750 2.7.7:2.7.7:3.5.1 +1751 6.3.3:2.3.1:1.1.1:4.99.1:1.8.1:3.1.3:2.3.1:2.7.1:1.5.1 +1752 3.5.1:4.3.1:4.3.1:1.2.99 +1753 2.3.1:4.1.1:3.1.3:3.5.5:2.7.4:4.3.2:6.3.3 +1754 4.3.1:5.3.1:1.3.99:2.7.2:2.7.2:1.1.1:2.6.1:1.1.1:6.3.3:2.7.8:4.1.1 +1755 4.3.1:2.6.1:3.4.11 +1756 4.6.1:2.7.7 +1757 2.1.2:2.1.2:6.3.4:1.1.1:3.2.1 +1758 3.2.1:6.3.4:3.5.1:5.4.99 +1759 1.8.1:4.1.3:5.3.1:2.4.2:2.3.1:5.4.2 +1760 1.3.1:1.11.1:1.2.4:1.17.4:5.3.1:2.1.1 +1761 2.7.1:2.7.2:3.5.1:6.3.3 +1762 2.6.1:2.7.4:1.4.4:6.3.5:2.1.2:5.3.1 +1763 6.3.2:2.3.1:4.1.1:2.7.2:6.3.3:3.5.1:6.3.1:1.5.1:2.5.1:2.5.1:2.4.2:2.7.7:1.1.1 +1764 1.2.1:5.4.2:6.3.5:2.2.1:1.1.1:2.7.4 +1765 3.2.1:1.2.1:1.1.5 +1766 1.2.1:2.5.1:2.7.2 +1767 4.1.1:2.7.7:6.3.4:2.4.1:3.6.1 +1768 2.7.1:2.7.1:3.2.2:4.1.1:2.7.2 +1769 4.2.1:2.4.2:1.1.1:6.3.3 +1770 6.4.1:6.3.5:2.3.1:2.7.1:6.1.1:1.5.1:2.7.2:2.7.4:2.5.1 +1771 4.1.2:3.1.1:2.7.6:1.2.1:2.7.2:4.1.1:6.3.4 +1772 4.1.3:3.5.3:5.3.1:1.14.16:6.3.5 +1773 2.6.1:2.3.1:4.3.1 +1774 2.7.2:6.3.2:3.6.1 +1775 2.7.1:2.1.2:6.3.3 +1776 4.3.1:1.1.1:2.7.7:2.7.2 +1777 2.7.1:2.1.4:1.4.1:2.1.1:1.1.5:4.1.2:5.3.1 +1778 2.7.7:6.4.1:2.7.2:3.6.1:3.5.1 +1779 3.5.1:6.3.1:2.3.1:3.2.1:2.5.1:2.6.1:1.5.1 +1780 2.7.2:6.3.1:2.6.1:2.4.2:1.5.1:3.6.1 +1781 1.14.12:3.1.2:6.3.4:2.7.4 +1782 1.7.2:2.7.1 +1783 2.7.4:1.1.1:2.4.2:1.1.1:6.3.4 +1784 1.2.1:6.3.3:2.7.2:1.5.1:2.7.6:2.6.1:1.5.1 +1785 2.1.3:5.3.1:1.11.1:2.3.1 +1786 2.7.7:2.5.1:6.3.5 +1787 4.1.99:2.7.4:1.1.1 +1788 2.6.1:6.3.4:3.1.3:2.3.1:4.1.1:2.7.6:4.2.3:4.1.2:5.1.3:4.4.1:4.3.1 +1789 4.2.1:1.4.1:6.3.3 +1790 4.1.2:1.8.1:4.4.1:2.1.3 +1791 6.4.1:4.3.2:3.1.3:2.3.3:1.1.1:2.6.1:2.7.2:6.2.1:1.1.1 +1792 5.4.2:2.7.1:4.1.2:2.7.9:1.2.4 +1793 1.7.2:4.1.1:4.3.1:2.1.2:4.2.1 +1794 3.5.1:4.2.3:1.1.1:1.2.1:2.4.2:1.1.1 +1795 2.7.1:2.7.1:2.7.4 +1796 6.3.4:2.3.3:2.5.1 +1797 5.1.2:5.4.99:4.2.3:3.5.1:3.5.1:5.3.1:2.4.2:2.7.7:1.2.1:3.1.5:6.3.2:1.2.1:2.4.1 +1798 2.3.3:2.3.1:5.3.1 +1799 1.3.3:2.7.1:2.7.7:2.3.1:4.2.1:2.1.2:4.4.1:1.5.1:1.1.1:6.4.1 +1800 1.1.1:6.3.2:3.5.4 +1801 4.3.1:6.3.4:3.5.1 +1802 1.2.1:4.2.1:4.3.1 +1803 3.5.3:3.1.1 +1804 2.3.1:4.1.1:1.5.1:1.14.12 +1805 2.6.1:4.3.2 +1806 4.4.1:1.5.1:1.2.1 +1807 4.2.1:4.4.1 +1808 3.1.3:1.4.3:1.8.1:2.3.1:4.4.1:2.7.1 +1809 2.7.2:4.1.1:1.5.1:6.4.1 +1810 4.3.1:4.3.2:1.4.3:1.14.13:4.1.1 +1811 1.14.99:2.1.3:4.3.1:2.7.1 +1812 2.8.1:3.5.3:4.2.1:1.4.1:1.4.1:1.1.1 +1813 4.4.1:4.1.1:6.3.5 +1814 1.3.1:1.1.1:5.4.3:4.1.3:4.4.1:6.3.2:4.3.1:1.2.1:2.7.4:5.4.2:4.3.1 +1815 6.3.2:3.2.1:4.2.1:6.3.2:6.3.4:2.5.1:3.5.4 +1816 2.7.1:5.4.99:5.3.1:3.7.1:4.2.1:4.1.1 +1817 3.1.7:4.1.3:2.7.7 +1818 2.7.2:4.1.3:2.6.1:6.3.1:5.4.2 +1819 2.6.1:3.2.1:2.3.1:1.1.1:2.3.1:2.7.2:5.1.3 +1820 2.7.8:6.3.2:6.3.5:2.4.2:5.3.1:1.4.1:2.1.1:1.2.1 +1821 2.1.1:2.3.1 +1822 4.3.1:3.2.2:2.7.1:3.1.4:3.5.1:3.1.3 +1823 6.3.2:2.7.4:3.2.2:5.4.2:2.1.3:5.4.99:2.5.1:4.1.2:1.3.99:1.1.1:4.2.1:1.1.1:6.3.1:1.2.4 +1824 2.6.1:1.1.1 +1825 3.5.4:4.2.-:5.3.1 +1826 6.3.2:2.3.1:2.5.1 +1827 2.3.1:3.5.4:6.3.1:6.4.1:1.2.1:2.7.4:1.2.1:4.2.3:2.7.1:2.5.1:2.6.1 +1828 4.1.3:6.3.2:3.5.4:2.2.1 +1829 5.1.1:4.1.1 +1830 2.5.1:4.1.1:2.6.1:4.2.1:2.3.1:2.3.1 +1831 4.2.1:2.7.1 +1832 4.3.1:2.3.1:1.2.1:4.3.2:2.7.9 +1833 3.5.1:1.7.99:2.7.4:2.4.2:2.5.1 +1834 3.5.3:1.3.3:4.2.1:1.17.1:4.4.1:2.7.1:5.3.1:2.1.2 +1835 2.7.4:6.3.2:2.1.3:4.3.2:1.1.1:2.4.2 +1836 6.3.5:2.7.7:2.6.1:3.2.1:2.7.2:1.2.1 +1837 4.1.1:2.7.1:1.2.4:1.4.1 +1838 4.3.1:2.4.2:5.4.99:2.7.1:4.2.3 +1839 1.1.1:4.2.3:2.7.7 +1840 2.5.1:1.2.1:1.2.1:3.6.1 +1841 3.6.1:3.2.2:4.2.3:5.3.1:6.3.4:4.1.1 +1842 3.1.3:3.1.2:5.4.99:3.6.1:6.3.4 +1843 4.3.1:2.6.1:6.3.2:4.4.1 +1844 2.7.2:2.1.3:2.9.1:2.1.1 +1845 2.3.1:1.1.1:2.1.3:2.7.1:1.1.1:3.5.2:4.3.2:3.1.3 +1846 5.4.2:2.6.1:1.4.1 +1847 2.1.2:2.5.1:6.3.4:3.5.1 +1848 3.6.1:4.4.1:6.3.3 +1849 5.3.1:1.1.1:5.1.3:4.3.1:3.6.1:2.3.1:6.3.4 +1850 1.1.1:1.4.1:3.6.1:2.6.1 +1851 2.7.1:2.4.2:2.5.1:4.2.-:4.3.2:2.3.1:2.3.1:4.1.1:1.17.1:1.1.1:2.3.1 +1852 3.4.13:3.1.1:2.6.1:4.3.1:2.7.1:5.4.2:2.7.4:1.7.2 +1853 2.6.1:6.3.2:2.8.1:1.5.1:6.3.2:4.1.3:6.3.3:6.3.4 +1854 2.7.4:6.3.4:2.7.1:1.8.1:1.5.1:6.3.4 +1855 2.4.2:1.3.1:2.7.1:2.7.4 +1856 4.2.3:6.2.1:4.1.1:3.8.1:2.5.1:6.3.2:3.6.1:1.4.1 +1857 4.2.1:1.4.3:3.2.1:6.3.1:4.4.1:2.2.1:1.1.1 +1858 2.6.1:2.7.1:2.7.4:1.4.3 +1859 3.5.1:2.7.2:6.3.5:2.7.6:2.1.2:6.2.1:2.7.1:5.3.1:4.2.1:6.3.5 +1860 1.1.1:4.4.1:1.5.1:4.2.1 +1861 3.6.1:2.7.7:2.7.4:4.3.1 +1862 2.4.2:2.7.7:3.1.3:2.3.1:5.1.3 +1863 2.6.1:3.5.5 +1864 4.2.1:4.2.1:3.5.1:2.7.2:3.5.3:4.3.2:6.3.2 +1865 2.7.1:2.5.1:1.4.1:2.3.1:2.7.4:2.1.1:2.5.1 +1866 4.1.2:3.1.3:2.1.2 +1867 3.5.1:6.3.4:2.6.1:6.3.1 +1868 1.2.1:2.6.1:4.1.1 +1869 3.6.1:6.3.3:1.8.1:1.5.1:2.1.1:3.5.2:2.7.2:4.1.1 +1870 2.7.2:2.5.1:2.7.2:2.5.1:2.3.1:1.14.99:5.4.2 +1871 4.3.1:4.3.2:2.4.2 +1872 4.1.2:5.4.99:3.5.3:2.7.1:3.1.2:1.2.1:3.6.1:4.3.2:2.7.7 +1873 1.2.1:2.6.1:2.1.2:2.4.1:4.1.1:2.5.1:1.14.12:3.4.13:4.2.1:2.6.1:4.1.2 +1874 2.3.1:3.2.1:2.7.2:2.7.1:2.6.1:3.1.3 +1875 2.7.1:2.6.1:6.3.4:5.4.2:1.1.1:5.4.2:2.6.1:4.3.2:2.5.1:6.3.2 +1876 5.4.2:1.5.1:2.7.7:3.1.2:2.5.1:5.3.1:2.1.3 +1877 1.1.1:4.3.1:4.2.1:1.2.4:6.3.4:6.3.1:2.1.1 +1878 2.7.1:4.3.2:5.3.1:3.5.3 +1879 2.7.7:1.2.1:4.3.2 +1880 1.5.1:2.3.3:2.7.7:2.3.1:3.6.1:2.7.7:2.6.1:6.3.4:5.4.2 +1881 4.4.1:1.1.1:2.1.1:2.7.1:2.5.1:5.4.2:6.3.5 +1882 2.5.1:4.2.1:1.1.1:2.7.6 +1883 2.7.7:6.3.3:3.6.1:1.5.1:2.7.1:6.3.4 +1884 2.7.2:5.4.1:2.5.1:3.5.1:6.3.3 +1885 1.5.1:1.2.1:2.5.1:3.6.1:4.1.1:2.5.1 +1886 1.3.3:3.2.2:3.2.1 +1887 1.4.1:6.3.2:2.1.1:1.1.1:4.4.1:1.1.1:4.1.1 +1888 2.3.1:4.2.3:1.1.1:2.7.6 +1889 4.1.3:2.3.1:4.2.1:2.7.2:9.9.9 +1890 4.2.1:5.4.2 +1891 2.7.1:3.5.1:3.1.2:6.3.4:6.3.3 +1892 1.1.1:2.3.1:2.3.3:2.3.1:2.2.1:2.7.7:1.3.99:3.5.4 +1893 1.3.1:2.3.1:3.6.1:2.7.1 +1894 2.7.7:4.1.1 +1895 1.5.3:3.5.1 +1896 1.2.1:5.4.99:6.3.3:1.1.1:2.7.9:3.5.1:2.3.1 +1897 5.3.1:5.3.1 +1898 2.7.4:3.1.3:1.2.1:2.5.1 +1899 1.1.1:4.3.2 +1900 2.7.4:6.2.1:5.3.1:3.1.3 +1901 1.8.1:4.2.1:2.6.1:2.4.1:2.3.1:1.2.1:2.3.1:2.3.1 +1902 1.5.1:1.1.1:2.7.4:3.1.2 +1903 1.1.1:4.3.1:2.1.1:5.3.1 +1904 1.2.1:2.1.2:2.4.2 +1905 3.5.1:3.5.1:1.1.1:2.7.1:1.2.1:4.2.1:1.3.1:6.3.5 +1906 2.3.1:1.17.1:4.2.3:4.2.3 +1907 6.3.5:1.1.1:2.7.7 +1908 6.3.4:2.6.1:2.7.7:4.1.1:2.7.1:2.5.1:2.1.3:5.3.1:2.7.2 +1909 1.1.1:2.7.7 +1910 2.7.4:1.1.1:5.3.1:4.1.1 +1911 2.3.1:1.2.5:6.1.1:2.6.1:1.2.1 +1912 5.4.2:2.3.1:2.2.1:3.1.2:3.5.1:6.3.2 +1913 1.3.99:2.7.1:2.1.1:6.3.4:4.4.1:1.7.2:5.4.99:1.3.99:2.6.1:2.5.1:3.1.3:1.11.1:1.7.99 +1914 1.2.1:2.7.2:4.3.1:6.3.4:1.1.1:2.7.1:3.6.1:2.1.2:1.5.1:4.3.1:1.1.1 +1915 4.3.2:6.4.1:6.3.4:2.4.2 +1916 1.1.1:4.1.1:4.1.2:2.1.2:3.1.5:1.5.1:1.1.1:2.5.1:3.2.1:1.2.1:2.8.1 +1917 1.13.11:2.3.1:2.7.2:2.7.1:1.2.1 +1918 1.1.1:4.1.1:4.1.2:2.3.1 +1919 2.5.1:2.7.1:3.4.13:3.5.3 +1920 2.7.1:4.1.1:2.6.1:2.5.1:4.2.3:1.1.1:2.7.1 +1921 4.2.3:4.2.1:2.7.1:4.1.1:3.5.1:4.1.1 +1922 1.14.12:4.1.1:5.3.1 +1923 1.1.1:4.4.1:4.2.3:4.2.1 +1924 4.2.3:6.3.2:3.1.3 +1925 1.2.4:4.1.1:2.4.2 +1926 6.3.5:4.3.1:3.1.1:2.2.1:1.2.1:6.3.5:1.5.1:4.1.1 +1927 3.6.1:3.6.1:2.3.1 +1928 4.1.3:3.1.3:2.1.2:1.2.1:1.2.1:1.1.1 +1929 2.3.1:2.4.2:1.1.1:3.5.2:2.4.1:4.2.1:2.3.1:6.3.1 +1930 3.6.1:2.7.2:2.7.2:5.4.99:2.7.4 +1931 3.1.3:3.5.2:4.2.1:2.7.6:1.5.1:2.4.2 +1932 2.3.1:1.5.1 +1933 2.3.3:1.2.4:6.2.1:5.3.1:2.7.1 +1934 2.5.1:2.4.2:4.1.2:2.3.1:2.7.6 +1935 2.7.1:3.5.1:4.2.1 +1936 3.5.4:6.2.1:2.3.1:1.1.1:1.1.1:2.7.1:4.2.1 +1937 1.5.1:2.6.1:2.5.1:2.7.2:1.13.11:1.2.1:2.3.1:2.7.7:4.2.1 +1938 1.2.4:2.3.1:6.3.2:3.1.2:2.1.3:1.1.1 +1939 3.5.1:1.2.1:2.4.2:3.1.4 +1940 9.9.9:6.3.4:4.1.1:4.1.1 +1941 4.2.1:2.7.7:4.1.1 +1942 2.3.1:4.1.2 +1943 2.5.1:1.2.1:2.7.1 +1944 2.7.7:3.1.3:6.1.1:2.5.1:4.1.1:1.7.3:2.4.2:2.1.3:1.1.1 +1945 1.4.1:2.6.1 +1946 3.1.3:1.1.1:6.3.4:2.6.1 +1947 9.9.9:5.4.99:1.5.1:2.3.1 +1948 4.2.1:4.1.1:1.2.1:6.3.2:1.1.1:4.1.1 +1949 2.7.1:6.3.2:2.5.1:2.7.2 +1950 1.1.1:2.4.2:2.7.1:4.2.1:1.1.1 +1951 2.1.3:2.5.1:3.5.1:3.5.1 +1952 5.1.3:1.2.1 +1953 3.5.3:2.5.1:3.1.2:2.7.1 +1954 6.4.1:4.4.1:4.2.1:2.5.1:3.5.2:3.5.1 +1955 4.3.1:3.13.1:2.5.1 +1956 5.3.1:3.1.1:5.4.99 +1957 1.1.1:3.2.1:3.4.11:2.3.1:4.3.1 +1958 4.2.1:2.7.1:4.4.1:3.1.2 +1959 3.5.4:3.5.1:6.2.1:4.4.1:2.6.1 +1960 2.7.2:1.3.99:6.3.2 +1961 1.2.1:1.1.1:2.1.2:2.7.2 +1962 2.4.2:4.2.1:3.1.3:2.7.9:3.1.3:3.2.2 +1963 2.3.1:3.5.3:1.1.1:5.3.1 +1964 3.4.11:1.8.1:1.14.13:4.3.2:2.7.1 +1965 1.1.1:4.3.1:1.1.1 +1966 4.1.3:4.1.1:2.7.7:6.3.4:2.4.2:2.1.1 +1967 5.3.1:4.1.1:3.5.1 +1968 2.1.3:6.3.3:6.3.4:2.1.1:4.3.1:2.6.1 +1969 9.9.9:2.6.1:5.4.99:3.1.3 +1970 3.5.4:2.5.1 +1971 4.1.1:3.5.1:4.3.2:3.5.3 +1972 6.3.4:2.6.1:4.3.2:4.1.1 +1973 2.7.2:2.3.1:2.4.1:4.1.2:3.1.1 +1974 1.2.4:6.3.4:2.7.1:4.1.1:3.1.3 +1975 1.7.99:3.5.5:2.4.2:2.7.4:3.6.1:2.4.2:1.2.1:4.1.3:3.4.13:3.5.3:2.7.1 +1976 1.1.1:1.1.1:1.3.99 +1977 2.7.1:1.2.1:2.7.1:2.8.1:2.1.3 +1978 2.7.6:2.7.1:2.3.1:2.3.1 +1979 3.5.1:2.7.1:2.3.1:4.1.1 +1980 4.1.1:2.7.4:1.1.1:3.1.3 +1981 2.1.2:2.3.1:6.2.1:5.3.1:1.2.1:3.1.2:2.1.3:1.14.13 +1982 1.2.1:4.1.1:4.3.1:1.13.12:2.5.1 +1983 3.5.1:3.1.5 +1984 1.1.1:3.5.1:4.3.1:2.3.1:1.5.99 +1985 3.4.11:2.7.4:4.1.1:3.1.1:6.3.2:2.1.3 +1986 4.2.3:6.3.1:3.7.1 +1987 2.3.1:2.6.1:4.1.1:3.2.2 +1988 2.3.1:5.4.2:2.7.2:2.7.2 +1989 3.5.2:2.7.7:2.6.1:3.5.1:4.1.2:4.1.1 +1990 6.3.2:2.7.1:2.7.1:2.7.4:2.5.1 +1991 3.5.1:6.3.5:5.3.1:2.1.3:2.3.1:2.7.1:4.1.1:6.3.2:2.7.1:1.5.1 +1992 4.1.1:2.6.1:2.4.2:2.3.1:1.14.16 +1993 4.1.1:2.5.1:4.1.1 +1994 2.7.6:4.1.1:2.2.1:2.4.2:3.5.4 +1995 2.1.2:4.1.1:2.7.2:1.1.1:3.5.1:4.3.2:5.1.3 +1996 1.1.1:4.2.3:2.7.1:5.3.1:2.6.1:4.1.2 +1997 2.1.2:1.4.4:1.5.1:2.3.1:3.1.5 +1998 4.1.1:2.7.7:6.3.4 +1999 2.5.1:3.5.1:3.1.3:3.5.1:4.2.1:2.7.1:4.1.3:4.3.2:4.1.3:4.1.1:6.3.4 +2000 2.6.1:2.5.1:2.4.2:2.3.1:4.3.1:4.4.1:4.1.1 +2001 5.1.1:5.4.2:6.3.3:2.3.1:2.4.2:6.3.2:4.2.3:4.1.1 +2002 2.1.3:2.1.3:2.5.1:3.1.3:4.3.1:2.4.2:4.1.2:1.8.1:4.1.1:2.7.2:2.7.2 +2003 2.5.1:4.1.2:5.4.1:2.7.8:2.7.2:6.3.4:6.3.4:2.3.1 +2004 2.7.1:4.1.1 +2005 2.5.1:4.3.1:2.5.1:5.4.99 +2006 5.1.3:3.7.1:4.3.1:3.5.4:1.5.1 +2007 2.1.4:4.1.2:1.1.1:1.4.1 +2008 3.4.11:6.3.2:1.2.1:5.3.1:4.2.1 +2009 6.3.4:2.7.8:2.7.2:1.4.1:3.5.2:4.1.3:2.1.3:2.7.1 +2010 2.3.1:4.1.1:5.1.1 +2011 1.17.4:4.2.3:3.2.2:6.3.4:2.7.7:2.3.2:2.1.2:2.3.1 +2012 6.3.4:4.1.1:1.1.1:3.5.1:2.4.2:1.5.1:4.1.1:2.3.1 +2013 2.1.1:6.3.1:2.7.1:2.3.1:5.4.2:3.5.4:2.7.4:3.5.1 +2014 2.7.8:2.3.1:3.5.1:1.1.1:3.7.1 +2015 4.2.3:3.5.1:3.5.3:2.5.1:2.5.1 +2016 4.3.1:4.1.1:5.1.3:1.5.99 +2017 2.8.1:6.4.1:2.5.1 +2018 1.3.1:2.3.1:3.5.1:2.1.2 +2019 4.1.3:1.2.1:2.5.1:2.8.1:1.2.1:3.1.3:2.7.6:2.1.2:2.4.2 +2020 1.5.99:1.4.1:5.3.1 +2021 3.5.1:1.2.4:2.7.7:2.3.1:6.3.3:2.3.1:2.7.1:4.4.1:2.7.7:1.4.99:4.1.3:4.2.1:3.5.3:6.3.4 +2022 6.3.2:4.1.1:4.1.2:2.4.1:6.3.4:1.5.1:6.3.5 +2023 6.3.2:1.14.13:3.5.3 +2024 2.7.7:2.3.1:1.2.4:1.5.1 +2025 3.5.1:3.7.1:1.2.1 +2026 2.6.1:2.6.1:1.1.1 +2027 2.3.1:2.7.2:4.1.1:2.7.1:2.4.1 +2028 6.3.4:2.6.1:3.2.1:1.2.1:4.2.1:1.2.1:5.1.2:1.2.1:1.1.1:3.1.3:3.5.1:3.6.1:2.7.7 +2029 1.1.1:3.5.3:4.1.1:2.3.1:3.1.4:5.-.-:1.1.1:4.1.1:1.4.3 +2030 6.3.3:5.4.1:1.8.1:1.2.1:3.5.1:2.3.3 +2031 1.1.1:2.6.1:3.5.1:4.1.1:4.1.1:5.4.99 +2032 2.7.8:2.3.1:1.5.1:4.2.1:2.4.2:2.7.1:6.3.4 +2033 6.3.4:2.7.7:4.1.2:3.5.5 +2034 2.4.2:3.1.3:2.7.1 +2035 3.6.1:2.6.1:3.2.1:2.7.2:4.1.2:1.2.5:6.3.4:5.1.3:2.4.2:2.5.1:2.6.1:4.2.1:4.2.1 +2036 1.2.1:3.7.1:4.1.3:2.7.7:3.5.1:2.3.1:4.2.1:2.7.2:2.6.1 +2037 2.7.7:1.2.4:4.2.1:2.3.1 +2038 3.5.2:2.1.2:1.1.1:3.5.3:2.7.1:6.3.1:2.1.3:1.5.1 +2039 4.4.1:2.2.1:1.8.1:1.7.2:5.4.99:2.3.1:1.2.1:5.4.99:1.2.4:4.1.1:2.5.1 +2040 2.3.1:2.5.1:1.2.1:3.1.3:2.6.1 +2041 2.1.1:1.5.1:2.5.1:1.1.1 +2042 1.2.1:1.3.3:4.1.3:1.7.2:2.1.2 +2043 2.7.1:3.5.1:2.1.3:3.2.1:6.2.1:2.7.1:3.5.1 +2044 1.13.11:1.5.99:6.3.1:4.1.2 +2045 2.7.6:4.1.2:2.6.1:2.3.1 +2046 1.2.1:3.1.1:1.1.1:4.1.1:3.5.1 +2047 2.7.1:2.3.1:4.2.3 +2048 2.1.3:3.5.99:2.7.1 +2049 1.13.11:1.1.1:1.3.1:5.1.3:1.2.1:2.1.3:4.2.1:1.7.99 +2050 1.4.1:2.7.1:2.1.2 +2051 4.1.1:2.3.1:2.6.1:2.7.6:2.5.1:2.7.2:1.3.3:4.1.1:4.3.1:1.1.1 +2052 3.4.11:4.3.1 +2053 6.3.4:1.2.4:3.5.1:6.3.4 +2054 2.7.7:1.2.1:2.1.1:2.3.1 +2055 2.3.3:1.5.1:2.4.2:2.7.1:1.7.2:4.3.1 +2056 4.1.1:6.2.1:2.3.1:3.1.3 +2057 2.3.1:4.3.1:3.1.3:2.6.1 +2058 1.1.1:3.1.7:2.7.8:6.3.2:5.3.1 +2059 1.5.1:1.1.1:3.1.3:3.2.1:1.1.1:2.1.1 +2060 4.2.3:2.1.3:4.4.1:3.5.4:2.5.1:2.3.1:3.1.3:1.3.1:4.1.3:2.3.1 +2061 3.1.3:6.2.1:2.3.1:2.7.2:5.4.99:1.1.1:2.3.1 +2062 1.1.1:1.5.1:5.3.1:4.4.1:4.1.1:2.6.1:5.4.2 +2063 2.7.2:6.2.1:1.8.1 +2064 1.4.1:2.7.2:3.1.5:6.3.2:1.2.1:1.4.1:2.7.1 +2065 6.3.5:4.1.1:2.6.1:3.5.99 +2066 1.5.99:4.1.1:2.1.2 +2067 6.3.2:1.1.1:4.3.1:2.7.1:2.7.1:5.4.2:1.1.1:6.3.1:1.4.1:4.1.1:1.1.1:6.3.4 +2068 2.5.1:2.5.1:3.5.1:6.3.2:1.1.1:2.7.8:2.1.1:2.7.4:4.2.1:6.3.5 +2069 2.5.1:2.5.1:1.4.1:3.1.3:3.5.4:1.4.1 +2070 3.5.1:2.7.4:5.3.1:1.1.1:5.1.3:1.18.6 +2071 2.5.1:3.5.3:5.4.99 +2072 3.5.3:1.2.1:3.2.1:2.5.1:1.5.1 +2073 4.1.1:3.6.1:2.6.1:2.7.1:1.5.1 +2074 2.3.1:2.7.1:1.1.1:3.1.1:4.1.1 +2075 2.6.1:6.3.2:2.7.4 +2076 2.7.1:4.3.2:4.1.1 +2077 5.3.1:4.1.1:4.1.1 +2078 2.4.1:2.2.1:3.6.1:1.1.1:2.3.1 +2079 2.5.1:2.6.1:2.8.3:2.7.7:3.4.11:4.3.2:1.3.3:6.3.5:2.1.4:4.2.1 +2080 3.5.3:2.3.1:2.5.1:1.1.1 +2081 2.6.1:5.4.99:2.3.1:1.2.1:2.7.1:3.5.1:2.1.2:2.1.3 +2082 6.3.4:2.4.2:5.1.3 +2083 1.4.1:6.3.3:4.1.1:5.3.1:4.4.1:2.7.1:2.7.1:2.5.1:1.2.1 +2084 6.4.1:5.3.1:2.4.1:1.2.1:1.7.99:2.3.1:3.5.3 +2085 2.4.2:3.1.3:1.1.1:2.7.1:2.7.7:3.1.7:4.3.1 +2086 2.1.2:2.7.1 +2087 2.4.1:3.5.1 +2088 3.5.1:1.1.1:5.3.1:1.1.1:2.1.3:1.7.2:2.1.2:6.3.2 +2089 5.4.99:2.4.2:4.3.1:6.3.5:6.3.4:2.7.8 +2090 2.7.1:4.1.3:2.7.7:4.3.1:2.7.2 +2091 1.3.99:1.5.1:2.7.1:4.1.2:6.3.2:1.1.2:6.3.2 +2092 3.5.3:1.5.99:2.3.3 +2093 2.3.3:3.5.4 +2094 6.3.2:4.3.1:2.1.2 +2095 4.3.1:1.14.16:2.5.1:1.1.1:2.7.7:2.1.1:2.7.1:4.3.2:1.17.4:6.3.4 +2096 1.2.1:1.11.1:5.3.1 +2097 1.7.2:3.5.1:4.2.1:1.1.1:3.5.1:2.7.1:2.6.1 +2098 2.7.1:1.1.1:4.1.1 +2099 3.1.3:3.6.1:3.5.1 +2100 5.3.1:2.7.7:2.1.1:3.2.1 +2101 5.3.1:5.4.99:3.5.1 +2102 4.3.2:2.6.1:2.7.2:2.5.1:1.1.1 +2103 4.2.1:4.4.1:6.3.4 +2104 5.4.2:2.6.1:1.1.1:2.5.1:4.3.2:4.1.1 +2105 2.7.2:6.3.4:1.1.1:3.1.1:1.4.1:2.6.1:2.7.7 +2106 2.4.2:1.2.1:2.7.7:2.5.1 +2107 1.1.1:1.3.1:3.5.4:2.7.8:2.6.1 +2108 2.7.1:4.2.1:5.4.99:4.2.1:1.1.1 +2109 1.5.1:2.4.2:4.1.2:5.4.2:4.1.1:3.2.2:1.8.1:3.5.4:1.4.1:3.1.3 +2110 1.2.4:2.3.1:1.2.1:2.3.1 +2111 4.1.1:2.7.9:6.3.2 +2112 6.3.3:6.3.5:2.5.1:2.1.2:2.6.1 +2113 3.1.3:1.5.1:2.3.3:2.7.2:2.6.1 +2114 2.6.1:3.2.2:4.2.3:1.5.99:2.6.1:2.7.6:6.3.5 +2115 1.2.1:1.5.1:3.1.1:6.3.2:1.2.1 +2116 2.3.1:4.1.1:4.1.2:1.1.1:1.1.1 +2117 3.1.3:2.1.2:1.4.1:4.1.2 +2118 9.9.9:1.1.5:1.3.3 +2119 6.3.4:3.6.1:5.1.3:2.5.1:6.3.4:1.2.1:1.3.3 +2120 2.7.2:2.7.4:4.2.1:4.2.1:2.3.1:2.7.4:3.5.99:6.3.4:2.3.1 +2121 1.2.1:2.5.1 +2122 6.3.4:4.2.1:1.1.1 +2123 4.3.1:4.2.1:1.3.1:1.1.1:2.4.1:6.4.1 +2124 2.7.1:2.1.3 +2125 2.7.2:6.4.1:2.5.1:6.3.4:3.1.1:2.3.1:1.2.4:6.3.3:6.3.2 +2126 2.5.1:4.3.1:2.3.1:2.5.1:4.1.1 +2127 2.7.1:6.3.5:4.1.2:2.3.1:2.1.1 +2128 2.7.4:3.1.2:4.4.1:4.3.2 +2129 1.1.1:2.3.1:1.1.1:1.5.1:2.6.1:3.5.1:2.3.1 +2130 3.1.3:1.1.1:2.3.1:1.2.4:1.4.1:1.1.1:6.3.3:4.1.1:1.4.3 +2131 4.1.1:4.3.2:4.1.1:4.1.1:6.3.3:5.3.1:3.1.3 +2132 3.5.1:2.6.1:6.3.4 +2133 3.2.2:1.5.1:2.6.1:2.7.4:5.3.1:2.7.1:3.5.3:1.1.1:2.7.1 +2134 3.5.1:4.1.3:5.4.2:3.6.1:2.4.1:3.5.1 +2135 2.1.3:3.6.1:6.3.5:6.3.3:2.5.1:6.3.4:3.5.1 +2136 2.4.2:1.1.5:2.3.1:1.3.99:6.3.1:4.1.3:6.6.1:2.7.1 +2137 1.2.1:2.7.4:1.13.11:2.3.1:2.7.4:3.2.1:6.3.4:2.5.1 +2138 3.1.3:3.1.3:4.3.2:2.6.1:2.7.4:2.4.2:2.1.2:6.3.4 +2139 2.3.1:2.7.7:1.1.1:2.1.3 +2140 4.3.1:2.5.1:2.4.1 +2141 4.3.2:2.5.1:2.3.1:3.1.1:3.5.1:2.6.1 +2142 6.3.2:4.1.3:1.1.1 +2143 1.5.1:2.1.1:2.5.1:3.1.3:2.7.1:3.2.1 +2144 2.7.7:2.7.2:2.7.2:4.3.2 +2145 6.1.1:1.2.4:2.7.1:1.1.5:2.1.2 +2146 9.9.9:5.4.99:2.6.1 +2147 1.4.1:4.1.1:2.1.1:4.3.1 +2148 1.2.4:2.6.1:4.1.2:2.7.1:3.4.11:2.2.1:2.3.1 +2149 5.1.2:2.4.2:4.1.1 +2150 2.1.3:2.1.2:2.7.7:2.1.2:4.2.3:4.1.2:2.3.1:2.7.7 +2151 2.4.2:4.2.-:2.1.3:4.1.1:1.1.1 +2152 3.5.1:2.5.1:2.7.1:1.1.1 +2153 5.4.99:1.2.1:2.7.1:2.5.1:5.3.1:2.7.8:2.4.2:3.1.1:1.5.1:6.3.2:1.1.1:4.6.1 +2154 4.4.1:1.18.-:4.1.2:6.2.1:2.3.1:1.2.1:1.1.1:2.1.3:2.3.1:3.5.1:2.1.2:2.6.1 +2155 1.1.1:2.5.1:2.7.1:1.1.2:5.4.2 +2156 5.4.99:6.3.2:4.1.1:2.6.1:1.5.1 +2157 2.1.1:2.6.1:2.7.2:2.3.1:1.1.1:4.2.-:3.6.1:1.2.5 +2158 3.1.3:2.7.1:6.2.1 +2159 6.3.5:4.1.1:2.1.3:2.7.1:5.3.1 +2160 3.5.1:1.5.99:5.4.2:2.7.4:6.3.5:1.3.1:2.5.1:1.14.16:2.6.1 +2161 4.3.1:1.2.1:1.11.1 +2162 2.5.1:2.6.1 +2163 6.3.4:4.3.2:1.1.1:2.7.4:3.5.1 +2164 3.1.3:1.2.1:2.4.2:2.1.3:2.7.1:2.7.1 +2165 2.3.1:4.3.2:2.3.1:2.6.1:1.5.1:2.3.3:2.1.2 +2166 4.1.1:6.4.1:3.4.11:1.1.1:2.5.1:1.1.3:2.1.4:3.6.1 +2167 4.1.1:3.5.1:2.3.1:3.1.4:1.1.1:2.7.1 +2168 3.2.1:5.4.99:4.2.2 +2169 2.6.1:1.1.1:2.4.2:2.7.4:4.1.1 +2170 4.2.3:6.4.1:1.4.3:3.5.1:5.4.2 +2171 2.2.1:1.2.1:6.3.5 +2172 4.4.1:3.3.1:2.3.1:4.2.1 +2173 1.5.1:1.1.1:3.5.1 +2174 4.2.1:2.6.1:1.4.99:6.2.1:2.6.1:4.1.2:4.2.3:2.7.1 +2175 5.4.2:4.2.3:1.1.1 +2176 2.7.2:3.5.1 +2177 4.3.1:6.3.3:5.3.1:2.1.1 +2178 9.9.9:3.5.99:5.4.99 +2179 4.1.2:2.3.3:4.3.1 +2180 6.3.4:1.17.4:1.5.1 +2181 2.3.1:4.3.2:1.4.1 +2182 3.1.3:1.1.3:5.3.1:3.2.2:1.3.99:2.3.1:2.6.1 +2183 3.5.1:1.5.1:4.1.1:1.3.3:1.1.1:4.1.1:5.3.1 +2184 1.8.1:4.1.1:3.6.1:1.2.4 +2185 2.1.1:1.1.1:5.3.1 +2186 2.3.1:1.5.1:3.5.3:2.1.3 +2187 5.3.1:1.1.1:2.7.4:1.14.12:2.5.1 +2188 4.1.1:4.2.1 +2189 5.1.1:2.7.1 +2190 2.1.3:2.5.1:2.7.1:1.2.1:3.1.3 +2191 1.7.2:1.3.1:6.3.3:2.7.4:5.4.4:2.7.1 +2192 6.3.4:1.3.3:2.5.1:2.6.1 +2193 2.7.1:1.2.4:3.5.1:4.3.2:2.1.2 +2194 2.4.2:4.3.2:1.2.1:1.2.1:1.14.13:2.7.2:1.1.1:2.5.1:9.9.9:2.1.3:5.4.99:1.4.4:3.2.2:4.3.2 +2195 4.4.1:6.3.5:5.1.3:5.4.99 +2196 9.9.9:1.1.1:2.7.1:2.1.2:1.2.1:3.1.3 +2197 1.5.1:1.2.1:2.7.4 +2198 4.1.2:3.2.1:2.7.1:2.7.1:1.1.5:2.4.2:2.7.4:3.5.1 +2199 4.3.2:4.4.1:1.8.1 +2200 6.3.5:2.1.1:4.1.1:1.5.1:2.1.2:2.7.7:3.5.4:1.4.3 +2201 1.2.1:2.7.1:2.7.2:6.3.1:2.4.2 +2202 4.3.1:5.1.3:4.2.-:3.1.2:4.2.1:2.4.2:1.5.1 +2203 2.7.7:1.2.1:1.2.1:4.2.1 +2204 2.6.1:2.7.7:1.2.1:5.1.3:2.6.1:3.1.3:2.7.7:3.5.1:3.1.1:4.3.2:3.1.3:2.7.4:2.6.1:3.5.1 +2205 4.2.1:2.3.1:1.4.1:2.7.7:4.3.2 +2206 1.3.1:2.6.1:4.4.1:6.2.1 +2207 2.7.6:3.1.3:4.3.1 +2208 2.5.1:2.3.1:1.1.1:2.7.4:1.1.1:2.6.1:3.6.1:4.3.1 +2209 5.5.1:4.3.2:4.2.1:6.3.4:3.5.1:1.1.1:2.7.1 +2210 5.3.1:4.2.1:3.2.1:2.6.1:2.3.1 +2211 5.3.1:2.7.1:2.4.2:4.2.1:1.1.1:2.4.1:2.7.1:2.3.1:2.7.2 +2212 4.1.2:3.2.1:1.4.1:4.3.1 +2213 2.7.2:2.3.1:2.7.1:4.1.1:6.3.3:4.2.-:2.7.1 +2214 3.6.1:4.1.1:5.1.1:3.5.3:2.7.4 +2215 2.5.1:9.9.9:3.2.2 +2216 6.3.5:4.2.3:3.2.1:1.3.1:1.18.-:4.1.1:1.17.4 +2217 1.4.99:1.5.1:2.1.3 +2218 4.1.1:3.5.3:3.6.1:4.3.1:6.3.4:2.7.2:2.7.1:4.1.1 +2219 2.7.2:3.1.3:2.7.7:2.3.1:6.3.5:3.5.1 +2220 5.3.1:2.1.1:5.4.2:1.5.1 +2221 2.7.4:2.5.1 +2222 1.2.4:6.3.4:2.3.1:2.6.1:5.3.1 +2223 2.2.1:2.7.1:2.1.1:1.4.1:6.4.1 +2224 1.2.7:2.7.1:2.1.3:2.7.2:3.2.1:6.3.3:3.2.2 +2225 2.1.2:2.5.1:6.2.1:2.7.1:6.1.1:1.8.1 +2226 1.3.1:3.5.1:2.2.1:1.7.99:5.3.1 +2227 1.2.4:2.7.1:5.4.2:2.3.1:2.6.1 +2228 2.6.1:2.7.1:5.4.99:3.2.1:2.5.1:6.3.4:2.4.2:3.5.2:4.3.1:2.5.1:2.1.2:6.3.4 +2229 1.2.1:2.7.1:2.7.2:2.4.2:3.5.1:6.3.4:2.7.4 +2230 1.1.2:2.3.1:6.2.1:3.5.2:4.1.2:3.5.3:2.3.1:2.7.1:1.3.99 +2231 2.3.1:2.3.1:2.7.1:2.5.1:4.3.1:2.7.8 +2232 3.5.3:4.1.1:6.3.2:4.1.1:2.1.3 +2233 6.3.2:2.7.7:3.1.3 +2234 1.1.1:1.1.1:4.2.1:4.1.1:4.1.3:1.17.1:1.3.3:2.6.1 +2235 1.4.1:3.1.3:3.5.1:2.7.1 +2236 1.5.1:3.1.5:2.6.1:2.3.1:3.6.1 +2237 1.1.1:2.7.1:2.7.1:1.1.1:4.1.1:2.3.1:2.4.2:3.5.1 +2238 3.3.1:4.2.1:2.1.1:4.2.1:2.5.1:2.7.1:4.1.3:4.2.1:2.7.2:1.1.1 +2239 1.13.11:1.2.1:4.1.3:4.1.1 +2240 2.7.7:2.4.2 +2241 6.3.1:5.4.2:4.2.1:2.3.1 +2242 3.5.1:3.1.3:1.2.4 +2243 6.3.4:2.7.6:1.1.1 +2244 2.1.2:2.7.7:2.7.7:5.4.2:2.3.1 +2245 1.5.1:3.5.1:3.5.1:4.2.1 +2246 2.3.3:2.5.1:4.1.1:4.3.2:9.9.9:4.1.2:3.5.1 +2247 2.3.1:4.4.1:2.7.7:2.6.1:6.3.1:3.6.1:2.7.1 +2248 2.7.2:2.6.1:4.4.1 +2249 2.4.1:1.4.1:4.1.2:2.3.1:2.3.3 +2250 3.2.1:2.1.1 +2251 4.1.1:2.5.1:2.3.1:2.6.1:2.7.2:1.5.1:1.4.1:1.2.1 +2252 4.1.2:2.5.1:1.7.2:2.7.4:6.4.1:2.7.1:5.3.1:6.4.1 +2253 4.2.1:4.3.2:1.7.2:1.1.1:4.3.1 +2254 6.1.1:1.2.1:2.1.1 +2255 5.3.1:3.5.1:1.1.1:1.1.1:1.5.3 +2256 2.7.1:3.2.2:2.1.1:3.2.1:3.5.1:2.6.1:2.1.1:4.1.3:4.2.1 +2257 2.4.2:4.2.3:2.7.8:4.1.1:3.6.1 +2258 2.5.1:4.1.2:2.7.2:4.3.1:1.1.1:1.13.11:1.17.4:6.3.4:1.4.1 +2259 4.1.1:3.5.1:4.3.1:2.3.1:2.1.3 +2260 4.3.1:3.5.2:9.9.9:4.2.1 +2261 1.3.1:2.5.1:2.3.3 +2262 2.7.1:4.2.3:5.3.1 +2263 4.3.1:6.3.5:2.6.1:2.7.1:4.1.1:2.6.1 +2264 4.1.2:1.1.1:3.2.1:3.1.2:2.3.1:9.9.9:3.4.11:4.1.1:2.7.4 +2265 2.7.1:4.4.1:2.1.3 +2266 1.1.1:1.1.1:1.1.1:1.2.4:2.5.1:1.4.1 +2267 5.4.2:3.5.1:2.7.6:2.7.1:2.7.1:2.7.1:1.2.1:4.3.1:2.1.2:2.7.2 +2268 2.3.1:3.5.1:2.7.4:2.7.1:6.2.1 +2269 1.5.1:2.3.3 +2270 2.7.1:2.3.3:6.3.1 +2271 2.7.7:1.4.1:4.1.2:5.4.2:1.2.4 +2272 1.1.1:2.3.1:4.1.2:6.3.2:2.7.1:4.2.1:2.3.1:3.4.11:2.7.2:5.4.2:3.1.3 +2273 2.7.1:4.3.2:3.1.1:2.7.1 +2274 3.5.1:2.7.4:4.4.1:1.5.1:4.2.1:5.4.2 +2275 1.14.13:1.1.1:1.3.99:2.1.1:2.7.7:4.1.1:1.3.99 +2276 5.1.3:2.3.1:1.3.99:5.4.3:2.7.6:4.2.1:1.1.1 +2277 3.2.1:4.1.1:2.7.4:2.8.1 +2278 3.5.2:5.1.1:2.3.1 +2279 1.2.1:2.7.2 +2280 4.3.2:2.4.2:2.7.1 +2281 1.3.99:3.5.1:3.5.4:1.1.1 +2282 1.14.13:1.1.1:1.1.1:2.7.7:2.5.1 +2283 3.5.1:5.4.2:1.5.1:2.1.2:2.3.1 +2284 4.2.-:1.3.99:4.1.1:1.2.1:2.7.4:1.2.1:4.4.1:2.7.1 +2285 2.1.1:2.7.1:4.1.2:1.4.1:2.4.2 +2286 6.3.4:2.3.1:5.4.2:2.7.4:3.5.4:5.1.3:5.3.3 +2287 6.3.4:6.3.4:4.3.1 +2288 1.1.1:2.2.1:3.6.1:1.1.1:5.3.1 +2289 3.2.1:2.1.3:1.17.4:2.7.1:1.2.1:2.5.1 +2290 6.3.4:1.7.2:1.2.1 +2291 3.5.3:1.2.1 +2292 4.1.3:1.1.2:2.7.8:1.3.3:2.3.1:4.1.1:1.2.1:6.3.5 +2293 4.2.1:1.1.1:2.5.1:4.2.3:1.3.1 +2294 1.3.3:3.5.1:2.7.8:2.7.7:5.3.1:1.1.1:4.3.2:3.1.2 +2295 3.1.1:2.3.1:3.1.3:4.3.1:2.3.1:2.6.1:3.5.1:2.7.2:4.3.2:2.6.1:2.7.7:2.3.3 +2296 2.1.3:5.3.1:4.4.1:6.3.4 +2297 2.3.3:1.2.5 +2298 3.4.11:4.1.3:3.1.3:2.7.1:1.1.1 +2299 2.7.4:4.3.2 +2300 2.7.1:2.7.2:5.3.1:1.3.99:2.1.1:5.4.99:1.2.1:5.4.99 +2301 2.5.1:4.3.1:1.4.3:2.4.2:2.3.1 +2302 2.1.2:2.6.1 +2303 4.1.1:2.4.2:4.3.1:2.5.1:2.3.1:2.5.1:3.6.1 +2304 6.3.3:2.5.1:1.7.2:3.2.1:4.3.1 +2305 2.3.1:4.2.-:4.2.1:2.7.2:4.3.2:1.17.4 +2306 5.3.1:6.3.4:4.4.1:2.4.2:4.1.3:4.1.1:1.2.1:2.7.1:2.7.1:1.8.1 +2307 1.4.99:2.1.1 +2308 3.1.3:4.1.1:3.1.4:2.7.1:1.1.1 +2309 5.4.2:9.9.9:4.2.1:3.1.2 +2310 6.1.1:2.7.9:1.2.1:4.1.1:4.1.1:5.4.2:6.3.2 +2311 3.1.3:2.7.7:2.4.2:3.1.3:2.5.1:3.5.3 +2312 5.1.2:2.4.1:4.1.1:2.4.2 +2313 6.3.4:1.2.1 +2314 4.2.1:1.4.1:6.3.4 +2315 1.2.4:6.3.4:6.3.4:5.1.3:4.3.2 +2316 5.4.2:6.3.3:4.3.1:2.7.1:4.2.1:9.9.9:3.5.3:1.5.1:1.2.1 +2317 2.1.4:4.2.-:2.8.1:3.5.4:3.5.99:2.6.1:4.2.1:3.2.2 +2318 1.2.1:2.3.1:2.7.6:5.3.1:4.1.3 +2319 6.3.2:6.3.4:2.5.1:1.5.1:2.1.4:4.1.1:5.4.2:1.1.1:2.7.1:4.1.3:2.3.1:1.2.1 +2320 2.5.1:2.5.1:2.3.1:2.7.2:1.7.2:6.3.3 +2321 2.1.2:1.8.1 +2322 9.9.9:1.1.1:2.5.1:3.5.4:1.1.1:2.3.1 +2323 4.4.1:2.7.6:2.6.1:3.4.11:2.4.1:1.1.1:5.3.1 +2324 1.2.1:2.3.1:2.1.3:1.-.-:4.4.1 +2325 2.7.1:1.1.1:3.6.1:1.5.1:5.3.1:4.3.2:1.2.1 +2326 2.7.2:2.7.1:2.4.2:2.5.1 +2327 3.5.4:2.7.6:2.1.2 +2328 4.2.1:1.1.3 +2329 2.1.3:1.2.1:3.2.2:2.7.1 +2330 5.4.3:3.5.1 +2331 4.2.1:2.5.1:4.1.1:6.3.2:2.1.1 +2332 1.5.99:2.7.6:6.3.4:2.7.1:4.2.1:2.1.3 +2333 2.3.3:4.2.1:2.6.1:4.3.1:6.3.5:6.3.1:1.1.1:2.7.7:2.7.1:3.3.1:4.3.2:6.3.2 +2334 3.2.1:1.2.1:5.3.1:2.7.7:2.6.1:2.6.1:2.7.8 +2335 1.14.13:1.1.1:2.7.1:2.3.1:4.1.1:2.7.4:3.2.1:2.5.1 +2336 4.3.1:2.5.1 +2337 2.7.2:2.5.1:5.4.2:1.4.1:4.1.2:4.1.1 +2338 1.4.1:4.2.3:6.3.3:6.3.4:1.5.1:1.2.1:1.1.1:4.1.1:2.5.1 +2339 3.1.2:3.1.3:4.1.1:2.7.2 +2340 1.8.1:4.3.2:2.3.1 +2341 2.5.1:2.7.1:4.3.1 +2342 2.6.1:2.3.1:2.3.1:2.7.1:2.7.4:2.1.2 +2343 3.5.3:1.1.1:3.1.3 +2344 2.4.2:2.3.1:2.3.3:4.1.1:1.2.4:2.4.1:2.7.8:2.7.7 +2345 6.3.4:1.1.3:2.7.1:1.3.99:2.1.1:3.5.2 +2346 2.7.1:2.7.2:4.1.2:3.7.1:2.7.2:3.5.3:4.4.1 +2347 2.5.1:2.7.7:2.7.1 +2348 1.14.13:1.1.1:4.3.2:5.3.1:6.3.2:2.7.2:2.7.7:6.3.4 +2349 4.3.2:2.5.1:2.5.1 +2350 2.5.1:6.3.3:2.7.1:6.3.4:4.3.1:2.6.1:4.1.3 +2351 2.2.1:5.4.1:4.2.1 +2352 2.7.4:5.3.1:2.8.1:3.5.1:3.5.1:6.2.1:2.6.1 +2353 6.3.2:2.4.2:2.1.3:2.6.1:3.5.1:2.1.3:3.6.1 +2354 2.1.3:2.4.2:2.3.3 +2355 4.2.3:2.4.2:2.6.1:2.1.2 +2356 4.4.1:4.1.3:4.1.1 +2357 6.3.5:3.5.1:2.7.1:2.5.1:2.8.3:3.5.3:2.7.1 +2358 6.2.1:3.1.3:6.3.4:4.2.1:1.14.12:3.4.13:4.1.1:1.1.1:1.4.99:1.7.99 +2359 2.4.2:4.4.1:1.2.1 +2360 6.3.2:3.5.3:4.2.1:4.1.1:1.1.5 +2361 1.2.1:1.1.1:2.3.1:4.1.1:1.1.1 +2362 2.7.4:4.2.1:2.7.8:4.3.1 +2363 2.5.1:2.1.3:1.2.1:4.1.1:2.4.1:1.1.1:1.8.1:4.3.2:2.7.1:1.1.-:1.2.1 +2364 1.5.1:1.1.1:1.3.99:2.6.1:2.1.3:2.7.6:2.7.6:1.2.4 +2365 2.7.7:1.4.1:5.4.2:3.1.3:2.3.1:5.4.2:3.5.1:3.5.1:2.7.1 +2366 2.5.1:3.5.4:2.5.1:3.2.1:2.1.3:4.4.1 +2367 4.2.1:2.1.2:3.6.1:3.5.1:1.13.11:1.1.1 +2368 1.2.1:1.7.2:1.5.1:2.7.1:2.3.1:3.5.4 +2369 2.3.3:3.6.1:2.3.1:3.5.2:2.7.4:2.7.1:2.2.1 +2370 4.3.1:9.9.9:1.2.4:4.3.1:2.1.2 +2371 2.5.1:3.5.1:2.5.1:4.3.1:6.2.1 +2372 1.5.1:6.3.2:4.1.1:2.1.3:1.3.1:2.7.1:3.5.4:3.6.1:5.1.2 +2373 5.4.2:3.5.3:4.2.3 +2374 2.4.2:4.3.2:2.7.7:1.14.13 +2375 1.2.1:3.1.3:2.4.2:2.4.2:4.2.3:3.5.3:2.4.2:2.1.2:2.7.1 +2376 3.4.13:4.3.1:2.4.1:6.3.4 +2377 3.5.3:1.2.1:4.2.1:1.2.1:4.1.2:2.7.2 +2378 3.5.1:2.7.6 +2379 1.4.1:3.1.4:1.2.1 +2380 2.5.1:3.5.4:3.1.3:3.1.4:4.1.1 +2381 4.3.2:4.1.1:2.7.7 +2382 3.5.1:3.5.1:2.3.1:1.8.1 +2383 1.5.1:5.4.2:4.4.1:6.3.3 +2384 2.7.2:3.1.3:3.5.1:2.3.1:2.3.3:2.6.1:6.3.4 +2385 2.4.2:3.5.1:4.2.3:9.9.9:3.8.1:3.2.2 +2386 3.1.3:1.3.99:4.1.1:4.2.1:1.13.12:3.1.3:6.3.4:3.5.2 +2387 4.3.2:1.4.3:2.4.2:2.4.2 +2388 4.2.1:4.1.1:4.1.1:6.3.4:2.3.1 +2389 5.3.1:2.4.2:5.1.3 +2390 3.1.2:2.3.1:1.11.1:6.3.4:4.1.1:2.2.1 +2391 6.3.2:2.8.3:4.1.1:1.7.2:3.5.1:2.1.1:3.1.2:1.14.11:2.7.1 +2392 1.2.4:2.5.1:6.3.3:6.2.1:4.1.1 +2393 2.7.2:2.5.1:4.4.1:1.4.1:2.7.1:4.4.1:1.5.1:2.3.1 +2394 2.5.1:6.3.5:6.3.5:4.1.3 +2395 4.2.1:4.3.2:4.1.1:2.1.2 +2396 2.2.1:1.2.1:2.3.3:2.7.1:2.7.1 +2397 3.1.4:2.3.1:4.1.1:3.5.1:1.2.4:2.6.1:4.3.2:4.1.1:2.4.1:3.5.3:4.3.1 +2398 3.6.1:5.4.1 +2399 2.1.3:2.2.1:4.1.1 +2400 1.2.1:3.1.1:2.6.1 +2401 3.5.3:2.6.1:1.5.1:2.7.8 +2402 2.6.1:4.2.1:3.5.1 +2403 1.2.1:2.4.2:2.3.1:2.7.2 +2404 3.2.2:2.5.1:2.7.1:3.5.4:1.17.4:1.2.1 +2405 1.5.1:5.4.2 +2406 1.2.5:5.1.2:4.4.1:2.7.1:4.1.2:1.1.1:2.6.1:1.1.1 +2407 5.4.99:4.2.1:2.3.3:1.17.1:3.2.2:2.4.1 +2408 4.1.1:2.7.2:2.7.1:1.4.1:2.7.1:6.3.4:2.6.1:1.13.11:1.3.99:3.5.2:2.5.1:6.3.5 +2409 3.1.3:1.1.1:1.2.1:2.1.2:1.1.2:1.5.1:2.5.1 +2410 2.6.1:1.1.1:3.2.2 +2411 2.7.7:4.1.3:1.5.1:1.17.4:4.1.1:1.8.1:4.1.1 +2412 2.4.1:2.3.3:1.2.1:2.6.1:4.1.1:3.5.3 +2413 2.6.1:4.4.1:2.1.1:2.1.3:2.6.1:6.3.2:2.7.1:1.1.1 +2414 2.1.2:1.5.1:4.2.1:2.4.2:4.2.1:4.3.1:6.3.4:4.1.1 +2415 4.1.1:2.7.1:1.4.4 +2416 1.11.1:2.7.6:2.1.3:2.7.1 +2417 5.1.1:9.9.9:2.7.1 +2418 4.2.1:3.5.4:1.1.1:2.6.1:2.4.2 +2419 5.4.1:2.1.2:1.5.1 +2420 4.1.3:2.7.7:1.1.1:2.7.1 +2421 1.2.1:2.7.2:5.4.2:5.3.1:4.2.1:2.7.2:2.1.2:2.8.1 +2422 1.2.1:5.4.2:4.1.2:1.-.-:3.1.3:2.5.1 +2423 2.7.1:4.1.2:3.5.1:3.2.2 +2424 5.4.99:6.4.1:2.7.7:6.2.1:2.3.1:1.1.2 +2425 1.4.1:1.13.11 +2426 5.3.1:1.4.1:1.2.4:6.3.1 +2427 1.1.5:2.7.2:4.1.1 +2428 6.3.2:2.3.1:6.3.4:1.3.99:2.1.1 +2429 1.1.1:3.6.1:2.3.1:4.4.1:4.1.1:4.2.1 +2430 5.4.99:3.4.13 +2431 5.4.2:2.3.3:4.99.1:1.17.1:6.3.4:1.5.1:2.6.1:2.3.1:2.6.1:2.7.2:3.3.1:3.5.3 +2432 2.3.1:2.1.2:5.1.3 +2433 2.3.1:3.2.1:2.3.1:1.1.1:2.3.1:4.1.1:3.1.1:4.2.3:2.5.1 +2434 2.7.1:1.5.1:4.3.1:1.13.12:2.7.1:4.3.2:2.4.2:2.4.1:1.2.1:2.7.6:4.1.1 +2435 6.3.2:4.1.1:4.2.-:2.8.1:2.7.4 +2436 5.4.99:1.5.1:3.5.3:1.1.5:1.14.99 +2437 2.6.1:4.1.2:2.7.1 +2438 4.1.1:2.1.1:2.3.1:3.2.2:1.4.1:6.3.4:4.2.1:5.4.2:2.1.2:2.3.1:2.6.1:1.2.1 +2439 2.3.1:4.2.1:1.1.1:2.7.2 +2440 4.2.1:2.7.2:2.7.1:6.3.5:5.3.1 +2441 2.3.1:2.1.3:4.3.2:4.3.1:2.1.2:3.1.3 +2442 4.1.1:1.4.1:2.7.1 +2443 6.3.2:1.2.4:1.7.99:6.3.4:2.6.1:4.2.1 +2444 2.3.1:6.3.4:2.7.2:4.1.2:6.3.2:2.7.1:4.4.1:2.1.2:3.5.3:1.2.1 +2445 1.5.1:6.3.4:2.6.1:4.3.1:3.5.1:1.8.1:4.2.3:4.3.1 +2446 2.7.1:3.5.4:5.1.3 +2447 2.7.2:2.7.1:3.5.1:1.5.1 +2448 1.8.1:4.1.2:5.1.1:4.1.1 +2449 1.18.6:3.5.4:2.3.1:4.2.-:5.4.99:2.1.2 +2450 1.2.1:6.3.4:4.4.1:6.3.4:2.6.1:2.4.2:1.5.1 +2451 4.4.1:5.3.1:3.1.3:1.1.1:3.5.1:2.7.1:2.5.1:2.1.2:5.3.1 +2452 2.1.2:1.-.-:1.2.4:6.3.1:4.1.2 +2453 2.1.3:6.3.5:2.3.1:2.7.1:2.1.2:1.2.1:1.5.1 +2454 2.3.3:4.3.2:2.4.2:6.2.1 +2455 2.3.1:4.6.1:3.1.4 +2456 1.5.1:3.5.2:4.1.1:1.3.99:2.7.1:2.7.1:6.2.1 +2457 6.3.5:2.7.7:4.1.1:3.2.2:4.1.1 +2458 5.3.1:2.4.1:2.5.1 +2459 2.7.7:4.1.1:2.6.1:6.3.1:6.3.5:2.1.2:1.13.11:2.4.2:2.6.1 +2460 2.7.8:1.1.2:4.1.1:2.7.1:1.1.1:4.3.2 +2461 2.7.9:5.4.99:1.8.1:3.1.1:3.5.3:2.7.1:4.1.3:2.7.1 +2462 1.1.1:2.4.2:2.7.4 +2463 3.5.1:6.6.1:1.4.4 +2464 6.3.2:1.1.1:3.5.1:3.2.1:3.5.1 +2465 5.4.99:2.7.7:4.3.1:4.2.1:2.3.1 +2466 1.5.1:6.3.4:2.4.2:2.7.7:5.3.1:3.1.2:6.3.5 +2467 2.7.1:4.2.1:2.1.2:2.5.1:2.6.1 +2468 4.3.2:3.6.1 +2469 5.4.2:4.4.1 +2470 3.6.1:2.5.1:3.1.3:2.6.1:4.1.2:2.2.1:2.8.1 +2471 5.3.1:3.2.2:1.1.1:2.5.1:1.11.1:2.3.1 +2472 2.1.2:5.4.99:1.3.1:2.4.2:2.6.1:4.2.1 +2473 6.3.4:3.4.13:3.5.1:2.7.1 +2474 2.4.1:1.1.1:3.5.3 +2475 1.4.1:2.7.1 +2476 2.1.2:6.3.5:1.11.1:3.4.13:2.1.1 +2477 6.3.1:5.3.1:3.6.1 +2478 4.3.2:2.3.1:1.1.1:2.7.2:2.3.1 +2479 2.4.1:2.5.1:2.1.2:5.4.2:2.1.1 +2480 6.3.4:2.4.2:6.1.1:4.1.1:4.3.1:1.1.1:1.1.1 +2481 6.3.4:1.4.3:3.5.1 +2482 6.2.1:2.7.4:2.7.4:2.3.1:9.9.9 +2483 1.1.1:4.2.1:4.3.1:1.1.1 +2484 4.1.1:4.1.1:5.4.2:3.1.3 +2485 3.1.3:2.7.2:9.9.9:1.2.1:3.1.3:6.3.4:1.5.1:4.3.2 +2486 5.1.3:2.1.1:6.3.1:1.1.1 +2487 2.7.4:1.1.1:1.1.1:1.4.1:2.3.1 +2488 4.3.2:6.3.5:2.1.1 +2489 1.2.1:6.3.3:1.3.99:3.6.1:2.3.1:2.6.1:2.4.2:2.7.9:2.6.1:3.5.4 +2490 2.5.1:5.4.2:2.5.1:3.1.3 +2491 6.3.2:5.4.99:2.5.1 +2492 4.3.1:2.7.8:2.6.1:6.3.2:2.7.2:2.7.1:5.4.99 +2493 4.1.3:4.1.2:4.3.1:4.3.1:4.1.1 +2494 3.1.5:4.4.1:4.2.1:6.1.1 +2495 2.7.1:5.1.2:1.2.1:2.4.2:4.2.1:5.1.1:2.6.1:2.6.1 +2496 4.3.1:3.6.1:1.7.99:2.7.4:1.2.1:2.3.3:1.3.1:1.1.1:2.5.1:1.5.1:2.4.2:2.7.1 +2497 6.3.2:4.1.2 +2498 4.3.1:4.2.1 +2499 2.1.1:2.7.1 +2500 2.7.6:6.3.4:2.7.1:2.7.4 +2501 2.3.1:4.2.3:6.3.3 +2502 1.1.1:2.3.3:4.2.1:1.7.2:2.3.1 +2503 1.14.-:1.4.4:3.1.4:1.2.1:2.6.1:2.3.1:1.5.1:2.3.1 +2504 2.7.4:1.1.1:2.1.1:1.8.1 +2505 2.5.1:1.1.1:3.5.1:4.2.1:3.1.3 +2506 2.6.1:2.3.1:4.1.3:1.1.1:3.1.3 +2507 1.5.1:1.4.4:1.5.1:6.3.4 +2508 4.1.1:5.3.1:6.3.3:2.6.1:2.1.2:2.6.1:1.14.12:5.1.3 +2509 5.4.2:4.1.1:2.7.2:4.1.1:4.4.1 +2510 1.1.2:4.1.1 +2511 2.7.1:6.3.4:4.3.2 +2512 2.7.1:6.3.5:4.1.2:2.7.4:2.6.1:3.1.1 +2513 4.4.1:3.5.1:2.7.1:2.6.1:4.4.1:2.5.1:2.3.1 +2514 5.3.1:2.6.1:3.5.1:2.5.1:1.8.1:3.1.3:1.2.4 +2515 4.2.1:2.6.1:2.7.6 +2516 2.7.1:2.1.3:4.3.1:4.2.3 +2517 1.4.1:4.1.1:2.3.1:2.1.1:1.2.1:2.6.1:3.5.1:2.6.1:3.5.4 +2518 4.1.1:2.7.7:2.7.1:4.2.1:2.1.2 +2519 1.1.1:1.2.4:1.3.1:4.2.1:2.3.1:2.1.3:2.7.1:3.2.1:3.5.3:2.2.1 +2520 1.5.1:1.2.4:4.1.1:5.4.2 +2521 6.3.2:2.7.7:2.4.2:5.3.1:4.4.1:2.1.3:2.7.1:2.7.2:2.7.7:1.3.99:6.3.4 +2522 6.3.4:3.4.13:4.3.2:3.1.3:2.6.1 +2523 4.1.1:1.1.1:1.18.-:2.5.1 +2524 1.3.1:2.7.1:5.4.2 +2525 3.1.3:3.5.4:1.1.1:1.3.1:2.7.2 +2526 2.7.2:1.4.1:1.5.1:2.5.1:2.3.1 +2527 2.7.4:2.1.2 +2528 2.7.6:2.4.1:2.4.2:2.7.7:6.3.5 +2529 2.4.2:6.2.1:2.7.1:2.3.1:3.3.1 +2530 6.3.1:2.4.2:4.1.2 +2531 3.5.4:4.3.1:6.3.2 +2532 2.6.1:2.5.1:5.3.1 +2533 3.5.1:4.3.2:5.3.1:6.3.4:6.6.1:2.7.2:3.5.1:1.2.1:2.7.1:2.7.2:2.7.7 +2534 1.2.1:6.3.4:2.1.1:3.4.11:1.18.6 +2535 2.6.1:1.2.1:3.1.2:3.1.3:1.3.99 +2536 2.7.1:3.5.1:2.3.1:2.7.4:1.7.1:3.8.1 +2537 6.3.5:3.5.3:4.2.1:2.7.6:3.5.1:9.9.9 +2538 2.5.1:3.2.1 +2539 2.7.1:1.2.7:2.5.1:2.7.7 +2540 2.4.2:1.3.99:1.1.1:4.4.1:3.4.11:2.4.2:4.1.2:2.5.1:2.7.1:3.4.11 +2541 2.5.1:1.5.1:2.3.1 +2542 3.5.1:3.5.1:6.4.1:2.7.1 +2543 5.4.99:2.7.4:2.3.1:5.1.1:4.2.1:2.4.2:2.1.2:4.1.1:6.3.1:1.5.1:2.7.1:2.7.1:1.13.11 +2544 4.3.1:4.1.1:4.4.1:3.5.1:1.2.1:3.5.1 +2545 6.3.2:3.6.1:2.1.2:5.4.2:1.8.1:6.3.5 +2546 2.4.2:4.1.2:2.6.1:1.-.-:4.3.2:3.1.1:2.4.2 +2547 1.2.1:3.2.1:3.5.1:6.3.4 +2548 6.3.4:6.6.1 +2549 1.2.1:2.3.1:5.4.2 +2550 3.2.1:2.1.3:1.5.1 +2551 2.7.7:2.7.1:4.1.2:1.1.2:4.1.2 +2552 5.4.2:2.1.3:4.1.2:3.1.3:4.2.1 +2553 5.4.2:3.5.1:5.3.1:5.4.3:2.7.2 +2554 1.4.1:5.3.1:3.5.1:2.4.2:1.2.1 +2555 2.7.2:4.1.3:3.1.3:1.5.1:1.5.1:4.2.1 +2556 4.2.3:6.3.3:6.3.2:3.6.1:1.4.1:2.7.7 +2557 4.1.1:4.1.3:4.2.1 +2558 4.2.1:5.3.1:4.2.1:5.4.2 +2559 1.2.1:2.1.1 +2560 4.2.1:4.3.2:3.1.1:4.1.1:3.2.1:2.1.1:4.2.3 +2561 6.3.3:3.5.3:2.3.1 +2562 2.3.1:3.1.2:4.3.2:6.2.1:2.3.1 +2563 6.3.3:3.4.13:2.7.1:4.3.2:3.2.2:6.1.1:1.2.1:6.2.1:2.6.1 +2564 1.2.1:2.6.1:1.1.1:1.4.3:3.6.1:2.7.1:2.3.1 +2565 6.3.5:4.2.1:6.3.1:3.5.1:9.9.9:4.2.1:2.7.1:4.1.2:1.7.99 +2566 1.1.5:6.3.2:4.1.1:2.3.1:2.2.1:5.4.99:2.4.2:4.1.2:2.6.1 +2567 2.7.4:2.3.1:1.5.1:2.7.4:3.5.1:1.4.3 +2568 2.1.3:9.9.9:1.2.1:2.5.1:3.5.1:6.3.2 +2569 1.1.5:9.9.9:2.7.2:5.4.2 +2570 3.5.3:1.2.1 +2571 2.7.1:4.2.1:2.7.1:2.8.1:3.1.3:3.6.1:4.1.2:4.1.2 +2572 4.2.1:2.1.3:2.7.8:2.7.1:4.2.1 +2573 2.7.1:4.2.1:2.3.1:2.3.1:2.7.1:2.1.1 +2574 4.1.1:1.2.1:2.7.2 +2575 1.1.1:2.3.1:4.1.2:3.5.3:2.7.1:1.5.99:2.6.1 +2576 1.8.1:2.1.2:2.1.2:6.3.4:2.3.1 +2577 2.6.1:6.3.3 +2578 2.7.8:2.7.2:4.1.1 +2579 4.2.3:6.3.4:6.3.3 +2580 5.3.1:4.3.1:6.3.4:1.17.4:2.7.7:3.1.1:2.1.2:2.7.8 +2581 4.3.2:2.7.4:5.1.3:4.1.2:2.7.7:3.5.2 +2582 2.7.1:1.2.1:3.1.3:5.4.99:2.7.1:4.1.2 +2583 5.4.2:2.6.1:2.7.1:4.2.3:2.1.3:3.1.3 +2584 1.2.1:4.2.1:2.3.1:4.1.1:4.2.1:2.7.6:2.3.3 +2585 1.4.3:1.1.1:2.4.2:1.8.7:3.1.3 +2586 4.1.1:2.3.1:6.3.3:2.6.1:2.3.3:5.3.1 +2587 1.1.1:4.1.3:1.8.1:2.7.6:2.7.1:1.1.1:1.5.1 +2588 1.5.1:1.1.1:5.3.1:2.3.1 +2589 1.1.1:2.4.2:2.3.1:3.5.1:3.6.1:2.4.2 +2590 4.4.1:4.3.2:6.3.5:2.6.1 +2591 2.7.2:2.3.3:2.3.1:2.7.1:1.3.3:4.2.3:4.2.1:6.1.1 +2592 2.7.1:3.6.1 +2593 2.4.2:2.7.2:2.1.2:1.1.1 +2594 3.1.3:2.7.1:4.1.3:2.7.2:6.3.5 +2595 2.7.4:6.3.4 +2596 4.1.2:2.6.1:2.6.1:1.7.1 +2597 4.2.1:3.1.3:2.1.1:2.7.4:2.3.1 +2598 6.3.2:3.5.3:2.3.1:2.1.1:2.7.4:3.2.1:6.3.1 +2599 3.5.1:6.3.4:5.1.2:2.6.1 +2600 6.3.3:2.4.2:2.5.1:4.3.1:3.6.1 +2601 2.6.1:4.1.1:1.1.1:3.5.1:3.1.3:5.4.2:2.3.1 +2602 4.1.2:2.3.1:2.1.3:6.3.2:3.1.2 +2603 4.4.1:2.3.1:2.3.1:4.2.1:2.7.1 +2604 5.4.2:6.3.3:3.6.1 +2605 2.7.1:1.5.1:2.3.1:1.2.1:6.3.2:2.3.1 +2606 3.6.1:3.2.1:5.3.1:1.7.2:4.3.2:2.7.7 +2607 5.4.99:5.3.1:2.7.1 +2608 2.7.1:2.3.1:1.1.1:4.4.1:2.7.1:3.6.1:6.3.3:5.4.99 +2609 2.5.1:2.1.2:2.5.1:2.7.7:5.4.99:3.3.1 +2610 4.1.3:3.1.3:2.4.1:6.3.5 +2611 1.2.4:2.4.1:1.1.1:2.7.1:6.2.1:2.5.1:3.5.3 +2612 2.6.1:2.7.1 +2613 1.17.4:3.5.1:4.4.1:2.7.7:2.6.1 +2614 2.7.1:1.1.1:1.5.1:3.6.1:2.4.1:2.4.1 +2615 2.7.7:3.5.1:2.1.3:5.4.1:2.1.3:5.4.2:3.1.5 +2616 2.3.1:4.2.1:2.3.1:2.3.1:4.4.1 +2617 2.7.7:2.3.3:5.4.2:2.1.1:2.3.1:1.13.11 +2618 4.4.1:5.4.2:3.1.4:1.1.1:4.2.3:4.1.1:1.1.1:2.7.6 +2619 2.2.1:3.6.1:2.1.2:2.2.1:2.7.2 +2620 2.7.7:6.3.2:6.3.5:3.2.2:2.6.1:2.1.1 +2621 3.3.1:3.5.1:1.5.1:6.3.2:2.7.4:1.7.1:2.7.4 +2622 1.1.1:4.2.1:3.1.3:1.4.3:3.2.2:1.2.1:2.7.2 +2623 1.5.3:2.6.1:2.5.1:4.2.1 +2624 2.7.8:3.2.1:1.13.11:3.6.1:4.4.1 +2625 6.3.3:2.7.1:2.6.1:1.1.1:2.7.2:2.7.7 +2626 1.5.99:6.3.2:2.7.2:4.3.2:6.2.1 +2627 3.5.3:1.1.1:4.4.1 +2628 3.5.4:2.7.1:2.3.1 +2629 1.3.99:2.7.1:4.2.1:4.2.3:2.7.1 +2630 2.4.2:2.7.1:5.3.1:3.5.1 +2631 2.5.1:1.4.1:3.5.1:1.7.99:2.3.1:6.3.3:1.2.1:4.1.2:2.7.7 +2632 4.1.1:3.5.1:2.4.2:2.7.1:2.3.1:1.17.4:1.5.1 +2633 2.6.1:1.3.1:6.3.3:2.7.2:4.2.3 +2634 4.2.1:2.5.1:2.7.4:2.6.1:4.4.1:2.1.3:3.4.13 +2635 6.3.4:3.1.3:2.4.1:2.5.1:1.17.1:1.1.1:4.1.1:5.4.2 +2636 5.3.1:2.7.4:2.7.1 +2637 4.4.1:4.1.2:6.1.1:4.2.3 +2638 2.6.1:2.5.1:6.3.3 +2639 4.3.1:1.1.1:3.1.3 +2640 3.5.1:4.3.1:3.6.1:1.2.1:5.1.2:6.3.4 +2641 3.1.3:5.4.2:2.7.2:6.3.4:2.7.7 +2642 4.3.2:4.1.1:2.3.1:2.1.2:1.2.4:4.2.1 +2643 1.13.12:2.3.1:3.6.1:2.7.7:3.5.3 +2644 2.7.1:3.5.2:6.3.4:1.2.1:2.3.1 +2645 4.1.1:2.2.1 +2646 4.1.1:2.7.1:2.2.1:5.3.1:1.5.1:4.4.1:1.4.1:3.6.1:2.1.2 +2647 2.8.1:5.3.1:1.1.2 +2648 2.4.2:3.5.1:4.2.1:1.2.4 +2649 2.3.1:1.5.99:2.7.1:2.3.1 +2650 2.6.1:2.1.2:4.1.1:3.4.11:1.2.1:1.17.4:4.2.3 +2651 2.4.2:2.6.1:1.13.11:5.1.3:2.4.2:4.2.1:3.5.1 +2652 2.1.2:4.1.1:6.3.4:1.4.1:2.7.7 +2653 2.3.1:2.3.1:6.3.3:1.4.3:5.1.3:2.7.1:2.3.1:5.3.1:1.2.1:2.5.1 +2654 1.1.1:2.7.2:1.1.5:2.3.1 +2655 1.2.1:2.6.1:4.1.2:2.1.2 +2656 6.3.5:2.7.1:4.4.1:1.5.99 +2657 5.4.99:2.1.2:3.5.99:4.1.3:6.3.4:2.7.4 +2658 6.2.1:2.7.7 +2659 4.3.1:3.5.3:4.2.1:6.3.4:4.1.3:5.1.3:4.1.1 +2660 4.3.1:3.1.3:2.1.2:3.2.2:4.1.2:2.3.1:5.3.1:1.1.1:2.5.1 +2661 2.6.1:2.6.1:2.7.7:2.3.1:2.6.1:2.5.1:2.3.1:2.7.2 +2662 2.3.3:1.1.1:6.3.1:2.3.1:4.1.1:1.2.1 +2663 2.7.2:4.1.1:2.7.4:3.2.1:1.5.1:2.6.1:3.5.3:1.1.1:2.3.1 +2664 4.2.1:4.1.1:1.2.1:2.7.2 +2665 2.5.1:5.4.2:3.1.3:1.14.13:2.6.1:1.2.4:2.4.2:4.2.1:1.13.12:4.1.1:6.2.1:2.4.2 +2666 2.7.4:2.3.1:1.2.1:4.2.1:3.5.1 +2667 6.3.4:4.3.2:4.2.1:6.3.4:3.5.1:1.1.1:3.5.1 +2668 4.3.2:9.9.9:4.6.1:6.3.5:4.2.1 +2669 1.14.13:2.5.1:2.6.1 +2670 1.2.4:4.4.1 +2671 2.3.1:4.1.1:2.1.1:1.2.1 +2672 3.5.2:2.7.7:2.7.1:3.1.1:2.1.2 +2673 2.5.1:3.1.5:4.1.1 +2674 6.3.4:3.5.1:2.2.1:9.9.9 +2675 1.1.1:4.99.1:1.7.2:2.1.1:1.4.3 +2676 6.3.4:2.3.1:4.4.1:3.5.1:4.1.3 +2677 2.7.2:1.2.1:3.1.3:5.1.3:4.3.2:1.1.1:2.5.1 +2678 2.7.1:3.2.1:2.1.2:4.2.1:2.3.2:4.3.2:1.2.1 +2679 1.8.1:2.7.1:2.8.1:1.4.1:1.5.99:3.6.1:4.3.1 +2680 2.3.1:2.6.1:2.7.1:6.3.1:3.5.1 +2681 1.1.1:4.2.1:4.1.2:4.2.3 +2682 2.7.1:4.3.2:2.3.1:4.2.1:1.2.1:4.4.1 +2683 1.14.15:1.5.1 +2684 2.4.1:4.4.1:2.3.1:2.7.2:2.7.4:4.3.1:2.1.1:1.7.1:4.2.1:1.1.1:4.1.1:2.7.4 +2685 2.5.1:6.3.4:3.5.1:6.3.5 +2686 2.3.3:3.2.1:2.7.1:6.3.5 +2687 2.5.1:2.7.7:3.5.2:5.4.2:1.1.1 +2688 3.2.1:2.7.8:5.3.1 +2689 2.2.1:1.2.4:3.5.1 +2690 1.5.99:2.7.1:3.5.3 +2691 4.4.1:2.7.1:1.5.1:2.5.1:2.6.1:5.3.1 +2692 2.5.1:6.3.4:2.1.1:3.5.1:2.7.2 +2693 2.7.1:2.1.2:1.1.1 +2694 1.7.1:9.9.9:2.5.1:4.1.1 +2695 2.3.1:1.1.1:2.3.3:2.7.1:4.1.1:2.5.1:2.7.1:6.3.2:2.4.2 +2696 2.7.4:1.13.11:3.5.1:2.3.1:4.3.1:3.5.3 +2697 3.2.2:4.3.2:6.3.2 +2698 2.5.1:2.7.4:4.3.2 +2699 1.17.4:3.5.4:4.3.2 +2700 4.1.1:3.1.3:2.7.2:1.5.1:1.1.1:2.7.4:6.3.2:2.6.1 +2701 4.1.1:3.2.2:5.1.3:3.5.3 +2702 3.5.3:4.1.3:2.7.7:2.7.1 +2703 5.4.2:3.5.1:4.3.2:6.2.1:4.1.1:2.5.1:2.3.1:1.7.99:4.1.1:2.7.8 +2704 2.3.1:1.5.1:2.5.1:4.3.2 +2705 2.7.1:3.1.4:1.3.99:3.5.1:3.1.3:4.2.1:3.5.2:4.2.3 +2706 2.5.1:4.4.1:2.7.7:2.1.4:5.3.1:4.1.3 +2707 2.8.1:4.3.1:2.7.1:2.3.1 +2708 4.1.2:4.1.3:6.3.5 +2709 3.1.3:4.1.2:1.1.5:2.1.2:1.4.3 +2710 3.5.3:5.3.1:1.4.1 +2711 1.2.1:2.1.1:4.4.1 +2712 5.4.2:5.4.99:1.3.1:3.1.3:1.3.99 +2713 1.1.1:3.4.11:3.5.4 +2714 1.2.1:1.1.5:4.4.1 +2715 4.2.1:6.3.1:1.2.1:5.3.1:2.7.2:2.8.1 +2716 3.6.1:2.6.1:2.6.1:1.1.1 +2717 1.4.99:4.2.1:2.7.2:2.7.7:2.6.1:2.3.1:5.1.2 +2718 2.7.6:1.4.3:2.7.1:1.1.1 +2719 2.1.2:2.1.1 +2720 4.1.1:4.1.2 +2721 4.3.2:3.1.4 +2722 4.1.1:3.2.1:6.3.4:4.3.1:1.1.1 +2723 2.7.7:3.7.1:2.7.4:2.6.1:2.7.1:2.3.3 +2724 1.1.1:2.7.6:2.3.1:2.6.1 +2725 3.2.2:2.4.2:4.1.3:2.7.7:6.2.1 +2726 4.1.2:4.6.1:4.3.2:4.2.1:3.5.1:4.2.1 +2727 3.1.4:6.3.4:2.7.2:2.3.1:2.7.1:1.1.1 +2728 6.2.1:2.1.3 +2729 3.1.3:1.1.1:3.6.1:4.3.1:3.5.1 +2730 3.2.2:2.4.1:3.6.1 +2731 1.1.2:1.1.1:2.4.2:4.3.2 +2732 1.2.1:5.4.99:2.1.2 +2733 3.5.3:2.3.1:2.7.1:2.4.2:2.4.2 +2734 2.7.2:5.3.1:2.7.2 +2735 5.1.3:2.3.1:2.3.1:5.4.99:4.3.2 +2736 1.2.1:3.5.1 +2737 4.1.1:1.14.13:3.5.3:6.3.2:2.3.1:4.1.3:4.1.3:2.3.1 +2738 5.3.1:4.3.1:2.8.1:2.1.1:4.1.1:1.2.1:4.2.3:2.7.2:1.1.1:4.3.1 +2739 4.1.1:1.1.1:4.3.2:2.3.1:1.5.1:4.3.2 +2740 2.4.2:6.3.4:4.1.2:1.2.4:6.2.1:2.6.1 +2741 5.3.1:6.3.4:4.3.1 +2742 3.2.1:2.5.1:2.6.1 +2743 6.3.2:2.7.7:4.2.1:2.7.2:5.3.1:1.7.99:1.1.2:6.4.1:6.3.2:1.2.1:2.7.1:1.3.1:2.7.1:6.3.2 +2744 3.2.1:2.3.1:3.5.1 +2745 4.2.1:2.4.2:2.3.1 +2746 2.3.1:2.4.2:2.7.1:5.1.2:2.7.2:5.3.1:3.1.4:1.1.1 +2747 2.7.2:5.1.3:1.5.1:1.2.7:1.7.99:1.4.1:2.7.1 +2748 2.7.8:2.3.1:1.18.6:4.3.2:2.6.1:1.2.1:1.1.1:2.7.1 +2749 3.5.1:5.4.99:4.1.2 +2750 2.4.2:5.1.1:6.3.5:3.4.13:4.3.2:6.3.4:1.2.1:2.5.1:1.1.1:6.3.3:2.3.1 +2751 3.5.1:1.2.1:3.1.1 +2752 1.1.1:3.5.1:1.2.1 +2753 2.7.2:6.3.2:4.3.1:2.1.2:3.5.3:1.5.1:3.1.3 +2754 2.3.1:6.3.4:2.1.3:5.3.1:5.4.99:3.5.4:2.1.1 +2755 2.4.2:2.3.1:5.3.1:3.5.3:6.3.1 +2756 2.7.7:1.5.3:2.5.1:4.1.1 +2757 4.1.3:3.5.1:1.4.99:6.2.1 +2758 5.4.99:4.3.1:2.1.2 +2759 4.1.3:4.1.2:2.1.2:2.4.1:2.7.2 +2760 2.7.1:2.7.1:2.7.4:6.3.4:2.3.3 +2761 2.3.1:2.6.1:3.6.1 +2762 2.6.1:6.3.2:3.1.1:2.7.1:6.3.4:2.7.1:2.7.1:3.5.3:6.3.5:6.4.1 +2763 3.5.99:1.5.1:1.3.1 +2764 2.7.7:3.5.1:4.2.1:2.3.1 +2765 1.3.99:1.5.1:2.7.4:6.2.1:2.1.2:2.4.2:5.1.3:2.1.1 +2766 2.7.1:4.3.1:5.3.1:4.2.3 +2767 3.5.1:2.5.1:4.1.3:2.5.1:3.6.1:4.2.3:2.7.7:6.3.4:2.5.1 +2768 3.4.11:2.7.7:6.3.2:1.8.4:4.2.3:2.7.1:1.5.1:6.6.1:1.5.99:2.3.1:6.3.4:3.1.3:4.1.1 +2769 2.7.2:3.5.1:1.1.1:2.7.2:2.3.1:2.7.1:2.7.4:2.3.1 +2770 5.3.1:4.1.2:2.6.1:2.4.2:2.7.4:4.3.2:2.7.2 +2771 3.5.1:2.3.1:2.7.7:3.1.3:6.3.3:1.2.1 +2772 2.3.1:2.1.2:1.-.-:1.5.1:2.3.1 +2773 6.2.1:2.1.2:2.7.6 +2774 4.3.1:3.5.4:4.3.2:3.5.1:4.1.2 +2775 2.7.2:2.6.1:5.4.2 +2776 4.2.2:4.1.1:2.5.1:3.1.3:1.1.1 +2777 4.1.3:2.7.1:6.3.1:2.3.1:3.1.3 +2778 1.4.1:2.4.2:6.3.4:2.7.2:3.2.1:1.1.1 +2779 4.2.3:6.2.1:6.3.4 +2780 3.6.1:2.4.2:5.5.1:2.3.1:3.2.1 +2781 4.4.1:5.3.1:2.4.1:4.1.1 +2782 3.2.1:1.5.1:3.1.4:1.4.1:1.1.1 +2783 1.3.3:5.1.1:2.5.1 +2784 3.5.1:2.7.1:6.3.2:1.17.1:1.1.1:5.3.3 +2785 4.1.1:4.4.1 +2786 2.5.1:2.7.6:4.1.2:1.2.1:1.1.1:1.4.1 +2787 3.1.2:6.3.4:4.1.1 +2788 2.6.1:2.7.1:2.7.2 +2789 4.2.1:2.7.7:2.7.1:4.1.1:2.3.1 +2790 4.2.1:3.5.1:2.4.2:1.7.1:6.3.3:3.1.2 +2791 6.3.4:6.3.4:1.2.1:2.7.7 +2792 4.1.1:3.1.3:4.1.1 +2793 2.5.1:1.2.1:2.7.1:6.3.4:1.1.1:9.9.9 +2794 2.6.1:3.5.3:3.5.4:2.4.2:3.5.3:2.7.1:3.5.1:3.2.1:4.2.1:2.3.1 +2795 2.7.1:5.4.99:2.7.1:1.5.99:4.2.3:2.4.2 +2796 3.5.3:6.3.4:1.2.4 +2797 2.3.1:2.3.1:2.7.2:2.3.1 +2798 3.6.1:2.5.1:3.5.4:1.5.1:2.7.7:2.7.7:2.3.1:2.7.4:1.1.1:2.1.2 +2799 2.7.6:1.1.1:4.1.99:2.7.7:6.3.2:2.3.1:3.2.1:2.7.2:6.3.4 +2800 4.1.1:2.1.3:4.2.1:2.1.2:4.1.1 +2801 3.5.1:1.2.1:4.4.1:3.5.4:3.5.3:1.1.1 +2802 4.2.1:1.2.4:4.3.1 +2803 2.5.1:1.5.1:3.1.3:2.5.1:2.6.1:6.3.5:3.5.3 +2804 1.4.3:3.5.3:3.5.3:6.3.2 +2805 6.3.1:5.4.2:3.5.3:2.7.1:2.3.1 +2806 4.1.1:9.9.9:1.3.99:6.3.4:2.7.4 +2807 2.7.7:1.7.99:2.5.1:1.3.99:2.6.1:1.8.1 +2808 4.4.1:2.6.1 +2809 2.3.1:3.5.2:1.5.1:4.3.1:2.3.3 +2810 2.7.1:1.1.2:3.5.3:4.1.2:4.1.1 +2811 5.4.2:2.1.1:2.7.2:3.5.1:2.7.1:1.1.1:4.1.1 +2812 6.4.1:2.7.1:3.1.7:4.2.1:2.3.1 +2813 5.3.3:2.1.2:3.5.1:4.2.1:3.5.4:3.1.3:3.5.1:5.4.99 +2814 6.3.5:2.3.1:1.2.1:2.7.1:4.2.1:1.5.1 +2815 3.6.1:4.2.1:2.7.2 +2816 2.6.1:5.3.1:2.4.2:1.1.1:4.3.2 +2817 4.2.1:1.1.2:2.1.2:3.1.3 +2818 2.3.1:6.1.1:2.3.1:6.3.4:2.5.1:2.7.1:1.2.1:6.3.2:3.5.1:4.2.1:3.1.3:1.1.1:5.3.1:2.6.1:4.1.3 +2819 2.4.2:5.1.3:2.7.7:2.7.4:3.5.3 +2820 2.6.1:5.4.2:2.2.1:2.7.8:2.6.1:2.1.2:4.1.1 +2821 3.5.1:3.4.11:1.4.4:6.3.4:1.2.1:1.17.4:5.3.1:5.3.1:5.4.99 +2822 2.7.6:3.1.1:2.1.1:1.7.2 +2823 1.4.1:2.7.6:3.5.99 +2824 4.3.1:2.1.1 +2825 2.7.1:3.5.1:4.3.2:2.6.1:4.1.3:1.1.1 +2826 2.7.1:2.2.1:3.1.1:2.3.1:2.7.7:4.1.2:1.1.1:6.3.4:2.7.6:6.3.5 +2827 3.1.3:2.3.1:3.5.1:2.5.1:6.3.4 +2828 5.4.2:2.7.7:1.2.1:2.1.1:1.2.4:3.5.1:1.4.3 +2829 2.7.4:3.1.1:4.4.1:4.3.2:2.4.2 +2830 4.1.2:4.1.2 +2831 4.1.1:2.6.1:2.1.1:2.7.1 +2832 2.6.1:1.2.1:2.4.2:5.4.2:2.7.2 +2833 3.2.1:2.1.3:2.4.2:2.7.7:2.1.1:1.2.1 +2834 1.2.1:2.7.1:4.1.1:2.7.1 +2835 1.14.13:2.3.1:1.2.1 +2836 4.2.1:6.3.4:2.3.3:4.1.1 +2837 2.6.1:3.5.1:4.1.2 +2838 1.2.1:2.6.1:2.3.1 +2839 5.2.1:2.7.7:4.1.2:2.1.2:2.6.1:3.5.3:2.7.7:2.3.1:2.6.1:2.7.7:1.5.1:3.5.3:1.17.1 +2840 3.5.3:1.17.4:2.7.1:4.2.1:2.6.1 +2841 1.5.1:2.7.7 +2842 3.1.3:1.2.1:6.3.3:4.2.1:2.3.3 +2843 6.2.1:2.6.1:2.7.1:2.5.1:1.5.1 +2844 3.1.3:6.3.2:2.1.1:4.1.1:2.6.1 +2845 1.3.1:2.2.1:2.7.2:2.7.1:1.2.1:3.3.1:5.1.2:2.7.7:1.3.3:1.2.1:3.2.1:4.2.3:1.2.1 +2846 2.4.2:2.3.1:3.2.1:2.1.2:1.1.1:1.2.1:2.1.1:4.3.1:3.5.3:1.1.1 +2847 2.3.1:5.4.99:1.14.16:4.3.2:6.3.3:2.1.2:1.5.1:2.7.2:4.3.2 +2848 3.4.13:2.4.2:2.5.1:2.1.3:2.1.3 +2849 3.6.1:2.5.1:4.1.3:4.2.1:4.1.3:2.3.1 +2850 2.6.1:1.1.1:4.1.3 +2851 1.2.1:2.3.1:1.2.1:1.4.1:2.4.2:2.3.1:4.2.1:2.7.1 +2852 2.7.2:4.1.1:1.4.1:4.2.1:1.3.1 +2853 5.4.99:2.5.1:2.5.1 +2854 4.3.1:4.1.3:1.2.1:2.4.2:2.3.3:1.2.1 +2855 4.3.1:4.1.1:4.4.1 +2856 2.7.1:4.2.1:1.4.3 +2857 2.7.2:4.1.3:2.7.2:2.4.2:2.3.1:2.3.1:4.2.1 +2858 1.13.12:2.7.4:1.1.1:6.3.5:3.2.2 +2859 2.3.1:3.5.1:1.5.1 +2860 6.3.4:5.4.99 +2861 4.3.2:2.7.1:4.1.1:2.7.2 +2862 2.7.2:2.7.2:2.6.1 +2863 3.1.2:2.7.7:2.1.4:1.14.11:4.3.1:6.3.5:1.2.1:2.7.2 +2864 3.1.3:4.2.1:2.7.4:1.4.1:2.6.1 +2865 4.1.2:2.7.2:2.2.1:3.5.4:1.2.1:2.7.1:1.7.1:2.1.3:2.5.1:3.6.1:2.7.7 +2866 2.1.2:3.2.1:4.2.1 +2867 4.2.1:2.3.1:4.1.1:3.2.2:2.5.1 +2868 4.2.1:1.4.1:2.7.7:1.5.1:2.5.1:4.3.1:4.1.1:2.4.2 +2869 2.7.6:6.3.4:3.5.2:4.2.3:4.3.2:4.3.2:1.3.3:4.1.2 +2870 1.1.1:1.2.4:2.3.1 +2871 6.1.1:4.3.2:3.5.3:2.3.3:2.7.1:2.3.1:3.6.1:9.9.9:1.14.13:5.1.3:1.1.1:2.7.1 +2872 3.4.11:4.2.1:3.5.3:1.7.2:3.5.3 +2873 2.3.1:4.2.1:2.4.2:3.1.3 +2874 2.3.1:1.5.1:2.5.1 +2875 1.2.1:3.5.3:3.5.1 +2876 6.3.4:4.2.1:1.1.1:1.1.1:1.5.1 +2877 2.3.1:2.6.1:6.3.4:1.5.1 +2878 2.7.1:4.3.1:5.4.99:3.6.1:2.7.2:1.2.1:6.3.5 +2879 4.2.1:1.1.1:4.2.1:3.6.1:2.5.1 +2880 4.2.1:2.6.1:2.6.1 +2881 2.7.4:4.1.1:2.3.1 +2882 6.3.4:2.7.1:1.5.1:4.1.3:2.7.8:2.1.1:6.2.1:4.2.3:6.3.2:4.2.1:2.7.2 +2883 3.1.3:2.7.2:2.7.4:1.1.99:1.1.2:5.3.1:1.4.1:2.7.1 +2884 3.4.11:1.1.1:2.7.1:5.4.99:2.3.1:1.2.1 +2885 1.14.13:1.5.1:6.3.4:2.7.4 +2886 1.1.2:2.7.7:4.2.1:3.2.1 +2887 1.3.99:3.4.13:6.3.3 +2888 2.1.2:2.7.1:2.7.1 +2889 1.8.1:3.5.1:2.5.1 +2890 1.3.3:3.5.1:2.7.7:2.7.9 +2891 2.8.1:4.4.1:6.3.4 +2892 2.7.7:1.2.1:2.3.1:2.1.3:4.3.2 +2893 4.2.1:5.4.99:2.7.2 +2894 4.3.1:2.1.1:1.2.4 +2895 2.6.1:1.1.1:4.2.1:6.4.1 +2896 3.5.3:4.2.1:2.5.1:2.3.1:2.3.1:4.6.1:6.3.3 +2897 4.1.1:1.1.5:4.3.2:2.5.1 +2898 1.13.11:2.7.1:4.3.2:4.1.1:2.1.2:6.3.4:1.2.1:6.3.2:4.4.1:4.1.1:4.3.1:6.4.1 +2899 4.2.1:3.5.1:1.1.1:2.7.2:2.4.2 +2900 2.1.1:2.7.2 +2901 2.3.1:1.5.1:2.2.1:2.7.1:1.2.1:6.3.4 +2902 2.7.7:3.6.1:2.5.1:2.5.1:2.7.2:1.1.1 +2903 2.5.1:1.1.1:2.7.7:3.5.1:2.1.2:2.7.1:1.1.1 +2904 1.1.1:4.1.1:2.3.1:2.4.1 +2905 2.1.3:2.7.7:2.7.1:1.2.1:4.3.1:2.3.1:1.4.1:4.4.1:2.3.1:2.1.3:5.3.1:5.4.99 +2906 2.7.1:3.1.7:1.1.1 +2907 4.1.1:5.4.2 +2908 3.6.1:1.3.3:2.6.1:4.1.1 +2909 1.1.1:4.3.2:6.3.3:2.7.7:1.13.11:1.17.4:1.3.99:5.4.99 +2910 4.1.1:3.1.3:4.1.1:4.2.3:6.3.4 +2911 1.13.11:4.1.2:2.6.1:2.1.2:3.5.3:4.1.1:3.5.1:4.1.3:1.5.1 +2912 2.6.1:6.3.5:6.2.1 +2913 1.1.1:6.3.4:2.5.1:6.3.4:4.1.1:6.3.3:5.1.3:5.1.1:1.4.1:2.5.1:2.4.2 +2914 1.2.7:2.7.2:2.7.2:1.4.1:3.6.1:1.13.11 +2915 2.6.1:4.3.2:2.4.2:2.7.4:1.2.1:3.1.3:2.5.1 +2916 2.7.1:2.7.1 +2917 1.5.99:1.1.1:4.2.1:6.4.1:5.4.99:2.4.2 +2918 1.1.1:3.5.1:4.4.1:4.1.1:4.2.3:6.2.1:4.2.1 +2919 3.5.3:2.7.1:4.3.2 +2920 2.7.7:4.1.1:1.17.1:2.3.1:6.3.4 +2921 2.7.7:4.1.1:6.3.2:1.4.1:2.3.1:3.1.3 +2922 2.4.2:3.6.1:6.3.2 +2923 3.8.1:2.7.1:2.7.7 +2924 3.6.1:2.5.1:2.2.1:2.3.3:1.1.1:1.2.1 +2925 2.3.1:6.3.5:2.1.1:1.2.1:1.2.1:2.5.1:4.3.2 +2926 6.3.2:1.1.1:1.3.99:6.4.1 +2927 2.6.1:4.1.1:2.6.1:2.4.2:9.9.9 +2928 6.3.5:2.7.2:6.3.4:4.1.1:4.2.1:1.7.2 +2929 2.7.1:2.5.1:4.3.2:4.2.- +2930 3.1.3:4.2.1:6.3.1:1.1.1:2.3.1:1.2.4:6.3.5 +2931 2.3.1:4.1.1:4.2.3:6.3.4:2.7.1:1.3.99 +2932 1.5.1:4.3.2:2.7.4:4.1.1:3.5.1:2.7.2 +2933 3.1.3:1.1.1:6.3.5:3.1.3:5.4.2:2.3.1:4.4.1 +2934 2.7.7:2.1.3:2.7.7:2.3.1:4.4.1:2.5.1 +2935 2.5.1:2.7.1:2.7.8:3.2.2:4.2.1 +2936 6.3.5:1.8.1 +2937 2.5.1:6.3.2:6.3.5 +2938 2.6.1:2.5.1 +2939 2.7.1:2.4.2:4.3.2:4.4.1:2.5.1 +2940 1.2.1:4.1.1:1.1.1:2.5.1:4.1.1:1.1.1:1.2.1:6.3.5:5.1.1:2.7.8:1.1.1 +2941 5.4.99:2.7.2:2.7.1:5.3.1:2.7.1:2.3.1:3.5.1 +2942 1.2.1:4.4.1:3.5.1 +2943 6.3.4:1.2.4:1.2.1:4.4.1 +2944 2.7.2:1.2.1:4.1.1:2.7.1 +2945 4.1.1:4.1.1:1.1.1 +2946 1.1.1:3.1.4:3.5.1:1.1.5 +2947 2.7.2:4.3.1:1.1.1 +2948 3.6.1:2.3.1:1.4.3 +2949 5.1.3:2.6.1:6.3.2:2.7.2 +2950 2.3.1:2.5.1:3.1.4:2.8.3:4.1.2:2.3.1:1.1.1 +2951 2.5.1:6.4.1:4.1.1:2.6.1:3.5.1:1.5.1 +2952 2.3.1:3.5.1 +2953 2.7.1:2.7.1:3.1.3:2.5.1:2.3.1:3.6.1:5.3.3 +2954 2.7.2:2.3.1:2.1.1 +2955 6.3.5:6.3.4:2.4.2:2.3.1:2.4.2:2.7.1:2.6.1 +2956 2.7.6:2.3.1:3.5.3:2.1.2 +2957 1.17.1:2.5.1:4.2.1 +2958 2.7.1:1.1.1:2.3.1:2.4.2:4.1.1:5.4.99:2.1.3 +2959 5.4.2:2.5.1:1.2.1:1.5.1:2.1.2:2.3.1 +2960 3.4.13:4.2.3:4.1.1:2.3.1 +2961 2.6.1:2.3.1:6.1.1 +2962 2.6.1:6.3.4:6.3.4:4.4.1:3.5.99:5.3.1:1.2.1:2.7.4 +2963 2.3.1:1.17.4:1.17.1:3.5.1:3.6.1 +2964 3.5.1:4.3.2:4.3.1:1.2.1:5.3.1:4.2.3:5.4.2 +2965 1.1.1:4.2.1:6.3.4:6.3.2:4.2.1 +2966 1.1.1:2.6.1:4.2.-:2.5.1:4.1.1 +2967 2.7.4:3.5.1:1.5.1:2.3.3:1.5.1:1.5.99:4.3.2 +2968 3.5.3:4.4.1:5.3.1:3.5.4:3.4.11:1.4.3:2.1.2:2.3.3:4.3.2:2.5.1:2.1.2:4.3.1 +2969 2.2.1:9.9.9:2.1.3:1.1.1:3.4.13 +2970 2.3.1:2.6.1:2.3.1:2.6.1:3.5.1:3.1.7:1.3.99:2.5.1:5.1.3:2.7.6:4.1.1:2.7.1:3.1.1 +2971 4.3.2:2.7.1:2.1.1:2.5.1:1.1.1:1.1.3 +2972 3.1.3:2.7.4:2.3.1 +2973 2.5.1:6.3.3:6.3.2:4.1.2:2.3.3:2.1.1:1.1.1 +2974 2.7.1:6.3.5 +2975 2.4.1:6.2.1:3.6.1:6.3.4:2.7.7:4.3.2 +2976 2.6.1:2.6.1:2.5.1:4.4.1 +2977 2.7.7:1.1.1:2.7.7:2.3.1:2.5.1:2.3.1:2.3.1:2.3.1:2.7.6:1.2.1:4.3.2:4.3.1:2.7.1:1.1.3 +2978 5.3.1:2.5.1:4.1.3:2.7.6:3.1.3:3.1.5 +2979 4.2.1:2.1.4:5.4.2:4.3.2:2.7.1 +2980 9.9.9:2.1.2:3.5.3 +2981 3.1.4:4.2.1 +2982 6.3.2:2.3.1:3.6.1:4.1.2:1.2.1:4.1.1:1.1.1:5.3.1 +2983 2.7.2:3.1.4:2.7.1:2.7.7 +2984 1.1.1:2.7.1:2.5.1:3.1.2:5.3.1:1.7.3:2.4.2 +2985 2.7.2:2.7.4:2.5.1:4.3.1 +2986 1.1.1:3.5.3:2.7.1:1.14.13:2.7.2:4.2.3:1.1.2:4.1.1:2.4.2:2.1.2:2.3.1:2.5.1 +2987 4.2.3:2.6.1:4.1.1:4.2.3:2.3.1 +2988 6.3.5:2.1.3:3.5.3 +2989 2.7.1:2.6.1:2.7.8:2.1.3:5.1.2:6.3.2 +2990 4.2.1:2.3.1:2.3.1:1.8.4 +2991 2.3.1:2.3.1:6.3.4:2.7.7:6.3.4:3.5.3:1.1.1 +2992 1.18.6:1.1.1:2.7.2:2.1.3:1.8.1 +2993 2.7.1:3.2.2:2.3.1:5.3.1:9.9.9:2.7.2 +2994 2.7.7:2.8.3:2.7.7:4.4.1:4.3.2:1.1.1:2.5.1:1.1.1 +2995 2.5.1:2.1.1:1.14.13:6.3.4:1.5.1 +2996 1.1.2:1.1.1:4.3.2:4.2.1:6.3.4 +2997 2.3.1:1.7.2:1.3.1:1.2.1:3.1.1:2.7.2:1.1.1:6.3.5:4.2.1:2.4.1:2.3.1:2.3.1:2.1.3:3.5.1 +2998 2.1.2:2.6.1:4.1.1 +2999 2.3.3:4.2.3:1.4.3:2.1.1:2.7.7 +3000 1.14.12:6.3.3:3.5.1 +3001 1.1.2:4.1.1:4.2.1 +3002 1.2.4:5.3.1:5.1.3:1.1.1 +3003 4.1.2:2.3.1:1.2.1:1.1.1 +3004 6.3.4:4.3.1 +3005 5.4.3:2.7.7:2.7.1:4.2.1:4.4.1:2.1.2:3.5.2:3.1.3:6.2.1:1.1.1:6.3.1:3.5.3:1.17.1 +3006 2.4.2:1.7.3:1.2.1 +3007 6.3.5:2.5.1:1.5.1:4.3.1:2.7.8 +3008 6.3.5:2.7.2:4.3.2:1.5.1 +3009 1.7.99:2.4.2:5.3.3:4.2.1:6.1.1 +3010 2.3.1:4.99.1:2.1.3 +3011 2.7.1:4.2.1:2.7.4:3.5.1:2.5.1 +3012 1.2.1:4.3.2:5.3.1 +3013 2.4.1:1.1.1:3.1.3:1.5.3:2.3.3:3.1.3:6.3.5 +3014 2.7.1:2.7.2:3.1.3:2.7.4:4.1.1 +3015 2.6.1:2.7.7:1.7.1:4.2.3:1.14.- +3016 2.1.2:9.9.9:2.7.8 +3017 1.2.5:2.3.1:4.99.1 +3018 2.7.1:2.3.1 +3019 3.5.1:2.8.1:2.4.2:1.4.1 +3020 2.7.7:5.3.1:2.7.7:4.1.1:4.1.1:5.3.1 +3021 6.3.4:3.5.1:2.1.2:3.2.1:1.5.1:4.1.3:9.9.9 +3022 2.1.2:1.1.1:3.5.1:4.1.1:4.4.1 +3023 3.3.1:4.1.1:1.4.3:4.2.1 +3024 1.1.1:5.4.99:1.4.4:2.7.2:3.5.1:4.2.1 +3025 5.-.-:2.6.1:1.5.1:6.3.5:3.4.11 +3026 1.1.1:1.5.1:1.5.1:5.1.3:2.2.1:3.6.1:1.2.1:3.1.2:3.5.3 +3027 4.2.-:2.2.1:3.1.3:2.7.2:2.5.1:3.6.1:9.9.9:3.4.13 +3028 2.7.2:2.7.6:2.3.3:3.2.1:2.5.1:3.5.3:2.6.1 +3029 4.1.1:6.3.5:4.1.3:2.1.1:1.1.1:3.1.1:2.3.1:3.1.3:1.2.4:1.3.1:2.7.7:4.3.2:4.3.1:1.5.1:5.4.2 +3030 3.5.3:4.2.1:1.5.1:2.7.4:4.3.2:6.3.5:3.1.3:2.3.1:6.3.2:2.5.1 +3031 4.1.1:6.3.2:1.5.1:1.2.1:3.1.4:2.4.1:3.2.1 +3032 4.3.1:3.5.1:5.3.1 +3033 1.1.1:2.3.1:3.5.3:4.1.2:5.1.2:5.3.1:3.5.1:1.1.1:6.3.4:2.7.1 +3034 5.4.99:2.7.9:5.4.2:5.3.1:2.7.7:4.2.3:3.1.3:4.1.1:4.1.1:2.5.1:1.5.1:5.1.3:2.7.1 +3035 2.7.1:4.1.3:6.4.1:2.6.1 +3036 3.2.1:5.4.99:2.7.1:2.7.2:6.3.4:2.3.1 +3037 3.7.1:2.7.4:4.1.1:2.7.1:1.7.2 +3038 4.1.1:1.5.1:4.2.1:2.5.1:3.5.1:1.4.3:2.7.2 +3039 2.5.1:2.7.7:1.2.1:1.2.1:4.3.1:2.6.1 +3040 4.3.1:2.6.1:3.5.3:6.3.2:3.5.4:6.3.2 +3041 2.3.1:5.1.1:2.3.1:2.3.1:2.4.2:3.6.1 +3042 5.1.3:2.7.2:4.1.2:1.17.1:5.3.1:1.-.-:3.5.1:4.1.1 +3043 1.3.1:2.7.8 +3044 5.4.2:3.1.7:1.5.1 +3045 2.6.1:3.1.3:2.4.2:2.1.1:4.2.1:5.3.1 +3046 2.7.4:4.4.1:3.1.4 +3047 2.4.2:3.5.2:4.1.1:2.4.2:4.4.1 +3048 4.3.1:2.6.1:3.1.3:4.2.1:2.3.1:2.5.1:4.2.3:2.1.2:1.1.1 +3049 2.7.2:5.3.1:4.1.2:2.7.7 +3050 4.2.1:2.7.2:1.7.2 +3051 1.5.1:3.1.3:2.3.3:2.3.1:1.1.1 +3052 4.4.1:1.2.1:1.1.1:2.3.3:4.2.1:2.6.1:2.5.1:1.2.1:4.1.1 +3053 1.2.4:1.1.1:3.8.1:6.3.5:2.7.1:4.1.2:2.1.2 +3054 1.5.1:6.3.4:5.3.1:2.7.6:3.1.7:3.4.11 +3055 2.7.8:2.7.7:1.4.1 +3056 2.3.1:3.1.3:3.5.1:1.2.7:6.3.4 +3057 6.3.2:2.3.1:1.14.13:2.7.8:5.4.3 +3058 2.3.1:2.1.2:5.3.1:4.4.1:4.3.1 +3059 4.2.1:2.1.1:2.3.1:4.3.2:3.5.1:5.3.1:2.1.1 +3060 4.1.1:5.4.2:3.1.3:5.3.1:6.3.3:3.5.1:3.6.1 +3061 4.1.1:3.5.5 +3062 6.3.4:6.3.3:1.1.1:4.1.1:1.4.1:1.2.1 +3063 2.3.1:4.3.2:4.3.2:3.5.1:2.5.1:2.6.1:4.1.2:2.7.1:6.3.4:6.3.2 +3064 2.4.2:3.1.3:1.4.1:2.4.2:2.2.1 +3065 2.7.4:1.3.1:4.1.1:2.1.1:5.1.2:2.7.1:3.5.1:4.3.1:2.7.1 +3066 6.3.5:4.1.1:2.1.1:6.3.4:3.5.3 +3067 2.3.1:4.1.1 +3068 3.5.1:6.3.3:5.4.99:5.3.1:2.7.1:2.5.1:5.4.2:6.3.4:1.1.1 +3069 2.3.1:1.4.1:2.4.2:2.7.1:6.2.1:1.3.1 +3070 2.4.2:4.3.1:2.6.1:1.2.1 +3071 1.5.99:4.2.1:2.4.1:1.1.1:2.5.1:2.7.7 +3072 4.3.2:2.4.2:2.7.1:4.1.1:4.3.1:6.3.4:2.7.8:2.7.1:1.1.1 +3073 3.1.3:2.7.7:1.13.11:5.4.99 +3074 4.1.2:2.6.1:1.4.1:4.1.2:6.3.5 +3075 6.3.2:2.6.1:4.4.1 +3076 2.6.1:4.3.1:2.5.1:2.1.1 +3077 4.2.3:4.1.1:2.7.4:2.3.1:2.6.1:3.3.1:2.3.1 +3078 6.2.1:1.3.1:3.5.3:2.4.2:2.6.1:3.5.3:6.3.2 +3079 4.2.1:2.7.7:5.4.2:2.5.1:6.3.2:4.1.1 +3080 2.3.1:3.6.1 +3081 6.2.1:1.1.1:2.7.1 +3082 2.3.1:2.3.1:1.14.16:3.6.1 +3083 1.2.4:3.1.3:2.7.1:3.1.4:4.1.1:2.6.1:3.4.13:1.3.1:1.8.1 +3084 3.1.3:2.7.4:2.1.3 +3085 4.4.1:2.7.1:3.5.1:2.6.1 +3086 4.2.1:4.3.1:3.5.1:3.5.1:1.1.5:1.3.3 +3087 2.7.7:4.2.1:2.5.1:5.3.1 +3088 5.4.2:4.2.3:2.5.1:2.7.4:2.1.1 +3089 5.1.2:4.3.2:2.7.7 +3090 4.2.3:5.4.2:2.4.2 +3091 2.7.2:2.5.1 +3092 6.3.4:2.5.1 +3093 4.2.3:3.5.3:2.7.2:1.4.1:1.2.4:4.2.3:2.7.2 +3094 2.6.1:2.7.1:2.1.3 +3095 2.7.2:1.18.6:1.8.1:4.1.2:4.2.1 +3096 2.7.2:5.4.3 +3097 2.7.7:1.2.1:4.2.3 +3098 2.3.1:2.6.1:2.7.2 +3099 2.1.1:6.3.4:6.3.3:4.2.3 +3100 2.7.9:6.3.2:4.3.2:3.1.4:6.3.2:2.3.1:2.3.1:2.7.1:4.3.1:5.4.99 +3101 2.7.1:1.5.1:2.7.1:4.1.1:1.1.1:4.1.1 +3102 6.3.3:6.2.1:4.1.1:1.5.1 +3103 4.1.2:2.6.1:2.4.1:2.6.1:3.1.3:6.3.5:1.2.5:2.1.1 +3104 1.13.11:4.2.1:2.5.1:4.1.3:2.7.7:1.4.1:1.1.1:2.5.1:3.5.1:4.4.1 +3105 3.5.1:3.5.3:3.5.1:2.6.1:1.14.13:4.1.1 +3106 6.3.5:5.4.2:2.7.4 +3107 2.4.2:1.1.1:6.3.2:2.7.7 +3108 2.3.1:2.5.1:1.1.1 +3109 3.5.5:4.1.1:4.3.2:4.1.1:6.3.3:2.7.1:2.3.1:2.3.1:1.1.1:3.6.1:3.1.3:2.6.1 +3110 2.4.2:4.1.2:2.3.2:3.6.1 +3111 4.4.1:4.1.3:4.4.1:3.1.3:5.4.2:3.5.2:5.-.-:4.1.1:2.1.3:1.1.1 +3112 4.3.1:3.5.2:2.4.2 +3113 4.1.3:6.4.1:2.1.1:2.7.6:2.7.2 +3114 1.2.1:2.7.2:1.2.4:4.1.3:3.5.2:6.3.4:4.3.2:1.2.4:4.1.1:2.3.1:1.1.1:4.3.1:4.1.1 +3115 3.5.3:5.3.1:3.5.1 +3116 2.7.1:1.2.1:2.1.1:1.3.99:6.3.4:3.5.4:6.3.5 +3117 4.1.1:2.4.2:2.6.1:2.7.2 +3118 5.3.1:1.1.1:6.3.4:5.4.2:5.3.1:6.3.2:2.7.2:3.5.1:2.7.2:2.7.4:2.7.7 +3119 6.3.1:5.3.1:2.3.1 +3120 3.1.3:2.7.2:4.3.2:2.5.1 +3121 2.3.1:5.4.2:2.7.1:4.1.3:2.7.1 +3122 2.6.1:1.2.1:1.1.1:2.7.4:1.5.1:3.3.1:2.5.1:5.1.1 +3123 1.5.1:2.3.1:1.1.1 +3124 2.6.1:4.1.1:6.3.4:1.3.1:5.1.2:2.7.7:3.1.4:2.7.7:1.14.13:9.9.9:3.6.1:2.7.1 +3125 4.2.1:6.4.1:1.11.1:3.2.2:4.3.2 +3126 2.7.1:4.1.2:3.5.1:2.7.2:6.3.2:2.6.1 +3127 2.7.1:4.2.1 +3128 3.5.1:1.2.1:1.5.1:4.3.1:2.7.6 +3129 5.4.99:6.3.4:5.3.1:1.4.1 +3130 4.1.2:2.3.1:2.3.1:1.1.1:3.1.1 +3131 4.1.1:2.3.1:2.7.8:2.7.2:1.3.3 +3132 6.3.4:6.3.1:2.7.7:6.3.5:2.5.1:4.2.1 +3133 1.5.1:2.4.1:1.1.1 +3134 2.3.1:3.3.1:1.13.11:3.5.1:2.1.1:5.4.99:2.4.2:2.6.1:4.2.1:1.3.1 +3135 2.6.1:2.1.2:5.4.2:5.1.3:3.5.1 +3136 4.2.1:2.1.4:4.1.3 +3137 1.5.1:1.4.3:1.1.1:4.1.2 +3138 2.4.1:4.3.1:2.7.4:5.4.2:4.1.2:1.5.1:2.6.1:1.5.1:2.7.7:6.3.2 +3139 2.3.1:2.3.1:2.1.1 +3140 4.6.1:1.5.1:2.3.1:3.5.3:2.1.2:2.2.1:3.1.3:2.4.1:2.4.2:5.3.1 +3141 2.5.1:2.5.1:4.1.2:2.3.3:5.3.1 +3142 4.1.3:2.7.4:2.7.1 +3143 4.2.1:4.1.1:1.7.99:2.3.1:5.3.1:3.6.1 +3144 1.11.1:4.1.1:1.14.13 +3145 3.5.1:2.3.1:2.7.1:2.3.1:3.5.2:1.5.3:2.6.1:2.7.1:2.3.3:4.3.2 +3146 2.7.7:2.5.1:2.7.1 +3147 2.6.1:2.5.1:2.7.8:6.4.1:6.3.3 +3148 4.1.1:5.4.2:3.2.1:3.1.3:4.3.2:3.4.11:3.1.3:2.6.1:6.4.1 +3149 2.3.1:6.3.5:2.6.1 +3150 5.4.2:1.2.1:4.1.1:4.1.2 +3151 2.1.2:2.4.2:4.1.1:2.3.3:2.6.1 +3152 5.3.1:1.3.99:2.7.2:6.3.4 +3153 2.7.7:2.7.2:3.1.1 +3154 4.3.2:2.7.1:2.3.2:4.2.1:2.7.1:2.1.2:9.9.9:3.1.4 +3155 4.2.3:2.6.1:2.6.1:6.3.1:2.7.4:4.1.3:3.1.3:2.7.1:2.6.1:1.1.1:2.3.3:2.4.1:2.7.2:2.7.4 +3156 5.3.1:3.5.2:3.5.1 +3157 5.4.2:4.3.1:2.3.1:2.8.1:3.1.3:1.4.1:2.7.7 +3158 2.7.1:4.2.3:4.1.2 +3159 2.1.3:4.2.3:1.2.1:3.6.1:5.2.1:3.6.1:2.7.2 +3160 2.7.4:3.6.1:1.3.3:4.1.2:3.6.1:2.7.1:4.3.2 +3161 2.8.1:2.3.1:1.5.1:2.4.1:3.1.2 +3162 2.7.2:5.3.1:1.8.1:2.3.3:6.3.5:4.3.2 +3163 2.4.2:4.2.1:2.7.4:4.3.1:3.2.1 +3164 2.5.1:5.3.1:1.5.1:2.1.1:1.2.7:3.1.3:4.2.1:2.3.1:2.1.1:4.2.3:3.5.3:1.1.5:4.4.1 +3165 1.2.4:2.4.2:6.3.4:6.3.4 +3166 3.1.3:6.4.1 +3167 2.6.1:4.2.1:4.3.2:2.7.2 +3168 4.4.1:3.5.4:4.1.1:4.1.1 +3169 5.1.3:3.5.2:6.3.4:1.3.3 +3170 2.7.4:3.5.1:5.3.1 +3171 3.5.1:3.5.3:1.2.1:2.7.4:4.1.1:6.3.5:2.4.1 +3172 4.1.1:1.8.1:4.2.1:2.7.2:4.1.3:1.1.1 +3173 3.1.3:6.3.2:6.2.1:3.5.3:2.7.1:2.7.7 +3174 2.7.7:3.1.7:4.1.1:4.2.1:6.3.4 +3175 3.1.7:1.3.99:3.1.4 +3176 6.3.5:5.3.1:2.7.1:1.1.1:5.4.99:2.7.1 +3177 4.1.1:6.3.4:1.2.4:2.6.1:6.3.4 +3178 1.1.1:6.3.3 +3179 6.4.1:4.1.1:2.6.1:4.1.3:2.4.2 +3180 2.3.1:3.5.4:2.5.1 +3181 6.3.5:2.7.6:6.2.1:2.7.1:4.2.1:3.5.1 +3182 2.1.1:4.2.1:1.2.5:6.3.2:1.1.1:3.1.3:1.1.1:1.2.1 +3183 2.7.1:4.1.1:1.7.2:1.1.1:1.3.99:5.4.2:2.3.1:1.5.99:2.-.-:3.5.1:4.1.1 +3184 2.5.1:4.4.1:6.3.4:2.7.2 +3185 3.1.2:1.2.1:1.2.1 +3186 4.1.2:2.3.1:2.1.3 +3187 1.1.1:6.3.4:2.3.1:2.7.2:3.5.4:5.3.1 +3188 2.7.1:1.4.1:6.3.2 +3189 4.2.1:3.1.2:4.2.1:3.1.3:2.5.1 +3190 2.6.1:1.4.3:4.3.2:1.2.1:1.5.99 +3191 4.1.3:2.7.1:3.5.2:2.5.1:1.1.1:4.2.1:6.3.2 +3192 4.1.2:1.2.1:2.1.2:1.14.-:4.2.1 +3193 1.5.1:5.1.1:2.4.1:2.6.1:4.1.1 +3194 6.3.4:1.1.1:2.7.1:1.5.99:1.3.3 +3195 4.1.3:2.8.3:3.6.1:5.3.1:2.3.1:4.4.1 +3196 2.3.1:4.3.2 +3197 2.7.6:2.7.1:2.7.1:1.1.1:1.7.2 +3198 3.5.3:2.6.1:2.1.3:2.1.1:3.1.5 +3199 6.3.2:1.3.3:1.5.1:1.1.1:2.3.1 +3200 4.1.1:2.5.1:3.2.1:2.2.1:2.7.1:3.2.1:1.1.1 +3201 2.5.1:1.1.1:1.1.1:5.3.1 +3202 4.1.2:2.4.2 +3203 2.7.2:5.1.3:2.1.2:1.2.1:4.1.2 +3204 2.6.1:3.2.1:3.1.4 +3205 2.7.1:4.2.-:6.3.4:4.1.2 +3206 4.1.1:2.7.4:1.1.1:1.1.1:2.1.4 +3207 2.4.2:1.1.1:2.7.8:1.1.1 +3208 2.7.4:1.7.99:4.1.2:2.6.1:6.3.4:1.14.16 +3209 3.2.1:4.2.3:4.4.1:1.1.1:3.2.1:6.3.5:2.7.7:2.3.1 +3210 4.2.1:5.1.3:4.1.1 +3211 2.7.7:2.6.1:6.3.3 +3212 2.7.1:4.3.1:3.5.4:2.5.1:1.2.1:1.5.1:1.2.1:5.3.1 +3213 3.4.13:2.7.1:9.9.9:3.5.1 +3214 2.7.1:1.5.1 +3215 2.4.2:6.3.2 +3216 1.2.4:2.5.1:1.2.1 +3217 2.5.1:2.6.1:2.6.1:2.3.1 +3218 2.3.1:2.1.2:6.3.3:2.7.7:3.1.1 +3219 4.1.1:4.3.1:3.6.1 +3220 2.7.1:6.3.4:4.2.1:1.2.1:2.3.3:1.2.4 +3221 1.4.4:5.4.99:1.4.99:2.2.1 +3222 4.6.1:2.2.1 +3223 6.3.4:1.2.1 +3224 4.1.3:6.3.2:2.5.1:9.9.9:1.2.1:1.5.99:2.3.1 +3225 4.1.1:2.1.1:2.6.1:2.5.1:3.5.1:4.2.1 +3226 2.7.1:4.1.1:3.5.1:2.7.1 +3227 2.7.2:5.4.99:2.6.1:2.3.1 +3228 9.9.9:2.7.1:1.3.3:1.5.1:4.1.1 +3229 2.6.1:4.1.2:4.2.1:3.5.1:2.7.4:5.4.99 +3230 6.3.1:2.7.2:3.6.1:6.3.4:4.2.1:6.2.1:2.3.1:1.1.1:3.5.1 +3231 2.7.2:1.1.1:2.7.8:2.5.1 +3232 2.7.1:2.1.1:4.3.1:4.1.2 +3233 2.3.1:2.1.3:2.7.2 +3234 3.5.1:5.4.99:3.5.1:6.3.2:3.5.1:3.1.3:4.1.1 +3235 6.3.5:4.2.1:2.6.1:5.3.1:6.3.4 +3236 2.6.1:4.3.1:1.1.1:2.3.1:3.1.4:1.1.1 +3237 6.4.1:2.3.3:1.3.99:6.4.1:1.1.1:6.3.2:4.2.1:1.17.4:4.2.1:2.3.3:4.1.1 +3238 5.4.99:2.7.8:1.2.4:3.1.4 +3239 2.7.2:2.1.1:1.3.1:2.1.2:2.6.1 +3240 4.1.2:6.3.3:2.7.1 +3241 2.7.7:1.4.1:2.7.7:1.4.3:4.3.1:4.4.1 +3242 1.5.1:6.3.4:3.1.1:4.1.3 +3243 6.3.2:2.1.2:2.6.1:4.1.2:4.1.3:2.7.1 +3244 3.1.3:3.5.4:4.1.1:2.5.1:1.1.1 +3245 2.7.4:4.3.1:2.5.1 +3246 3.1.1:6.3.3:1.2.5:2.1.1:3.5.4:2.3.1:6.3.5:2.7.4:4.4.1:3.6.1:3.4.11:3.3.1:3.1.2:2.7.1 +3247 2.3.1:4.1.2:2.5.1:6.3.3 +3248 2.6.1:1.1.-:3.5.3:2.7.2 +3249 1.2.1:3.5.1:4.1.1 +3250 6.3.2:2.7.1:2.5.1:2.7.1:2.7.4:2.7.2:4.3.2:2.7.2 +3251 2.7.7:5.3.1:6.3.5 +3252 2.5.1:5.4.2:2.3.1:4.3.2:4.1.3:2.7.1:4.1.3 +3253 1.5.1:2.6.1:3.5.1:2.3.1:4.4.1:2.7.1:2.5.1 +3254 1.2.4:4.1.1:1.5.1:3.2.1:6.3.4:4.2.3 +3255 2.1.1:2.1.2:1.5.1 +3256 1.97.1:4.2.3:1.2.4:1.5.1:2.7.1:1.1.1:4.2.1:2.6.1:2.5.1:2.7.4:2.3.1 +3257 1.2.1:2.5.1:3.1.4:4.3.1:2.1.1 +3258 2.3.3:6.3.2:4.99.1:1.5.1 +3259 1.1.1:1.4.4:4.2.1:3.5.5:2.3.1:4.2.1:5.1.3 +3260 2.6.1:3.1.1:1.1.1:2.8.1:2.7.4:6.3.4 +3261 5.1.3:2.6.1:2.1.1:6.3.4:2.7.7:2.7.1:2.3.1:6.3.4:4.1.1:5.1.1:5.4.99 +3262 4.1.2:1.2.1:3.1.3:2.7.2:2.6.1 +3263 4.2.3:2.7.1:2.5.1:3.5.1:2.3.1 +3264 3.5.1:4.2.1:1.4.1:5.4.99:6.3.4:6.3.5:6.3.3:3.5.3:2.7.1 +3265 2.3.1:2.7.7:5.1.3:4.2.1:2.7.7:2.7.1 +3266 4.1.1:1.3.1:3.1.3:4.3.2 +3267 5.1.3:4.2.3:2.7.1 +3268 6.3.4:1.2.1:2.6.1:2.6.1:1.2.4:3.2.1:2.3.1:1.1.1:1.1.1 +3269 1.5.1:2.1.3:3.5.4:2.4.2:2.5.1:2.6.1 +3270 2.1.2:1.2.4:4.1.2:2.3.1:2.7.1 +3271 4.1.3:2.7.2:2.5.1:1.2.1:4.1.2 +3272 2.7.2:2.1.3:2.5.1:6.2.1:2.3.1:2.3.1:4.3.2:3.1.4:6.3.4:6.3.2 +3273 2.3.1:6.3.3:2.4.2 +3274 2.5.1:1.1.1:3.2.1:5.4.2:4.1.2:1.4.1:2.7.1:2.5.1 +3275 2.7.2:4.1.1:2.6.1:2.5.1:3.5.1 +3276 4.1.1:4.4.1:2.7.1:2.6.1:4.3.2 +3277 4.1.2:3.5.4:4.2.3:2.7.1 +3278 6.3.4:5.4.99:5.4.99:1.1.1 +3279 5.4.99:2.7.8:3.5.2:1.4.1:1.1.3:1.2.1:4.1.1 +3280 1.1.1:6.3.1:2.3.1 +3281 4.1.1:2.7.1:4.3.2:1.2.4:2.7.1:2.7.6:4.1.2:2.4.1 +3282 2.1.3:4.1.1:3.1.3 +3283 2.7.1:4.1.1:4.1.1 +3284 2.5.1:4.2.-:3.5.1:1.4.99:1.4.3:1.2.1:3.7.1:1.2.1:2.1.3 +3285 1.1.1:4.2.1:6.2.1:6.3.5 +3286 1.3.3:2.7.2:6.3.1:2.7.7:1.4.1:5.4.99 +3287 1.2.1:2.7.2:3.1.4 +3288 3.4.13:4.2.3:4.2.1:5.3.1:2.1.3 +3289 1.2.1:2.5.1:3.5.1 +3290 4.3.1:4.4.1:2.1.2:4.2.1:6.2.1:4.4.1:6.3.4:4.2.3 +3291 6.1.1:4.2.3:1.1.1:2.3.1 +3292 2.5.1:4.2.1:3.6.1:2.7.1:5.3.1 +3293 1.2.1:3.1.1:1.8.4:4.1.2:5.4.2:4.1.1:1.1.1:2.3.3:4.1.1:3.5.1:1.5.1:3.4.11:4.1.2 +3294 5.1.3:4.2.1:2.5.1:3.5.1:2.3.1:3.5.3 +3295 2.4.1:6.3.5:1.2.1:4.1.99:4.1.1:6.4.1:6.3.4:1.17.4 +3296 3.6.1:5.4.99 +3297 2.2.1:6.3.2:1.4.3:2.6.1:2.3.1 +3298 2.3.1:1.1.1:2.7.2:1.8.7:2.3.3:2.7.2:2.7.2:4.2.1:3.5.1:2.3.1:3.5.4 +3299 2.7.4:2.6.1:2.3.1:2.3.1:2.7.1:2.3.1:1.2.1 +3300 2.6.1:1.2.1:1.1.1 +3301 6.3.2:6.3.4:2.1.1:1.2.1 +3302 2.3.1:5.3.1:5.4.2:4.1.1:2.1.1:2.7.1 +3303 6.3.3:2.4.2 +3304 4.2.1:4.3.2:4.1.2:2.6.1:4.2.1 +3305 1.1.1:4.3.1:2.1.3:2.3.1:3.1.3:4.1.1:2.1.2:2.1.2:1.2.1:1.5.1 +3306 2.1.3:2.7.4:2.6.1:3.5.3:1.2.4:4.1.1:2.5.1:2.4.2 +3307 4.2.1:2.7.2:2.3.1:2.3.3 +3308 2.7.8:4.4.1:1.5.1 +3309 4.1.2:2.7.1:3.6.1:2.7.1:2.6.1 +3310 1.14.13:3.1.4:2.6.1:3.6.1 +3311 4.3.2:6.3.4:2.7.7 +3312 4.3.1:2.7.7:3.1.3:4.1.1:1.5.1 +3313 6.3.4:1.2.1:2.7.1:6.3.4:2.3.3:4.1.2 +3314 2.7.1:4.1.2:2.7.1:1.2.1:1.1.1 +3315 2.5.1:6.3.4:2.6.1:2.7.7:1.1.1:3.1.3:2.5.1 +3316 4.2.1:3.5.2:3.5.3:4.2.1 +3317 1.2.1:3.5.1:3.6.1:4.3.2 +3318 1.2.1:2.4.2 +3319 2.7.1:2.7.2:5.1.3:2.4.1:3.1.3:3.2.1 +3320 3.5.1:4.1.2:4.1.1 +3321 2.7.1:2.3.1:1.1.5 +3322 2.3.1:4.1.1 +3323 3.1.3:3.5.1 +3324 2.4.2:1.1.1:6.3.4:1.2.1:4.1.1:9.9.9:2.6.1:3.5.1:6.3.2 +3325 2.7.7:5.4.2:6.3.4:1.3.3:2.6.1 +3326 6.3.2:3.6.1:4.3.1:1.17.4:1.1.1:1.1.1:3.1.3:6.3.2:2.4.2 +3327 3.4.11:2.3.1:3.1.3:2.3.1:6.3.4:2.7.7 +3328 1.1.1:2.7.2:2.6.1:2.7.7 +3329 2.7.1:6.3.5:4.1.3:3.5.3:4.4.1 +3330 2.3.1:2.3.1:1.5.99:4.4.1:2.7.1:6.3.5 +3331 4.1.1:3.2.1:6.3.5 +3332 3.5.3:2.1.2:2.3.1:2.1.3:4.1.3:1.3.3:5.4.99 +3333 2.7.1:6.3.4:2.1.3:4.1.1:1.2.1:1.2.1:4.2.3:2.7.9 +3334 5.3.1:2.3.1:2.7.2:9.9.9:2.5.1:6.3.2:1.5.1:4.1.99:3.6.1 +3335 1.1.1:1.4.1:2.7.1:4.2.1:5.4.2:6.3.3 +3336 4.3.2:2.6.1 +3337 3.6.1:3.2.1:2.3.1:5.3.1:3.5.1 +3338 1.2.1:2.7.1:2.7.2:1.2.1 +3339 6.2.1:1.4.4:4.1.3:3.2.1:4.2.1:6.2.1 +3340 5.3.1:2.1.1:6.2.1 +3341 1.2.4:2.7.2:2.7.4:2.6.1:1.4.1:2.1.2:4.2.1:4.2.-:1.1.5:1.2.1 +3342 3.1.3:1.5.99:3.5.1:1.2.1 +3343 2.6.1:2.4.2 +3344 4.2.1:4.3.1:2.7.1:4.2.-:2.7.7:4.4.1:4.3.2:1.2.1:1.1.1:1.3.1:4.4.1:2.7.1 +3345 2.1.2:2.7.4:1.2.1:1.5.1 +3346 1.4.1:2.5.1:2.3.1:2.1.4 +3347 6.3.4:3.5.3:1.2.1:2.3.3 +3348 4.4.1:4.2.1:5.4.2 +3349 1.14.12:3.5.1:6.3.1:4.1.3 +3350 4.1.1:2.7.6:3.6.1 +3351 2.3.1:3.1.3:1.17.4:1.1.1:1.14.13 +3352 2.4.2:1.5.99:1.1.1 +3353 1.2.4:1.17.4:4.2.3 +3354 3.5.1:1.1.1:2.7.1:2.3.1:1.1.1:6.3.1:2.7.1:2.3.1:2.7.4 +3355 3.4.11:3.5.1 +3356 2.7.1:4.1.3:1.4.1:6.1.1:3.2.1:1.2.99 +3357 1.2.1:2.6.1:1.14.13:2.7.1:2.3.1:6.3.2:2.7.1:2.6.1 +3358 3.5.3:2.1.1:2.7.7:4.2.3:5.1.1:2.3.3:1.17.4 +3359 1.17.4:1.4.1:1.1.1 +3360 2.4.2:2.3.1:2.1.3:2.5.1:6.3.1 +3361 1.5.1:6.3.4:2.3.1:6.3.2:2.7.4:2.5.1:1.1.1:3.2.1:2.8.1:3.4.13:2.1.2:2.3.1 +3362 2.6.1:1.2.1 +3363 3.6.1:4.1.1:2.1.2:4.2.3:1.17.4 +3364 3.4.11:4.4.1:1.14.13:1.5.1:2.4.1:4.3.1:3.1.1 +3365 2.7.6:2.5.1:4.1.3:1.1.5:2.3.3 +3366 1.14.13:2.6.1:4.3.1:2.4.2 +3367 2.3.1:4.1.1 +3368 4.1.1:4.3.1:1.5.1:2.1.2:2.7.1:2.3.1 +3369 2.7.4:1.17.1:2.5.1:2.5.1:1.5.99:2.1.3 +3370 1.2.5:6.3.2:2.1.2:1.1.5:2.3.1:2.5.1 +3371 2.6.1:2.7.2:5.1.3:6.3.4 +3372 4.99.1:2.5.1:2.3.1:2.7.1:6.3.4 +3373 1.4.1:1.4.4:2.3.1 +3374 4.1.1:6.3.1:4.1.3 +3375 3.5.1:4.2.-:1.4.1:2.1.1:1.1.1 +3376 4.1.1:2.3.1:2.1.3:2.1.3:1.3.1:4.1.1:4.3.1:5.4.99:4.1.2:4.1.3:4.2.1:2.7.1:3.1.3 +3377 1.7.1:2.7.8:3.5.1:5.3.1:5.4.2:1.1.1 +3378 5.4.2:3.2.2:1.3.99:2.3.1:3.1.3:6.3.1 +3379 6.3.4:3.6.1:4.1.2:4.1.2:2.7.7:6.3.1:1.5.1:2.7.2:5.3.1:6.2.1:6.3.4:6.4.1:2.5.1 +3380 4.3.2:1.5.1:2.3.3:1.1.1:6.3.3:2.1.2:2.6.1:2.1.2:6.3.4 +3381 4.1.1:2.7.7:6.3.3:1.2.1:1.7.2:3.2.2 +3382 2.3.1:1.1.1:2.7.7:4.2.3 +3383 4.1.3:4.3.1:4.1.1:2.3.1:3.2.2 +3384 2.3.1:6.1.1:4.3.1:2.7.7:2.6.1:2.7.2 +3385 2.7.7:4.1.2:2.5.1:4.2.1 +3386 1.3.3:3.1.3:2.7.1:5.4.99:2.7.7 +3387 2.1.2:2.7.7:6.3.4:3.1.2 +3388 4.1.3:4.2.1:6.3.4 +3389 2.1.1:4.3.1:5.3.1:2.1.3:5.3.1 +3390 2.1.1:1.4.1:2.3.1:4.4.1:4.2.1 +3391 1.3.99:3.1.3:4.1.1:2.7.4 +3392 5.4.2:2.6.1:3.5.1:2.7.2:2.7.1:4.3.1:6.3.4:5.4.99:2.7.1:1.1.1:3.6.1:2.1.2:5.1.3 +3393 1.2.1:2.1.2:2.6.1:6.3.4:1.1.1:3.1.3 +3394 3.5.1:3.4.13:6.3.4:1.1.1 +3395 1.1.2:2.5.1 +3396 2.1.3:1.4.1:4.2.1:5.3.1:3.6.1:2.6.1:5.4.99 +3397 2.5.1:5.4.99:3.5.2:6.4.1 +3398 6.3.1:6.3.2:1.1.1 +3399 1.1.1:6.3.1:5.1.2 +3400 1.5.1:2.5.1:1.2.1:2.7.4:6.3.5 +3401 2.8.1:2.7.8:1.5.99:6.3.4 +3402 1.1.1:6.3.4:2.6.1 +3403 3.5.3:2.7.6:2.4.2:2.3.1:2.7.1 +3404 3.5.1:6.2.1:1.7.2 +3405 6.2.1:3.5.1:2.7.1:2.7.2:6.3.4:5.1.3:4.3.2:3.5.4:3.5.3:3.5.3:2.7.2:2.6.1:2.7.4 +3406 6.6.1:2.7.2:4.1.1 +3407 5.1.3:1.3.1:1.1.1:4.1.1:6.3.2:1.5.99:1.1.1 +3408 2.3.1:4.1.2:3.1.1 +3409 1.3.3:2.6.1:4.1.2:6.3.4:3.4.11 +3410 4.2.3:3.1.4 +3411 2.7.1:4.3.2:4.1.3:2.5.1 +3412 4.1.3:1.8.1:2.4.1:4.1.2 +3413 2.7.7:3.4.13:3.5.1:3.5.1 +3414 2.1.1:6.3.5:3.5.1:6.3.2:2.1.2:1.1.1:1.4.99:3.6.1 +3415 5.3.1:3.5.1:4.1.1:1.1.1:6.3.2:1.3.3:1.5.1 +3416 3.1.3:3.1.2:2.6.1:6.4.1:4.1.1:2.7.6 +3417 4.1.3:1.4.1 +3418 2.4.2:1.2.1:4.2.1:4.1.1:3.2.1:1.4.3 +3419 2.1.3:5.3.1:1.4.1 +3420 1.3.3:3.2.1:3.3.1:4.2.1:1.1.1 +3421 1.1.1:6.3.4:2.7.1:3.1.3:6.4.1 +3422 4.2.3:2.7.1:5.3.1:3.6.1:2.3.1 +3423 4.4.1:4.1.3:2.7.7:2.1.3:1.4.3:2.6.1:3.5.2:4.1.1:2.7.7:1.5.99 +3424 2.4.2:2.6.1:1.3.99:5.4.2:3.1.2 +3425 3.1.4:2.3.1 +3426 2.3.3:2.7.1:1.1.1 +3427 2.7.2:2.7.2:4.3.2 +3428 4.3.1:4.1.1:2.3.1:4.2.3:4.3.1:1.5.1 +3429 4.1.1:4.3.1:1.2.1:2.7.1:3.2.1:2.4.2 +3430 1.5.3:5.3.1:2.6.1:1.5.1 +3431 4.1.1:5.4.99:1.7.1:2.6.1:2.1.2:3.1.3:2.1.1:2.7.4 +3432 4.2.3:2.6.1:1.6.1:3.5.1 +3433 2.3.3:2.7.2:6.3.5 +3434 2.6.1:2.7.4:4.1.1:2.3.3:2.4.2:2.7.4:1.1.1:5.4.2 +3435 6.3.5:2.2.1:2.7.4:2.1.2:1.3.99:2.6.1:4.2.1:4.2.-:2.3.1:2.7.1:2.1.3:1.3.3 +3436 4.2.1:5.4.99:2.5.1 +3437 6.2.1:2.1.2:6.3.3 +3438 4.2.1:1.2.1:2.1.2 +3439 1.4.1:6.1.1:4.3.2:3.6.1 +3440 1.2.1:1.4.1:3.6.1:4.2.1:5.3.1:4.3.2:2.5.1 +3441 5.1.3:2.3.1:3.2.1:2.1.2 +3442 1.1.1:4.2.3:2.7.1:2.3.1 +3443 1.2.1:2.5.1 +3444 3.5.3:5.4.99:2.7.2 +3445 4.3.2:2.7.1:4.3.1 +3446 4.3.2:3.1.3:1.2.1 +3447 2.7.1:4.3.2:2.7.1:6.3.5:2.7.1 +3448 2.7.7:2.7.7:6.3.2:6.2.1:6.3.4 +3449 1.2.1:3.6.1 +3450 4.2.1:4.1.1:2.7.2:2.3.1:1.1.1 +3451 5.3.1:5.1.2:2.6.1:5.3.1:2.3.1:6.3.4:2.4.2:1.7.2:2.7.7 +3452 5.3.1:3.5.1:2.6.1:2.4.2:4.2.3:6.3.2:2.7.8:2.3.1:4.3.1 +3453 4.4.1:2.3.1:2.4.2:5.3.1:2.6.1:2.7.1 +3454 2.7.7:3.1.2:5.1.2:3.5.1 +3455 2.3.1:3.5.4:3.1.3:2.7.2:2.7.2 +3456 2.4.1:1.2.1:3.5.4 +3457 4.1.1:6.3.3:2.4.2:1.1.1:2.6.1:3.5.3:4.3.1:2.4.2 +3458 3.5.4:2.3.1:2.1.2:4.1.1:2.7.4:2.7.6:2.7.1:6.3.2:1.1.1:2.7.9:1.2.4 +3459 4.1.3:6.3.3:3.2.1:2.6.1:4.1.3:2.3.1:2.6.1:2.1.1 +3460 2.1.2:4.1.1:2.5.1:3.5.3:1.18.6 +3461 2.1.2:3.5.1:4.4.1:9.9.9 +3462 2.7.8:6.3.4:2.1.2 +3463 2.3.1:2.4.2:1.1.1 +3464 5.1.2:2.4.2:2.3.1:2.4.2:6.3.4:2.1.2:1.17.1 +3465 2.5.1:3.4.13:4.3.2:1.2.1:2.1.3:4.4.1:3.1.3:2.1.1:2.5.1:4.2.1:3.5.1:4.1.2 +3466 1.5.1:2.3.1:2.1.1:5.4.2:2.8.3:2.1.1:2.7.7:5.4.99 +3467 3.4.11:2.7.1:6.3.4:6.3.5:3.4.13:6.2.1 +3468 5.4.99:6.3.5:1.1.1:3.6.1:6.3.3 +3469 2.7.1:3.5.2:2.3.1:2.5.1:6.4.1:2.7.1:2.7.7:6.3.5 +3470 4.2.3:1.17.1:2.7.1 +3471 2.3.1:3.2.1:4.1.2 +3472 2.3.1:5.1.1:4.1.2:1.1.1:2.6.1:1.3.1:4.2.1:1.1.1:4.2.3:3.1.4 +3473 2.7.2:4.1.1:2.7.4:5.4.99:5.4.2:1.3.3 +3474 5.1.3:4.1.1:2.6.1:2.6.1:5.4.99 +3475 2.7.2:2.7.9:4.1.3:3.5.3 +3476 1.5.99:3.5.3:1.3.99:2.6.1:4.4.1:2.5.1:3.6.1 +3477 4.2.-:1.5.1:1.14.12:4.1.1:2.1.2:4.2.3:1.3.3:1.4.1:6.2.1:6.3.1:3.5.3 +3478 3.5.3:4.3.2:2.6.1:2.2.1:2.1.3:6.3.5:2.7.7 +3479 2.5.1:4.4.1:2.7.1:4.2.3:4.3.1 +3480 2.7.2:4.1.3:1.4.3:5.3.1:2.7.7 +3481 1.4.1:2.7.1:4.3.1:1.17.4 +3482 2.3.1:2.3.1:1.13.11:5.1.3:2.7.1 +3483 1.4.4:2.7.1:3.6.1:1.2.1 +3484 4.4.1:3.5.1:3.6.1 +3485 4.1.3:6.2.1 +3486 2.7.1:6.3.2:1.1.1:1.2.4:1.1.1 +3487 2.3.1:4.1.1:1.-.-:6.3.2:4.2.1:6.4.1:2.6.1 +3488 1.2.1:3.5.1:2.7.2 +3489 6.2.1:2.4.2:2.6.1:1.7.99:2.1.2:4.99.1:3.2.2:2.3.3 +3490 4.1.1:4.1.2:1.1.1:3.1.2:2.1.3:6.3.5:2.7.1 +3491 2.1.2:1.1.1 +3492 2.7.1:2.7.2:4.1.1:2.7.1:3.2.1:2.7.1:5.3.1:2.2.1:1.1.1:2.1.2:2.7.7:2.7.1:2.7.1:3.4.13 +3493 2.5.1:5.4.99:6.3.3:2.7.1:6.3.2:1.1.1 +3494 1.3.1:2.1.3:2.6.1:4.1.1 +3495 2.5.1:4.3.2:2.4.2:1.1.1:3.1.1:1.2.1:6.3.4:9.9.9 +3496 6.3.2:4.3.1 +3497 2.1.3:3.1.4:2.1.1:2.4.2:4.2.1:1.8.1:4.1.1:2.1.1:3.2.1 +3498 1.1.1:5.1.2:2.3.1:1.2.4:2.3.1 +3499 6.3.2:4.3.1:1.2.1:2.6.1 +3500 1.4.1:4.3.1:1.1.1:1.1.1 +3501 2.4.1:3.1.3:2.7.7:1.1.1:4.1.1:3.6.1:3.1.3:5.3.1:4.2.1 +3502 2.6.1:3.1.1:1.13.11 +3503 6.3.4:4.1.1:2.1.1:2.3.1 +3504 1.2.1:2.4.2 +3505 6.3.2:5.3.1:2.7.8:3.2.2 +3506 4.1.2:2.7.1:2.3.1:3.1.2:3.5.4:3.2.1 +3507 5.1.3:1.3.99:3.2.2:4.2.3:2.7.4:2.7.2 +3508 2.6.1:1.2.4:4.1.1:2.3.1:3.2.1:1.17.4:2.1.2:1.5.99:5.4.2 +3509 4.1.2:4.1.3:1.1.1:1.2.1 +3510 4.-.-:3.1.1:2.7.1 +3511 2.7.2:4.4.1:6.3.5 +3512 5.4.99:3.5.1:3.6.1:2.3.1 +3513 2.7.4:4.1.2:3.2.1:4.2.1:1.13.11:2.5.1:6.3.3:2.4.2:2.3.1:3.5.4:6.3.2 +3514 2.5.1:3.1.2 +3515 4.2.1:2.2.1:4.3.1:4.3.1:2.1.3:1.1.1:5.4.2 +3516 2.7.2:1.4.1:2.1.3 +3517 2.5.1:1.2.1:3.2.1:2.3.1:2.7.7:2.7.1:1.2.1:2.7.7:2.1.2:3.6.1 +3518 4.3.2:2.6.1:2.3.3:3.2.1:2.6.1:2.7.2:3.1.7:2.4.2 +3519 2.4.2:4.3.2:4.4.1 +3520 4.4.1:1.2.1:2.6.1:4.3.2:3.1.1:6.3.5:4.1.1:2.3.3:2.7.2:2.4.2:4.2.1:1.7.2:3.1.3 +3521 2.5.1:2.-.-:4.1.1 +3522 9.9.9:6.3.5:4.1.1:1.2.1:1.2.1:2.6.1 +3523 3.1.3:4.2.1:2.6.1 +3524 2.7.1:3.5.1:5.3.1:3.6.1:6.3.1 +3525 1.4.99:2.7.1:4.2.1:1.1.1:6.3.1:1.1.1:1.2.1 +3526 4.3.2:4.3.1:2.7.7:4.2.1:3.2.1 +3527 5.4.99:2.7.1:3.1.3:2.1.3:4.2.1:6.3.4:2.3.1 +3528 4.1.1:4.1.2:2.7.1:1.2.1:2.3.1 +3529 6.3.4:3.4.11 +3530 3.6.1:5.3.1:2.7.4:5.3.1:2.7.9 +3531 1.2.1:3.1.3:3.5.2:6.3.2:3.5.3:2.1.2:2.1.1:1.5.1 +3532 2.7.4:2.7.1:2.3.1:6.3.4:2.7.2:4.1.2:2.5.1 +3533 5.4.2:2.7.1:4.99.1:2.6.1:1.1.1 +3534 2.6.1:2.6.1:2.1.2 +3535 1.11.1:5.3.1:2.7.8:2.2.1 +3536 4.1.1:2.1.3:2.3.1:1.14.16:4.3.2:1.7.99 +3537 5.3.1:3.1.3:2.3.1:6.3.2:2.1.3:2.5.1 +3538 2.4.2:4.1.1 +3539 2.6.1:3.1.1:4.3.1:5.5.1:3.6.1:2.4.2:3.6.1 +3540 1.1.1:3.5.5:5.4.99:2.7.6:2.6.1:4.2.3:2.1.3 +3541 1.4.1:2.1.1 +3542 4.3.2:4.4.1:3.1.3:4.2.1 +3543 3.5.1:3.4.13:1.5.1:2.3.3:2.7.1:3.5.1:1.2.1:6.3.4 +3544 2.5.1:6.3.4:2.3.1:2.5.1:3.3.1 +3545 6.2.1:3.4.11:2.6.1:2.1.2:2.7.1:4.1.3:2.5.1 +3546 2.7.4:5.3.1:6.3.5:2.6.1 +3547 3.1.2:2.7.2:1.1.1:1.2.1:3.5.1:2.7.9:2.7.1 +3548 1.5.1:2.7.2:2.7.7:3.5.3 +3549 3.1.1:3.5.1:2.1.2:3.5.1 +3550 2.7.6:1.1.1:3.5.1:4.1.1 +3551 2.3.1:2.5.1:2.1.2 +3552 4.1.1:2.3.1:2.1.2:2.5.1:5.4.2:4.1.1 +3553 1.1.1:2.7.1 +3554 1.3.3:3.1.1:4.1.1:1.1.1 +3555 1.14.12:1.4.99 +3556 3.5.1:4.1.2:2.3.1:1.7.99:6.3.5:1.17.4:2.1.4:6.3.4:4.1.1:1.1.5:2.1.2:4.3.2:2.3.1:2.6.1 +3557 4.3.2:1.14.13:1.17.1:1.17.4:4.3.1:3.5.2:3.5.3 +3558 3.5.1:4.1.1:4.1.1:4.3.1:4.1.3 +3559 2.7.6:2.3.1:2.7.4:4.1.1:6.3.5:2.7.1 +3560 4.1.3:6.3.4:2.1.3:4.3.2 +3561 2.1.2:2.7.1:2.7.1 +3562 2.3.1:4.1.1:4.2.1:3.5.4:4.3.1:2.7.4 +3563 2.7.4:1.7.2 +3564 6.3.4:3.5.1 +3565 6.3.2:4.3.2:2.3.1 +3566 2.6.1:1.1.1:5.4.2:3.6.1:4.1.2 +3567 3.5.1:2.3.1:2.6.1:2.3.1:1.1.1:6.3.5 +3568 4.1.1:2.7.1:4.1.3:2.5.1 +3569 2.4.2:6.3.2:3.5.1:4.1.2:4.4.1 +3570 4.1.2:2.7.1:2.7.7 +3571 2.7.7:1.2.1:2.7.2:1.7.99 +3572 2.6.1:2.3.1:1.5.1:2.1.2 +3573 5.3.1:2.6.1:4.4.1:6.2.1:2.1.1 +3574 3.4.11:1.1.1:1.3.1:3.5.1:6.4.1:2.1.2:2.7.1 +3575 3.6.1:3.5.1:2.6.1:4.3.1:1.4.1 +3576 3.6.1:2.1.1:4.1.1:2.7.1 +3577 1.11.1:4.1.1:2.7.1:1.2.1:4.3.2 +3578 2.4.2:6.3.4:5.4.99:4.1.2 +3579 4.1.1:6.1.1:9.9.9:2.4.2:4.4.1 +3580 1.1.1:2.1.3:4.3.2:2.7.7:1.4.1 +3581 5.4.2:6.3.4:2.4.1:3.1.3 +3582 4.1.1:2.5.1:3.5.3:6.3.3 +3583 2.5.1:6.3.2:3.6.1:5.4.2:1.2.1:2.7.2:2.7.4:6.3.2:1.2.1 +3584 4.1.1:2.1.2:4.1.2:2.7.1:3.5.5:1.1.1 +3585 6.3.4:5.3.1:2.7.1:3.5.4:2.7.1 +3586 6.3.4:1.1.1:3.5.1:1.5.1:2.4.2:6.3.4 +3587 1.14.13:2.5.1 +3588 3.1.4:4.1.1:3.5.3:1.2.1:2.8.3:2.7.6:2.4.2:2.6.1:1.5.1:4.1.1:2.3.1 +3589 3.5.1:5.3.1:3.5.3:1.2.1:2.7.7:1.1.1:2.4.2:2.2.1:2.4.2:5.3.1 +3590 2.3.1:1.2.1 +3591 3.5.1:6.3.2:2.7.1:4.2.1:4.4.1 +3592 2.2.1:2.7.4 +3593 1.1.1:2.7.1:1.2.1:2.1.2:6.3.3:2.4.1:2.1.1:4.2.1 +3594 2.3.1:1.2.1:5.1.3:2.3.1 +3595 3.1.3:4.3.2:5.4.2:1.2.4:2.7.1:2.3.1:1.1.1 +3596 2.1.3:6.3.5:1.2.4:2.1.2:2.7.1:2.1.1 +3597 2.7.1:2.6.1:1.1.1:1.1.5 +3598 1.1.1:2.4.2:6.3.4:1.7.99:6.1.1:4.2.1 +3599 6.2.1:1.3.99:4.3.1:1.5.1:1.5.1:4.1.1 +3600 6.3.4:5.1.3:2.7.1 +3601 4.1.1:2.5.1:2.3.1:2.6.1:4.3.1 +3602 6.3.4:9.9.9 +3603 2.3.1:6.3.5:4.3.2:3.5.3 +3604 4.1.1:3.1.3:1.1.5:4.1.1:2.5.1 +3605 2.4.2:6.3.2:1.1.1 +3606 5.3.1:6.3.4:2.4.2 +3607 2.5.1:6.3.5:2.6.1:3.5.1:2.6.1:2.6.1:2.7.1:4.1.1:2.5.1 +3608 5.3.1:1.5.1:2.7.7:2.7.1 +3609 3.4.11:2.5.1:4.3.2:2.6.1:4.1.1 +3610 2.7.2:1.2.1:3.1.3:2.7.2 +3611 5.4.2:2.7.1:4.3.1:1.4.1:2.7.8:1.4.1:3.5.1:1.1.1 +3612 4.2.1:2.1.4:2.6.1 +3613 4.1.2:2.1.1:1.17.1:4.4.1 +3614 1.1.1:2.2.1:4.1.1:4.3.1:3.6.1:4.3.1 +3615 2.7.1:4.3.2:5.1.3:4.2.1:2.6.1 +3616 4.3.2:6.3.4:5.1.3:5.4.2:6.3.4:2.7.2:9.9.9:2.7.1 +3617 2.3.1:3.1.1:4.2.3:2.7.1:6.3.4 +3618 2.6.1:2.7.2:4.1.3 +3619 2.7.1:4.2.1:6.3.3:6.3.2 +3620 4.1.1:4.2.1:1.14.11:4.1.1 +3621 3.2.1:4.1.1:1.5.1 +3622 3.5.1:3.1.4:3.6.1:1.1.1 +3623 2.7.4:2.3.1:3.2.1 +3624 1.-.-:2.6.1:6.4.1:2.7.1 +3625 6.4.1:3.1.4:1.1.1:6.3.4:2.7.4:3.2.1:5.1.3:4.1.1:6.3.4:2.7.2 +3626 2.7.1:2.3.1:4.1.3:4.2.1:2.4.2:1.13.11 +3627 5.4.2:2.7.6:6.3.4:5.3.1:1.1.1:1.2.5:1.1.1:4.1.1:2.6.1:2.7.1 +3628 3.1.3:4.1.1:3.5.3:1.2.1:4.1.1 +3629 2.7.2:2.4.2:2.1.3:3.3.1:1.2.1:2.7.1:3.5.3 +3630 1.1.5:5.3.1:3.5.1:4.3.2:3.1.2:2.5.1:2.6.1:2.7.2:2.6.1:4.1.2:2.3.1 +3631 1.3.3:6.3.2:2.7.8:9.9.9:2.5.1:2.7.2:6.3.4 +3632 2.7.1:5.3.1 +3633 4.4.1:2.3.1:2.7.4:5.3.1:3.1.3:2.7.6:2.6.1:2.3.1:3.5.4 +3634 1.2.1:6.2.1:2.6.1:6.3.1:2.3.1 +3635 2.7.1:2.6.1:1.8.1:2.3.1 +3636 2.7.1:4.2.3:2.3.1:2.7.1:5.4.99:1.2.1:6.3.5:9.9.9 +3637 6.4.1:4.3.2 +3638 6.1.1:1.1.1 +3639 2.5.1:5.4.2:2.3.2:6.3.5:5.3.1:3.5.1 +3640 1.1.1:2.6.1:5.3.1:2.7.2:6.3.1 +3641 3.5.1:4.3.2:5.4.99:5.4.2:2.1.2:1.5.1:2.1.2:4.4.1:3.6.1:4.3.2 +3642 1.2.1:4.2.3:2.7.2 +3643 2.7.1:3.1.1:2.7.1:1.2.4:3.1.3:2.3.1 +3644 3.1.3:1.4.1:3.6.1:2.7.1:6.3.1:3.2.1:4.1.1:3.6.1 +3645 6.3.2:4.1.1 +3646 6.2.1:2.1.2:3.6.1:4.1.1:1.4.3 +3647 6.3.5:3.5.2:2.5.1:4.3.2 +3648 1.2.7:3.5.1:1.2.1:3.2.1:2.6.1 +3649 4.2.1:2.1.3:3.2.1 +3650 2.5.1:6.3.1:5.1.3:6.2.1:4.1.1:5.4.99:5.1.1:5.4.2 +3651 2.6.1:1.5.1:2.7.1:3.5.2 +3652 6.3.4:2.4.1:2.7.7:1.1.1:2.7.1:3.5.1:3.4.13:6.2.1:2.7.2 +3653 3.5.1:4.2.1:1.1.1 +3654 2.1.2:2.7.7:2.1.1:6.2.1:4.3.2:3.1.3:1.2.1:3.6.1:2.6.1 +3655 4.3.1:1.4.3 +3656 2.6.1:2.3.1:2.4.2:2.1.3:5.3.1 +3657 2.3.1:6.3.2:4.3.1:6.3.3 +3658 2.7.1:6.3.4:1.1.1:4.1.1:2.3.1:2.4.2:2.6.1 +3659 1.1.1:4.4.1:3.5.3:2.7.1:1.3.1 +3660 4.1.2:2.1.2:1.14.16:1.3.3:2.6.1 +3661 1.1.1:4.1.2:1.2.4:4.1.1 +3662 1.5.1:4.2.3:2.1.4 +3663 2.7.1:1.4.3:2.6.1:2.3.1:2.3.1:1.4.1:1.2.1 +3664 1.2.4:1.3.1:2.2.1:2.1.3:3.1.3 +3665 6.3.2:2.3.1:2.6.1:3.1.1 +3666 6.3.4:2.5.1:3.1.3:2.1.1:3.5.1:4.3.1:4.2.3:3.1.2:4.2.1:1.5.99 +3667 4.2.1:3.2.1:4.3.2:1.1.1:3.5.1:2.7.1:4.1.1:3.5.1:9.9.9 +3668 1.8.99:3.5.3:4.1.1:2.5.1:4.3.1 +3669 3.5.1:2.7.1:2.5.1:2.7.7:3.1.2:4.3.1 +3670 1.1.1:2.5.1:1.1.1:4.1.2:2.4.2:2.6.1 +3671 6.2.1:2.7.2:2.5.1:2.7.1:2.1.3:1.14.13:6.3.3 +3672 2.7.2:2.3.1:6.3.2:4.1.1 +3673 1.5.1:2.8.3:3.5.3 +3674 2.7.1:3.1.2:1.3.99:4.1.2:1.1.1:3.5.3:1.8.1:1.1.1:1.1.1:2.3.1 +3675 1.2.4:6.3.4:2.5.1 +3676 1.4.1:5.4.2:2.3.1:4.4.1 +3677 4.1.1:6.3.4:3.5.1:4.3.1:2.1.1 +3678 2.4.2:4.1.1:1.1.1:4.1.2:2.7.1 +3679 2.6.1:3.6.1:3.4.11:3.1.3:2.4.2:2.6.1 +3680 4.2.1:2.7.4:6.3.4 +3681 6.3.2:1.1.1:6.3.4:2.6.1:2.7.4:2.7.1:2.7.2:1.2.1:3.5.1 +3682 6.3.5:4.2.-:6.3.5:2.3.1:6.3.2:5.3.1:4.3.1 +3683 2.7.2:5.4.2:6.3.2:1.1.1:2.3.1 +3684 3.5.4:1.5.1:2.1.2:6.3.4:3.2.1:1.1.1 +3685 2.3.1:2.7.2:2.7.7:2.4.2:6.3.4 +3686 2.3.1:2.3.1:2.1.3 +3687 6.3.2:2.3.1:3.1.3:4.1.2:6.3.5:4.2.3:3.7.1 +3688 3.1.7:6.3.4:2.7.1:1.5.1:4.2.-:2.3.1:2.6.1:2.4.2:2.6.1:2.7.2 +3689 2.1.1:6.3.4:1.1.1 +3690 5.3.1:4.2.3:3.3.1:2.7.1 +3691 5.4.2:1.2.4:6.3.5:2.7.2 +3692 6.3.2:2.2.1:2.3.1 +3693 6.2.1:4.1.2:2.1.1:3.1.2:2.6.1:2.7.2:4.4.1:2.7.4:2.3.1:2.3.1:2.3.1:1.5.99 +3694 3.7.1:1.2.1:4.1.2:2.7.1:3.5.1:5.4.99:3.7.1:3.5.4:2.6.1 +3695 2.4.1:4.2.-:6.3.5:1.1.1:4.1.1:2.7.6 +3696 2.7.2:2.7.7 +3697 2.5.1:3.1.3:4.2.1:2.7.2:2.3.1:2.5.1 +3698 2.7.6:1.5.1:4.2.1:2.6.1:2.6.1:2.2.1 +3699 4.4.1:3.5.1:2.3.1:2.1.2:2.7.7:2.3.1:2.3.1 +3700 4.3.2:1.5.1:2.1.3:1.17.4 +3701 2.7.1:4.3.2:2.4.1 +3702 5.4.2:6.3.1:1.13.11:2.7.1:5.3.1:2.5.1:2.-.-:1.2.1:4.3.2:2.4.2 +3703 2.6.1:2.5.1:4.1.1:2.5.1:4.1.1:2.7.1:5.3.1:1.14.99:3.1.4 +3704 6.4.1:2.7.1:6.3.5:2.8.1:2.6.1 +3705 1.2.1:1.3.3:2.7.2:3.5.3 +3706 2.1.4:4.2.3:2.7.6 +3707 2.7.2:2.3.1:1.13.11:2.3.1 +3708 1.2.1:3.5.3:2.4.1:2.3.1:5.1.1:1.13.11 +3709 2.3.1:2.4.2:1.14.15:5.4.99 +3710 2.3.1:4.3.2:6.3.5:2.4.1:2.3.1:3.4.11:1.5.1:3.1.4 +3711 2.7.1:4.1.3:4.1.1:6.3.1:4.1.1:1.1.1:2.5.1:6.3.4 +3712 3.5.1:5.4.2:5.4.2:2.7.6:1.3.99:6.3.4:3.4.13:4.4.1 +3713 4.1.1:5.3.1:4.3.2:4.1.1 +3714 2.7.9:4.1.2:1.5.1:4.1.1:3.4.13:3.5.4 +3715 4.2.1:3.1.1:4.1.1:5.4.99:3.1.7:2.5.1 +3716 2.3.3:4.1.2:2.3.1:2.4.2:2.2.1 +3717 4.1.2:2.1.3:1.1.1:2.7.4 +3718 1.5.1:5.4.2:3.1.3:1.1.1:2.3.1:2.7.2:2.5.1:6.3.2:1.1.3:9.9.9 +3719 4.1.2:4.3.1:6.3.3:1.5.1:2.1.3 +3720 5.3.1:2.1.2:5.4.99:5.4.99:3.5.1:2.7.2:4.1.3:1.2.1:6.3.4:1.4.1:1.4.1:6.3.3 +3721 2.5.1:6.3.4:2.4.2:6.2.1 +3722 2.4.2:4.1.3:2.6.1:5.4.99:2.7.4:6.3.4 +3723 5.1.3:5.4.99:1.2.4:2.7.2:1.2.4 +3724 2.3.1:5.3.1:2.3.1:3.4.11:4.1.1:4.1.1 +3725 6.3.4:5.4.99:5.4.99 +3726 6.3.3:4.1.2:1.1.1:2.7.1:5.4.2:2.7.4:2.9.1 +3727 1.5.3:3.1.3:5.1.1:2.7.2:2.1.1 +3728 3.6.1:2.6.1:3.1.5:2.3.1:1.1.1 +3729 1.2.1:2.5.1:2.6.1:4.1.2:4.4.1:2.4.2:4.2.1:1.2.5:4.3.2 +3730 6.3.4:4.3.1:1.1.2:2.7.1:3.1.3:4.1.1:6.3.5 +3731 3.5.1:3.5.3:2.7.1:2.7.7:3.1.2:2.1.3:1.2.1 +3732 2.7.2:5.3.1:2.2.1:2.4.1:2.7.2 +3733 9.9.9:1.1.1:2.3.1:2.5.1:2.2.1:2.7.4:2.1.1 +3734 2.7.1:2.5.1:2.3.1:2.7.7:3.5.1:2.7.7:1.5.1:3.5.1:2.3.1:4.1.2 +3735 3.5.1:1.17.4:2.6.1:1.1.5 +3736 3.5.1:2.7.1:2.4.2:2.7.6:2.2.1:5.3.1:2.7.1:2.7.6:2.7.4:2.7.2 +3737 4.2.1:4.1.1:2.7.1:1.5.1:2.7.7 +3738 2.8.1:4.2.3:2.1.4 +3739 3.5.4:4.2.-:2.3.1:2.1.2:2.4.1 +3740 2.3.1:2.7.1:4.4.1:2.7.8:4.3.2 +3741 2.4.2:4.1.1:2.4.2:4.2.3:4.1.1:4.1.1:1.5.99:3.4.11:4.3.2:1.7.1:1.1.1 +3742 1.4.3:1.2.1:6.3.3:2.7.1:2.3.1:2.7.1:4.1.1:6.1.1:3.1.3 +3743 6.3.5:2.3.1:1.2.4:2.5.1:4.1.1 +3744 1.2.1:2.7.8:2.5.1:3.5.4:3.5.1:2.5.1 +3745 1.1.1:2.3.1:2.3.1:5.4.2:4.1.3:4.2.1 +3746 4.4.1:1.2.1:6.3.3:6.3.2:2.3.3 +3747 2.6.1:6.3.2:2.7.2:1.7.1:6.3.3:3.5.4 +3748 4.4.1:1.4.99:9.9.9:4.1.1:2.5.1 +3749 2.1.3:2.7.7:1.2.1:2.7.7:2.1.2:5.3.1:4.1.1:3.6.1:2.7.1:3.5.5 +3750 4.3.1:2.3.1 +3751 2.7.4:1.3.99:4.1.2:2.7.2:4.2.1:3.5.1:4.1.1:3.1.1:1.17.4:4.2.1 +3752 1.2.1:2.7.1:2.4.2:3.6.1:3.1.3:4.1.2 +3753 2.1.2:2.6.1:2.7.4:2.3.1:6.3.5 +3754 2.3.1:1.4.3:2.4.2:2.7.1:3.5.3:3.1.3:2.4.1:1.1.1:5.4.2 +3755 4.1.2:3.1.3:3.4.13:2.1.2:1.14.13 +3756 2.3.1:2.4.2:1.2.1:1.3.1:2.6.1 +3757 3.5.2:1.5.1:4.1.1:4.2.1 +3758 1.3.1:1.13.11:2.3.1 +3759 3.2.1:1.13.11:1.1.1:3.5.1:4.2.1 +3760 2.6.1:1.2.4:3.2.1:3.5.2 +3761 1.5.1:4.1.1:1.3.99:4.3.1:2.7.1 +3762 6.3.2:2.7.7:2.7.6:3.2.1 +3763 2.3.1:1.11.1:2.5.1:2.7.1 +3764 3.4.11:4.1.2:5.4.2:4.4.1 +3765 4.2.1:4.1.1:3.5.1:5.3.3:5.4.2:2.1.2:6.3.3 +3766 2.7.1:6.1.1:2.5.1:1.1.1:3.5.1:3.1.1:3.5.1 +3767 2.7.1:6.3.2:6.3.4:4.4.1:5.4.2:6.3.3:1.7.2 +3768 4.1.1:6.3.4:1.2.4:3.5.3:3.1.3:3.5.1:1.17.4:1.3.3 +3769 2.5.1:3.2.1:1.1.5 +3770 1.1.1:4.3.2:3.5.3:3.4.13 +3771 1.2.4:1.2.1:2.6.1:1.2.4:1.2.1:2.3.1:4.2.1:1.2.4:2.3.1 +3772 2.3.1:2.6.1:2.6.1:3.5.1 +3773 2.7.1:2.7.4:6.3.4:2.7.2:6.4.1:3.5.1:2.7.8:3.5.1:4.1.1:6.2.1:6.3.5:2.1.2:3.2.2 +3774 2.6.1:2.7.4:2.3.1:4.1.1:3.5.1 +3775 6.3.4:4.1.1:1.2.4:2.1.2:1.1.1 +3776 2.2.1:6.3.4:4.4.1:2.6.1:2.1.1:4.2.1:2.8.1:2.9.1 +3777 1.2.4:4.1.1:1.5.1 +3778 3.1.7:1.1.1:5.4.2:4.2.1:4.2.3 +3779 5.4.2:1.8.1 +3780 2.2.1:3.5.4:1.3.1 +3781 2.5.1:2.1.1:3.5.1 +3782 2.1.3:2.7.4:2.7.1:2.5.1 +3783 6.3.3:3.5.3:2.3.1 +3784 4.1.2:4.1.1:2.7.8:2.6.1 +3785 5.4.99:2.3.1:3.1.3:2.7.1:1.13.11 +3786 3.2.1:1.1.1:1.1.1:2.5.1:2.4.1 +3787 3.5.2:3.1.2:2.5.1:2.4.2:3.6.1:3.5.4:4.2.1:4.4.1:3.6.1:2.7.4:3.5.2:2.6.1 +3788 3.1.1:4.1.2:4.2.1:2.7.2:5.2.1:4.1.2:2.1.2:2.3.3:2.7.4:2.5.1:3.3.1 +3789 1.1.1:2.7.7:2.3.1:2.7.4:2.7.7 +3790 2.3.1:4.2.3:2.7.7:3.6.1:2.7.2 +3791 5.4.99:2.6.1:1.2.1:3.5.4:3.5.1:4.1.1:1.14.16 +3792 4.1.1:1.1.1:3.6.1 +3793 2.3.1:1.5.1 +3794 2.4.1:4.2.1:2.7.1:2.7.1:5.4.2:4.2.1:5.4.99 +3795 1.8.1:1.1.1:1.2.1:1.4.1:2.5.1 +3796 1.1.1:2.3.1:4.3.2:2.7.2 +3797 2.3.1:5.1.1:1.5.1:1.2.1:1.2.1 +3798 4.2.3:1.1.1:6.4.1 +3799 4.1.2:2.3.1:4.1.3:4.1.2:2.7.4 +3800 6.3.5:2.6.1 +3801 6.3.4:1.7.2:2.7.7:3.1.4:6.3.4 +3802 2.5.1:2.3.1:2.3.1:1.2.1:2.7.1:2.6.1:3.2.1:2.1.2:2.6.1 +3803 2.6.1:6.3.2:3.2.1:5.4.99:3.5.2 +3804 2.9.1:6.3.4:6.3.2:3.1.3:1.2.4 +3805 2.7.1:4.4.1 +3806 2.1.2:5.4.2:2.5.1:1.1.3 +3807 2.6.1:2.4.2:2.7.2 +3808 5.3.1:6.3.1:1.4.1:3.13.1:2.5.1:2.7.2:3.1.4 +3809 3.5.1:1.5.99:4.3.2:1.7.2:2.3.1:1.1.2 +3810 4.1.3:5.4.99:1.4.1 +3811 4.1.1:2.5.1:3.5.4:1.5.1:2.1.2 +3812 5.3.1:1.2.1:3.5.1 +3813 2.8.1:2.4.2:4.2.1:2.7.1:1.3.3:1.5.99:3.5.2:2.7.1 +3814 2.4.2:2.6.1:1.8.1:6.3.5:1.1.1 +3815 4.1.2:2.1.1:6.3.2:2.6.1 +3816 2.4.1:9.9.9:6.3.4:1.1.1 +3817 3.6.1:3.6.1:1.1.1 +3818 3.5.3:1.2.1:5.1.1:2.7.1:3.1.3:2.7.2:1.2.1:2.4.2:2.3.1:3.5.1 +3819 4.1.1:4.1.3:2.7.2 +3820 3.1.3:6.3.5:3.1.4:4.3.2:6.3.3:2.6.1 +3821 1.2.1:2.7.2:4.2.-:2.3.1 +3822 2.7.1:4.3.1:5.4.1:2.4.1:3.5.3:2.7.7 +3823 5.4.99:2.7.1:2.1.2:6.3.5:6.3.4:4.1.1:4.1.1:2.7.7:3.5.3 +3824 3.1.3:9.9.9:2.3.1 +3825 6.3.3:2.1.3:1.1.1:1.1.1:1.2.1:4.1.1 +3826 6.3.4:2.7.4:5.3.1:1.3.99:2.1.2:3.2.1:9.9.9 +3827 6.3.4:4.2.1:3.5.1 +3828 2.3.3:1.2.1:1.2.4:4.1.1:1.2.4:1.2.1 +3829 3.5.1:3.1.3:4.1.1:1.1.1:4.4.1:3.5.1:3.4.11 +3830 1.2.1:4.1.1:3.5.3:2.2.1:3.1.1:4.3.2:1.2.1 +3831 1.2.4:3.4.11:3.5.1:1.7.1:2.3.1:2.7.1 +3832 3.5.1:1.8.1:2.7.7:2.7.7:5.4.2:3.5.2 +3833 2.4.2:3.5.1:2.7.1:1.1.1:3.5.1:2.7.7 +3834 6.3.5:2.7.4:2.7.1 +3835 1.2.4:2.3.1:4.3.2:5.4.2:2.1.1 +3836 4.1.1:2.5.1 +3837 4.3.1:1.8.1:1.2.1:2.7.1:2.5.1 +3838 1.5.1:2.7.2 +3839 6.3.2:6.3.5:1.2.1:1.2.1:4.2.1 +3840 3.5.1:4.3.1:6.3.3 +3841 2.5.1:2.3.1:2.3.1:2.5.1:1.1.2:1.2.4:2.7.1:5.4.99 +3842 2.2.1:2.5.1:2.1.1:1.3.99 +3843 6.3.5:2.7.7:4.1.3:3.1.1:2.5.1 +3844 3.1.3:6.3.5:6.3.3:2.3.1:2.7.2:5.4.2:2.7.4:5.3.1 +3845 1.1.1:2.1.2:2.7.4:2.3.1 +3846 2.7.1:3.5.1:2.3.1 +3847 5.3.1:2.6.1:5.3.1 +3848 2.6.1:1.1.1:4.2.1:2.7.7:2.7.4:1.5.1:1.5.1:6.3.3 +3849 1.1.3:2.7.6:1.1.1:2.7.1:4.2.1:3.5.1:4.1.1:3.1.3:5.4.2:1.1.5 +3850 4.3.1:3.5.3:2.7.2:2.7.1:2.6.1 +3851 5.4.2:6.3.1:4.2.1:4.2.3:3.2.2:6.3.3:3.1.3:2.7.2 +3852 2.7.2:6.3.3:2.7.2 +3853 2.7.1:5.1.3:6.3.3:4.3.2:4.3.1:2.6.1:6.3.2 +3854 1.1.1:6.3.5 +3855 2.3.1:2.3.1:3.6.1:4.2.1 +3856 2.2.1:1.1.1:2.5.1:1.2.4:2.7.7 +3857 4.1.2:3.1.3:4.3.2:1.3.99:4.2.1:2.3.3:1.4.99:3.6.1:4.3.2 +3858 6.3.1:6.2.1:2.4.2:4.1.1:2.6.1:4.4.1:1.5.1 +3859 2.3.1:3.5.1:4.4.1:4.1.2:3.5.3:5.4.2:3.5.3:1.2.1 +3860 5.1.3:6.3.5:2.6.1:4.1.1:6.3.4:1.2.1:5.1.3:6.2.1 +3861 5.3.1:2.3.1:4.1.1:1.4.99:5.3.1:4.3.1:2.7.4:2.7.1 +3862 2.7.7:2.5.1:4.1.1:4.4.1:4.1.3:4.3.2 +3863 1.3.99:2.1.2:1.4.1:4.3.2 +3864 2.3.1:6.2.1:1.7.99 +3865 3.1.3:3.5.1:6.3.4:2.1.2 +3866 4.3.2:1.1.1:2.7.4:2.1.2:2.2.1:2.3.1 +3867 1.2.4:4.3.1:4.4.1:2.5.1:2.7.4:5.1.3:4.1.2 +3868 2.1.1:1.2.1:3.5.3:2.7.1:3.4.13:6.3.1:2.7.9:5.1.2 +3869 3.1.3:3.5.1:6.2.1 +3870 3.6.1:4.4.1:5.4.99:1.8.1:1.1.1:1.2.1:4.3.2 +3871 1.17.4:2.6.1 +3872 1.1.1:4.1.1:2.1.2:2.3.1:5.3.1 +3873 3.5.1:2.7.2:1.2.1:2.7.2 +3874 2.5.1:1.17.1:2.7.7:4.2.1 +3875 4.1.1:2.6.1:2.6.1:6.3.4:2.3.1:1.3.99:1.1.1:6.3.5:4.3.2:4.1.1:1.2.1:4.1.1:2.7.2 +3876 1.2.1:2.7.7:4.1.3:4.1.1:4.1.1 +3877 3.5.1:2.1.3:1.14.12:6.1.1:6.3.4 +3878 3.5.3:3.1.3:2.6.1:3.1.1:2.7.2:3.2.1:2.3.1:1.1.1:1.4.3:4.1.3:2.7.1:3.1.3 +3879 6.3.1:4.1.1:1.14.13:2.4.2:4.1.1:2.3.3:4.4.1 +3880 4.1.2:6.3.1:2.4.2:2.5.1:2.7.4:4.2.1 +3881 4.1.3:3.5.4:2.5.1:4.2.3:2.3.1 +3882 1.2.1:9.9.9:2.7.7:1.13.12 +3883 2.4.2:3.5.1:5.4.99:1.2.1:2.6.1:6.3.4:2.5.1:1.2.1:1.5.1:1.5.99 +3884 1.1.1:2.7.1:2.7.1 +3885 6.3.4:1.1.1:6.3.2 +3886 2.3.1:4.3.2:2.7.1:3.5.1:3.6.1:4.2.1:1.5.1 +3887 2.7.1:2.6.1:4.3.2:2.3.1 +3888 4.1.2:2.3.1:5.3.1:6.3.4:1.1.1:4.1.1:6.2.1:3.1.3 +3889 4.2.1:2.3.1:4.1.2:6.3.4:4.2.1:2.1.1:2.7.1:2.3.1:2.3.1:2.7.7:3.2.1:4.1.1 +3890 3.5.1:2.1.3:1.5.1:1.2.1 +3891 3.5.4:1.5.1:2.1.2 +3892 1.2.1:4.1.1:3.6.1:2.6.1:1.2.1 +3893 2.7.1:3.6.1:1.3.99:1.1.1:2.7.4:4.3.1:1.5.1:6.3.3:2.6.1:2.6.1:1.5.3 +3894 6.3.3:3.5.1:4.3.2:2.6.1:4.1.2:1.5.1 +3895 6.3.2:3.1.3:2.7.1:5.4.99:2.4.2:2.1.1 +3896 3.6.1:2.3.1:1.5.1:2.1.3:4.1.1:6.3.1:6.2.1:1.4.1:4.1.2:2.7.2 +3897 2.5.1:6.3.3:2.6.1:2.1.1:3.5.3:1.7.2:4.1.1:2.4.2 +3898 6.3.5:2.6.1:4.3.2:2.3.1:6.3.1:3.1.7 +3899 4.2.1:4.1.3:4.1.2:2.7.1 +3900 2.7.8:1.8.1:5.4.99:2.8.1 +3901 2.7.1:2.4.2:6.3.4:4.4.1:1.4.1 +3902 2.3.1:3.5.4:3.5.4:2.2.1 +3903 4.2.1:2.7.1:2.3.3:6.3.3:2.3.1 +3904 4.1.1:5.4.2:4.1.3:2.1.3:2.3.1:2.3.1:1.5.1:4.2.1:4.1.1:1.1.2:6.1.1:2.7.1:1.1.1:2.7.7 +3905 6.3.4:1.2.1:1.8.1:2.7.7:4.4.1:3.5.2:2.7.1:3.6.1:6.3.2:2.7.1:1.4.1:3.1.3:2.6.1 +3906 2.1.1:3.5.4:3.2.1:5.1.3 +3907 3.1.4:6.3.2:2.1.2:1.8.1:3.5.1:4.1.3 +3908 4.2.1:1.8.1:2.7.4 +3909 5.4.2:4.1.1:2.8.3:2.4.2 +3910 1.1.1:1.1.1:2.7.2:4.1.3:2.7.2 +3911 2.7.1:2.6.1:2.7.1:2.6.1:4.2.1 +3912 2.4.1:3.4.11:1.3.1 +3913 2.7.7:2.3.1:2.8.3:2.7.1:1.2.1 +3914 2.6.1:1.14.11:6.3.1:2.7.2:4.2.1:3.1.1 +3915 3.6.1:1.1.1 +3916 3.1.3:3.5.1:6.1.1:4.1.3:2.3.1:2.7.7:2.7.2:2.7.1 +3917 3.6.1:1.5.99:2.7.1:2.7.4 +3918 2.6.1:5.4.99:6.3.2 +3919 3.6.1:1.1.2:4.2.1 +3920 6.3.2:4.3.1:1.1.1:1.2.1:1.5.1:1.2.1:4.1.2:2.1.3:4.3.2 +3921 1.2.1:3.1.3:6.3.4:4.1.3:6.3.4:1.1.1:2.7.1:2.4.2 +3922 4.1.1:3.5.1:3.2.1:6.3.3 +3923 6.3.4:2.3.1:1.1.1:1.4.3 +3924 2.4.2:4.2.1:2.3.1:2.5.1 +3925 2.3.1:6.2.1:2.7.4:2.7.1:2.7.2:4.4.1:1.7.2 +3926 4.1.1:2.7.7:4.1.1:6.3.5 +3927 3.5.2:2.4.2:3.6.1:2.7.1 +3928 2.8.1:1.97.1:3.1.3:2.5.1:2.7.1:2.7.6:3.5.3 +3929 4.3.2:2.7.1:1.5.1:2.7.2:4.4.1:3.5.2 +3930 3.1.3:2.7.1:2.1.1:1.17.1 +3931 2.6.1:1.1.1:2.7.7:2.6.99:2.7.2:4.4.1:1.5.1 +3932 4.3.1:6.3.3:2.3.1:1.1.1 +3933 4.3.2:3.1.3:2.-.- +3934 2.4.1:6.3.1:1.4.99 +3935 4.2.1:5.4.2 +3936 1.8.1:1.5.1:2.7.1:2.1.1:2.6.1:2.7.9:4.4.1:1.5.1:4.4.1 +3937 3.5.3:2.7.6:6.3.4:2.3.1:1.11.1:2.1.2 +3938 6.3.4:2.7.2:2.1.2:3.5.4:2.1.1:2.3.1:6.3.4:2.3.1 +3939 2.5.1:1.1.1:4.2.1:6.3.2:2.7.2:2.7.1 +3940 2.7.1:2.6.1:2.6.1:4.2.3:6.3.2:1.1.1:1.4.3 +3941 2.7.9:4.2.3:4.1.1 +3942 4.3.2:4.1.1:5.4.99:2.6.1:1.4.1 +3943 1.1.1:5.1.2:3.1.3:6.3.3:2.7.1:4.1.3 +3944 2.7.2:1.2.1:4.1.1:2.3.1:2.5.1:1.8.1:3.1.3:1.5.1:4.3.1 +3945 1.4.1:4.3.1:2.3.3 +3946 4.1.1:3.6.1:4.1.1 +3947 2.1.2:4.4.1:1.5.1:1.5.1:3.5.1 +3948 1.4.1:2.2.1:2.7.4:2.7.1 +3949 1.1.5:4.1.1:5.3.1:5.4.2:2.3.1 +3950 1.1.1:1.2.1:2.7.4:2.7.7:5.4.2 +3951 4.2.1:5.3.1 +3952 6.3.2:5.4.99 +3953 3.5.4:2.4.2:1.1.1:2.1.2:5.4.99:2.3.1:1.1.1:2.4.2:2.2.1 +3954 3.5.1:2.7.4:2.6.1:3.1.4 +3955 1.2.1:2.5.1 +3956 4.3.1:6.3.2:2.7.7:2.5.1:1.11.1:4.2.3:2.7.1:4.1.2 +3957 4.1.1:1.1.1 +3958 4.2.1:4.2.1:2.3.1:6.3.4:2.1.1:3.2.1 +3959 4.3.2:2.6.1 +3960 2.6.1:6.3.4:2.6.1:2.5.1 +3961 2.6.1:2.7.2 +3962 2.6.1:4.3.1:2.7.1 +3963 1.13.11:2.7.1:4.1.1:2.1.1:4.1.1:3.5.1:2.1.2:3.5.1 +3964 2.7.2:2.7.2:2.3.1:2.4.1:1.1.1 +3965 2.7.6:4.1.1:2.3.1:2.1.1 +3966 2.6.1:1.4.4:3.5.4:2.7.2:2.4.2 +3967 1.2.1:5.4.2:6.3.3:2.7.7:2.3.1:1.5.1:1.1.1:2.7.1:3.5.4:6.3.5:3.5.3 +3968 2.7.2:5.4.2:4.1.1 +3969 2.4.2:3.4.11:4.2.3:2.7.2:2.1.2 +3970 1.1.1:2.7.8:6.3.5:2.6.1 +3971 5.3.1:2.8.1:6.1.1 +3972 4.1.1:1.1.1:2.3.3:2.3.1 +3973 4.3.1:4.2.1:6.3.2 +3974 3.2.1:2.4.1:2.3.1 +3975 2.7.4:4.4.1:2.3.1:1.4.1:3.2.2:2.6.1:2.5.1 +3976 3.2.1:2.4.2:2.7.1:4.1.1:1.2.1 +3977 2.6.1:6.3.4:2.7.4:3.5.1:4.2.3:2.7.1 +3978 1.7.2:2.7.6 +3979 1.1.1:6.1.1:2.1.1:3.5.1:2.6.1:3.5.3:3.4.11:4.1.2:1.2.1:3.5.2:6.3.3 +3980 1.14.12:6.3.2 +3981 4.3.1:2.7.1:3.2.2:1.2.1:2.1.1:4.1.2 +3982 1.2.1:2.2.1:2.1.2:6.3.2:2.5.1:1.2.4 +3983 3.5.4:1.3.1:1.2.1 +3984 2.7.7:3.5.3 +3985 4.1.1:4.3.2:2.3.1:2.7.7:3.5.4:2.7.8 +3986 1.2.1:4.4.1 +3987 4.1.1:2.7.2:4.1.1 +3988 2.7.1:6.3.2:2.3.1:5.1.1:2.7.1 +3989 2.3.3:2.7.2:2.6.1:1.2.1:9.9.9 +3990 2.4.2:4.3.2:2.4.2:2.7.8:1.5.99 +3991 3.5.1:3.1.3:1.1.1:2.6.1 +3992 1.7.2:1.5.1:2.7.6:4.1.1:3.1.1:1.5.1 +3993 6.3.4:2.6.1:2.6.1 +3994 2.1.3:2.5.1:2.6.1:2.7.2:2.3.1:2.5.1:1.2.1:6.3.2:2.1.1:2.7.7 +3995 4.2.1:2.4.2:3.5.1:4.1.1:5.3.1:2.3.1 +3996 4.3.1:3.5.1:1.14.16:2.5.1:2.7.2 +3997 2.3.1:3.6.1 +3998 4.2.1:2.6.1:6.3.4:1.1.1:3.5.4:1.5.1:2.7.7 +3999 1.13.11:2.1.2:3.5.3:4.2.1 +4000 6.3.4:2.3.1:4.4.1:6.3.4:4.1.2:2.7.1 +4001 2.7.1:2.1.2:2.3.1:1.3.99:2.5.1:2.6.1:4.2.3:5.4.2:4.99.1:2.7.2:4.2.1:4.3.1 +4002 2.1.2:1.2.1:3.1.4:5.4.99 +4003 2.1.2:9.9.9:1.1.1:5.3.1:3.5.1 +4004 2.6.1:2.7.2 +4005 4.3.1:3.6.1:2.1.1 +4006 2.1.2:2.5.1:2.1.2:2.7.7:1.1.3:2.6.1:3.2.2:3.1.3:4.1.2:6.3.2:1.2.1 +4007 2.7.4:1.2.1:2.5.1:4.3.2:4.1.2:6.4.1:4.3.1:4.1.1 +4008 6.1.1:4.2.3:3.6.1:6.3.4:3.5.1:1.5.1:2.3.1:5.4.99:2.7.1:2.2.1 +4009 4.2.-:1.3.1:1.4.1 +4010 4.2.1:2.7.9:1.2.4:1.1.1:2.7.2 +4011 4.2.1:4.2.3:2.4.2 +4012 4.2.3:2.4.1:4.1.1:3.6.1:3.1.1:2.7.1:2.7.1:2.3.1:6.3.1:4.1.1:6.3.4 +4013 2.3.1:2.1.2:2.6.1:5.4.2:3.5.1:2.7.2:2.4.1:2.4.2:2.4.2:1.4.1 +4014 2.4.2:4.1.1:1.2.7:2.3.3 +4015 1.1.1:4.1.1:4.2.99:2.4.2:2.7.1:2.6.1:6.3.4 +4016 4.1.1:1.1.5:3.5.4:1.2.1:4.1.1 +4017 2.7.1:6.3.2:2.1.2:3.6.1 +4018 1.4.1:2.7.1:1.14.12 +4019 4.2.1:1.8.1:2.7.4:2.7.1:2.3.1:1.2.1 +4020 5.4.99:1.4.99:3.6.1 +4021 2.4.2:1.1.1:3.1.3:4.2.3 +4022 1.1.1:4.2.1:2.3.1:6.3.3 +4023 3.5.1:1.5.1:6.3.4:2.6.1:6.3.4:1.3.99 +4024 4.1.1:6.3.4 +4025 4.2.3:2.7.1 +4026 6.3.4:3.1.1:4.2.1:2.3.3:2.5.1:2.3.3:4.1.2:5.4.2:4.3.1:1.2.1 +4027 2.2.1:2.7.4:1.2.1:2.7.2:2.3.3 +4028 4.2.1:4.1.1:5.2.1 +4029 4.3.1:4.1.1:2.1.2:6.3.4:2.7.2:2.7.7:5.4.99:3.1.4 +4030 2.7.1:2.5.1:4.4.1:4.3.2:4.1.3:2.7.6:2.7.1:1.2.1 +4031 3.4.13:2.7.1:4.2.1:2.3.1 +4032 3.2.1:6.4.1:1.1.1 +4033 6.3.5:1.2.1:2.6.1:4.3.1:6.3.3:1.1.1:1.2.1:5.3.1:4.2.3 +4034 2.7.2:5.4.99:2.1.1:5.4.2:3.4.13:4.4.1 +4035 3.1.3:5.1.3:5.4.2:1.2.1 +4036 5.4.99:2.5.1:2.7.1:2.7.1:6.3.4:4.4.1:6.3.2:2.7.4 +4037 5.4.3:1.2.1:2.7.2:4.2.1:2.7.1 +4038 2.5.1:6.3.4 +4039 9.9.9:5.1.1:3.5.99:2.3.1:2.7.2:1.5.1:2.2.1 +4040 5.3.1:5.3.1:6.2.1:4.1.2 +4041 1.2.1:4.3.1:1.8.1 +4042 4.1.1:3.5.1:2.7.1:4.3.2:1.5.1:4.3.1:1.2.1:3.1.4:1.1.1 +4043 2.4.2:4.1.1 +4044 2.6.1:2.7.2:2.3.1 +4045 2.6.1:4.3.1:2.7.8:1.1.1:1.1.1:2.1.3:2.7.6:1.2.4 +4046 2.2.1:3.5.3:2.7.7 +4047 4.1.1:6.3.2:2.3.1 +4048 2.7.7:3.1.4:4.3.2:2.7.1:4.3.2 +4049 3.1.3:3.1.1:4.2.1:3.5.3:3.4.13:6.4.1:2.4.2:6.2.1 +4050 3.1.3:1.2.4:2.4.2:4.2.1:1.5.1:2.4.2:2.3.1 +4051 4.3.2:2.3.1:4.1.3:2.7.6:2.7.2:4.1.2:2.1.2:4.2.1 +4052 2.7.4:2.7.4 +4053 3.5.1:2.7.6:4.2.3:1.4.1 +4054 1.2.1:1.1.2:2.3.1:4.3.1:1.2.1:2.7.1:2.7.2:4.3.2:1.5.1 +4055 3.5.1:2.2.1:1.1.1:3.5.5:2.7.1:2.7.7:6.3.5:4.3.2:3.5.3 +4056 2.3.1:3.5.1:1.13.11:1.1.1:2.5.1 +4057 3.5.1:1.1.1:4.1.2:2.1.1 +4058 1.2.1:4.1.3:4.2.1:4.1.1:2.7.2 +4059 2.7.1:3.5.3:3.1.3:2.5.1:6.3.4:5.3.1:2.7.1 +4060 3.1.4:3.5.2:4.2.1:4.3.2:4.1.3:3.5.1:2.-.- +4061 2.1.2:2.7.1:3.5.1:2.3.1 +4062 6.3.4:3.2.2:2.8.1:3.1.3:4.1.2 +4063 2.7.2:2.3.1:4.4.1:3.5.1 +4064 2.5.1:2.5.1:4.2.1:4.1.2:1.2.1:2.5.1:1.5.1:2.5.1 +4065 2.1.2:4.2.-:4.2.1:2.6.1:3.5.3:4.2.1:4.1.1:2.5.1:2.7.1:4.1.2:2.7.2:6.3.4 +4066 5.3.1:1.2.4:6.4.1 +4067 2.3.3:2.7.1:3.5.3:5.1.3:1.2.1:3.4.11:2.3.1:2.7.9 +4068 3.5.1:1.1.1:2.5.1:2.5.1:1.1.1:2.7.1:2.7.6:2.6.1:2.6.1 +4069 2.7.4:2.7.8:1.5.1:4.2.3 +4070 2.7.1:6.3.2:4.4.1 +4071 2.3.1:1.1.1:2.5.1:2.7.1 +4072 1.1.1:3.1.5:3.5.1:4.2.3:2.5.1 +4073 2.3.1:4.1.2:3.5.1:4.2.3:3.8.1:2.1.3:2.7.1:2.5.1 +4074 2.6.1:2.6.1:2.5.1:6.3.2:4.1.3 +4075 1.3.3:6.3.2:2.8.1:4.4.1:1.-.- +4076 6.3.2:2.4.2:6.3.2:1.5.1:4.1.1:4.2.1:4.1.3 +4077 3.2.1:3.1.3:6.3.4 +4078 1.1.1:2.1.3 +4079 5.1.1:3.2.1:2.4.2:4.1.3:6.3.2 +4080 2.6.1:4.2.1:4.1.2 +4081 1.5.1:2.3.1:6.3.5:2.6.1:2.4.2:1.1.1:1.3.1:4.1.1:3.5.1:1.7.2 +4082 1.7.99:1.5.1:4.1.3:2.7.8:2.3.1:1.8.1 +4083 5.1.1:3.2.1:2.3.1:4.4.1:4.3.1:4.1.2 +4084 4.1.1:2.1.1:1.2.1:3.2.1:2.6.1:2.6.1 +4085 1.2.1:5.3.1:2.7.1:4.2.3:2.4.2:4.4.1:2.7.1:2.7.4:2.7.2:6.3.4:3.1.3:2.5.1:2.6.1 +4086 2.4.2:5.4.99:3.2.1:3.1.2 +4087 6.2.1:5.3.1:6.3.4:3.1.3:1.1.1:4.4.1:3.5.5:2.7.1 +4088 4.1.1:2.6.1:2.7.7:3.2.2:6.3.1 +4089 1.7.2:3.6.1:4.3.1:3.5.3:4.4.1:2.7.1 +4090 3.2.1:2.7.2:2.4.2:2.1.3:4.3.1:2.6.1:2.6.1:2.7.1 +4091 3.5.1:4.3.2:4.3.2:4.2.1:6.3.2:2.7.2 +4092 3.5.1:2.3.3:2.7.2:4.1.2:1.7.2:1.4.1:2.1.2 +4093 4.1.1:5.5.1:5.4.99:1.3.1 +4094 3.1.1:3.1.1:3.6.1 +4095 6.3.4:2.7.7:1.1.1:3.5.1:1.1.1:2.5.1:3.1.4:4.1.2:1.1.3:3.5.1 +4096 2.3.1:4.1.1:1.1.1:4.1.2:3.1.1:3.5.4:4.1.3:2.5.1:4.1.2 +4097 4.2.1:2.7.8:1.5.3:2.7.4:1.1.1:1.2.1:3.6.1 +4098 2.1.3:1.17.7:2.5.1:3.5.1 +4099 6.3.2:3.5.1:2.7.2:3.5.1 +4100 1.5.1:2.7.2:2.7.1:1.3.99 +4101 1.5.3:1.2.1:6.3.4:3.5.1:5.3.1:4.1.1:2.7.1:6.3.3:1.1.1:2.7.4:4.1.1:3.1.3:3.1.3 +4102 1.5.1:1.2.1:2.7.6:2.4.2:2.7.4:4.3.2:2.7.4 +4103 1.1.1:4.2.1:4.3.1 +4104 2.7.2:2.3.1:4.2.1 +4105 4.1.1:3.5.1:5.3.1:4.1.1:3.1.3 +4106 1.4.4:1.2.1:3.4.13 +4107 4.3.2:4.1.3:4.1.3:4.3.2:5.3.1:3.1.1 +4108 2.7.8:1.4.4:1.5.1:2.5.1:6.3.4:4.1.1 +4109 3.2.2:2.7.2 +4110 6.3.4:3.6.1:4.3.2:4.3.2:2.1.3 +4111 2.8.1:2.2.1:4.1.1:3.5.3:6.3.4:1.11.1:2.3.1:2.7.7:6.3.4:3.1.3:4.1.1:2.7.8 +4112 1.4.1:2.4.2:4.2.3 +4113 5.3.1:1.1.1:2.5.1:4.2.1:6.3.3:2.8.1:2.3.1 +4114 2.7.1:5.4.2:4.3.1:3.1.3:4.2.3:3.5.4:1.2.1:3.6.1 +4115 1.2.1:3.1.3:1.1.1 +4116 2.1.1:4.1.2:2.7.2:6.3.4 +4117 5.1.1:1.5.1:2.3.1 +4118 2.7.1:1.2.7:2.7.1 +4119 1.5.1:2.7.6:2.7.2:1.2.1 +4120 4.2.3:3.1.3:4.3.2:3.5.4:6.3.4:2.3.1:1.4.1 +4121 1.3.1:2.7.1:1.4.1:2.4.2:1.2.1 +4122 3.5.1:3.5.1:2.7.1:4.1.1:1.4.1 +4123 3.7.1:6.3.3:2.7.1:2.7.1:2.6.1 +4124 2.7.1:6.3.4:2.3.1:2.6.1:2.3.1 +4125 1.14.99:4.2.1:1.2.1:1.1.1 +4126 1.7.99:6.2.1:2.2.1:4.2.1:1.5.1:4.99.1:2.7.4:2.7.2 +4127 1.1.1:1.5.1:5.4.99:2.7.4:4.2.1:5.3.1:2.5.1:1.14.16:2.1.1:4.4.1:5.1.3 +4128 2.7.1:3.1.3:4.2.3 +4129 4.2.1:6.3.4:6.3.4:4.2.1:2.7.2 +4130 1.5.1:4.2.1:3.5.1:2.7.1:4.2.1:2.3.1:3.1.3:2.7.2:2.5.1 +4131 6.3.3:1.2.1:1.1.1:6.3.4:2.7.2:4.2.3:1.5.1:1.1.1 +4132 1.17.4:1.2.1 +4133 3.5.1:2.5.1:1.1.1:1.1.1:4.4.1 +4134 5.4.2:5.3.1:2.5.1:2.5.1:3.1.2:2.5.1:2.3.1:1.1.1:5.4.99:1.2.1 +4135 4.3.1:5.4.99 +4136 2.6.1:2.1.4:4.2.1 +4137 4.1.1:5.4.99:1.2.1:4.4.1:2.1.1 +4138 3.1.3:2.4.2:2.6.1 +4139 1.1.1:1.7.2:2.7.7 +4140 2.6.1:5.3.1:2.7.8:2.1.1:2.6.1 +4141 6.2.1:4.2.1 +4142 4.1.1:1.3.3:2.3.1:4.3.2 +4143 2.7.7:2.3.3:2.7.7:6.1.1 +4144 4.1.2:1.2.1:4.1.2:6.3.4 +4145 4.1.3:3.6.1:2.2.1:1.2.1:3.5.4:2.1.1:2.6.1:5.3.1 +4146 4.2.3:3.5.5:4.3.2 +4147 5.1.3:2.3.1:6.3.5:4.2.1 +4148 4.1.1:2.1.2:6.3.3:5.1.3:2.6.1 +4149 6.3.5:1.1.1:3.5.1 +4150 1.13.11:3.2.1:1.5.1 +4151 2.4.1:2.6.1:2.7.8:2.3.3:3.1.7:3.5.1:9.9.9:2.7.2:2.7.4:2.6.1:3.1.3 +4152 2.6.99:4.2.3:4.1.3:2.7.6:4.1.2:4.1.1:3.5.1:3.6.1:1.2.1 +4153 4.2.1:1.2.1:1.4.1:1.2.1:2.3.3:1.4.4:2.5.1:3.4.11:2.7.4 +4154 3.5.1:2.7.4 +4155 2.7.1:5.4.2:3.1.4 +4156 1.4.3:2.5.1 +4157 2.5.1:4.2.3:3.5.1:4.4.1 +4158 2.3.1:5.4.99:2.4.2 +4159 1.3.99:4.1.2:3.1.4:6.3.2:1.1.1 +4160 4.3.2:4.6.1:2.1.1:1.13.11 +4161 3.5.1:4.4.1:2.7.1:1.2.1 +4162 3.4.13:2.7.1:2.4.2 +4163 1.2.1:4.3.1:3.1.1:1.2.1:2.4.2 +4164 2.4.2:4.1.2:4.1.1:4.1.1:4.4.1:2.1.1:1.2.1:1.4.1:2.6.1 +4165 4.1.1:1.2.1:1.5.99:2.1.1:4.3.2 +4166 3.1.3:2.7.6:5.1.3:4.1.2 +4167 2.5.1:3.4.11:2.3.3:5.4.2:4.3.1:2.7.2:1.4.1 +4168 1.1.2:2.8.1:5.4.2:4.3.2:2.6.1:6.3.4:1.3.3:2.1.3:5.3.1 +4169 2.1.1:2.3.1:4.1.3:2.4.2:3.5.1:1.1.1 +4170 3.5.1:3.5.5:2.5.1 +4171 3.1.3:1.4.1:2.7.2:5.3.1:2.3.1:6.3.4 +4172 4.3.1:2.7.1:4.1.2:2.1.3:4.1.2:2.7.2 +4173 2.7.7:1.8.1:1.2.4:1.4.4 +4174 1.5.1:1.1.1:1.2.1:3.5.1:1.1.1:6.4.1:6.3.4 +4175 5.3.1:1.1.1:3.5.1:4.3.2:2.7.2:3.2.1 +4176 1.1.1:2.7.4:3.5.3:4.1.3:2.3.1:2.7.2 +4177 1.5.1:3.5.4:5.1.3:6.3.1:3.2.1:1.2.1:1.2.1:4.1.1:4.1.1:2.2.1:3.1.3 +4178 2.7.4:4.3.1:5.3.1:1.17.1:2.3.3:2.7.1:4.2.1:2.7.7 +4179 2.5.1:4.1.3:2.7.2 +4180 4.1.1:1.1.1:1.5.1:1.2.1:6.3.2 +4181 6.3.4:2.7.1:2.2.1 +4182 3.2.1:2.1.1:2.4.2:2.4.2:4.3.2:6.2.1 +4183 2.3.1:2.7.1:2.1.3 +4184 1.4.1:3.1.4:2.3.1 +4185 2.2.1:1.14.13:2.7.7:4.1.1:6.3.2:4.3.2 +4186 3.5.3:2.7.4:4.2.3:2.5.1:2.3.1:6.3.4:4.4.1:5.4.99 +4187 3.5.1:2.3.3:2.1.1:4.1.3:3.1.3:6.3.2:2.7.1:1.1.1 +4188 2.3.1:1.1.1:2.4.1:1.3.99:2.7.2:1.2.1 +4189 3.6.1:2.5.1 +4190 1.1.1:1.1.1:4.1.1:3.5.3:3.5.99 +4191 3.1.3:2.7.2:2.7.2 +4192 2.3.1:1.1.1:2.3.1:5.3.1 +4193 2.6.1:4.3.1:3.5.1:1.2.1:2.7.1 +4194 1.2.1:2.7.7:2.3.1:3.2.1:4.4.1:2.7.2:1.2.1:5.4.2 +4195 2.1.2:2.3.1:9.9.9:6.3.4:3.2.2:2.5.1:3.5.1:1.1.1:3.5.4:1.2.1:2.7.7 +4196 3.2.2:2.3.3:2.7.1 +4197 3.5.1:4.1.1 +4198 6.3.4:2.7.4:4.3.1:4.2.1:4.2.1:2.7.9:4.3.2 +4199 4.1.2:2.7.1:3.5.1:1.1.5:4.2.1 +4200 4.3.1:2.7.9:1.3.99:6.3.3:2.6.1:1.2.4:1.5.1 +4201 2.6.1:2.7.1:4.3.2:3.5.1:3.5.3:4.2.3 +4202 2.1.1:2.7.1:3.6.1 +4203 2.3.1:1.4.1:1.1.1:2.7.7 +4204 4.1.2:2.7.1:2.8.3:1.14.16:1.5.1 +4205 2.7.1:2.5.1 +4206 2.7.2:3.3.1:4.2.1:2.7.1:2.3.1:2.7.1:4.2.1:2.7.4 +4207 2.3.1:4.1.3:3.1.3 +4208 2.6.1:1.8.1:4.1.1:2.7.7:1.1.1 +4209 2.6.1:4.2.1 +4210 6.3.4:1.1.1:4.1.1:2.3.3:4.2.1:1.4.1:2.7.1 +4211 6.3.4:3.5.5:4.2.1:6.3.2:4.2.1 +4212 2.7.7:3.1.4:4.1.1:2.2.1:1.5.1:1.18.6:1.2.1:4.3.1:1.3.3 +4213 1.1.1:2.2.1:5.4.2:6.3.4 +4214 2.7.6:2.1.1:6.3.4:2.4.2:1.2.1:1.2.1:4.2.1:4.2.1:2.7.2:2.7.1 +4215 4.3.1:1.2.4:4.2.1 +4216 2.7.1:3.1.1:2.7.4:3.5.3:3.5.5 +4217 2.7.7:2.5.1:1.2.1:2.7.4:4.2.1 +4218 1.1.2:3.2.1:1.2.1 +4219 6.3.5:1.3.3:1.4.1:6.3.4:2.6.1:4.3.2:6.3.4:5.3.1:5.1.3:1.97.1:6.3.4 +4220 3.4.11:2.7.1:4.4.1 +4221 4.3.1:1.13.12:4.99.1:2.7.1 +4222 2.3.1:1.8.4:1.2.1:3.1.3:3.5.3:4.1.2:4.2.1:2.7.1:2.4.2:2.7.7 +4223 1.5.1:3.5.2:3.1.7:3.6.1 +4224 5.3.1:2.1.3:1.1.1:2.7.1 +4225 1.2.1:5.4.2:2.7.4 +4226 2.1.2:3.5.1:2.7.4:2.7.1:2.7.1:2.7.1 +4227 4.4.1:2.3.1:2.7.7 +4228 3.1.7:1.1.1:2.7.2:2.7.1:3.5.3:6.3.4 +4229 2.6.1:1.8.1:2.7.1 +4230 2.1.3:3.1.4:3.1.3:5.4.99 +4231 4.1.1:2.1.3:4.1.1:3.5.4:2.1.1 +4232 4.99.1:4.1.3:2.7.1:2.6.1:4.1.1:4.1.1 +4233 6.3.5:2.1.3:2.4.2:4.4.1:1.1.1:2.1.2 +4234 6.3.5:2.5.1:2.7.2 +4235 2.3.1:4.3.1 +4236 6.3.2:3.5.3:2.6.1:1.2.1 +4237 2.7.7:3.5.99:2.7.1 +4238 6.3.5:1.7.1:6.3.4 +4239 2.5.1:2.1.1:1.2.1:2.6.1:1.2.1:4.1.2:1.1.1:1.1.2:4.2.3:2.4.2:6.3.4:2.3.2 +4240 1.11.1:1.5.1:4.1.3:2.1.3:2.2.1:4.4.1:2.6.1:2.1.2 +4241 4.3.1:2.4.2:1.2.4:4.3.2:2.6.1 +4242 6.3.4:3.5.1:2.4.2:6.3.2:2.7.8 +4243 3.1.3:4.1.1:5.4.99 +4244 1.2.4:5.4.2:1.5.1:6.3.1:2.7.1:2.7.2 +4245 3.5.3:5.4.2 +4246 4.1.1:4.1.1:5.4.2:2.3.1:5.4.2:4.1.1:2.5.1:2.7.4 +4247 3.5.1:6.3.2:3.6.1:3.5.2:3.5.1 +4248 2.7.1:2.7.1:2.5.1:1.2.1:4.2.1:6.3.4:1.1.1:2.7.2:6.3.4 +4249 2.3.1:4.1.1:4.2.3:1.1.1:6.3.4:2.5.1:2.7.4:6.3.4:2.4.2:9.9.9 +4250 2.1.2:2.3.1:4.4.1:4.3.1:4.1.1 +4251 1.7.99:1.1.1:5.4.99:1.1.1:3.7.1:2.7.1 +4252 2.3.1:1.7.99:1.5.1:2.7.6 +4253 5.3.1:2.6.1:2.3.1 +4254 5.3.1:4.1.1:6.3.4:2.3.1:3.5.3 +4255 4.1.3:4.1.1:3.5.3:2.7.4:3.5.1:2.7.4:2.6.1 +4256 1.1.1:1.1.1:3.5.3:2.7.7 +4257 4.1.1:2.6.1:2.1.1:4.2.3:3.5.3 +4258 2.3.1:2.7.2 +4259 1.1.2:3.1.2:6.3.3:2.4.2:3.2.2:6.3.2:4.1.1:1.5.1:2.4.2:2.7.4:4.2.1 +4260 2.8.2:2.7.1 +4261 2.7.4:1.3.99:1.17.1:1.4.1 +4262 1.1.1:5.4.1:6.3.2:2.4.2:2.4.1:3.2.1 +4263 4.3.2:6.3.4:1.3.99:2.5.1:4.2.1:6.2.1 +4264 2.7.1:2.7.1:3.6.1:2.7.4:4.2.1:4.4.1:1.2.1 +4265 1.1.1:5.4.99:2.5.1:2.1.2:2.6.1 +4266 5.1.3:2.3.1:4.1.1:3.4.13 +4267 2.7.4:1.1.1:2.7.1:1.1.1:1.1.1:3.5.1 +4268 6.3.5:4.2.3:4.1.2 +4269 3.5.1:1.13.12:3.1.2:2.7.1 +4270 2.1.3:3.1.3:6.2.1 +4271 5.3.1:1.5.1:6.3.1:2.6.1 +4272 2.7.2:4.2.3:3.4.13:6.3.2:6.3.5 +4273 2.7.1:2.7.1:3.1.3:1.1.1:5.4.99 +4274 5.4.99:6.4.1 +4275 1.3.1:5.3.1:2.5.1:2.5.1 +4276 2.3.1:1.2.1:1.4.1:3.5.4:1.1.1 +4277 6.3.4:1.3.3:2.3.1:4.3.2:6.3.5 +4278 3.1.3:2.3.1:3.5.2:4.2.1:2.7.2 +4279 4.1.2:2.1.2:1.7.2:4.2.1:1.2.1 +4280 6.3.2:2.7.2:2.7.8:2.7.2:2.4.2 +4281 2.6.1:2.6.1:6.6.1:4.1.2:2.4.2:2.7.8:2.1.1 +4282 4.3.2:1.5.1:2.3.3 +4283 2.1.2:2.7.7:2.3.1:2.7.9:2.5.1:2.4.2 +4284 4.1.1:4.3.1:1.14.15:4.2.1:1.2.1:1.2.1:4.1.1 +4285 1.7.2:5.4.99:2.7.1:4.2.1 +4286 2.1.4:3.5.1:9.9.9:2.1.1:2.7.7:2.7.1 +4287 3.5.3:3.6.1:3.5.3:2.7.7:3.1.3 +4288 4.1.3:6.3.2:2.7.2:2.5.1:2.5.1:6.3.2:4.1.2:4.3.1:4.1.2 +4289 6.3.5:5.3.1:2.1.1:3.5.1:5.3.1:4.2.1:1.1.1:4.1.1:1.4.3:6.3.4:2.6.1:4.1.2 +4290 1.4.1:4.1.1:2.1.2:4.3.1:3.5.2:5.4.99:2.7.1:4.3.2:1.2.1 +4291 6.2.1:6.3.5:6.2.1 +4292 5.4.99:2.7.1:6.3.5:3.1.3:4.1.1:2.3.1 +4293 6.3.1:2.6.1:1.3.1:3.4.13:4.2.1:2.7.1:2.3.1:1.2.4:3.5.1 +4294 3.5.1:2.6.1 +4295 2.7.7:3.5.1:5.1.3:4.3.2:2.7.2:1.5.1 +4296 2.3.3:4.3.2 +4297 1.2.1:1.4.1:6.4.1 +4298 4.2.1:4.2.1:2.1.1:1.14.13:4.2.1 +4299 2.7.4:4.4.1:6.3.4:6.3.4 +4300 3.5.1:1.7.99:2.1.2:2.3.1:6.3.2:1.2.1 +4301 2.5.1:3.6.1:6.2.1:4.1.3:6.3.4 +4302 1.18.-:1.1.1:2.3.1:6.3.4 +4303 6.3.3:4.1.1:2.5.1:2.7.6:4.1.2:1.1.1 +4304 5.3.1:2.3.3:2.7.1:6.3.1:5.3.1:1.5.1:3.2.2:4.2.1:2.7.1 +4305 2.6.1:2.7.6:2.7.2:6.3.4:3.1.2:5.4.99:4.2.1 +4306 3.2.1:4.2.1:1.3.99:2.7.1:6.3.4:1.5.99:2.7.4:1.1.1 +4307 2.5.1:2.3.1:2.1.1:2.7.8:2.7.1 +4308 1.1.1:4.1.1:3.5.1:4.1.1:2.3.1:1.5.1 +4309 2.7.8:3.1.1:1.5.1 +4310 4.3.1:2.6.1:2.5.1:5.4.99 +4311 4.2.1:1.4.1 +4312 2.7.1:2.5.1:2.4.2 +4313 2.7.6:3.7.1:2.7.1:1.1.1:2.3.3:2.1.2 +4314 2.6.1:1.8.4:3.1.1:2.2.1:4.2.1 +4315 6.3.3:6.3.4:2.6.1:2.6.1:2.3.1 +4316 2.4.2:2.8.1:4.4.1:2.1.1:4.3.1:5.3.1:2.7.1:2.3.1:5.4.99 +4317 2.4.1:3.1.4:4.3.2:5.4.99:2.7.1:2.7.7:1.1.1 +4318 2.5.1:2.7.4:3.2.1:6.3.3:6.3.5:2.3.1:2.1.1 +4319 4.1.1:2.7.4:2.5.1:1.1.1:3.5.1:4.1.3:1.1.1:1.3.99:2.6.1:2.1.1:3.4.11:2.3.1:1.1.1:6.3.4 +4320 4.4.1:3.1.3 +4321 2.1.2:2.1.1:2.1.2 +4322 4.4.1:2.6.1:4.2.1 +4323 2.6.1:2.7.1:4.4.1:4.1.1 +4324 6.3.4:3.1.3:2.3.1:1.2.1:2.3.1:3.4.13 +4325 6.3.4:1.1.1:2.7.1:1.2.1:2.1.3:2.6.1:2.7.4 +4326 3.2.1:2.7.4:3.1.2:3.1.3 +4327 1.4.1:4.1.1:2.6.1:3.6.1:1.1.1:2.7.1:3.6.1:4.3.2:2.7.1:2.4.2:1.1.1:4.1.1:2.7.1:6.3.4 +4328 4.3.1:3.1.2:1.4.1:3.1.3:5.1.1:2.3.1 +4329 4.3.1:2.7.2:4.3.2:1.1.1:5.3.1:6.3.2:4.2.3 +4330 1.2.1:4.2.1:2.7.1:2.1.3:2.1.3 +4331 2.1.2:2.3.1:4.1.3:1.8.1:3.6.1:1.1.1 +4332 1.5.1:3.2.1:1.1.1:3.5.3 +4333 2.1.4:2.4.1:3.2.2:4.1.2 +4334 2.4.2:3.1.3:2.4.2 +4335 1.8.1:2.4.2:2.1.4:6.3.1:2.3.1:3.2.1 +4336 3.6.1:1.2.1 +4337 5.1.2:2.7.1:2.1.1:5.4.2:3.5.3:1.1.1:1.2.1 +4338 3.2.1:2.1.2:2.4.2:4.1.1:2.7.4 +4339 1.11.1:6.3.2:1.1.1:3.1.3:2.7.1:9.9.9:1.5.1:4.2.1:6.3.3 +4340 1.17.1:2.5.1:4.4.1:2.7.1 +4341 2.3.1:6.4.1:5.3.1:2.1.2:4.1.1:1.3.3:3.6.1 +4342 1.2.4:4.4.1:4.1.1:2.6.1:3.5.4:3.4.13:4.3.2:2.7.1:3.1.3 +4343 4.3.2:2.1.4:2.1.3:1.2.1:2.6.1 +4344 2.1.1:1.2.1 +4345 2.5.1:6.3.2:2.4.2:1.5.1:3.7.1:2.4.1:2.6.1:2.3.1 +4346 1.2.1:3.1.3:1.2.4:6.3.4:3.5.1:4.2.1:1.5.99:6.3.2:4.1.1:4.2.1:2.7.8:2.6.1:3.5.1:2.3.3 +4347 1.2.1:2.3.1:2.6.1:4.2.3:9.9.9 +4348 3.1.3:1.5.3:6.3.5:1.5.1:4.1.1 +4349 6.3.3:2.1.2:2.7.4:2.6.1:4.4.1:2.1.2 +4350 4.2.1:1.1.1:2.3.1:6.3.2 +4351 2.5.1:4.3.1:2.6.1 +4352 4.2.3:2.7.1:4.1.1:9.9.9:2.4.2:2.7.4:4.1.1 +4353 2.1.1:5.1.2:3.5.4 +4354 3.5.4:6.3.1:3.8.1:4.2.1:6.2.1 +4355 5.4.2:2.4.2:2.7.1:3.1.2:1.14.13:2.7.4:2.6.1:2.2.1 +4356 5.4.99:6.3.2:6.3.2:2.4.2:1.1.2:2.7.2:2.3.1 +4357 4.3.2:2.7.2:1.5.3 +4358 4.2.1:3.1.3:2.7.6:2.1.4:1.1.1 +4359 4.1.2:6.3.3:1.7.99:2.6.1:1.14.13:6.3.4:3.5.1:5.4.99 +4360 2.7.1:3.4.11:3.6.1:2.3.1:2.3.1:2.5.1:2.5.1 +4361 2.7.8:6.3.5:4.3.1:5.4.2:4.1.1:1.5.3:3.1.1:6.3.4 +4362 2.6.1:1.2.1:1.1.1:3.3.1:2.7.4 +4363 6.3.2:4.2.1:2.1.1:6.2.1:2.8.1:2.1.1 +4364 2.7.6:6.3.2:2.4.2:1.17.4:2.7.4:4.6.1:2.3.3 +4365 5.4.2:2.6.1:3.5.3:3.6.1:1.1.1:6.3.4 +4366 4.1.2:3.4.11:3.1.4 +4367 3.1.3:2.7.2:2.1.3:2.1.2:2.7.2:2.7.1:4.4.1:2.5.1 +4368 3.5.1:4.2.1:3.1.2:4.1.2:1.2.1:4.2.1:3.2.1 +4369 3.5.1:2.3.1:4.3.2:4.3.1:3.1.7:2.1.1 +4370 2.6.1:4.2.1:3.5.1:2.3.1 +4371 6.2.1:2.7.1:1.4.1:4.2.-:2.1.1:4.1.1 +4372 4.1.2:5.4.2:4.3.1 +4373 2.5.1:2.5.1:2.5.1 +4374 2.3.1:4.2.1:5.1.2:3.2.2:6.3.4:1.14.12:2.3.1:3.1.3:2.7.1 +4375 3.5.3:2.7.6:4.3.1 +4376 1.5.1:2.7.9:3.1.3:2.1.3:2.7.7:2.7.2:6.3.2 +4377 4.2.1:3.5.1:5.4.99:2.3.1:3.5.1 +4378 6.3.2:4.4.1:1.5.1:3.4.11 +4379 1.2.1:6.3.4:2.7.1:3.5.5:2.5.1:2.4.2:2.1.2 +4380 6.3.3:2.5.1:5.4.99:2.3.1:4.1.1:5.4.99:1.4.1:5.4.2:4.3.1 +4381 2.4.2:2.7.4:2.4.1:2.3.3 +4382 2.1.2:2.5.1:2.7.1 +4383 1.1.1:5.4.99:6.2.1:2.7.2 +4384 5.5.1:2.7.7:4.1.1:2.7.1 +4385 1.2.4:4.1.1:2.6.1:2.7.1:6.3.4:6.3.5:3.5.3:1.8.1 +4386 2.7.1:1.3.1:4.2.1:2.7.1:4.2.1 +4387 2.7.2:4.1.1:1.4.1:4.3.1:2.7.7:1.1.1:2.7.7:4.2.1:2.7.1 +4388 1.5.1:5.4.4:1.5.1:4.3.2:5.4.2:2.7.2:5.3.1:1.14.13 +4389 6.3.3:2.6.1:2.7.1:6.3.4:2.6.1:2.5.1:2.7.1 +4390 2.7.2:2.5.1:2.6.1 +4391 3.1.1:5.4.2:2.7.4:4.2.3:2.7.1:1.1.1 +4392 3.5.3:2.7.8:4.1.3:1.2.1:3.1.3:2.4.2 +4393 2.7.1:5.4.99:3.6.1 +4394 1.3.1:4.4.1:3.1.4 +4395 2.7.7:2.7.1:4.1.1:2.7.6 +4396 3.3.1:1.14.13:1.2.4:1.1.1:1.1.1:5.3.1:5.3.1:1.2.1 +4397 2.5.1:2.7.6:2.7.1:1.2.1 +4398 5.3.1:2.3.2:5.4.2 +4399 3.6.1:3.2.2:2.3.1:2.5.1:6.3.4:1.7.1:2.3.1:4.2.1:2.4.2:3.1.5:2.7.2 +4400 6.3.4:6.3.4:2.3.1:2.7.4:2.1.2:3.1.7 +4401 6.3.4:2.3.1:2.7.1:5.1.3:9.9.9 +4402 2.5.1:4.4.1:4.3.2:2.7.1:2.1.2:1.2.1:2.5.1:1.1.1 +4403 1.13.11:2.5.1:4.1.3:5.4.2:4.2.1:2.5.1:2.4.2:3.2.1:2.5.1 +4404 2.3.1:3.4.11:2.1.2:6.3.4:5.4.99:1.1.1:6.3.4:6.3.4 +4405 1.1.1:4.3.1:1.1.1:2.7.1:2.7.2:2.7.1:2.3.1:9.9.9:2.2.1:4.1.1:2.7.1 +4406 3.6.1:3.1.3:2.7.2:1.18.-:2.7.1 +4407 3.1.1:4.3.2:3.5.1 +4408 2.1.1:2.6.1:4.3.1:1.2.1:2.4.2:5.4.2 +4409 4.2.3:9.9.9:5.4.99:2.3.3:5.1.2:4.2.1 +4410 2.7.6:1.4.1:2.1.2:1.5.99:2.5.1:2.3.1 +4411 4.4.1:2.1.1:2.1.3:2.7.4:2.3.1 +4412 2.6.1:2.3.1:1.1.1:4.1.2:1.1.1:6.3.1 +4413 1.2.1:4.3.1:6.2.1:5.3.1:4.1.3:5.3.1 +4414 2.7.4:2.7.7:4.2.1:3.5.1:2.7.8:2.7.8:1.2.4:2.7.1:2.7.7 +4415 5.3.1:1.8.1 +4416 1.1.1:1.1.3:2.7.1 +4417 2.8.1:4.1.2:3.5.3 +4418 4.2.3:4.2.3:4.3.2:1.5.1:1.2.1 +4419 2.1.2:2.3.1:3.2.1:3.5.1:2.5.1 +4420 4.3.1:1.17.4:3.1.4:2.5.1 +4421 1.4.1:1.1.1:1.1.1:4.1.1:1.1.1:4.3.1:2.1.3:4.1.3:2.5.1:4.2.3 +4422 3.5.3:5.3.1:2.1.2:2.4.2:1.4.1:2.4.1 +4423 1.2.1:3.1.5:4.1.1:2.3.1:2.1.3:2.3.3:4.3.1 +4424 2.5.1:4.2.1 +4425 4.3.1:4.3.1:4.1.1:6.3.4:1.1.1:3.1.1 +4426 5.4.99:2.4.2:4.1.1 +4427 3.1.3:2.1.1:6.2.1:1.2.4 +4428 1.2.1:2.7.1:6.4.1:1.1.1:2.7.2:1.3.99:5.4.2:6.3.1:2.3.1 +4429 3.6.1:3.5.1:2.3.1:4.1.2:2.5.1:2.5.1 +4430 4.1.1:3.5.1:6.3.4:2.7.1 +4431 5.1.1:3.5.1:1.2.1:2.6.1:3.4.13 +4432 2.7.1:2.7.1:4.3.2:2.7.4 +4433 5.3.1:6.3.2:5.3.1:2.4.2 +4434 2.7.9:1.5.99:5.4.2:1.1.1:2.7.1:2.3.1:2.5.1 +4435 1.2.1:4.1.1:1.4.3:6.3.5:2.2.1:4.2.3:4.3.2:3.2.1:2.7.1 +4436 2.5.1:3.1.3:2.5.1 +4437 6.3.5:2.7.7:6.3.3 +4438 2.7.6:2.7.1:2.8.3:4.2.1:1.13.11:3.5.2:5.1.1:2.1.1 +4439 3.1.2:2.1.1:2.7.2:3.2.1:5.4.2 +4440 6.3.4:1.5.1:2.3.1 +4441 6.3.4:1.5.99:3.1.3:2.7.2:6.3.4:2.7.7 +4442 2.5.1:1.3.3:5.4.99:1.1.1:2.5.1 +4443 6.3.2:4.3.2:2.3.1:1.1.1 +4444 2.5.1:2.7.1:6.3.5 +4445 2.6.1:5.4.99:4.3.1:4.99.1:1.2.1:9.9.9:2.4.2:1.4.1:2.3.3:4.2.1 +4446 3.4.13:3.5.2:4.3.1:4.2.3:5.1.3 +4447 4.1.3:2.3.3:2.6.1:4.1.2:6.3.4:5.4.2:6.4.1:1.4.1:2.3.1:4.2.1:6.3.4:4.4.1:2.3.1:6.3.3 +4448 1.2.4:2.3.1:2.7.1:2.3.1 +4449 2.3.1:2.7.7:4.1.1:2.6.1:2.4.2:1.1.3:2.6.1:4.2.1:3.5.4:1.2.4:4.4.1:3.1.3:2.1.2:3.1.4 +4450 2.7.9:4.1.1 +4451 4.2.1:4.1.1:2.4.2:2.1.1:2.3.1:4.1.1:4.2.1 +4452 6.3.4:2.4.2:1.2.1:1.1.1 +4453 2.1.3:4.3.1:4.1.1:1.5.1:2.4.2:3.2.2:2.5.1:3.5.1:5.4.2 +4454 5.3.1:2.4.1:2.1.3:3.5.1:4.4.1 +4455 2.1.2:2.1.3:2.7.1:1.2.1 +4456 3.1.3:2.7.2:6.3.1:3.1.3:4.1.1 +4457 2.3.1:4.1.1 +4458 2.3.1:4.3.2:6.3.5:4.1.2:3.1.3:2.6.1:2.7.6:6.3.1:4.1.1:1.2.4 +4459 6.3.5:2.7.7:4.2.3 +4460 2.4.2:1.1.1:4.1.2:2.7.6:3.5.1:6.3.2:2.7.1:5.4.2:6.3.5 +4461 4.1.1:2.6.1:4.1.3 +4462 3.5.1:5.4.2:2.7.1:2.7.1 +4463 4.1.1:6.3.4:1.1.1 +4464 2.3.3:6.3.4:2.4.2 +4465 2.7.4:1.1.1:3.5.1:3.5.4:4.3.1 +4466 4.2.1:3.4.11:2.4.2:5.4.99:2.5.1:1.14.12 +4467 2.7.1:1.5.1:1.5.1:5.3.1:1.1.1 +4468 4.4.1:2.7.7 +4469 4.1.1:4.2.1:6.3.2 +4470 1.2.1:1.1.1:1.1.1:5.3.1:4.3.1:4.2.3:2.3.1:2.7.1:6.3.5 +4471 1.3.3:4.3.2:2.3.1:2.1.2:3.5.1 +4472 5.3.1:3.5.1:2.4.2:2.1.3 +4473 1.1.1:2.6.1:2.8.1:3.1.4:5.4.99:2.7.7:6.3.5 +4474 1.1.1:3.6.1:2.7.4:6.3.2:2.6.1:4.1.1 +4475 2.7.1:5.1.2:5.1.3:5.3.1:3.1.3:2.7.1 +4476 2.1.3:3.5.1:1.4.4:1.7.3 +4477 3.2.1:6.3.4 +4478 2.7.4:2.1.3:3.1.2:2.5.1:5.3.1:1.1.1:1.2.1:1.2.1:1.3.99 +4479 4.2.1:1.1.1:2.1.1:6.3.5:5.4.99:6.2.1:3.6.1:6.3.4 +4480 1.14.13:2.6.1:1.7.2:2.6.1 +4481 1.4.1:6.3.2:1.3.99 +4482 2.1.3:3.1.1:5.1.2:2.3.1:2.6.1 +4483 2.6.1:2.7.4 +4484 1.1.1:2.7.4:2.7.2 +4485 1.1.1:2.7.7:2.1.1 +4486 2.7.7:4.2.1:1.3.1:1.1.1 +4487 1.14.16:1.2.1:1.5.1:4.1.1:4.2.3:5.3.1:5.3.1:4.2.1:3.1.5:5.4.2:2.5.1 +4488 2.4.2:4.1.1:2.7.1:2.1.2:3.5.1:4.3.1:1.1.1:4.2.1:4.4.1:2.6.1 +4489 3.5.3:4.1.1:4.1.3:3.1.3:1.4.1:3.5.1:6.3.4 +4490 2.3.1:3.1.3:6.3.2:1.2.1:2.7.2:5.4.2 +4491 2.3.1:2.7.7:2.7.1 +4492 3.5.1:2.1.3 +4493 4.1.3:2.7.8:3.5.4:5.4.2:4.3.2:2.1.1:6.2.1:1.2.1:2.4.2:1.8.1 +4494 5.1.1:4.3.1:2.1.2 +4495 2.7.8:2.7.2:2.5.1:9.9.9:2.4.2:1.1.1:6.2.1:2.3.1:1.1.1 +4496 3.1.3:1.3.1:3.4.13:2.4.2:6.1.1 +4497 1.5.1:2.4.2:3.1.4:2.3.1:2.7.7:6.3.4:2.7.6:6.3.4 +4498 1.2.1:5.1.3:6.3.4:2.4.2:1.2.1:5.4.2:3.6.1:1.14.13:2.3.1 +4499 1.2.4:2.7.1:6.3.4:2.7.6:2.2.1:6.3.2:3.1.3:2.4.2:4.4.1 +4500 2.4.2:2.3.1:6.3.4:4.1.3:6.3.4:1.7.99 +4501 2.1.1:2.7.1:1.4.1:2.7.8:4.3.1:5.1.3:2.5.1:4.1.3 +4502 2.3.1:2.5.1:2.3.1:4.2.-:4.3.1:3.5.1:2.1.3 +4503 2.4.2:5.3.1:1.1.1 +4504 5.1.3:2.5.1:2.1.1:4.3.1:2.7.2 +4505 4.3.2:6.3.1:4.4.1:2.7.4 +4506 2.7.2:2.7.7:3.1.3 +4507 6.4.1:5.1.3:6.3.2:2.5.1:2.7.1 +4508 1.1.1:2.1.1:2.7.1 +4509 2.7.2:4.2.99 +4510 2.7.1:1.1.1:1.4.1:6.3.2:2.3.1:1.1.1:4.2.1:3.5.1 +4511 1.4.4:1.14.13:3.7.1:3.4.-:6.3.2:2.7.1:3.1.1:1.2.1:2.7.2 +4512 1.17.4:6.3.4:2.5.1:4.2.1 +4513 5.1.1:1.1.1:2.7.8:2.6.1 +4514 4.1.1:1.2.1 +4515 1.2.1:6.3.4:2.6.1:2.6.1:4.4.1 +4516 2.3.3:5.3.1:6.4.1:4.1.1 +4517 2.1.2:4.1.3:2.4.2:1.1.1 +4518 5.1.3:2.7.1:3.2.1:1.1.1:4.3.2:4.1.1:1.2.1:4.3.2:3.2.1:4.3.2:2.4.1:4.1.1:1.17.4 +4519 4.3.2:2.4.2:2.1.2:3.1.2:2.4.1:6.3.3:6.3.3 +4520 2.5.1:1.1.2:4.1.2:4.1.1 +4521 6.4.1:2.4.1:2.1.4:2.7.7:1.2.1:2.1.1 +4522 2.7.1:1.3.99:2.7.1:3.1.4:3.5.1:2.6.1:4.1.3:5.3.1:2.3.1 +4523 4.1.1:3.1.3:2.5.1:1.2.1:6.3.4:2.3.1 +4524 3.1.7:5.4.2:1.2.4:2.6.1 +4525 2.7.6:6.3.1:2.1.3:6.3.3 +4526 1.5.1:6.3.4:2.1.1 +4527 2.3.1:3.5.1 +4528 2.7.2:2.2.1:5.1.1:4.1.2:4.1.1:2.7.1:5.4.99:4.1.3:3.1.2 +4529 3.2.1:5.4.99:3.2.1:1.2.1:5.3.1:2.6.1:4.1.3 +4530 1.2.1:1.2.4:1.3.99:1.1.1:3.1.3:2.7.2:6.3.3:6.3.2 +4531 1.1.1:1.1.1:3.5.4:2.1.2:1.5.1 +4532 1.8.1:4.3.1:2.5.1:3.6.1 +4533 1.2.5:4.1.2:3.2.1:4.3.2 +4534 2.4.2:5.3.1:1.4.1:1.5.1:2.7.1:2.2.1:2.6.1:2.7.4:5.4.3:4.4.1 +4535 1.2.1:4.2.1:2.5.1:4.1.1 +4536 5.4.2:2.1.1:4.1.1:4.4.1:2.3.3:6.3.4:6.3.3:2.5.1:4.2.3:4.1.1:1.1.1:3.6.1 +4537 2.7.1:3.5.1:3.6.1:1.6.1:1.1.1:3.1.3:2.3.1:1.4.1:2.7.1:4.2.1:2.7.4 +4538 1.17.4:1.1.1:2.5.1:4.4.1 +4539 2.7.4:1.1.1:4.1.1:4.1.1:6.3.3:2.6.1:1.4.3:3.6.1:3.6.1:6.3.4 +4540 4.2.-:2.7.1:4.3.1:2.7.7:2.7.1:3.5.3 +4541 2.1.4:2.7.1:2.7.7:3.5.1:6.4.1:6.3.3:4.4.1 +4542 2.3.1:2.6.1:4.1.1:3.1.3:4.2.- +4543 2.7.1:4.1.2:4.2.1:1.4.3:2.7.2:2.3.1 +4544 1.4.1:4.3.2:5.1.1:6.3.5:4.1.1:4.1.3:4.1.1:1.1.1 +4545 1.1.1:1.2.1:2.7.4:2.1.2:2.5.1:2.7.1 +4546 2.3.1:6.3.4:1.5.1:2.7.2:1.5.1:3.1.4 +4547 2.3.1:1.1.1:2.7.1 +4548 1.5.1:2.6.1:6.3.4 +4549 6.3.2:2.7.7:1.2.1:2.6.1 +4550 2.7.1:6.3.4:3.1.2:4.4.1 +4551 3.1.7:6.3.5:1.1.1:4.1.2:3.5.1 +4552 6.3.3:4.4.1:1.5.1:2.5.1:1.5.1:4.3.1:4.1.1 +4553 4.4.1:1.2.1:1.2.4:3.5.2:1.1.1:1.5.1:2.7.1:2.3.1:4.4.1 +4554 2.1.2:4.3.1:4.4.1:6.3.2:4.2.1 +4555 5.3.1:1.1.1:2.5.1:5.4.99:5.3.1:9.9.9:2.6.1:1.2.4:2.7.7:6.3.4:1.17.4:6.3.2 +4556 4.1.1:4.1.1:4.1.1 +4557 2.7.1:3.5.1:6.2.1:6.3.5 +4558 2.6.1:2.1.1:2.7.7:1.1.1:3.1.4 +4559 6.3.4:2.4.2:4.1.1 +4560 3.6.1:2.3.1:6.3.5:1.14.12:2.7.2:4.1.2 +4561 2.4.2:2.5.1:3.5.1:5.3.3:5.4.2 +4562 5.1.3:3.5.1:2.7.2 +4563 3.1.2:2.6.1:2.7.1:1.1.1:6.3.2:2.3.1 +4564 1.1.1:2.6.1:2.7.8:3.5.3:2.6.1:6.3.5 +4565 3.5.3:6.1.1:6.4.1:4.3.2:5.3.1:1.3.1:6.3.4:5.3.1 +4566 4.4.1:4.1.1:1.14.16:4.1.1:3.5.2 +4567 2.1.2:9.9.9 +4568 4.1.2:6.2.1:3.1.2:1.3.99:4.3.1:3.6.1:3.2.1:4.3.1:3.1.3 +4569 2.3.1:3.5.3:2.7.1:3.5.1 +4570 4.4.1:1.2.1:2.3.3:2.7.1 +4571 2.2.1:6.3.3:3.2.1 +4572 3.5.1:3.5.1:2.3.1:2.3.1:1.1.1 +4573 1.2.1:2.7.2:2.3.1:1.1.1 +4574 1.8.1:2.6.1:1.7.2:3.5.3:2.4.2:1.5.1:2.5.1:1.1.2:2.7.1:3.4.11:4.1.2:2.7.1 +4575 4.4.1:2.4.2:3.5.1:3.1.3:1.1.1:6.3.2 +4576 2.6.1:3.2.1:5.4.2 +4577 6.3.5:1.5.1:2.1.1 +4578 2.3.1:2.6.1:2.7.2:2.3.1:4.1.1 +4579 1.2.1:2.1.2:2.7.8 +4580 2.4.2:4.1.1:5.1.2 +4581 2.5.1:3.6.1:4.1.1:1.5.99:4.1.1:3.2.1:2.1.2:4.1.1 +4582 2.7.1:2.7.2:2.3.1:2.7.1:5.3.1 +4583 3.5.1:2.7.4:2.7.1:6.3.4:3.5.3 +4584 1.1.1:2.7.9:2.7.1:2.1.1:4.2.1:3.1.3:2.4.2:3.5.5:2.1.2:6.3.3 +4585 4.3.1:2.3.1:1.5.1:6.3.4:1.14.11 +4586 2.1.1:6.3.2:9.9.9:4.3.2 +4587 2.7.1:2.3.1 +4588 3.1.4:4.1.1 +4589 2.4.2:2.7.7 +4590 2.3.1:6.3.2:4.4.1:2.7.1:2.3.3:2.6.1:5.3.1 +4591 6.3.4:1.2.1:6.3.5:6.3.4:4.2.1 +4592 6.3.4:1.2.1:6.3.4:2.4.2:4.2.1 +4593 2.7.1:2.5.1 +4594 2.1.1:6.3.5:2.6.1:4.2.1:2.3.1:2.8.1:1.1.2:2.5.1 +4595 1.3.3:3.1.3:2.3.1:4.3.2 +4596 2.7.1:2.8.1:3.4.13 +4597 3.5.1:2.7.1:2.6.1:2.7.1 +4598 4.1.1:5.4.99:1.2.4:2.3.1:4.3.1 +4599 1.5.1:6.3.1:5.4.2 +4600 2.7.7:2.7.1:2.7.7 +4601 3.1.4:4.2.1:3.5.1 +4602 4.1.99:4.1.3:2.3.1:4.3.1 +4603 2.6.1:5.1.3:4.2.1:2.7.2:3.6.1 +4604 3.2.1:2.1.1:1.17.7:4.1.1:1.2.1:3.6.1:1.1.1 +4605 5.4.2:2.7.1:6.4.1:4.1.3:4.3.2 +4606 4.3.1:2.3.3:1.5.1:4.1.1:1.3.3:1.13.12 +4607 2.7.1:1.4.99:2.7.1:4.1.2 +4608 2.6.1:4.-.-:1.2.1:2.7.8 +4609 2.6.1:3.5.4:4.2.3:4.1.1:6.3.4 +4610 1.1.3:1.5.1:1.2.1:5.3.1:1.2.1:2.4.2:2.3.1:1.3.3:4.1.2:1.1.1:3.5.1:3.5.1:6.3.2:1.2.1 +4611 1.-.-:5.4.2:1.5.3:2.7.2:2.4.2:3.5.1 +4612 6.3.4:2.7.1:2.7.1:4.2.1:4.3.2:6.3.2 +4613 2.7.1:3.4.13:3.5.1:3.5.3:4.2.1:2.7.2 +4614 1.14.16:1.1.1 +4615 4.3.1:4.2.1:2.7.1:2.7.1:6.2.1 +4616 4.1.1:3.5.2:2.3.1:2.3.1:3.2.2:9.9.9 +4617 2.5.1:3.3.1:2.4.2:6.3.4:2.7.1 +4618 4.3.1:6.3.2:5.4.2:4.3.2:6.3.4:1.2.1:2.4.2:1.14.16:1.2.4:2.7.2:3.5.1:2.3.3 +4619 1.1.1:2.1.1:2.7.1:2.7.2 +4620 2.7.7:5.4.2:2.6.1:3.5.3:2.4.2:4.1.2:4.1.1 +4621 2.7.1:5.1.1 +4622 2.1.1:4.3.1:2.1.1:1.7.99 +4623 2.6.1:2.1.1:2.4.2 +4624 4.2.1:2.4.2:2.7.4:1.4.1:1.4.99:4.1.1 +4625 4.3.1:4.3.1:6.3.2 +4626 4.4.1:1.5.1:6.3.2:4.1.2 +4627 3.6.1:4.1.2:9.9.9:4.2.1:2.4.2:2.7.4:2.7.4:2.1.3 +4628 2.6.1:2.7.7:2.7.7:1.1.1:1.1.1 +4629 3.2.2:4.1.2:3.5.2:4.4.1 +4630 3.5.2:4.3.1:5.3.1:2.7.2:2.-.-:1.5.1:4.3.2 +4631 2.1.3:1.5.1:4.2.1:1.4.1 +4632 3.5.1:5.4.99:4.1.2:5.4.2:6.3.4:2.3.1 +4633 2.1.2:6.3.1:3.5.1:4.1.1:4.1.2 +4634 2.7.1:3.1.3:3.5.3:2.4.2 +4635 6.3.2:5.1.2:2.7.1:1.1.1:2.6.1:2.3.1:3.5.1 +4636 4.2.1:4.1.1:2.2.1:4.1.3:4.1.1:4.99.1:5.1.1:2.4.2 +4637 2.7.1:3.3.1:3.5.1:2.7.7:3.5.1:6.3.4:4.3.2:2.2.1 +4638 2.7.1:2.7.1:6.3.4:2.7.7:2.3.1:1.1.1:4.1.1:3.6.1:3.5.1:3.2.2:2.5.1:2.3.1:1.7.2 +4639 2.4.2:2.1.1:2.7.7:4.2.3 +4640 6.3.4:3.5.3:2.6.1:4.2.1 +4641 5.4.99:3.1.1:1.1.1 +4642 2.1.2:4.2.1:1.1.1:3.1.1:4.2.1:1.5.1 +4643 4.1.1:3.5.1:1.2.1:1.1.1 +4644 2.4.2:1.1.1:2.5.1:5.4.2:3.1.3:2.1.2 +4645 2.1.1:2.3.3:2.3.1:2.7.2 +4646 3.5.2:2.7.4:2.3.1:3.1.2:4.2.3:3.5.1:6.3.4:2.1.2:2.3.1:2.1.2:3.5.1 +4647 3.1.2:1.14.13 +4648 6.3.4:1.2.1:4.1.3:2.7.4:1.17.1:2.6.1 +4649 3.1.3:3.6.1:2.3.1:1.2.1:4.1.3:2.7.1:4.4.1:1.1.1:2.5.1:4.2.3:2.1.3:3.6.1 +4650 3.1.3:1.4.1 +4651 3.1.2:2.6.1:4.2.1:2.7.2:2.4.2:1.1.1 +4652 1.2.1:2.5.1:3.4.11 +4653 2.7.1:2.7.1:2.3.1:6.3.4 +4654 2.4.2:2.7.1:1.2.1 +4655 3.7.1:1.5.1:3.4.13:1.1.1:3.6.1:6.3.2 +4656 4.3.2:2.7.1:2.1.3:2.3.1:2.4.2 +4657 2.6.1:2.7.2:1.3.1:4.2.1:2.3.1:2.5.1:1.2.5:1.2.1:2.7.1:3.1.4:4.1.1:3.6.1 +4658 2.5.1:2.7.9:6.3.2:1.4.1:2.5.1:3.1.3:1.1.1:2.7.8:2.7.8:5.4.99:2.7.1 +4659 2.3.1:2.7.2:5.4.2:3.3.1:2.7.2 +4660 4.3.1:2.7.7:1.2.1:5.4.2 +4661 1.-.-:2.7.8:2.6.1:2.7.1:1.1.1:2.5.1:2.4.2:1.2.4 +4662 3.5.5:2.1.1:2.3.1:2.3.1:4.1.2:4.3.1 +4663 3.1.3:1.2.99:2.5.1:6.3.2:2.7.7:4.1.1:6.3.5:6.3.3:5.3.1:1.1.1:6.3.2 +4664 2.7.2:3.5.3:4.1.3:6.3.2:2.7.1:4.6.1 +4665 1.8.1:1.7.99:6.3.4:1.18.-:1.2.1:2.1.2:6.3.5:5.3.1:4.1.1:2.6.1:3.5.1:5.4.2 +4666 3.1.1:2.6.1:1.1.1:3.1.3:6.3.4:3.2.1:2.1.4:4.3.2:5.3.1 +4667 6.3.3:1.2.1 +4668 2.4.2:2.7.1 +4669 2.5.1:4.1.1:4.1.1:2.1.4 +4670 2.7.1:3.1.3:6.3.3:1.4.1 +4671 2.1.3:6.3.3:1.17.4:3.5.3 +4672 4.3.1:3.5.3:2.6.1:3.1.7 +4673 1.2.4:1.3.3:6.3.4:4.1.1 +4674 6.3.2:2.3.1:5.4.2:1.5.1:5.3.1:2.1.2 +4675 4.1.1:5.3.1:2.4.2:2.3.1 +4676 1.1.1:4.4.1 +4677 2.5.1:2.4.1:5.1.2:6.3.2:6.3.2:1.2.4:3.5.3 +4678 1.3.1:2.5.1:4.2.1:2.6.1:4.2.1:2.3.1:4.4.1 +4679 4.2.1:1.2.1:4.2.1:5.1.1 +4680 2.7.1:3.5.1:6.3.2 +4681 2.8.1:2.4.2:2.3.1:6.3.4:2.7.2 +4682 1.1.1:2.7.7:4.1.2:6.4.1:1.1.1:3.4.13 +4683 2.6.1:6.3.2:5.4.2:5.3.1:2.3.1 +4684 1.14.11:1.1.1:6.3.1:2.5.1 +4685 1.1.1:4.3.1:1.3.1:5.4.2:5.4.99:2.7.2:2.7.4:2.7.1:4.4.1:1.4.1:3.5.3:6.3.4:6.2.1 +4686 2.7.7:1.2.4:2.3.3:3.5.1:2.6.1 +4687 3.1.1:1.8.1:1.5.1:6.3.3:2.5.1:2.7.1 +4688 1.5.1:3.6.1 +4689 3.6.1:2.3.1 +4690 6.3.4:1.17.1:2.1.2:2.3.1:6.3.2:4.1.1 +4691 2.3.2:2.6.1:4.2.3:2.6.1:3.1.2:2.3.1:3.1.2:4.2.1:4.3.1:6.3.1:2.7.8:6.3.4:2.5.1:6.3.4 +4692 3.5.4:2.3.1:3.1.2:1.7.2:3.5.1:4.2.1:4.3.1:4.2.3:3.1.3:1.4.1:2.3.1:4.2.1 +4693 2.5.1:6.3.4:4.1.1:2.3.1:1.1.1 +4694 5.4.2:2.5.1:1.4.1:5.3.1:1.5.99 +4695 4.6.1:5.3.1:2.1.2:6.4.1:4.1.1:3.2.1 +4696 2.1.2:4.1.1:1.1.1:2.7.7:4.4.1 +4697 6.3.3:3.1.1:1.1.1:1.2.1 +4698 1.3.1:4.1.2:6.3.2:5.3.1:1.1.1:2.7.1:4.1.1:2.7.7:2.7.4 +4699 2.3.1:3.5.3:1.1.1:1.5.1:6.3.5 +4700 2.7.1:2.3.1 +4701 2.1.1:1.1.1:1.4.1 +4702 3.5.3:3.5.3:4.1.1:3.6.1 +4703 1.5.99:4.3.1 +4704 1.1.1:2.7.2:5.4.2:2.1.2 +4705 2.7.1:3.5.1:5.3.1:2.3.1:1.1.1:2.3.1:5.3.1:3.2.1 +4706 5.4.2:2.3.1:6.3.2:2.7.1:6.3.4:6.3.4 +4707 1.2.1:3.5.3 +4708 5.4.2:4.1.2:2.6.1 +4709 2.4.2:2.3.3:3.6.1:2.7.7:1.5.99:2.5.1:4.3.2:2.4.2 +4710 1.8.1:2.1.2:2.7.1:3.1.3 +4711 4.2.1:5.4.2:6.3.2:6.2.1 +4712 2.8.1:1.1.1:1.3.3:4.4.1:6.3.5 +4713 6.3.3:4.1.1:2.1.1:1.1.1:4.2.1:2.7.1 +4714 5.1.2:2.1.2:4.1.1:4.2.3:2.4.2 +4715 6.3.5:4.4.1:6.3.2:2.3.1:2.3.1:4.1.1:2.3.1 +4716 3.2.1:4.2.1:4.3.1:5.1.3 +4717 5.4.2:3.1.4:1.4.1:2.4.2:2.7.2:2.3.1 +4718 2.8.2:1.4.3:3.6.1:2.7.2 +4719 2.6.1:4.3.1:1.1.1:3.5.1:5.4.99:4.3.2:1.1.5:4.1.1:2.4.2 +4720 6.3.2:5.4.1 +4721 1.5.99:4.2.1:1.1.1 +4722 3.5.1:1.1.5:4.3.1:6.3.4:6.3.4:1.4.1:2.4.2:3.4.13 +4723 5.4.99:2.3.1:3.4.13:3.6.1:4.3.2:4.1.3:2.6.1 +4724 5.4.2:1.1.1:2.3.3:1.1.1:2.5.1:4.1.1:4.1.1 +4725 1.4.1:3.5.1:4.1.2:3.1.3:2.3.3:6.3.5:6.3.2:3.5.1:5.1.3 +4726 1.2.1:4.3.1:3.1.3:4.4.1:2.3.1:2.5.1:5.4.2 +4727 2.4.2:3.6.1:1.17.4 +4728 6.3.4:6.3.2:4.3.2:5.4.2:2.5.1:3.5.3:2.2.1:4.3.1 +4729 1.2.1:2.7.1:2.4.2 +4730 5.4.99:2.4.2 +4731 1.2.1:2.1.1:3.5.1:4.1.1 +4732 1.13.11:2.7.1:4.3.1:4.1.1:6.3.4 +4733 2.7.2:1.5.1:2.7.2:2.7.7:3.5.4:6.3.4:1.2.1:1.3.99:6.3.3:2.7.1 +4734 4.3.2:2.7.1:1.2.1:4.2.1:2.7.7:1.1.1 +4735 4.1.3:1.1.1:2.7.1:6.3.4:2.7.7 +4736 1.4.3:2.7.1:3.1.3:1.2.1 +4737 2.3.3:3.5.1:4.1.2 +4738 4.2.1:1.13.11:2.7.6:1.14.13:3.5.1 +4739 6.3.5:1.2.4:1.1.1 +4740 4.2.1:2.7.9:2.5.1:2.3.1 +4741 3.6.1:2.7.2 +4742 3.5.3:1.3.3:2.5.1 +4743 2.3.1:4.3.1:2.4.2:4.3.2:6.3.2:4.2.1 +4744 5.1.3:2.7.7:2.5.1:5.3.1:2.1.4:1.1.1:2.7.1 +4745 2.5.1:1.5.1:2.4.2:2.3.3:2.1.2:6.3.2:2.1.3:4.2.1 +4746 1.3.1:2.5.1:4.3.1:1.2.4:4.2.1:4.4.1 +4747 6.3.5:5.3.1:1.2.1 +4748 2.7.4:2.7.1 +4749 2.3.1:3.5.1:1.2.4:2.7.9:2.7.2 +4750 4.2.1:2.7.9:2.7.1:1.1.1:2.7.1:1.2.1:1.2.1:2.7.1:3.4.11:2.7.7 +4751 1.17.4:2.1.3:5.1.2:2.6.1:2.7.1 +4752 5.3.1:2.7.1:3.2.1:6.3.4:3.5.3 +4753 4.1.1:2.3.1:4.1.1:1.3.99:3.6.1 +4754 3.5.3:5.3.1:1.2.1:2.3.1 +4755 2.6.1:3.1.1:2.5.1:2.7.1 +4756 4.2.1:2.1.1:2.4.2 +4757 2.1.1:3.5.3:2.4.1:3.6.1:6.3.2 +4758 1.2.1:1.7.1:1.1.1:2.6.1:6.3.4 +4759 3.5.1:1.5.1:3.5.3:2.5.1:1.8.1:3.1.2:3.5.4:4.2.1 +4760 3.1.3:1.1.1:2.4.2:6.3.2 +4761 5.1.3:1.13.11:4.1.1 +4762 2.4.2:2.5.1:4.1.1:3.5.1:2.5.1:2.7.8:4.1.2:1.1.1:4.3.2 +4763 4.2.1:6.3.3:6.3.1:1.1.1:2.3.1 +4764 1.4.1:4.1.1:4.2.1:4.2.1:1.11.1 +4765 2.6.1:1.5.1:2.1.3:5.4.2:2.6.1:1.2.4:2.1.2:1.5.1:2.7.1:1.1.1:1.1.1 +4766 4.1.1:5.1.1:4.2.1 +4767 2.7.1:2.7.9:3.5.1:2.7.7:2.7.6:2.7.7:1.3.1 +4768 1.5.1:4.2.1:1.4.1 +4769 3.5.1:2.7.2:1.3.1:2.7.1:3.1.1:6.3.2 +4770 5.4.2:1.1.1 +4771 2.5.1:2.3.1:5.3.1:3.5.4 +4772 2.7.6:1.2.1:3.1.3:1.2.1:9.9.9 +4773 3.1.2:1.1.1:2.7.4:1.1.1:2.7.7 +4774 6.3.2:1.1.5:2.7.7:2.3.1:4.1.1 +4775 2.5.1:3.6.1:2.7.2:1.2.1 +4776 2.7.2:5.1.3:1.1.1:6.3.2:5.4.2:2.5.1:6.3.1 +4777 5.4.99:3.4.13:2.7.4:2.3.3:2.3.3:2.7.1:1.2.1 +4778 2.5.1:1.5.1:2.7.1:4.3.1 +4779 1.1.1:1.5.1:2.5.1 +4780 6.1.1:6.3.4 +4781 2.7.7:5.1.1:5.4.2:5.1.3:3.5.1 +4782 1.5.1:2.4.2:3.1.1:1.3.99:5.3.1:2.7.1:1.1.1:4.2.1:2.7.2:2.4.2:2.1.2 +4783 2.7.8:1.1.5:5.3.1:1.2.1:5.4.2:3.5.1:6.3.5 +4784 3.5.1:2.7.4:1.4.1 +4785 2.4.2:1.1.1:6.2.1:2.5.1 +4786 3.5.4:3.5.1 +4787 1.1.1:1.2.4 +4788 2.3.1:3.5.3 +4789 6.3.5:1.1.1:2.7.1:4.3.1:1.3.1 +4790 2.7.2:2.1.1:2.1.2:1.1.1 +4791 1.1.1:5.4.2:2.7.1 +4792 1.2.4:4.1.1:2.7.1:3.1.4:4.2.1:4.3.2 +4793 2.7.1:4.1.2:5.4.99:3.2.2:3.5.1:2.7.7:2.7.1 +4794 2.7.1:3.2.1:4.3.2:3.5.1:2.7.4 +4795 4.1.1:4.4.1:2.5.1:1.3.99:2.3.1:1.5.1:2.3.1 +4796 2.1.1:4.99.1:2.6.1:6.3.2:2.7.7:6.3.1:3.5.1:4.1.2:2.4.2:4.4.1:2.6.1:5.1.2 +4797 3.5.1:3.1.2:9.9.9:1.1.1:3.5.3:4.2.1 +4798 4.2.1:4.1.3:1.4.1 +4799 2.7.1:1.14.13 +4800 1.4.1:3.5.1:1.2.1:2.1.2 +4801 2.7.2:2.5.1:6.2.1 +4802 3.1.3:2.7.1:2.7.4 +4803 4.1.2:2.1.1:4.1.2:1.2.5:1.2.4:2.7.1 +4804 1.14.13:3.5.3:3.5.1:2.7.4:1.18.6:2.4.2:2.7.4:2.4.2:1.2.1:3.13.1 +4805 4.4.1:4.4.1:4.1.1:2.6.1:6.3.3:1.1.3:3.1.2:2.3.1:1.2.1:1.1.1:4.2.1:2.7.1:2.7.1 +4806 4.2.3:2.4.2:1.2.4 +4807 2.1.2:3.1.3:6.1.1:1.1.1:2.1.2:5.4.99:6.3.4:4.1.1:4.1.2:3.6.1:2.6.1:2.5.1:2.6.1 +4808 5.1.3:3.4.13:5.4.99:2.7.7:2.7.1:5.5.1:5.4.99:6.3.2 +4809 5.4.2:5.4.99:2.7.8:3.1.2:5.3.3:4.1.1:3.1.3:1.1.1:2.7.7:2.1.1:2.2.1:2.3.1:1.1.1 +4810 1.1.1:4.3.2:2.7.1 +4811 2.3.1:2.7.2:6.3.4:3.5.3 +4812 2.1.1:2.7.6:2.7.1:3.5.1:6.3.4:2.5.1:1.13.11:2.7.2 +4813 2.5.1:3.1.3:4.3.1:2.4.2:2.4.2 +4814 2.7.7:6.3.4:2.5.1:3.4.11:2.7.1:2.4.2 +4815 2.4.1:2.7.1:2.7.1:6.3.1 +4816 2.7.9:4.2.1:4.1.2:5.2.1:2.3.1:4.3.2 +4817 4.2.1:2.7.1:1.1.1:4.1.3:3.5.3:4.2.1:2.3.1:1.13.11:4.2.-:2.6.1 +4818 4.2.1:2.4.2:1.5.1:2.5.1:5.1.1:1.8.1:3.5.1:1.4.1:2.3.1 +4819 6.3.2:2.6.1:4.2.1:1.1.1:3.6.1 +4820 6.3.4:2.3.1:5.1.1:3.6.1:5.4.99:2.6.1:1.8.1:3.1.3:6.3.3:4.1.1:4.1.2 +4821 4.1.2:5.4.2:5.3.1:1.1.1:2.4.1 +4822 2.3.1:1.5.1:4.1.2:4.1.1 +4823 2.3.1:1.8.1:1.2.1:1.1.1 +4824 2.5.1:4.3.2:1.1.1:2.4.2 +4825 3.8.1:3.8.1:5.3.1:1.2.4 +4826 4.3.1:1.4.1:2.3.3 +4827 1.1.1:4.4.1:3.1.2:6.3.2:3.6.1 +4828 4.1.1:6.3.2:2.7.7:3.5.3:6.3.3:4.3.2:2.7.7:2.3.1 +4829 2.1.3:2.7.7:4.1.1:2.7.2:4.1.1:2.5.1:6.3.4:4.1.2 +4830 2.3.1:1.4.1:5.4.99 +4831 2.3.1:2.5.1:4.3.2 +4832 4.4.1:2.4.2:5.3.1:4.99.1:3.4.11:3.5.1 +4833 4.4.1:2.7.1:4.3.1:9.9.9:4.2.1 +4834 1.13.12:2.6.1:4.3.2:2.3.1:3.5.1:4.2.1:3.5.1:2.3.1:5.4.99 +4835 2.3.1:2.3.1:6.2.1:3.5.1:4.4.1:4.2.1:4.2.3:1.1.1:1.3.3:5.3.1:2.3.1:6.3.4:2.1.2 +4836 1.2.1:1.7.99:1.1.1:2.7.1:2.5.1:1.1.1 +4837 2.7.2:2.3.1:6.3.2 +4838 2.7.1:2.7.4:2.7.1:1.8.1:4.1.1:5.1.3 +4839 1.5.1:1.4.3:1.1.5 +4840 4.1.1:6.3.4:4.4.1:6.3.2:3.1.4 +4841 1.5.1:6.3.2:2.3.1 +4842 2.4.2:6.3.4:2.1.1 +4843 1.1.1:2.7.1:4.4.1:2.1.3:2.1.2:2.6.1:6.3.5 +4844 3.6.1:6.3.4:1.3.1:1.17.1:1.2.1:2.3.1:4.1.2:2.7.1:2.3.1:4.2.1 +4845 5.1.2:2.7.1:6.3.4:1.1.1:2.4.2:4.1.1:1.17.4:9.9.9:3.5.1:2.3.1:4.1.1 +4846 2.7.2:5.4.2:2.7.2:4.2.1:4.3.2:2.7.2:2.6.1 +4847 4.6.1:2.3.1:2.-.-:5.3.1 +4848 4.2.1:1.5.1:3.2.1:4.2.1:4.2.1:4.1.2:2.7.1 +4849 2.1.2:3.1.3:3.6.1:2.7.7 +4850 3.5.3:2.3.1:2.4.2:2.5.1 +4851 4.2.3:2.7.2:2.7.4:3.2.1:2.7.4:2.4.2:5.4.99:2.7.1:1.2.1 +4852 6.3.3:4.3.1:6.3.4 +4853 2.7.7:1.7.99:6.4.1:5.1.3 +4854 1.1.5:1.1.1:6.3.5:1.7.99 +4855 2.1.1:1.2.4:1.7.2:2.6.1:2.7.4:2.3.1:1.2.1:4.3.1:2.6.1:2.5.1:2.7.7:2.6.1 +4856 4.3.2:9.9.9:6.3.1:3.5.2:1.2.1:4.3.1:1.4.1 +4857 2.3.1:4.1.1:3.5.4:4.1.1 +4858 1.2.1:1.2.1:1.3.99:3.1.3:2.7.1:1.5.1:5.4.3:2.6.1:4.2.3:2.3.1:4.4.1:2.1.3:4.3.2 +4859 3.5.1:2.5.1:4.1.1:6.4.1:2.7.1:4.2.3:2.6.1:2.4.2 +4860 2.7.1:2.3.1:2.5.1 +4861 2.7.7:3.4.13:6.3.4 +4862 1.2.1:4.3.2:6.3.4:6.3.2 +4863 2.4.2:5.3.1:2.7.4:2.7.1:2.7.7:9.9.9:2.5.1:6.3.1 +4864 2.7.2:2.1.3:3.5.3:1.5.1:2.1.4:2.5.1:2.7.2 +4865 1.1.1:4.1.2:2.3.1:2.3.1:2.3.1 +4866 4.1.3:2.7.1:4.2.3:4.4.1:3.1.2 +4867 1.8.1:6.3.3:2.3.1:4.1.1:2.7.1 +4868 4.1.2:2.5.1:1.5.1:2.6.1:5.3.1:2.6.1:1.3.1:1.1.1:1.5.1:1.2.1:3.6.1:4.1.1:2.1.1:2.6.1 +4869 6.2.1:1.3.99:2.3.1:1.5.99:2.1.2 +4870 2.7.1:4.3.1:1.3.1:1.4.1:2.7.7:2.7.1:3.1.5:1.2.1 +4871 1.13.12:3.5.2:2.4.2 +4872 4.2.1:1.7.99:4.3.1:2.7.7:2.6.1:1.5.1 +4873 1.5.99:3.1.3:2.3.3:3.5.1:4.1.2:3.3.1 +4874 2.3.3:3.5.3:3.1.3:5.4.2 +4875 1.17.1:2.6.1:3.3.1:4.1.2:2.7.2:6.3.3 +4876 2.3.1:4.2.1 +4877 2.1.1:2.6.1:2.6.1:5.4.2:2.3.1:2.5.1:2.1.1:2.7.2 +4878 4.1.1:2.3.1:5.4.99 +4879 5.4.99:4.1.3:2.7.6:3.5.1:1.2.1:2.1.1:2.1.4:4.1.1:4.3.2:2.1.2 +4880 1.5.1:1.1.1:4.1.1:5.4.2:2.6.1:2.4.2:1.5.1 +4881 2.7.6:5.1.3:4.1.1:5.3.1:2.8.1:1.2.1:2.3.1 +4882 4.4.1:4.2.3:1.2.1:2.4.2:3.4.13:5.3.1:2.7.2:2.2.1:6.3.4:2.3.3:4.2.1:3.5.1:1.1.1 +4883 3.6.1:3.5.3:2.7.2 +4884 1.2.1:4.2.- +4885 2.7.4:4.1.1:2.1.3:1.1.1 +4886 2.7.1:1.1.3:5.3.1:2.7.2 +4887 2.4.1:4.4.1:2.4.2:2.8.1:1.1.1:3.1.3:1.7.99:1.2.1:2.7.1 +4888 2.7.1:4.1.3:2.1.3 +4889 3.1.3:1.5.1:3.1.3:6.3.3:1.2.1 +4890 6.3.5:4.4.1 +4891 2.7.7:4.3.2:6.3.4:3.5.1 +4892 3.5.3:4.1.1:2.4.1:3.1.1:1.7.99:2.1.1:2.3.3 +4893 2.8.1:5.3.1:2.7.2:6.3.4 +4894 3.2.2:6.3.3:6.3.5:6.1.1:2.7.6 +4895 4.1.1:3.5.3:4.3.2:2.1.2 +4896 5.3.1:4.1.1:4.1.2 +4897 4.1.1:2.7.1:6.3.4:4.4.1:1.5.1 +4898 6.3.3:2.3.1:6.3.3:2.5.1:4.1.2 +4899 2.6.1:1.1.1:1.1.1:2.1.3:2.7.1:4.2.3:3.6.1:4.1.1:2.3.1 +4900 1.2.4:3.6.1:2.1.3 +4901 2.8.1:5.4.99:1.-.- +4902 2.7.1:4.1.1:3.2.1:4.3.1:1.7.99 +4903 2.3.1:5.3.1:1.7.1 +4904 9.9.9:2.3.1:2.5.1:4.2.1 +4905 6.3.2:4.2.2:4.1.2:3.5.1 +4906 6.3.4:2.5.1:1.2.1:1.3.1:1.2.1 +4907 3.5.2:5.3.1:3.6.1:2.6.1:2.7.1:6.3.4:1.4.3:2.6.1 +4908 6.3.3:2.7.2:5.4.99:4.1.3:1.3.99:4.1.2:2.4.2:6.3.2:4.2.1 +4909 2.3.1:5.4.99 +4910 4.1.3:2.7.7:3.5.1:2.3.1:2.7.1:2.4.2:1.1.1:4.3.2 +4911 2.7.1:4.3.2:1.1.1:2.1.2:2.3.1:4.1.1:1.3.1:2.1.1 +4912 3.1.3:4.3.2:6.3.1 +4913 2.7.7:5.1.2:4.4.1:2.7.1:1.3.1 +4914 1.4.1:2.6.1:2.3.1:2.7.1:1.2.1:4.2.1:1.4.1:1.4.1 +4915 1.5.1:2.7.1:2.7.6:2.5.1 +4916 5.3.1:9.9.9:2.8.1:1.4.99:4.3.1:5.4.2:2.7.1:3.1.3 +4917 2.3.1:1.2.4:3.5.1:5.4.99:2.4.2 +4918 1.5.1:4.1.1:4.2.1:3.6.1:1.1.1 +4919 2.7.1:2.4.2:4.1.2:2.5.1:1.2.1 +4920 1.4.4:1.1.1 +4921 2.1.2:6.3.4 +4922 4.1.3:4.4.1:4.1.3:2.5.1:2.7.8:1.1.1:3.6.1 +4923 6.3.1:3.5.1:2.4.2 +4924 6.3.5:2.6.1:4.2.1:2.3.1:3.2.1:1.1.1:1.4.4 +4925 2.3.3:6.3.3:2.4.2:5.4.2:4.3.2 +4926 2.6.1:1.2.1:1.14.13 +4927 1.2.1:3.1.1:1.1.1:3.1.3:2.7.1:2.3.1 +4928 3.1.3:6.2.1:2.7.2:4.3.1:2.1.2:2.7.4:3.5.1:3.6.1 +4929 6.3.2:6.3.4:2.1.1:1.1.1 +4930 6.3.4:2.7.7:2.7.4:4.2.1:1.5.1:1.3.99 +4931 3.5.1:6.3.2:2.5.1:2.7.1:4.3.1:4.4.1 +4932 2.7.1:2.5.1:2.5.1:1.2.1:5.3.1 +4933 2.3.1:2.3.3:4.3.1:3.5.4:5.4.99 +4934 6.3.2:2.1.1:2.3.1:2.3.2:5.4.99:1.2.4:1.5.1 +4935 4.2.3:2.8.3:4.1.1:6.3.5:2.5.1:2.5.1:4.3.2:6.3.4 +4936 1.2.1:6.3.4:1.4.1:4.1.1:1.3.99:1.2.1:6.3.1 +4937 2.7.1:2.2.1:2.1.1:2.5.1:1.2.1 +4938 1.17.4:5.4.99:3.1.4:1.1.1 +4939 1.17.4:2.3.1:2.2.1:3.2.1:4.1.1 +4940 3.4.13:2.3.1:4.3.1 +4941 1.4.4:4.2.-:2.7.4:2.5.1:4.3.1:5.3.1 +4942 2.6.1:6.3.3:4.1.1:2.5.1:2.3.1:6.3.2:2.6.1 +4943 4.2.1:2.5.1:6.1.1:1.2.4:2.7.1 +4944 3.5.1:2.7.2:2.3.1:2.7.7:1.4.1:2.1.2:3.1.3:1.1.1:1.5.1:2.6.1:5.4.2:1.2.1:5.3.1 +4945 2.7.1:1.5.1:6.1.1:2.2.1:6.3.4 +4946 5.3.1:1.2.1:5.3.3:3.5.4 +4947 4.3.1:2.7.2:4.2.1:2.7.8 +4948 4.1.1:4.2.1:4.2.1:1.2.1 +4949 2.3.1:6.3.4 +4950 6.4.1:3.5.1:2.4.1:1.2.1 +4951 2.1.1:2.5.1:4.99.1:1.4.1:2.3.1:1.2.1:6.3.4:2.7.2 +4952 2.3.1:5.3.1:1.5.1:3.5.4:3.5.1:3.6.1 +4953 2.3.1:2.6.1:2.5.1:4.1.3:5.3.1:3.1.4:4.2.1 +4954 4.1.2:2.3.3:4.2.1:4.1.1:2.5.1:3.2.2 +4955 6.3.4:2.7.1:1.4.3:1.4.1:6.3.2:4.2.3:6.3.2:3.6.1 +4956 2.6.1:6.3.3:3.1.5 +4957 2.7.7:2.1.1:1.2.1:4.4.1:2.6.1:2.6.1:2.4.1:5.1.3 +4958 1.2.5:2.3.1:1.4.1:1.1.1:2.3.3:1.14.13 +4959 3.5.1:3.1.3:4.2.1:2.4.2 +4960 2.1.1:2.7.1:4.2.1:4.2.1:1.2.1 +4961 5.4.99:3.1.3:1.2.1 +4962 2.5.1:2.4.2:2.3.1:2.1.1:5.4.2:4.2.3:5.3.1:2.5.1:1.1.1:2.7.4:4.1.2:1.1.1:6.3.4:3.5.4:4.1.1 +4963 1.1.2:1.17.4:4.1.3 +4964 5.5.1:6.3.3:1.2.1 +4965 2.1.2:2.3.1:4.1.1:1.4.1:2.7.8:2.7.1 +4966 4.1.3:6.3.4:5.4.2:1.2.1:2.7.2:2.7.4:1.1.5 +4967 4.3.1:2.5.1:2.7.1:5.1.1:3.5.1:1.1.5:4.1.1:5.4.2:2.3.3:1.1.1:4.2.3:2.7.1:1.2.1:2.7.1 +4968 2.7.1:2.7.4:2.3.1:3.5.1:6.3.1:1.7.99 +4969 4.1.3:2.3.1:1.5.1:6.4.1:2.7.2:2.8.1 +4970 2.1.2:1.2.1:3.5.1 +4971 1.2.1:4.2.1:2.6.1:6.3.5 +4972 2.7.1:6.4.1:3.8.1:4.3.2:4.1.1:5.3.1:1.5.1:1.2.7:9.9.9 +4973 2.7.1:2.7.7 +4974 4.1.2:2.7.1:2.7.2:2.6.1 +4975 4.2.1:5.4.99:4.1.1:2.7.2 +4976 1.2.1:3.5.1:2.1.1:6.3.4:3.1.3 +4977 2.7.1:4.2.1:2.1.2:3.1.3:4.2.1 +4978 3.5.1:4.2.1:3.5.1 +4979 2.5.1:2.3.1:4.2.-:2.6.1:2.5.1:5.1.3 +4980 4.3.2:1.1.1:6.4.1:4.1.1:2.1.2:1.5.1:4.1.3:5.4.3:3.5.3:1.4.1:3.1.4 +4981 2.3.1:2.4.2:1.5.99:9.9.9:1.2.1:5.4.2:5.1.2:5.3.1:3.2.1:2.7.2:6.3.4:6.3.2 +4982 4.3.1:2.7.1:2.7.7:2.7.2:2.3.1 +4983 2.5.1:2.7.2:4.3.1:1.5.1:2.1.1:2.7.2:1.1.5:6.3.4:4.1.2:4.1.1:2.3.1:4.3.1 +4984 2.7.2:5.4.99 +4985 2.5.1:3.5.3:5.3.1:3.1.2:2.4.1:1.3.3:1.1.1 +4986 3.5.3:2.3.1:2.5.1 +4987 2.7.4:2.1.2:2.7.1:2.8.1:1.4.1:1.4.1:5.4.99:2.7.4:6.3.1:3.1.2:5.4.99:1.1.1:4.2.1 +4988 2.3.1:1.2.1:2.7.1 +4989 3.2.2:4.1.1:1.2.1:1.2.5:1.4.1 +4990 2.7.6:4.2.1:4.3.1:5.4.2:3.1.2 +4991 2.7.7:2.3.3:2.1.1:5.4.2 +4992 4.2.1:2.4.2:3.5.1:2.3.1:2.7.6:6.2.1 +4993 2.6.1:2.3.1:4.2.1:2.7.1:2.6.1 +4994 1.1.1:2.6.1:6.2.1:1.1.1:2.7.7:4.1.1 +4995 3.5.1:2.7.2:2.7.4:1.1.2:2.7.1:5.1.1:1.1.1 +4996 2.7.7:4.2.1:2.7.7:4.2.1 +4997 4.2.1:4.2.3:3.5.1:3.5.1 +4998 3.5.1:4.3.1:6.3.3:3.6.1:2.6.1:2.5.1:2.1.1 +4999 2.3.1:2.6.1:1.2.1:1.2.1:2.5.1:4.4.1:4.3.1 +5000 5.4.2:2.7.1:2.7.7:2.7.1:6.3.4 +5001 2.4.2:2.4.2:4.1.1 +5002 1.2.4:4.2.1:5.3.1:3.1.3:1.7.3:3.6.1:3.2.1:1.5.1 +5003 1.5.1:1.1.1:6.3.4:5.3.1:1.3.1 +5004 4.99.1:1.1.1:6.3.4:1.3.1 +5005 3.5.99:2.7.1:5.4.2:3.1.3 +5006 2.5.1:6.3.1:4.1.2:2.7.8:5.3.1:3.4.13:3.5.1:4.3.2 +5007 4.3.2:6.1.1 +5008 1.11.1:3.5.4:2.7.1 +5009 1.2.1:1.3.99:2.3.1:1.2.1:1.3.99 +5010 2.5.1:2.6.1:2.7.1 +5011 4.1.1:5.4.2:1.14.11:2.5.1:2.7.2 +5012 3.1.4:4.4.1:4.1.2:2.6.1 +5013 2.3.1:1.1.1:2.3.1:3.5.1:4.1.1 +5014 3.1.1:4.1.1:1.1.1 +5015 3.1.3:2.1.2:1.1.1:6.3.3:1.5.1:1.13.11 +5016 6.2.1:3.1.3:3.5.1:4.1.1:3.4.13:2.1.1:6.3.3:1.2.1:6.3.5 +5017 4.4.1:4.4.1:4.1.1 +5018 1.2.1:6.3.5:4.4.1:4.2.3:5.4.99:2.7.1 +5019 5.1.1:3.5.99:2.1.2:4.2.1:2.3.1 +5020 2.7.1:2.5.1:3.5.1:1.1.1:4.1.2:6.3.4 +5021 4.4.1:3.1.3:1.1.1:1.3.1:4.1.1 +5022 1.2.1:3.1.3:1.2.5:2.7.7 +5023 1.18.-:2.3.1:3.5.1 +5024 2.3.1:2.7.4:3.5.1:2.7.7:5.3.1 +5025 1.4.1:4.2.1:2.4.2:2.1.1:6.3.1:2.1.3:3.5.1:2.7.4:5.4.99:1.1.1 +5026 5.3.1:1.1.1:2.7.1:2.4.2:2.3.1:4.2.1:6.3.4:1.2.4 +5027 6.4.1:2.3.1:5.3.1:4.2.1:6.3.2:2.1.1:3.5.1 +5028 9.9.9:5.4.2:2.5.1:2.3.1:1.2.1:3.1.1:2.7.1:1.2.1:4.1.1:3.1.3:6.4.1:2.3.1:4.4.1 +5029 2.3.1:2.7.2:2.7.2:2.3.3 +5030 1.1.1:3.5.1:2.1.2:1.3.3:2.5.1:2.3.1 +5031 1.2.1:2.1.3:4.3.2:3.6.1:3.5.1:4.3.1:3.5.1:1.4.1:1.5.1:2.7.6 +5032 5.4.99:4.2.1:1.1.1 +5033 4.3.1:4.3.2:2.7.7:3.5.3:1.5.1:2.5.1:3.1.1:1.5.1:2.7.1:4.3.2 +5034 2.7.7:1.1.1 +5035 2.5.1:4.3.1:4.3.1 +5036 3.5.3:2.7.1:4.1.1:1.1.1:1.5.1:4.1.1:3.2.1:3.5.1:3.1.3 +5037 5.4.99:2.7.1:4.3.1:2.5.1 +5038 5.-.-:2.3.1 +5039 2.7.1:2.7.1 +5040 5.4.2:1.5.1:2.1.2 +5041 1.2.1:5.4.2:1.1.1:1.7.99:5.4.2:6.3.3:1.5.1 +5042 1.1.1:6.3.4:1.3.1 +5043 2.3.1:2.1.3:3.2.1:2.8.3:1.2.4:2.4.2:1.-.-:1.2.4:2.4.2:2.3.1:2.1.2 +5044 2.7.2:6.3.3:2.1.2:2.6.1:1.5.1:4.3.1:3.1.3:2.3.3:3.1.3:2.4.2 +5045 2.3.1:1.1.1:1.2.4:3.1.4:2.7.1 +5046 2.7.4:6.3.4:3.5.5:2.7.6:1.1.1:4.4.1:2.1.2:3.5.1 +5047 2.7.8:1.2.1:4.1.1:4.1.1:2.7.4:5.3.3 +5048 2.7.2:2.5.1:5.3.1:2.3.1:2.7.6:2.5.1:2.5.1:5.1.1:2.2.1 +5049 2.7.2:6.3.4:2.1.1:4.2.1 +5050 3.5.1:4.4.1:2.7.4:3.6.1:2.7.7:1.5.1 +5051 3.1.3:2.7.1:2.5.1:3.2.2:1.5.1:4.2.1 +5052 1.5.1:2.4.2:2.7.4 +5053 5.3.1:4.1.3 +5054 6.3.3:1.3.1:2.4.2:3.5.3:2.7.7:5.3.1:1.5.1:4.2.1 +5055 6.3.4:3.5.3:2.7.1:1.7.1:5.4.99:3.1.3:1.2.1:6.3.4 +5056 1.5.1:2.5.1:5.4.2 +5057 4.3.2:2.3.1:3.5.1:5.1.3:5.4.99:3.5.1 +5058 2.7.1:4.1.1:2.4.2 +5059 4.1.1:1.2.4 +5060 2.5.1:3.5.1:4.1.1:2.6.1:2.1.3:4.1.1:4.1.2 +5061 1.7.2:2.4.2:6.3.1 +5062 2.1.1:2.7.7:2.3.1:2.7.7:1.4.1:2.4.2:6.3.3 +5063 2.6.1:1.1.1:5.4.2:2.3.1:2.1.3:6.3.5 +5064 4.1.1:1.2.1:1.2.7 +5065 2.7.1:2.3.1:4.3.1:1.1.5:6.3.1:4.4.1 +5066 4.1.1:2.3.1:4.2.3:3.1.3 +5067 3.5.1:2.5.1:2.3.1:6.3.4 +5068 3.1.4:6.3.4 +5069 2.1.1:2.7.7:1.5.1 +5070 2.7.1:1.7.99:2.4.2:5.4.99:2.6.1 +5071 4.1.1:6.4.1:2.3.1:4.2.3:4.4.1:4.3.2:1.2.1 +5072 1.2.1:4.1.1:1.2.1:2.7.2:1.17.4:2.6.1:2.6.1 +5073 1.2.1:6.3.2:1.1.1:6.3.3 +5074 5.1.2:6.3.4:1.4.1:2.7.1:2.5.1:4.2.3:2.5.1:3.1.3 +5075 4.3.1:1.3.1:2.7.4:2.7.2 +5076 2.2.1:2.7.1 +5077 6.3.3:1.6.1 +5078 5.4.99:6.3.4:4.2.3:3.1.4 +5079 2.1.3:2.6.1:1.2.1 +5080 4.4.1:1.5.1:2.7.7:1.1.1:2.4.2:4.1.1 +5081 4.4.1:2.7.7:1.17.4:2.7.7:6.3.3:2.3.1:1.1.1 +5082 2.7.4:2.7.1:5.4.99:6.3.4:4.2.1:2.7.9 +5083 3.1.3:1.4.1:6.3.4:2.7.1:4.1.2:2.6.1:5.3.1:1.5.1 +5084 3.1.1:2.3.1:1.1.1:2.7.7 +5085 6.3.5:2.6.1:2.6.1:4.3.2 +5086 2.7.2:1.4.3:2.7.2:4.2.3:2.8.1:3.5.1:2.4.2:2.7.1 +5087 2.4.2:4.2.1:2.7.8:2.7.2:1.1.1:2.3.1 +5088 3.5.3:3.6.1:2.5.1:2.5.1 +5089 2.7.6:2.3.1:4.1.1:2.7.4:3.1.3:4.1.1 +5090 2.7.2:1.5.1:3.4.13:4.2.3 +5091 6.3.4:6.3.5:4.2.1 +5092 5.3.1:4.1.1:4.2.1:1.4.1:1.1.1:3.5.1 +5093 2.7.7:3.5.1:2.7.2 +5094 4.2.1:3.5.5:3.1.4:2.6.1 +5095 2.1.2:1.2.1:2.3.3:2.3.1 +5096 2.7.1:6.3.4:2.7.4 +5097 1.3.1:1.4.1:2.7.1 +5098 4.1.1:2.4.2:4.1.1:3.1.3:2.7.2:6.3.5:5.4.99:3.5.3:2.7.6:6.3.3:2.4.2:4.3.1:2.1.1:1.14.- +5099 3.5.1:1.5.1 +5100 6.3.4:3.1.2 +5101 6.3.4:3.5.3 +5102 2.5.1:5.4.2:2.7.1:4.3.2:2.7.7 +5103 1.7.1:5.4.2:2.7.6:5.-.-:4.3.2 +5104 3.1.7:2.1.4:1.2.1:3.2.1:3.5.1:3.1.3 +5105 6.3.4:6.3.3:2.6.1:9.9.9:2.1.1:5.1.3:3.5.1 +5106 3.4.13:1.2.1:2.7.4 +5107 3.5.3:2.1.3:2.7.7 +5108 2.3.1:2.1.3:4.1.3:2.7.1 +5109 6.3.5:6.3.5:2.5.1:6.1.1:1.2.1 +5110 2.4.2:3.5.3:1.4.4:1.5.1:4.2.1:4.3.2:2.1.3:1.7.99:1.2.4:1.2.1 +5111 3.4.13:3.5.1:2.5.1:1.2.1:2.7.1 +5112 6.3.4:2.3.1:4.2.1:5.4.2 +5113 1.2.1:1.2.1:1.2.1:2.6.1:3.6.1:1.1.1:2.5.1 +5114 3.6.1:4.3.1:6.3.5:2.7.8:1.2.1:2.7.2:4.1.1 +5115 2.4.2:2.7.2 +5116 2.7.4:1.3.1:6.3.4:4.3.2:2.4.2 +5117 1.4.1:2.7.7 +5118 3.1.3:4.1.2:1.3.99:2.1.3 +5119 2.1.2:2.5.1:3.5.1 +5120 2.1.1:1.2.1 +5121 4.1.1:3.5.1:2.7.1:4.2.1:1.1.2 +5122 2.7.1:2.7.1:2.1.3:3.1.3 +5123 3.5.3:3.5.3:6.3.4:3.5.1:4.1.1:1.5.1:4.4.1 +5124 4.2.1:4.2.3:1.2.1:2.7.2:4.2.1 +5125 3.5.1:5.1.3:2.7.9 +5126 1.2.1:6.3.4:2.3.1:2.3.1:1.4.1:4.1.1:1.2.1:3.2.1:4.2.1:4.1.1:2.6.1 +5127 2.7.2:2.8.3:6.3.1:4.4.1:4.4.1:2.5.1:4.1.1 +5128 2.3.1:1.2.1:2.7.4:2.7.7:2.3.1 +5129 2.1.1:4.1.3:2.3.1 +5130 2.7.2:3.5.1:1.2.1 +5131 2.3.1:2.5.1:4.1.1:6.3.4:2.6.1 +5132 2.3.3:2.4.2:2.3.1:3.1.3:4.1.3 +5133 5.4.2:1.3.3:2.1.1:5.4.2:2.6.1 +5134 4.2.1:5.3.1:2.3.1:2.3.1:5.1.3 +5135 1.-.-:1.2.1 +5136 2.7.7:6.1.1:6.3.4:1.5.1:6.3.3:2.7.2:2.7.2 +5137 3.1.4:1.1.1:1.2.1:4.3.1:6.3.4:5.1.2:2.3.1:6.3.3:2.7.1 +5138 1.13.11:1.2.1:1.2.1:2.7.2:1.2.1:1.4.3:2.7.2:1.1.1:1.1.1:4.1.3:4.1.1:4.1.1:1.5.1:2.7.1 +5139 5.3.1:2.7.4:9.9.9:2.6.1:3.1.4 +5140 4.3.1:5.4.2:3.6.1:6.3.5:1.5.1:2.6.1:3.3.1 +5141 4.1.2:2.7.1:5.4.2:2.7.2:6.3.2 +5142 6.3.4:5.3.1:6.3.2 +5143 6.3.3:5.3.1:1.3.99:5.1.3:3.7.1:3.3.1 +5144 2.7.7:6.3.5:5.4.2 +5145 1.1.1:2.7.4:4.4.1:2.6.1:1.2.1 +5146 2.7.6:2.7.1:3.5.1:2.7.2 +5147 1.5.99:4.1.2:1.3.99:1.3.1 +5148 4.2.3:6.3.4:1.2.1:4.2.3:2.4.2:3.1.4:2.7.8:4.1.1:2.5.1:4.1.1 +5149 3.5.3:1.1.2:5.3.1 +5150 4.2.1:4.2.1:2.5.1:1.8.1:5.4.2 +5151 2.6.1:5.3.1:4.1.2:2.7.1 +5152 1.4.1:5.4.2:2.6.1:2.5.1:4.2.1:3.6.1 +5153 1.5.1:2.3.1:4.1.1:6.2.1:2.1.1:3.5.4:2.6.1:2.4.2:2.6.1:4.2.1:4.3.2:3.5.4:2.7.1 +5154 2.7.7:2.4.2:4.4.1:2.7.1:3.5.1 +5155 4.3.1:1.5.1:4.4.1:1.1.1:4.1.3 +5156 2.7.8:2.3.1:1.2.4:1.1.1:2.4.2:3.1.3:2.1.3:2.7.1 +5157 3.1.1:2.8.3:4.2.3:6.3.4:2.3.1 +5158 2.3.1:1.1.1:1.1.3:5.3.1 +5159 3.1.3:2.7.1:1.5.1 +5160 2.1.3:2.3.1:4.1.2:4.1.1:6.2.1:5.3.1:4.3.1:2.3.1 +5161 2.4.2:1.3.1 +5162 3.5.3:4.1.2:2.1.2:6.3.4:3.7.1:4.2.1:1.1.1:3.5.1 +5163 4.2.1:2.1.1:2.7.2:2.7.2 +5164 2.7.2:1.5.1:6.3.4:2.2.1:4.1.1 +5165 1.1.1:4.3.1:2.3.1:2.7.2 +5166 2.7.1:4.1.2:3.5.1:4.3.1:4.3.2:1.2.4 +5167 4.4.1:2.5.1:4.1.2:2.7.9 +5168 2.7.1:4.2.3:3.5.4:2.7.1 +5169 4.4.1:2.3.1:3.1.3:1.2.4:1.5.1:2.3.1:2.6.1 +5170 3.5.3:3.2.2:6.3.3:2.3.1:2.1.2:3.1.3:2.3.1 +5171 4.3.2:2.7.1 +5172 4.1.3:2.7.4 +5173 3.1.3:1.2.1:6.3.2:1.2.4:2.3.1:1.5.1:6.3.3:4.2.- +5174 4.1.2:2.7.6:2.5.1:4.1.3:6.3.5 +5175 1.3.3:2.3.1:2.5.1:2.6.1 +5176 3.5.1:2.6.1:4.1.1 +5177 5.4.99:1.2.4:1.2.1:6.3.5:2.3.1:1.5.99:2.4.2:2.3.1:2.7.1 +5178 3.4.11:1.2.1:2.7.2 +5179 6.3.1:2.7.7:6.3.5:1.7.2:1.2.1:2.6.1:2.3.1 +5180 2.6.1:6.3.1:2.6.1:2.7.1:2.7.7:5.1.2:4.2.3 +5181 2.7.4:3.5.1:4.3.2:4.2.1:2.1.1:1.1.5:3.6.1:5.3.1 +5182 1.2.1:1.1.1 +5183 1.2.1:2.7.4:4.1.1 +5184 2.7.1:1.7.2:4.1.1:4.1.2:6.3.5:1.8.1:2.7.2:2.3.1:2.7.7:1.1.1:1.5.1 +5185 2.3.3:1.4.1:1.2.1 +5186 2.3.1:4.1.99:4.1.2:2.7.4 +5187 5.1.2:6.3.4:3.5.1 +5188 6.3.1:2.3.1:4.1.2 +5189 2.7.1:3.5.1:3.5.3:5.4.99:2.7.9:2.6.1:3.5.2 +5190 1.5.99:2.3.1 +5191 1.17.1:2.7.1:4.3.2 +5192 5.4.99:1.1.1:4.3.2 +5193 1.3.99:4.3.2:1.1.1 +5194 2.7.7:2.7.1:1.2.1:2.3.1:4.3.1 +5195 4.3.2:2.3.1:3.5.1:2.7.4:3.5.3:1.1.1 +5196 4.3.1:2.5.1:5.3.1:2.7.1:6.2.1 +5197 4.3.2:2.4.1:2.7.7:4.2.1 +5198 6.3.1:1.1.1:2.7.1:4.1.1:4.1.2 +5199 4.3.1:6.3.5:2.3.1 +5200 2.7.1:1.5.1:4.2.1:6.3.2:2.7.7:4.1.1:2.3.3:1.2.1:1.2.1 +5201 4.2.1:3.6.1:4.1.1:1.1.1:2.7.2 +5202 2.6.1:3.5.1:4.4.1 +5203 2.1.1:1.1.1:3.5.4:3.5.4:2.6.1:4.3.2 +5204 3.2.2:2.7.1:5.3.1 +5205 5.3.1:2.1.2:1.4.1:4.2.1:1.5.1:4.3.1:1.5.99:1.1.1:3.5.1 +5206 2.1.2:3.1.3:3.3.1:1.11.1:5.1.2:3.6.1 +5207 2.1.3:2.3.1:2.3.1:3.6.1:1.17.1 +5208 1.4.99:2.6.1:5.4.3 +5209 2.3.3:2.6.1:1.1.1 +5210 4.1.2:1.1.1 +5211 4.1.2:1.2.1:6.3.1:5.1.3 +5212 2.1.2:2.1.2:2.7.6:4.2.3:6.3.5:2.8.1:3.7.1:2.1.1 +5213 3.6.1:2.3.1 +5214 2.3.1:4.2.1:6.3.4:2.6.1:2.7.7:2.5.1:2.6.1 +5215 2.7.4:1.2.5:4.4.1 +5216 6.3.4:3.1.4:3.1.1:3.2.1 +5217 1.4.1:1.3.3:6.3.4:3.6.1:4.2.3 +5218 1.4.1:2.3.1:3.5.4 +5219 5.4.2:1.1.1:5.3.1:5.4.99:5.1.3:6.3.3:1.4.1:2.6.1 +5220 3.2.1:2.1.4:2.3.1:2.7.1:4.2.1:2.4.2:5.4.2:4.1.2:1.5.1 +5221 2.3.1:2.7.7:6.3.2 +5222 1.2.4:1.18.1:6.3.4:4.4.1 +5223 4.3.2:2.1.3:2.3.1 +5224 1.14.12:2.3.1:9.9.9:4.4.1:1.1.1:1.4.4:3.5.4:3.5.1:6.3.5:3.5.1:3.5.3 +5225 6.2.1:4.1.1:2.4.1:1.17.4:2.7.1:3.1.4:4.1.1:1.2.1 +5226 3.1.3:2.7.8:1.3.99:2.4.1:2.7.2:2.5.1:6.3.1 +5227 5.4.2:2.7.6:2.7.1:2.7.2 +5228 2.7.1:6.3.4:2.1.2:6.3.2:5.3.1:2.3.1 +5229 1.2.1:3.5.1:2.7.7:6.3.4:6.2.1 +5230 2.6.1:6.3.5:2.7.6:4.1.1:4.1.3:1.4.1 +5231 2.7.6:3.2.2:1.8.1:6.1.1:5.4.2:5.4.99:2.3.3:6.3.1:2.1.3:3.1.1:4.2.1:1.4.1:1.2.1 +5232 4.3.1:1.4.1:2.6.1:1.1.1 +5233 4.1.1:5.4.2:4.3.2:2.5.1:2.3.1:6.3.2:1.5.1 +5234 3.2.2:3.5.1:2.3.1 +5235 6.3.2:3.5.1:2.7.4:1.7.99:5.3.1:4.4.1:1.2.1:2.1.1 +5236 6.3.2:2.7.1 +5237 2.7.4:5.1.2:6.2.1:3.1.3 +5238 2.7.4:3.5.1:6.3.4 +5239 3.5.1:2.4.2:2.1.4:1.1.5 +5240 4.3.1:2.4.1:2.3.1:6.2.1:6.3.2:5.4.2:6.3.4 +5241 2.7.2:1.2.1:2.3.1 +5242 1.2.1:1.2.1:2.7.2:3.1.3:1.2.4:5.3.1:6.4.1 +5243 3.5.3:1.5.1:2.3.1 +5244 2.1.2:1.2.1:6.3.4:2.3.1:4.2.1:4.1.3:6.3.4:3.5.3:1.1.1:6.3.2 +5245 2.7.1:1.2.4:1.4.99:4.3.2:2.3.1 +5246 3.6.1:2.6.1:1.3.99:2.3.1:1.2.1 +5247 5.3.1:4.3.2:1.17.4 +5248 1.1.1:2.7.2:1.3.3:1.14.11:6.3.4 +5249 1.14.16:2.3.1:3.1.3:5.4.2:2.5.1 +5250 5.3.1:2.7.4:2.7.1:1.2.1:5.3.1:2.7.4:2.1.3:2.7.1:2.8.3 +5251 2.1.2:3.5.1:1.2.1:4.1.2:6.3.3:6.4.1:1.13.11:2.7.4 +5252 6.3.1:2.5.1:2.-.-:2.7.1:3.5.1:1.1.1:6.3.2:2.3.1:2.6.1:3.5.1:1.1.1 +5253 2.3.3:1.7.2:1.1.1:2.5.1:2.3.3 +5254 4.3.1:1.17.1:2.5.1:1.1.1:2.7.7:2.5.1:2.4.2 +5255 4.4.1:2.3.1:2.3.1:6.3.4 +5256 2.7.8:2.7.1:1.8.1:2.7.7:5.4.2 +5257 2.7.6:3.2.1:2.7.7:2.3.1:2.3.3:2.7.1:2.1.4 +5258 1.4.1:2.7.2:5.4.99:2.4.2:2.7.1:2.1.2:2.4.2:6.3.4:2.5.1:1.1.1:1.3.99:1.1.5:3.6.1 +5259 3.6.1:1.3.3 +5260 2.3.1:6.3.5:5.4.2 +5261 2.4.1:3.2.2:6.4.1:3.1.2:2.1.2 +5262 1.14.13:5.1.2:4.4.1:4.2.3:2.7.1 +5263 5.1.3:2.7.1:3.5.5:4.2.3 +5264 4.3.1:2.6.1:2.4.2:5.4.2:4.2.1:5.1.3:4.4.1:2.3.1:3.4.13:2.3.1 +5265 2.3.1:1.5.1:3.1.3:1.5.1:2.4.2:6.3.2 +5266 4.1.3:6.4.1:5.4.2:4.1.1:2.1.2:1.2.1:3.5.3 +5267 1.1.1:2.2.1:1.4.99:1.5.1:2.3.1:2.7.4:5.3.1:2.5.1:2.7.7:1.1.2 +5268 1.4.1:2.4.2:6.3.2 +5269 2.3.1:3.2.1:1.4.1:6.3.4:3.5.1:2.6.1 +5270 6.3.2:1.1.1:5.1.3 +5271 6.3.5:6.3.3:2.4.2:1.1.1:3.5.3 +5272 2.6.1:3.5.1:3.1.3:4.4.1:3.2.1 +5273 4.1.2:2.5.1:2.3.1 +5274 6.3.5:3.1.3:2.3.1:1.8.1:5.1.1:2.3.1:1.1.1:4.4.1:1.17.1 +5275 1.2.1:1.2.1:1.4.1:4.2.3 +5276 3.5.1:4.2.1:6.3.2:2.3.1:2.1.2:6.3.4:2.3.1:2.2.1:3.1.3:3.5.4:2.7.2:3.5.1:2.6.1 +5277 1.1.1:3.5.3:2.7.7:6.3.2:2.6.1 +5278 2.4.2:3.1.3:2.1.1:2.4.2 +5279 2.1.3:2.5.1:1.2.1:6.3.5:2.7.4:2.7.1 +5280 4.1.3:1.5.99:2.7.7:4.2.3:6.3.4:2.3.1 +5281 1.1.1:2.7.7:4.3.2:6.3.5:2.3.3:4.3.2 +5282 2.7.2:4.3.1:2.2.1:4.1.1:5.3.1:4.1.1:2.7.2:4.2.1:2.7.4 +5283 6.3.4:4.2.3 +5284 5.3.1:1.5.1:6.3.4:4.3.1:3.5.4 +5285 2.3.1:6.3.2:2.1.2 +5286 2.4.2:3.5.1:2.6.1:2.7.4:4.4.1:1.-.- +5287 2.5.1:2.7.6:6.3.4 +5288 2.4.2:5.3.1:5.4.99:2.3.1 +5289 1.4.1:4.1.2:2.5.1:1.1.1:1.1.1:3.5.1:2.5.1:1.3.3 +5290 6.3.2:3.1.1:2.5.1:2.5.1:3.5.99:2.1.3 +5291 1.2.1:3.6.1:6.3.2:2.1.2:2.3.1 +5292 2.7.6:2.3.1:2.4.1:5.3.1 +5293 2.7.7:2.7.1:2.3.1:6.3.4:5.4.2:4.1.1 +5294 6.3.4:5.3.1:1.1.1 +5295 4.1.2:1.1.1:1.5.1:6.3.2:1.2.1:6.3.2 +5296 2.5.1:4.1.1:4.1.3:1.4.1 +5297 4.1.1:6.3.2:3.1.3:2.3.1:4.3.2 +5298 4.4.1:5.4.99:4.1.1:2.5.1:4.3.2:4.3.1:3.5.3 +5299 1.1.1:3.1.1:1.14.13:5.3.1:4.1.3:4.3.2:2.3.1 +5300 6.2.1:1.7.99:2.7.1:1.2.1:2.7.8:1.1.1:6.3.4 +5301 5.3.1:1.5.1:2.1.3:6.3.4 +5302 2.7.9:2.3.1:1.2.1:2.7.9:2.7.7:3.5.1 +5303 2.1.1:2.7.1:2.5.1:6.2.1 +5304 1.1.1:4.4.1:2.7.7:1.2.1:3.5.1:3.5.1:4.3.2:6.3.5:1.1.1 +5305 2.7.1:3.6.1:1.1.1:2.6.1:1.4.3:4.1.3:3.5.2:3.6.1 +5306 3.6.1:1.2.4 +5307 3.1.1:2.3.1:4.4.1:2.5.1:2.6.1:2.7.6:3.6.1:2.7.4 +5308 2.6.1:1.2.1:2.7.7:1.2.1:4.3.1:3.1.3 +5309 2.7.2:2.1.1:5.1.3:1.2.4 +5310 1.1.3:2.6.1:2.7.7:2.3.1:6.3.4:6.3.4:4.2.3:4.3.1:2.7.2 +5311 2.3.1:3.5.1:3.1.1:1.14.13:1.1.1:2.6.1 +5312 2.3.1:1.3.1 +5313 4.1.1:2.3.3:5.4.2:1.17.7:2.2.1:2.3.1:1.2.4:2.3.1:2.1.3:1.3.99:4.1.1:2.1.3:4.2.1 +5314 1.3.3:2.3.1 +5315 6.3.2:6.3.3:2.3.1 +5316 1.1.2:4.1.2:3.5.1:6.3.4:6.3.3 +5317 3.2.1:1.17.4:4.1.2:6.3.3:1.1.1:1.1.1 +5318 1.5.1:1.13.11:3.5.3 +5319 4.1.2:2.7.1:3.5.1:1.7.2 +5320 2.1.2:6.3.3:1.3.1 +5321 2.7.1:1.5.1:2.6.1:4.4.1:4.1.3:2.3.1:2.6.1:5.4.99:2.3.1:5.4.99:5.1.1:4.1.2 +5322 4.1.1:4.2.3:2.1.1:2.1.3:2.8.1:2.7.2:2.1.1:1.2.1:5.4.2:2.7.7 +5323 2.5.1:2.5.1 +5324 1.1.1:2.7.1:2.7.6 +5325 1.2.1:4.2.3:1.4.3 +5326 1.2.1:3.5.99:1.1.1:6.3.5:3.5.3:1.2.1:4.1.1:4.1.1:1.2.1:2.5.1:2.5.1:2.3.1:5.3.1:2.5.1:1.5.1 +5327 5.1.3:6.3.2:2.7.7:6.3.2:2.6.1:4.1.2:1.5.1:2.1.2 +5328 2.1.1:2.1.2:2.7.4 +5329 1.1.1:4.3.2:6.3.2:5.3.1 +5330 2.3.1:4.2.3:1.1.1:3.6.1:2.8.1:6.3.5:3.2.2:1.7.1 +5331 1.1.1:1.2.4:6.3.4:1.1.1:3.1.2:4.2.-:5.4.99 +5332 5.3.1:1.2.1:3.1.3:5.4.99:2.3.1:3.5.4 +5333 1.2.1:1.1.1:2.7.2:4.1.1:2.7.1:6.3.4 +5334 6.3.4:3.1.3:4.2.1:3.5.1:4.2.3 +5335 2.7.2:2.3.1:2.7.1 +5336 2.1.2:3.5.1:2.7.1 +5337 3.8.1:4.2.3:9.9.9 +5338 3.5.1:6.3.4:6.3.4 +5339 4.1.3:5.4.99:1.3.3:6.3.4:1.4.1:6.3.4:6.3.2:6.3.3:3.1.3:2.7.7:4.1.1 +5340 4.1.3:1.1.5:6.3.4:6.1.1:4.1.1 +5341 2.2.1:2.5.1:4.1.1:3.5.3:1.1.1 +5342 2.6.1:1.2.1:1.5.1:1.4.4:5.4.2:2.3.1:3.1.4:2.5.1 +5343 5.4.2:6.3.4:2.7.2 +5344 4.2.1:3.6.1 +5345 4.1.1:4.4.1:1.5.99:1.1.1:2.7.4:2.3.1:4.1.2:3.1.3 +5346 2.7.1:1.2.1:2.5.1:1.1.1 +5347 2.5.1:6.3.4:4.3.1:2.7.4 +5348 2.1.3:1.5.1:4.1.1:3.5.4:1.4.4 +5349 3.1.1:2.1.1:2.7.1:2.1.3:6.3.2:1.5.1 +5350 3.6.1:2.3.1:4.3.1:2.5.1:1.5.1 +5351 6.3.3:3.5.4:6.3.4:1.4.3:3.2.1:2.7.1 +5352 3.1.2:2.1.3:4.1.1:2.1.3:2.6.1:1.2.1 +5353 2.5.1:4.3.1:1.2.1:6.3.4:4.4.1:5.3.1:2.6.1 +5354 1.5.1:2.4.1:2.7.7:2.4.2:1.2.1:2.7.4:5.4.99 +5355 2.7.1:2.7.6:2.3.1:2.7.9:2.5.1:4.1.1:1.3.99 +5356 5.3.1:2.7.7:3.1.1:1.2.4 +5357 3.1.1:1.1.1:6.3.4:3.1.5:2.5.1:1.4.1:6.3.4:3.2.1 +5358 4.3.1:3.5.1:2.6.1:6.3.5:6.4.1 +5359 2.7.6:3.5.2:2.2.1 +5360 1.2.1:1.5.1:2.3.1:2.8.1:2.4.2 +5361 3.5.3:1.2.1:4.1.1:4.3.2:4.1.1:5.3.1:2.3.1 +5362 4.2.1:2.6.1:2.7.1:3.5.1:3.6.1:9.9.9:2.7.1:4.2.1:2.7.4:4.2.3 +5363 4.2.1:1.5.1:2.4.1:2.5.1:4.2.1:6.3.3:1.1.1:2.6.1:6.3.4 +5364 2.7.2:2.6.1 +5365 2.5.1:1.1.1:1.3.99:2.8.1 +5366 4.1.1:1.8.1 +5367 3.5.1:2.1.1:6.3.5:6.3.4:4.2.3:2.3.1:1.1.1:1.3.3:4.2.1 +5368 2.7.4:1.2.4 +5369 4.1.3:2.3.1:3.2.2:2.1.2:1.17.1:4.4.1 +5370 1.3.1:1.8.1:2.7.1:6.3.4:2.3.1:4.2.1:2.3.1:2.6.1 +5371 1.2.1:4.2.1:2.7.2:1.2.1:5.4.2 +5372 6.3.4:2.6.1:1.8.1:4.1.1:1.1.1:1.5.1:5.4.2:2.7.1:1.3.1:1.1.1:6.2.1 +5373 2.4.1:2.7.4:5.1.1:5.4.2:2.6.1:2.3.1 +5374 2.1.3:2.1.1:3.1.3:2.5.1:2.7.4:9.9.9:2.3.1 +5375 6.3.2:1.4.1:4.3.1:4.2.1:1.3.99:3.5.4 +5376 6.3.4:2.4.2:2.7.1:1.4.1:1.2.1:3.5.1 +5377 5.1.3:2.6.1:6.3.1 +5378 4.2.1:4.3.1 +5379 1.1.1:2.1.1:6.3.5 +5380 6.3.4:1.4.1:4.1.1:1.7.2:4.1.1 +5381 2.3.3:2.7.4:2.7.1:1.2.1 +5382 4.2.1:2.3.1:2.1.1:4.1.2 +5383 4.2.1:2.3.1:2.5.1:3.1.3:2.1.1:1.11.1:5.4.99 +5384 2.5.1:2.1.3 +5385 2.7.6:2.7.4:2.5.1:6.3.5:6.3.2:4.2.1:4.4.1 +5386 3.6.1:4.2.1:6.3.4 +5387 2.1.3:5.1.2:2.4.1:1.1.1:2.1.1:1.2.1:2.3.1:2.7.1 +5388 5.5.1:6.3.4:3.1.3:1.1.1:2.1.3 +5389 4.1.3:2.5.1:1.4.1:4.2.-:6.3.2:6.3.4:4.3.1:6.3.5 +5390 2.3.1:2.6.1:2.7.2:1.5.1:2.4.2:4.1.1 +5391 4.1.3:4.1.1:2.7.1:1.1.1 +5392 4.1.2:2.7.2:2.4.2:3.5.4:2.7.7:5.4.99:5.4.2:2.3.1 +5393 2.7.1:3.1.7:1.1.1 +5394 1.5.1:2.7.4:2.6.1:1.2.1:4.2.1:2.1.1 +5395 6.6.1:5.1.1:5.4.2:2.7.4:6.2.1:3.5.1:4.2.-:5.4.1:3.5.3:2.6.1:3.5.4 +5396 2.7.1:5.4.2 +5397 3.5.1:5.4.2:2.1.1:1.2.4:2.5.1:3.1.3 +5398 3.1.3:1.5.1:1.11.1:1.17.4:3.1.4 +5399 1.2.1:2.1.3 +5400 4.1.2:3.3.1:2.5.1:4.1.1:2.7.4 +5401 2.1.1:2.1.2:1.1.1 +5402 2.5.1:4.2.3:6.3.2:6.3.2:2.7.4:2.5.1:2.7.1:3.1.4:2.7.7:2.7.2 +5403 1.2.1:6.3.4:3.2.1:4.1.1 +5404 2.6.1:4.2.1:1.4.1:1.5.3:1.17.4:3.5.4 +5405 2.3.1:4.1.1:4.2.1:2.7.4:2.3.1 +5406 2.4.2:4.3.1:5.1.3:3.4.13:1.1.1:2.7.7 +5407 4.2.1:2.7.4:2.7.8:1.1.2:2.5.1:6.3.2:4.1.1:3.1.2:5.4.99:2.7.1 +5408 3.5.4:2.5.1:2.6.1:6.3.5:2.7.7 +5409 3.5.1:2.5.1:2.7.1:2.7.7 +5410 3.5.1:1.1.1 +5411 5.1.3:4.2.1:2.7.4 +5412 2.1.2:4.2.1:2.6.1:6.3.3:6.3.3:3.5.1:4.2.1:5.4.2 +5413 2.3.3:5.3.1:2.7.7 +5414 3.5.2:6.2.1:2.6.1:1.5.1:6.3.3:4.1.1 +5415 1.6.1:1.1.3 +5416 4.4.1:2.1.2:2.1.1:4.2.1:4.1.2 +5417 6.3.4:2.4.2:4.1.3:1.1.5:4.1.1:2.6.1 +5418 1.1.5:2.4.2:4.1.2:1.2.1:6.3.3 +5419 2.7.1:2.1.2:2.3.1:3.1.7 +5420 2.7.7:1.14.99:2.1.2 +5421 4.2.3:2.5.1:4.2.3:4.2.-:3.5.4 +5422 2.4.2:2.3.1:4.3.2:3.6.1:3.6.1:2.6.1:2.6.1 +5423 4.1.1:3.6.1:2.1.2:6.3.2:3.5.1:1.2.1 +5424 1.2.1:2.1.3:3.5.1:3.6.1:9.9.9:6.2.1:4.2.1 +5425 2.7.1:4.3.1:2.6.1:5.2.1:1.4.1:6.3.5 +5426 4.1.3:4.1.1:2.6.1:4.1.1:3.5.1:2.7.2:5.1.3:1.1.1 +5427 4.1.1:3.2.2:2.3.1:1.6.1:2.6.1:1.5.1 +5428 2.6.1:1.1.1:1.-.-:6.3.5 +5429 2.3.1:1.4.1:2.1.1:2.1.3:2.2.1:2.4.2:6.3.2 +5430 2.6.1:2.6.1:6.3.1:2.2.1:2.3.1:2.7.7:2.5.1:2.3.1:2.6.1 +5431 4.1.2:4.3.2:4.2.1:2.1.1:2.7.8:2.7.2 +5432 2.5.1:5.4.2:6.3.2:4.2.3:2.7.2:6.3.5:2.4.2:1.5.1 +5433 2.7.1:1.2.1:2.5.1 +5434 3.4.13:2.6.1:3.5.1 +5435 6.2.1:4.2.1:6.3.5:3.5.1 +5436 3.5.4:4.2.1:6.1.1 +5437 1.3.99:4.4.1:4.2.1:3.5.3:4.2.3:6.4.1:5.4.99:2.4.2:4.2.1:3.13.1:2.4.2 +5438 1.1.1:2.7.4:2.4.2:1.2.4 +5439 2.6.1:6.1.1:2.7.1:2.7.2:1.3.99:3.5.2:1.1.99:4.2.1:2.4.2:6.3.4:2.5.1:3.1.3:2.3.1:4.2.3 +5440 1.3.1:4.4.1:4.3.2:2.7.6:2.3.1:2.3.1:1.14.11 +5441 1.2.1:5.3.1:5.1.3:5.4.2:4.2.3 +5442 2.7.2:2.5.1:2.6.1 +5443 2.7.2:1.4.1:2.7.1:1.17.1:1.3.3 +5444 2.6.1:3.6.1:2.5.1 +5445 1.3.99:2.5.1:3.5.3:3.2.1:4.4.1 +5446 6.2.1:3.5.1:4.2.1:2.6.1 +5447 1.2.1:6.3.5:1.5.1:2.3.1:2.1.1 +5448 2.1.3:3.6.1:2.7.2:2.1.1:2.5.1:6.3.2:2.5.1:5.4.2:2.8.1:1.1.1 +5449 4.6.1:2.3.3:1.1.1:2.7.2:2.3.3 +5450 3.4.13:2.3.1:3.5.1:1.2.1:6.3.4:2.4.2:2.7.4:1.1.1:4.2.1:1.1.1:2.6.1 +5451 2.1.2:1.4.3:2.5.1:1.1.1 +5452 4.1.1:1.2.1:3.5.1:5.1.3:3.1.3:2.7.1:2.7.4:2.1.3:3.4.13 +5453 1.2.1:2.2.1:2.7.2:6.2.1:2.8.1 +5454 4.3.1:3.4.13:2.7.4:3.4.11:2.3.1 +5455 5.1.3:5.1.3:1.4.1:6.3.5:1.3.99 +5456 3.5.3:2.2.1:2.6.1:4.3.1 +5457 3.5.1:2.5.1:4.1.1:1.3.1 +5458 2.6.1:9.9.9:2.7.4 +5459 2.7.7:2.3.1:3.1.4 +5460 1.2.1:4.3.1:3.5.1:3.6.1:2.5.1 +5461 2.7.4:2.7.7:2.5.1:1.2.1:4.3.1 +5462 2.7.1:3.6.1:2.5.1 +5463 4.1.1:6.3.3:2.7.7:6.3.4 +5464 2.7.4:4.2.1:1.2.1:2.3.1:1.1.1:1.1.1:4.1.2:3.5.1:2.5.1:6.3.3 +5465 2.1.3:1.5.1:1.1.1:5.1.3 +5466 3.6.1:2.6.1:4.2.1:1.7.99:1.2.4:6.3.1:1.7.99:1.1.1 +5467 5.4.2:2.3.1:6.3.3:6.3.5:2.7.7:2.7.1:4.3.2:1.4.1:2.7.1 +5468 1.1.1:2.7.4:4.1.1:2.4.2 +5469 1.3.1:1.8.1:3.6.1:2.1.1 +5470 2.7.8:9.9.9:4.4.1:2.1.4 +5471 2.5.1:2.5.1 +5472 2.3.1:4.1.1:4.1.1 +5473 3.5.1:2.1.3:3.2.1:1.13.12:3.5.1:4.3.1:4.3.1 +5474 2.2.1:2.6.1:3.6.1:2.6.1 +5475 6.3.4:3.5.2:3.5.1:2.3.1:2.5.1:2.5.1:3.6.1:3.1.3:6.3.1 +5476 2.4.2:2.1.3:6.3.2:2.3.1 +5477 6.3.2:2.3.2 +5478 1.2.1:2.5.1 +5479 6.3.1:4.2.-:5.4.2:3.5.3:2.7.1 +5480 2.3.1:2.1.2:2.1.2:2.1.3:4.2.3 +5481 1.4.1:2.7.1:4.1.2:6.3.4:4.1.1 +5482 4.1.1:5.4.2:2.1.1:4.2.1:4.1.3:2.7.1:3.5.3:2.4.2 +5483 6.3.4:5.3.1:1.1.5:2.6.1:4.2.1:2.1.2:4.1.3:3.1.3 +5484 1.13.11:2.4.2:2.5.1:6.3.4:1.3.99:2.1.1:2.7.2:4.1.1:4.2.1:1.2.1:6.3.4:1.8.1:1.4.1 +5485 2.7.1:6.3.1:2.5.1 +5486 2.6.1:3.1.3:2.3.1:2.7.4:5.1.1:4.3.1:1.1.1:2.7.1:2.4.2:2.5.1:4.1.2:1.1.1:2.6.1 +5487 2.1.2:4.3.1:6.3.2 +5488 4.4.1:5.3.1:1.1.1:6.3.2 +5489 1.1.1:2.1.1:1.1.1 +5490 4.3.1:3.1.1:1.13.11:2.7.8:1.3.1:6.2.1:1.2.1:1.4.1:3.5.3:3.1.3:1.1.1 +5491 4.1.1:1.3.99:3.5.1:6.3.4:2.4.2:1.8.1:1.1.5 +5492 5.4.99:2.3.1:1.1.1:4.3.1:2.7.2:2.6.1:5.1.3:2.7.7:4.3.1:2.6.1 +5493 6.3.4:6.3.2:5.4.99 +5494 2.5.1:2.1.1:1.2.4 +5495 4.2.1:4.3.2:1.1.5:2.1.1:1.1.1:2.7.8:4.1.3 +5496 2.5.1:5.4.2:2.4.2:4.3.2:4.1.2:2.3.1:3.4.13:4.2.3 +5497 6.3.3:6.3.5:2.7.7:4.2.1:2.7.1:1.2.1:2.6.1 +5498 1.1.1:2.7.1:1.1.2 +5499 2.6.1:2.7.1:2.7.4 +5500 3.5.1:4.2.1:2.5.1 +5501 1.4.3:6.3.2:2.5.1:4.2.1:1.5.1:2.1.1:2.3.1 +5502 4.2.1:9.9.9:4.2.1:2.7.2 +5503 6.2.1:3.1.3:4.4.1:1.2.1:6.3.4:2.5.1 +5504 5.4.99:1.1.1:2.6.1:2.3.1:1.1.1 +5505 2.3.1:4.2.1:1.5.1:3.6.1 +5506 1.2.1:2.7.6:1.2.1:2.7.1 +5507 2.4.2:3.5.1:2.2.1:6.3.5 +5508 2.2.1:5.1.1:2.3.1:3.5.1:4.2.1 +5509 2.7.4:1.2.4:9.9.9:2.7.4 +5510 1.5.1:3.5.5:5.4.2:2.4.2:6.2.1:2.3.1 +5511 4.1.1:2.1.3:6.3.4:3.5.5 +5512 4.4.1:2.1.1:4.4.1:4.2.1:2.7.1 +5513 1.13.11:2.7.1:6.4.1 +5514 2.7.1:5.3.1:2.7.2:3.1.1:6.3.4 +5515 6.3.4:2.6.1 +5516 2.7.4:2.7.1:2.5.1:2.1.1:2.3.1:1.2.4 +5517 3.4.13:2.7.2:2.1.2:6.3.2:3.2.2:3.2.2:1.2.1 +5518 5.4.99:4.2.3:1.14.13:4.2.3:6.1.1 +5519 2.6.1:2.7.1:2.7.7:1.1.1:1.5.1:4.1.1:3.1.3:4.1.1:4.4.1:5.3.3:4.1.1:2.7.4:1.2.4:2.4.2 +5520 5.4.99:3.2.1:2.3.3:2.3.1:2.3.1:1.1.1 +5521 2.7.1:6.3.4:6.3.2:1.3.3:6.3.3:2.7.8:6.3.3 +5522 2.7.1:4.1.1:2.4.2 +5523 1.4.1:5.4.2:4.3.2:5.3.1:3.6.1:3.6.1:4.1.1:2.1.3 +5524 2.7.2:2.7.1:2.1.2:1.2.1 +5525 6.3.2:6.3.5:2.4.2:2.4.2:3.1.1:2.6.1:2.4.2:2.3.1 +5526 2.5.1:2.4.2:3.5.1 +5527 6.3.5:2.6.1:4.2.1:4.1.1:2.1.1:2.7.4:2.1.3:4.3.2:6.3.2:1.4.1:3.6.1 +5528 5.3.1:1.18.1:2.5.1:6.3.5:3.5.99:2.6.1 +5529 2.7.4:1.1.1:6.3.4:1.1.1:3.1.1:3.5.3:2.3.3 +5530 5.4.2:5.4.99:2.1.2 +5531 2.4.1:2.7.8:4.1.2:2.7.2:2.6.1 +5532 2.6.1:5.1.3:1.2.1:1.13.11:2.7.2 +5533 1.13.12:6.3.5:2.7.1:2.5.1:2.5.1:1.2.1:3.5.3:2.1.1:2.7.1:1.1.1 +5534 4.2.3:4.1.1:4.2.3 +5535 2.7.1:1.1.1:5.4.3:3.5.1:2.7.6 +5536 2.7.1:1.1.1:3.1.4:1.18.- +5537 1.5.1:2.3.1 +5538 2.3.1:4.3.1:4.2.1:2.6.1 +5539 1.3.99:5.4.99:1.5.1 +5540 2.1.2:4.2.3:2.7.4 +5541 3.6.1:2.7.1:2.7.2:2.1.4:2.3.1:2.7.9:6.3.5 +5542 2.6.1:2.3.1:6.3.4:1.2.1:3.5.4 +5543 2.3.1:2.3.1:2.3.1:5.4.2:3.6.1:3.6.1 +5544 5.3.1:3.5.1:2.7.1:2.6.1:2.6.1 +5545 3.5.2:2.4.2:2.7.1:1.1.1:1.1.3:2.7.7 +5546 2.7.4:2.7.4:6.3.4:2.7.9:6.3.5 +5547 5.1.3:4.2.1:1.5.1:4.1.3:2.6.1 +5548 3.5.4:2.7.4:2.7.1:3.1.3 +5549 1.13.11:2.4.2 +5550 2.7.1:4.3.1:2.2.1:6.3.2 +5551 2.7.7:2.3.1:3.5.3:2.3.1:2.7.2 +5552 1.7.2:2.4.2:5.4.99:5.4.99:2.7.7:6.3.4 +5553 2.7.2:6.3.4:2.7.2:3.5.4:3.5.1:2.7.7:4.1.3:6.3.4:1.2.4 +5554 6.4.1:2.5.1:5.3.1:3.5.3:1.2.1:2.3.1:2.7.1:2.4.2:4.1.2 +5555 4.1.1:4.4.1 +5556 5.4.3:4.1.2:2.7.4:1.4.3:3.1.1:2.5.1:2.4.2 +5557 1.14.13:2.7.7:1.2.1:2.6.1:2.7.7 +5558 5.3.1:4.1.1:6.3.3:6.3.4 +5559 2.7.2:6.3.2:4.3.2:6.3.4:1.17.4:2.7.1 +5560 3.5.4:1.7.99:6.3.3:3.1.1 +5561 2.4.1:4.2.1:3.6.1:4.2.1 +5562 6.3.4:3.1.3:4.3.1:3.6.1 +5563 2.3.1:5.4.2 +5564 3.1.3:2.4.2:4.2.3 +5565 1.1.1:2.3.1:2.6.1:4.1.1 +5566 2.6.1:3.1.4:4.1.3:3.1.3 +5567 5.4.2:1.5.1:1.2.1:5.4.99:6.1.1 +5568 2.1.1:2.3.1:2.3.3:5.3.1:2.5.1:2.7.7 +5569 3.5.1:2.8.3:5.4.2:1.13.11:3.5.1:5.3.1:3.1.4 +5570 2.1.3:4.2.1:2.6.1:4.2.1:2.5.1:4.2.1:3.2.2:4.1.1:4.2.1 +5571 3.6.1:1.3.1:3.6.1:2.5.1 +5572 6.2.1:4.2.3:1.5.1:5.3.1:2.4.2:1.5.1:4.2.1 +5573 2.7.1:4.1.2 +5574 2.4.1:3.5.1:4.1.1:2.1.2 +5575 2.1.1:2.6.1:5.4.2:4.4.1:2.1.3:4.3.2:5.4.2 +5576 2.7.1:4.3.1:2.2.1 +5577 3.5.1:2.3.1:1.2.4:2.3.1 +5578 1.17.1:2.4.1:3.5.1:5.3.1:2.7.1:2.4.2:4.2.1:2.3.1:2.7.6:2.4.1:3.1.4:1.2.4:4.1.1:2.6.1 +5579 2.3.1:1.2.4:2.7.2:2.6.1:2.7.7:4.3.1:2.4.2:1.2.1 +5580 1.1.1:2.7.1:2.6.1:4.3.1:2.6.1:2.3.1 +5581 2.7.2:2.7.1:2.6.1:4.2.1:3.5.1 +5582 3.5.1:2.4.2:6.3.2:4.1.2:1.2.1:3.3.1:4.2.3 +5583 3.1.3:2.3.1:3.1.4:1.13.11 +5584 5.3.1:2.3.1:2.3.2:4.4.1:1.5.1:6.3.5 +5585 2.3.1:3.1.1:2.1.2:2.7.1:1.1.2:4.1.1:1.2.1 +5586 2.3.1:2.6.1:3.5.1:2.3.1:1.13.11 +5587 4.1.2:2.6.1:4.1.2:1.14.13:2.3.1:6.3.2:1.1.3 +5588 1.7.1:3.5.1:2.8.1 +5589 2.7.2:6.3.4:2.7.1:3.5.3:2.7.4:6.3.3:5.1.1:2.3.1 +5590 3.5.4:4.2.1:4.2.- +5591 2.7.4:2.7.7:2.4.1:2.7.2:3.1.3 +5592 4.1.1:4.3.1:2.7.1 +5593 2.7.1:2.1.1:6.3.4:4.1.1:2.1.2:1.3.1:4.2.1:4.1.1:4.3.2:2.3.3 +5594 2.4.2:2.3.3:2.5.1:2.5.1:3.1.3:2.7.6:2.7.2:1.13.11:6.3.2:2.4.2:3.3.1 +5595 1.1.5:2.3.3:5.1.3:6.3.4:2.3.1:3.1.1 +5596 1.2.1:2.3.3 +5597 1.2.1:6.3.4:4.2.3 +5598 3.6.1:4.2.-:3.6.1:6.3.4 +5599 5.4.2:2.1.1:4.3.2:1.2.1 +5600 1.3.1:4.1.1:2.1.4:4.3.2:2.7.2:1.4.1:2.7.1:2.3.1:2.5.1:2.2.1:4.3.2 +5601 2.3.1:4.3.2:2.4.2:4.1.1:6.3.4:4.2.1:1.1.1:2.3.1:2.7.1:3.5.4:4.1.1:3.1.3:2.5.1 +5602 2.3.1:3.1.3:1.2.1:1.5.1:2.3.1 +5603 1.4.1:6.3.5:6.4.1:4.1.1:2.7.1 +5604 2.7.1:3.5.1:5.3.1:2.1.2:4.2.1:1.5.1:2.3.1 +5605 4.3.1:4.2.3 +5606 3.5.2:2.7.7:5.4.2:2.5.1:1.3.99:6.3.1:4.2.1 +5607 4.3.1:5.4.99:2.3.1:2.7.4:5.4.2:1.1.1:4.3.2 +5608 2.7.6:1.2.4:1.2.1:1.1.5:6.2.1:1.4.1:2.4.1 +5609 6.3.2:2.6.1:3.5.3:6.3.3:4.3.1:1.1.1:4.2.- +5610 3.5.1:2.1.3:1.4.4:5.3.1 +5611 1.7.1:3.5.3:2.3.1 +5612 6.2.1:3.5.4:1.14.16:1.2.4 +5613 4.3.2:1.3.99:2.3.1 +5614 2.4.2:2.3.1:2.4.2:2.1.1:1.2.4 +5615 5.4.2:5.1.3:4.2.3:1.2.1:2.7.1:1.1.1 +5616 1.4.4:4.2.1:1.4.1:1.1.99:2.4.2:1.2.4:1.1.1 +5617 2.7.2:2.6.1:2.6.1:1.17.4 +5618 5.4.2:6.3.3:4.1.3:5.3.1:2.1.2 +5619 1.5.1:2.3.1:4.3.2 +5620 4.4.1:9.9.9:1.1.1:4.1.1:2.6.1:2.6.1:3.1.1 +5621 4.3.2:6.2.1:1.3.99:4.1.1:3.5.1:2.2.1:2.4.1:5.4.2:2.6.1:2.4.2:2.3.1:3.5.1:3.2.2:6.3.4 +5622 1.-.-:4.1.2 +5623 6.3.4:3.1.3:2.5.1:2.3.1:3.5.1:3.5.2 +5624 6.3.4:6.3.5:1.1.1:1.5.1:1.4.4:2.6.1:5.4.2:4.3.1:2.1.2:2.3.1:5.3.1 +5625 6.2.1:6.3.4:6.3.2:5.3.1:2.7.1:1.2.1:2.7.1:4.1.1:1.1.1:3.5.3 +5626 2.7.1:5.1.3:1.2.1:2.7.7:1.1.1:2.7.2:5.4.2:2.1.3:2.5.1:1.2.1 +5627 6.3.4:1.2.4:4.3.1 +5628 5.4.99:2.1.1:2.7.4:3.6.1:1.5.1 +5629 3.1.7:2.7.7:1.3.1 +5630 2.7.1:3.5.1:1.1.1:1.2.1:2.6.1 +5631 4.2.1:6.3.4:6.3.5:4.1.3:2.5.1:1.4.1 +5632 1.4.1:2.7.1:2.6.1:2.7.2:2.7.7 +5633 1.5.1:4.2.1:6.3.2:4.1.2 +5634 2.7.1:2.1.3:3.2.2 +5635 4.4.1:4.2.1:4.1.1:6.2.1:2.7.1 +5636 4.4.1:4.2.1:6.1.1:6.3.3:2.7.1:2.1.3:5.4.2:2.3.1:2.1.2:4.2.1:2.7.2 +5637 4.2.3:2.6.1:4.2.1:3.1.3 +5638 2.3.1:3.1.2:2.7.4:2.6.1:1.2.1:4.1.2:4.3.2 +5639 6.3.5:4.4.1 +5640 3.5.1:1.1.1:6.3.1:2.6.1:1.4.1:2.3.3:4.1.2:2.3.1:2.7.1 +5641 2.5.1:5.4.99:2.2.1:2.3.1:6.3.4:5.3.1:1.2.1:3.1.4:1.1.1:1.2.4 +5642 2.1.3:1.5.1:4.2.3:6.2.1:1.2.4:5.3.1:1.8.1:4.3.2:1.7.2:6.2.1:2.1.2:4.2.-:4.3.2:2.5.1 +5643 6.3.5:2.7.1:2.7.7:2.4.2:2.3.1 +5644 4.1.1:1.5.1 +5645 2.6.1:2.3.1:2.1.2:1.2.4:1.1.1 +5646 2.4.2:4.1.3:2.7.1:1.7.1 +5647 2.6.1:4.2.1:2.7.4 +5648 2.3.1:1.2.1:2.3.3:4.1.1:1.1.1:2.7.4 +5649 2.1.1:1.2.99:2.4.2:3.5.1:3.1.3 +5650 3.1.4:4.2.1:5.3.1:2.7.2:1.1.1 +5651 3.1.1:2.1.1:5.3.1:4.3.1:2.3.1 +5652 4.3.1:1.2.1:2.5.1:4.1.2:3.5.1:2.5.1:2.3.1 +5653 2.3.1:4.1.3:2.4.2:1.5.1 +5654 1.3.1:4.2.1:2.4.2:1.1.5 +5655 1.4.3:2.7.7 +5656 1.1.1:4.3.1:4.4.1:2.3.1:1.1.1:1.1.1 +5657 5.3.1:2.4.1:1.2.1:1.2.1 +5658 1.5.1:2.7.1:1.5.1:4.1.2:4.3.1 +5659 2.3.1:1.1.1:2.7.7:2.7.6:1.5.1 +5660 1.1.1:4.1.1:3.4.11:2.7.7:2.7.1:6.3.1:2.7.4:2.1.1:6.3.3 +5661 2.1.2:5.3.1:2.1.3:1.1.5:4.2.1:2.6.1:2.7.8:1.5.1:1.5.1 +5662 2.7.4:3.5.3:2.4.2:1.5.1:4.2.1:4.1.1:5.1.1:4.1.1 +5663 2.3.1:4.2.1:4.4.1:4.1.1 +5664 2.5.1:5.4.2:1.7.99:4.1.1:3.5.1 +5665 2.5.1:1.1.1 +5666 2.7.4:2.4.2:1.3.99:3.4.11:3.1.2 +5667 3.5.3:3.1.2:1.1.5:2.1.3:2.3.1:4.1.3:2.5.1:3.5.99 +5668 2.6.1:2.2.1:2.7.9:4.3.1 +5669 1.5.1:4.1.2:1.1.1:5.4.99:1.5.1:5.4.3:4.4.1 +5670 2.4.2:2.7.4:2.3.1:3.1.2:4.1.2:6.3.4:6.3.3:2.4.1 +5671 1.1.1:1.5.1:3.1.3:2.7.1:3.5.3 +5672 1.4.4:2.6.1:2.3.1:2.5.1:2.7.1:2.2.1:4.2.3:5.3.1:2.7.2:3.5.1:2.7.1 +5673 1.2.1:1.1.1:4.2.1:4.2.1:3.6.1 +5674 4.-.-:6.3.4:6.3.4:4.1.1:3.5.1 +5675 2.7.2:2.7.8 +5676 3.5.3:2.1.3:2.5.1 +5677 4.1.1:4.3.1:4.3.1:6.3.4:5.3.1:1.13.11:2.6.1 +5678 4.1.1:1.2.1:2.4.2:4.3.1:6.3.2:5.5.1:2.7.1 +5679 1.5.1:1.2.4:4.2.3:1.1.1:6.3.4 +5680 1.1.1:4.1.2:2.7.7:3.5.1:2.1.3:4.1.1 +5681 2.7.1:2.1.2:2.6.1:2.7.2:6.3.4 +5682 2.7.1:4.2.3:2.7.1:1.5.99 +5683 1.3.99:2.6.1:1.5.1 +5684 2.5.1:2.5.1 +5685 2.7.2:6.3.3:1.-.-:6.3.4:3.5.3:4.3.1 +5686 2.1.2:2.4.2:2.-.-:2.6.1 +5687 3.1.3:2.7.1:4.1.1:4.6.1:1.2.1:1.1.1:1.4.1 +5688 2.6.1:6.3.2:4.3.2:6.3.4:2.1.2:3.6.1:2.1.2 +5689 3.5.2:2.7.1:4.2.1:1.5.1 +5690 2.1.3:2.1.1:3.5.1:1.5.1:5.4.99:3.1.1 +5691 1.3.1:3.5.4:9.9.9:2.7.8:2.1.4:3.3.1 +5692 2.7.1:2.5.1:2.7.2:5.3.1:2.3.1 +5693 6.1.1:6.3.5:3.1.3:2.5.1:2.5.1 +5694 2.6.1:1.5.3:1.1.1:1.1.1 +5695 2.6.1:2.6.1:3.5.1:3.2.2:2.7.7 +5696 5.4.2:6.3.2:2.3.1:4.1.1:2.7.7:1.3.1 +5697 9.9.9:4.3.2:4.1.1:2.7.1:2.3.1:1.4.1 +5698 2.6.1:1.2.5:1.2.1:2.1.3:4.2.- +5699 5.4.99:2.1.3 +5700 3.5.1:2.6.1:2.6.1 +5701 4.3.2:4.3.2:2.7.2:4.1.1:3.1.3 +5702 2.3.3:5.4.3:6.3.1:6.3.2:2.4.2:4.1.2:2.2.1 +5703 2.6.1:2.1.3:4.2.1:4.3.1:3.1.4:2.7.4:2.7.2:2.7.1:4.1.3:1.1.1:2.4.2 +5704 5.4.99:2.6.1:3.1.3 +5705 1.4.1:6.2.1:3.5.99:1.1.1 +5706 2.1.2:1.8.1:3.5.1:1.5.1:2.7.2 +5707 2.3.1:2.3.1:2.3.1:1.1.1:4.2.1:1.1.1:6.4.1 +5708 1.5.1:1.5.99:2.7.1 +5709 5.1.1:6.3.1:1.1.1:3.1.2:6.3.4:2.7.1 +5710 4.3.1:3.1.4:2.2.1 +5711 2.7.1:4.1.2:6.3.1:2.3.1:4.1.1 +5712 4.2.1:1.3.3:4.2.3:4.3.2 +5713 3.5.4:2.6.1:2.7.2 +5714 1.13.11:2.5.1:2.5.1:6.3.4 +5715 1.2.1:4.1.1:2.5.1:4.2.-:5.1.2:1.3.1:1.2.1:1.2.1:1.3.3:2.3.1:1.2.1 +5716 2.3.3:4.2.1:4.2.1:2.7.1 +5717 4.2.3:2.7.1:1.1.1:2.7.2:2.5.1:4.1.1:1.4.1 +5718 6.3.4:6.3.3 +5719 3.6.1:2.7.1:4.3.1:2.1.2:2.4.2:2.6.1:4.1.1 +5720 4.1.1:3.5.1:4.4.1:6.3.2:4.1.1:2.6.1:4.3.2:3.2.2:5.4.2 +5721 1.5.1:2.7.4:2.2.1:1.2.4:4.1.1:1.2.1:2.3.1:1.5.1:1.2.4:2.5.1:3.5.1:2.1.2:6.3.1 +5722 1.2.1:4.2.1:2.7.1:2.6.1:3.1.4:1.4.1:2.6.1:1.7.99:1.4.1:1.14.12:4.2.3:4.1.1:2.7.1:2.7.1:2.4.2 +5723 4.-.-:2.1.3:1.5.1:6.3.4 +5724 4.1.1:3.6.1:3.5.1:6.4.1:3.5.1 +5725 3.6.1:2.1.2:6.3.3:2.7.1:4.2.1:2.3.1:1.3.99 +5726 2.5.1:1.8.1:1.2.1 +5727 4.2.3:4.3.2:4.3.2:4.1.1:2.7.1 +5728 3.1.1:3.5.1 +5729 6.3.2:4.1.1:2.5.1:5.4.2 +5730 1.7.99:2.6.1:2.9.1:1.2.1:5.1.3:6.3.4:2.3.1:1.4.3:1.1.1 +5731 6.3.4:3.6.1:2.5.1:2.3.3:2.7.6 +5732 2.4.2:4.1.1:5.3.1:1.2.1:6.3.5 +5733 1.7.99:4.1.3:2.1.2:1.1.1:1.3.3 +5734 1.1.1:1.1.1:2.4.1 +5735 3.6.1:4.3.2 +5736 2.3.1:4.1.2:3.5.3:4.2.3:2.7.7:1.2.1 +5737 1.3.1:2.7.7:1.4.1:1.4.1:2.5.1:3.5.1:1.2.1 +5738 3.2.1:4.1.1:2.1.3:4.1.2:2.3.1:2.7.2:2.3.1 +5739 6.3.3:3.5.3:2.7.6 +5740 2.3.3:2.7.1:2.6.1:1.4.3:2.1.3:2.7.2:4.3.2:1.2.1:2.7.7:2.1.2:1.4.4:2.7.2 +5741 2.5.1:4.1.1:4.4.1:3.1.1:2.7.1:3.5.1:2.3.1:2.4.2:2.1.2 +5742 2.2.1:2.2.1:2.3.1:2.7.1:4.1.3:3.5.1:2.7.2:4.1.1 +5743 2.2.1:1.1.1:4.1.1:2.1.4 +5744 2.7.4:4.1.2:1.2.1 +5745 2.3.1:2.7.7:1.1.1:3.1.3:5.3.1 +5746 1.17.4:1.4.1:1.5.1 +5747 1.18.6:2.1.2:2.7.4:5.3.1:4.-.-:2.1.1:4.3.1 +5748 4.3.2:2.7.1:2.4.2 +5749 3.2.1:4.1.2:2.6.1:3.1.1:5.3.1:2.6.1:1.7.2:6.3.1:2.8.1 +5750 2.8.3:2.3.1:3.5.5 +5751 5.3.1:1.2.1:2.7.6:1.2.1:3.5.99:2.3.1:6.3.5:6.3.2 +5752 6.3.4:1.1.1:2.7.2:1.2.1 +5753 2.4.2:3.2.2:6.2.1:2.8.1:2.8.3:6.3.5:1.2.1:4.1.1 +5754 1.2.1:3.2.1:2.7.2:2.1.1:4.2.1:3.6.1:4.3.1:2.7.7 +5755 3.5.1:2.7.1:6.3.4:2.5.1:1.4.1:5.3.3:4.3.2 +5756 1.5.99:4.2.1:6.3.2:3.5.1:4.2.3:2.6.1:3.5.3 +5757 1.1.1:3.4.13 +5758 4.1.3:5.1.2:5.4.99:5.1.1:2.4.2:4.3.1:1.2.1:5.1.1:2.4.2 +5759 3.1.1:2.1.3:2.1.4:4.4.1:3.4.13 +5760 6.4.1:1.11.1:6.3.5:6.3.2:2.5.1:3.2.2:1.4.99:2.3.1 +5761 6.3.4:3.2.1:6.3.5 +5762 6.3.4:2.7.7:3.5.1:6.3.4 +5763 2.1.4:6.3.1:1.1.1:2.4.2 +5764 4.1.1:6.3.1:1.1.1:2.3.1:2.7.1:4.2.1 +5765 6.3.4:4.4.1:1.4.1:2.1.3 +5766 6.3.4:1.4.1:1.1.5:1.1.1:6.3.4 +5767 6.3.2:2.3.3:2.3.1:3.1.3 +5768 1.2.1:6.2.1:2.8.1:2.7.2:3.5.1 +5769 1.8.1:4.1.1:3.1.1 +5770 2.4.1:5.3.1:2.7.7 +5771 1.1.1:1.1.1:5.3.1:5.1.3:3.5.1:2.1.2:3.1.3:2.5.1 +5772 4.1.1:2.4.2:5.4.2:5.1.3:2.7.1:4.1.99 +5773 2.7.9:2.3.1 +5774 4.3.1:2.1.3:2.3.1:4.3.2:5.3.1:2.7.1:2.1.3:1.17.4:1.2.1 +5775 2.3.1:2.7.7:3.1.3:6.3.1:3.6.1 +5776 1.14.16:4.2.-:2.3.1:3.6.1:2.3.1:2.7.2:3.1.4:2.3.1 +5777 3.1.3:4.3.1:4.3.1:5.1.3:3.13.1:4.3.2:5.3.1 +5778 2.6.1:1.2.5:2.6.1 +5779 2.7.1:2.3.1:1.5.1:2.1.2 +5780 1.2.1:2.5.1:6.2.1:2.5.1 +5781 6.3.4:4.3.2:2.3.1:6.2.1 +5782 1.5.1:2.4.2:3.6.1:5.3.1:3.1.3 +5783 5.4.99:1.5.1:6.3.5:2.4.2:2.7.4 +5784 2.6.1:2.6.1:2.6.1:1.5.1 +5785 2.8.1:2.4.2:2.1.1:3.4.11:3.5.1:3.5.4:4.1.1 +5786 2.3.1:2.1.3:4.2.3:3.5.3:3.6.1:2.3.1:3.5.3 +5787 3.5.1:1.2.1 +5788 2.7.1:1.5.1:3.8.1 +5789 4.1.2:4.2.3:3.6.1:6.3.4:2.7.4:3.5.3:2.7.1 +5790 2.1.1:2.7.7:4.2.1:1.1.1 +5791 2.3.1:4.1.1:2.7.4:3.5.1 +5792 1.5.1:1.1.1:2.3.1:4.4.1 +5793 3.5.1:2.5.1 +5794 3.5.1:2.1.2 +5795 4.2.1:4.3.1:3.5.1:4.1.1 +5796 4.2.1:2.4.1:3.5.3:1.5.1:4.4.1:2.7.1:2.7.7 +5797 6.4.1:2.1.1 +5798 3.4.13:4.4.1:3.5.2:4.1.1:4.2.1 +5799 3.1.4:4.4.1:3.1.4:6.2.1:4.1.2:1.1.1 +5800 3.1.2:2.1.3:5.3.1:4.1.1:3.5.3:4.3.1:2.3.1 +5801 2.7.1:2.6.1:2.4.2:4.1.1:6.3.2:3.5.1:1.4.1:6.3.5:5.1.1 +5802 2.4.2:5.3.1:1.2.1:2.7.2:2.7.1 +5803 6.2.1:1.4.3:1.1.1 +5804 2.3.1:6.3.4:5.4.2:2.3.1:1.1.1:4.2.1:6.3.2:3.5.2:4.3.2:2.5.1:6.3.2:3.6.1 +5805 5.4.99:2.7.4:5.4.99:2.1.2:4.3.2:3.2.1 +5806 3.5.3:6.4.1:3.5.1 +5807 1.4.1:5.5.1:2.3.1:2.3.1:2.7.2:1.1.1 +5808 1.8.1:2.1.1:5.4.2:2.1.2:2.7.1:2.4.2:2.5.1:4.2.3:2.3.1:1.1.1:1.8.1:1.2.1 +5809 2.4.2:2.7.2:4.2.3:4.1.3:1.5.1:1.5.3 +5810 2.3.1:1.3.3:3.5.1 +5811 2.4.2:3.1.2:2.3.1:4.4.1 +5812 3.2.1:6.1.1:2.1.2 +5813 1.13.11:1.1.1:1.2.4:6.3.4 +5814 2.6.1:4.3.2:3.3.1:6.3.4:4.2.1:2.6.1 +5815 2.3.1:2.1.2:3.1.3:1.5.1 +5816 1.5.1:4.1.1:1.1.5:6.3.4 +5817 2.3.1:2.7.7:9.9.9:2.5.1 +5818 3.5.1:4.3.1:3.4.11:2.6.1:2.7.2 +5819 2.3.1:5.3.1:4.1.2 +5820 2.1.1:2.1.1:3.1.3:2.7.1:4.4.1:1.4.1:1.2.4 +5821 6.3.1:1.8.1:6.3.5 +5822 2.7.1:2.4.2:4.3.1:2.7.1:2.4.2:6.3.4:4.1.2:6.3.5 +5823 2.7.1:6.3.3:4.1.3:2.7.7:2.3.1:2.7.4:3.6.1 +5824 4.2.1:1.7.2:1.3.99:2.3.1:3.5.4:3.1.2:5.4.2:2.3.1:2.7.7 +5825 4.2.1:3.1.1:2.3.3:1.1.1:3.6.1:2.1.2 +5826 3.5.1:6.3.2:2.3.1 +5827 3.2.1:3.2.1:2.4.2:9.9.9:2.7.2:2.3.1:1.3.3:2.1.1:1.1.1:3.5.3:2.7.7 +5828 1.17.1:3.5.3:2.1.1:1.3.99:2.3.1:6.2.1 +5829 2.7.2:2.1.1 +5830 1.1.1:3.1.3:4.4.1 +5831 4.1.1:4.3.2:5.4.99:1.2.1:2.1.1:3.6.1:6.3.5:3.2.1:3.1.3 +5832 1.1.1:2.6.1:6.3.4:2.5.1 +5833 2.5.1:1.2.1:4.4.1:1.8.1 +5834 2.7.4:4.2.1:5.4.99 +5835 6.4.1:2.5.1:2.4.2:1.1.2:1.4.1 +5836 6.3.4:2.1.1:5.3.1:1.4.4 +5837 2.7.2:1.1.1:2.7.7:2.3.1 +5838 1.5.1:1.5.1:5.3.1:2.3.1:6.2.1:4.2.1:3.5.3:4.1.3:6.3.2 +5839 2.6.1:6.1.1:3.5.4:4.2.1 +5840 6.3.2:1.2.4:2.5.1:5.4.2 +5841 1.2.1:2.7.2:1.4.1:2.1.3:1.1.1:2.7.2:2.7.1:1.4.3 +5842 2.1.2:4.1.2:4.2.1:1.2.4:3.6.1 +5843 6.3.4:2.3.1:2.3.1:2.7.7:2.5.1 +5844 3.5.1:5.3.1:2.1.1:2.4.2:2.4.2:2.1.3 +5845 2.1.3:4.1.1:1.1.1:4.3.1:4.3.2:3.5.1:2.4.1:4.1.1:1.2.1:2.7.4:2.7.2:1.2.1:5.1.3 +5846 3.6.1:2.7.2:2.4.2:2.6.1:5.4.2 +5847 2.3.3:2.6.1:2.7.4:5.4.99:6.3.4:2.7.7:4.1.1 +5848 2.5.1:5.4.99 +5849 2.5.1:2.1.1:2.6.1:4.2.1 +5850 1.1.1:4.2.1:2.3.1:2.7.4 +5851 1.5.1:5.1.1:6.3.4 +5852 1.5.1:1.1.1:5.3.1:2.7.1:2.5.1:4.1.2:1.5.1:1.3.1:4.1.1 +5853 1.13.11:2.3.1:4.1.3:6.3.2:5.4.2 +5854 1.4.4:2.1.1:2.4.2:1.2.1 +5855 3.5.1:4.3.1:1.1.1 +5856 2.7.1:2.3.1:3.5.3:2.7.7:1.5.1 +5857 4.3.1:1.1.1:1.4.1:1.1.1:2.3.1 +5858 3.5.3:5.4.99:2.6.1:1.2.1:2.7.7:6.3.4:3.3.1:3.5.1:4.2.3:4.3.1:2.6.1 +5859 1.1.1:2.7.1:2.7.6:2.7.8:1.1.1:3.1.3:1.2.1:5.4.2 +5860 6.1.1:6.3.3:4.1.1:4.2.1:3.5.1:1.5.99:1.1.1:5.1.3:5.4.2:3.5.99:2.7.1:1.3.99:2.5.1:4.1.2:3.6.1 +5861 1.5.1:6.3.4:1.5.1 +5862 4.1.1:2.7.1:2.7.4:1.2.1 +5863 4.4.1:3.5.1:2.7.1:3.5.1 +5864 4.1.1:4.3.1:2.1.2:1.1.1 +5865 2.7.1:4.3.2:4.2.3 +5866 3.1.2:2.6.1:2.4.1:2.7.1:1.2.1 +5867 3.1.3:4.2.1:2.3.1 +5868 2.4.1:4.1.1:4.1.3:1.2.1:4.3.1 +5869 2.7.1:3.1.3:1.13.12:4.3.2:3.5.4:4.1.1 +5870 2.3.1:4.3.1:4.2.1:1.7.99 +5871 3.1.2:4.3.1:3.5.2:2.4.2:2.7.2:2.7.6 +5872 2.7.2:2.1.3:2.7.7:2.1.1:1.2.1:1.4.3 +5873 3.5.3:1.2.1:3.5.3:1.2.1:1.2.1 +5874 3.1.3:6.3.2:4.3.2:4.2.1:3.1.1:3.6.1:2.5.1 +5875 4.3.2:2.7.2:2.6.1:3.5.3:2.1.1:2.7.7 +5876 1.5.1:3.1.3:3.1.3:2.3.1 +5877 4.2.1:2.3.1:2.7.1:1.2.1:5.4.99 +5878 1.5.1:2.3.1:2.4.2:4.1.1:3.5.1:2.3.1:6.3.5:2.3.1:6.3.1 +5879 1.4.1:3.1.4:2.7.1:4.2.1:2.7.6:2.4.2:2.7.2 +5880 3.1.1:4.1.3:2.3.1 +5881 1.1.5:3.5.1 +5882 2.6.1:4.1.1:2.1.2:1.4.1 +5883 2.7.1:3.6.1:4.2.1:2.7.1:2.1.1:6.1.1 +5884 2.6.1:3.5.99:1.1.1:1.4.1:4.1.1 +5885 1.1.1:3.5.1:2.7.6:1.2.1:2.6.1:4.2.1 +5886 1.1.1:5.1.1 +5887 1.5.1:3.1.3:1.1.1:4.1.2:1.3.3:2.5.1 +5888 1.3.1:2.6.1:2.7.1:6.3.4:2.5.1:3.1.3 +5889 2.7.7:4.1.3:6.3.4:2.7.1:6.3.5:6.3.4:2.3.1:2.7.1 +5890 2.1.1:2.-.- +5891 2.7.1:2.7.1:1.5.99:1.17.4:2.3.1:2.7.2:1.13.11:5.3.1 +5892 2.7.4:6.3.4:2.4.1:2.3.1:2.7.8:2.3.1:1.1.1 +5893 1.1.1:4.4.1:1.1.1:2.5.1 +5894 1.1.1:4.3.1 +5895 1.14.12:2.5.1:4.1.1:2.3.1 +5896 6.3.2:4.3.1:2.1.2:1.3.99:2.2.1 +5897 4.2.1:3.4.11:5.1.2:3.5.1 +5898 3.5.1:5.4.2:2.5.1:2.7.1:2.3.1:1.14.16:6.3.4 +5899 1.1.1:6.3.4:2.7.2:2.5.1:1.17.4:3.5.1 +5900 2.7.6:4.3.1:6.3.3:2.3.1:4.3.1 +5901 3.6.1:4.2.1:2.7.1:2.6.1:2.2.1:4.1.2:3.1.4:2.4.1:3.6.1:6.3.4 +5902 1.2.4:6.3.3:3.5.1:2.7.2 +5903 4.3.1:4.3.1:4.3.2 +5904 5.4.99:2.7.8:5.4.2:2.3.1 +5905 1.1.1:2.2.1:4.2.1:2.3.1:2.7.1:3.3.1:1.2.1 +5906 2.1.1:1.3.3:4.1.2:3.1.3 +5907 3.6.1:1.5.1:1.2.4:3.1.2:2.1.3:3.2.1:6.3.4:5.3.1 +5908 2.1.1:2.7.4:1.5.99 +5909 2.3.1:1.2.1:5.4.2:3.1.2:1.5.1:2.7.7 +5910 2.6.1:3.6.1:2.5.1:1.2.1:1.2.1:1.2.1:1.2.1 +5911 3.2.1:4.1.1:4.1.1:1.1.1:2.5.1:4.4.1:5.-.- +5912 6.3.1:1.17.4:2.4.2:4.4.1:1.2.1:2.1.1 +5913 2.1.2:2.1.3 +5914 3.1.5:5.4.2:1.2.1:3.5.3:4.3.1:3.5.3:2.4.2:2.3.1:2.7.2:1.18.-:4.1.3:1.5.3 +5915 4.1.1:2.6.1:3.1.3:3.5.3 +5916 1.4.1:4.1.1:2.6.1:3.5.1:2.7.7 +5917 4.1.1:2.4.2 +5918 4.1.1:2.5.1 +5919 1.1.1:1.1.1:2.3.1 +5920 2.3.3:2.3.3:3.5.1:2.7.7:4.3.2:2.1.2:6.3.4 +5921 4.1.1:2.6.1:2.6.1:3.5.1:2.7.8 +5922 2.1.1:5.4.2:5.4.2:4.2.1:4.2.3:1.2.1:1.2.1:2.7.1 +5923 6.4.1:4.2.-:1.5.1:2.1.1:3.1.3:6.3.2:3.5.1:6.3.4 +5924 6.3.3:2.5.1:3.1.3:2.7.9:5.4.99:2.6.1 +5925 1.3.99:4.1.2:1.4.1:1.2.1:1.4.3:5.1.1:1.5.1:2.1.2:2.6.1:6.3.5:2.3.1 +5926 2.4.2:4.2.1:5.4.2:2.-.-:5.3.1:2.1.2:6.3.5 +5927 2.3.1:4.1.1:2.4.2:2.6.1 +5928 4.1.1:2.3.3:4.1.1:2.5.1 +5929 2.1.2:2.7.1:3.5.1:2.3.1:5.4.2:3.1.3 +5930 2.7.1:4.3.2:2.5.1:1.5.1:2.7.2 +5931 5.3.1:2.3.1:1.97.1:2.3.1:4.1.1:2.6.1:1.13.11 +5932 2.7.1:2.1.2:1.2.1:2.1.1:5.1.3 +5933 2.7.7:1.5.1:1.1.1:3.1.1 +5934 6.3.4:4.1.3:2.7.1:3.5.1:1.5.1:4.2.1:2.5.1 +5935 2.1.2:3.4.13:2.4.2:3.1.3:6.3.5 +5936 6.3.2:2.7.2:5.1.2:3.2.1 +5937 3.6.1:4.3.1:9.9.9 +5938 2.7.4:1.1.3 +5939 5.3.1:3.1.3:2.7.2:2.6.1:4.1.2:1.7.3:2.5.1:2.3.1:2.3.1:3.5.3 +5940 3.1.5:2.7.8:5.4.2:1.2.1 +5941 4.1.1:1.7.2:6.3.5:2.6.1:2.5.1:2.7.2:4.1.1:4.1.2:4.2.1 +5942 3.5.2:4.1.1:4.4.1:1.7.2:2.7.4:1.5.1:2.7.1 +5943 2.1.1:4.2.1:1.4.1:3.5.3:4.1.1:2.7.7:1.1.1:3.1.1:2.6.1:1.7.99:4.1.1:1.2.1 +5944 1.17.4:4.3.1:1.2.1 +5945 2.7.1:2.3.1:2.4.2:2.7.4:1.14.16:6.3.4:9.9.9:2.6.1:1.5.99 +5946 3.5.1:1.1.1:1.1.1:4.3.1 +5947 3.5.1:3.5.1:4.2.3:1.1.1 +5948 5.1.3:2.7.7:2.4.2 +5949 6.3.5:2.3.1:3.5.1:4.3.2:3.5.2:3.5.2 +5950 2.7.7:1.1.1:1.2.1:5.3.1:6.3.5 +5951 3.2.1:3.1.4:2.3.1:1.2.1:6.4.1:2.1.2:5.3.1:3.5.1 +5952 1.17.4:4.1.3:2.3.1 +5953 2.3.3:4.3.2:1.1.1 +5954 1.4.1:1.3.99:2.6.1:1.1.1 +5955 3.2.1:1.1.1:2.3.1:6.3.4:9.9.9:2.7.1:3.6.1:6.3.5:2.7.2:2.6.1:2.5.1:1.1.1 +5956 6.3.4:3.1.1:1.2.4:1.5.1:2.3.1:1.1.1:6.3.2 +5957 4.4.1:2.7.6:2.5.1:2.5.1:4.4.1:6.3.4:6.3.5 +5958 5.4.2:4.1.1:6.3.3 +5959 1.1.1:4.2.-:4.3.2:2.1.3 +5960 1.1.1:2.6.1 +5961 2.6.1:1.2.1:3.5.2:4.1.3 +5962 3.5.2:2.1.2:4.1.1:5.3.1 +5963 1.2.4:1.3.99:2.6.1:2.3.1 +5964 3.4.13:3.5.1 +5965 4.2.1:6.4.1:4.1.3:2.5.1:1.2.1:2.7.2:1.1.1:2.6.1:2.3.1:3.5.1 +5966 2.7.8:5.3.1:4.3.2:1.14.12:4.1.2 +5967 3.1.3:1.8.1:1.1.1:4.1.1:4.2.1 +5968 4.3.1:1.14.13:2.5.1:3.2.2 +5969 6.3.2:2.7.1:1.2.4:1.2.1:6.2.1:3.5.1:3.5.1 +5970 1.8.1:1.1.1:2.7.1 +5971 6.3.2:6.3.4:2.7.1:6.3.4:4.2.3 +5972 1.1.5:2.5.1:4.2.1 +5973 1.2.4:4.2.3:2.3.1:1.5.1:6.3.4:4.1.1 +5974 3.2.1:1.1.1:6.3.4:6.3.3 +5975 2.5.1:4.1.2:4.4.1:6.3.4:4.1.2:1.1.1:2.1.2:2.7.1:6.3.2 +5976 6.3.5:5.4.99:6.3.5:6.3.4:4.1.1:2.7.1:2.5.1 +5977 4.2.3:6.3.5:2.5.1:3.6.1:2.4.1:1.2.1:1.5.1:4.1.2:2.1.2 +5978 4.4.1:3.5.1:3.5.1:2.5.1:6.3.2:1.1.1 +5979 1.1.1:3.5.3:3.5.1:6.3.5:6.3.2:2.6.1:1.1.1:1.1.1:2.4.1:2.7.1 +5980 2.7.7:2.7.4:4.1.1:2.5.1:3.1.3 +5981 4.1.1:4.3.1:4.4.1:4.1.3:2.7.1:1.2.1:2.7.1 +5982 2.7.1:4.1.1 +5983 1.1.1:4.1.1:2.1.1:1.1.5:2.7.4:3.1.2 +5984 2.3.1:1.8.1:2.6.1:3.6.1:6.3.3:4.1.3:4.1.1:2.1.1:3.4.11:5.1.3:4.2.1:3.6.1:2.5.1 +5985 3.5.1:1.1.1:2.1.1:3.5.1 +5986 4.3.2:2.1.2:2.5.1:6.3.4:5.4.2:1.4.1 +5987 3.5.3:6.3.4:1.1.1:6.3.4:2.6.1:3.1.3 +5988 1.5.1:2.7.1:6.3.4:4.1.1:2.1.2:5.4.2:3.5.1 +5989 3.4.11:2.5.1:1.2.7:1.1.1 +5990 1.2.5:4.3.2:5.3.1:1.1.1:2.7.6:2.3.1:4.1.3:2.4.1 +5991 2.7.2:2.4.2:6.3.4:2.4.1:2.7.2:2.6.1 +5992 2.3.1:3.2.1:2.1.2:3.5.2:2.8.3:2.7.2:2.5.1:2.7.1 +5993 1.17.4:2.3.1:2.7.2:3.5.1:6.3.3:6.3.4 +5994 2.4.2:5.3.1:2.7.8 +5995 4.3.1:1.3.99:2.5.1:1.2.1:4.1.1:5.4.99:4.1.1 +5996 2.4.2:4.1.2:2.2.1:3.5.2:3.5.1:2.5.1:5.3.1:2.3.1:2.6.1 +5997 3.4.13:2.6.1:3.5.3:2.4.2:2.7.1:3.5.4:3.2.2:6.6.1:2.3.1:1.17.4:4.1.1:2.3.1 +5998 2.3.1:4.2.1:4.3.1:5.3.1:1.2.1:1.5.1:1.14.11:3.1.2:2.7.4:1.1.1 +5999 2.8.1:1.1.1 +6000 6.3.4:3.1.3:2.7.1:4.1.1:6.3.4:6.3.4:1.7.99 +6001 3.5.1:1.1.1:2.3.1 +6002 1.2.4:5.4.3:2.1.1 +6003 1.1.1:2.6.1:5.4.99:1.1.1 +6004 3.2.1:2.1.3:2.6.1:5.4.2:4.2.1:2.1.3:1.5.1:2.7.1:2.4.2:6.3.4:1.2.1:3.7.1 +6005 2.3.1:5.4.2:4.3.1:4.3.1:2.5.1 +6006 4.2.1:2.5.1:6.3.4:1.1.1:1.5.1 +6007 3.5.99:4.2.1:2.1.2:2.7.1:1.2.1 +6008 6.3.4:2.1.2:5.3.1:3.5.1:1.2.1:3.2.1:4.3.1:2.3.1 +6009 2.4.2:2.7.1 +6010 1.1.1:1.1.5:2.7.1:2.1.1 +6011 2.3.1:4.4.1:2.6.1:2.7.7:3.5.4:2.1.1:2.3.3:2.3.1:2.1.1:2.1.3 +6012 4.3.2:2.7.2:6.3.3:2.3.1:1.1.1:2.1.2:1.1.1 +6013 1.1.1:4.3.1:1.5.1:3.6.1:4.3.2:2.3.1:2.1.2:6.3.5:1.1.1 +6014 2.2.1:4.2.1:1.1.1:2.7.7:6.3.5 +6015 3.4.11:2.4.2:4.1.1:1.1.1:3.6.1 +6016 2.3.1:1.2.1:5.4.2 +6017 1.1.2:2.7.7:2.8.1:2.4.2:4.1.1:2.3.1:2.7.7:1.2.1 +6018 3.1.4:2.7.2:6.3.4:1.2.1:2.7.8:2.7.1:3.5.1 +6019 3.5.1:2.8.3:3.1.3:6.3.5:2.1.1 +6020 1.2.4:6.3.4:2.7.1:5.1.3:6.3.5:4.2.3:6.3.4:2.2.1:5.4.2:4.2.2:2.7.1 +6021 2.7.4:1.2.4:2.1.3 +6022 6.3.5:6.3.2:6.3.1:2.3.3:5.4.2:1.2.4 +6023 2.3.1:1.1.1:3.5.1:4.3.2:1.5.1:2.6.1:2.3.1 +6024 2.7.1:5.4.2:2.1.3:3.1.3:2.6.1:5.3.1:4.2.1 +6025 3.2.1:2.6.1:2.3.1:6.3.3:2.3.1:2.7.4:1.1.1:4.2.1 +6026 2.1.2:4.3.1:4.2.1:2.6.1:2.3.3:1.1.1:3.6.1 +6027 2.7.7:2.5.1:2.1.2:4.1.1:1.1.1:4.1.2:2.3.1:2.7.2:1.4.1:6.3.4 +6028 3.7.1:2.7.4:1.17.1 +6029 1.5.1:2.5.1:2.6.1:1.1.1:5.4.2:2.7.4 +6030 3.1.7:2.7.4:1.1.1:5.4.2:3.1.5:2.3.1 +6031 3.6.1:2.3.1 +6032 2.5.1:3.5.4:3.1.3:1.2.1:2.6.1:2.6.1 +6033 2.3.1:2.7.2:6.3.3 +6034 1.5.3:3.1.3:1.1.1:4.1.2:3.1.5:4.1.1:3.6.1 +6035 1.3.3:4.3.1:5.3.1:2.3.1:2.7.1 +6036 1.5.1:2.1.1:2.7.1:4.3.1 +6037 2.7.8:1.1.1:5.4.2:2.3.1:4.4.1:4.1.1:4.1.1 +6038 1.1.1:2.3.1:4.2.3 +6039 2.4.2:1.17.4:4.3.1 +6040 3.5.3:2.3.1 +6041 2.1.1:4.1.1:5.4.3 +6042 4.1.2:6.3.4:2.4.2:2.5.1:5.4.99:4.4.1:2.6.1 +6043 2.1.1:3.1.4:2.5.1:2.3.1:6.3.2:4.2.3:2.7.7:5.1.1:5.3.1 +6044 3.1.2:3.2.2:4.1.3 +6045 4.1.2:6.3.2:2.3.1:3.1.3:1.4.1:1.1.1:6.3.5:1.5.1 +6046 2.6.1:1.2.1:1.2.4:2.6.1:3.4.11:2.6.1:1.17.1:3.1.4:2.7.1:1.2.1:4.3.2 +6047 2.4.2:2.7.1:3.6.1:4.1.2:2.7.2:1.3.1 +6048 3.5.3:2.7.8:2.1.3:2.1.3:3.4.11:3.2.1:3.5.1 +6049 2.7.1:6.3.5:4.2.3:2.7.8:2.7.1:1.1.1 +6050 2.7.1:4.1.1:2.7.2:2.5.1:3.6.1:5.3.1 +6051 2.3.1:6.3.1:1.7.99:2.7.2:4.3.2 +6052 1.7.1:6.2.1:4.3.2:3.5.3 +6053 1.2.4:4.3.2:6.3.5 +6054 1.1.5:3.1.1:5.4.99 +6055 2.3.1:3.5.1:3.5.3:4.2.3:4.3.2 +6056 1.2.1:2.3.1:3.1.3:2.4.2:1.1.1:1.8.1:4.1.1 +6057 2.6.1:1.4.1:2.7.2:3.1.3 +6058 1.2.4:5.4.99:3.1.3:4.1.3 +6059 2.1.1:4.3.2:1.1.1:2.3.1:2.4.1:6.2.1:2.1.2:2.6.1 +6060 2.7.2:1.8.1:3.5.1 +6061 1.2.1:1.2.1:2.5.1:2.1.2:4.3.1:2.1.1:4.1.2:4.1.1:5.3.1:1.2.1:2.6.1:3.1.3:1.3.99 +6062 1.7.1:2.3.1:1.2.1:4.1.1:2.3.1:2.3.1:2.7.1:2.5.1:6.4.1 +6063 3.6.1:3.6.1:2.5.1:4.2.1:4.4.1:5.4.1 +6064 1.2.5:2.7.9:1.2.1 +6065 3.6.1:4.2.1:5.4.2:2.5.1 +6066 2.7.7:1.8.1:2.5.1:1.2.1:4.3.1:2.1.2 +6067 5.4.99:4.2.1:6.3.4:6.3.1:2.1.4:4.2.1:2.5.1:2.7.1 +6068 2.7.1:6.3.4:3.6.1:6.3.4:1.1.1:4.1.1:1.1.1:6.2.1 +6069 2.1.1:2.7.1:2.5.1 +6070 2.1.1:4.2.1:2.7.1:1.1.1:4.2.3:2.6.1:4.2.1:2.6.1 +6071 1.1.1:2.3.3:1.5.1:2.3.1 +6072 2.6.1:2.3.1:2.7.2:3.5.3:1.1.1:4.1.3:1.2.1:2.7.8:3.2.1 +6073 2.7.4:1.2.7:2.7.7:2.7.8:2.1.2:2.2.1 +6074 2.6.1:1.1.1:4.1.2:1.2.4:5.4.2:2.3.3:5.3.1:1.2.1:2.6.1:3.5.1:9.9.9 +6075 5.3.1:1.3.1:5.4.2:1.2.1:2.1.2 +6076 1.5.99:1.1.1:2.6.1:2.4.2:2.7.6:3.6.1 +6077 2.6.1:2.7.1:2.7.4:2.7.1:1.3.1:3.5.1:2.4.1:6.3.4:4.1.1:1.1.1:1.4.1 +6078 3.4.13:4.1.3:3.1.3:9.9.9:2.3.3:2.7.1:6.3.4 +6079 1.1.2:4.3.1:4.3.1:1.2.4:2.6.1 +6080 3.2.1:3.5.1:2.1.2:3.5.4:2.3.1 +6081 2.4.2:4.1.1:2.7.2:4.1.1:6.3.4:4.4.1:6.3.3:1.1.1:2.7.7 +6082 3.1.1:1.1.1 +6083 1.2.1:4.1.3:2.7.8 +6084 6.3.4:2.4.2:5.3.1 +6085 2.1.3:4.3.2:1.1.1:2.7.7 +6086 2.7.7:4.2.3 +6087 1.5.1:6.3.4:1.2.1:4.2.1:2.7.1 +6088 1.5.1:2.5.1:5.4.99:1.2.1:4.2.1:2.7.2:2.3.1:2.4.2:2.3.1:2.7.1:3.5.3:3.5.1:1.1.1:2.3.1 +6089 2.3.1:2.3.1:6.3.4:5.3.1:3.1.3:2.7.1 +6090 2.3.1:6.3.4:4.1.2:5.4.99 +6091 2.4.2:2.7.1:4.1.2:1.1.1:5.4.2:2.3.3 +6092 2.8.1:3.2.2:3.5.4:1.1.1:3.13.1:2.7.2 +6093 2.4.2:4.1.1:2.7.1:4.2.1 +6094 4.1.1:2.3.1:2.3.1:2.1.3:1.1.1 +6095 4.1.2:2.4.2:6.4.1:2.1.2:4.3.2 +6096 3.5.3:5.1.3:1.4.1:2.7.4:2.5.1:1.1.1:6.3.5:4.3.1 +6097 6.3.4:1.2.4 +6098 1.14.13:5.1.3:4.1.2:3.1.3 +6099 2.7.1:2.1.2:6.3.4:2.3.1:2.7.1 +6100 1.5.99:3.5.4:4.1.2:4.1.3:2.7.8 +6101 1.1.1:4.1.1:4.2.3:5.3.1:2.3.1:6.3.4 +6102 3.5.1:2.1.1:4.2.3:3.5.4:2.7.7:2.5.1:3.5.3:4.1.2 +6103 6.3.4:3.1.1:2.7.2:3.5.1 +6104 4.1.3:1.3.1:1.2.4:3.2.1:2.3.1:5.4.99:6.3.5 +6105 6.3.5:2.7.1:6.3.5:2.3.1:2.5.1:2.6.1:2.1.2 +6106 4.3.1:4.1.1:5.1.3:5.4.2:1.1.5:4.1.2:1.1.1 +6107 2.7.4:2.3.1:4.1.1:4.1.3:1.2.1:6.3.1 +6108 2.7.4:2.5.1:6.3.4:1.14.15 +6109 3.5.1:3.1.3:4.2.3 +6110 6.2.1:5.1.3:5.4.2:1.1.3 +6111 2.7.8:3.4.13:1.4.1:2.7.1:2.7.6 +6112 2.4.2:3.5.2:4.2.3:2.5.1:2.1.2 +6113 3.5.3:2.6.1:2.7.2 +6114 3.5.3:5.4.2:1.3.1:2.7.7:6.2.1:2.4.2:1.2.1:5.1.3 +6115 6.3.4:3.4.13:5.4.2:5.4.99:6.3.3 +6116 3.6.1:1.5.1:2.1.2:1.2.4:6.3.4:1.2.4:1.2.1 +6117 2.7.2:6.3.2:4.6.1:2.3.1:1.17.4 +6118 2.3.1:6.2.1 +6119 3.5.1:2.6.1:6.3.4:2.5.1 +6120 2.5.1:2.7.1:4.4.1 +6121 3.2.1:6.3.4:1.5.1:2.5.1:1.2.1:4.1.1 +6122 2.4.2:1.14.12:3.5.1:3.1.3:1.13.12:2.3.1:4.2.1:1.3.1:3.1.3:1.1.1:5.3.1 +6123 4.1.1:2.7.1:4.2.1:4.1.1:2.7.1:5.3.1:6.3.5:3.4.11 +6124 1.1.1:2.3.1:4.1.2:6.3.2:2.7.8:1.2.1:1.4.1:6.3.2 +6125 2.6.1:4.1.2:6.3.3:6.3.5:5.3.1:1.3.1:6.3.2:1.4.1:4.4.1:3.6.1:5.1.2:6.3.3:2.1.1 +6126 5.3.1:6.4.1 +6127 1.5.1:2.2.1:3.5.1:2.1.2:2.6.1:2.6.1:1.1.1:1.1.1:4.1.1 +6128 3.1.4:3.5.3:4.2.3:3.1.3 +6129 2.7.2:1.2.1:2.6.1:3.2.1:6.3.2:3.5.2:4.1.1:6.3.4:1.1.1:4.2.3:2.7.1:1.5.1:2.8.3 +6130 4.1.2:2.1.1:2.7.1 +6131 2.6.1:5.3.1:2.4.2:2.3.1:3.5.1 +6132 3.6.1:4.2.3:2.7.2:4.3.2 +6133 4.3.2:4.3.2:1.5.1 +6134 2.7.2:1.2.4:4.1.3:3.5.1:3.5.2:2.3.1:3.6.1:4.2.3:6.3.5:4.3.1:4.2.1 +6135 4.1.1:2.7.7:4.1.2:6.3.2:3.2.1:1.2.1 +6136 2.4.2:2.1.2:3.5.3:2.5.1 +6137 1.4.1:5.1.3:2.3.1:1.4.1:3.5.1:3.1.3:1.1.1:1.2.4 +6138 2.4.2:4.3.1:2.7.1:1.5.1 +6139 6.3.5:1.1.1:1.5.99:1.1.1:2.4.2:4.3.2:6.3.5:4.1.1 +6140 3.2.2:4.3.1:3.5.1:4.1.2:2.3.1:4.1.1:2.3.1:2.7.1:4.1.3:2.7.2 +6141 6.3.4:2.6.1:4.1.2:1.17.4:1.4.1:4.4.1:2.3.3:6.3.1:4.1.2:6.4.1:1.1.1 +6142 1.1.1:2.7.2:2.3.3:3.1.5 +6143 4.2.1:2.7.1:2.1.2:3.5.99:1.3.1 +6144 2.5.1:1.1.2:4.4.1:2.7.1:1.4.1:2.5.1:2.1.2 +6145 3.5.2:3.5.1:3.8.1:2.5.1:3.5.1:4.2.1 +6146 1.5.3:2.3.1:5.1.3 +6147 6.3.3:6.3.4:3.5.3 +6148 2.3.1:1.2.1:6.3.4 +6149 2.7.4:2.3.1:3.5.3:3.5.4:4.1.1:4.1.3:1.4.3:2.4.2:2.3.1 +6150 1.2.1:3.5.3:2.6.1:6.4.1:6.3.5:4.2.1 +6151 3.1.3:2.7.1:1.5.1:1.1.1:1.5.1:1.5.1 +6152 4.3.2:1.1.1:1.2.1 +6153 2.3.1:2.5.1:2.4.1:2.7.6:6.3.3:2.3.1:1.7.2:2.4.1 +6154 4.3.1:2.6.1:4.2.1:2.4.2 +6155 3.5.1:3.1.3:2.6.1:6.3.4 +6156 4.1.2:2.5.1:3.1.4:2.7.2 +6157 2.2.1:2.5.1:4.1.2:2.3.1:2.6.1:2.6.1:1.17.4 +6158 2.7.1:6.3.2:4.1.2:2.7.1:2.7.1:4.1.1:6.3.4:3.1.7:2.7.2:1.2.1:1.1.1 +6159 3.1.3:2.7.1:2.6.1:6.3.4:4.2.3:5.3.1:4.1.3:2.6.1 +6160 2.9.1:2.7.1:2.1.1 +6161 1.2.1:2.3.1:5.4.1:5.4.99 +6162 5.3.1:1.2.4:3.2.1:1.4.4:1.1.1 +6163 2.1.2:3.5.1:2.7.1:1.3.3 +6164 2.6.1:3.5.1:2.6.1:2.3.3:1.1.1 +6165 6.3.5:3.5.1:2.3.1:5.4.2 +6166 1.2.1:5.1.3:4.1.1 +6167 1.8.1:1.5.1:2.5.1 +6168 2.6.1:2.7.1:3.1.7:1.4.1:5.1.1:2.7.6:5.4.2:1.1.1:2.7.4 +6169 2.7.6:6.3.1:2.1.1:2.6.1 +6170 3.1.2:5.3.1:2.6.1:1.17.4:2.1.1:4.2.1:5.4.99 +6171 3.5.1:1.5.1:2.3.1:2.6.1:4.1.1:3.6.1:1.1.3 +6172 2.4.2:2.3.1:2.5.1:9.9.9:4.3.1:3.4.13:5.4.2:1.1.1 +6173 2.7.2:3.2.1 +6174 2.3.1:2.3.3:2.7.1 +6175 4.1.1:4.2.3:4.4.1:3.1.3:9.9.9:4.1.1:2.7.7 +6176 1.2.1:3.1.3:2.4.2:1.2.1:3.5.4:2.6.1:1.2.1 +6177 2.1.1:2.7.2:2.5.1:1.2.1:1.5.1:2.5.1:1.1.1:2.7.7:2.5.1:1.1.1:2.3.1 +6178 5.3.1:1.1.1:6.3.1 +6179 6.3.4:3.1.4 +6180 2.5.1:4.1.3:2.3.3:1.1.5:2.7.1:2.7.1 +6181 2.7.1:4.3.2:3.2.1:6.3.5 +6182 2.2.1:1.4.1:5.4.2:6.3.4:2.6.1:1.5.1:2.7.2:2.5.1 +6183 1.5.1:1.1.1:4.2.1:3.5.4:2.1.1:4.2.3:3.5.3 +6184 6.3.4:3.11.1:4.1.1:2.5.1:2.6.1:2.7.1 +6185 5.4.99:2.3.3:2.7.4:2.7.1:3.1.3:1.2.1:1.1.1:1.2.4 +6186 2.3.1:2.7.1:2.2.1:5.3.1:3.1.3:2.1.1:1.2.1 +6187 2.7.1:1.4.1:4.1.1:2.7.2 +6188 3.5.3:1.18.-:2.7.2:2.3.1:9.9.9:4.4.1:2.6.1:6.3.1 +6189 3.1.1:2.7.7:6.3.4:4.3.1 +6190 2.2.1:1.8.1:6.3.5:1.7.99:5.4.99:2.4.2:2.7.1 +6191 3.5.3:6.3.1:2.4.1:6.3.4 +6192 2.3.1:6.3.5:2.7.1:2.4.2:1.4.3:6.3.5:3.4.13:4.3.2 +6193 4.3.1:3.1.2 +6194 4.3.1:2.3.1 +6195 2.5.1:1.7.3:2.5.1:6.3.3:2.7.7:2.5.1:6.3.4 +6196 1.2.1:2.1.2:2.4.2:3.1.4:2.5.1 +6197 6.3.4:1.2.4:5.4.2:2.6.1:3.1.3:2.7.2:2.3.1 +6198 2.5.1:1.4.1:4.2.1 +6199 2.4.2:3.5.2:2.4.1:4.2.1 +6200 6.3.4:6.3.2:1.14.13 +6201 5.4.2:1.5.1:6.3.4:3.1.4:2.7.8:4.3.2:1.2.1 +6202 2.7.2:2.3.1:3.6.1:6.3.2:3.5.1 +6203 3.5.4:2.6.1:2.7.1:2.1.2:2.7.1:2.4.1 +6204 1.1.1:2.6.1:4.1.1:1.2.1:3.4.11 +6205 1.11.1:6.3.4:4.2.1 +6206 1.1.1:2.7.1:2.3.1:1.1.1:3.1.3:1.4.1 +6207 1.1.1:2.7.2:3.5.1:2.1.2 +6208 2.5.1:2.7.1:3.1.4:2.4.1:3.5.2:6.3.4:2.7.2 +6209 2.5.1:5.-.-:2.5.1:5.3.1:3.5.1:2.5.1:5.3.1 +6210 3.1.2:2.3.1 +6211 1.4.1:1.1.1:4.3.1 +6212 3.6.1:2.1.4:2.7.4:4.3.1:1.2.1:2.1.2:2.7.2 +6213 2.1.3:1.1.1 +6214 4.3.1:2.6.1:2.3.1:3.5.1:2.7.1 +6215 2.7.1:2.3.3:2.6.1 +6216 3.1.3:1.6.1:2.7.1:4.2.1:4.99.1 +6217 4.3.-:2.6.1:1.1.1:3.5.3 +6218 1.11.1:2.6.1:6.3.4:3.1.1:2.1.1 +6219 2.3.1:5.3.1:2.7.1:1.2.1:6.2.1:6.3.1:3.6.1 +6220 5.4.2:2.3.1:6.3.2:2.7.4:4.1.3:2.7.2:2.6.1:6.3.2 +6221 1.3.99:2.7.1:4.3.2:1.5.1 +6222 2.3.1:6.3.4:6.3.4:2.7.1 +6223 3.2.1:4.1.1 +6224 2.1.1:4.4.1:6.3.4 +6225 2.5.1:3.1.3:3.5.1 +6226 3.5.3:2.1.1:2.6.1:4.3.1:3.1.3:2.7.1:6.3.2:4.1.1:2.3.1 +6227 1.5.1:2.5.1:5.1.2:2.7.4 +6228 2.7.1:4.1.1 +6229 2.6.1:2.7.2:3.5.3 +6230 5.3.1:1.1.1:5.1.3:2.6.1:2.6.1:5.4.99 +6231 4.3.1:3.6.1:1.5.1:6.3.4 +6232 1.2.1:5.3.1:2.7.2:2.5.1:3.5.4:2.7.2:2.7.2:1.1.1 +6233 2.5.1:1.5.1:2.3.1:2.5.1:4.1.1 +6234 1.7.3:1.2.1:4.1.3:6.3.5:1.1.1:2.8.3:2.6.1:2.7.2:3.5.3:2.2.1:3.5.1:2.6.1:1.4.3 +6235 4.2.1:2.7.1:4.1.2 +6236 2.7.2:4.1.1:1.-.-:1.1.1:3.2.2:1.2.1:3.6.1:2.7.4 +6237 2.7.2:3.5.2:4.2.1:2.6.1:5.4.2 +6238 2.2.1:1.14.-:2.3.3:2.6.1 +6239 6.2.1:3.5.99:1.2.4:4.1.3:4.4.1:2.7.4:2.7.4:1.17.1:2.3.1:1.2.1:6.3.2:2.5.1:1.5.1 +6240 4.2.1:5.4.99:4.2.3 +6241 2.7.7:5.1.3:2.5.1:2.7.2 +6242 1.2.1:2.5.1:4.3.2:4.1.3:1.1.1:2.7.1 +6243 4.3.1:2.5.1:1.1.1:3.5.1:2.6.1:1.1.1:3.5.4:4.3.2 +6244 4.2.3:6.3.3:1.1.1 +6245 1.1.1:2.7.2:2.7.6 +6246 1.1.1:5.4.2 +6247 4.1.3:2.4.1:3.5.1:2.7.4:4.4.1 +6248 2.7.1:1.1.1:6.3.4:2.7.1:1.7.99:2.1.2 +6249 6.3.3:6.3.4:2.3.1:2.3.1:2.5.1 +6250 3.6.1:6.3.1:2.7.1:1.1.2:2.7.7:4.1.1 +6251 2.1.2:3.1.1:1.11.1:4.1.3 +6252 6.3.4:2.3.1 +6253 3.5.2:3.2.2:5.4.99:1.1.1:1.2.1:2.6.1 +6254 2.3.1:3.1.3:1.5.1:1.1.1 +6255 5.4.2:4.2.1:1.14.16:2.5.1:2.4.2 +6256 2.3.1:2.7.1:2.3.1 +6257 3.2.2:6.4.1:1.1.3:6.3.4:3.2.1:2.3.1 +6258 5.3.1:1.1.1:4.1.1 +6259 6.3.4:6.3.4:2.7.2:2.7.1 +6260 4.1.2:2.3.1:4.1.1:1.8.1:1.4.1:5.1.3 +6261 2.4.2:4.1.1:6.3.4 +6262 2.5.1:2.3.1:2.7.4:1.1.1:1.13.11:6.3.1:1.5.1:6.3.2:6.3.4 +6263 5.4.2:4.3.1:4.2.-:3.1.4:1.1.1:2.7.1:5.4.2:4.1.1 +6264 2.4.2:6.3.4:4.1.3:2.3.1:2.7.4 +6265 2.3.1:4.2.1:4.2.1:3.1.1:2.3.1:3.1.3 +6266 4.2.1:2.7.1:2.6.1 +6267 4.1.1:6.3.1:1.1.1:2.1.1 +6268 2.6.1:2.3.1:1.5.1 +6269 2.3.1:5.4.3:3.6.1 +6270 4.1.3:4.1.1:2.6.1 +6271 2.5.1:3.5.1 +6272 4.3.2:2.1.4:1.2.4:2.7.6:4.1.1:3.5.1:4.4.1 +6273 6.2.1:6.4.1:4.1.2:2.4.1 +6274 5.4.99:1.2.1:1.8.1:2.4.2:1.14.13:2.1.2:3.1.1:1.2.1:1.2.1:1.2.4:1.2.1:1.1.1:4.2.1:2.5.1 +6275 6.4.1:3.5.3:2.6.1 +6276 4.3.1:2.3.1:5.3.1 +6277 3.1.1:1.14.16:4.1.3:1.2.1:6.3.1 +6278 2.6.1:2.7.1:2.6.1:5.4.2:5.3.1 +6279 2.6.1:2.3.1:1.1.1:2.3.1:1.1.1:2.7.4:4.1.1:4.1.1:2.3.3 +6280 2.7.7:2.7.4:3.5.1:4.3.1:2.4.2:4.2.1:1.3.3:3.5.1 +6281 4.1.1:2.1.3:2.1.1:3.1.3:4.2.3:5.1.2 +6282 1.2.1:5.1.3:2.5.1:6.3.4:1.8.1:4.1.1 +6283 4.2.1:2.1.2:3.4.13:1.3.1 +6284 1.-.-:1.4.4:1.97.1:2.6.1:2.7.2:1.8.99:1.4.1 +6285 4.2.1:2.4.1:1.1.1:2.3.1:2.5.1:3.1.3:4.2.3:4.3.2:3.2.2 +6286 1.1.1:3.5.2:2.7.1:4.4.1:5.3.1 +6287 2.2.1:3.5.3:2.4.2:2.1.1 +6288 2.7.1:6.3.2:5.4.2:4.1.1:2.7.1:2.5.1:3.1.3:2.6.1:6.3.5:4.2.1 +6289 4.1.1:2.5.1:1.2.1 +6290 2.8.1:3.1.3:4.2.3 +6291 3.5.1:2.4.1:5.3.1 +6292 1.1.5:1.1.1:4.1.1:3.6.1:3.5.3 +6293 6.3.4:2.7.1:3.5.1:1.2.1:3.5.3 +6294 1.3.99:6.3.4:1.2.1:1.2.1 +6295 2.3.3:6.3.1:2.6.1:3.6.1 +6296 5.4.2:6.3.1:1.2.1:4.2.1:4.3.2 +6297 3.6.1:6.3.5:3.2.1:1.1.1:1.2.1:4.1.2 +6298 1.3.99:1.2.1:6.3.2:4.2.3:6.3.4:2.7.7:2.7.1:4.99.1:1.5.1 +6299 2.3.1:1.1.1:2.4.2:2.5.1:1.5.1:2.1.2:1.2.1 +6300 3.5.99:4.2.1:6.3.1:5.1.3 +6301 2.3.1:5.3.1:4.2.3:4.2.3 +6302 1.13.11:3.5.1:5.3.1:2.1.1:1.4.4:6.3.2 +6303 3.2.1:3.2.1:9.9.9:3.6.1:4.3.2 +6304 2.3.1:1.8.1:6.3.1:1.-.-:1.4.1:6.3.1:4.3.2 +6305 5.4.2:2.3.1:2.1.2 +6306 2.7.2:2.1.3:1.4.3:2.1.2:2.6.1:2.5.1 +6307 3.5.5:6.3.5:4.2.1:4.1.1 +6308 3.1.4:6.3.4:2.7.6:2.1.2:2.7.7:3.5.1:2.7.1:1.1.1:1.5.99:2.6.1 +6309 3.1.2:2.1.3:2.3.1:6.4.1:1.1.1 +6310 2.7.7:2.4.2:4.3.2:2.6.1:3.5.1:2.1.1:2.7.1 +6311 6.3.5:2.4.1:4.3.1:6.3.5:1.4.1:4.3.2:2.7.2:2.5.1:3.1.3:3.7.1 +6312 3.2.1:2.1.3:2.5.1:4.3.2:1.17.1 +6313 4.4.1:2.6.1:5.3.1 +6314 3.5.1:3.1.3:2.7.1:2.7.1:1.1.1 +6315 2.5.1:4.1.1:2.1.2:2.7.7 +6316 6.3.4:1.1.1 +6317 2.7.2:3.1.4:1.2.1:6.3.4:2.7.1:5.4.99:5.4.99:2.4.2:2.1.2:2.1.2:2.7.8 +6318 6.3.2:4.4.1:1.5.1:2.1.2:1.2.1:2.7.4 +6319 2.7.7:2.7.2:2.5.1 +6320 3.2.2:5.4.2:4.1.1:1.14.- +6321 4.2.1:2.7.2:4.2.1:1.1.3:4.4.1 +6322 1.2.1:3.5.2:5.4.2:1.1.2:3.5.1:4.1.1:5.3.1:3.5.1:2.6.1 +6323 3.2.1:9.9.9:1.1.1:6.3.2:1.2.1:2.7.7:4.3.1:5.3.1 +6324 1.1.5:2.7.1 +6325 1.4.3:2.1.3:2.3.1:6.3.3:1.1.1:3.5.3:4.2.1 +6326 2.6.1:6.3.4:6.3.5:1.5.99:6.3.4:6.3.5 +6327 4.3.2:1.17.4:4.2.-:1.5.1 +6328 4.1.1:6.3.1:2.6.1 +6329 4.1.2:1.8.1:1.1.1:2.1.1:2.1.1:2.3.1:4.2.1:2.7.1:2.3.3:2.1.2 +6330 4.1.2:1.4.1:2.5.1:6.3.4:2.3.1 +6331 2.6.1:4.4.1:2.7.1:2.3.1:2.7.2 +6332 6.4.1:2.3.1:2.7.1:2.4.2 +6333 2.1.2:1.1.1:9.9.9:1.1.1:2.4.2:4.3.2:2.7.1:2.3.1:2.6.1:3.6.1:4.2.1:2.3.1:4.1.1 +6334 1.5.1:1.2.4:2.6.1 +6335 1.2.1:1.5.1:4.1.1:4.3.1:5.1.3:2.4.2:2.3.1:2.5.1:4.2.1:2.1.1:2.2.1 +6336 6.1.1:2.3.1:1.2.1:1.1.1:6.3.3:1.7.1:4.3.2 +6337 4.2.1:1.1.1:4.3.1 +6338 2.5.1:6.3.5:2.6.1 +6339 3.2.1:4.1.1:3.1.2:3.1.4:3.4.11 +6340 5.5.1:2.5.1:4.2.1:2.1.4:2.6.1:2.1.3 +6341 1.5.1:6.3.4:6.3.4:4.1.1:4.2.3:5.4.2:2.7.2:4.3.2:2.7.1:2.5.1 +6342 3.5.3:2.6.1:5.3.1:3.5.3 +6343 1.1.1:6.3.4:2.7.1:2.1.3:2.7.1:3.5.1:1.4.1 +6344 1.3.3:1.5.1:6.3.2:1.4.1:2.1.2:2.3.1:2.7.1:5.4.2 +6345 3.1.3:2.7.1 +6346 2.7.1:2.7.6:1.5.99 +6347 1.5.1:2.3.1:5.3.1:1.2.1:1.14.12:2.6.1 +6348 1.1.1:2.1.2:5.4.2 +6349 1.3.3:4.1.2:2.6.1:4.3.1:6.3.3:2.4.1:3.1.3:6.3.2:4.1.3 +6350 4.3.2:1.1.1:4.2.1 +6351 2.4.1:2.1.2:2.6.1:2.7.7:2.5.1:4.1.1:2.5.1:3.6.1:6.3.5:3.6.1:2.6.1:4.1.1:1.1.1:2.7.1:2.7.1 +6352 2.3.1:4.1.1:4.3.1:2.3.1 +6353 4.1.1:1.1.1:2.7.7:4.1.1:2.7.1:2.5.1:2.3.1 +6354 2.5.1:6.3.4:1.3.3:4.1.1:2.4.2:1.1.2:5.4.2 +6355 6.3.4:2.7.1:2.5.1 +6356 2.7.7:2.4.2:1.1.1:2.7.1:1.3.1:2.5.1:2.6.1:2.5.1:4.2.1 +6357 2.7.7:2.1.1:1.1.1 +6358 5.4.2:6.3.4:2.3.3:2.3.1:1.1.1:6.3.4:1.17.1 +6359 4.2.1:2.6.1:2.3.1:6.3.4:4.1.2 +6360 2.6.1:6.3.1:6.3.5:2.3.1:5.4.2:4.1.1:4.1.1:3.1.2:2.2.1 +6361 1.3.1:2.6.1:2.7.1:4.1.1:4.2.3:2.1.1:1.3.1 +6362 1.1.1:2.7.2:2.7.7 +6363 3.6.1:2.1.1:2.1.2:2.7.1:3.1.3:2.7.7 +6364 2.7.1:6.3.5:1.4.3:6.3.4:4.3.1:3.6.1:4.3.1:2.7.1:3.1.3 +6365 2.7.4:4.2.1 +6366 1.7.2:2.5.1:1.1.1:5.3.1:1.3.3:6.3.5:1.5.99 +6367 1.4.1:1.2.1:3.2.1:2.4.2 +6368 6.3.4:2.7.2:6.3.4 +6369 2.7.7:6.3.4:2.7.6:3.1.7:2.6.1 +6370 4.1.3:4.1.1:2.5.1:4.1.1:2.7.6 +6371 3.5.1:2.2.1:2.1.2:1.1.1 +6372 2.1.2:2.7.1:2.7.8:4.1.2:2.7.1:2.5.1 +6373 1.1.1:4.1.1:2.1.3:4.3.2 +6374 4.4.1:1.7.1:2.4.2 +6375 3.1.2:2.3.1 +6376 1.1.1:6.3.2:2.7.2:2.3.1:1.1.1:2.3.1 +6377 2.3.1:5.4.99:1.2.1:2.7.2:1.2.1 +6378 2.6.1:1.4.3 +6379 2.3.1:1.1.1:5.4.2:2.3.1:2.3.1:6.1.1 +6380 1.4.1:2.6.1:2.5.1:2.7.1:6.3.4 +6381 3.4.13:4.4.1:2.7.4:2.7.6 +6382 1.2.1:4.1.1:3.5.1:3.5.1:2.6.1:2.6.1:2.6.1:3.3.1:9.9.9 +6383 1.1.1:1.1.1:4.1.1:2.7.1:2.4.2:1.1.1 +6384 1.1.2:1.4.1:2.6.1:3.6.1 +6385 2.4.2:6.3.2:4.1.1:6.3.2:3.1.3 +6386 3.1.2:5.3.1:2.6.1:2.7.1:1.5.1:1.1.1:1.2.5:1.2.1 +6387 4.1.1:4.1.1:3.5.3:1.2.1:2.7.2:1.2.1 +6388 3.1.2:1.5.1:1.2.4 +6389 1.5.1:2.6.1:3.5.1:1.2.1:5.4.99:2.9.1 +6390 2.1.3:2.2.1:2.3.1 +6391 2.5.1:4.3.1:4.1.1 +6392 4.2.1:2.1.1:6.3.1:1.4.1:3.4.13 +6393 1.13.12:4.3.1:6.3.2 +6394 6.3.4:2.7.2:6.3.4:2.7.7:2.4.2:1.2.1:2.1.1 +6395 2.7.1:3.2.1:2.6.1:6.3.3 +6396 5.1.1:3.5.3:1.3.1:2.7.4:1.3.3:3.5.4:2.7.1:2.7.7:6.2.1 +6397 2.4.2:1.5.1:2.7.1:4.1.2 +6398 1.1.1:1.5.1:6.3.5:3.5.3:3.5.1:2.7.1 +6399 3.1.3:2.7.6:3.6.1:2.7.1:2.7.6:4.3.1 +6400 3.5.3:2.2.1:4.3.2:2.6.1:2.7.6 +6401 2.7.1:2.3.1:4.1.1:1.4.3:4.1.1:2.7.1 +6402 9.9.9:3.1.4:4.6.1 +6403 2.7.1:1.4.1:2.1.1:1.2.1:3.3.1:2.7.1:6.3.1 +6404 3.5.1:2.7.1:2.1.3 +6405 3.4.11:1.1.1:4.1.1:2.7.1:2.6.1 +6406 1.5.99:3.1.2:4.3.1:4.4.1:2.7.2:2.1.2:2.1.3 +6407 2.1.2:1.1.1:1.7.2:3.5.1:2.7.4:1.2.5:3.1.3:5.4.2:6.3.4 +6408 1.5.1:9.9.9:6.3.1 +6409 6.3.2:2.7.8:2.1.2:3.4.11:3.1.4 +6410 1.2.4:4.4.1:5.4.2:1.1.1 +6411 2.7.1:2.7.2:2.7.1:6.3.4:6.3.2:4.2.3:3.5.1:2.4.2:2.1.2:4.4.1 +6412 1.6.1:5.1.1 +6413 5.1.3:3.5.1:4.2.1:2.7.9:2.3.1:1.2.4 +6414 3.5.1:2.7.2:4.1.2:2.7.1:5.4.2:2.1.1:2.1.4:2.5.1 +6415 2.5.1:6.3.4:1.14.12 +6416 6.3.4:2.1.2:3.5.1 +6417 4.3.2:2.4.2:1.2.1 +6418 3.5.1:2.6.1:2.7.8:5.4.99:6.3.4:4.1.3 +6419 3.1.3:4.2.3:5.4.1:3.5.4:3.1.3:6.3.3:4.1.1:5.3.1 +6420 2.4.2:2.7.1:2.1.2:2.7.1:4.3.1:6.3.3:4.1.3 +6421 3.5.3:1.2.1:3.5.99:6.3.2:4.1.3 +6422 2.8.3:1.2.1:2.1.4:2.7.2:2.3.1 +6423 6.3.5:2.1.4:2.7.1:1.2.1:4.1.1 +6424 2.3.1:4.2.3:2.1.2:3.5.1 +6425 6.3.2:4.1.3:2.1.3:2.1.3:4.1.1 +6426 1.14.12:2.7.2:1.1.1:1.1.1 +6427 2.3.3:1.4.1 +6428 2.1.3:2.3.1:2.7.1:1.5.1:1.1.1 +6429 2.4.2:2.1.3:2.1.3:2.7.7 +6430 2.3.1:2.1.1:2.9.1 +6431 3.6.1:4.3.1 +6432 5.4.2:6.3.4:3.2.2:2.1.2 +6433 2.6.1:3.6.1:2.3.3:4.1.1 +6434 2.3.1:4.3.1:4.4.1:4.2.3 +6435 2.7.7:2.1.3:4.2.1:1.2.1 +6436 4.1.1:2.7.4 +6437 2.5.1:1.4.1:1.1.1:1.1.1 +6438 2.6.1:4.4.1:4.1.1:1.1.1:2.6.1:6.2.1:4.2.1:5.1.3 +6439 1.1.1:4.1.2:4.3.1 +6440 4.1.1:2.7.1:2.3.1:2.8.1:3.1.4 +6441 1.2.1:4.1.1:4.2.3 +6442 6.3.4:2.8.1:1.4.1:3.4.11:4.4.1:1.5.1:3.4.13:4.2.3:5.3.1:3.6.1 +6443 4.1.2:6.3.4:2.3.1 +6444 2.7.6:2.7.1:3.6.1 +6445 4.2.3:4.1.1:1.1.3:1.1.1:1.2.1:2.8.2:1.1.1:2.6.1:2.6.1:2.1.3 +6446 3.1.3:3.5.3:1.2.1:3.6.1:3.5.4 +6447 1.2.4:4.2.-:4.3.1:4.1.1 +6448 4.4.1:4.4.1:2.4.2:6.3.1:1.4.1:2.3.1 +6449 2.7.1:2.1.1:2.5.1 +6450 1.1.1:2.3.1:2.7.2:1.3.1:1.17.4:5.4.2 +6451 4.2.1:2.3.1:2.5.1:4.3.1 +6452 2.5.1:5.1.3:2.7.4:2.7.1:3.5.4:2.6.1 +6453 1.8.1:4.2.3 +6454 2.3.3:5.1.2:6.3.2:2.4.2:1.5.1:2.4.1 +6455 4.2.1:2.7.1:2.6.1:2.6.1 +6456 2.7.1:3.5.99:1.3.99:5.4.2:2.7.2:2.1.1:2.3.1:5.1.3 +6457 6.2.1:5.3.1:3.5.1:2.6.1:3.7.1:3.6.1 +6458 3.1.3:2.1.1:1.1.1:4.2.3:2.5.1 +6459 4.1.2:3.1.3:2.6.1:2.7.2 +6460 1.3.99:2.6.1:2.5.1:3.5.5:1.1.1:3.5.4 +6461 3.6.1:2.7.1:2.7.1:6.2.1:4.1.2:2.3.3:3.5.1:1.4.4:2.7.1:4.3.1:4.2.1 +6462 2.7.2:2.1.3:4.1.1:4.2.1:1.2.1 +6463 2.7.1:2.7.2:1.3.99:2.1.2:4.2.3:3.5.1:1.5.99:5.3.1:5.5.1:1.1.1:2.7.1:4.1.1:2.6.1 +6464 6.3.5:3.5.2 +6465 2.3.3:1.2.4:6.3.4 +6466 2.4.1:5.1.1:6.3.2:2.3.3:6.3.3 +6467 2.5.1:1.1.1:2.7.1:2.7.8:5.3.1:2.6.1:2.1.1:4.4.1:3.5.3:3.1.4:2.7.4 +6468 4.3.1:1.17.1:4.1.1:4.1.2 +6469 2.3.1:2.1.1:3.7.1:4.3.1:3.5.3:2.7.1 +6470 2.6.1:6.3.4 +6471 2.7.4:2.7.2:2.7.1:2.1.3:2.7.1:2.3.1:2.3.1:5.4.2:2.3.1 +6472 4.2.1:3.5.1:1.1.1 +6473 4.2.1:4.1.1:2.1.3:6.3.3:2.7.4:2.1.2 +6474 4.1.1:5.3.1:6.3.4 +6475 2.1.1:4.3.2 +6476 3.1.3:6.3.1:4.2.1:1.3.3 +6477 2.5.1:2.7.1:1.2.7 +6478 4.1.2:6.1.1:2.3.3:2.7.1:2.1.1:1.7.99 +6479 1.8.1:1.1.1 +6480 3.5.1:3.1.1:2.7.1:4.1.1:4.2.1 +6481 1.1.1:1.1.1:2.4.2:4.2.1:2.7.1:2.7.7:2.4.1 +6482 2.7.4:1.1.-:4.2.1:4.3.1:4.1.1:4.1.3:6.3.4 +6483 3.5.1:1.14.13:3.1.4:2.3.1:3.5.1 +6484 2.7.2:4.2.3:2.7.1:2.7.2:1.1.1 +6485 4.1.3:1.2.1:1.1.1:2.1.2 +6486 6.3.4:2.4.2:2.6.1 +6487 2.3.1:2.5.1:2.1.2:2.1.4:2.7.1:1.5.1:5.4.99:1.4.1 +6488 5.3.1:3.5.1:1.1.1:2.6.1:1.5.1:2.3.1:2.7.2 +6489 3.1.3:5.4.2:1.2.1 +6490 2.4.2:2.3.1:2.5.1:4.2.1:2.5.1:4.1.1:3.6.1 +6491 3.6.1:2.5.1 +6492 6.3.2:4.2.3:1.2.5:3.5.1:2.2.1:1.2.4:2.7.7 +6493 3.5.3:2.3.3:2.5.1 +6494 4.1.2:1.2.1:2.1.1:3.4.13:5.1.3 +6495 5.1.1:4.4.1:2.6.1 +6496 4.3.2:1.8.1:5.4.2:2.1.1:2.6.1:4.2.1:2.7.1:2.6.1:6.3.5:6.2.1 +6497 5.1.3:6.3.2:2.6.1:6.3.2:4.4.1:5.4.99:2.7.1:2.7.4:4.1.2:5.3.1:4.2.1:5.3.1 +6498 6.3.5:6.3.3:4.2.-:5.3.1:5.1.3:2.7.4:6.3.2 +6499 6.3.4:2.1.3:4.1.2:2.7.2:2.8.1:3.1.1 +6500 2.1.2:9.9.9 +6501 2.5.1:2.6.1:1.2.1 +6502 1.2.1:1.5.99 +6503 6.3.5:3.1.7 +6504 2.3.1:4.1.1:4.2.1:2.3.1:4.1.1:4.2.1:2.7.1:4.2.3 +6505 3.6.1:4.4.1:3.5.5:3.1.4 +6506 2.6.1:1.2.4:2.7.2 +6507 9.9.9:1.5.1:1.5.1:6.2.1:3.6.1:6.3.3:5.3.1:1.5.1:4.3.1:2.4.1:6.3.4:2.7.2 +6508 2.3.1:2.7.4:2.6.1:3.3.1:2.7.7 +6509 3.3.1:2.4.1:2.1.3:1.7.99:6.3.3:2.4.2:2.7.1:2.6.1 +6510 2.3.1:2.7.4:1.1.1:3.5.3:6.3.4:2.4.1:5.4.99 +6511 6.2.1:1.2.5:6.4.1:1.5.3:1.3.99:3.1.2 +6512 2.1.3:4.1.2:2.7.1:2.2.1:3.5.1 +6513 3.5.4:1.2.1 +6514 1.13.11:4.1.1:1.5.1:1.2.1:2.7.1:1.13.11 +6515 4.1.1:5.4.2:2.4.2:2.5.1:2.7.1 +6516 2.3.1:1.3.1:2.3.1 +6517 5.4.2:1.4.3:6.3.1:6.3.4 +6518 2.6.1:2.3.3:2.3.1:2.4.1 +6519 3.5.4:2.3.1:3.1.2:1.8.1:6.3.5:2.5.1 +6520 2.7.2:2.1.2:6.3.4:4.2.1 +6521 2.6.1:2.6.1:2.3.3:6.3.4:2.3.1 +6522 2.4.2:4.1.1:2.1.2 +6523 2.7.1:2.5.1:1.1.1 +6524 2.7.1:6.3.3:2.1.2 +6525 6.3.4:2.1.2:5.4.2:6.3.3:6.3.4:5.4.2:2.5.1:2.3.3:4.3.2:2.3.1 +6526 4.1.2:4.3.1:3.1.1:1.8.1:1.4.1:4.4.1:3.8.1:5.3.1 +6527 2.6.1:2.7.8:2.1.3:3.3.1:5.3.1:2.3.1:2.7.1 +6528 4.4.1:2.8.1:2.5.1 +6529 4.1.1:2.6.1:4.4.1:4.4.1 +6530 3.6.1:1.2.1:1.2.1 +6531 1.2.1:2.7.7:1.1.1:4.2.1:5.3.1:1.2.1 +6532 2.1.3:3.5.3:1.1.1:4.1.1:2.7.7:2.6.1:2.5.1 +6533 2.4.1:2.7.1:3.6.1:2.3.1 +6534 2.7.1:1.3.3:3.5.1:5.3.1:3.1.3 +6535 2.7.7:2.7.1:5.4.99:2.3.1 +6536 2.6.1:1.17.7:2.7.7:2.5.1:2.6.1:4.1.1:2.7.1:6.3.1:2.5.1:4.1.1:2.7.1:4.1.1:2.6.1:2.7.7:4.2.1 +6537 1.1.1:5.3.1:2.7.7:1.1.1:1.3.99:1.13.11 +6538 1.1.1:4.4.1:3.5.3:3.6.1 +6539 2.5.1:3.5.4:2.8.1:2.7.1:1.3.3 +6540 4.2.1:3.3.1:4.1.1:1.1.1 +6541 2.7.7:5.4.2:4.2.1:4.2.1:3.5.3 +6542 2.6.1:1.4.3:3.1.4:4.2.1 +6543 2.4.2:2.1.1:3.1.2 +6544 1.2.7:2.3.1:3.1.1:2.6.1:6.3.2 +6545 2.3.1:3.5.1:3.5.1:6.2.1:2.5.1:2.5.1:1.2.1:6.3.3:3.5.1:5.1.1 +6546 6.3.2:2.7.2:2.6.1:1.1.1:2.6.1:4.1.2:2.6.1:1.5.1:3.5.1:2.7.1 +6547 2.3.3:2.3.1:2.7.1:2.6.1:1.7.2:1.2.1:4.4.1:3.2.1:2.3.1 +6548 4.1.2:3.5.1:5.1.3:6.3.2:2.1.2:4.2.3:2.6.1:2.3.1:1.5.99:1.2.4:4.2.1:4.2.1:2.1.1 +6549 1.2.1:1.5.1:6.3.5:3.4.13 +6550 2.1.1:2.5.1:2.5.1:2.1.1:1.2.4 +6551 2.7.6:2.7.1:2.7.1:3.5.1:2.7.7 +6552 6.3.4:6.3.4:2.7.1:5.4.2 +6553 1.1.1:5.4.99:6.3.2:2.7.1:6.3.5:5.3.1 +6554 3.4.13:2.7.2:4.3.1 +6555 2.1.3:2.7.1:1.7.2 +6556 4.1.2:2.7.7:2.7.4:4.1.3 +6557 6.3.2:6.3.2:2.7.1:1.5.1 +6558 1.3.3:4.1.1:5.4.99:1.5.1 +6559 2.4.2:1.1.1:2.7.6:2.5.1:2.3.1:4.2.1:2.1.1:2.1.1:2.5.1:6.3.5 +6560 3.5.1:2.7.6:2.3.1:2.7.1:4.3.2:1.1.1 +6561 3.5.1:2.3.1:4.1.1:2.7.2 +6562 4.3.1:3.5.3:2.6.1 +6563 5.3.1:3.5.1:2.3.3 +6564 2.6.1:2.7.1:3.6.1:2.6.1:2.4.2:2.6.1:2.7.7:2.4.2:1.4.1 +6565 2.1.2:2.7.7:1.13.11:5.1.3:2.7.1:3.5.3:2.7.7:2.7.4 +6566 4.1.2:1.5.1:3.5.2:3.6.1 +6567 3.5.1:2.5.1:2.4.2:3.1.3 +6568 3.1.1:1.1.1:3.5.3:3.5.2:2.5.1:1.2.1:1.1.1:1.1.1 +6569 4.1.1:2.3.1:2.7.4:4.2.1:1.2.1:2.1.3:2.7.1:2.6.1:1.3.3 +6570 2.5.1:2.7.2:1.4.1 +6571 2.6.1:3.5.4:2.7.4:4.4.1 +6572 2.7.1:4.3.1:6.3.3:2.3.1:2.3.1:1.2.1:1.3.1 +6573 4.1.1:5.4.2:6.3.4:2.4.2:2.5.1:2.7.1:2.7.7:4.3.2 +6574 2.7.1:2.4.2:2.3.1:4.2.1:2.1.3:3.6.1 +6575 1.17.4:2.1.1:3.1.1:4.1.2:2.5.1 +6576 1.1.5:4.2.-:4.4.1:5.4.2:4.3.1:1.2.1 +6577 6.3.2:4.3.2:5.3.1 +6578 2.3.3:2.7.1:2.1.3 +6579 1.4.1:2.7.7:2.7.2:1.2.1 +6580 3.6.1:2.7.2:2.7.7:2.7.1:4.1.2:6.2.1:5.2.1 +6581 2.7.1:3.5.3:2.3.1:5.3.1:5.4.99 +6582 1.3.99:2.7.1:5.3.1:2.3.1:5.1.3:1.17.4 +6583 4.2.1:6.3.5:6.3.4:1.1.1:4.3.1:2.3.1:2.5.1:4.1.1 +6584 4.1.1:6.3.4:2.7.7:4.2.1 +6585 2.7.7:1.18.6:3.5.1:1.1.1:2.5.1:1.2.4:1.1.5 +6586 6.3.2:6.3.2:1.1.1:6.3.4 +6587 1.1.1:1.2.4:2.3.3:3.4.13 +6588 2.4.1:3.6.1:2.7.7 +6589 2.7.2:2.7.8:3.5.3:6.2.1:3.6.1:4.2.3:2.7.1:1.7.1:1.5.1:6.3.3 +6590 3.6.1:6.4.1 +6591 1.3.3:3.5.4:2.6.1:2.7.4 +6592 2.7.7:1.4.4:2.1.2:6.3.1:1.1.1 +6593 4.2.3:3.5.1:1.1.1 +6594 1.2.1:1.2.1:1.1.2 +6595 6.3.2:3.6.1:4.3.2:2.7.6 +6596 2.4.2:3.6.1:3.1.2:4.1.2:3.2.2 +6597 3.5.2:3.1.4:1.2.1 +6598 1.2.1:5.3.1:4.1.2:2.7.7 +6599 2.7.4:1.2.4:2.4.2 +6600 1.14.13:4.1.1:6.3.4:2.3.1 +6601 4.2.1:4.3.2:5.1.2:4.1.1:2.5.1:1.3.1:2.6.1:1.1.1:4.1.1:1.5.1:1.1.5:1.1.1:5.4.99:1.2.4 +6602 2.4.2:2.3.1:5.3.1:1.3.3:2.7.2 +6603 4.4.1:2.7.2:2.1.4:2.1.1:2.7.6:1.2.1:4.3.1 +6604 2.5.1:4.3.2:1.2.1 +6605 2.7.2:2.4.2:3.5.1:2.7.1:3.5.1:2.7.7 +6606 1.1.1:4.2.1:4.2.1:2.6.1 +6607 4.2.1:1.2.1:5.4.2:1.2.4:2.5.1 +6608 5.3.1:2.5.1:1.1.1 +6609 3.5.4:1.1.1 +6610 1.2.1:3.1.2:4.3.1 +6611 2.7.9:5.5.1:6.3.2:4.3.2:2.3.1:1.3.1:1.17.1:2.6.1:2.3.1 +6612 2.5.1:3.2.1:1.6.1:2.7.7:2.6.1:4.4.1 +6613 2.4.2:2.7.6:5.3.1:2.3.1 +6614 2.1.2:4.2.1:5.4.2:5.1.2:3.2.1:4.2.1:1.1.1 +6615 1.4.1:4.2.1:1.17.4:6.3.4:2.7.1:1.1.1:2.7.1 +6616 2.7.7:2.1.3:3.1.3:2.7.1:2.7.1 +6617 4.3.2:4.3.1:2.7.1:2.7.2:2.7.1:2.3.1:2.3.1:2.1.3:4.4.1:2.3.1 +6618 1.2.1:6.1.1:1.4.4 +6619 4.3.2:3.1.1:2.1.2:3.4.13:3.4.11 +6620 6.3.2:6.3.5:4.3.2:2.5.1:2.4.1 +6621 1.2.1:1.13.11:2.4.2:1.4.1 +6622 4.2.1:1.13.11:2.3.1:5.4.2:2.7.2:2.1.1 +6623 2.6.1:1.3.3:4.1.1:2.3.1 +6624 1.4.99:2.1.2:1.1.1:1.1.1:1.1.1:2.3.1 +6625 6.3.5:2.1.3 +6626 4.1.1:1.1.1 +6627 5.4.99:3.1.1:3.5.1 +6628 2.3.1:2.7.7:1.2.4:4.4.1:2.6.1:3.3.1:3.5.3 +6629 2.6.1:3.2.2:5.1.3:2.3.1:3.5.1:4.4.1:5.4.99:6.6.1 +6630 3.2.1:1.2.1:2.1.2:2.6.1:2.7.1 +6631 1.5.1:1.1.3:1.4.3:2.5.1:2.4.2 +6632 2.7.1:4.2.3:2.2.1:1.1.1 +6633 4.1.1:3.5.1:6.3.4:4.2.-:2.7.6:4.1.2:2.1.1 +6634 2.5.1:2.7.1:2.3.1:1.1.1:2.7.1 +6635 3.6.1:6.3.1:2.5.1:2.6.1 +6636 2.5.1:2.3.1:4.3.1:5.4.2:1.2.1:1.5.1:2.7.6:2.1.2:3.5.1:1.2.1 +6637 4.2.1:4.2.1:2.7.1:2.7.2:3.5.1 +6638 2.7.1:2.3.1:6.3.2:3.5.1 +6639 4.3.1:2.7.1:6.3.5:3.6.1:4.3.1:3.1.3:3.5.3:6.3.2:2.1.3:1.2.1 +6640 4.2.1:5.4.2:6.3.2:2.4.2:2.7.1:3.5.4:2.3.2:3.5.4:1.1.1:1.1.1:2.7.9 +6641 3.5.1:1.2.4:9.9.9:6.3.5:1.4.1:3.1.2:4.2.1:2.5.1 +6642 4.3.1:5.4.99:6.2.1:2.7.2 +6643 2.7.1:1.3.3:5.4.99:9.9.9:1.1.1:3.5.1:6.3.5:6.3.4:4.3.1:2.3.1 +6644 6.3.5:1.4.4:2.1.1:2.1.2:2.6.1:2.7.7:4.3.2:1.2.1:4.2.1 +6645 6.3.1:2.3.1:2.7.4:3.5.1:1.5.1:2.5.1 +6646 3.1.7:2.3.3:3.1.1:2.7.7:5.3.1:4.3.1:6.3.4:4.3.1:5.4.99:2.7.1:2.7.7:2.3.1:1.1.1:4.3.2 +6647 4.1.1:6.3.5:2.4.2:1.7.99:2.1.2:3.1.3 +6648 3.5.3:3.5.1:4.2.1:3.1.3 +6649 3.1.3:6.3.2:6.3.3:4.1.1 +6650 4.3.1:1.7.99:4.1.3 +6651 9.9.9:4.3.1:5.3.1:2.7.7:2.4.2:3.5.3:2.3.1 +6652 3.6.1:2.3.1:2.7.1:6.3.3:1.18.-:2.3.1 +6653 4.2.1:2.7.4:2.4.2:2.7.1 +6654 6.3.2:2.7.7:3.5.1:4.1.3:2.3.1 +6655 4.1.1:1.4.1:2.7.1:2.7.2:3.1.3 +6656 2.4.2:4.2.1:2.7.1 +6657 2.7.7:1.2.4 +6658 2.7.4:2.1.3:5.4.2 +6659 1.5.3:4.1.1:2.7.2:5.4.2:6.3.1:2.3.1:3.1.3:4.3.2:2.3.1 +6660 1.2.1:6.3.4:3.4.11:3.5.3:6.3.2:2.7.7:2.7.1:2.7.2:2.3.1:4.1.1:2.4.2 +6661 3.2.2:4.2.1:1.5.1:1.1.1:2.6.1:2.7.2:1.4.3 +6662 4.1.3:4.1.2:2.7.2:2.7.2 +6663 6.3.2:2.7.7:2.3.1 +6664 3.2.1:2.7.1:2.1.3:4.1.2:2.5.1:3.2.1 +6665 4.3.2:6.3.3:4.3.1:2.5.1:4.3.1 +6666 1.3.99:2.6.1:3.5.1:2.3.1 +6667 1.1.1:2.6.1:1.11.1:1.1.5 +6668 4.2.1:4.4.1:3.1.3:2.6.1:3.6.1:3.5.4:4.1.2 +6669 2.6.1:4.2.1:6.3.5 +6670 4.1.1:2.7.1:2.5.1:4.1.1:2.7.2:3.1.3:1.-.-:2.7.2:2.7.7 +6671 4.1.2:6.3.4:3.2.1:1.1.1:2.7.8:5.1.3:4.2.1:2.7.6:3.1.3:3.1.2:2.7.7 +6672 1.13.12:2.7.4:5.4.99 +6673 3.5.3:1.17.4:2.1.4:6.3.4:3.5.4:1.1.5 +6674 2.1.4:6.3.2:4.4.1:2.1.3 +6675 3.2.2:2.3.1:2.3.1:4.2.1:2.5.1:4.1.1:1.1.1:4.1.1 +6676 2.7.7:2.7.1:4.3.1:4.3.1:1.8.1:4.1.1:4.4.1:1.2.4:4.1.1 +6677 2.1.2:2.5.1:2.7.2:4.1.1 +6678 4.3.2:1.5.99 +6679 4.3.2:1.1.1:1.4.1 +6680 2.1.2:2.7.2:6.4.1:1.5.1 +6681 3.5.1:4.2.3:5.3.1:4.4.1:2.5.1:4.1.1:2.4.2 +6682 1.1.1:2.7.1:2.3.1:6.3.2:5.1.1 +6683 4.3.2:2.1.2:2.6.1:4.1.1 +6684 6.3.3:2.5.1:2.7.1:6.3.2:4.3.1:4.1.2:2.6.1:1.2.1:2.7.2 +6685 3.6.1:3.1.3:1.5.99:6.3.1:4.4.1:2.7.4 +6686 4.4.1:2.3.1:2.7.1:2.5.1:1.1.1:2.1.2:1.1.5 +6687 2.5.1:4.2.1:2.3.1 +6688 3.5.3:5.4.2:6.1.1:4.1.3:2.7.1 +6689 1.2.1:2.3.1:1.8.1:5.3.1:5.4.2 +6690 2.7.1:2.7.1:4.3.2:5.3.1:6.3.3:3.5.3:2.7.2:1.2.1 +6691 1.2.1:3.4.11 +6692 2.5.1:4.2.1:4.1.2:3.5.1:4.3.1:2.1.1:4.2.1:1.5.1:1.2.1 +6693 2.3.1:5.4.2:3.5.1:4.1.1:3.1.3:3.5.3 +6694 6.3.4:3.5.1:2.3.1:1.2.1:2.7.2:6.3.1:6.3.3 +6695 4.1.2:6.3.2 +6696 2.3.1:1.1.1:2.7.7:4.2.3 +6697 2.7.1:6.3.2:3.1.3:2.7.1:1.4.1:5.3.1 +6698 2.3.3:2.5.1:1.1.1:2.7.1 +6699 4.1.2:4.2.1:1.2.1:6.3.1:4.4.1:2.7.1:6.3.4 +6700 2.1.2:4.1.1 +6701 4.2.1:1.1.1:6.3.5:3.5.1 +6702 2.5.1:2.2.1:3.5.1:1.17.7:2.7.1 +6703 3.5.3:4.1.1:4.1.1:4.3.2:6.3.5 +6704 5.4.2:2.5.1:2.3.1:2.4.2:3.4.13:2.6.1:4.1.1:6.3.2:3.2.1 +6705 4.4.1:3.5.1:3.1.3:2.4.2:1.1.1:1.1.1 +6706 2.1.1:2.5.1:4.1.1:1.1.1 +6707 2.4.2:2.6.1:2.7.1 +6708 4.1.1:2.7.7:6.3.5:5.1.3 +6709 3.1.2:2.7.7 +6710 2.7.7:2.7.1:4.1.2:1.2.1:1.1.1:4.2.1 +6711 6.4.1:3.1.1:3.5.1:3.1.2:2.4.1 +6712 3.5.1:6.3.3:6.3.3:1.1.1 +6713 5.4.2:5.3.1:1.2.1 +6714 2.7.1:2.3.1:2.7.2 +6715 2.5.1:6.2.1:1.3.1 +6716 5.4.2:3.1.1:2.7.4:4.1.1 +6717 3.1.2:1.1.1 +6718 4.1.1:2.1.3:1.1.1:1.4.3:2.7.1:2.1.2:5.3.1 +6719 2.6.1:2.5.1 +6720 2.7.4:6.3.2:6.3.2:3.5.1:4.3.1 +6721 2.7.1:1.5.99:2.1.1:2.5.1:2.5.1:2.5.1:5.4.2:2.7.4:4.1.1 +6722 4.4.1:1.4.1:2.1.2:3.5.4:3.1.3:1.14.16:2.7.9:6.3.4:2.6.1:3.4.13:4.3.1 +6723 5.1.3:2.7.4 +6724 2.1.2:2.1.1:5.3.1 +6725 1.14.13:4.3.2:6.3.1:6.3.2:4.3.2:5.3.1:2.7.6:2.7.1 +6726 1.5.1:2.4.2 +6727 1.4.1:2.3.1:4.2.1:1.1.1:2.3.1:2.7.1:2.5.1:4.1.2 +6728 5.4.2:3.1.7:2.7.2:2.1.2 +6729 2.6.1:5.1.1:2.3.1:5.3.1:3.1.1:2.7.1:3.6.1:1.4.3:2.5.1:3.5.1 +6730 3.5.1:3.6.1:2.7.7:3.5.3:2.3.1:2.3.1:2.5.1:2.3.1:1.5.1:2.7.1 +6731 3.1.3:2.3.1:2.7.1:4.2.1 +6732 1.1.1:1.5.1:4.3.2:2.5.1:2.3.1:4.1.3 +6733 3.5.99:4.4.1:4.4.1:4.3.2:4.3.1 +6734 4.2.1:2.3.1:1.2.1:2.1.1:2.1.1 +6735 5.3.1:4.3.1:1.2.1:3.5.4:3.5.1 +6736 3.4.11:2.4.1:2.5.1:5.1.3:4.1.1:4.1.3:5.4.2:1.4.1 +6737 1.1.1:2.4.2 +6738 4.1.1:2.7.2:3.5.1:2.5.1:4.3.1:2.1.3:2.7.2:3.1.4:4.1.1:4.1.2:1.5.1:2.7.6:2.5.1 +6739 2.3.3:1.14.13:2.6.1:6.3.4 +6740 2.7.2:3.5.1:3.5.1:1.4.1 +6741 6.3.1:2.7.1:3.5.1:3.5.3 +6742 2.5.1:1.4.1:5.4.2 +6743 2.5.1:1.1.1:1.5.99 +6744 2.4.2:4.2.1:6.3.2 +6745 3.5.3:3.1.4:2.5.1:4.3.2:5.4.2:4.2.3:4.2.1 +6746 1.2.1:4.2.3:5.4.99:2.5.1:2.2.1:2.3.3 +6747 1.8.1:2.6.1:9.9.9:1.2.1:3.1.2 +6748 1.4.4:2.6.1:2.7.2:1.2.4:2.7.1 +6749 5.1.1:5.4.99:2.4.2:6.3.3:4.1.1:2.1.2:3.2.1:2.3.1 +6750 1.2.1:2.7.4:3.6.1:2.5.1:5.3.1:4.2.1:2.3.1:4.3.1:3.5.4:6.3.4 +6751 2.5.1:3.5.1:2.7.1:2.7.1:2.7.1:4.99.1:2.1.2 +6752 2.7.1:4.4.1:2.7.6:4.3.1 +6753 4.1.2:3.5.99:3.5.1:2.1.1 +6754 2.7.1:2.5.1:4.1.1:2.6.1 +6755 2.7.1:2.7.1:2.7.2:1.5.1 +6756 5.4.2:2.3.1:2.1.1:2.7.1:2.5.1:2.1.3 +6757 2.3.1:3.5.1:2.3.3:2.3.1:2.8.3:2.7.1:3.1.1 +6758 2.3.1:1.2.1:3.5.99:1.2.1 +6759 1.1.1:1.13.12:3.1.3:5.4.99:1.1.1:2.5.1:1.2.1:1.14.13:4.1.1 +6760 2.5.1:5.3.3:5.3.1:2.1.4:6.2.1:4.2.1:3.5.1:2.7.2 +6761 2.3.1:6.3.4 +6762 4.1.2:4.1.1:1.2.4:6.3.5:6.3.4 +6763 1.2.1:2.6.1:2.3.1 +6764 6.3.4:4.2.3:2.6.1:4.1.2:5.1.3 +6765 1.18.-:2.2.1:2.1.2 +6766 4.3.2:2.6.1:2.4.2:1.12.99:2.7.4:2.3.1:2.7.1:1.1.1:2.3.1 +6767 1.5.1:2.7.2:5.3.1:2.7.1 +6768 2.3.1:2.1.3:3.2.1 +6769 4.4.1:6.2.1:2.4.1:2.7.7:6.3.5:6.3.4:2.7.4 +6770 1.4.1:6.3.4:1.5.1:1.5.99:6.3.4:5.3.1:4.3.2:3.1.3:3.5.1:2.6.1:3.1.3:1.3.1 +6771 2.7.1:4.2.1:1.3.1 +6772 5.1.3:2.3.1:5.3.1:5.3.1:2.5.1:2.6.1:2.3.1:6.3.5:1.1.1:2.3.1 +6773 2.6.1:5.3.1:6.3.1:2.1.2:4.1.2:4.2.- +6774 2.6.1:6.3.2:1.1.1:3.5.3:6.2.1 +6775 4.3.2:2.1.1:2.1.2:5.4.2 +6776 2.4.2:2.6.1:4.3.1:3.5.3:1.1.1:3.2.1:2.3.1 +6777 1.1.1:4.3.1:4.4.1:4.1.3:2.7.4:2.8.1:4.1.1 +6778 6.2.1:2.7.8:6.3.4:2.5.1:1.4.1:4.2.1:4.1.1:5.3.1 +6779 6.4.1:2.7.1:4.1.1 +6780 4.1.2:3.4.11:6.3.5:4.3.1:2.1.4 +6781 6.3.3:4.1.1:1.18.6:6.3.1 +6782 3.5.3:5.1.1:2.1.3:6.3.4 +6783 2.7.8:4.1.2:4.2.1 +6784 3.6.1:4.2.1:1.1.1:3.2.1:6.3.4:1.1.1:3.1.3 +6785 2.6.1:9.9.9:1.1.1 +6786 3.2.1:3.6.1:4.1.1:2.7.2:3.5.1:5.3.1 +6787 2.5.1:2.7.7:2.7.4 +6788 2.7.1:5.3.1:2.3.1:2.3.1:4.1.1:3.5.1:3.2.2:2.4.2 +6789 1.6.1:2.7.8:9.9.9:5.4.2:2.5.1:2.3.3:3.4.13:1.4.1:4.2.3 +6790 3.6.1:4.1.2:4.3.1:2.7.4 +6791 1.17.1:6.3.2:1.1.1 +6792 4.3.2:2.7.2:1.2.4:6.3.4:6.2.1:3.5.4:4.3.2 +6793 6.3.4:1.2.4:2.5.1:2.7.7:4.6.1 +6794 1.13.11:6.3.3:4.2.1:3.1.3:1.4.1:2.1.1 +6795 3.5.1:4.2.1:4.1.2:1.5.1 +6796 2.5.1:4.1.3:2.7.4 +6797 2.3.2:6.3.2:1.3.1:1.2.1:4.1.1 +6798 3.5.1:2.6.1:3.1.3:6.3.1 +6799 4.3.2:2.7.2:3.1.3 +6800 1.1.1:2.3.1:4.1.3:3.5.3 +6801 4.2.1:2.1.2:6.2.1:2.7.8:3.5.1:1.1.1 +6802 2.6.1:4.1.1:2.7.2 +6803 3.1.3:3.5.1:2.1.1:3.5.99 +6804 1.14.13:4.2.3:1.2.1:3.5.3:1.2.4 +6805 2.1.3:4.3.1:3.5.4:5.3.1:2.5.1 +6806 2.7.1:4.2.3:2.7.2:4.2.3:4.2.3:6.2.1 +6807 1.7.99:2.7.4:4.3.1:4.4.1 +6808 2.7.1:2.7.1:2.7.4:2.4.2:2.6.1:6.2.1:2.5.1 +6809 2.1.3:1.5.1:4.1.1:6.3.2:2.4.2:1.2.1:2.7.4 +6810 2.7.7:2.6.1 +6811 4.1.1:1.3.1:3.5.1:2.1.1:3.1.3:2.5.1:4.1.2:1.5.1:4.1.1:5.4.2:2.5.1:2.5.1 +6812 4.4.1:1.2.1:2.3.1:6.3.2:4.2.3:1.3.99 +6813 1.5.1:1.2.5:2.3.1 +6814 5.4.2:2.7.7:2.7.4 +6815 4.1.1:2.8.1:2.7.1:4.1.2 +6816 3.1.1:4.2.1 +6817 5.1.3:4.3.2:3.5.1:4.1.1 +6818 3.1.2:3.5.3:3.2.2 +6819 6.3.4:2.7.1 +6820 5.3.1:6.3.2:1.8.1:4.2.1:3.1.1:4.2.3:5.4.99:2.7.1:1.17.1:4.1.3:3.1.1:2.3.1 +6821 2.3.1:3.5.1:1.2.1:1.1.3:5.1.3:1.1.1:3.1.2 +6822 1.2.1:1.2.1:2.6.1:2.1.3:4.2.1 +6823 6.3.2:2.1.3:2.7.1 +6824 1.2.4:2.6.1:2.4.2:1.2.1:2.7.7:2.6.1 +6825 2.6.1:2.6.1:2.7.7 +6826 2.7.1:2.3.1:2.4.2:1.5.1:2.7.1 +6827 1.2.1:4.1.1:1.13.11:1.2.4:3.5.5:5.4.99 +6828 1.7.2:2.7.1:2.7.1:2.7.4:2.4.2 +6829 4.2.1:3.1.4:2.3.1 +6830 3.5.3:2.7.7:2.3.1:2.1.2 +6831 4.3.2:1.1.1:5.3.1:1.5.1:2.2.1:4.1.3:4.1.1 +6832 2.3.3:2.1.1:2.7.1:4.1.2:2.4.2:6.3.5:2.1.1:2.3.1 +6833 2.7.8:3.1.3:1.2.4:4.3.2:5.4.99:3.5.4 +6834 2.6.1:2.3.1:2.1.1:2.4.1:2.1.2 +6835 2.7.9:2.3.1:2.3.1:4.3.2:1.4.3 +6836 3.1.1:4.1.1:4.3.1:3.5.1 +6837 4.1.1:1.4.1:6.3.5:2.7.1:1.1.1:5.1.3:2.3.1:1.2.1:2.7.2:1.4.1 +6838 2.7.6:4.1.1:1.2.1 +6839 2.7.1:4.2.1:2.5.1:4.99.1 +6840 2.4.2:1.4.1:4.2.3:2.3.1:5.2.1:1.1.1:5.4.2:2.5.1 +6841 1.4.1:2.5.1:4.2.1:2.7.7:3.5.4:6.3.2:5.4.3 +6842 6.3.5:1.5.1:4.3.1:2.3.1 +6843 3.1.4:1.1.1:4.1.1:3.5.1:2.7.7:4.3.2:2.1.2:1.5.1:3.5.1:2.7.2:4.1.1:6.3.2:6.3.4 +6844 1.13.11:4.1.1:6.3.2 +6845 3.2.1:2.1.1:4.2.3:2.5.1:2.1.1 +6846 2.1.3:3.5.1:2.7.4:3.5.1:2.6.1:2.1.3 +6847 2.7.1:2.6.1:4.3.1:1.5.1:3.6.1 +6848 3.5.3:6.3.3:2.7.1:3.5.1:1.1.1:2.6.1:2.7.1:2.7.1:2.7.2 +6849 1.1.1:4.1.1:3.6.1:1.1.1:3.1.1:6.3.4 +6850 6.3.5:4.1.2:1.8.1:4.1.1:2.3.1:1.5.1:6.3.5 +6851 2.4.2:1.3.3:3.2.2:2.7.2 +6852 4.2.1:2.3.1:6.3.1:4.2.1:3.2.1:2.3.1:6.4.1 +6853 2.1.2:4.2.1:3.6.1:2.7.8:1.1.1:5.3.1 +6854 2.3.1:2.8.1:4.1.1:2.1.1:2.7.1 +6855 2.5.1:4.2.1:4.1.1:1.4.1:3.1.1 +6856 6.3.4:2.5.1:3.5.1:1.3.99 +6857 1.17.4:2.3.1:5.4.2:2.3.1:3.4.11:1.18.6 +6858 2.7.7:3.5.1:2.7.1:2.4.2:1.3.99:4.1.1:4.4.1:2.7.2:2.7.2:2.4.2 +6859 3.1.3:1.13.11:2.7.6 +6860 2.5.1:6.3.4:1.5.99:2.7.1:5.4.2:1.5.1:3.6.1 +6861 4.3.2:2.7.1:2.5.1:2.7.2:3.1.3:3.5.1:4.3.1:2.7.1 +6862 6.3.4:2.5.1:4.2.1 +6863 4.3.2:1.1.1:2.5.1:6.3.2:6.3.3:2.7.1:4.2.1:2.7.8:2.7.4:3.5.3:2.4.2:2.5.1:2.4.2:1.4.1 +6864 3.5.1:2.3.1:6.3.4:3.2.1:3.5.1 +6865 2.5.1:2.3.1:2.4.1:2.3.1 +6866 2.7.1:2.7.4:4.3.1:4.3.1:4.1.1:2.7.1:4.2.1 +6867 3.2.1:2.3.1:2.2.1 +6868 2.1.2:3.6.1:3.1.3:1.8.1:2.7.2:2.4.2:6.3.5:1.7.99 +6869 4.1.3:4.2.1:1.5.99:1.4.1:2.3.3:4.1.2:1.3.3 +6870 2.7.1:2.6.1:4.1.2:4.1.1:2.1.4:2.8.1:2.6.1:2.7.2 +6871 1.2.1:2.7.4:2.3.1 +6872 5.4.2:2.7.2:2.7.2 +6873 4.3.1:2.7.2:1.5.1:2.7.1 +6874 1.2.7:3.1.3 +6875 2.7.1:9.9.9:2.7.1:2.7.2 +6876 6.3.3:4.1.1:1.7.2:2.5.1:1.11.1:2.7.4 +6877 6.4.1:1.1.1:3.1.2:2.7.7:2.3.1 +6878 3.6.1:2.3.1:1.17.1:6.3.4:3.5.1 +6879 2.7.7:4.2.3:2.7.4:2.7.7 +6880 2.7.9:6.2.1:2.3.1:9.9.9:3.5.99:2.1.2:4.1.1:5.3.1:3.5.1 +6881 4.4.1:3.5.1:1.1.1:3.1.3:6.3.4:1.11.1:4.3.1:2.7.4:2.7.6:2.3.1:4.1.3:1.4.99:1.1.1 +6882 3.5.2:1.1.1:3.6.1:2.5.1:2.1.2 +6883 2.3.1:1.2.1 +6884 1.4.99:3.1.3:3.5.1:2.3.3:4.1.1:3.5.1 +6885 2.4.2:2.7.1:2.7.4:2.7.2:2.6.1:4.2.3:1.2.1:2.7.4 +6886 1.4.1:4.3.1:2.4.2:2.5.1 +6887 4.1.2:6.3.4:2.3.1:4.1.1:4.1.1:6.3.4:4.1.1:4.3.2 +6888 4.3.2:1.2.1:3.1.4:3.5.2:1.1.1:2.3.1:3.5.4:3.5.1:5.1.3:2.1.3:2.1.1 +6889 2.3.1:9.9.9:3.1.4:2.1.1 +6890 2.7.2:5.4.99:3.1.3:3.4.13:1.2.7:6.3.4 +6891 2.6.1:3.5.1:1.2.5:4.2.1:3.5.1:3.6.1 +6892 3.1.1:1.14.16:6.3.1:4.4.1:4.1.1:1.1.1:3.1.4:4.3.2:4.1.1 +6893 2.1.2:6.3.5:2.7.8:2.7.9:3.1.3 +6894 1.2.1:2.1.2:2.7.7:2.7.1:5.4.99 +6895 6.3.4:4.4.1:3.5.1:4.1.3 +6896 5.4.99:5.1.1 +6897 2.3.1:6.3.4:2.3.1:6.3.3:1.4.1:1.2.1:5.4.99:2.7.4 +6898 2.5.1:2.3.1:2.1.1:5.1.1:2.4.2:4.1.1:4.99.1:9.9.9:1.1.5:5.3.1:2.3.1 +6899 4.2.1:1.1.1:5.4.2:4.1.1:2.1.2:6.3.4:2.3.1:4.1.1 +6900 6.3.5:1.4.1:2.7.2:5.1.3:1.2.4 +6901 2.1.2:4.3.1:1.1.1:3.5.1:6.3.1:1.2.1:6.3.5:1.17.4:1.4.1:4.1.1:4.4.1:2.5.1 +6902 4.1.1:2.7.7:6.3.5:2.5.1:2.3.1:2.7.1:6.3.4:1.2.1:3.4.13:2.7.2:1.5.1:2.1.1 +6903 2.7.1:4.3.1:2.3.1:2.3.1:3.5.4:2.5.1:1.1.1:6.3.4:3.2.1:4.1.2:4.1.1:2.1.1:4.1.1 +6904 2.3.1:2.4.2:6.3.2:1.1.1:4.99.1:2.5.1 +6905 1.2.4:2.4.2 +6906 6.3.4:3.5.99 +6907 3.5.3:2.6.1:4.3.2 +6908 1.5.1:4.1.1:6.3.3:1.1.1:4.1.1 +6909 4.2.1:3.5.3:2.2.1:1.7.2 +6910 1.3.99:1.1.1:6.4.1:2.7.1:4.3.2 +6911 1.4.99:2.3.3:3.5.1 +6912 2.3.1:4.2.-:1.1.2:3.1.3:5.3.1:4.2.1:5.4.2:6.3.5:2.7.2 +6913 4.3.1:4.2.1:1.17.4:2.3.1:2.6.1:3.5.1:4.3.2:6.3.4:3.6.1 +6914 3.5.1:4.1.3:4.1.2:1.2.1:1.3.99:1.2.1:1.2.4:2.7.7 +6915 2.5.1:2.1.1 +6916 1.5.1:1.4.1:2.4.2:4.2.1:2.6.1:1.5.1 +6917 2.5.1:4.3.1:3.5.1:2.3.1:5.1.3 +6918 6.3.4:1.5.1 +6919 2.3.1:3.7.1:2.6.1:2.3.1:2.7.4:4.2.3:2.5.1:6.3.4 +6920 4.3.1:2.6.1:3.5.4:1.1.1 +6921 6.3.5:1.-.-:2.1.2:2.7.1:5.4.2:1.1.1:5.4.2:2.1.1 +6922 4.1.1:2.4.2:3.1.3:2.7.2:4.1.3 +6923 2.3.1:2.7.1:4.2.1:2.4.1:2.1.2:1.1.1:1.1.1:5.4.99 +6924 4.3.2:5.1.3:2.7.4:5.4.2 +6925 6.3.4:2.3.1:2.5.1:4.1.2:2.7.1:5.4.99 +6926 1.4.4:2.4.2:2.4.2 +6927 6.3.2:6.3.5:6.3.2:2.1.4:2.5.1 +6928 5.4.2:3.5.1:3.1.1 +6929 2.1.2:6.3.2:2.7.7:6.3.3:6.3.2 +6930 6.3.3:1.2.1:6.3.4:6.3.1:2.7.1 +6931 1.1.1:2.5.1:2.7.1:3.4.13 +6932 2.3.3:2.7.7:2.4.1:2.3.3:3.5.4:2.7.4:6.4.1:2.7.2 +6933 2.5.1:1.1.2 +6934 2.4.1:5.1.3:2.4.2:2.1.2:2.7.1:1.1.1:4.1.3 +6935 2.7.1:4.3.1:2.7.1:6.6.1:2.7.4:2.1.2 +6936 6.3.2:2.7.1:1.4.3:6.3.2:3.1.3:4.4.1 +6937 2.6.1:3.1.2:1.2.1:2.7.7:6.4.1:6.3.5 +6938 2.7.4:6.3.5:4.1.1:2.7.2:3.1.1:1.1.1 +6939 2.7.1:2.3.1:3.1.2:4.2.1 +6940 2.7.4:3.5.1:6.3.2:3.1.1:2.6.1:1.13.11:6.3.4:5.4.99:2.7.7:3.6.1:2.7.1 +6941 4.3.2:3.3.1:4.4.1:2.7.4:3.5.4:2.5.1:2.4.2:2.3.3 +6942 2.1.3:2.7.4:2.6.1:1.5.1 +6943 1.2.4:6.3.1:1.2.1 +6944 2.1.1:5.4.2:4.1.1:2.6.1:1.1.1:4.4.1:2.5.1:6.3.2:3.5.3 +6945 2.4.2:2.3.3:1.2.1:3.6.1:2.7.1:1.1.1 +6946 6.3.5:3.5.3:3.4.11:3.5.4:4.4.1:6.3.2:1.5.99:1.8.1 +6947 6.3.4:4.1.1:6.3.3:4.1.1 +6948 2.7.1:2.4.2:2.3.1:2.6.1:2.2.1:2.7.1 +6949 4.2.1:5.4.2:3.1.3:1.2.1 +6950 1.1.1:2.4.2:5.3.1:4.1.1 +6951 2.1.1:4.1.1:1.1.1:2.1.1:1.1.2 +6952 6.4.1:1.97.1:2.4.2:2.7.4 +6953 2.7.2:2.3.1:2.3.1:3.5.5:3.1.3 +6954 1.5.1:2.1.2:4.1.2:2.4.1:4.2.1:2.7.1:2.6.1 +6955 3.5.3:1.8.1:4.1.2:2.5.1:2.5.1:3.5.1 +6956 2.3.1:3.1.3:2.5.1:1.2.1:6.3.5:2.3.1:2.1.1:4.3.1 +6957 2.3.3:4.1.1:6.3.4:1.2.1 +6958 3.1.3:1.4.3:4.2.3:2.8.1:3.5.4 +6959 6.2.1:4.3.2:1.8.1:2.3.1:3.5.1 +6960 6.2.1:3.1.3 +6961 2.3.1:2.7.8:4.1.1 +6962 2.7.7:2.3.1:4.3.1:2.7.8:5.4.99:4.3.2:1.1.1:2.5.1:1.2.7:1.5.1:4.1.2:3.4.11:1.2.1 +6963 3.5.3:3.6.1 +6964 4.4.1:2.4.1:4.1.2:1.5.99:4.1.1 +6965 3.5.3:5.3.1 +6966 2.3.1:5.4.2:1.1.1:1.4.4:2.7.8:2.3.1 +6967 3.6.1:6.3.5:2.5.1:2.7.2:2.7.7:2.6.1:2.3.1 +6968 1.17.4:4.1.1:4.1.2:1.17.1:2.6.1:2.4.2:3.5.1 +6969 3.6.1:4.1.1:3.6.1:2.7.1:2.6.1:3.1.3 +6970 4.1.1:1.1.1:6.1.1:3.5.4:6.3.2 +6971 3.5.1:4.3.2:6.3.4:1.2.1:6.2.1:3.1.4 +6972 6.3.3:2.3.1:6.2.1:2.7.1 +6973 1.5.1:2.3.1:4.3.1:2.3.1:1.2.7:2.3.1:3.5.3:3.1.3:4.1.1:6.2.1:9.9.9:2.1.3 +6974 1.1.1:1.8.1:4.1.2:5.4.2 +6975 2.7.9:1.3.3:4.1.2 +6976 2.7.1:3.5.3:2.7.1:1.2.1:2.7.1:1.4.1:2.6.1 +6977 1.5.1:4.1.1:1.14.13:4.3.2:2.7.1:2.7.4:6.3.5 +6978 2.7.7:2.1.1:2.3.1:2.7.4 +6979 2.5.1:3.4.11:4.2.- +6980 2.7.1:2.3.1:2.8.3:3.5.4 +6981 1.2.1:6.3.1:2.3.1:2.4.2:1.7.2:6.3.2:4.1.3 +6982 1.2.1:1.1.1:2.3.1:2.6.1:2.6.1 +6983 2.6.1:4.4.1:3.5.1:1.2.4:2.5.1 +6984 2.1.3:2.4.2:3.5.3 +6985 1.1.1:4.1.3:1.1.1:1.11.1:3.5.3:1.1.5 +6986 2.3.1:2.7.7:2.8.3:2.3.3:3.1.2:4.1.1:2.7.1:3.1.1:4.99.1:2.7.4:4.1.1:2.1.3:1.2.1 +6987 2.5.1:2.3.1:2.7.7:2.3.1:2.3.1 +6988 5.1.3:5.1.1:2.7.1:1.3.3:4.1.2:5.3.1:4.1.1:4.1.1:4.1.1:1.2.1:3.5.2 +6989 3.5.3:2.4.2:4.1.1:1.3.99:3.6.1:3.5.3:1.4.1:2.2.1:1.5.99:1.1.1:3.5.1:4.3.1 +6990 2.3.1:1.17.4:4.4.1:5.4.2:4.1.1 +6991 1.7.3:5.1.1:5.3.1:6.2.1:2.3.3 +6992 2.3.1:4.3.1:3.5.3 +6993 4.1.1:3.5.3:2.4.2:2.7.7:3.5.1:3.5.3:2.7.1 +6994 3.1.2:6.3.4:3.5.4:4.2.1 +6995 6.3.2:3.5.3:2.1.3:1.2.1:2.7.4:6.3.2 +6996 2.6.1:6.3.5:2.7.2:6.3.4:3.5.1:6.3.2 +6997 3.1.3:2.5.1:3.6.1:2.3.3:1.2.1 +6998 4.1.1:6.1.1:6.3.2:5.4.99:2.7.7:2.7.1:2.7.2:2.7.1 +6999 2.7.1:4.3.1:2.5.1:4.3.1:2.7.1:2.7.6 +7000 6.3.4:3.5.1 +7001 5.4.99:3.2.1:2.5.1:1.4.1 +7002 5.3.1:6.3.3:6.3.5:2.7.7:4.1.1 +7003 6.3.4:1.5.1:2.7.2:2.1.3:2.6.1:3.5.2:4.1.3:1.8.1 +7004 4.3.1:1.4.3:5.4.2:3.5.1:3.6.1:1.1.1:2.3.1:3.5.3:5.4.99 +7005 3.1.4:6.4.1:1.3.99:1.5.1:4.4.1:4.2.- +7006 1.4.1:5.1.1:2.7.1 +7007 6.3.1:2.4.2:2.1.1:4.1.1:2.7.1:6.3.2:2.6.1 +7008 1.1.1:5.3.1:3.5.3:2.4.1:4.1.1 +7009 2.2.1:4.1.1:6.3.4:2.6.1 +7010 2.6.1:2.1.3:2.4.2:1.2.1:1.4.3:1.1.1:4.2.3:2.7.1:4.1.3:4.1.2:1.1.1:1.7.2 +7011 2.4.2:2.5.1:2.1.2:4.1.1:2.3.1 +7012 4.1.2:1.1.1:1.1.1:2.7.2:2.1.1:2.1.2:6.2.1:4.1.1 +7013 2.6.1:1.1.1:2.1.2:2.4.2:6.3.5 +7014 2.1.4:4.99.1:2.1.1:2.7.2 +7015 1.3.99:5.1.1:2.1.2:1.3.99:4.3.2 +7016 1.3.99:3.5.99:2.3.3:4.3.2:1.2.1 +7017 2.5.1:2.7.4:2.1.1 +7018 1.2.1:2.7.2:4.2.3:2.7.7:6.3.5:4.1.1:4.3.1:3.5.1:1.14.16:3.1.1:2.4.2 +7019 2.7.2:4.1.1:5.4.99:4.1.3:5.4.2:2.5.1 +7020 6.3.4:4.2.1:1.3.1:1.4.1:2.7.2:2.6.1:6.3.4 +7021 5.3.1:5.3.1:3.1.4:3.1.3:2.7.1:3.1.3:1.5.1:4.2.3:2.1.1:2.4.1:6.2.1:2.1.1:6.3.5 +7022 4.1.3:2.7.9:3.1.1:6.3.4:2.7.1 +7023 2.3.3:2.4.2:3.1.3:2.1.2:2.5.1 +7024 6.3.4:1.4.3:1.1.1:2.7.1:2.7.4:4.2.3 +7025 2.6.1:2.5.1:9.9.9:5.4.99:1.2.4 +7026 1.1.1:4.2.1:3.2.1 +7027 2.4.2:4.3.1:2.7.4 +7028 1.2.1:6.3.4:3.2.1:5.4.2 +7029 4.2.1:2.7.4:6.2.1:4.1.1 +7030 1.13.11:5.3.1:2.7.7 +7031 1.2.4:5.3.1:2.7.1:4.3.2:2.6.1 +7032 5.3.1:4.3.1:4.1.2:6.3.1:4.3.2:2.7.1:2.4.2 +7033 2.7.7:2.1.2:1.4.3 +7034 2.7.4:2.6.1:2.1.3 +7035 3.6.1:1.-.-:2.7.1 +7036 4.3.1:2.5.1:2.4.2:2.4.2 +7037 4.3.2:6.3.2:1.1.1:2.4.2 +7038 1.8.1:6.3.3:3.2.1:5.3.1:1.1.1 +7039 2.5.1:6.3.1:6.3.4:1.2.1 +7040 1.3.3:5.4.99:1.1.1 +7041 6.3.1:1.2.1:2.7.1:6.2.1:5.3.1 +7042 4.3.2:6.4.1:2.7.2 +7043 2.7.4:1.1.1 +7044 6.3.4:4.2.1:1.4.1:2.3.1:2.6.1:3.1.3:2.5.1:4.1.1:2.6.1:2.7.4:4.2.1:2.7.4:4.2.1 +7045 2.7.1:2.3.3:5.4.99:5.3.1:2.5.1 +7046 1.5.1:5.3.1:1.4.3 +7047 6.3.4:2.6.1:5.1.3 +7048 2.7.7:6.2.1:3.1.7:4.1.1 +7049 2.7.1:1.7.2:2.7.1 +7050 2.3.1:1.1.1:3.5.1:3.1.3:4.6.1 +7051 6.6.1:1.2.1:2.6.1:2.7.1 +7052 2.7.4:4.1.1:4.1.1 +7053 2.7.1:3.2.2:3.6.1:2.7.2:3.1.3:2.7.2:3.6.1 +7054 2.3.3:6.4.1:5.1.2 +7055 4.1.1:3.6.1:6.3.3:4.3.2:4.2.1:6.3.2:6.3.2 +7056 3.5.1:6.2.1 +7057 5.1.1:1.1.1:2.7.2:2.7.1:1.3.99 +7058 6.3.4:1.8.1:2.7.7:2.5.1 +7059 2.5.1:2.1.2:2.7.1:6.3.2:4.2.1:4.3.2:2.7.4 +7060 1.4.1:3.1.2:3.5.1 +7061 4.1.2:4.6.1:2.7.1:2.7.2 +7062 4.1.1:6.3.3:5.5.1:2.7.1 +7063 1.1.2:1.5.3:4.1.3:6.3.5:1.2.1:5.4.99 +7064 1.5.1:1.2.1 +7065 1.5.1:6.2.1:2.4.2:4.2.3:1.5.1 +7066 2.7.2:2.5.1:2.5.1:5.4.2:2.7.1:4.3.1:2.1.2:6.3.4 +7067 2.7.4:1.2.5:1.13.11 +7068 2.7.2:6.3.5:2.6.1:4.2.3:3.1.3:4.1.1 +7069 3.1.1:5.4.99:2.5.1:2.7.2:6.3.5 +7070 5.4.2:4.1.1:4.1.2 +7071 4.1.1:5.3.1:2.7.8:2.5.1:5.2.1:9.9.9:5.4.99:5.1.1:2.7.1:4.3.1:2.7.7:1.3.99 +7072 2.5.1:1.1.1:1.2.1:1.4.1 +7073 3.5.4:2.7.1:1.2.1:2.6.1:2.2.1:2.4.2:2.7.1 +7074 2.6.1:4.3.2:6.3.2:4.1.1:2.5.1 +7075 4.1.3:4.3.2:2.4.2:4.3.2:2.7.9:2.7.9 +7076 3.2.1:4.1.1:3.6.1:4.1.2 +7077 3.5.1:2.6.1 +7078 2.7.4:2.6.1:2.5.1:3.2.1:2.3.2:4.1.1:1.1.1 +7079 1.5.1:3.1.2:3.5.3:4.2.1:4.1.1:4.3.2:1.4.1:2.3.1:2.7.1:4.3.1:1.1.3:2.4.1 +7080 2.1.3:2.1.2:5.3.1:6.3.3:2.6.1:2.8.1:1.4.1:2.7.7:1.17.4 +7081 2.4.2:2.5.1:2.7.1:4.2.3:5.3.1 +7082 2.1.2:4.2.1:2.3.1:6.3.2:2.5.1:1.3.3 +7083 3.1.3:4.1.3:4.2.3 +7084 3.1.3:6.3.4:2.3.1:4.2.1:6.3.4:2.3.1:2.5.1 +7085 1.2.1:3.5.1:1.2.1:4.1.3:4.1.1:2.7.4:2.7.8 +7086 1.1.1:2.4.2:2.4.1:5.4.2:2.3.1:6.3.2:2.7.2 +7087 2.5.1:1.2.1:2.1.1:4.1.3:1.1.1:2.1.2 +7088 1.4.1:4.3.1:2.3.1 +7089 5.4.99:4.3.2:2.5.1 +7090 1.5.1:1.2.1:6.3.5:2.3.1 +7091 2.7.1:6.3.2:2.4.2:2.7.1 +7092 3.6.1:2.7.2:4.3.2:2.1.3:1.5.1:1.4.1:4.3.1:2.7.2:3.5.1 +7093 4.1.2:1.1.1:2.3.1:4.3.1:4.3.2:4.1.1:1.17.4:2.1.2 +7094 1.1.3:4.2.1:4.1.3:2.4.2:1.2.1:6.3.4:5.3.1 +7095 2.1.2:3.5.1 +7096 2.3.1:2.4.2:3.5.1:2.3.1 +7097 5.4.2:3.5.1:5.1.3 +7098 2.6.1:4.3.2:1.1.1:2.4.2:3.5.3:4.1.3 +7099 1.8.1:2.7.1:4.1.3:3.5.3:2.3.1 +7100 2.7.2:4.1.1:5.4.99:3.1.3:3.5.3 +7101 4.1.1:6.3.2:1.1.1:6.3.3:4.2.1 +7102 2.6.1:6.3.4:5.4.99 +7103 2.7.9:1.4.1:3.2.1:3.2.2:2.1.1:6.3.4 +7104 5.1.3:2.1.3:2.7.1 +7105 2.1.2:5.1.2:1.1.1:6.2.1:3.6.1:4.3.2:4.1.2:3.1.3:1.1.1:2.5.1 +7106 1.7.2:4.2.-:2.7.4:1.2.1 +7107 2.7.2:5.4.2:2.7.7 +7108 2.5.1:4.3.1:2.6.1:6.1.1 +7109 2.7.1:2.6.1 +7110 6.2.1:5.4.4:2.1.1:2.7.1 +7111 2.1.1:2.7.2:4.2.1:2.7.2 +7112 1.3.1:2.7.7:2.1.3:3.5.3 +7113 2.7.1:1.2.1:4.2.3:4.2.3:1.7.2:1.2.1:1.17.4:6.2.1 +7114 5.3.1:4.1.1:5.4.99:2.7.1:2.7.1:2.7.2 +7115 2.1.2:6.3.4:2.1.1 +7116 6.2.1:4.1.1:4.1.1 +7117 2.7.4:6.3.4:3.1.3:2.7.1:1.2.1:3.5.3:2.7.1:3.1.1:1.13.11:4.2.1:3.2.2 +7118 4.2.3:2.7.2:6.3.2:2.6.1:5.1.1:6.3.4 +7119 2.4.1:2.1.2:3.5.1:3.4.13:2.4.2:2.6.1:6.3.5:3.5.1 +7120 2.7.2:4.4.1:3.6.1:4.3.1:3.1.1:1.5.1:1.17.1 +7121 3.6.1:2.7.7:2.3.1:6.2.1 +7122 2.6.1:5.4.99:6.2.1:6.3.4 +7123 2.6.1:2.5.1:6.3.4 +7124 4.3.1:2.7.4 +7125 5.4.2:6.3.4:4.3.2:4.3.1 +7126 4.1.2:2.7.1 +7127 2.7.4:2.5.1:2.1.3:1.4.1 +7128 2.8.3:2.7.4:6.3.5:3.5.3:5.4.99 +7129 2.7.7:5.2.1:2.7.1:1.2.1:2.7.1 +7130 1.3.1:2.6.1:1.5.1:2.1.2:6.3.4:6.3.4 +7131 2.7.1:2.3.1:4.1.1:5.4.99:4.1.1:2.3.1:5.4.2 +7132 4.2.1:2.7.8:2.5.1:3.2.1:6.3.4:4.4.1:4.1.1 +7133 2.7.1:2.3.1:3.5.1:4.3.1:4.1.1:2.5.1:6.3.2:1.1.1:6.3.3:1.4.1:4.3.1:4.3.1 +7134 4.1.1:3.3.1:4.3.2:2.3.1:4.1.2 +7135 3.2.2:2.6.1:2.7.1:4.3.2:5.1.2:3.1.1:2.6.1:2.1.2:1.5.1:2.3.1 +7136 5.4.2:6.2.1:2.3.1:4.3.1:1.1.1:3.1.3 +7137 1.1.1:6.4.1:3.5.1:3.5.1:2.4.1:3.5.4:3.5.1:3.5.1:4.3.1:3.5.1 +7138 1.1.1:1.1.3:4.2.1 +7139 2.5.1:2.7.6:2.7.2:3.4.13:2.6.1:2.1.1:6.3.2:2.7.1:4.2.1 +7140 3.5.4:1.3.99:1.2.1:2.1.1:4.1.3 +7141 5.3.1:6.3.2:3.5.3 +7142 4.1.2:1.2.1:1.14.-:2.7.2:6.3.4:3.5.1:4.3.1:2.6.1:1.1.1:1.3.1:6.3.5:2.7.4:2.7.1:1.3.99 +7143 4.1.1:4.1.2 +7144 1.2.5:1.7.2:2.4.2 +7145 2.3.1:4.2.1:4.2.1:3.3.1 +7146 2.1.3:3.5.4:4.4.1 +7147 6.3.1:2.7.8:6.3.4:6.3.3 +7148 4.4.1:2.3.1:4.3.1 +7149 2.3.1:4.1.1:3.1.2:3.5.1:6.3.2:2.7.4:1.2.1:5.3.1:3.5.1 +7150 2.3.1:4.2.1:4.3.1:4.3.1:4.1.1:6.2.1:2.7.1 +7151 2.7.7:2.3.3:6.3.4 +7152 9.9.9:5.5.1:2.7.1:2.3.1 +7153 2.3.1:1.5.1:2.4.1:4.1.1:2.5.1:1.1.1:2.1.1:2.6.1:3.1.3 +7154 2.7.2:2.7.6:1.17.4:2.6.1:3.5.3:4.1.1 +7155 4.2.1:2.1.1:6.3.4:3.2.1:1.1.1:5.4.2:5.4.2 +7156 2.7.7:2.7.4:3.1.3:2.1.4:3.5.4 +7157 2.7.6:1.3.1:2.3.1:4.3.2:2.7.8 +7158 2.7.2:2.3.1:2.3.1:3.5.1:3.2.2 +7159 6.3.4:1.1.1:4.1.1:5.4.2:2.7.2:2.4.2:2.7.2 +7160 6.3.4:1.4.1 +7161 1.1.1:2.3.1:1.3.1:2.1.2:2.1.3 +7162 2.7.6:2.1.2:5.3.1 +7163 2.2.1:2.4.2:5.1.1 +7164 1.2.1:4.3.1:5.3.1:3.5.5 +7165 3.5.3:6.3.2:4.3.1:4.1.3:1.5.99:1.1.1:1.5.1:2.7.1:3.4.13:2.1.2:2.3.1:5.1.2 +7166 1.1.1:5.4.99:5.3.1:3.5.1:5.3.3:2.3.1 +7167 5.3.1:6.3.3:4.1.1:4.1.3:2.4.2:2.7.2:4.2.1:1.14.13:3.2.1:2.3.1:2.7.6:2.1.2 +7168 2.5.1:3.6.1:2.5.1:1.2.1:4.2.1 +7169 1.2.1:1.1.1:3.5.3:4.1.1 +7170 5.4.2:3.1.3:1.2.1:2.1.1 +7171 1.2.1:1.14.12 +7172 1.1.1:3.5.1:6.3.5:4.1.2:6.1.1:2.3.3:6.4.1:3.5.1:2.4.2:4.2.1:2.7.2 +7173 2.3.1:5.1.2:1.4.1:6.3.4:1.1.1:2.7.1:2.6.1:1.1.1:5.4.99 +7174 4.2.1:4.2.1 +7175 4.4.1:3.5.3 +7176 2.1.1:2.3.3:4.2.1:1.2.1:4.4.1:2.5.1:3.5.2:2.4.2:5.4.2 +7177 6.3.2:5.4.99:4.3.2:6.3.5:5.1.1:2.7.2:2.7.8:6.3.5:3.1.4:6.3.4:4.4.1:2.7.1 +7178 3.1.2:2.6.1 +7179 2.6.1:2.6.1:2.7.1:1.4.1:6.3.3 +7180 2.7.8:2.3.1:3.5.3:1.2.1:5.4.99:4.4.1:4.1.1 +7181 1.2.1:2.3.1:1.17.4 +7182 2.5.1:2.7.1:3.5.1:2.5.1 +7183 1.14.99:2.7.7:2.3.3:4.1.1:6.2.1 +7184 5.4.2:1.7.2:1.3.1:1.5.1:5.4.2:4.1.1 +7185 2.1.1:1.1.1:2.4.2:4.1.2 +7186 1.8.1:3.5.3:3.5.1:6.3.3:4.1.2 +7187 6.3.2:2.7.1:1.2.4:2.7.1 +7188 1.2.1:1.1.2:4.3.1 +7189 4.1.2:1.4.1:4.4.1:2.6.1:6.3.2 +7190 2.7.2:2.5.1:4.2.3:1.1.1:1.5.1:5.3.1 +7191 6.3.5:1.5.1:1.18.-:3.6.1:6.3.4:1.7.2:2.4.2:1.4.1 +7192 2.7.1:1.2.1:2.7.1:9.9.9:2.7.1 +7193 1.2.1:2.3.1:3.6.1 +7194 3.2.1:2.1.1 +7195 2.7.2:2.7.1:6.3.4:2.4.2:1.1.1:2.6.1 +7196 2.4.1:4.1.3:5.4.2 +7197 6.3.3:4.3.2:2.1.1:2.1.2:1.3.99:5.1.3:2.3.1:3.2.1:3.5.1:4.1.1:1.1.1 +7198 2.7.2:4.1.2:5.4.1:3.5.1:5.3.1:4.1.3:6.3.4:4.2.1 +7199 1.1.1:4.1.1:1.1.1:2.7.1:1.8.1:1.5.99:4.1.1:3.1.7:2.5.1:1.1.1 +7200 2.5.1:4.2.1:4.2.1:2.5.1:6.4.1:3.1.3 +7201 2.5.1:1.2.5:4.3.2:1.17.1:4.1.1:3.6.1 +7202 2.5.1:3.6.1:1.5.1:1.5.1:4.2.1:4.2.1:3.5.3:1.1.1:5.3.1:2.7.4:3.1.3:1.2.1:1.1.1:2.7.4:6.3.2:1.3.99 +7203 4.3.2:6.3.2:2.6.1:1.2.1:3.5.3 +7204 3.1.3:2.7.2:2.8.1 +7205 2.4.2:2.6.1:2.7.1:6.3.2:4.3.2 +7206 4.1.1:3.5.1:2.3.3:2.7.2:4.3.2 +7207 1.2.1:4.2.1:6.2.1:6.3.5 +7208 3.1.4:1.5.1 +7209 1.7.1:4.1.3:6.3.5:3.5.1:6.3.2 +7210 2.7.4:1.4.1:1.5.3:4.3.1 +7211 4.1.1:2.3.1:6.3.5 +7212 1.1.1:1.1.5:6.3.4:2.4.1:2.7.4:3.5.4:4.3.1 +7213 5.3.1:1.8.1:1.4.1:1.5.1:4.1.1:1.8.1:2.5.1 +7214 4.2.1:2.3.3:2.7.1:2.3.1:1.1.1 +7215 2.7.8:2.7.6:6.4.1:4.1.1 +7216 5.3.1:1.3.99:1.1.1:2.5.1:3.5.2 +7217 1.1.1:2.6.1:4.1.1:2.7.8 +7218 1.4.1:2.6.1:1.5.3:3.5.3:1.2.4:2.1.1:2.5.1:2.3.1:2.1.2:6.3.4:3.1.3:6.4.1:3.1.1 +7219 1.2.1:6.3.4:4.6.1:2.5.1 +7220 2.7.4:2.5.1:2.5.1:1.1.1:3.1.3:3.5.2:1.1.1:5.4.2:6.3.3:4.3.2:6.2.1 +7221 3.6.1:1.7.99:1.11.1:2.7.1:2.7.4:4.3.1:4.3.1:2.7.7:5.4.2 +7222 1.1.1:1.8.1:6.3.4:3.5.4 +7223 4.3.1:4.2.-:2.1.3:4.2.1:1.3.99 +7224 1.2.1:1.7.99:2.7.7:3.1.3:3.2.2:2.6.1:2.7.1:4.3.2:5.3.1:3.5.5:2.1.3:2.5.1 +7225 2.7.7:3.6.1:4.3.2 +7226 4.1.2:2.5.1:3.2.1:2.7.2:2.7.7:2.7.1:1.2.1:5.4.2 +7227 4.99.1:3.1.1:1.1.1:2.6.1:4.1.2:3.5.1:4.1.1 +7228 5.4.99:3.1.3:4.2.3:3.6.1:2.3.1 +7229 6.2.1:1.1.1:2.7.8:2.7.2:1.5.1 +7230 5.2.1:4.3.1:2.7.2:2.7.2:4.2.1 +7231 2.3.3:2.3.1:5.3.1:3.2.1:1.1.3:3.4.13 +7232 3.4.11:2.7.4:4.1.2 +7233 2.5.1:1.1.1:6.3.5:2.7.1:4.1.2 +7234 2.3.1:1.5.99:2.7.2 +7235 5.3.1:2.1.1:2.8.1:2.1.1 +7236 2.6.1:2.7.1:6.3.4:4.3.1:6.3.2 +7237 5.1.3:4.1.2 +7238 1.4.4:3.5.4:6.3.1:2.5.1:4.3.1 +7239 4.1.2:2.8.3:2.4.2:2.7.4:3.5.4:5.4.99 +7240 2.7.1:4.1.2:2.7.6:6.3.4:2.7.6:2.7.1:5.3.1 +7241 3.5.99:3.1.3:6.3.4:4.3.1:2.7.1:3.1.3:2.4.2 +7242 2.3.1:4.1.2:3.1.7:4.1.1:4.1.2 +7243 2.3.3:1.1.1:2.3.2:1.4.1:2.3.1:3.5.4:1.4.1 +7244 1.5.1:2.7.1 +7245 5.-.-:4.1.1 +7246 4.1.2:3.1.2:1.1.1:3.1.3:2.6.1:4.1.1:2.7.6:4.1.1:2.1.2:4.1.1:3.1.3:4.1.1:3.6.1 +7247 2.7.7:2.2.1:2.4.1:2.4.2:3.1.3:6.3.2:2.6.1 +7248 2.5.1:3.4.11:2.6.1:5.4.99:1.2.1 +7249 2.6.1:3.5.4:2.1.1:4.1.1:4.3.1 +7250 2.3.1:1.4.3:4.3.2:2.1.4:2.7.1 +7251 4.1.1:2.7.1:2.7.1 +7252 2.7.1:5.3.1:4.1.2:4.3.2 +7253 2.3.1:3.6.1:5.1.3:2.1.2:2.1.1:1.2.4:2.5.1:5.1.3:5.1.3:3.5.4:3.2.1 +7254 2.6.1:1.5.1:1.1.1:4.2.1:4.2.3:1.1.1:4.1.1 +7255 2.4.2:4.3.2:5.4.99:2.7.9 +7256 4.2.1:2.3.1:4.2.3:5.3.1:5.3.1 +7257 2.7.7:1.5.1:1.4.1:1.2.1:2.7.4:6.3.2:1.3.99:4.1.1 +7258 3.5.1:6.3.3:5.4.3:4.3.1:5.4.99:4.3.2 +7259 5.5.1:1.7.99:4.1.1:1.1.1:5.4.2 +7260 2.7.1:1.2.1:4.2.3 +7261 2.4.1:2.5.1 +7262 3.5.3:2.8.3:3.3.1 +7263 2.3.1:2.4.2:2.5.1:3.6.1:2.5.1:1.2.1 +7264 2.7.1:2.7.8 +7265 3.4.13:4.99.1:1.1.1:4.2.1:2.5.1:3.1.3:5.4.99:1.1.1:9.9.9:2.7.1:1.2.4:2.7.1 +7266 1.5.3:2.6.1:2.3.3 +7267 1.1.1:3.5.3 +7268 4.1.1:4.3.2:4.1.1:2.6.1:2.7.1 +7269 1.5.1:1.1.1:2.7.2:2.7.7 +7270 2.7.2:3.1.3:2.4.2:1.2.1:2.1.1:6.2.1 +7271 9.9.9:2.1.2:2.1.2:3.3.1 +7272 4.3.1:2.7.9:3.1.2:4.1.1 +7273 4.4.1:2.5.1:1.13.11:2.7.1 +7274 1.4.1:2.6.1:4.1.1:1.1.1:1.4.1:2.1.2:1.17.4:6.3.4 +7275 2.1.3:2.7.1:6.2.1:6.2.1:1.1.1:5.4.99:6.2.1 +7276 3.5.1:4.3.2:2.7.1:2.7.7:4.2.1:2.7.7:1.4.1 +7277 2.3.1:1.14.12:1.2.4:5.4.3:3.5.3:4.1.1:1.3.1:6.4.1 +7278 3.5.1:3.6.1:3.5.3:2.7.2:3.6.1 +7279 1.4.1:6.2.1:2.3.1:6.3.2 +7280 2.6.1:6.3.4:2.6.1 +7281 6.3.4:3.1.2:4.1.1:4.2.1:4.3.2:3.5.1 +7282 3.5.1:2.7.8:3.5.99 +7283 2.7.2:2.3.1:2.6.1:1.1.1 +7284 2.7.1:2.7.1 +7285 1.5.1:2.6.1:4.1.2:2.7.1:4.1.2:3.5.4:2.5.1:6.3.3:2.1.2 +7286 5.4.2:1.2.1:2.6.1:2.4.2:3.1.3:5.4.2:2.3.3:2.5.1:1.4.1:2.7.8 +7287 4.2.1:2.6.1 +7288 1.1.1:6.1.1:3.4.11:1.5.1:2.4.2:2.6.1 +7289 4.1.1:2.1.2:1.3.1 +7290 1.1.2:3.1.2:2.7.7:1.5.99:3.5.1:2.3.1:5.1.3:3.5.1:2.1.2 +7291 3.1.1:6.3.4:2.3.1:6.1.1:3.5.1:2.3.1:5.4.2 +7292 2.3.1:1.4.3:5.3.1:1.1.1 +7293 6.3.4:1.2.1:1.2.1:5.3.1:4.1.1:2.7.8 +7294 2.7.1:2.7.7:2.1.2:3.1.3:1.5.1:2.7.1 +7295 2.7.2:2.1.3:3.1.3:2.1.1:1.1.1:4.1.2 +7296 4.2.1:6.3.5:2.5.1:2.5.1:4.1.1 +7297 1.1.1:2.3.1:6.3.5:1.2.1:4.3.2:2.7.2:2.7.1:3.6.1:2.6.1:4.3.1:5.3.1:3.6.1:2.6.1 +7298 2.4.1:1.3.1:2.3.1 +7299 5.3.1:4.1.1:3.6.1:4.1.2 +7300 2.1.3:2.7.1:2.3.1 +7301 2.3.2:4.2.1:4.4.1:5.3.1:1.3.99:1.4.1:2.7.1:4.1.1:4.2.1:2.7.7 +7302 1.7.2:3.1.4:3.5.1:2.7.4:1.1.1 +7303 2.1.3:5.1.3:2.1.3:5.1.1:9.9.9 +7304 2.7.2:1.4.3:1.4.1:3.1.1:5.4.2:3.2.2 +7305 2.7.2:2.8.1:2.6.1:5.4.2 +7306 1.2.1:2.4.2:4.3.2:2.6.1:2.7.4 +7307 2.7.7:1.1.1:4.3.2:5.4.2 +7308 5.4.2:4.3.2 +7309 2.3.1:2.7.2:1.3.3:1.2.1:3.6.1:4.2.1 +7310 2.7.1:5.1.3 +7311 1.1.1:1.1.1 +7312 1.2.1:5.3.1:2.4.2:2.1.3:1.2.1:4.2.3:2.1.2:2.1.2:1.1.1:5.4.99:6.3.4 +7313 6.3.3:4.3.2:6.3.4:2.7.7 +7314 4.1.1:2.5.1:3.5.1:3.1.5:2.7.1:2.1.2 +7315 2.6.1:2.4.2:4.3.2 +7316 3.6.1:1.1.5:2.3.1:1.2.4:3.5.3 +7317 5.4.99:1.1.5:6.2.1:2.4.1:2.1.1:3.6.1:3.1.3:1.1.1 +7318 1.4.1:2.1.2:4.1.3:4.1.1:2.5.1:4.1.1:1.2.1 +7319 2.5.1:2.7.1:5.1.3:4.1.3:2.5.1:5.4.99 +7320 5.4.2:2.5.1:4.1.1:2.7.1:2.1.1:1.1.1:3.5.1 +7321 4.2.1:4.2.1:1.2.4 +7322 4.2.1:4.2.1:6.2.1:3.5.1 +7323 5.3.1:6.3.3:1.1.1:6.3.4:1.2.1 +7324 3.4.13:2.7.1:2.6.1:3.2.1:5.4.99:1.5.1:1.5.3 +7325 2.1.4:3.5.2:4.2.3:4.3.1:3.2.1 +7326 3.6.1:5.5.1:1.2.1 +7327 2.1.1:4.3.2:6.2.1:6.3.4:4.3.2:2.7.2:2.6.1:2.7.7:4.3.1:2.6.1 +7328 2.3.3:3.6.1:2.2.1:2.6.1 +7329 6.4.1:2.6.1:1.5.1 +7330 1.17.4:6.3.1:5.1.3 +7331 3.5.1:4.1.2 +7332 2.7.2:6.2.1:6.3.5:3.1.2:3.5.1:4.2.3 +7333 2.5.1:5.4.99:4.3.1:2.4.2:3.1.3:4.1.3:4.1.2:4.1.1:2.1.2:2.3.1 +7334 3.1.1:4.2.3:1.1.1:4.1.2:3.2.2:5.3.1 +7335 6.3.4:2.5.1:5.4.99:2.3.1:4.1.99:2.7.8:6.3.4:2.3.1 +7336 3.6.1:4.1.1:2.5.1:1.2.1:2.7.1:2.1.1:4.1.2 +7337 1.4.1:1.2.1:4.4.1:4.1.1:2.7.2 +7338 6.2.1:4.2.1:2.7.1 +7339 2.1.3:2.7.7:2.5.1 +7340 2.3.1:1.7.1:3.5.1 +7341 9.9.9:6.3.5:2.3.1:1.17.4 +7342 4.4.1:1.4.1:4.2.3:2.3.3:4.3.1 +7343 6.2.1:4.1.1:2.7.2:2.6.1:3.1.1:2.3.1:4.3.1:2.3.1:2.2.1 +7344 3.5.3:2.3.1:6.3.4:3.1.3:1.2.4:2.7.1:1.1.1:2.7.4:6.3.1 +7345 2.5.1:1.14.11 +7346 4.3.2:2.3.2:2.1.1:1.1.1:6.3.2 +7347 1.3.99:5.1.3:2.7.2:2.6.1:2.7.2 +7348 3.4.11:2.7.1:2.3.1:6.3.4:1.2.4:2.1.1:2.3.1 +7349 1.2.4:4.3.2:2.4.2 +7350 4.3.1:3.1.3:4.1.1:2.6.1:2.7.4 +7351 1.1.1:3.4.13 +7352 4.3.2:6.4.1:2.7.9:5.3.1:2.7.1 +7353 5.1.3:2.7.7:4.3.1:5.3.1:2.7.1:2.3.1:1.17.4:6.3.2 +7354 1.1.1:2.7.6:2.6.1:4.1.2:2.7.1:6.3.4:3.6.1:4.2.1 +7355 6.3.5:2.5.1:2.3.1:2.7.1:1.7.99 +7356 2.3.1:2.4.2:1.2.1:2.1.1:4.2.1 +7357 2.4.1:2.3.3:2.5.1 +7358 5.4.99:3.1.3 +7359 3.5.1:3.1.1:4.1.3:4.2.3:6.3.5 +7360 3.6.1:3.1.5:6.3.2:4.2.-:2.7.1 +7361 2.1.1:2.4.2:6.3.2:3.6.1:2.4.2:4.2.1:3.1.3:1.1.1 +7362 2.4.2:2.1.2:4.2.1:6.3.4 +7363 2.5.1:2.7.2:3.5.2 +7364 2.1.1:3.1.3:4.1.3:4.2.1:2.6.1:2.7.2:5.4.99:4.1.1:2.1.1 +7365 2.7.1:6.2.1:2.3.1:6.3.4:1.4.3:1.14.13:1.2.5 +7366 1.2.4:4.3.1:1.3.99:2.1.2:4.1.2:2.1.3 +7367 1.1.1:2.7.1:4.1.1 +7368 4.1.1:2.6.1:1.2.4 +7369 4.2.3:4.1.1:4.3.1:1.1.1 +7370 2.7.6:2.5.1:4.1.1:2.3.1:2.1.2:1.13.11:2.7.4 +7371 1.5.1:5.4.2:4.1.3:1.1.1:2.7.1 +7372 6.3.4:2.7.2:3.5.1:2.7.6 +7373 2.9.1:1.2.1:6.3.4:6.3.4:3.5.1:3.5.1 +7374 2.7.7:3.1.3:2.4.2:2.3.1 +7375 2.7.7:3.4.13:3.6.1 +7376 2.4.2:6.3.2:6.3.3:3.5.4:2.3.1 +7377 2.3.2:3.5.4:3.5.2:3.5.4:4.4.1 +7378 4.3.1:5.4.99:2.6.1 +7379 3.6.1:3.5.2:4.3.1 +7380 2.6.1:2.1.1:2.6.1:2.2.1 +7381 4.4.1:2.3.1:6.3.4 +7382 6.3.2:5.3.1:2.4.2:3.1.5:4.2.1 +7383 3.1.2:1.1.1:2.7.1:6.3.5:6.3.4:3.1.1 +7384 2.3.1:6.3.1:2.7.4:3.2.2:4.1.2:2.7.1:4.1.1:1.5.1 +7385 4.6.1:6.3.4 +7386 4.3.1:2.1.1:2.3.1:5.3.1 +7387 2.1.2:4.3.1:2.1.1:2.7.2:3.1.3 +7388 1.14.13:1.4.1:4.4.1:1.4.1:5.4.2:1.13.11:1.2.7:3.5.3:2.7.7 +7389 2.3.1:4.1.1:2.7.7:4.1.2 +7390 2.7.2:4.1.2:2.7.2:9.9.9:4.3.1:1.1.1:2.7.4 +7391 9.9.9:2.1.3:3.5.4:3.5.1:4.1.1:4.1.1 +7392 6.3.4:2.1.3 +7393 2.7.4:1.4.99:1.2.1 +7394 2.7.1:3.6.1:2.7.6:5.1.2:1.18.6:6.1.1:1.3.99 +7395 2.7.1:1.14.12:1.7.99:3.5.3:4.3.1:2.1.1:2.7.1 +7396 4.1.1:1.2.1:2.5.1:2.3.1:4.2.1:2.7.1:2.7.7:4.1.1 +7397 2.3.1:3.7.1 +7398 5.4.99:4.2.1:4.1.1:5.4.99 +7399 2.7.1:5.1.3:3.5.1:5.4.2:4.3.2:2.1.3 +7400 2.4.2:2.3.1:1.2.1:3.5.5:2.3.1 +7401 2.1.3:2.2.1:2.7.1:1.13.11:4.2.1:6.3.4 +7402 4.2.1:6.3.2:4.1.2:2.4.2:4.1.3:2.8.1:4.3.1:4.2.1:1.1.1:5.4.2:2.7.1 +7403 1.2.1:2.7.1:4.4.1 +7404 3.5.1:2.5.1:1.1.- +7405 6.3.2:4.1.2:3.6.1:4.1.1 +7406 6.2.1:3.5.1:3.5.1:2.5.1 +7407 3.1.3:6.3.2:2.7.7:3.5.1:1.1.1:2.1.3:1.1.1:4.2.1 +7408 3.1.1:1.1.1:2.3.1:4.2.1:4.4.1:2.4.2:6.3.5:3.1.3:4.4.1 +7409 5.3.1:4.2.3:3.6.1:4.3.2 +7410 1.1.1:2.7.2:4.1.1:2.7.4 +7411 4.2.1:5.4.2 +7412 2.7.2:1.13.11:5.3.1:4.1.1:4.1.1:2.7.1 +7413 4.2.1:4.1.3:2.1.2:1.1.1:2.7.6 +7414 1.5.1:2.1.2:2.7.2:2.5.1 +7415 2.3.1:1.1.1:2.7.6:6.3.3:2.7.4:2.3.1 +7416 4.3.2:3.13.1:1.17.4:4.1.1:2.7.2:4.4.1:2.7.7:2.7.6 +7417 2.3.1:2.3.1:2.7.1:4.1.1 +7418 4.3.2:1.5.1 +7419 3.5.1:2.7.6:2.5.1:2.1.1:2.7.2 +7420 2.6.1:2.4.2:3.6.1:2.6.1:6.4.1:6.3.4:6.3.1:2.1.4 +7421 1.8.1:2.7.2:2.1.3:3.6.1:2.7.2:6.3.4:5.4.99:5.3.1:6.2.1:3.1.1:1.7.2 +7422 5.4.2:2.4.1:1.4.1:4.4.1:2.7.1:4.2.1:2.1.2:2.3.1 +7423 5.1.1:2.4.2:2.5.1 +7424 1.1.1:2.3.1:2.4.2:1.4.1 +7425 2.7.6:3.6.1:4.3.2:2.8.1:4.2.1:3.2.2 +7426 3.2.1:3.1.2:1.5.1:2.6.1 +7427 2.7.1:2.5.1:5.1.3:6.3.4:6.3.1 +7428 4.1.2:2.7.1:2.7.1 +7429 2.6.1:6.3.4:2.7.9:2.7.2:4.1.1:1.1.2:2.5.1:1.4.4:2.3.1 +7430 1.2.1:1.1.1:5.3.1:1.14.13:5.3.1:2.8.3:1.7.2 +7431 2.7.2:4.1.1:2.4.2:3.1.3:1.13.11:2.7.1 +7432 3.1.3:2.7.7:3.5.3:2.3.1:2.3.1 +7433 2.7.1:2.7.7:3.6.1 +7434 2.5.1:1.1.2:2.6.1:5.4.2:2.4.2:3.5.1:2.6.1:2.1.2 +7435 2.3.1:3.5.1:4.1.1 +7436 1.4.1:2.7.8 +7437 2.3.1:4.1.2:2.5.1:2.4.2:2.7.1:1.-.- +7438 4.3.1:4.1.2:4.1.3:2.1.3:3.5.5 +7439 2.7.1:1.1.1:2.7.1:2.1.3:2.3.1:2.6.1:2.5.1:2.4.2 +7440 4.2.3:1.2.4:2.1.1 +7441 2.7.1:3.1.2:1.14.12 +7442 5.3.1:2.7.1:3.5.3:4.1.2 +7443 2.1.1:2.7.7:3.6.1:1.2.1:4.1.2:4.1.1:6.3.3:1.18.6:2.6.1:2.5.1 +7444 2.3.1:2.7.1 +7445 5.4.99:4.2.1:2.8.1:6.3.4:2.1.1 +7446 4.3.2:3.5.1:5.4.99:2.7.1:2.7.4:2.4.2:6.3.4:1.3.1:2.7.1:4.1.1:4.1.1 +7447 1.1.1:2.6.1:2.6.1:4.2.1:4.1.1:5.3.1:5.3.1 +7448 5.4.2:2.3.1:1.2.1:1.2.1:5.1.2:3.1.1:2.7.1:2.5.1 +7449 1.3.99:2.3.1:2.1.2 +7450 2.6.1:2.7.2:1.1.1:6.2.1:2.7.7 +7451 2.7.1:2.7.1:4.2.3:2.7.1 +7452 4.1.3:3.5.1:1.3.3:3.5.4:6.3.4:4.2.1 +7453 3.5.1:2.5.1 +7454 2.7.1:2.1.2:4.3.1 +7455 4.1.1:2.5.1:1.2.1:2.5.1:2.3.3:4.1.1:3.1.3:1.2.4:6.2.1 +7456 4.1.1:2.7.1:4.1.1:6.3.3:4.3.2:2.7.1:2.3.1 +7457 5.3.1:5.3.1 +7458 1.1.2:1.2.4:6.3.2:4.3.2:2.5.1:2.7.2:1.5.1 +7459 2.7.6:6.3.4:3.5.4 +7460 2.3.1:2.7.1 +7461 2.7.7:2.1.2:4.2.1:5.3.1 +7462 1.1.1:2.7.1:4.1.1:4.3.1:6.2.1 +7463 2.5.1:1.2.5:5.1.3:4.4.1 +7464 1.2.4:1.2.4:2.4.2:2.3.1:2.7.4:2.7.2:2.3.1:4.4.1:3.6.1 +7465 2.5.1:2.4.2:1.1.1:5.1.2:6.3.3:2.7.2:4.3.2:1.2.1 +7466 4.2.-:6.3.4:3.5.1 +7467 3.5.99:1.2.1:1.2.4:5.4.99:3.2.2:3.1.3 +7468 6.3.5:5.4.2:4.4.1:2.7.1 +7469 4.2.1:6.3.1:1.5.99:4.2.1:2.5.1:3.5.1:2.6.1 +7470 4.2.1:4.1.3:4.2.3:1.2.4:1.1.1 +7471 1.2.1:2.7.4:1.14.13:4.2.1:2.7.2:2.4.2:2.7.1:2.6.1:3.6.1:2.6.1:2.3.1 +7472 4.1.3:2.6.1:2.5.1:1.5.1 +7473 2.7.2:2.3.1:3.5.3 +7474 3.1.5:2.7.4:1.1.1:5.4.99:2.6.1 +7475 3.5.1:2.5.1:1.13.11:1.2.1:2.7.1:2.4.2:6.4.1:4.3.1 +7476 6.3.4:2.7.2:5.4.99:1.2.1:2.1.2 +7477 2.1.2:2.7.7:1.7.99:3.5.3:1.1.1 +7478 6.3.5:3.5.1:3.5.4:6.3.2:3.4.11:6.4.1:6.3.5:1.2.1:3.4.11:1.4.99 +7479 1.1.1:5.4.99:2.7.7:2.6.1:6.3.3 +7480 4.2.1:6.3.5:2.7.2:6.3.4:3.5.3:2.1.2:2.5.1:6.3.4:2.7.1:1.2.1:4.2.1:2.5.1 +7481 3.5.3:2.3.1:4.4.1 +7482 2.5.1:2.6.1 +7483 6.3.4:2.1.1:6.3.4:2.1.1 +7484 5.4.3:5.1.3:2.5.1:2.7.1:3.5.1:1.1.1:3.5.1:6.3.4:5.3.1:1.4.1 +7485 2.6.1:5.3.1:5.4.2:4.3.1:2.7.2:2.7.1 +7486 6.3.4:3.5.4:4.1.3:2.3.1:2.4.2:2.7.2:2.3.1:2.7.1:2.4.2:1.2.4:2.7.7:2.7.1 +7487 3.5.5:5.3.1 +7488 1.1.1:2.8.1:2.1.3:2.3.1:2.6.1:2.7.4 +7489 2.5.1:5.4.2:6.3.4:5.4.99 +7490 2.5.1:4.1.1:3.5.2:3.5.3:4.2.1:2.5.1:4.1.1:9.9.9:6.3.4:2.7.7 +7491 3.2.2:2.6.1:2.3.1:4.1.3:3.1.4:2.4.2:1.1.1:4.3.1:4.2.1:2.7.1 +7492 4.1.1:1.1.1:2.5.1 +7493 3.5.1:4.3.1:4.2.3:4.3.1:2.7.1:2.7.4:3.5.3:2.2.1:1.2.1:4.1.1:2.5.1 +7494 2.1.1:1.1.1:2.7.2 +7495 1.1.1:4.1.2:3.2.1:1.2.1:2.6.1:1.17.1 +7496 3.3.1:1.4.4:4.1.3 +7497 2.7.2:2.7.1:2.7.7:2.7.1 +7498 4.1.2:1.1.5:4.2.1:2.7.7:3.5.1:4.1.1 +7499 1.5.1:1.14.13:1.1.1:3.5.1:3.6.1:2.6.1:2.7.2:4.3.1 +7500 2.3.1:2.3.1:3.4.11:1.1.1:2.8.1 +7501 5.3.1:1.1.1:4.2.2:4.2.1:2.3.3:3.4.11:1.5.1 +7502 2.3.1:1.2.1:1.3.3 +7503 3.2.2:3.5.3:3.5.1 +7504 3.6.1:2.5.1:1.2.1:2.3.1 +7505 2.7.4:2.7.7:6.3.4 +7506 3.2.1:6.3.4:2.3.1:2.7.1:2.5.1:2.7.2:5.4.99 +7507 3.2.2:2.3.1:2.6.1 +7508 4.2.1:2.7.1:4.1.1:3.1.1 +7509 4.2.1:6.3.2:1.1.1:2.1.2:2.1.1:4.1.1:1.2.1:2.6.1:4.1.3:6.3.5:4.1.1 +7510 5.3.1:3.4.13:4.2.1:2.3.1:6.1.1 +7511 4.3.1:2.8.3 +7512 3.5.1:5.1.2:3.6.1:4.1.1 +7513 4.1.1:1.1.1:4.1.2:5.1.2:4.2.1:2.1.1 +7514 2.6.1:2.7.1:2.4.2:3.4.13:3.5.5 +7515 1.3.3:3.4.13:3.6.1:1.17.4:1.2.1:4.1.1 +7516 4.4.1:4.1.2:2.3.1:6.3.4:3.5.1:2.5.1 +7517 3.1.3:2.4.2:6.2.1:5.1.3 +7518 4.1.1:1.3.1:3.1.3:6.3.5:3.3.1:4.1.3:6.3.4:3.1.1:2.4.2:2.7.8:2.3.1:4.2.1:1.1.2 +7519 4.1.1:2.7.2:4.2.3:6.3.5:1.17.4:1.1.1:1.17.1 +7520 1.3.99:1.1.2:6.3.4:3.5.1:3.2.2:1.3.3:5.1.1:4.3.1:2.4.1 +7521 3.1.4:4.3.2:1.8.4:2.7.4:2.3.1:3.5.1:6.2.1:2.7.1:6.3.4:4.2.3 +7522 9.9.9:6.3.4 +7523 4.1.1:2.1.3:1.2.1:6.3.4:6.3.1:2.4.2:3.5.1:2.1.2 +7524 2.5.1:4.1.2:1.14.13:2.7.4 +7525 1.2.1:4.1.2 +7526 3.5.3:4.1.1:4.2.1 +7527 2.5.1:2.7.1:4.2.3:2.7.1:1.2.1 +7528 2.5.1:2.7.2:6.3.4:4.1.1:2.7.1:2.7.6:3.6.1:1.17.4:5.1.3 +7529 4.2.1:1.1.1:1.1.1:4.1.1:2.1.1 +7530 2.4.2:2.6.1:1.2.1:1.3.99:3.5.3 +7531 2.3.1:4.3.2 +7532 4.2.1:2.3.1:2.7.1:2.7.4:2.4.2 +7533 4.2.3:1.2.4:3.6.1 +7534 4.2.1:1.2.1:4.1.3:4.1.2 +7535 6.2.1:4.4.1:1.17.4:6.3.5:3.6.1 +7536 3.6.1:2.3.1 +7537 3.1.1:4.1.1:6.3.4:5.1.2:2.7.4:2.1.1:6.3.2:2.1.2:4.1.2 +7538 2.7.1:4.1.3:4.2.- +7539 4.2.3:4.1.1:4.2.3:2.6.1:2.4.2:2.7.1 +7540 3.1.2:2.1.3:6.3.4 +7541 4.1.1:2.6.1:2.1.3 +7542 1.8.1:4.6.1:6.3.4:3.5.1:6.3.4 +7543 4.3.2:6.3.2:2.5.1:2.1.2 +7544 3.5.2:5.4.2:4.3.1 +7545 5.4.2:3.1.3:2.7.1:4.1.1:1.2.1:5.1.3:1.2.1:1.4.1 +7546 2.7.1:6.3.2:3.1.3:3.4.11 +7547 2.7.2:1.1.1:2.5.1 +7548 2.7.2:4.2.3:6.3.4:4.4.1:3.6.1:3.1.5:2.1.2:2.3.1 +7549 3.1.3:5.4.99:4.2.1:3.4.11 +7550 2.6.1:1.7.1:4.3.2:2.7.2:2.6.1:4.1.1:3.1.1:2.6.1:2.7.4:2.7.1 +7551 2.4.2:1.1.1:4.1.3:3.5.1:2.6.1 +7552 1.1.1:2.7.2:4.1.1:4.3.1:4.2.1:1.3.99 +7553 5.4.99:2.3.1:2.4.2:1.3.1:2.2.1:2.5.1:1.2.7:4.1.3:2.5.1:3.4.13:6.3.5 +7554 1.5.99:1.2.1:4.1.1 +7555 4.1.1:4.2.1:6.3.5:6.2.1:3.5.4 +7556 4.1.1:4.1.3:1.2.4:4.1.1:2.7.6:6.3.1:2.1.2:2.4.1 +7557 9.9.9:5.4.2:4.1.2:4.1.2:6.2.1 +7558 2.6.1:4.1.1:1.4.1:4.2.1:3.6.1:6.3.4:1.3.3 +7559 9.9.9:1.2.4:6.3.2:2.3.3:4.2.1:6.3.2:2.3.1:1.4.1:2.3.1 +7560 2.4.2:4.2.1:1.1.2:3.5.1 +7561 2.3.1:3.5.4:2.6.1:5.3.1:2.3.1:1.5.1 +7562 4.3.2:2.1.1:2.4.1 +7563 3.1.3:1.7.2:4.1.1:2.5.1:2.3.1 +7564 1.8.1:2.7.2:1.2.1:1.4.1:6.3.4:3.1.2:2.6.1:2.3.1:3.6.1 +7565 2.7.7:4.4.1:1.2.1:3.5.3:4.1.1:2.3.1:2.1.1:3.2.2:1.4.1:2.1.2 +7566 1.1.1:1.2.5:1.5.1:2.7.1:4.2.1:2.1.1:2.7.1:2.4.2 +7567 5.-.-:2.7.1:2.4.2:3.5.1:4.3.1 +7568 1.1.1:2.7.1:2.7.1:1.7.99:2.4.2:6.3.5:1.1.1:5.4.99:5.1.3:5.1.3:2.6.1:4.2.1 +7569 2.7.2:6.4.1 +7570 2.7.1:2.4.2 +7571 2.7.2:2.5.1:2.6.1:1.2.1:2.7.1:3.5.1:2.5.1:3.4.11:5.4.99:3.1.3:6.1.1 +7572 2.6.1:2.7.7:4.1.1:2.1.2:2.1.3:1.1.1:2.7.1:2.5.1:1.3.99:4.1.1:2.7.6 +7573 1.2.1:3.1.3:4.2.1:2.7.7:1.1.1:3.5.1:2.1.4:6.4.1 +7574 4.3.2:4.1.3 +7575 1.2.1:1.4.1:3.1.3:2.4.2:6.3.5:3.1.4:2.6.1 +7576 2.8.1:2.4.2:2.6.1:4.1.1 +7577 4.1.3:1.1.1:2.5.1:4.1.1:1.1.1:2.7.6:2.3.1:3.2.1 +7578 1.17.4:4.1.1:1.4.3 +7579 4.1.2:2.4.1:2.6.1 +7580 2.7.2:2.5.1:3.2.1 +7581 2.7.8:2.7.1 +7582 4.1.1:1.3.99:1.1.1 +7583 2.5.1:2.7.2:2.7.6:5.4.99:1.1.1:2.5.1:2.1.2:1.2.4:4.1.1 +7584 2.1.2:4.1.1:3.1.3:6.3.4:2.3.1:4.2.1 +7585 2.7.7:3.1.3:2.1.2:4.1.2:3.5.1 +7586 4.3.1:6.2.1:4.3.1:4.4.1:1.14.13:6.3.5 +7587 1.1.1:2.6.1:1.5.1:3.1.4 +7588 3.1.3:2.1.3:2.5.1 +7589 4.1.1:2.3.1:2.6.1 +7590 6.4.1:1.3.99:3.5.3 +7591 6.3.4:3.5.99:2.7.2:2.7.1:1.1.1:2.7.2:6.3.3:2.1.2:2.1.3:4.4.1:2.7.7:2.7.2:5.4.99:2.1.3:1.1.1 +7592 6.3.2:1.5.1:4.2.1 +7593 1.2.1:3.1.2:4.2.1:3.5.1:2.2.1:4.1.3 +7594 2.3.3:2.3.3:1.8.4:1.7.99 +7595 2.1.3:2.4.2:1.2.1 +7596 4.2.1:4.3.2:2.5.1 +7597 2.3.1:2.7.1:1.3.3:1.2.1 +7598 2.7.4:2.7.7:4.3.1 +7599 1.3.3:4.4.1:1.1.1:1.1.1:1.3.99 +7600 2.4.2:2.6.1:4.2.1:2.7.1:4.1.2:1.2.7:1.3.3:1.1.2:6.2.1:2.4.2 +7601 6.4.1:4.1.1:1.4.1:4.1.1:4.3.2 +7602 2.7.1:2.7.4:2.6.1:2.5.1:4.2.3 +7603 6.3.4:6.3.4:1.2.1:2.5.1:4.2.1:4.4.1:4.1.2:2.3.1:2.7.7:4.1.3:1.1.1:2.5.1 +7604 4.4.1:3.1.3:2.7.1:6.3.2:3.6.1:2.5.1:9.9.9 +7605 2.1.1:2.7.1:1.13.11:4.1.1 +7606 9.9.9:4.1.2:2.7.4:2.3.1:2.5.1:3.5.3:2.7.1:2.7.8 +7607 1.5.1:4.2.1:1.5.99:5.4.2:1.13.12:4.1.3:3.1.2:1.2.1 +7608 2.7.1:2.7.1:6.3.5:2.5.1:2.5.1 +7609 4.1.1:2.4.2:6.3.4:9.9.9:2.7.2:6.3.5:2.7.1:3.5.1:2.7.7:4.1.1:2.7.1:4.2.3:6.3.3:4.1.2 +7610 9.9.9:3.5.1 +7611 2.3.1:4.1.2:4.1.2:3.5.1:2.7.1 +7612 1.2.1:4.1.2:1.1.1:4.2.1:3.5.3:2.1.3:4.1.3 +7613 6.4.1:2.4.2:2.7.1:2.6.1:1.1.1:1.13.11:4.2.1:4.1.3 +7614 2.7.2:3.2.1:2.7.1:6.3.2:5.4.2:2.6.1:2.4.2:3.1.1:2.8.1:3.5.1 +7615 1.1.1:2.7.2:1.2.4:1.1.1:2.7.1 +7616 2.7.7:1.1.1:2.1.3:2.7.1:4.1.1:3.2.1 +7617 2.7.1:2.5.1 +7618 4.2.1:1.2.1:4.1.1 +7619 6.3.2:2.3.3:2.1.1:3.3.1:1.1.1:2.6.1:3.5.3:3.5.1:5.1.3:2.6.1 +7620 1.17.4:1.7.99:4.3.2:2.4.2 +7621 1.3.3:2.4.2:1.1.1:1.1.1:2.3.1:2.4.2 +7622 2.4.2:6.3.4:2.3.1:3.5.4:1.2.1 +7623 1.7.99:6.4.1 +7624 2.7.7:2.7.2:2.3.1:5.4.2:2.7.1 +7625 2.3.1:6.3.2:2.5.1:4.1.1:6.3.2:2.1.1:4.2.1 +7626 2.1.3:2.1.2:2.3.1:4.1.2:5.4.2 +7627 3.2.1:1.7.99:6.3.2:6.3.3:3.1.1 +7628 3.1.4:2.1.1:1.4.1:5.1.2:5.3.1:5.3.1:2.7.1:6.3.4:2.5.1 +7629 6.3.4:6.3.2:3.6.1:2.7.6:1.5.1 +7630 1.2.1:1.1.1:2.3.1:4.3.2:2.5.1:1.5.1 +7631 2.5.1:1.1.1:4.2.1:2.3.3:2.3.1 +7632 2.1.1:2.3.1:2.3.1:2.7.4:1.8.1:6.3.4:2.4.2:2.7.2:2.5.1:2.7.1 +7633 1.1.1:2.5.1:4.1.1:2.7.1:3.5.3:4.3.2 +7634 2.8.1:5.4.2:2.6.1:4.1.1 +7635 2.7.4:6.3.4:1.1.5:1.1.1:4.3.2:5.1.3:1.8.1:4.2.3:3.6.1 +7636 5.4.2:1.7.2:4.1.1:6.3.2:1.4.1:1.2.4 +7637 3.5.1:4.2.1:3.5.1:5.4.2:4.3.1:1.2.4:1.4.4:4.1.2:1.5.99:4.1.1:3.5.3 +7638 3.5.1:4.1.1:1.5.1 +7639 2.6.1:6.3.4:4.1.2:2.7.9:4.1.1 +7640 6.3.4:2.3.1:5.4.1:2.4.1:2.7.2:1.1.1:2.7.1:4.3.1:2.1.1:2.6.1:6.3.3:1.1.1 +7641 1.8.1:4.1.1:2.7.4:5.4.2:4.2.3 +7642 5.4.3:2.5.1:5.4.2:2.3.3:3.1.3:1.1.5:2.7.1 +7643 1.17.4:1.2.4:2.4.2:1.1.1:3.4.11:4.1.2 +7644 1.4.1:2.7.2:1.2.1:3.2.1:2.3.1:1.2.4:1.5.1:4.4.1:2.3.3:2.6.1:3.1.1:2.5.1:2.3.1 +7645 2.7.1:4.1.1:3.5.1:2.3.1:3.1.2:2.7.9:4.2.1:1.1.1 +7646 2.7.2:1.3.99:6.3.3 +7647 1.7.1:6.3.5:1.4.1:2.1.1 +7648 2.3.1:2.7.1:3.4.13:1.5.1:3.5.1:4.1.1 +7649 2.7.2:2.7.4:4.2.-:2.5.1:2.3.1:4.3.1:3.5.1:2.7.2:1.1.1:2.3.3:5.4.2:1.8.1 +7650 2.7.1:4.1.3:3.6.1:6.3.2 +7651 3.1.3:6.3.2:2.7.1:6.3.4:2.7.2:4.3.2:2.7.8:4.3.2 +7652 3.1.3:5.3.1:2.3.1:1.4.1:3.1.7:3.6.1 +7653 4.1.99:3.1.3:6.3.2:3.1.5 +7654 4.99.1:4.3.1:2.1.1:2.7.2:2.7.1:1.5.1 +7655 1.5.1:2.7.1:2.7.2:2.1.1:5.4.3:6.2.1:2.6.1:4.1.2 +7656 2.7.8:6.3.4:2.7.2 +7657 5.1.1:4.1.1:3.4.13:4.3.2 +7658 2.7.2:4.4.1:1.3.1:2.3.1:2.1.3 +7659 2.5.1:5.4.2:2.3.1 +7660 4.3.1:3.1.3:4.4.1:2.5.1:3.6.1:2.7.2:6.3.4:1.1.1:2.4.2 +7661 1.1.1:5.1.3:2.1.1:2.5.1 +7662 2.7.2:2.6.1 +7663 6.1.1:2.5.1:2.6.1:2.1.3:6.3.5:4.2.1 +7664 6.3.4:1.1.1:1.2.4:4.2.3:2.3.3:2.7.7 +7665 1.8.1:2.3.1:4.2.1 +7666 2.7.1:3.1.3:1.4.1:6.2.1 +7667 4.3.2:6.2.1:1.13.11:1.1.1 +7668 2.3.1:1.2.1:2.5.1:4.2.3:2.6.1:2.7.2 +7669 5.4.99:4.1.1:5.4.2:2.4.1:2.7.2:2.4.1 +7670 2.3.1:2.3.1:4.3.1:6.3.4:2.7.1 +7671 6.3.1:2.7.8:6.4.1:3.1.7:4.2.1 +7672 2.4.2:2.6.1:1.5.1:1.1.1:2.1.3 +7673 1.2.1:4.2.3:6.3.1:4.3.1 +7674 3.3.1:2.7.2:2.7.4:4.1.1 +7675 6.3.2:3.1.4:1.4.4:1.1.1 +7676 2.7.2:2.1.1:6.3.4:5.4.99:2.7.4 +7677 6.3.3:3.1.3:2.7.4:2.3.1:1.5.1 +7678 2.1.3:2.6.1:1.4.1:2.5.1:2.3.1:2.7.7 +7679 5.4.2:6.3.2:3.5.4 +7680 3.4.13:3.1.5:4.2.3:5.3.1:4.2.-:2.7.1 +7681 6.3.2:1.1.1:2.7.2:5.3.1 +7682 2.7.4:4.1.1:2.6.1 +7683 2.3.1:5.3.1:2.7.4:1.4.3 +7684 1.5.1:2.6.1:3.5.3:1.1.1:1.2.4:2.7.1 +7685 2.3.1:3.4.13:1.4.1:5.4.2:2.7.2:2.3.1:1.2.1:6.3.4:2.7.1 +7686 2.7.1:9.9.9 +7687 5.4.2:2.2.1:1.2.4:2.3.1:6.4.1:2.3.1:3.1.3:1.2.1:3.4.11:2.6.1:6.3.4 +7688 2.1.2:2.7.7 +7689 2.7.7:3.5.1:2.4.2:2.6.1:2.3.1:3.5.2:2.7.1:2.4.2 +7690 2.1.3:4.2.1:2.7.1:3.5.99:1.7.99 +7691 1.1.1:2.6.1:2.6.1:2.6.1:2.6.1:2.6.1:5.4.99 +7692 1.2.4:2.6.1:2.5.1:3.2.1:6.3.4 +7693 2.1.2:2.4.2:2.2.1:3.1.2:6.3.1 +7694 1.1.1:2.6.1:1.1.1:2.7.7:1.1.1:2.7.1:4.1.2:2.4.2:2.1.4:6.3.3:4.1.1 +7695 3.1.1:2.6.1:2.3.1:1.5.1:2.7.2:5.4.99 +7696 4.1.2:3.1.1:1.5.1:2.7.2 +7697 5.1.2:2.5.1:6.3.4 +7698 4.1.1:2.6.1:2.7.1 +7699 2.7.2:6.3.5:4.1.2:3.2.1:1.7.2:2.6.1:3.1.1:2.3.1:4.3.2:1.13.11 +7700 2.4.2:1.1.1:1.4.1 +7701 3.5.1:2.1.2:4.1.2:3.1.5:2.4.2:1.14.11:2.8.1:1.3.99:2.3.1:4.3.1:4.1.2 +7702 4.99.1:2.7.7:2.1.1 +7703 4.3.2:3.1.3:2.1.2:5.3.1:2.6.1 +7704 1.1.1:4.2.1:2.1.1:2.7.2 +7705 1.8.1:2.7.9:4.4.1 +7706 5.4.2:2.5.1:2.6.1:2.7.4:3.5.1:2.1.2:2.7.2:1.1.1:4.1.3:3.5.1:3.5.1 +7707 4.1.2:3.1.4:4.4.1:2.7.9 +7708 2.3.1:1.-.-:6.3.5:2.7.7:2.7.1:1.5.1:2.7.8:5.3.1:4.1.1:6.3.4 +7709 4.4.1:6.3.1:2.5.1:2.7.8 +7710 6.3.4:2.7.7:2.2.1 +7711 2.7.1:6.3.1:9.9.9:4.1.1:3.4.13:1.13.11:2.3.1:2.7.1:2.7.1 +7712 1.5.1:2.1.1:6.3.4:2.7.4 +7713 1.2.1:1.1.1:3.5.2:1.2.1 +7714 2.4.1:1.5.1:2.6.1:4.1.2 +7715 4.1.2:2.7.1:2.5.1:4.1.1:4.6.1 +7716 4.3.1:3.5.1:5.1.3:1.2.4:1.17.4:6.3.4:2.3.1:6.3.4:1.1.1 +7717 2.7.4:6.3.2:5.3.1 +7718 2.6.1:3.5.3:2.3.3:1.5.1:1.5.1:4.1.1:3.6.1:5.4.2 +7719 4.1.1:2.6.1:2.6.1 +7720 2.6.1:4.1.1:2.7.7:2.4.2 +7721 5.3.1:3.5.1:2.5.1:3.5.1 +7722 1.4.3:6.3.2:4.1.1:6.3.4:2.1.2:6.3.4:1.3.1:2.7.7 +7723 1.17.4:2.4.2:6.3.4:6.3.4:1.14.13:4.1.2 +7724 2.6.1:3.1.3 +7725 2.7.7:4.3.1:2.4.2 +7726 2.7.4:3.6.1:5.1.3:4.3.2:1.1.1 +7727 4.1.1:2.1.4:4.2.3 +7728 1.13.11:2.7.7:2.7.1:1.2.1:4.3.2:4.2.1:1.2.1:2.6.1:5.4.2:3.4.11 +7729 2.5.1:3.5.1:3.1.2:4.4.1:4.3.2:6.3.4 +7730 6.3.5:2.6.1:4.1.1:1.2.4:6.3.5:5.4.2:6.3.2:4.3.1:2.6.1:1.2.4:2.3.1:2.7.1:2.3.1:3.5.1:4.2.3 +7731 1.5.1:2.7.2:3.1.1:2.7.2 +7732 6.3.2:1.1.1:6.3.4:2.1.2:1.1.1:3.5.3:2.3.3:6.3.5 +7733 1.4.3:1.1.1:4.3.1:1.3.1 +7734 2.7.4:2.7.7:6.3.4:2.1.3:2.3.1 +7735 2.7.4:1.1.1:4.3.1:2.7.1 +7736 2.3.1:3.2.1:4.4.1:2.6.1:6.4.1:6.3.4:2.4.2:1.3.1:2.1.3 +7737 1.5.1:3.5.3:1.1.1:4.1.2:2.3.1:2.7.8:2.7.2:6.3.4:2.7.1:1.8.1:1.13.12 +7738 5.4.99:4.1.1:2.6.1 +7739 3.5.4:5.4.3 +7740 2.7.7:1.3.99:5.5.1:4.1.1:3.5.3:2.5.1:6.3.2:5.3.1 +7741 3.1.3:3.1.3:1.5.1:2.1.3:2.6.1:2.3.1:2.3.1:3.5.1 +7742 3.2.1:6.3.4:1.18.6:4.3.2:3.1.3 +7743 6.3.5:4.2.1:2.1.2:1.1.1 +7744 3.1.2:2.3.1:4.3.2:2.1.2:1.2.1:2.7.8:2.5.1:1.1.1 +7745 4.3.1:4.2.1:2.6.1:2.7.2:3.6.1:2.7.7:1.2.4:2.5.1:1.1.1 +7746 2.3.1:2.7.4:2.5.1 +7747 2.3.1:2.1.2:4.3.2:5.4.2:3.5.1:1.2.1:4.2.1:4.2.1 +7748 4.3.2:3.8.1:4.1.1:4.1.1:2.1.3 +7749 2.7.1:2.7.2:4.3.2:5.4.2:1.1.1 +7750 2.1.2:2.7.1:2.1.1:2.5.1:1.4.1:4.1.1:2.1.3 +7751 1.2.5:6.3.3:2.3.1:3.1.1:1.2.1:1.17.4:2.6.1:6.3.5:4.3.1:2.3.1 +7752 2.4.1:3.5.3:3.5.1:2.7.2:2.3.1:4.2.1 +7753 4.2.1:6.3.4:4.2.3:2.3.1:2.3.2:2.7.1:6.3.5:2.7.4:3.5.3 +7754 2.6.1:2.7.1:6.3.5:4.1.1:2.3.1 +7755 4.4.1:2.3.1:4.1.2:3.4.11:4.1.2:4.1.1:2.3.1:2.7.1:4.2.1:2.7.1 +7756 4.1.1:2.7.1:3.5.1 +7757 6.2.1:5.4.2:2.6.1:5.1.2:2.7.2:1.2.1 +7758 2.3.1:5.3.1:4.3.2:4.3.2:5.4.2 +7759 4.1.1:1.1.1 +7760 1.14.13:1.2.4:2.6.1:2.1.3:4.2.3 +7761 2.5.1:2.4.2:2.3.1 +7762 2.7.1:2.7.7:2.7.2:3.5.1:6.3.4 +7763 4.3.2:1.1.1:3.3.1:3.5.4 +7764 2.5.1:3.2.1:3.5.4:3.5.1 +7765 4.1.2:4.1.1 +7766 1.1.1:1.1.-:5.1.3:3.1.3:2.1.3:4.1.1:1.1.1 +7767 1.1.1:2.7.2:6.3.4 +7768 4.1.1:2.1.1:3.1.4:2.6.1 +7769 9.9.9:6.3.4:5.3.1:6.3.3:3.6.1 +7770 4.1.1:1.2.1:6.3.2 +7771 3.1.3:4.4.1:2.7.2:1.1.1 +7772 1.7.2:4.2.3 +7773 1.1.1:4.1.1:2.3.1 +7774 6.3.3:5.3.1:2.7.7:2.6.1 +7775 2.7.1:1.1.1:2.5.1:2.7.2:1.1.1 +7776 2.1.3:1.2.1:2.6.1:6.3.4 +7777 1.1.3:2.4.2:5.4.2:2.7.1:2.6.1 +7778 6.3.1:2.6.1:2.4.2:4.4.1 +7779 6.3.2:4.4.1:2.4.2:2.6.1 +7780 2.7.1:1.1.1 +7781 1.1.1:2.1.2:2.4.1:6.3.5:4.2.1 +7782 5.4.2:4.1.1 +7783 3.2.2:1.2.1:4.1.3:5.4.2 +7784 1.1.5:1.1.2:4.2.1:6.3.4:2.8.1:5.4.2 +7785 6.3.1:3.5.3:2.1.3:1.7.1 +7786 3.1.1:4.3.2:2.6.1:1.1.1 +7787 3.5.1:3.5.3 +7788 4.1.1:2.7.1:2.3.1:2.5.1:3.7.1:4.3.2:2.1.2:4.3.1:1.3.3 +7789 1.2.1:1.3.1:2.3.1:1.1.1:2.3.1:4.2.1:1.2.1:2.3.1 +7790 2.3.1:3.2.1:3.5.3:5.4.2:2.4.2 +7791 2.7.1:5.4.2:2.7.1:5.4.2:1.3.99:2.7.2:3.1.3:1.5.1:4.3.2:4.3.2 +7792 5.1.3:3.1.3:2.7.1:2.2.1:2.7.7:6.3.2:2.7.7 +7793 2.1.3:2.7.1:3.2.2 +7794 6.3.4:4.2.1:2.3.1 +7795 3.5.1:3.6.1:4.3.2:2.3.1 +7796 2.7.6:1.1.1:1.2.1:2.1.2:9.9.9:1.3.99 +7797 5.4.99:2.3.1:3.5.3:2.6.1:4.3.2:2.1.3 +7798 2.7.8:3.5.99:2.7.7:5.4.2:2.4.2:5.4.2:3.2.1 +7799 4.3.2:1.2.5:3.6.1 +7800 1.5.1:6.4.1:2.3.1:2.8.1:3.1.5:2.8.3:2.5.1:1.5.1:6.2.1 +7801 5.4.2:1.2.5:6.3.2:2.3.1:1.5.1 +7802 1.2.4:1.4.1:3.6.1 +7803 1.2.1:4.3.1:2.4.1:3.5.3:1.7.99:4.3.2 +7804 5.3.1:4.3.2:2.3.1:4.1.2:6.3.2 +7805 2.6.1:2.5.1:2.6.1:6.3.4:5.4.99 +7806 1.2.4:1.5.1:5.4.2:3.5.5:6.3.4:4.3.1 +7807 2.5.1:6.3.5:3.6.1:1.1.3 +7808 4.1.1:5.4.99:6.3.5:4.2.1:2.1.1:4.2.1 +7809 2.7.1:4.1.2:3.1.7:1.13.12 +7810 4.1.1:2.3.1:2.7.1:5.4.2:1.2.1:1.2.1 +7811 4.3.1:9.9.9:4.2.1:1.4.1:2.7.1:2.3.1:4.4.1:6.3.4 +7812 3.5.1:2.7.1:4.2.1:1.3.1:1.4.1:2.7.4 +7813 6.3.4:1.1.3:2.7.1:2.5.1:2.3.1:3.5.1:2.3.1:2.6.1 +7814 5.3.1:5.1.3:2.1.1 +7815 4.2.1:2.7.1:2.1.2:6.3.3:1.2.1:4.1.1:2.7.9:2.6.1:6.3.4 +7816 1.2.4:2.5.1:3.1.2:2.7.1 +7817 6.2.1:2.7.1:6.3.4 +7818 3.5.3:3.5.1:6.4.1:6.3.3:1.1.1:1.4.1:1.4.1:2.1.1:4.1.1 +7819 1.2.1:5.4.99 +7820 2.7.1:2.3.1:1.2.4:1.2.1 +7821 2.7.4:2.5.1:5.4.99:1.1.1:2.6.1 +7822 2.7.1:4.2.1:1.8.1:5.4.2:2.4.2 +7823 2.1.4:5.3.3:4.1.1:5.4.99 +7824 2.4.2:1.1.1:3.5.4:1.3.3:6.3.4 +7825 1.1.5:2.7.1:3.1.3:2.4.2:2.7.4:2.1.2:6.3.2:2.7.7 +7826 5.4.99:2.7.2:2.1.2:2.7.2:2.7.1 +7827 1.4.99:6.3.1:2.7.1:1.8.1:5.4.99 +7828 4.2.3:2.2.1:2.7.1:1.1.1:3.1.2:4.2.1:6.3.2:6.3.1:4.1.3:4.3.1:1.6.1:1.17.4:4.4.1:6.2.1:6.2.1:6.3.3:4.2.1 +7829 1.4.3:5.4.1:4.2.1:2.6.1:5.1.3:2.7.7 +7830 3.1.1:2.8.1:4.1.1:1.2.1:1.2.1:2.3.1:4.2.3 +7831 1.17.1:2.6.1:6.3.4:3.5.3:2.4.1 +7832 2.7.4:2.7.1:2.1.1:3.6.1:2.7.1:1.1.1:2.6.1 +7833 1.4.1:2.7.1 +7834 5.-.-:3.5.1:2.3.1:2.6.1:3.6.1:4.2.1:2.7.1 +7835 5.3.1:4.3.2:1.2.1:2.7.1 +7836 4.1.2:2.8.1:2.3.1:1.8.1:5.1.2 +7837 4.2.1:1.4.1:6.3.1:2.4.2:2.7.4:6.3.4:5.4.99:1.5.1 +7838 9.9.9:6.2.1:4.1.3:6.3.3:4.2.1:1.1.1:3.5.1 +7839 6.3.1:2.7.1:3.1.1:4.3.1 +7840 3.5.1:4.1.1:1.5.1 +7841 2.3.1:1.2.1:3.6.1:6.3.4 +7842 3.4.13:5.4.2:4.2.1:2.5.1:1.3.99:4.1.1:1.17.4:2.7.1 +7843 2.6.1:3.1.3:4.2.1:4.3.1:2.3.1:2.7.1 +7844 6.3.4:3.6.1:2.7.1:1.5.1:2.8.1:9.9.9 +7845 2.5.1:2.6.1:2.5.1:2.4.2:2.3.1:6.3.2:2.3.1:2.1.3:1.2.1 +7846 5.4.2:4.3.2:4.1.1 +7847 1.2.1:2.6.1:2.7.1:4.3.1 +7848 4.1.1:2.6.1:1.4.1:4.4.1:4.2.3:1.2.1:1.2.1 +7849 2.3.1:2.1.2 +7850 4.1.1:2.4.2 +7851 3.6.1:3.5.1:4.3.2:3.5.1:1.1.1:2.5.1:1.7.1:1.4.3:4.4.1 +7852 5.1.3:5.3.1:1.4.3:5.4.99:6.3.1 +7853 2.1.2:6.3.3:5.4.2:2.6.1 +7854 4.1.1:2.1.2:2.6.1:5.1.3:2.5.1:1.2.4 +7855 2.4.2:1.3.99:3.5.3:4.1.3 +7856 2.5.1:4.3.2:1.5.99:2.1.1:2.7.1:2.1.3 +7857 5.-.-:1.17.4:2.6.1:4.1.2 +7858 2.4.2:2.7.7:2.7.2:3.6.1 +7859 2.3.1:4.1.1:1.4.3:6.3.2:1.2.1:4.3.1:2.7.4 +7860 1.1.1:1.4.1:1.14.13:1.1.2 +7861 1.5.1:2.3.1 +7862 3.5.3:2.7.1:3.1.7:2.7.4 +7863 4.2.3:6.3.1:6.3.5:4.4.1 +7864 6.3.4:2.5.1:1.1.1:4.3.1:2.8.1 +7865 1.5.1:2.6.1 +7866 6.3.2:2.6.1:4.1.1:4.1.1:2.3.1:1.3.99:2.3.1 +7867 2.3.1:2.3.1:5.1.2:4.2.1 +7868 2.8.1:2.5.1:3.4.13:5.3.1 +7869 2.7.4:5.1.3:5.4.99:1.1.1:4.4.1:3.5.1:6.3.4 +7870 1.4.1:2.5.1:2.6.1:5.4.2:5.4.99:1.1.1:1.5.1 +7871 6.3.4:2.7.1:3.5.1:2.3.1 +7872 1.2.1:1.2.1:2.5.1 +7873 1.7.99:2.3.1:4.2.-:3.1.1:2.3.1:2.5.1:1.1.1:1.5.1 +7874 3.1.3:4.2.3:1.2.1:2.3.1 +7875 1.1.1:1.1.1:2.7.2:3.5.1:6.3.2:4.2.3 +7876 2.6.1:4.1.1:1.1.1:1.5.99 +7877 6.4.1:3.5.3:1.3.99:2.4.2 +7878 2.3.1:6.3.1:1.4.3:5.3.1:5.4.99 +7879 2.3.1:2.1.2:3.5.2:2.7.2:5.1.2:2.7.7:4.1.3:4.1.3:2.7.4:2.7.2 +7880 1.2.1:6.3.1:2.5.1:4.2.1 +7881 2.1.2:2.7.6:2.1.2:1.14.11:5.4.99:5.1.3 +7882 2.7.4:4.4.1:3.6.1:1.2.1:2.3.1 +7883 6.3.4:6.3.3:1.1.1:2.7.1:1.2.1:4.2.1 +7884 2.6.1:4.1.3:2.3.1:2.7.2 +7885 5.4.99:6.3.5:3.5.3:2.1.1:1.4.3:1.5.1:4.2.1:2.1.1 +7886 2.7.4:4.1.1:6.4.1:5.3.1:4.2.1:2.7.1 +7887 4.2.-:1.2.4:2.1.2:2.7.1:4.2.1:2.3.1 +7888 4.2.1:2.4.2:4.3.2:2.5.1:3.1.1:2.5.1:1.2.1:2.4.2:3.5.3 +7889 3.5.1:4.1.2:3.5.4:6.3.2:4.1.2:4.2.1:4.1.3:2.7.1:2.4.2:2.7.4 +7890 2.1.2:2.5.1:6.3.2:4.4.1:4.2.3 +7891 1.17.4:4.1.2:1.2.4:1.1.1:1.1.1 +7892 1.3.99:2.7.4:5.4.99 +7893 2.6.1:2.4.2:2.3.1:1.2.1:4.2.1:2.5.1:2.6.1:2.4.2:2.5.1:6.3.4:4.2.1 +7894 5.3.1:5.4.99:6.2.1:6.3.2:5.4.99:1.1.1:6.3.2 +7895 2.7.2:2.6.1:2.7.7:4.2.1:2.7.2:1.2.1:2.5.1:1.1.2:2.7.6:3.5.1:6.3.3:4.2.3 +7896 5.3.1:2.5.1:3.4.11 +7897 2.4.2:2.7.7:5.3.1:4.1.1:2.1.4 +7898 4.4.1:4.1.1:2.7.2 +7899 3.6.1:2.7.8 +7900 4.3.1:2.7.2:4.3.2:1.4.1:2.7.4:2.3.1:2.3.1 +7901 6.3.4:2.1.2:2.6.1:6.3.4 +7902 6.3.2:3.5.1:1.-.-:4.1.1:1.13.11:5.3.1 +7903 2.1.3:4.4.1:1.5.1 +7904 5.1.3:2.5.1:4.1.2 +7905 2.3.1:4.1.2:2.5.1:4.1.2:1.2.1:2.6.1:2.7.7:2.1.3 +7906 6.3.5:5.3.1:2.7.2:4.4.1 +7907 2.7.1:2.1.3:2.7.2:6.3.5:3.4.11:3.5.3:3.2.2:3.5.1:3.2.1 +7908 5.4.99:6.3.1:4.3.2:4.2.1 +7909 2.7.1:4.4.1:2.6.1:4.2.1:4.2.1:2.7.1:4.1.2 +7910 2.3.1:2.1.2:6.3.5:2.5.1 +7911 3.2.1:6.3.1:2.7.1 +7912 2.3.1:1.11.1:1.1.1:5.1.3:2.5.1 +7913 2.7.8:2.7.7:3.5.1:6.3.4:6.3.2:4.1.1:1.1.1:1.3.3:1.2.1:1.2.1:3.4.11:1.1.1:4.2.3 +7914 4.3.1:2.7.2:1.5.1 +7915 6.3.4:5.1.2:4.1.1:3.5.1:1.3.99 +7916 5.3.1:4.1.2:2.7.1 +7917 5.4.99:4.4.1:3.5.1:2.4.2:2.4.1 +7918 6.3.5:6.3.1:4.1.1 +7919 1.2.1:1.4.1:3.1.2:2.3.1 +7920 3.6.1:2.3.1:1.1.1 +7921 2.3.1:1.5.99:4.1.1 +7922 2.5.1:2.1.1 +7923 2.7.1:4.4.1:5.1.3 +7924 1.7.99:6.3.3:1.3.1:3.5.1:2.7.7:2.5.1:2.1.2 +7925 1.3.1:1.1.1:1.1.1:2.6.1 +7926 2.4.2:2.7.2:6.3.4:3.6.1:1.5.1:1.2.1:5.4.99:2.8.3 +7927 2.6.1:1.1.5:2.7.4:2.7.1:2.7.7:2.7.2:3.6.1:4.4.1 +7928 1.2.1:5.1.1:2.1.2:2.4.2:4.1.1:4.2.3:3.6.1:2.1.3 +7929 4.4.1:2.3.1:4.2.1:3.5.3:6.3.3:4.1.1 +7930 1.1.1:2.7.2 +7931 3.1.1:2.4.1:2.7.1:2.6.1:6.3.1:6.3.5 +7932 1.14.13:4.3.2:2.3.1:4.3.2 +7933 2.7.1:4.3.2:3.1.2 +7934 2.3.1:1.1.1:6.3.4:1.2.1 +7935 6.3.4:2.4.2:1.17.4:2.7.7 +7936 4.2.1:3.6.1:1.5.1 +7937 4.3.2:1.8.1:1.11.1:3.5.1:5.1.3 +7938 1.7.2:4.3.1:6.3.4 +7939 4.4.1:1.2.1:6.3.4:2.1.1:4.1.2 +7940 1.2.4:3.5.1:1.2.1:5.4.2:3.1.3 +7941 4.3.2:4.1.2:1.1.1:4.99.1:1.5.1:2.3.3:1.3.99 +7942 1.2.1:5.3.1:4.4.1:3.5.4 +7943 9.9.9:2.4.2:1.1.5 +7944 6.3.1:2.5.1 +7945 3.4.13:4.4.1:3.5.3:2.7.7 +7946 4.2.1:4.2.3 +7947 2.6.1:4.2.1 +7948 2.8.3:4.4.1:2.5.1:6.3.4:3.5.1:4.2.3 +7949 2.7.1:2.6.1:5.3.1:4.3.1:1.5.1:5.3.1:4.3.1:2.6.1 +7950 4.3.2:2.7.1:3.2.1:1.1.1:2.7.7:2.3.1:1.4.3:4.3.1:1.7.1:2.3.1 +7951 2.6.1:6.3.4:2.-.-:2.1.2 +7952 2.6.1:6.3.2:2.5.1:2.3.1:1.2.1:2.6.1:2.3.1 +7953 2.7.2:1.5.1:4.1.1:6.3.5:4.1.1 +7954 2.5.1:6.2.1 +7955 4.2.3:4.1.1:6.1.1:4.1.3:5.1.2:1.4.1:4.2.1:4.3.2:5.4.99:4.2.1:2.4.1:2.7.1:4.2.3:4.2.3 +7956 2.1.2:4.1.2:4.2.1:6.3.2 +7957 2.3.1:1.1.1:2.7.1:1.2.1:2.3.1:4.1.2:1.1.2 +7958 2.3.1:2.7.1 +7959 1.2.1:2.8.3:5.3.1:2.4.2:2.4.2 +7960 1.4.1:1.5.99:1.14.16:3.5.4 +7961 1.1.1:6.3.4:2.7.6:6.2.1:2.4.2 +7962 5.3.1:3.5.3:2.3.1:1.1.1:4.2.3:4.1.1:4.2.3:6.3.2:1.1.1 +7963 2.5.1:4.1.2:1.3.99 +7964 1.2.1:4.4.1:5.5.1:1.8.1:1.5.1:4.1.1:4.2.1 +7965 4.4.1:2.7.2:4.4.1 +7966 4.3.2:6.2.1 +7967 5.4.2:4.1.2:6.4.1:2.2.1:2.5.1:6.3.4:2.7.7:2.7.4:2.7.1:1.-.-:1.1.1 +7968 4.3.1:6.3.1:2.1.1:1.5.1 +7969 4.1.1:3.5.4:2.7.1:6.3.1 +7970 2.3.1:4.2.3:2.3.1:3.5.1 diff --git a/utilities/tests/trash/random_noindex.txt b/utilities/tests/trash/random_noindex.txt new file mode 100644 index 0000000..f2ae394 --- /dev/null +++ b/utilities/tests/trash/random_noindex.txt @@ -0,0 +1,7970 @@ +6.3.2:1.4.1:2.7.6:2.1.3:4.1.2:1.4.1:4.3.1:2.7.7:1.1.- +3.2.2:4.1.2:2.7.8:5.3.1:2.4.1 +4.2.1:2.1.3:2.8.3:2.3.1:2.7.8:6.3.4 +3.5.3:4.1.2:2.2.1:1.1.1 +6.3.4:2.5.1 +3.5.1:4.1.2:2.6.1:5.1.2:1.5.1:5.-.- +2.4.1:6.2.1:4.1.3:1.1.1:6.3.5:4.1.1 +2.3.1:1.1.1:1.2.1:4.4.1:4.1.2:2.7.1:4.1.1 +2.1.2:4.1.1 +4.3.1:2.6.1:1.4.1:1.1.1:2.7.1:3.6.1:1.2.4:2.1.3:1.4.1:1.4.1 +4.2.1:6.3.5:4.2.3 +2.7.2:4.1.3:2.3.1 +2.7.8:6.3.2:3.1.2:3.1.3:6.3.4:5.4.99:1.5.1:5.1.3:3.1.3 +2.6.1:2.5.1:6.3.1 +2.7.1:6.3.4:2.-.-:4.1.1:2.7.1:3.1.7:4.3.1:4.3.1 +5.3.1:4.2.1:6.3.4:1.2.1:2.3.1:2.7.4 +4.2.1:2.3.1:4.2.1:1.2.1:4.2.3:2.7.4:5.5.1 +5.4.99:2.3.1:4.1.1:4.3.2:1.1.5 +2.7.2:1.2.4:2.5.1:2.4.2 +6.3.4:3.1.3:2.4.2 +2.4.2:2.7.2:3.5.1:2.3.1 +1.5.1:3.6.1:2.3.1 +4.1.3:5.4.2:6.3.4:2.7.6:6.3.4 +4.2.1:4.3.1:1.5.1:5.1.1:3.5.1 +1.8.1:3.1.2:4.2.1:2.3.1:3.5.1:2.6.1:2.7.1 +1.2.1:3.5.1:1.2.1:2.3.2 +2.3.1:1.1.1:4.2.1 +2.7.7:3.5.1 +3.5.1:1.4.1:1.2.7:3.5.3:2.1.1:2.6.1:5.1.3:2.3.1:4.2.-:2.6.1 +4.3.2:1.2.1:6.3.2:3.4.11:2.3.1 +2.7.7:6.3.5:2.4.2:2.6.1:2.5.1:2.7.4:2.7.6 +2.7.2:2.1.1:4.1.3:2.7.8:5.-.-:2.7.7:4.1.3 +6.3.4:2.4.1:3.5.1 +4.2.3:2.3.1:2.1.2 +2.7.1:2.6.1:3.5.3:4.2.1:6.3.5:2.4.2:2.3.1 +3.2.1:6.3.4:2.7.1 +1.13.11:2.3.1:4.1.2:4.3.2:2.3.1:2.3.1:1.1.1:1.1.5 +1.1.1:2.3.1:1.7.1 +3.5.1:1.1.1:5.4.99:6.3.4:6.3.3:4.2.1 +6.3.2:2.6.1:3.5.2:5.4.99:2.5.1:5.3.1:2.7.2:2.7.1:5.-.-:4.1.1 +3.2.1:4.2.3:3.5.1:2.5.1:2.5.1:4.1.3:2.7.1:2.6.1 +4.4.1:5.3.1:6.3.4 +2.7.1:2.7.4:1.2.1:6.3.5:2.3.1:2.3.1:2.3.1:3.1.3:1.2.1:4.1.1:6.3.1:2.1.2:1.4.1 +3.5.1:2.1.1:4.1.1 +5.3.1:1.5.1:2.1.2:4.3.1:5.3.1:2.7.1:1.4.3:1.5.1:1.1.1:2.3.3:4.1.1 +1.2.1:5.4.99:2.7.2:2.7.1:4.4.1:3.5.1:3.5.1 +3.5.3:3.5.3:2.7.1 +2.7.1:1.5.1:2.6.1:2.7.1:2.5.1:5.3.1:4.2.1 +6.3.4:2.7.1 +6.2.1:3.5.1:2.5.1:2.7.7:3.5.4:2.7.1 +3.6.1:2.4.1:2.3.1:6.3.1:2.7.7 +1.3.99:4.3.2:5.4.2:6.3.4:2.3.1:5.4.2:1.1.1 +4.3.2:2.7.1 +2.7.1:1.7.99:2.7.2:3.1.3:1.1.1:2.7.9:4.1.1 +2.6.1:6.3.4:2.7.7:1.1.1 +2.7.1:5.3.1:2.7.4 +4.2.1:3.5.1:4.1.1 +1.14.11:1.1.1:2.7.1 +3.2.1:2.4.2:1.4.1:6.3.4 +3.1.1:1.5.3:5.3.1 +3.1.3:4.1.99 +2.6.1:5.1.3 +1.2.1:2.7.1:2.5.1 +5.3.1:3.1.1:2.3.1:6.4.1:4.1.3:1.4.1:6.3.2:1.5.1 +2.6.1:2.6.1 +1.2.1:6.3.5:2.5.1 +2.3.1:3.5.4:1.13.11 +6.3.4:1.2.1:6.2.1:1.1.1:4.3.1 +4.4.1:5.4.2:1.1.1 +2.3.1:1.1.1:9.9.9:4.2.1:1.2.1:4.1.3 +2.7.1:6.3.2:6.3.4:6.3.2:4.3.1 +2.7.1:2.1.1:1.4.3:2.4.2 +1.5.1:5.1.1:2.7.7:4.1.1:2.5.1:4.3.2 +3.4.11:3.6.1:4.4.1 +4.1.1:2.7.1:3.1.4:2.7.2:1.5.3:6.3.2 +1.1.1:1.17.4:1.2.1 +1.1.3:4.1.1:3.6.1 +1.13.11:4.2.1:2.4.2:1.4.1 +1.1.1:2.-.-:1.8.1:3.5.1:3.5.4:2.5.1:4.1.3:6.3.3:4.2.3:1.1.1:2.3.1:1.2.4 +2.3.1:2.7.1:2.5.1:3.1.2 +3.5.4:4.2.1:2.1.2 +2.5.1:4.1.1:3.1.3:1.1.1 +5.4.99:3.1.7:1.7.2:5.4.2:3.4.11:6.3.3:4.1.3 +6.3.2:1.1.1 +6.3.4:2.6.1:4.4.1:2.5.1:2.7.7:2.7.2:6.3.5 +4.1.1:4.1.1:6.3.4 +4.1.2:5.4.2:2.4.2 +5.1.2:2.4.2:2.7.1:2.7.7:1.13.11:2.7.1:4.4.1:1.1.1 +4.1.1:6.3.4:6.2.1 +2.1.3:1.2.1:3.6.1 +4.1.2:4.1.1:3.5.3:1.2.1:4.3.1:4.2.1:1.1.1 +5.4.99:6.3.5:2.7.2:3.5.1:1.5.1 +2.6.1:2.3.1:2.7.4 +5.4.99:2.1.2:2.3.1:2.3.1:4.2.3 +1.1.1:2.8.1:4.1.1 +3.1.1:2.7.9:3.5.1:1.1.1:1.17.1 +2.6.1:2.7.7:4.3.1:2.5.1:2.1.2:4.3.1 +4.1.1:3.5.1:4.3.1:1.13.11:4.2.1 +1.2.1:2.4.1:5.3.1:4.1.1:6.3.1:1.5.1:1.1.1:5.4.2 +1.8.1:2.5.1:2.4.2 +2.3.1:2.3.3:2.5.1:2.4.2:1.2.4:9.9.9:1.5.1 +3.6.1:1.1.1:6.3.4:2.7.1 +1.1.1:1.4.1:6.3.4:1.2.4:3.2.1:2.7.1:5.1.3 +3.2.1:1.3.3:2.3.1:3.6.1 +1.14.16:2.5.1:2.7.4:2.7.1:3.2.2 +2.7.2:5.1.1:2.7.4:2.3.1:4.3.1 +2.7.7:3.5.1:5.4.2:3.5.3:5.4.2:2.7.1:3.2.1:2.7.1 +2.3.1:4.3.2:1.17.1:5.4.2:1.1.1:3.5.1:1.3.3 +1.2.1:4.1.1 +2.3.1:5.3.1:2.2.1:4.3.1 +2.6.1:4.3.1:2.4.2 +6.3.4:2.7.2:1.4.1:2.7.6:3.5.4:2.4.2:6.2.1 +2.3.1:2.6.1:3.5.2:6.3.2 +5.4.99:2.7.8:4.1.1:4.3.1:3.2.1:6.3.2 +4.4.1:2.1.4:2.7.4:4.2.3 +2.8.1:2.7.7:3.5.1:4.4.1:1.1.1:4.2.3:2.7.1:1.1.1 +1.2.1:3.1.1:2.6.1:5.3.1:2.1.2:6.3.5:1.4.3 +1.3.3:2.7.7:2.4.2:4.1.1:4.2.1 +5.4.2:6.3.5:2.7.4:2.4.2:1.1.1 +2.2.1:2.1.1:2.5.1:3.5.1:3.6.1:2.7.2 +1.2.1:6.2.1:3.5.4:4.1.2:6.3.1:2.6.1 +4.2.3:4.1.1:6.3.1:2.1.2:2.3.3:2.4.2:4.1.1 +3.1.1:2.4.2:1.2.1:5.3.1:2.7.2 +1.5.1:3.5.99:2.1.3 +5.1.2:6.3.2:2.7.4:3.1.3 +1.2.1:6.3.2:2.7.1:1.14.12:1.2.1:2.7.7 +4.3.1:2.3.1:1.5.1 +4.3.1:1.1.1:2.5.1:1.8.1:2.3.1:1.14.12 +4.1.1:3.6.1:5.3.1 +2.7.7:2.3.1:1.14.13:6.3.5:3.5.1 +2.3.1:6.2.1:5.3.1:4.3.2 +4.2.2:2.1.2:1.3.99 +1.1.3:2.1.2:4.1.2:5.3.1:2.5.1:6.3.2:9.9.9 +2.7.1:6.3.4:6.3.2:6.1.1:1.5.1 +2.7.2:4.2.1:2.7.1:2.7.2 +4.1.1:1.4.1:1.4.1:2.6.1 +2.3.1:5.4.99:1.5.1 +4.2.1:2.4.2:2.6.1:6.3.2:2.3.1:4.2.1 +1.17.1:1.14.13:2.6.1:4.2.1:4.2.3 +2.1.1:3.5.1 +1.2.1:4.4.1:2.5.1:4.1.1:4.1.1:4.1.1:1.5.1 +1.5.1:6.2.1:1.1.1:3.1.3:5.4.99:4.1.2:5.4.2:2.7.2:2.7.4:1.3.1:2.7.7 +3.8.1:2.7.1:3.5.1:3.6.1:3.8.1:4.2.3:2.6.1 +2.6.1:5.3.1:3.1.3 +2.5.1:2.5.1:5.4.2:1.17.4:1.2.5:1.3.99:1.1.1 +1.8.1:3.2.1:4.1.1 +3.5.3:1.2.1:3.13.1:1.1.2:3.2.1 +4.3.2:1.2.4:3.5.1:2.5.1:2.6.1:4.3.1:1.1.1:1.4.1:4.3.2 +2.3.1:6.3.5:5.3.1 +2.7.7:1.5.1:1.2.1:6.3.4 +1.5.1:2.3.1:1.5.1:5.4.2:2.7.6:4.1.1:4.1.1 +1.4.1:4.1.2:2.4.2:3.1.4:6.3.2:2.7.1:9.9.9:4.3.1:4.2.3 +4.1.1:2.1.1:3.5.4:3.4.13:2.3.1:4.4.1:1.2.1:3.1.4:2.1.2 +2.1.3:2.7.7:2.3.1 +2.6.1:2.3.1:4.1.1:2.6.1:1.2.1 +6.3.4:1.4.3:3.5.4 +5.3.1:2.7.8:4.2.1 +4.1.1:2.6.1:6.3.4:2.7.1:2.7.4:2.6.1 +2.6.1:3.1.2:6.3.4:4.4.1:2.5.1:2.6.1:2.7.8 +1.3.1:2.7.1:3.1.3 +4.1.1:1.2.1:1.13.11:6.3.2:5.3.1:3.2.1:2.4.2 +6.3.4:1.5.1:4.2.-:1.5.1 +2.3.1:3.2.2:4.1.1 +4.3.1:2.7.4:2.3.1:2.4.1:1.2.1:4.3.2 +1.5.1:1.1.1:6.1.1:1.1.1:4.99.1:2.7.1:2.5.1:2.6.1 +4.3.1:1.4.1:4.3.1:6.3.3:2.7.1:1.1.1:5.3.1 +1.3.3:4.3.1:1.4.1:3.5.1:2.7.4 +1.1.1:2.7.8:2.3.3:6.3.5 +3.1.3:3.5.1:2.3.1:1.2.1 +6.3.4:3.5.1:4.1.1:3.5.3:4.1.1:3.6.1 +4.4.1:1.1.1:1.2.1 +4.1.2:2.6.1:1.4.1 +4.1.1:2.3.1:6.2.1:6.3.4 +6.2.1:1.2.1:5.1.1 +1.3.1:2.4.2:1.2.4:4.1.2 +4.4.1:1.2.1:2.7.2:1.3.99:2.8.3:6.3.5:2.7.1 +2.7.7:9.9.9 +3.5.1:4.1.3:2.7.7:4.2.1:3.13.1 +6.3.5:4.1.3:2.3.3:4.3.1 +3.6.1:2.7.1:2.7.2:1.2.1 +3.5.1:6.3.3:2.5.1:4.1.1:2.6.1 +6.1.1:3.1.4:2.6.1:1.1.1:4.1.2 +2.4.2:1.5.1:9.9.9 +2.5.1:4.2.3:4.1.2:2.7.7 +3.5.3:3.5.1:2.6.1:2.5.1:1.2.1:1.17.4 +1.2.1:2.6.1:6.3.4:4.2.3 +2.5.1:2.7.1 +2.7.2:4.6.1:2.6.1 +2.7.6:2.7.2:4.3.1:6.3.4 +1.1.1:2.7.7:1.4.1:2.2.1 +1.1.1:4.1.1:4.3.1:2.6.1:2.3.1:2.4.2:1.3.1 +1.13.11:3.1.3:3.1.3 +2.1.3:2.3.1:1.3.3:2.7.2 +3.5.1:4.3.1:2.7.1:2.7.1:2.8.1 +2.7.8:2.6.1:6.3.1:2.1.2:4.2.1 +4.1.2:4.2.1:2.7.6:4.1.1:5.4.2 +6.3.4:2.7.6:4.3.2:1.1.1:4.1.1 +5.4.99:5.3.1:4.3.2:6.3.4:1.5.1:4.4.1:3.5.1:1.2.1:6.3.2 +1.17.4:3.5.1:1.3.1:2.7.7:4.2.3:4.3.1:2.7.2:4.1.2:2.1.2:4.4.1:4.1.1:4.1.1:4.2.1 +1.1.1:2.1.3:3.5.5:1.3.1:5.5.1:4.2.1 +2.7.1:6.3.1:1.5.1 +3.1.3:5.4.99:2.5.1:2.6.1:2.3.1:2.4.2 +4.1.1:5.4.2:5.4.99:3.5.4 +2.7.1:2.3.1:2.1.3:5.3.1:2.5.1:1.4.1:2.4.2:1.1.1:3.5.1:2.4.2:2.4.2:4.2.1:2.3.1 +2.7.2:2.1.1:3.5.4 +5.1.2:4.2.1:1.5.1 +6.3.5:2.7.7:4.3.1:4.3.1:4.4.1:2.7.2:2.6.1:3.5.1 +6.3.4:1.2.1:2.6.1:2.1.1:3.1.3:4.1.2 +6.4.1:3.2.2:2.5.1:2.1.2:5.4.99:4.1.1:2.7.2 +2.4.2:2.7.1:2.6.1:3.4.13:2.1.3 +1.7.99:2.5.1:4.1.1 +4.2.1:2.7.1:6.3.2:2.3.1:5.3.1 +6.3.5:1.2.4:6.3.4 +3.6.1:5.1.3:4.3.1:2.7.7 +1.2.4:4.3.2:2.6.1 +1.1.1:3.1.3:2.3.1:4.2.1 +6.3.5:2.4.2:2.3.3:4.1.1:2.1.1:1.1.2:1.5.1 +5.3.1:4.4.1:2.7.7:4.1.1:5.5.1 +6.3.5:6.3.4:2.7.1:4.3.2 +1.2.4:1.1.5:2.6.1 +2.1.3:2.1.2:1.2.1:5.4.2:4.1.2:2.7.7:5.1.1 +3.5.1:1.4.4:2.6.1:1.5.1:4.3.2:2.1.2 +4.4.1:6.3.4:4.1.1:3.2.2:2.1.3 +3.5.1:2.1.2 +6.3.4:2.7.1:2.7.4:4.4.1:4.4.1:1.5.1 +6.3.5:2.4.2:2.4.2:6.3.1:3.1.4:2.3.1:5.1.2:4.2.3 +2.7.6:1.4.1:2.4.2:2.5.1 +3.5.3:3.1.3:1.1.1 +2.1.1:4.4.1:2.7.4:4.1.1:1.5.1:1.2.1 +3.1.2:4.3.1:1.2.5 +2.4.2:1.5.1:3.1.3:4.1.3:6.3.4 +2.1.3:6.3.5:1.5.1:4.1.1:4.1.2:2.7.1 +5.4.99:5.3.1:6.3.4:2.1.2 +2.7.1:3.1.4:2.3.1:2.7.4:3.5.1:2.7.2:2.7.4:5.4.99:2.1.2:2.6.1:2.1.2:6.3.3:3.6.1:4.2.1:6.2.1 +6.2.1:2.7.1:1.2.4:2.1.2:1.2.1 +2.1.2:2.7.4:2.7.8:2.4.2:4.2.3:1.1.5:1.1.1 +2.7.2:5.4.99:2.3.1:6.3.5:2.5.1:2.7.1:6.4.1:4.4.1:4.1.1 +2.7.8:1.2.4:5.1.3:2.3.1:1.2.1:2.6.1:2.1.1 +6.3.3:2.5.1:2.7.2:2.4.2:2.4.1:6.3.4:2.5.1:4.4.1:4.1.2:2.6.1:4.4.1 +6.3.2:4.3.2:2.7.4:2.7.2:4.4.1:4.3.2:3.5.4 +2.4.2:3.6.1:1.2.1:3.1.3:3.2.2:2.4.2 +1.1.1:4.3.2:2.7.8:3.5.4:2.7.1:3.1.3:4.1.1:2.7.4:2.3.3 +6.3.4:5.1.2:4.1.99:2.7.4:1.2.1 +4.1.2:3.1.1:2.6.1 +1.4.3:2.7.1:2.5.1:3.1.1 +1.1.1:2.6.1:2.7.1:4.2.3 +1.5.1:3.1.3:2.7.2 +2.3.1:3.5.4 +2.3.1:4.4.1:2.6.1:6.3.3:2.1.3:2.1.1 +4.1.1:5.4.99:3.1.4:2.3.1 +4.2.1:4.1.2:1.2.1:6.3.5:2.4.2 +2.3.1:3.5.1:3.5.3:1.1.1:1.5.1:5.4.2 +1.2.4:2.6.1:2.6.1 +2.7.4:2.2.1:2.4.2:4.1.2:6.3.4:4.4.1 +6.3.5:2.4.2:3.6.1:3.1.3:1.1.1:4.4.1:3.1.1:2.3.1:6.3.4:6.3.3 +3.5.1:1.5.1:3.5.1 +3.5.4:4.6.1:3.1.1:2.7.4:1.13.11:2.4.2:3.2.1:2.1.1:3.6.1:2.7.7:6.3.4 +4.2.1:3.2.1:2.7.7:2.3.1 +1.1.1:2.5.1:1.11.1:3.6.1 +2.7.8:4.1.1:6.3.4:2.7.8 +6.3.3:2.1.3:1.5.1:2.7.1:4.2.3:4.3.2 +1.1.1:2.5.1:3.1.1 +5.3.1:6.3.4:1.5.1:1.3.1:2.5.1:6.3.4 +1.1.1:4.3.2:2.7.7:2.6.1:2.6.1 +6.2.1:1.2.1:2.6.1 +1.5.99:1.1.1:5.4.99:3.6.1:1.2.1 +3.5.99:4.3.1:1.5.1 +3.5.1:3.5.1 +1.2.1:2.7.4:2.5.1 +4.2.3:2.5.1 +1.1.1:1.2.1:4.2.1:2.1.2 +3.5.1:6.3.4:2.1.1:2.4.2:2.3.3:4.1.1:4.2.1:2.5.1 +2.6.1:1.7.2:4.3.2:2.7.1:4.2.3:1.4.1:2.1.1 +4.1.1:2.7.1:3.3.1:6.4.1 +6.3.1:5.4.99:1.2.1:4.2.1 +3.3.1:4.2.1:2.7.2:5.4.2:3.1.4:5.4.99:1.2.1 +1.14.13:1.4.1:2.7.1:2.3.1:1.2.1:4.2.1:5.1.2:4.2.1:2.7.7:4.2.1 +3.2.1:2.7.1:4.1.1:1.5.1:2.7.4 +2.3.1:2.7.1:3.5.3:4.1.1:2.4.2 +2.7.2:4.1.1:2.1.2:4.1.1:1.1.1:3.1.3 +2.7.2:1.1.1:1.2.1:4.1.1:5.1.3:6.3.5 +2.6.1:2.6.1:2.1.3:2.7.1 +6.3.4:2.7.1:2.5.1 +1.4.1:2.7.1:2.3.1:5.4.99:6.3.4:6.3.5 +6.3.4:2.7.7:2.1.1:4.2.1:3.6.1:3.5.1:3.5.3:4.2.1 +1.13.11:4.3.2:2.7.1:6.3.4 +4.2.1:2.3.1 +2.1.3:3.5.1 +3.5.3:1.1.1:6.3.3:2.3.1:1.4.4:2.5.1:1.7.2:2.7.4:5.4.2:6.3.4 +2.1.3:6.1.1 +4.3.1:5.1.1:3.1.1:1.1.1:6.3.2:3.1.3 +2.5.1:2.5.1:2.7.4:1.1.1 +3.6.1:4.2.1:2.7.9:4.1.2 +2.7.7:4.3.2:4.1.1:6.1.1:2.7.1:5.4.2:3.5.4:4.2.1 +1.2.1:6.3.2:2.6.1:3.2.1 +2.3.1:2.7.2:2.1.1:1.1.1:1.2.7:4.1.1:2.4.1:2.7.1:2.4.1:2.8.1 +3.6.1:3.2.1:2.4.2:6.3.5:1.1.1:2.7.2:5.3.1 +6.4.1:4.1.1:3.4.11 +6.3.4:5.4.2:2.7.2 +1.2.1:6.3.4:6.3.2:4.1.2:2.2.1:5.4.2 +3.5.1:2.4.1:4.4.1:1.1.1 +2.7.1:5.4.99:2.6.1:3.5.1:4.3.2 +9.9.9:2.3.1:4.4.1:1.4.3:2.7.2:2.3.1:3.5.1:4.1.1 +2.4.2:1.2.1:4.2.3 +5.1.2:2.3.1:2.4.2:3.5.4:1.2.4:5.4.99 +1.2.7:2.1.3:6.3.1:1.2.1:5.4.99:4.1.1:2.7.2:5.1.1:2.3.1:2.3.3:3.1.1:1.2.4:3.6.1:1.4.1 +6.3.2:2.5.1:2.1.1:2.1.1:5.4.99:3.5.1:3.1.3 +2.7.4:6.3.2:3.1.3 +5.4.99:2.7.4 +2.1.2:5.1.1:4.3.2:2.7.6:2.4.2:2.8.1:1.2.1:1.2.1:1.4.1 +1.4.1:2.7.7:2.3.1:3.1.3:2.7.2 +2.3.1:6.3.4:2.4.2 +4.3.2:1.1.1:2.6.1:1.2.1:1.2.1:1.2.4:2.5.1:3.1.4:4.2.1:1.2.1:4.3.2:4.3.2:2.7.2 +4.3.2:5.4.99:2.5.1 +3.5.5:2.4.2:3.5.1:3.1.3:2.7.4 +2.7.1:3.6.1:2.4.2:9.9.9:2.4.2 +2.1.1:2.3.1:3.5.2:6.3.4:4.3.2 +2.5.1:4.3.2:9.9.9:2.7.2:1.1.1 +6.3.2:2.7.1:2.6.1:1.2.1:4.2.1:5.3.1:2.8.3 +2.7.4:4.3.1:2.7.8:4.4.1 +1.5.1:3.1.4:6.2.1:2.6.1:2.3.1:3.5.1 +2.1.2:2.7.1 +6.3.4:2.6.1:1.2.1:1.5.3:4.2.1:2.1.2 +3.2.1:4.2.1:6.3.4 +3.2.2:2.7.1:1.2.1:2.3.1:2.7.1:2.6.1 +3.5.4:2.1.2:1.5.1 +3.5.1:2.4.2:2.4.2:6.3.4:2.7.7:2.7.6:2.7.6:3.1.5:2.7.7:4.4.1:6.3.5:2.1.2:3.5.1 +6.4.1:6.3.2:3.1.3 +2.1.3:4.1.1:4.1.2:3.5.3:5.3.1 +3.1.3:4.3.1:1.3.3:2.2.1:5.1.1:6.3.2 +3.2.1:1.2.1:2.1.3:1.1.1:2.6.1:2.1.1:3.2.1 +1.14.13:2.3.3:4.1.1:5.3.1:2.1.3:4.2.3 +2.3.3:3.2.1:2.3.1:2.7.7:1.2.1:6.3.2:2.7.7 +3.5.5:1.2.1:4.1.3:1.2.1:1.2.1:1.14.13:2.5.1 +1.13.11:2.3.1:3.5.1:2.5.1:2.1.2 +2.3.1:2.7.1:2.3.1:5.1.3 +2.7.1:1.3.3:2.1.2:4.2.-:4.1.2:1.5.1:2.5.1:6.3.4:2.6.1:2.7.1 +2.7.7:3.6.1:6.3.5:3.1.3:2.5.1:1.3.99 +3.1.3:6.3.4:3.6.1 +2.3.1:2.2.1 +4.1.3:3.1.1:2.3.1:6.3.4:4.3.1:1.13.12 +3.5.1:2.7.7:4.3.2 +2.1.3:4.4.1:5.1.3:3.5.4:5.4.3:3.5.2:5.1.3 +6.3.4:1.5.1:2.1.1:3.5.1:4.2.1:3.2.1:2.7.1 +4.2.3:5.1.3:1.1.1:2.5.1:6.2.1 +2.7.6:1.97.1:2.7.1 +6.3.3:3.1.2:2.7.8:3.5.5 +2.3.1:5.4.2:2.4.2:1.2.1:2.7.7:2.7.1:1.2.1 +1.1.1:4.4.1:2.7.4:2.5.1:2.3.1 +6.3.2:1.1.1 +5.1.3:1.3.3:1.3.3:1.1.1:2.7.1:1.3.99:4.2.3 +3.5.1:2.7.6:3.6.1:1.1.1:2.7.7 +4.2.1:1.14.13:2.7.1:2.5.1:5.4.2:6.3.4 +1.2.1:6.3.5:2.7.7:4.3.2:4.3.2:4.1.2 +3.5.1:2.6.1:2.3.1:6.3.4:3.1.3 +4.4.1:4.2.3:1.5.1:3.5.5:2.7.1:4.1.1 +2.6.1:1.1.1:3.5.3:3.5.1:2.3.1:4.1.2:6.3.1:2.7.4:4.1.1 +2.7.4:2.3.1:4.1.1:1.7.99:3.6.1:2.4.2:2.7.1 +3.1.4:1.1.1:2.1.1:3.5.5:6.4.1:2.7.1:1.2.1:2.1.1:2.6.1 +2.7.2:1.1.1:4.1.1:2.4.2 +4.1.1:1.11.1:2.7.6:5.4.99:1.2.1 +1.4.1:4.2.1:4.3.1:3.1.1:3.5.2 +2.1.3:4.1.1:1.1.1 +1.5.1:5.4.2 +2.7.1:1.5.1:4.1.1:6.3.3:6.2.1:4.1.1:2.3.1:1.2.1:2.7.4:2.7.2 +4.2.1:4.1.1:4.2.1:1.5.3:2.3.1:2.6.1:2.7.7:2.6.1 +3.6.1:2.6.1:9.9.9:2.7.2:2.1.1 +6.3.4:3.4.13 +5.3.3:4.1.1:1.1.2:2.2.1:1.1.2:2.7.2:2.6.1 +1.1.1:4.2.1:4.6.1:6.3.2:2.6.1 +2.7.8:2.3.1 +5.3.1:4.2.3:1.1.1:1.2.1:1.5.1:1.1.1 +2.1.2:4.1.2:4.3.2:5.3.1 +4.2.1:4.2.3 +2.4.2:6.3.4:2.7.1:2.7.2:4.1.1:2.6.1:3.1.3:4.2.1 +2.5.1:2.7.2:5.3.1:4.2.1:2.6.1:2.7.8:4.2.-:2.7.1 +4.2.3:2.5.1:5.4.2:3.1.3:3.5.1 +1.14.13:1.14.12:3.5.1 +1.2.4:6.3.4:2.6.1:4.3.2:4.1.2:2.3.1:2.7.1:4.2.1:4.3.1:5.4.2 +2.4.2:2.4.1 +2.1.1:3.6.1:1.1.1:4.2.1:4.1.1 +2.4.1:3.5.3 +6.3.4:2.6.1:4.3.2:3.1.3 +6.3.2:2.7.1:4.4.1:4.3.2:5.4.99:3.1.2:1.5.1:1.5.1:6.3.3:3.2.1 +3.1.2:3.3.1:2.4.2:6.2.1:2.5.1 +2.3.1:2.5.1:4.2.1:4.1.2:2.1.1:5.3.1:4.2.3:2.3.1:4.3.2 +3.2.1:1.2.1:2.1.3:3.5.1:6.3.2:6.3.5 +3.1.4:1.2.4:2.7.2 +6.3.5:2.7.1:2.6.1:1.1.1:4.3.1:2.5.1:2.3.1 +2.7.2:3.6.1:5.3.1:2.5.1:1.5.1:3.5.3:4.2.1:4.2.1:2.4.2 +4.4.1:1.1.1:2.7.2:1.1.1:3.5.1:3.5.4:2.7.1:4.3.2:2.7.2:2.3.1 +2.3.1:3.5.2:2.1.1 +4.1.3:2.7.7:2.7.1 +4.1.1:4.1.1:2.1.3:3.5.1:5.4.99:5.4.2 +1.5.1:6.3.2:3.6.1:2.7.1:1.1.1:2.7.1:4.3.1 +2.4.2:6.3.2:1.4.1:2.4.2:4.4.1 +4.3.1:6.3.2 +2.7.1:1.1.1 +4.1.2:1.2.1:4.2.1:4.2.1:2.7.6:4.2.1 +2.5.1:1.1.1:2.1.2:5.4.99:2.5.1:4.1.1:1.2.1 +5.2.1:1.4.3:4.1.3 +2.7.7:4.1.1:3.5.1:2.7.7 +2.7.2:2.4.2 +1.4.1:2.1.1:1.1.3 +3.5.1:4.2.1:4.2.1:5.4.2:2.7.7 +1.1.1:6.4.1:1.2.1:5.4.99:3.6.1 +2.1.1:2.6.1:3.6.1:4.2.1:3.5.2 +3.1.3:5.4.2:2.8.1:1.2.1:4.2.1 +1.2.1:2.2.1:4.1.2 +6.3.3:1.3.3:4.2.1 +4.2.-:1.2.1:5.3.1:3.1.5:2.5.1:4.2.1:2.7.4:2.6.1 +4.3.1:4.1.1:2.7.1:1.3.99:2.3.1 +6.2.1:1.2.1:3.5.4:1.2.5:3.5.1:5.4.2:2.1.3 +2.6.1:3.6.1:1.2.1:2.7.6:1.1.1:2.1.2 +3.1.3:2.7.1:5.3.1:1.3.1:2.3.1 +2.6.1:1.1.1:1.1.1:2.6.1:2.7.4 +2.2.1:2.7.7:2.4.2 +4.4.1:2.6.1 +3.5.1:3.5.1:1.8.1:1.2.1:6.3.3:2.1.3:3.5.1:3.5.1:2.3.1:4.4.1:3.4.11 +2.4.2:3.5.3:6.3.3:1.13.11:2.5.1:6.3.4:2.7.1:2.7.2:3.2.1:2.7.4:4.2.1:2.3.1 +2.7.4:4.1.1 +3.5.1:1.1.1:1.3.1:5.3.1:6.3.4 +2.7.4:3.5.1:6.3.3 +1.4.1:4.4.1:1.2.1:2.5.1 +4.1.3:3.5.1:4.3.1:3.5.3:2.4.2:2.4.2:2.7.2:4.3.1:1.1.1:2.4.2:2.5.1:2.3.1:2.3.1 +3.3.1:1.2.1:1.1.1 +1.1.1:6.3.4:5.4.2 +2.3.1:2.8.3:2.1.3:1.2.1:1.1.1:2.7.2:4.4.1 +2.1.2:2.7.4:2.1.2:2.1.1 +2.6.1:4.1.1:5.4.99:2.7.1:2.6.1 +1.2.1:3.1.3:2.7.2:2.4.2:4.2.1:3.1.3:2.1.3:4.2.1:1.1.1:4.2.1:3.1.3:5.3.1:4.3.2:1.2.1 +2.1.1:1.2.1:3.1.4 +2.3.1:2.3.1:4.3.2:4.1.1:4.2.1 +1.2.1:2.7.7:2.5.1:3.2.1:4.2.1:1.2.1 +1.2.1:3.2.1:6.3.4 +2.7.2:5.1.1:2.7.8:2.4.2:2.4.1 +2.3.1:1.2.4:4.2.1 +2.3.1:2.7.1:3.1.3:4.3.2 +3.3.1:2.1.1:5.4.2:4.1.1 +1.8.4:2.4.2:4.1.2:2.7.1:2.5.1:2.7.1:2.1.3:1.14.16:1.2.5 +2.3.1:1.5.3:2.7.2:1.1.1:4.1.1:1.1.1:2.1.4:2.4.2:4.2.3:2.3.1:4.1.1 +6.3.4:2.5.1:6.3.4:2.7.1:2.7.1:1.2.1:4.2.1:1.14.13:1.4.99 +3.1.4:3.6.1:5.3.1:3.1.3:2.7.1:1.5.1:4.2.1 +2.3.1:2.7.8:4.1.2:1.17.7 +6.1.1:3.4.11:2.7.1:2.6.1:1.4.3:6.3.4:2.6.1 +2.6.1:1.2.4:2.5.1:1.1.1:4.1.1:3.3.1:9.9.9 +2.7.1:1.4.3:6.2.1:4.1.1:2.1.2:6.3.4 +2.7.1:1.8.1:2.6.1:2.7.6 +6.3.5:2.1.3:4.2.1:2.1.1:5.3.1:3.1.3:2.5.1 +2.3.1:4.1.1:3.4.11:2.5.1 +2.3.1:2.3.1:5.3.1:1.2.1:6.3.1:6.3.4 +2.7.2:3.2.1:2.1.1 +4.2.1:2.6.1:2.7.7:2.4.1 +5.4.99:3.5.1:4.1.1:4.1.1:5.3.1:2.3.1 +6.3.3:2.3.1:4.2.1:2.7.7 +2.4.2:4.1.2:2.5.1:1.5.1:1.2.1:2.1.1:6.3.4 +2.4.2:4.3.2:3.5.1:3.5.1:4.1.1:4.3.2:2.1.1 +3.4.11:6.3.4:1.1.1:2.1.2:4.4.1 +2.7.1:2.4.2:4.1.2:5.4.99:6.3.4:2.6.1:4.3.2:5.4.99:4.3.1 +3.5.4:1.7.99:3.1.5:4.1.3:2.7.2:2.6.1:6.3.2:5.4.99 +6.3.1:4.3.1:2.7.1:2.7.2:3.2.1 +4.2.3:1.2.1:2.7.4 +3.1.3:1.1.1 +2.6.1:2.7.7:2.4.2:2.6.1 +2.7.9:2.6.1 +2.7.1:3.4.13:2.3.1 +2.-.-:2.3.1:2.7.6:3.4.11 +2.7.1:2.6.1:2.7.4:2.7.1 +2.7.1:3.5.1:2.5.1:4.1.1:4.2.1:2.5.1:3.5.1:2.7.4:4.4.1:2.7.1:1.1.1:1.1.1:3.1.1 +1.1.1:2.3.1:4.2.1 +3.6.1:4.4.1:2.8.3:2.6.1:3.5.1:2.5.1 +2.7.2:2.7.2:2.3.1:1.2.1:1.2.1:2.5.1:2.7.6:2.3.1 +6.3.1:2.4.2:2.7.1:1.14.12 +4.1.2:2.7.1:2.4.2:1.1.5:2.7.7:2.6.1:4.1.1 +2.3.1:6.3.4:2.3.1:2.6.1 +3.5.2:1.2.4 +4.2.1:2.7.7:5.4.99:1.1.1 +6.3.4:1.7.2:3.3.1:3.5.5 +1.2.1:4.4.1:2.7.8:2.6.1 +1.8.1:5.3.1:3.1.2:2.3.1:4.4.1:5.3.1 +5.3.1:4.2.1:1.1.3:6.3.3 +2.3.1:2.6.1:4.4.1 +3.2.1:2.7.1:2.3.1:2.2.1:3.2.1:5.1.3:1.17.4:1.5.99:1.1.1:2.5.1:3.5.1:2.6.1 +4.4.1:1.2.1:4.2.1:1.5.1:4.1.1 +6.3.4:2.7.2:2.2.1 +2.6.1:4.2.1:5.3.1:2.3.1:2.7.2 +2.7.1:2.7.4:2.7.2:3.5.3:2.7.2 +4.1.2:2.1.1:2.3.1:2.5.1:2.1.1 +2.4.1:3.5.3:4.2.3:2.6.1:2.5.1:2.7.4:2.1.1:4.4.1:2.3.3 +2.7.7:4.1.3 +5.1.3:4.1.1:2.5.1 +6.3.3:4.1.1:2.6.1:4.1.2 +3.2.1:2.7.2 +2.3.1:4.1.2:3.1.4:2.7.7:1.3.99:1.2.1:1.4.1 +5.3.1:1.1.1:1.1.1 +9.9.9:1.2.1:2.6.1:2.3.3:1.8.1 +5.4.2:1.2.4:4.3.2:6.3.4:2.6.1:5.4.2:1.2.1:4.2.3 +2.7.4:2.8.3:2.7.4:4.1.1:5.4.99:1.2.1:6.3.4:1.1.1:5.3.1 +1.2.5:4.1.1:2.7.4:2.3.1 +1.4.1:2.4.2:4.3.1:1.2.1:4.1.1 +2.1.1:2.7.7:2.3.1:2.2.1 +1.1.1:1.2.1:2.2.1:4.1.1:9.9.9 +2.3.1:3.6.1:4.1.1:3.1.2:5.4.99:2.7.2:2.5.1 +2.4.2:1.5.1:4.1.1 +2.4.1:1.2.5:1.17.1:2.3.1:1.1.1:9.9.9:2.3.1 +2.5.1:3.5.2:2.6.1:1.1.1:1.1.1:1.2.1 +2.7.8:2.4.1:1.4.1:4.3.2:2.7.4:1.2.1:3.5.1:6.3.4:2.1.1 +1.1.1:2.3.1:4.1.3 +1.1.1:4.1.2:1.2.1:6.3.4 +2.7.2:4.1.1:3.2.1:1.1.1:6.3.1:4.3.2 +4.4.1:6.3.4:2.7.4:2.7.7:2.7.4:5.3.1 +1.8.1:4.3.2:1.14.13:2.3.3:6.3.4 +2.7.4:2.7.9:6.3.2:2.7.1:5.4.2 +2.7.4:4.2.1:1.1.2:6.3.3 +4.3.1:4.3.1:2.7.2:1.4.1:2.7.6:2.7.2:5.3.1 +1.14.16:4.1.1:2.7.8 +1.1.1:4.2.1:5.4.2:1.8.1:2.4.2 +2.3.1:6.3.3:1.4.1:4.2.1:5.1.1:2.7.1:3.1.1:4.3.1 +1.8.1:4.1.3:2.5.1:1.2.1:2.4.2 +2.1.3:2.3.1:1.5.1:2.2.1:1.5.1:2.3.1:3.5.3 +3.6.1:1.17.1 +1.1.3:4.2.3:2.3.1:1.2.1 +3.2.2:6.3.4:1.5.99:2.7.2:2.3.1 +4.2.3:1.1.1:5.4.99 +3.1.1:2.3.1:2.7.1:3.6.1:2.1.3 +6.3.4:2.7.7:4.1.1:1.2.1 +1.3.3:4.1.1:2.7.2:2.1.2:3.6.1:2.5.1:3.5.1:3.1.1:2.3.1:2.3.1:2.4.2 +1.4.1:6.3.2:2.7.6:2.5.1:3.5.1 +6.3.3:5.3.1:2.6.1:2.6.1:4.1.1 +4.3.2:1.1.1:1.2.1:2.7.1:1.5.1 +1.2.1:2.3.1 +4.1.2:2.1.2 +4.1.2:2.1.1:4.1.2 +5.5.1:1.1.1:1.1.2:6.3.4:6.3.4 +5.4.3:2.4.2:2.7.2:1.5.1 +4.2.3:1.2.7:2.1.2:2.7.1 +3.5.1:2.7.2:4.2.3:1.1.1:2.5.1 +6.3.4:2.2.1:2.3.3:6.2.1 +2.7.2:2.7.1 +3.1.4:2.7.4:2.1.2 +4.2.1:2.4.2:3.1.1:6.2.1:4.1.1 +1.4.1:6.3.3:2.1.1:6.3.2:3.5.1 +1.3.3:2.3.1:2.4.2:2.7.7:3.1.3 +4.3.1:4.3.1:3.6.1:2.7.2:4.1.1:6.3.2:3.5.2:3.5.1:4.3.1 +3.1.3:2.3.1:6.2.1:3.5.3:2.7.1:1.2.1:1.13.11:2.3.1:4.4.1:1.7.2 +6.3.1:2.8.1:3.6.1:2.4.2:5.3.1:6.3.4:3.1.3:2.4.1:3.5.1:3.5.1:1.5.99:5.4.2 +3.2.1:1.7.1 +5.4.2:3.1.2:2.3.1:3.1.1 +5.3.1:2.4.2:4.1.3:5.3.1:1.1.1:2.6.1:2.3.1 +3.6.1:2.2.1:2.7.2:3.7.1:2.4.1:2.1.1:6.3.4:2.5.1 +4.1.1:6.3.4:4.1.1:2.7.1:6.3.2:6.3.2:2.3.1:4.1.1:2.1.3:2.6.1:2.7.1:1.4.1 +1.7.99:1.2.1:2.7.2:4.1.1 +3.2.1:2.1.1:2.7.1 +1.2.1:5.4.2:3.3.1:2.7.2:1.5.1:1.2.4:2.3.1 +2.3.1:2.6.1:2.1.1:3.5.3:1.3.99:2.4.2 +1.5.1:3.4.13:5.4.2:4.1.2:1.4.4:4.1.2:3.2.1:2.7.1 +2.7.1:1.4.99:3.1.1:5.4.2:6.2.1:2.3.1:6.3.4:2.7.7 +3.6.1:4.1.1 +4.2.1:2.7.8:1.1.1 +4.3.2:3.1.2:4.2.1 +3.5.4:4.1.3 +5.4.99:6.3.2:4.3.2:6.3.3:2.7.2:4.1.1:5.1.3:1.2.7:1.1.1:2.1.1:2.3.1 +4.2.1:2.7.7:1.5.99:2.1.1:1.2.4:2.4.1:1.17.1:2.7.1 +6.4.1:2.7.2:1.7.99:2.7.1:1.3.99 +2.4.2:2.1.1:4.2.3:2.5.1:2.7.4:1.2.1:2.1.3 +4.3.2:5.3.1:4.1.1:4.4.1:2.3.1:4.3.1 +4.2.3:1.1.1:2.3.1:1.1.1 +2.1.1:1.17.1:2.6.1:4.3.2:6.3.4 +2.3.1:2.1.2:1.2.1:4.1.2:6.3.5:1.2.1 +6.3.2:2.1.1:4.3.1:2.7.7:4.3.1:4.2.1:5.4.99:1.1.1:4.1.1 +5.1.3:3.5.3:3.2.1:3.5.4:2.7.1:2.7.1:1.1.1:2.7.2:2.1.3:2.1.3:1.1.1:4.1.3 +2.6.1:4.3.2:5.4.99:3.6.1:3.1.3:3.5.1:2.4.2 +1.5.3:2.7.8:2.7.7:4.1.3:2.7.1:1.2.4:1.4.1:2.5.1:2.7.2:4.1.1:4.4.1 +2.7.7:1.2.4:2.3.1:1.14.13:4.2.1 +2.3.3:2.7.1:2.1.3:6.3.2:4.1.1:4.1.1 +4.2.3:1.17.4:5.3.1:6.3.3 +2.1.2:3.5.3:1.2.1:2.1.2 +6.3.3:1.5.1:4.1.1 +6.3.4:4.3.2:4.1.1:1.2.1:5.4.99 +2.3.1:2.7.2:4.1.1:2.1.1 +2.2.1:4.2.3:2.7.4:1.2.1:6.3.3 +2.1.3:4.1.3:3.4.13:2.3.1:2.5.1:5.3.1:2.4.2:3.2.2 +2.1.2:1.2.1:1.1.1 +3.2.1:2.5.1:2.1.1:1.1.1:3.2.1 +2.3.1:2.7.1:3.2.1:3.1.3:3.5.1 +2.7.1:3.5.1:1.1.1:2.3.1:6.3.2:1.17.1 +2.5.1:1.5.99:2.7.1 +3.6.1:2.1.3:3.6.1:6.3.4:4.3.1 +2.1.2:4.2.1:2.3.1:2.7.7:2.4.2:2.7.7 +2.5.1:2.3.1:2.7.4 +2.1.1:3.5.1:1.3.3:3.1.1:4.2.1:2.6.1:5.4.2 +6.3.4:6.3.5:2.5.1 +6.1.1:4.1.1:2.1.2:3.5.1:2.7.2:4.4.1:2.7.1:1.-.-:5.3.1 +6.4.1:6.3.5:1.3.99:4.3.1 +2.7.7:3.2.1:2.1.2:2.1.3:2.7.1:4.1.3:2.1.1:2.7.4:5.3.1:4.4.1 +6.3.3:6.3.3:3.5.1 +4.2.3:4.3.2:2.7.2:1.4.3 +2.5.1:1.2.1:6.3.4:2.3.1:3.5.3 +5.3.1:2.6.1:1.14.16:4.1.1:2.3.1:2.7.1:2.7.2 +1.4.1:3.6.1:4.4.1:1.5.1:2.7.4 +5.4.2:4.1.1:2.6.1:2.4.2 +1.5.99:2.6.1:2.7.2:2.1.3 +2.3.3:1.1.1:4.3.2:2.4.2:3.1.2:2.1.3:5.3.1:2.7.7:2.3.1:4.2.1:2.7.1:1.2.1:2.5.1 +2.1.3:2.1.2:1.1.1:6.3.4 +2.1.2:2.7.9:4.1.1:2.3.3 +2.7.1:5.1.3:4.2.1:2.5.1:1.1.1:2.1.1:4.4.1:5.3.1:2.7.8 +6.3.4:2.3.1:3.5.1:2.6.1:3.1.3:2.7.1:4.1.2 +1.8.1:2.9.1:5.4.99:2.4.2:3.5.3:1.11.1:4.1.3:2.8.1:9.9.9 +2.3.1:2.7.6 +2.7.6:1.1.1:5.4.2:5.4.2 +3.5.1:2.7.2:6.3.5:1.7.99:5.3.3:3.5.1:2.4.2:2.7.4:2.1.1:2.7.8:1.3.99 +2.7.9:2.7.9:2.7.2:1.2.1:4.4.1 +6.3.4:2.3.1:1.3.3:2.7.8 +1.2.4:2.5.1:2.5.1:3.5.3:2.7.7 +3.1.2:2.7.7:9.9.9:1.1.1:2.3.1:4.3.2:6.3.5:1.3.99 +3.2.1:4.3.1:2.7.1:2.7.1:5.4.99:4.1.1:2.1.3:3.5.1:1.1.1:2.7.1:1.5.1 +3.4.11:2.7.1:2.4.1 +2.3.1:2.7.1:1.2.1:6.3.4 +2.5.1:6.3.4:3.3.1:3.4.11 +4.1.3:3.6.1:2.7.2:4.3.1 +3.5.1:4.4.1:6.3.4:1.1.1:6.3.3:6.3.4 +5.3.1:3.6.1:6.3.3:6.3.1:1.5.1:2.3.1:2.7.4:1.1.1:1.2.1 +3.5.3:2.6.1:1.2.1:1.1.1:4.1.2:2.3.1:4.2.1:2.1.2:1.2.1:4.1.1 +2.3.1:5.3.1:2.3.1:4.4.1:1.2.4:1.4.1:5.4.2:3.6.1 +4.3.2:5.4.99:4.2.1:3.5.1:1.2.1:6.4.1:2.7.4:4.1.1:2.3.1:2.4.2 +4.3.1:1.7.99:2.5.1:2.7.2:3.5.1:5.3.1:2.6.1 +3.5.1:2.3.1:1.1.5:4.4.1 +3.5.3:1.2.1:4.2.1:3.1.4 +3.5.1:2.7.4:2.3.1 +3.6.1:1.1.1:2.7.1:4.2.1:1.2.1 +2.3.1:5.4.2:3.1.3:1.3.99:1.2.1:4.1.1:4.-.-:1.3.1:6.3.3:1.5.1:2.1.1:2.7.7 +2.1.3:1.1.1 +1.1.1:4.1.1:1.4.1 +2.4.2:1.1.1:4.3.2:1.5.1:4.1.1 +4.2.1:1.5.1:3.5.1:4.3.1:2.6.1:2.1.4:2.5.1:3.2.1:2.1.1:2.4.2:4.3.1:1.4.1 +2.6.1:2.4.2:3.5.4:4.2.3 +2.5.1:3.2.1:3.1.1:2.7.1:4.1.1 +2.4.2:2.2.1:3.5.1:3.1.3 +1.13.12:2.7.7:4.1.1:2.7.6:2.4.2:2.7.2:6.3.2 +2.7.6:1.14.13:2.7.1:4.1.3 +2.7.1:4.2.1:2.1.2:3.5.3 +2.7.2:2.6.1:3.1.3 +1.1.1:2.7.6:2.1.2:5.1.3:3.2.1:2.1.1:2.7.4 +2.5.1:5.4.2:3.1.3:4.1.1 +2.3.1:2.1.3:2.4.1:2.8.3:2.5.1:1.4.1 +1.8.1:3.1.5:2.3.3:5.1.3:6.3.4:5.1.2:4.3.1:1.1.1:4.1.1:6.2.1 +3.1.3:3.5.1:2.7.2:3.6.1 +4.2.1:2.1.3:3.5.3:2.3.1:1.4.4 +4.2.3:4.2.1:4.2.1:2.6.1 +4.3.2:4.4.1:5.3.1:3.5.3:2.7.1:2.7.4 +1.2.1:1.4.3:4.2.3 +2.1.1:4.3.1:2.5.1:2.7.8:2.7.4:4.1.1:4.4.1:2.7.1 +2.3.1:3.5.3:2.1.3:3.5.4:1.5.1:1.2.1 +4.4.1:2.3.1:3.4.13:3.1.3:5.1.3 +4.4.1:6.4.1:1.5.1:2.7.1:2.1.1:3.1.4:3.5.1 +5.4.99:6.3.4 +4.1.2:4.2.1:2.8.1:3.5.1:1.5.1 +6.3.4:2.4.2:1.4.4:1.4.1:2.6.1:4.1.1 +2.5.1:2.6.1:4.2.1:2.5.1:1.1.1 +3.1.4:2.4.2:2.1.2:5.4.2:1.5.1 +4.1.3:2.1.1:2.7.1:2.1.3:2.7.2:2.6.1:6.3.4 +2.6.1:2.6.1:4.1.3:4.4.1:3.5.2:3.5.3:3.1.1 +2.1.1:4.3.1:1.1.1:2.1.1:4.3.2:3.5.1 +1.1.1:2.5.1:5.3.1 +2.7.2:4.3.1:1.5.1:2.7.9:2.7.1:1.3.1:4.1.1 +2.7.4:4.2.1:2.5.1:2.6.1:6.3.4 +2.7.7:2.7.7:5.3.1:2.1.1:5.1.3:4.1.1 +6.3.4:2.3.1:3.5.1:3.1.4 +1.1.3:6.3.4:2.6.1:6.3.3:3.5.2 +1.13.11:6.2.1:4.2.1 +2.7.1:1.2.1:1.4.3:4.4.1:4.1.1:4.1.1:2.2.1:1.5.1:2.7.1:3.5.99:1.7.1 +2.5.1:2.1.3:2.7.1:3.6.1:1.4.4:4.2.2 +2.8.1:4.1.1:2.7.2:6.3.1:4.4.1:2.7.8:5.1.3 +4.1.1:3.6.1:2.7.8:2.7.4:3.2.1:6.3.2:4.1.1 +2.1.3:1.2.4:5.3.1:5.4.2 +2.6.1:2.3.1:6.3.2:4.2.3:1.2.1:6.4.1:2.8.1:4.1.1:6.6.1:1.1.1:2.3.1:2.4.2 +5.3.1:2.3.1:3.2.2:1.2.1 +1.7.1:3.5.4:6.3.4:6.3.5:3.1.3:4.1.1:5.3.1 +6.3.2:3.5.3:1.1.1:2.6.1:2.7.4 +2.1.3:2.7.7:2.6.1:2.4.2:6.3.4:3.1.2:5.3.1 +4.1.99:2.7.2:2.4.1:2.5.1 +4.3.2:2.7.6:2.7.7 +3.5.1:1.5.1:3.2.1:5.3.1:4.1.1:2.2.1:2.3.1:4.3.2:2.7.1:2.7.1:2.3.1 +3.5.1:2.3.1:2.7.4:2.7.1:1.4.1:1.4.1:1.1.1:1.7.99:6.3.2 +6.4.1:2.7.1 +2.7.2:4.3.2:2.5.1:3.1.3:1.2.1:3.1.3:3.1.4:2.1.3 +5.1.3:1.3.99:2.7.1:2.3.1:2.1.3 +4.2.1:6.3.4:2.7.7:2.6.1:2.7.1 +2.3.2:2.3.1 +5.1.3:4.2.-:1.1.1:3.5.1:3.1.4:2.3.1:1.1.1:4.2.1:2.5.1:1.1.1 +2.1.2:6.3.3:2.6.1:1.2.1:4.1.1:1.2.1 +3.5.3:1.1.1:2.7.2:3.5.2 +3.5.99:6.3.2:2.1.1:6.3.5:4.1.1:6.3.1 +1.1.1:5.3.3:4.1.2:4.1.1:2.6.1:4.3.2:3.2.1:2.6.1:1.5.1:2.3.2:1.8.1:2.3.3:1.14.16:1.5.1:1.17.4 +4.2.1:1.5.1:2.7.4:4.2.1 +4.1.1:3.5.1:3.2.2:4.1.1:1.7.2:2.8.1 +3.4.13:2.5.1:1.1.1:1.5.1:1.2.1:3.6.1:3.4.11 +3.6.1:4.1.1:4.3.1:2.7.1:2.3.3 +3.1.3:6.3.2:4.2.1:4.2.3 +1.4.1:2.4.2:2.7.2:2.7.7 +1.2.1:1.1.1:2.1.3:6.4.1:2.4.2:2.1.2:1.1.1:1.14.11:4.1.2:2.7.7:2.2.1:4.1.2:2.3.1 +2.6.1:2.3.1:2.6.1:4.1.1:2.6.1 +3.5.2:3.5.1:2.7.4:2.9.1:4.1.1:2.7.4 +3.2.1:1.13.11 +1.2.1:2.6.1:4.3.1:4.1.1:2.7.1 +5.4.4:3.4.13:1.7.2:4.2.3:2.7.1:1.2.1:5.3.1:1.2.1 +9.9.9:1.3.1:2.5.1:2.4.1 +2.5.1:2.3.1:2.1.2:6.2.1 +1.1.3:2.7.1:3.1.1:4.4.1 +3.7.1:2.6.1 +1.4.3:1.2.1 +4.2.1:2.4.2:6.3.4:2.7.8:4.3.2:2.3.1:4.2.3 +1.1.1:4.2.1 +2.3.1:5.3.1:2.4.2 +6.3.4:6.3.4:3.5.1:2.7.1 +2.7.1:3.5.3:2.1.1:2.7.1:6.3.2:2.6.1:3.5.3:4.1.1:4.3.1:2.1.1:1.7.99 +2.8.1:4.3.2:6.3.5:2.1.2:2.7.4:4.3.2:2.5.1 +4.4.1:5.3.1:2.1.4:1.7.99:2.7.1:5.1.3:2.7.1:1.7.99:1.1.1 +2.7.2:4.2.1:6.3.4:4.2.1:4.1.3:2.5.1 +2.7.1:4.2.3:2.7.1:2.7.7:2.5.1:5.3.1 +4.2.1:2.7.2:4.1.2:2.1.1:2.5.1 +6.3.4:5.3.1:2.7.2:2.6.1:4.1.1:2.5.1:2.7.2:2.6.1 +2.3.1:2.7.4:2.5.1:2.4.1:5.4.2 +6.3.3:2.6.1:2.7.4:3.2.1:4.2.3 +6.2.1:2.4.2:1.13.11:3.5.4:2.7.2 +4.1.1:4.3.1:2.6.1:2.5.1:4.1.1:6.3.3:3.3.1:2.7.7 +2.3.1:2.7.2:1.2.1:3.5.1 +2.4.2:2.5.1:3.4.13 +4.1.2:5.4.2:1.2.1:2.7.2:2.4.2 +2.7.6:1.2.1:2.7.9:5.4.99:3.6.1:4.2.1:4.1.3 +2.7.2:2.5.1:3.1.3:4.1.3 +4.99.1:3.5.1:3.5.1 +4.1.1:5.1.3:1.5.99:2.1.2:2.7.2:4.2.1:3.5.3:5.4.2 +5.4.2:4.2.1:1.3.3 +2.7.6:2.7.1:4.2.1:3.5.1:3.6.1:2.6.1 +4.2.3:4.3.1:6.3.4:2.1.1:4.1.2:2.7.1:3.1.3 +2.7.1:1.3.3:6.3.5:4.2.1 +2.7.2:3.5.1:3.5.3:4.1.3:6.3.1:2.7.1:4.3.2:4.2.1 +2.1.1:2.6.1:2.7.7:6.3.4:2.1.1:1.2.4:2.3.1:3.6.1 +6.1.1:6.3.2:2.3.1:3.1.4:3.1.3:2.3.1:5.3.1:2.6.1:2.7.2:4.3.1:3.6.1 +3.5.1:2.7.1:4.3.2 +4.1.2:1.7.1:2.1.2:1.5.99 +1.2.1:1.1.1:2.1.1:2.1.1:2.3.3:4.1.2:4.2.1:1.13.11:2.4.2 +2.6.1:2.3.1:3.5.1:2.7.1:2.7.4:2.1.2:2.4.2 +4.2.3:2.5.1:6.3.2:1.14.13:1.4.1:6.3.4:1.14.12:5.4.99:2.3.1:2.5.1:5.4.99:1.5.3 +1.2.1:2.-.-:1.1.1 +2.5.1:1.5.1:3.5.1:6.2.1 +4.1.2:2.6.1:3.1.3 +2.1.1:1.3.99:2.7.1:6.3.3:3.4.13:1.2.1:3.6.1:2.4.2:2.6.1 +1.2.1:1.4.1:2.4.2:6.3.2 +1.8.1:3.1.3:3.5.1:3.1.3 +2.3.1:6.3.5:4.3.2 +3.5.1:2.4.2:4.4.1:2.7.7 +2.7.6:5.4.2:6.3.1:2.7.1 +2.7.2:4.2.3:1.2.1:3.2.1 +4.1.1:3.6.1:3.1.3:4.1.3 +2.7.2:3.2.1:1.5.1:2.8.1:2.8.1:1.5.3:4.1.1:3.5.1 +6.3.4:2.3.1:4.4.1:2.4.1 +1.2.4:2.5.1:3.5.1:1.3.1:2.7.4:4.2.- +4.3.2:2.7.7 +2.4.2:6.3.2:2.3.1:4.1.2 +2.3.1:6.3.2:6.2.1:3.1.3:1.1.1:6.3.4:2.7.2 +2.7.4:3.5.1:2.7.7:4.2.1 +2.3.1:3.6.1:2.3.1 +4.3.1:2.4.2:1.2.1:4.2.3:2.7.4:3.5.1 +4.1.1:2.7.7 +2.4.2:4.3.2:1.8.1:4.3.2:2.7.7:3.2.2:2.7.6:4.3.2:1.5.1 +2.5.1:6.3.4:2.6.1:6.3.5:9.9.9 +1.1.1:2.6.1 +6.3.4:2.6.1:2.7.7 +2.7.7:5.3.1 +2.1.3:2.7.2:2.3.3:1.1.1 +2.7.9:2.7.1:2.3.1:2.1.1 +6.3.2:2.7.2:4.6.1 +3.4.11:1.8.1:2.7.4 +2.6.1:3.5.3:3.5.1:3.1.2:6.2.1:1.1.1 +4.3.1:3.5.3:1.13.11:2.6.1:2.5.1:3.5.3:4.1.3:2.5.1 +3.1.3:4.3.2:5.3.1:1.4.1:1.2.1 +3.5.4:2.3.1:1.1.1:2.3.1:6.3.4:6.3.4 +1.1.1:4.4.1:3.2.2:2.3.1:3.5.3:1.1.1 +2.3.1:6.3.4:1.4.1 +4.1.1:1.5.1:3.5.3 +2.7.2:2.6.1:5.4.1:6.3.4:2.6.1:6.3.3 +2.1.1:1.1.2:2.5.1:1.1.1 +4.2.1:2.7.2:2.3.1 +2.3.1:4.2.1:1.5.1:1.2.1 +2.6.1:5.3.1:3.5.1 +1.5.1:3.5.3:2.3.1:4.2.1:2.3.1:2.6.1:2.6.1:3.6.1:2.7.7:1.1.1:2.6.1:1.3.99:6.2.1 +1.4.99:5.3.1:4.3.1:2.4.2:2.5.1:2.1.3:2.4.2:2.7.1:2.7.2 +4.1.3:4.1.1:1.1.1:2.6.1:2.7.1:4.2.3:2.1.3:6.3.4 +2.7.4:3.2.1:2.1.2 +4.4.1:2.7.4:3.1.3 +3.5.1:1.2.1 +2.5.1:2.7.2:2.5.1:1.2.1:3.5.1 +1.2.1:2.3.1:1.5.3:1.2.1:1.1.1:2.6.1 +2.3.1:6.3.4:2.1.2 +6.3.5:6.2.1:5.4.2:1.5.1 +3.1.3:6.3.3:6.3.3:1.2.1:6.3.4:2.7.7:1.4.1:3.5.3:2.4.2 +4.2.1:2.3.1:2.6.1:6.3.3:2.7.1:2.7.7 +1.8.1:5.4.99:1.1.1 +3.2.1:6.3.4:4.1.2:4.3.1:2.4.2:1.1.1 +3.6.1:4.1.1:2.5.1:4.3.2:3.5.3:9.9.9:4.3.1:5.4.2 +2.7.1:2.5.1:4.4.1:1.1.1:2.7.2 +2.7.2:1.1.2:2.3.1:2.7.8 +3.5.1:6.2.1:3.2.2:3.4.11 +1.1.1:2.7.2:6.3.4:3.6.1:6.3.4:6.3.5 +2.3.1:2.7.1:2.7.1:5.4.2:1.2.1:1.13.12:1.2.1:2.7.1:3.5.1:2.3.1:1.17.4:1.1.1:2.6.1 +2.7.1:3.5.3 +1.2.1:2.3.1:2.5.1:1.1.1:2.3.1 +5.1.2:4.3.1:3.1.3:6.3.4:2.5.1 +6.3.3:6.3.2:2.7.1:1.4.1 +2.7.1:6.3.4:6.1.1:2.7.1:2.7.1:2.1.4 +1.1.1:2.1.2:3.6.1:2.7.1 +6.3.2:3.1.3:4.1.1:2.3.1 +6.3.2:2.7.4:2.4.2:9.9.9:6.3.5 +4.2.1:3.1.3:2.3.1:1.2.4:1.2.1:2.1.1 +5.1.2:1.2.1:2.3.3 +4.1.2:5.4.99:4.2.1:2.3.1:1.2.1:1.1.1:6.3.3 +2.5.1:2.7.1:1.1.3:4.3.2:2.7.2 +2.4.2:6.3.4:3.5.1:1.8.1:1.3.1:6.3.4 +4.3.1:2.5.1:4.1.2:4.1.1 +4.1.1:3.5.4 +1.2.1:6.3.4:3.6.1:2.1.1 +2.5.1:1.1.1:3.2.1:2.1.2 +2.4.1:6.2.1:2.3.1:4.2.1:4.2.1 +1.1.1:9.9.9:2.6.1:3.4.13:4.3.1 +2.1.2:6.3.4:6.3.5:3.5.4:6.3.2:2.7.2:1.2.1:4.2.3:2.3.1:2.1.1 +5.4.2:5.4.2:3.5.3:6.3.2:2.7.2:2.1.1 +2.7.2:2.6.1:2.3.1:4.1.2:2.7.1 +2.7.1:3.5.99:2.7.6 +4.2.1:1.2.1:5.3.1:4.2.3:1.1.1 +3.6.1:2.3.1:2.5.1:4.3.1 +1.17.4:3.5.1 +2.7.2:2.4.2:2.1.1:2.6.1:3.2.1 +4.3.2:2.1.1 +4.1.1:2.4.2:2.3.1:2.6.1:4.1.1 +1.2.4:2.4.2 +3.5.1:5.1.3:2.4.2 +2.8.1:1.1.1:3.5.1:4.1.1:4.1.1:2.3.1:4.1.3:2.7.7:3.5.1:4.1.1:1.1.1:2.6.1:2.7.7 +2.1.2:5.4.99:3.5.1:1.3.99:5.4.2 +9.9.9:3.5.1:4.4.1 +5.4.2:3.1.4:1.2.1:2.1.1:5.1.3 +2.6.1:5.1.2:3.5.1:1.2.1:4.3.2 +2.5.1:1.1.1:1.2.1:4.3.2:2.6.1 +3.5.2:4.1.3:2.7.7 +2.7.1:3.2.1:1.2.4:6.3.4:2.7.1:2.6.1:3.5.3:1.3.3:2.7.1:3.6.1:2.1.2:1.5.1 +3.5.1:1.2.1:4.3.1:2.5.1 +2.1.2:1.1.1:2.6.1:3.5.4 +5.3.1:2.5.1:1.1.1:1.13.11:1.14.13:5.3.1 +6.3.4:3.2.2:4.2.1:3.5.1 +2.3.1:2.7.4:2.3.1:4.1.3:3.5.3 +1.14.-:2.3.1:2.7.1:3.6.1:2.4.2:4.3.1:2.7.1:6.3.4:4.1.99:3.5.1:1.1.1:3.6.1 +4.2.1:2.7.4:2.7.1:2.3.3 +2.1.3:2.1.1:4.3.2:4.2.1:4.1.2:5.3.1 +3.1.3:4.3.1:1.3.99 +6.3.4:2.3.1:4.3.2:3.5.3:2.6.1:2.5.1:2.5.1:1.5.99:3.2.1:1.8.1:1.5.99:2.7.1 +3.2.1:2.2.1:6.3.4:4.2.-:2.5.1 +3.4.11:2.1.3:4.1.2:2.3.1 +4.3.2:2.1.1:1.2.1:4.4.1:3.5.1:4.3.1:1.1.1:2.3.1 +2.7.1:6.2.1:2.3.1:2.7.7 +2.4.2:2.7.2:2.4.2:1.2.1:6.3.5 +1.1.2:1.2.1:5.3.1:6.3.5:1.1.1:1.14.16 +6.2.1:2.7.1:4.1.3 +2.1.1:2.3.1:2.3.2:4.2.3:2.1.1:3.5.1:5.1.1 +1.4.3:1.3.1:1.5.1:4.2.1 +2.8.1:4.3.1:1.5.99:3.5.3 +2.5.1:2.5.1 +2.7.4:3.1.4:4.4.1:2.7.2:2.7.2:2.7.1:6.3.4:6.3.1 +1.1.1:4.1.1:2.7.9:2.4.2:4.2.1:2.6.1 +1.1.1:2.7.2:3.5.1:3.5.4 +3.4.13:2.7.4:3.2.1 +1.1.1:2.3.3:3.7.1:2.7.2:1.1.5 +2.5.1:1.2.1:4.3.1:3.2.1:1.1.1:2.7.7 +1.4.1:6.3.4:1.1.1:1.2.1:5.4.99:2.7.1:2.1.1:2.7.1 +6.3.4:3.5.1:2.1.2 +2.7.7:4.2.1 +1.3.99:2.7.1:4.1.1:2.7.1:3.5.2:2.3.1 +3.6.1:2.1.2:2.1.1 +1.1.1:2.6.1:4.2.1:4.2.3:3.1.3 +2.1.2:4.1.1:3.5.1 +3.5.3:4.3.1:4.2.1 +3.6.1:2.7.1:2.4.1:2.7.6:1.7.99 +6.3.3:2.6.1:2.1.1:4.3.2 +3.1.3:5.4.2:2.7.1 +1.3.3:1.1.1:2.5.1:2.7.1:4.1.1:2.7.1:2.7.6:2.3.1:5.1.3:6.3.4:5.1.3 +6.3.5:6.3.4:1.4.1:2.1.3:2.3.1:2.7.2:2.7.1:3.1.3:2.7.4:2.7.1:6.3.2:4.2.3:6.3.3:1.5.1:5.4.99 +2.7.2:2.1.1 +2.7.7:4.2.1:4.1.2:2.7.7:2.5.1:3.1.4 +2.1.2:2.1.2:4.2.1:6.3.5:1.4.1:2.3.1:6.3.5 +3.5.3:4.2.1:4.1.1:2.1.3:5.3.1:2.7.4 +1.4.1:5.4.2 +3.5.3:4.2.1:6.3.4:2.3.1 +3.5.3:3.5.3:1.1.1:2.7.1:1.2.4:2.6.1 +2.6.1:2.7.8:4.2.1:3.5.1:2.7.9:3.1.3:2.4.2:4.4.1:4.2.1 +1.4.1:3.4.13:2.1.2:4.4.1:2.7.1 +4.1.1:1.3.99 +4.2.1:2.4.2:4.3.1 +5.3.1:2.3.1:2.5.1:3.4.13:2.7.7:3.2.1 +1.1.1:2.6.1:2.7.1:6.3.2:3.5.1:2.1.3:1.2.1:6.3.4:2.7.2 +2.6.1:2.4.2:2.7.1:4.1.1:2.7.2 +5.1.3:2.7.1 +2.7.2:4.4.1:3.5.3:6.4.1:2.4.2:2.7.7:1.1.1 +6.3.2:2.7.1:1.3.1:4.1.2 +4.1.1:3.5.1:1.5.99:6.3.4:3.5.1:6.3.5:4.1.1:3.5.1:1.2.1:1.5.1 +4.1.2:3.5.1:2.6.1:2.5.1:2.6.1:1.1.5 +4.1.1:6.3.5 +2.7.7:3.5.3:4.1.1:6.3.4:2.4.2 +1.5.1:3.1.3:3.2.1 +4.3.1:6.3.2:2.5.1:6.3.4 +2.3.1:2.7.2:2.3.1:4.1.2:5.1.3:2.2.1:3.1.2 +4.3.1:6.3.4:9.9.9:2.7.9:3.5.1 +1.2.1:3.1.3:6.3.4:5.3.1:1.1.1:6.3.4:4.2.1 +2.3.3:2.3.1:2.6.1:5.3.1:5.3.1 +4.2.1:2.3.1:6.3.2 +3.6.1:2.3.3 +2.8.3:4.2.1:2.7.7:4.1.3:2.4.2:1.1.1:1.17.4 +1.2.4:1.4.1:6.3.4:2.7.1:6.3.5:3.1.4:2.6.1:1.4.1:3.4.13:6.1.1 +4.1.1:3.5.1:2.7.7 +1.1.1:1.1.1:2.7.1 +5.4.2:1.1.1:6.3.5:1.5.1:6.3.2 +5.1.3:1.14.12:3.1.3:6.3.4 +1.1.1:4.1.2:3.5.1 +2.4.2:1.2.4:6.3.3:2.6.1:2.5.1 +2.3.1:5.4.2:1.1.1:2.4.2:2.8.1:2.1.2 +6.3.4:4.4.1:1.5.99:3.4.11 +6.3.5:4.1.3:1.5.1:2.6.1:2.1.1:2.6.1:2.7.7:2.7.6 +3.5.3:1.4.4:1.2.4:4.4.1:2.7.2 +4.1.1:5.1.1:2.5.1:1.2.1 +5.3.1:2.7.1:3.5.2:3.1.5:1.14.16 +4.3.2:5.1.3:2.3.1:6.3.2 +6.3.4:1.5.1:1.8.1 +2.4.2:1.4.1:2.6.1:2.7.1:2.7.6:1.13.11 +3.5.1:1.17.1:6.3.2:3.6.1:3.5.1:2.3.3:1.1.1:6.3.2:3.6.1:4.3.2:4.3.1 +6.3.1:4.1.1:2.6.1:3.1.1:2.7.1:2.4.2 +2.7.7:4.1.2:4.1.2:3.5.1 +3.5.1:2.1.1 +1.13.11:2.5.1:3.6.1:2.7.6 +2.4.2:4.1.1:2.7.2:1.4.1 +2.3.1:2.5.1:1.4.1:2.4.1:9.9.9:2.4.2:1.2.1:5.3.1:2.7.1:1.2.1 +2.1.2:1.8.1:2.1.3:3.5.1:6.3.4:6.3.5:4.3.2:2.1.2 +1.4.3:5.3.1:1.2.4:2.6.99 +6.3.4:6.3.2:2.7.8:1.5.99:1.1.1 +2.4.1:5.3.1:2.3.1 +3.6.1:2.7.8:6.3.2:1.5.1:6.3.4 +6.3.5:4.3.2:3.2.1 +2.6.1:1.17.4:5.4.2 +5.4.2:3.1.2 +4.1.1:4.1.1:5.3.1 +2.7.2:2.5.1:2.7.1:1.1.1:2.3.1 +4.3.1:1.2.4:6.3.5:3.5.1:1.5.1:1.8.1:6.3.3 +2.4.2:2.3.1:4.2.1 +2.7.1:2.7.2:2.1.1:4.2.1:1.5.1 +3.4.11:1.1.1:2.5.1:2.3.3:4.2.1:3.5.1:6.3.2:2.2.1 +3.1.3:1.1.1:4.3.1:1.1.1:2.3.1:2.1.1:3.1.2 +6.3.2:2.4.1:2.7.1:1.3.3:2.3.1:3.4.13:2.7.7:1.2.1 +1.2.1:2.3.1 +2.1.3:1.14.11:4.4.1:2.1.2 +2.3.1:2.7.1:5.4.99:3.5.1:4.1.2:2.5.1:5.4.99:6.3.2:3.5.4:2.1.2 +3.1.4:1.1.1:1.1.2:1.1.1 +5.3.1:2.7.1:1.2.1:4.1.1:6.4.1:2.5.1:3.4.13:4.1.2 +2.1.1:6.3.5:1.5.1:2.5.1:2.7.4 +6.3.4:2.5.1:2.3.1 +1.1.2:2.4.2:1.1.1:4.1.1:5.3.1:2.7.7:3.5.1 +2.7.1:1.8.1:1.1.1:2.7.1 +2.3.1:2.3.1:6.4.1:6.3.5 +2.7.1:4.2.1:3.1.3:2.4.2:2.7.2:3.1.3:2.5.1:2.5.1:2.7.4:2.3.1:1.2.1 +2.7.7:2.7.1 +5.4.4:3.1.3:5.4.2:6.3.4:2.2.1:4.3.1 +1.13.11:2.5.1:4.2.1 +3.2.2:4.99.1:3.1.5:3.5.4:2.4.2:4.1.2:5.3.1:5.3.1:2.3.1:3.4.11 +6.3.4:6.3.4:2.4.2:5.4.2:4.4.1 +6.2.1:2.7.1:2.7.4:1.2.4:4.3.2:2.7.2:4.1.1:2.4.2 +4.1.2:2.3.1:3.1.3:5.1.3:6.3.4 +2.6.1:1.5.1:4.3.2:3.1.1:2.7.1:2.1.1:4.3.1:1.4.1 +2.6.1:3.5.1:6.3.4:1.13.11 +4.3.2:2.6.1:1.14.13:2.3.3:2.6.1:4.4.1:1.2.4:1.2.1:1.2.1:4.99.1 +1.7.2:2.5.1:4.3.2:1.8.1:3.5.5:5.3.1 +1.7.2:2.5.1:4.1.1:4.1.2:2.7.4:5.4.99:1.1.1:1.4.1:5.3.3:2.4.2 +2.6.1:5.3.1:2.3.2:3.6.1 +4.2.1:2.7.8 +4.4.1:3.5.1:2.7.7:4.4.1 +3.1.3:2.7.1:1.2.1:1.7.2:1.5.1 +6.3.2:2.3.3:2.5.1:4.1.1:4.1.2:3.4.11:2.5.1:6.3.4 +2.7.1:2.5.1:4.1.1:6.3.4:3.1.3:3.6.1 +6.3.5:3.4.13:2.5.1:2.1.3:2.1.1:3.6.1 +4.3.1:4.2.1:2.3.1:6.3.1:1.5.1 +2.7.1:5.1.1:3.5.1:4.1.1:4.3.2:1.1.1 +2.1.3:1.2.1:1.14.13:2.7.2:2.7.1 +1.5.1:2.5.1:6.3.2:1.17.4:2.1.1:2.1.1:5.4.2:2.7.2:1.14.12 +4.2.3:2.1.3:2.4.2 +2.7.1:6.3.4:2.7.1:2.5.1:3.5.1:4.1.1:3.6.1:2.6.1:1.2.1:6.3.4:1.14.13:4.2.3:6.3.2 +4.1.1:2.3.1:1.2.1:2.7.7 +1.1.1:2.4.1:1.4.3 +6.3.4:2.7.4:1.4.1:3.1.2 +1.1.1:5.3.1:3.1.3:2.4.2:3.5.1 +3.5.1:2.5.1:3.2.2:2.3.3:1.14.12 +2.6.1:2.7.1:1.5.99:4.4.1 +4.3.1:5.4.99:3.1.3:4.2.1:3.3.1:2.3.1 +4.2.1:2.7.2:6.2.1:1.2.4:2.3.1:2.7.4:4.2.1:2.7.1:2.6.1:3.1.7:4.3.2 +4.3.2:4.2.1:1.2.1:2.4.1:6.3.4:3.5.1:9.9.9 +2.3.1:2.5.1:1.1.1 +1.5.1:5.4.2:6.3.2:2.7.2:2.7.1:6.6.1:2.6.1 +5.4.99:2.5.1:3.5.1:4.2.1:2.7.1 +2.5.1:4.2.3:3.6.1:2.7.7:2.1.3:1.4.1:2.7.7 +1.2.4:1.1.1:2.7.6:4.3.2:1.1.1:2.3.1 +2.4.2:2.7.7:4.4.1:1.4.1:2.7.7:3.5.1:3.5.1:2.2.1:3.5.4 +5.3.1:2.4.2:2.7.1:4.2.1 +1.18.6:2.4.2:4.1.1:2.3.1:2.7.2:2.3.1:5.4.2:3.5.1:2.3.1:4.1.3 +5.4.2:6.3.4:3.5.1:5.4.2:4.3.1:1.1.1:6.3.4 +2.1.3:6.3.2:2.3.1:6.2.1:4.4.1:2.3.1:2.4.1 +4.2.3:3.6.1:4.1.1 +1.1.1:6.3.2 +2.6.1:2.7.1:2.7.7:2.3.3 +5.1.1:2.7.2:2.1.3:2.4.2:3.4.13 +2.5.1:2.3.1:2.7.7:6.2.1:6.3.4:2.7.6 +1.3.99:5.3.1:2.3.1:2.5.1:3.1.1 +2.3.1:4.1.1:1.5.1 +4.1.3:5.3.1 +5.4.2:1.2.1:6.3.4:6.3.4:4.2.1 +4.1.2:1.2.1:1.3.99:2.7.4:1.2.1:3.1.4:4.3.2:2.6.1:4.1.1 +2.7.1:5.3.1:1.8.1:6.3.4 +3.1.3:2.7.1:3.1.3:5.4.99:2.6.1:2.3.1:1.2.5 +4.1.1:2.6.1:2.7.6:3.5.1 +2.3.3:2.7.1:2.6.1:2.7.6 +2.7.2:3.1.3:6.3.2:2.5.1 +4.3.2:6.3.3:2.6.1:1.3.3:1.1.1:1.5.1:2.7.4:2.3.1:4.3.2:4.1.2:1.1.1:2.7.1:2.1.2:2.1.2 +1.5.3:6.3.1:5.3.1 +1.5.99:6.3.2:1.1.5 +1.2.1:4.3.1:4.1.3:3.5.1:2.3.1 +3.5.4:4.2.3:3.5.3 +4.2.3:2.7.7:2.7.2:2.1.2:2.4.2:4.3.2:1.1.1:3.1.4:4.1.1:3.1.3 +4.2.1:3.5.1:2.1.1:2.3.1:1.2.1:6.3.4:1.3.3:4.2.3:4.3.1 +1.5.1:2.7.4:1.1.1:4.3.2:2.7.6:6.3.3:4.2.3 +6.3.4:3.2.1:3.2.2:4.4.1:4.2.1 +3.6.1:2.7.7:9.9.9:1.3.3:4.2.1:1.2.1 +4.99.1:2.7.2:2.4.2:1.2.4:3.1.3:1.1.1 +1.2.1:2.3.1:2.5.1:4.2.1:4.3.2:1.2.1:4.2.1:4.1.2:2.7.1:1.4.1 +2.7.1:2.4.2:2.7.2:2.3.1:5.4.99:2.7.4:4.1.2 +4.2.1:4.3.1:2.7.7:5.1.3:4.2.3:6.2.1:1.5.1:4.1.1:1.5.1:1.1.1:1.5.99 +4.1.3:2.3.1:4.4.1 +2.6.1:2.1.1:2.7.7 +2.1.2:4.3.1:1.1.1:3.4.13:2.1.3:5.4.99:4.1.1 +2.7.1:1.5.1:3.1.2:4.1.1 +1.2.1:4.2.1:2.4.1:2.3.1:3.5.1:1.8.1:2.7.1 +1.5.99:4.1.2:1.1.1 +4.3.1:2.5.1:5.4.2:3.5.1:1.4.99 +1.2.1:4.2.1:2.3.1:2.1.1:2.4.2:2.3.1:2.7.1 +4.1.1:2.3.1:2.7.1:2.5.1 +6.4.1:5.3.1:3.5.1:1.1.1 +3.6.1:1.4.1:1.1.1:6.3.2:2.6.1:3.2.1:3.2.1 +1.4.1:2.7.6:6.3.1:5.4.2:1.2.4 +2.7.1:1.2.1:3.6.1:6.3.4:4.4.1:4.1.1:2.7.2 +6.3.4:3.5.3:5.4.99:1.5.1:2.3.1 +3.5.1:1.5.99:6.1.1:2.7.2:2.7.7 +5.4.2:4.4.1:5.4.2:6.3.4 +4.1.3:6.3.3 +2.5.1:2.7.1:1.4.1:1.5.1:2.7.2:1.4.1:3.5.1:1.1.1:6.3.4:2.4.2 +4.3.1:5.3.1:2.3.1:4.3.1:3.4.13:2.3.1:1.3.99:1.13.11:5.4.99:4.1.1:1.1.1 +2.3.1:1.4.3:2.8.1:2.5.1:2.7.2:3.2.1:1.5.1 +4.1.1:1.5.1:2.7.2:5.4.2 +2.3.1:2.7.1:2.8.1:3.5.1:2.3.1:1.3.3:2.7.7 +2.5.1:1.17.1:4.4.1 +1.5.99:2.6.1:2.4.2:4.1.3:4.1.1:2.7.2:2.4.2:2.6.1:2.3.1:4.1.1:2.5.1 +4.2.3:2.5.1:6.3.4:3.1.3 +2.7.1:3.6.1:2.1.2:3.5.1 +1.3.3:3.5.1:2.4.2:2.-.-:3.1.4 +4.1.2:4.3.2:1.1.1:1.2.1:5.4.99 +2.5.1:3.5.1:1.3.99 +3.1.3:1.5.1:5.3.1:2.4.2:2.3.3 +6.3.4:2.1.3:1.1.1:1.1.1 +2.7.2:1.1.1:3.1.3:2.1.3 +2.1.3:2.7.7:4.1.1 +2.3.1:4.3.2:2.3.1:2.7.4 +3.6.1:3.2.1:1.13.11 +4.1.1:4.4.1:4.3.2:4.1.1:2.6.1:4.3.1:5.4.1 +4.2.1:2.4.2:1.2.4 +2.6.1:5.4.2:2.7.6:2.7.1 +4.2.-:2.1.2:2.7.9:6.3.3:3.6.1:2.1.1 +1.4.1:2.6.1:3.1.3:6.3.1:2.7.6:2.7.1 +4.2.3:1.1.1:6.4.1:1.11.1 +6.3.3:1.2.1:2.4.2:2.7.4 +6.3.3:4.4.1:4.3.1:2.7.4:1.2.4 +2.7.1:2.3.1:2.6.1:5.4.3:2.7.1 +1.1.5:1.1.1:3.5.1:3.5.4 +1.2.1:2.3.1:4.1.2 +4.1.2:3.6.1:4.1.2:1.5.1:1.2.4:1.13.12 +2.4.2:4.2.1:2.4.2:2.4.2 +4.1.2:1.1.1:1.14.16:1.4.4 +3.1.3:5.3.1:1.2.1 +4.1.1:3.2.1:2.6.1 +2.7.4:4.3.2:4.1.3:3.1.3:2.7.2:6.3.3:5.3.1:5.4.2 +1.4.1:2.2.1:5.3.1:2.5.1 +2.5.1:2.4.2:4.1.1:1.4.1 +5.3.1:3.1.3 +1.4.3:3.5.1:9.9.9:1.5.1:2.1.3:4.1.2 +2.7.6:3.1.4:2.7.2:2.7.2:2.5.1:2.7.4:2.6.1:6.3.5 +4.2.3:2.1.1:6.3.4:2.5.1 +3.6.1:1.2.4:1.3.99:2.7.7 +2.3.1:4.2.1:4.4.1:5.4.2:5.3.1 +4.3.2:5.4.99:2.7.7:6.3.4:1.18.6:3.1.3 +1.2.4:4.2.1:1.13.11:2.3.1 +2.5.1:2.7.7:4.3.1:2.7.2:6.3.4:2.7.7:4.1.2:6.3.3 +2.1.1:4.3.2:2.6.1 +1.3.3:2.4.2:2.3.1:4.3.2:6.3.1:6.3.1:2.6.1 +6.3.5:5.3.1:1.2.1:3.5.3 +1.14.12:2.7.1:2.7.4:4.3.1:2.7.4:2.3.1:2.3.1:6.3.4:3.1.5:2.7.1 +4.1.3:1.2.1:3.5.1:2.4.2:3.5.3:2.6.1:5.3.1:2.6.1:2.1.2:1.2.1:4.4.1:1.1.1:1.7.99:3.1.1 +2.7.1:4.1.3:1.1.1:2.5.1:2.1.1:1.2.1:1.2.1:2.3.1 +1.1.1:4.2.1:2.7.1:4.2.1:4.2.1 +1.4.1:1.1.1:4.3.2 +2.3.3:4.1.1:2.5.1 +3.5.1:4.2.1:6.3.4:4.1.1:6.3.4 +2.2.1:4.1.1:6.3.4 +2.1.1:4.3.2:2.7.7 +2.3.1:4.1.1:1.2.1:2.7.2 +2.5.1:3.5.3:2.1.3:3.5.1:3.5.1 +1.5.1:3.1.3:5.4.2:2.5.1 +3.1.3:2.7.7:3.1.3:4.3.2:3.5.2 +4.1.1:6.3.4:2.7.4:1.4.1:1.1.2:4.1.3:2.6.1:2.7.7:1.18.-:2.3.1 +2.3.3:2.6.1:2.6.1 +3.5.1:2.6.1 +2.4.2:1.2.1:2.7.8:3.6.1:2.3.1:2.7.1 +1.7.2:2.3.1:2.3.1 +2.7.1:2.7.1:3.5.1:1.4.1 +1.7.2:2.7.4:2.3.1:2.7.4:2.1.2 +4.1.2:4.3.2:3.5.1:5.4.99:2.7.1:5.3.1:1.1.1:6.3.2:2.5.1:1.4.1:2.7.1:2.7.4:3.1.3 +2.7.1:1.2.1:2.5.1:6.2.1:4.2.1 +6.3.1:3.5.2:1.2.7:2.7.4 +3.5.3:1.8.1:3.1.3:5.3.1 +2.7.1:2.3.1:4.3.1:2.1.1:2.1.1:2.7.4:1.4.4:5.4.99 +4.3.1:1.2.4:3.5.3:2.5.1 +3.5.1:1.2.4:2.7.1 +3.5.3:4.1.1:1.13.11 +1.2.1:4.1.1:4.2.1:2.6.1:4.1.1:6.3.2 +4.1.1:2.1.1:2.7.2:1.1.1 +2.6.1:4.1.2:2.7.4:2.7.1:4.1.3 +2.7.9:1.2.1:2.5.1:3.4.11:3.1.2:3.5.1:4.1.1:2.4.2 +2.7.1:2.3.1:2.5.1:3.6.1:3.6.1:6.3.2:4.1.3:3.5.3 +6.4.1:5.3.1:3.6.1:2.1.1:2.7.1:1.7.99:3.5.3:3.2.1:4.3.2 +3.1.3:4.3.1 +3.1.3:5.4.99 +6.4.1:2.5.1:2.6.1:3.6.1:4.2.1:2.7.1:6.2.1:3.5.1 +2.3.1:2.3.1:6.3.1:2.7.2:2.7.1:2.7.1:2.7.1:2.7.1:5.4.99:6.3.4:1.-.-:2.7.1:3.5.1:1.5.99 +3.5.3:3.5.1:5.3.1:2.6.1:2.6.1:1.4.1:2.7.1:2.1.3 +2.1.3:5.1.2:3.5.1:1.2.1:4.2.1:2.3.3:6.3.2 +3.5.2:1.17.4:1.1.1:9.9.9:2.3.1:1.4.1 +6.3.4:4.2.1:2.7.2:2.7.8:4.2.1:3.1.3 +1.5.1:2.7.1:2.7.7:2.7.1:2.7.7:1.1.1:2.6.1 +2.7.2:2.6.1:2.5.1:1.1.1:4.1.1:3.5.1:4.3.2 +4.3.1:1.1.1:1.1.1 +2.6.1:4.3.1:3.5.1 +1.1.1:3.5.4:1.2.4 +1.2.1:2.6.1:2.7.6:2.3.1:2.3.1 +2.1.1:1.8.1:4.2.1:4.3.2:2.1.1:2.1.1:2.7.1 +2.7.7:1.17.4:6.3.5 +3.5.1:2.3.1:2.3.1:2.8.1 +4.3.1:1.8.1:1.2.1:1.1.1:1.2.1:2.3.3 +2.4.2:1.2.1:1.1.5:2.7.7 +4.1.1:1.5.1:3.5.4 +3.6.1:4.1.1:4.2.3:2.7.1:1.1.1:5.4.1 +4.2.1:2.7.1:2.3.1 +6.3.5:2.4.2:2.7.2 +2.5.1:5.4.99:4.2.3:1.5.1 +2.3.1:3.5.1:2.7.8:3.2.2:2.3.3 +1.14.16:2.3.1:2.7.2:2.1.2:2.7.4 +2.1.1:2.7.1:2.1.1:4.2.3:6.3.2:2.1.1 +1.1.1:6.3.4:3.5.1 +1.1.1:3.1.1:4.2.1:4.2.1:2.6.1:9.9.9 +2.7.8:5.4.2:3.5.3:2.6.1 +2.1.2:2.1.3:5.1.3:2.7.7:4.2.3:2.3.1 +3.2.2:4.1.1:2.4.2:3.2.1 +3.1.3:3.1.3:4.2.3:6.3.3 +6.2.1:3.4.13 +4.1.1:1.1.2:2.3.1:4.3.2:3.6.1:2.7.7 +1.5.1:4.3.2 +1.2.5:1.8.1:2.7.2:3.1.2:3.2.1:1.5.1:1.2.4:2.6.1 +2.4.2:3.5.1:1.14.16:2.7.4:2.3.1:3.1.1:2.1.1:6.3.3 +1.1.1:2.3.1:6.3.5:4.1.2 +6.3.4:2.6.1:6.3.5 +1.5.1:2.7.1:5.4.2:2.3.1:4.1.2:2.6.1:1.1.1:2.6.1:2.7.1 +2.1.1:4.3.2:2.1.3:1.2.1:3.6.1:4.4.1 +5.4.2:1.3.99:2.6.1:2.1.4:1.4.1:4.1.2:4.3.2:2.4.2:4.1.1 +1.2.1:2.7.4:2.7.2:1.1.1:2.3.1 +2.5.1:4.2.1:3.5.1:1.5.1 +2.5.1:4.2.1:4.3.2 +2.5.1:2.7.2:4.2.3:1.1.1:2.3.1:2.7.6:2.4.2 +3.2.2:2.6.1:2.3.3:4.1.1:2.7.2:6.3.2:5.3.1:1.1.1:1.2.4:4.2.1 +1.2.1:2.3.1:1.5.1:1.4.1:2.7.7:2.5.1:4.1.1:2.3.1 +2.3.1:5.1.3:4.3.2:4.1.1 +2.7.4:4.3.2:5.4.99:1.2.1 +2.7.2:2.5.1:4.3.1:3.5.1:1.2.1:2.3.1 +2.7.6:3.6.1:4.3.2:1.1.1 +5.4.2:2.7.1:3.6.1:1.2.1 +1.4.1:5.4.2:1.2.1:2.4.2 +1.5.1:2.3.1:4.2.3:1.1.1 +3.1.7:2.7.1:2.7.7:2.3.1 +1.1.5:1.4.1:6.3.2:2.6.1:3.5.1:4.99.1 +2.4.2:4.1.1:2.4.1:1.8.1:3.4.13 +1.1.1:2.7.7:2.5.1:3.6.1:5.1.3:1.2.1:2.4.2 +4.2.3:6.3.4:2.7.7 +1.4.1:2.7.2:1.7.2:3.5.1 +4.1.1:4.2.3:2.5.1:5.3.1:2.5.1:3.5.1 +3.5.1:2.7.2:5.1.1:3.5.1:6.3.3 +3.5.1:3.1.2:5.4.2:2.4.2:2.5.1 +2.7.2:2.2.1:2.7.1:2.4.2:2.7.7 +3.6.1:1.13.11:2.7.1:4.1.1:2.6.1:4.3.1 +1.5.1:3.5.1:1.2.1 +2.5.1:2.3.1 +6.3.2:4.1.1:2.4.2:2.7.1:1.4.1:4.2.1 +2.7.1:1.2.1:5.4.2 +5.4.99:2.4.2:1.1.1 +1.2.1:6.2.1:1.1.1:1.5.1:3.5.2 +1.1.3:2.5.1:4.4.1:2.3.1:4.1.1:4.4.1:2.1.3 +3.5.3:2.7.1:5.1.3:2.7.4 +5.4.2:1.2.1 +5.1.3:2.7.2:3.1.2 +3.1.1:4.1.1:5.4.99:5.4.99:2.5.1:2.7.1:2.7.2 +1.1.1:1.1.1:2.1.1 +2.4.2:2.4.2:2.5.1:2.7.1:2.3.1:3.1.1:2.7.1:1.1.1 +6.3.4:2.4.2:4.2.1:5.1.3:4.2.3 +2.3.1:3.5.3:1.-.-:5.4.99:3.6.1:2.6.1:6.3.4 +2.7.1:4.3.1:2.7.6 +2.1.2:3.3.1:3.1.1:6.3.5:2.3.1 +2.7.2:2.5.1:2.4.2:5.3.1:2.6.1:6.1.1:2.4.2 +2.7.4:6.3.2 +1.7.99:6.3.4:2.1.1:2.7.1:3.4.13:3.1.3 +2.4.2:2.3.3:2.5.1:1.2.1:4.2.- +5.1.3:2.7.2:4.3.1:2.4.2:1.-.-:3.5.1:5.3.1:5.3.1 +2.3.3:2.7.2:2.7.7:2.7.7 +2.5.1:2.7.4:4.3.1:5.1.3:5.3.1 +2.4.1:2.3.1:2.6.1:3.2.1 +2.7.4:3.6.1:5.1.3:3.1.1 +1.5.1:2.5.1:1.2.1:2.3.3:2.1.1 +2.3.1:1.1.1:2.7.1:9.9.9:1.5.1:1.2.1 +1.1.1:3.5.3:1.4.1:6.3.4 +2.7.7:5.4.2:2.8.1:3.5.3 +1.5.1:4.2.3:1.2.1:2.7.7:3.5.1:3.5.1:2.1.2:3.4.13 +4.2.1:2.7.4:6.3.4:4.3.2:2.7.1 +2.1.1:4.3.2:3.4.13:2.1.2:3.5.2:2.7.1:6.3.5:3.4.11 +2.7.2:2.7.1:2.1.1 +1.5.1:2.1.1:2.7.2:2.7.7:2.7.1:1.2.1 +1.2.1:5.4.2:4.2.1 +2.5.1:4.3.1:4.2.1:1.13.11:3.5.1:3.6.1 +4.1.2:2.7.7:2.1.1:5.3.1:4.1.1 +2.3.1:5.4.99:2.3.1:4.1.1:6.3.5 +2.6.1:3.1.4:5.4.99 +6.3.4:6.4.1:2.7.2 +2.3.1:2.6.1:2.3.1:3.5.1:2.7.6 +4.1.2:4.1.1:1.5.1:3.1.3:2.4.2 +1.17.1:2.7.7:5.3.1 +1.3.3:2.7.1:3.2.1 +4.3.2:4.2.1:2.1.1:2.7.2 +3.5.1:3.5.4 +2.7.1:2.7.1:2.3.1:2.5.1 +1.1.1:4.2.1:6.3.2 +2.7.1:1.2.1:2.7.4 +2.5.1:6.4.1:3.5.1:3.1.1 +2.3.1:2.3.1:2.7.1:4.4.1:3.4.13 +3.1.3:1.2.1:1.2.1 +4.3.2:4.3.1:6.3.4:1.1.1:2.1.3:2.5.1 +3.2.1:5.3.1:2.5.1:6.3.4:2.3.1:4.1.1:1.4.3:1.7.1:6.3.2 +5.4.99:4.1.1:2.6.1:6.3.5:3.1.3:1.3.3:2.6.1:3.1.1:2.2.1:2.6.1:1.3.1:2.7.1 +2.4.2:1.1.1:4.4.1:2.7.4:2.3.1 +5.3.1:4.2.1:2.7.7:3.5.1 +2.7.8:2.5.1 +4.1.2:2.6.1:1.2.1 +6.3.4:3.1.3:5.3.1:4.3.2:1.2.1:3.5.1:6.2.1:3.5.1:2.2.1:6.3.3:2.4.2:3.1.3 +4.3.2:2.1.1:4.3.2:2.4.2:3.1.1 +2.7.1:5.5.1:4.1.1 +4.3.1:6.3.4:2.7.1:2.5.1:5.3.1:2.6.1 +4.1.3:2.3.1:1.-.-:6.3.5:2.5.1:4.1.1:6.3.4 +2.4.2:1.5.1:1.1.1 +2.1.2:2.4.2:1.4.3:5.3.1:5.3.1:6.2.1:1.17.1 +2.3.1:1.2.4:2.2.1:5.4.2:1.1.1 +2.5.1:2.7.1:3.1.3:3.4.13:4.1.2:4.3.1 +6.3.4:6.3.3:4.2.1 +2.3.1:2.1.3:4.2.1 +6.3.1:2.1.3:2.7.9:2.7.4:1.5.1 +2.7.1:2.4.2:2.7.7:1.3.1:6.3.3 +4.4.1:6.3.4 +3.6.1:1.1.1:5.4.2:6.3.5:2.3.3:1.5.1:2.7.2 +5.3.1:6.3.3:3.2.1:4.1.1:5.1.3:2.6.1:2.3.1:2.7.7 +2.3.1:4.1.2:4.1.2 +1.5.99:2.7.2:2.7.2:5.3.1:2.7.2 +2.7.1:3.5.1:4.3.1 +4.2.3:1.4.1:6.3.1:4.2.3 +3.5.3:2.7.1:2.7.1:5.4.99:2.1.1:4.2.1 +5.3.1:2.7.1:2.7.7:1.4.1 +1.1.1:3.2.1:2.5.1 +2.7.2:3.5.1:3.5.1:1.1.1:4.4.1:3.5.2:6.3.4 +2.1.3:2.7.6:2.6.1:2.7.8:2.4.2:2.3.1:2.7.1:1.1.1:2.4.2:3.1.1:1.8.1:4.2.3:2.7.1:3.6.1 +2.7.4:5.3.1:2.1.1:2.7.2:1.5.99:3.1.1 +1.5.99:2.7.1:1.2.1:5.1.3:1.5.1:2.7.2 +2.5.1:4.4.1:1.4.1:6.3.1:1.1.1 +4.2.3:2.7.6:1.4.4:3.4.13:1.1.1:3.5.3:3.1.3:1.1.1:2.3.1 +2.4.2:2.6.1:2.5.1:2.4.2 +1.1.1:1.2.1:2.6.1:2.6.1 +1.4.3:2.7.1:2.7.1 +2.7.1:1.4.1:2.6.1:4.3.1:5.3.1 +3.1.2:3.4.13:1.1.1:4.2.1:2.4.2:3.5.1:2.3.1:5.4.2 +4.2.3:4.1.3:2.7.1:2.1.4:5.4.2:5.3.1:6.3.1:1.14.13 +4.1.2:2.7.4:6.3.4:2.7.2:4.1.2:2.6.1 +2.1.2:6.3.4:1.13.12:1.3.1:3.5.3:2.6.1:4.99.1:2.1.2:1.1.1 +5.1.3:3.5.1 +2.3.1:4.2.1:2.5.1:2.6.1 +2.7.1:9.9.9:2.7.7:1.2.1:6.3.4 +2.7.1:1.2.1:6.3.4:2.7.1:6.3.2 +1.1.1:1.1.1:2.3.1:4.3.1 +4.1.1:3.1.3:5.4.2:2.3.1 +4.3.2:9.9.9:2.3.1:2.3.1 +4.1.1:6.3.1:1.1.1:2.7.1:2.1.3:4.2.1:4.2.3 +1.1.1:1.2.1:5.4.3:2.1.1:1.2.4 +4.2.3:2.5.1 +2.7.7:2.6.1:1.1.1 +1.3.99:2.6.1:4.2.1:3.1.3:3.5.4:2.6.1:2.7.2:5.4.99 +1.1.1:2.8.3:3.5.4:4.1.1:4.1.3:1.5.99:2.7.4:3.5.1:6.3.4:1.3.3:6.3.5:1.1.3 +4.3.2:2.5.1:5.3.1:1.5.1:3.1.4:2.1.2:4.3.1:2.7.1 +1.8.4:1.2.1:5.4.1:4.2.1:3.1.3 +2.1.1:5.4.99:6.3.4:5.4.99:6.3.2:2.3.1:1.5.3 +2.5.1:2.3.1:4.3.2:2.3.1:2.5.1:6.3.4 +3.6.1:4.1.2:2.2.1:1.1.1:2.3.1:2.5.1:4.1.1:2.3.3:3.5.1:3.5.4 +2.4.2:4.2.1:4.1.2:2.7.2:3.5.3:2.3.1 +6.3.4:6.3.5:2.5.1:2.7.8 +2.7.9:4.1.1:2.7.1:4.1.2:4.2.1:2.7.9:2.2.1:4.1.2 +2.3.1:1.1.2:1.14.15:4.2.1 +6.3.5:1.2.1:3.5.3 +1.1.5:6.3.5:2.2.1:2.4.2:1.14.16:5.3.1 +2.7.4:5.4.2:2.7.4:2.3.1 +3.1.2:2.7.1:2.8.1 +2.4.1:4.4.1:3.5.1:3.2.1:2.7.1:1.14.- +5.3.1:4.2.1:2.1.2:2.3.1:2.7.1:4.2.1:2.4.1:4.1.99 +3.5.1:2.1.3:3.5.5 +4.1.2:1.4.1:6.3.2:5.3.1:1.1.1 +4.4.1:2.3.3 +2.7.1:1.1.1:4.2.1:2.3.1:3.1.4:2.5.1 +3.4.13:6.3.4:2.5.1:5.1.3 +1.8.1:9.9.9:3.6.1:6.3.1:1.4.1:4.2.3:3.5.1:2.7.1 +4.2.1:4.3.2:2.5.1:2.5.1:2.3.1 +6.4.1:4.1.1:6.3.2:2.3.3 +1.3.99:2.4.2:1.2.1:6.3.2:4.3.1:1.2.1 +2.7.4:2.1.3:6.3.4:2.5.1:2.5.1:2.7.9:6.1.1 +6.4.1:1.2.1:2.6.1:2.7.1:2.5.1 +1.3.3:2.4.2:4.1.1:1.2.1:9.9.9:5.4.2 +4.1.1:6.3.4:2.5.1:2.4.2:2.7.2 +1.7.1:4.3.1:2.4.2:2.7.4 +6.3.2:3.1.3:3.5.1 +2.7.1:3.5.4:1.11.1:2.3.1:6.3.4 +4.3.1:5.4.99:6.3.2:2.3.1 +2.6.1:3.6.1:2.5.1:2.7.8:6.3.1:2.2.1 +2.1.2:3.5.1:6.3.3:2.4.2:1.3.1 +5.3.1:1.1.1 +3.5.2:2.5.1:2.1.2:2.6.1 +2.1.2:1.2.1:2.7.1 +2.7.1:2.7.1:2.7.2:2.6.1:2.4.1:2.7.1:3.1.3:5.3.1:2.4.2 +2.3.1:6.3.5:1.3.99:1.13.11:2.7.1:3.5.3:2.6.1:4.1.1:3.1.3:6.3.3:1.5.1 +1.18.6:2.6.1:1.5.99:2.1.3 +2.7.8:2.3.1:4.1.3:1.5.1:3.5.1:1.4.1:2.7.2:3.5.1:2.1.1:2.5.1:2.5.1:6.3.5:6.3.2 +3.1.3:4.3.2:1.5.1 +2.1.2:3.5.1:4.4.1 +1.7.2:3.1.1:3.5.3 +3.5.1:2.3.1:6.2.1:6.3.2:2.7.4 +2.1.3:2.7.6:2.3.1 +2.7.1:2.6.1:2.6.1 +2.7.1:4.1.1 +3.1.7:2.1.1:1.2.1:2.3.1:6.2.1:5.4.2:2.1.3:6.3.1:3.1.2:2.5.1 +6.3.2:5.3.1:6.3.4:1.1.1 +4.3.1:4.1.2:3.2.1:4.3.1:4.2.1:2.6.1:1.8.1:6.3.4:2.5.1:2.3.1:2.5.1 +3.1.3:5.4.99:1.2.1:3.5.1:6.2.1:4.2.1:4.1.1:4.3.2:4.3.1 +2.3.1:5.4.2:5.3.1:4.3.2:6.3.3:1.3.99:2.3.1:1.8.1:1.2.1:3.5.4 +4.3.2:2.7.4:4.2.1:3.5.1:2.7.7:2.3.1:2.3.1 +3.2.1:2.6.1:2.6.1:2.7.2:3.2.1 +1.2.1:3.1.3:3.5.1:1.3.3 +4.3.2:2.7.1:4.3.1:4.4.1:3.6.1:4.3.2:4.3.2 +4.2.1:2.6.1:2.1.2:2.7.2:3.5.1 +4.4.1:1.17.1:1.2.1:6.3.4 +4.2.1:2.7.4:2.6.1:1.2.4:1.5.1 +5.3.1:6.2.1:2.3.1:1.2.1:4.4.1:2.7.2 +6.3.5:2.4.2:2.1.2:3.5.3:1.2.1:6.3.3:2.6.1:5.1.1 +2.3.1:6.3.1:3.5.3:4.3.2:4.1.1:1.18.6:2.1.3 +2.1.1:4.1.2:4.3.1 +5.1.3:5.1.1:2.3.1:2.3.1:5.3.1 +2.4.1:4.1.1:2.7.8:2.7.1:1.2.1:1.5.1 +2.6.1:2.3.1:2.1.2:2.7.4:2.7.2:1.4.1 +2.1.3:4.4.1:6.3.4:1.3.1:1.2.1:5.3.1:2.6.1:6.3.4 +2.1.2:4.2.1:6.2.1 +6.3.5:1.2.1:3.5.3 +1.4.1:2.1.3:2.5.1 +3.5.3:2.8.3:2.3.1:2.1.2 +6.2.1:2.7.1:3.1.4:1.1.1 +2.4.1:2.3.1:2.7.2:4.1.1:3.2.1:3.1.3:2.7.1:2.7.1:4.2.1:2.7.1:1.5.1:4.1.3:5.1.2:2.7.7 +2.1.2:6.3.4:1.1.1 +2.7.2:2.6.1:3.6.1:2.4.2:2.5.1:2.3.1 +5.3.1:4.1.1:4.2.3 +2.6.1:3.5.99:4.99.1:4.1.2:1.1.1:3.1.2:2.7.2 +1.2.1:1.1.1:3.7.1:6.4.1:2.5.1 +3.1.4:2.3.2:2.3.1:4.3.2:4.1.1:2.7.7 +2.1.2:3.5.4:3.4.13:5.4.2:2.7.8 +4.4.1:2.1.2:2.4.2:1.1.1:4.1.2 +1.1.2:3.1.1:6.3.2 +2.3.1:4.4.1 +2.7.1:3.5.3:2.7.1 +5.3.1:2.3.1:5.4.2:1.5.1 +2.3.1:2.3.1:1.2.1:1.3.1:2.6.1:5.4.2:3.5.1 +1.5.1:3.1.2:5.4.2:2.3.1:2.1.2:1.5.1 +2.5.1:3.5.1:2.5.1:5.4.99:2.6.1 +2.4.2:9.9.9:1.2.4:4.3.2:4.3.1:3.1.1:4.1.1:4.4.1:4.3.1:2.7.1:2.7.7 +2.3.3:5.4.99:2.7.1 +4.2.3:2.7.1:4.2.1:1.2.1 +2.3.1:1.4.1:2.4.2:2.6.1 +1.4.3:5.4.99:3.1.2:4.3.2:1.13.11:1.4.1 +2.7.2:2.3.1:2.7.2:2.6.1:2.1.1:2.7.1:2.1.4:6.3.4:2.3.1:4.1.3:5.1.3:4.1.1:4.1.1 +9.9.9:2.6.1:2.7.1:1.2.1:2.3.1 +4.2.1:2.3.1:1.1.1 +6.3.4:1.2.1:3.5.1:3.1.3:3.1.4:2.7.7 +3.2.1:2.7.1:3.5.1 +2.7.1:2.4.2:6.3.4 +1.13.11:2.5.1:4.2.1:6.1.1:2.7.1 +3.6.1:1.1.1:2.7.4:1.2.4:4.3.2:1.5.99 +6.3.4:2.7.7:2.7.4:2.3.3:2.7.2:3.6.1:2.3.1:2.3.3:4.1.1:2.7.2 +2.7.2:2.7.1:3.2.2:3.6.1:2.1.4:2.7.7:2.7.1 +1.2.4:2.1.1:3.5.1:2.7.1:2.3.1:2.7.1:3.5.3:1.5.99:2.5.1 +2.6.1:2.7.1:1.2.1:4.1.1:6.3.5 +2.6.1:1.2.1:2.7.2:1.1.1:4.2.1:2.1.3:2.1.2:2.5.1:2.6.1:2.4.2 +2.1.2:2.3.1:1.1.1:1.17.1:2.4.2 +3.1.3:1.8.1:4.1.3:4.3.2:6.3.5:1.2.1:5.1.3 +2.4.1:4.1.3:3.1.3 +2.7.1:1.1.1:1.3.99:2.1.1:1.5.1 +1.1.1:4.2.1:5.4.4:6.3.1:4.1.1:3.5.1:6.3.4 +6.3.5:2.7.2:1.2.1:6.3.4:2.7.1:2.3.1:1.2.1 +6.3.2:2.7.1:6.3.3:4.3.1 +1.2.1:1.2.4:1.1.1:2.1.1:2.7.1 +1.1.1:2.7.1:2.4.2:6.3.3:2.4.2:4.3.2 +3.4.13:4.3.2:2.3.1:2.4.2:3.5.1 +2.7.7:4.1.1:1.5.1:2.7.7 +5.3.1:3.5.4:2.3.1:2.1.3:1.2.4 +2.7.7:1.2.1:1.1.1 +6.2.1:1.1.1:2.3.1:3.5.1:1.5.1:3.4.11:2.7.1:1.1.1:2.7.2:1.3.99:2.4.2:1.5.1 +1.1.1:2.3.1:2.7.1:2.1.2 +5.4.2:3.2.1 +5.4.2:4.3.2:2.6.1:4.3.1:1.1.1 +1.1.1:1.5.1:6.3.2:1.2.1:3.1.3:4.2.2 +3.6.1:2.3.1:3.1.3:4.1.3:3.1.2 +6.3.2:5.3.1:2.5.1:2.5.1:2.7.7:2.7.2:6.3.4:2.1.1:2.1.3:2.1.1:2.7.2 +1.4.3:6.3.5:4.4.1:1.1.1:2.7.1:2.7.1:2.2.1:6.3.4 +4.1.3:1.2.1 +4.4.1:1.3.99:5.3.1:2.1.2:5.1.3:3.5.2:3.1.3:3.5.4:2.3.1 +4.4.1:2.6.1:2.7.1 +4.3.1:2.1.1:4.4.1:6.3.2:6.3.2:2.1.1:4.2.1:4.6.1:1.1.1:3.6.1:2.6.1 +4.1.1:2.7.4:5.3.1:5.4.3 +1.4.1:6.2.1:5.4.99:4.1.1 +4.4.1:3.5.1:2.6.1:2.6.1 +3.5.1:6.3.5:9.9.9:2.1.1:3.6.1:2.4.1 +1.7.2:4.1.2:3.6.1:2.6.1 +1.1.1:2.7.7:6.3.4 +5.3.1:2.5.1:5.4.2:2.5.1 +3.5.1:3.4.11:1.1.1:3.1.3:5.4.2:1.3.3:1.3.99 +4.1.1:1.2.1:1.1.1:3.4.13:2.3.1:2.7.2:4.1.1:3.1.1 +5.4.99:4.1.1:3.5.4:3.1.4:2.6.1:4.1.1:1.8.1:5.3.1:3.5.3:4.1.1 +4.3.1:3.2.2:5.3.1 +4.1.1:2.4.2:6.3.1:6.3.4 +3.1.3:4.1.2:1.1.1:3.5.3:2.1.1:2.1.4:1.2.1:1.4.1:1.8.1:1.5.1 +1.1.1:6.2.1 +1.1.1:4.4.1:2.6.1 +3.1.3:4.1.1:4.2.1 +2.4.1:2.6.1:4.3.2:2.5.1:2.1.3 +1.1.1:4.3.1:6.4.1:6.3.2:2.5.1:4.3.2:1.1.1:4.4.1:2.3.1:2.7.4 +2.7.2:2.7.1:4.1.1 +2.5.1:2.6.1:3.4.11 +2.7.8:2.3.1:1.1.1:4.2.1:2.7.7 +2.7.6:6.3.4:3.5.1:1.3.99:4.3.1:4.4.1 +1.1.1:1.1.5:4.1.1:2.7.2:9.9.9:4.1.1:2.7.2:2.3.1:1.4.1:2.3.1:3.1.3:2.7.2 +3.5.99:4.3.1:3.5.4:2.7.2:4.1.1:6.3.4:6.3.1 +2.2.1:1.14.12:2.3.1 +2.7.4:2.3.1:2.3.2:2.3.1:1.2.1:2.7.7:2.3.1:1.5.1:2.7.1:2.4.2:6.4.1:4.2.1:2.4.2 +4.3.1:1.3.99:2.7.8 +2.7.7:1.4.3:2.7.9:4.3.1:2.7.1:2.2.1:6.3.4 +2.7.2:1.4.3:1.1.1 +2.1.1:4.2.3:3.5.3 +2.5.1:2.1.2:1.5.1 +9.9.9:6.3.5:3.5.1:6.3.3 +2.3.3:2.7.2:1.8.1:2.7.7:1.1.1:1.2.4:4.2.1 +3.5.1:5.4.99:4.1.2:2.7.1:2.7.2:4.3.1 +2.7.1:1.2.1:6.3.3:6.3.4:5.1.1 +4.1.1:5.4.2:1.5.1 +1.5.1:4.1.1:6.3.4:2.7.7 +2.7.1:2.5.1:2.7.1:4.3.1:2.1.2:2.5.1:2.4.2:3.5.4 +4.1.2:5.4.1 +3.3.1:4.1.1:2.7.1:2.7.6 +4.3.1:4.1.2:1.1.5:4.2.3:3.5.4:4.3.1:1.1.1:6.3.3:4.2.1 +2.6.1:4.3.2:1.2.4 +4.1.1:2.1.1:4.1.1:2.1.3:2.6.1:2.8.1:2.4.2:2.6.1:4.1.2:3.6.1 +2.3.1:1.1.5:1.5.1:1.7.99:1.4.1:3.1.3:2.7.1:9.9.9 +1.3.99:4.3.2:2.3.1 +3.1.3:1.4.1:1.4.1:4.1.1 +4.1.3:3.5.1:2.7.7:5.4.99:2.7.4:2.1.1:1.1.1:4.1.1:1.4.3:6.3.2:3.5.1:2.3.1:1.1.1:2.1.1 +5.3.1:3.1.3:1.5.99:3.1.1:2.7.1:3.5.3:3.6.1:3.4.13 +2.7.2:1.1.1:1.2.1:6.3.2:4.2.1:1.5.1:2.6.1:6.3.4:2.3.1:1.1.1 +4.4.1:1.14.13:1.4.1:2.3.1:4.3.2 +6.3.4:2.1.2:1.1.1:3.5.1 +6.3.4:2.1.3:4.1.2:2.7.9:2.5.1:2.1.3:1.2.1 +3.5.4:6.3.4:2.7.1:1.5.99:1.1.1:6.3.2 +2.5.1:4.2.1:2.1.1:1.2.7:6.3.1:2.7.2:2.3.1 +6.2.1:4.1.2:6.3.4:2.7.1:2.3.3 +5.4.99:1.4.4:2.7.1:2.3.1:3.4.11:1.2.1:3.4.11:4.3.1:3.5.1:2.4.2:5.4.99:3.5.1:4.2.1 +2.1.1:2.7.8:6.3.2:3.5.3:5.3.1:2.3.1:2.7.1:5.4.2:4.2.1:1.1.1:4.2.1:2.3.1 +1.4.1:3.5.1:5.4.2:3.1.3:9.9.9:6.3.4 +3.5.4:2.1.1 +4.2.3:3.4.11 +1.8.1:2.4.2:1.1.1:4.4.1 +4.3.2:4.3.2:5.3.1:2.1.2:2.7.2:1.7.99:2.5.1:1.1.1:1.1.1:2.4.2:6.3.3 +1.2.1:2.6.1:1.2.1:3.6.1:3.6.1:3.5.1 +3.5.3:3.5.3:2.7.4:6.3.4:3.5.1:5.1.3:3.5.1:6.3.2 +6.3.2:2.3.1:2.5.1:4.2.1:2.3.1:4.4.1:1.2.7:4.2.3:2.7.1 +3.1.3:4.3.2:2.3.1 +2.7.2:1.3.99:4.1.2 +1.5.1:1.2.1:1.1.1:3.2.1:6.3.3:4.3.1:6.3.3:5.3.1:2.1.1 +1.11.1:2.7.7:4.4.1:2.1.2:3.1.2:4.3.1:5.4.2:1.1.1:6.3.2:6.3.4:2.6.1 +3.1.3:2.3.2:1.4.1 +3.4.13:4.2.1:1.1.1:2.7.7:2.3.1 +3.1.3:3.6.1:6.3.1:1.7.2:2.6.1:2.7.7:3.6.1:2.7.6 +3.5.1:1.1.1:4.1.1:5.4.2:1.1.1:2.3.3:2.3.1:4.2.1:1.5.99 +1.14.13:2.5.1:4.1.1:4.3.2:3.6.1:2.3.1 +4.3.1:4.2.1:1.17.4:2.7.2:3.5.1:4.1.1:2.1.1:1.5.1:2.4.2:4.2.1:2.7.4 +2.1.1:4.4.1:2.4.2:5.3.1:4.3.2:2.4.2:2.3.1:5.3.1 +2.6.1:2.5.1 +4.1.1:1.11.1:1.4.3:3.5.3:2.7.7:2.4.2 +1.2.1:4.1.1:5.4.99:2.7.1:2.3.3:2.7.4:4.1.1:4.4.1:1.4.1 +1.5.99:2.1.2:4.3.1:1.8.1:2.7.1:3.5.1:3.1.4:3.2.1:1.1.1:6.3.3:5.4.99:2.3.1:2.1.2 +2.3.1:2.7.4:1.17.4 +4.3.1:3.1.4:2.7.2:1.1.1 +2.5.1:5.4.2:2.6.1:2.4.2:1.2.4:5.1.2 +1.3.3:2.7.7:1.5.99:1.2.1:1.2.4:4.1.3:1.7.3:2.7.4 +4.1.1:1.5.1:5.3.1 +9.9.9:4.3.1:2.7.1:2.1.1 +4.1.1:6.3.4:2.5.1:5.3.1:2.4.1 +1.5.99:5.3.1:2.4.2:6.3.5:2.7.1 +1.2.1:2.7.2:2.7.1:4.2.1 +3.5.1:1.2.4:2.3.1:3.1.5 +1.7.2:1.3.1:2.5.1:4.4.1:2.3.1:2.7.1:1.4.1 +6.3.5:1.1.2:6.3.4:2.7.1 +2.1.2:2.1.3:3.6.1:5.3.1:3.1.2:1.1.1:2.4.2 +5.3.1:2.7.7:3.5.4 +3.1.3:1.1.1:2.7.7 +6.3.4:1.5.1:2.5.1:6.3.2:4.2.1:2.1.2:6.3.2:1.5.1 +6.3.4:2.1.1:1.4.1:5.1.3:3.1.1:1.8.4:2.5.1:2.7.7:2.3.1:2.2.1 +1.1.1:6.4.1:2.1.2:2.1.2:4.4.1:2.5.1:2.1.3:9.9.9 +1.1.3:3.1.3:1.1.1:1.5.1 +1.3.1:5.4.2:3.5.1:2.4.2:2.3.1 +4.2.3:1.3.99:2.4.2:2.1.1:4.2.3 +2.5.1:2.4.2:2.3.1:5.4.3 +1.2.1:1.4.4:2.3.1:4.1.2:4.4.1:3.5.3 +4.1.1:2.7.1:2.7.7:2.1.3:6.2.1:1.2.1:1.2.1 +4.1.2:2.7.1:2.6.1 +2.7.1:1.1.1:5.4.99 +2.7.1:1.13.11:2.6.1:2.6.1 +1.2.1:4.1.1:5.4.99:3.2.2:1.4.3 +6.3.2:9.9.9:4.1.3 +3.1.3:4.3.1:4.1.3:2.1.3:5.4.2 +2.5.1:3.5.1:3.5.1:5.1.3 +2.7.1:2.6.1:1.2.1:1.5.1 +4.2.3:1.4.1:2.3.1:6.3.1 +4.1.2:4.1.1:1.17.4:4.2.1 +4.4.1:2.6.1:4.4.1:2.7.7:2.1.1:3.5.3:4.3.1:2.3.3 +2.8.1:3.5.3:5.4.2:5.3.1:4.3.1:2.3.1 +6.2.1:2.4.1:4.1.2 +1.4.1:4.4.1:2.7.2:6.3.1 +3.1.4:1.1.1:1.4.1:2.1.1:1.2.1 +2.6.1:2.3.1:4.4.1:2.1.1 +2.4.1:6.3.4:1.2.7:2.3.1 +1.1.1:4.1.3:1.1.2 +3.5.1:2.6.1:2.3.1:4.1.2:1.2.1:2.3.1:5.3.1:6.4.1 +3.5.1:2.7.7:2.3.1:3.4.11:5.4.99 +2.4.2:6.3.3:4.2.3:6.3.2:2.3.1:2.4.2:1.1.1 +2.5.1:3.6.1:6.4.1:2.7.7:3.1.3:4.1.1 +2.5.1:4.1.3:3.6.1:1.5.1:3.5.1 +2.7.4:2.4.2:1.17.1:2.7.4:6.3.4 +4.1.3:6.3.4 +2.7.1:4.2.1:4.2.1:3.5.3:4.2.1 +4.2.1:4.1.1:2.7.4:2.3.1:1.2.1:4.1.1:1.2.1 +1.2.1:1.5.1 +3.5.1:5.3.1:2.7.4:2.3.3:5.4.99 +1.3.99:2.2.1:6.2.1:2.3.1:2.4.2 +6.3.1:1.2.1:1.1.1 +4.6.1:1.1.1:5.4.3:5.3.1:2.1.3:2.5.1:3.5.99 +4.2.-:6.3.3:2.7.6:2.4.2:4.4.1:2.7.6:4.1.1 +2.5.1:2.4.2:4.1.2:2.6.1:2.1.2 +2.7.2:2.1.4:3.6.1:4.4.1 +2.7.8:2.3.1:1.8.1:2.3.1 +4.3.2:1.14.11:3.5.2 +2.8.1:2.7.1:2.1.1:5.1.2 +5.5.1:1.1.1 +4.3.1:3.5.3:4.2.1:3.2.1:6.3.5:2.7.7:2.6.1:5.4.2:2.7.6 +2.7.2:5.4.99:4.4.1:6.3.4:2.1.1:4.2.3 +3.7.1:6.3.4:2.7.1:1.1.1:1.5.1:2.6.1:6.3.4:3.5.1:2.7.4:3.1.3 +4.4.1:2.7.1 +3.5.2:1.1.1:2.5.1:2.7.4:4.4.1:2.1.2 +2.1.1:1.2.1 +4.3.2:2.7.4:2.7.8:2.7.1:1.5.1:1.1.1:2.7.1:5.4.99:2.7.7 +2.7.4:2.6.1 +2.4.2:2.6.1:1.5.99 +2.3.3:3.5.1:1.1.1:4.2.3:4.4.1:1.1.1:2.4.2:6.3.4:1.3.1:2.5.1:4.99.1:2.7.1:4.3.1:4.2.1 +4.1.1:6.3.5:4.1.2:1.1.1:4.1.1 +5.3.1:3.1.4:2.6.1:2.2.1:2.1.1:3.5.2 +6.3.2:4.1.1:2.7.1 +2.1.3:1.11.1:1.4.99:6.3.4:1.5.1:2.7.1:2.7.2:2.5.1:4.1.1:6.3.1:4.3.1 +3.5.1:6.3.5:1.2.1:2.-.-:2.7.4:2.4.1:2.3.1:4.4.1:2.3.1:2.6.1 +2.7.6:6.3.3:3.5.3:6.3.4:2.1.2:1.1.1 +2.5.1:1.17.4:2.3.1:1.1.1:2.5.1 +2.1.2:4.4.1:2.4.1:1.5.1:1.5.1 +4.1.1:4.4.1:2.3.1:2.6.1:2.5.1:2.4.2:4.1.1:2.3.1:4.3.2 +2.7.1:4.1.1:6.3.1:4.3.2 +2.1.3:1.97.1:1.5.1:1.2.4:3.5.1 +6.3.4:2.7.1:1.4.1 +4.2.1:4.3.2:4.3.1:4.1.1:2.7.2:6.1.1:2.7.2:6.3.4:2.7.8:6.3.4 +6.3.5:4.1.1:2.4.2:2.5.1:2.1.3:2.7.6 +4.1.2:2.5.1:1.4.1:1.5.1 +4.2.1:3.5.1:5.4.2:1.2.1 +2.7.1:1.2.1:2.4.2 +2.5.1:2.4.2:4.1.1:2.3.1 +1.2.1:2.7.8:2.7.7:4.4.1:2.1.3:1.2.1:1.8.1 +6.3.3:1.5.1:3.5.1:2.4.2:4.2.1:5.4.2:2.7.1:5.1.1:4.3.1:2.4.1 +6.3.5:5.1.2:4.3.2:5.3.1:4.3.1:1.1.1 +2.7.4:4.1.1:2.3.1:2.5.1 +2.5.1:3.6.1:4.1.2:2.7.1:2.7.1:3.3.1:2.3.3:4.99.1:4.2.1 +2.6.1:2.7.2:6.3.5:2.3.1:2.3.1:2.6.1:3.5.2 +3.5.3:3.1.3:4.3.1:2.7.2 +6.3.4:4.1.1:6.3.5:5.1.3 +2.7.2:5.3.1:4.2.1:2.4.2:4.1.1:2.3.1 +2.7.1:6.3.4:6.3.3:1.2.4:2.6.1:1.2.1:2.6.1 +2.7.2:2.1.2:4.4.1:2.3.1:4.1.2:4.3.2 +2.1.1:2.3.1 +6.3.4:4.3.1:2.1.1:2.4.2:2.6.1:4.1.2 +2.3.2:2.7.1:2.3.1:4.2.3:3.5.3:3.1.3:5.4.99 +4.3.1:2.3.1:2.9.1:3.5.1:1.2.4:5.3.1:1.7.99 +3.5.1:1.5.1:2.5.1:2.7.6 +2.6.1:4.2.1:4.2.1 +2.8.1:2.5.1:1.5.1:2.7.2:2.1.4:2.7.1:2.4.2:2.7.2 +2.7.1:1.13.11:4.4.1:1.5.1:2.5.1:1.5.1:2.5.1 +2.3.1:3.5.3 +4.3.1:2.3.3:6.3.1:2.4.2 +1.4.1:4.3.1:2.3.1:1.8.1:2.7.8 +4.2.1:3.5.99:5.3.1:2.7.6:1.1.1 +6.3.5:4.3.1:2.4.2:2.3.1:4.3.1:2.6.1 +2.7.1:4.3.2:6.2.1:3.5.4:5.4.99 +1.3.3:2.3.1:3.4.13:2.7.7:1.5.99:5.2.1:4.3.2:2.1.4 +1.3.99:1.4.1:2.7.2:1.2.4:4.3.2 +3.5.1:3.6.1:2.6.1 +4.2.1:2.3.1:2.1.2:2.7.1:2.3.1:4.3.1:2.7.2:5.3.1 +2.7.1:2.2.1:5.4.99:4.4.1:3.6.1 +2.3.1:2.1.1:5.1.3:4.2.1:4.1.1:1.2.1:3.5.3:6.3.4 +2.6.1:2.7.6:2.7.2 +3.6.1:6.3.2:4.2.1:2.3.1 +1.2.1:6.3.5:2.7.2:2.5.1:2.6.1:4.2.1:2.1.1:2.4.2 +6.3.5:6.2.1 +2.4.2:2.4.1:6.3.4:2.4.2:3.5.4:2.7.4:2.5.1 +2.7.4:2.5.1:4.1.1:2.7.6:2.7.8:6.3.4:2.5.1 +4.3.1:3.1.1:5.4.99:2.7.2:2.7.1:3.2.1 +6.3.1:2.1.4:6.3.5:1.2.1:1.1.1:5.4.99 +3.5.4:2.7.6:5.3.1:2.3.1:2.3.3:6.3.4:2.5.1:3.5.1:4.4.1 +2.7.7:1.1.1:2.4.2:3.6.1:2.7.1:2.4.1:1.4.99 +2.3.1:6.3.4:4.1.2:1.3.1:2.5.1:4.3.1:5.1.1:1.1.5 +1.2.4:2.3.2:3.4.11:4.1.1:2.7.1 +1.1.1:4.3.2 +6.3.2:1.1.1:1.4.1 +4.1.2:3.7.1:6.3.1:3.5.3:5.4.99:2.1.1 +1.1.1:2.7.6:4.3.2:2.5.1:2.3.1 +2.7.2:6.3.4:4.1.1:1.4.1 +5.3.1:2.7.1:2.3.1:5.4.99:4.3.1:2.1.3 +6.3.2:1.5.1:4.2.3:5.3.1:3.1.3:3.2.1:2.4.2:1.2.1 +1.7.2:4.1.1:2.6.1:6.3.4:1.1.1:2.4.1:4.2.1:2.7.1:2.3.1:4.3.1 +1.2.1:6.3.4:3.5.1:2.1.1 +2.5.1:1.2.7:2.7.4:4.3.2:2.1.1:1.2.1:6.3.4 +2.3.3:2.4.1:5.4.2:3.6.1:1.1.1:1.4.1 +4.1.1:4.1.1:2.7.1 +4.2.3:3.5.1:1.7.99:4.2.3:4.2.1 +6.3.4:6.3.4:2.1.1 +5.4.99:2.5.1:1.4.3:5.3.1:3.5.3 +2.3.1:2.4.2:6.3.1:4.3.2:2.1.2:4.1.1 +4.1.2:2.4.2:1.7.1 +4.1.2:1.8.1:2.3.1:3.5.1:6.3.4:2.7.7:5.3.1:4.2.3:3.1.4:2.9.1:1.13.11 +4.3.2:2.7.1:3.6.1:4.1.1:3.6.1:3.1.3:1.2.4:3.4.13:1.2.1 +1.5.1:2.7.4:2.7.4:6.3.4:4.4.1:2.3.1:2.7.2:2.7.1:1.1.1:5.4.2 +5.3.1:2.6.1:3.1.3:2.5.1:1.4.3 +1.2.1:3.5.4:2.5.1:5.4.2:2.4.1:3.5.1:5.3.1:1.14.12:1.1.1 +1.2.1:1.7.2:4.1.1 +1.1.1:2.7.4:4.3.2:4.1.2:1.7.2 +2.7.7:4.1.1:2.3.1:4.3.-:3.5.1:4.3.1:4.2.1:1.2.1 +2.3.1:6.3.5:3.1.2 +1.5.1:2.1.3:6.3.1:3.2.1:4.2.1:6.3.3:4.1.2 +2.7.1:2.5.1:1.2.4:1.4.1:2.6.1:1.1.1:4.1.1:2.6.1 +2.7.1:4.1.3:1.7.2:4.2.1:1.5.1:2.3.1:5.4.2:4.2.1:4.1.1:6.3.4:3.5.1:2.7.1:3.5.1 +4.3.2:2.7.4 +4.1.2:5.4.99:2.7.4:3.5.3:3.5.1:3.5.3:3.1.1:4.1.1 +6.3.2:2.5.1:2.1.1:2.1.2 +1.5.1:3.1.3:3.6.1:6.3.1 +1.1.1:6.3.4:2.3.3:6.3.4:3.1.1 +3.1.3:4.2.1:3.6.1:6.3.3 +6.2.1:4.1.1:2.7.1 +9.9.9:2.7.1:2.1.1 +1.3.3:2.3.1 +3.1.3:2.7.2:1.7.2:4.3.2:5.4.2:3.5.3:3.1.1:2.6.1:1.2.4 +4.4.1:2.7.2:4.3.1:4.2.1:2.7.1:1.5.1:2.7.1:5.3.1 +1.2.1:4.3.2:4.3.2:4.3.1:4.4.1 +4.4.1:1.3.99:6.3.1:4.2.1:2.7.4 +3.1.3:2.7.1:2.4.1:1.2.4:4.1.2:2.4.2 +2.6.1:2.4.2:4.3.1:6.3.4 +4.1.1:2.4.1:2.3.3:1.2.4:2.4.2:2.5.1:2.1.2:3.4.13:2.6.1:6.3.2 +3.2.1:2.6.1:2.3.1:5.1.1:4.1.1:2.1.2 +2.6.1:1.2.1:6.3.5:2.5.1:6.3.4:4.1.1:2.7.4 +2.7.8:2.-.-:1.5.1:2.1.3:4.1.1:2.6.1:1.17.4 +2.6.1:4.3.2 +1.3.99:1.1.1:4.1.1:3.5.1:1.2.4:3.5.2:3.5.1 +3.1.3:4.2.1:3.1.3:2.7.4:1.1.1:1.1.1:6.2.1:1.1.1:4.2.1:5.4.99:4.4.1:2.7.1:2.7.4:5.3.1 +6.3.2:2.5.1:2.4.2:2.7.4:2.1.3:2.3.1:1.2.4:4.3.2 +2.1.3:4.1.2:2.3.1:2.3.1:4.2.1:2.7.2:6.3.2:1.1.1 +2.6.1:2.3.1:2.4.2:1.2.7:3.1.4:4.1.99:5.1.3:4.1.1:1.5.1 +2.3.1:2.7.7:4.1.2 +3.6.1:3.5.3:1.2.7:5.4.2:2.7.1 +4.1.1:2.5.1 +1.5.1:2.7.1:2.7.1:6.3.2:2.1.3 +2.3.1:2.3.1:2.3.1:6.3.4 +1.2.1:1.1.1:3.4.13:2.7.7:6.3.4 +1.2.1:4.3.1:2.7.1:4.2.1 +2.7.1:2.4.2:3.5.1:1.2.1:4.3.1:2.7.1:2.1.1:2.1.3 +4.1.2:3.5.2 +4.4.1:2.5.1:3.2.1 +2.3.1:2.7.1:4.3.1:5.4.2:4.3.1:1.2.1:2.7.1:4.3.2:5.4.2:5.1.3 +6.3.3:2.7.4:1.2.1:3.5.1:2.3.3:5.4.99 +2.7.4:2.7.4:1.1.1:1.2.1:4.2.1:4.1.1:4.4.1 +6.3.2:3.5.1:1.1.1:2.7.1:4.1.1:1.14.13:2.3.3 +5.1.3:9.9.9:1.4.1:1.7.99:4.1.3:1.1.1:4.1.2:3.1.3:4.1.1:6.3.4 +2.4.2:1.2.4:4.1.1:4.1.1:4.2.1 +2.3.1:1.5.1:6.3.2:2.7.2 +1.1.1:1.1.1:6.3.4:3.5.3:1.3.3 +2.7.2:4.3.1:2.4.2:3.4.13:4.3.1:2.1.1:2.1.3:1.8.1 +2.1.1:2.3.1:5.3.1:6.3.4 +2.7.1:2.1.2:2.7.4:2.4.2 +3.13.1:2.7.2:2.5.1:1.1.1:4.1.3:2.7.4:2.6.1:5.3.1:2.3.1:2.1.3:4.1.1:1.5.99:5.4.99:2.7.1 +2.3.1:1.2.1:1.1.1:2.7.6:3.1.1:2.7.1:1.1.1:2.2.1 +3.1.3:2.1.2:2.7.1 +6.3.2:5.1.3:2.7.2:2.1.3:1.1.1:1.2.4:2.7.1:2.5.1 +1.13.11:1.3.3:4.4.1:2.4.1:3.1.4:2.7.1 +4.2.1:2.3.1:3.6.1:2.3.1:5.3.1 +5.4.99:6.3.4:2.7.2:1.2.4:4.3.2:2.7.1:2.6.1 +6.3.4:3.1.4:4.3.1:3.5.99:1.2.1:3.5.3 +5.4.99:3.5.1:2.3.1 +3.1.5:2.5.1 +2.6.1:3.4.11:4.1.2:2.7.1 +2.6.1:4.3.2:1.2.4 +2.7.7:2.7.7:3.5.1 +6.3.3:2.3.1:1.1.1:4.99.1:1.8.1:3.1.3:2.3.1:2.7.1:1.5.1 +3.5.1:4.3.1:4.3.1:1.2.99 +2.3.1:4.1.1:3.1.3:3.5.5:2.7.4:4.3.2:6.3.3 +4.3.1:5.3.1:1.3.99:2.7.2:2.7.2:1.1.1:2.6.1:1.1.1:6.3.3:2.7.8:4.1.1 +4.3.1:2.6.1:3.4.11 +4.6.1:2.7.7 +2.1.2:2.1.2:6.3.4:1.1.1:3.2.1 +3.2.1:6.3.4:3.5.1:5.4.99 +1.8.1:4.1.3:5.3.1:2.4.2:2.3.1:5.4.2 +1.3.1:1.11.1:1.2.4:1.17.4:5.3.1:2.1.1 +2.7.1:2.7.2:3.5.1:6.3.3 +2.6.1:2.7.4:1.4.4:6.3.5:2.1.2:5.3.1 +6.3.2:2.3.1:4.1.1:2.7.2:6.3.3:3.5.1:6.3.1:1.5.1:2.5.1:2.5.1:2.4.2:2.7.7:1.1.1 +1.2.1:5.4.2:6.3.5:2.2.1:1.1.1:2.7.4 +3.2.1:1.2.1:1.1.5 +1.2.1:2.5.1:2.7.2 +4.1.1:2.7.7:6.3.4:2.4.1:3.6.1 +2.7.1:2.7.1:3.2.2:4.1.1:2.7.2 +4.2.1:2.4.2:1.1.1:6.3.3 +6.4.1:6.3.5:2.3.1:2.7.1:6.1.1:1.5.1:2.7.2:2.7.4:2.5.1 +4.1.2:3.1.1:2.7.6:1.2.1:2.7.2:4.1.1:6.3.4 +4.1.3:3.5.3:5.3.1:1.14.16:6.3.5 +2.6.1:2.3.1:4.3.1 +2.7.2:6.3.2:3.6.1 +2.7.1:2.1.2:6.3.3 +4.3.1:1.1.1:2.7.7:2.7.2 +2.7.1:2.1.4:1.4.1:2.1.1:1.1.5:4.1.2:5.3.1 +2.7.7:6.4.1:2.7.2:3.6.1:3.5.1 +3.5.1:6.3.1:2.3.1:3.2.1:2.5.1:2.6.1:1.5.1 +2.7.2:6.3.1:2.6.1:2.4.2:1.5.1:3.6.1 +1.14.12:3.1.2:6.3.4:2.7.4 +1.7.2:2.7.1 +2.7.4:1.1.1:2.4.2:1.1.1:6.3.4 +1.2.1:6.3.3:2.7.2:1.5.1:2.7.6:2.6.1:1.5.1 +2.1.3:5.3.1:1.11.1:2.3.1 +2.7.7:2.5.1:6.3.5 +4.1.99:2.7.4:1.1.1 +2.6.1:6.3.4:3.1.3:2.3.1:4.1.1:2.7.6:4.2.3:4.1.2:5.1.3:4.4.1:4.3.1 +4.2.1:1.4.1:6.3.3 +4.1.2:1.8.1:4.4.1:2.1.3 +6.4.1:4.3.2:3.1.3:2.3.3:1.1.1:2.6.1:2.7.2:6.2.1:1.1.1 +5.4.2:2.7.1:4.1.2:2.7.9:1.2.4 +1.7.2:4.1.1:4.3.1:2.1.2:4.2.1 +3.5.1:4.2.3:1.1.1:1.2.1:2.4.2:1.1.1 +2.7.1:2.7.1:2.7.4 +6.3.4:2.3.3:2.5.1 +5.1.2:5.4.99:4.2.3:3.5.1:3.5.1:5.3.1:2.4.2:2.7.7:1.2.1:3.1.5:6.3.2:1.2.1:2.4.1 +2.3.3:2.3.1:5.3.1 +1.3.3:2.7.1:2.7.7:2.3.1:4.2.1:2.1.2:4.4.1:1.5.1:1.1.1:6.4.1 +1.1.1:6.3.2:3.5.4 +4.3.1:6.3.4:3.5.1 +1.2.1:4.2.1:4.3.1 +3.5.3:3.1.1 +2.3.1:4.1.1:1.5.1:1.14.12 +2.6.1:4.3.2 +4.4.1:1.5.1:1.2.1 +4.2.1:4.4.1 +3.1.3:1.4.3:1.8.1:2.3.1:4.4.1:2.7.1 +2.7.2:4.1.1:1.5.1:6.4.1 +4.3.1:4.3.2:1.4.3:1.14.13:4.1.1 +1.14.99:2.1.3:4.3.1:2.7.1 +2.8.1:3.5.3:4.2.1:1.4.1:1.4.1:1.1.1 +4.4.1:4.1.1:6.3.5 +1.3.1:1.1.1:5.4.3:4.1.3:4.4.1:6.3.2:4.3.1:1.2.1:2.7.4:5.4.2:4.3.1 +6.3.2:3.2.1:4.2.1:6.3.2:6.3.4:2.5.1:3.5.4 +2.7.1:5.4.99:5.3.1:3.7.1:4.2.1:4.1.1 +3.1.7:4.1.3:2.7.7 +2.7.2:4.1.3:2.6.1:6.3.1:5.4.2 +2.6.1:3.2.1:2.3.1:1.1.1:2.3.1:2.7.2:5.1.3 +2.7.8:6.3.2:6.3.5:2.4.2:5.3.1:1.4.1:2.1.1:1.2.1 +2.1.1:2.3.1 +4.3.1:3.2.2:2.7.1:3.1.4:3.5.1:3.1.3 +6.3.2:2.7.4:3.2.2:5.4.2:2.1.3:5.4.99:2.5.1:4.1.2:1.3.99:1.1.1:4.2.1:1.1.1:6.3.1:1.2.4 +2.6.1:1.1.1 +3.5.4:4.2.-:5.3.1 +6.3.2:2.3.1:2.5.1 +2.3.1:3.5.4:6.3.1:6.4.1:1.2.1:2.7.4:1.2.1:4.2.3:2.7.1:2.5.1:2.6.1 +4.1.3:6.3.2:3.5.4:2.2.1 +5.1.1:4.1.1 +2.5.1:4.1.1:2.6.1:4.2.1:2.3.1:2.3.1 +4.2.1:2.7.1 +4.3.1:2.3.1:1.2.1:4.3.2:2.7.9 +3.5.1:1.7.99:2.7.4:2.4.2:2.5.1 +3.5.3:1.3.3:4.2.1:1.17.1:4.4.1:2.7.1:5.3.1:2.1.2 +2.7.4:6.3.2:2.1.3:4.3.2:1.1.1:2.4.2 +6.3.5:2.7.7:2.6.1:3.2.1:2.7.2:1.2.1 +4.1.1:2.7.1:1.2.4:1.4.1 +4.3.1:2.4.2:5.4.99:2.7.1:4.2.3 +1.1.1:4.2.3:2.7.7 +2.5.1:1.2.1:1.2.1:3.6.1 +3.6.1:3.2.2:4.2.3:5.3.1:6.3.4:4.1.1 +3.1.3:3.1.2:5.4.99:3.6.1:6.3.4 +4.3.1:2.6.1:6.3.2:4.4.1 +2.7.2:2.1.3:2.9.1:2.1.1 +2.3.1:1.1.1:2.1.3:2.7.1:1.1.1:3.5.2:4.3.2:3.1.3 +5.4.2:2.6.1:1.4.1 +2.1.2:2.5.1:6.3.4:3.5.1 +3.6.1:4.4.1:6.3.3 +5.3.1:1.1.1:5.1.3:4.3.1:3.6.1:2.3.1:6.3.4 +1.1.1:1.4.1:3.6.1:2.6.1 +2.7.1:2.4.2:2.5.1:4.2.-:4.3.2:2.3.1:2.3.1:4.1.1:1.17.1:1.1.1:2.3.1 +3.4.13:3.1.1:2.6.1:4.3.1:2.7.1:5.4.2:2.7.4:1.7.2 +2.6.1:6.3.2:2.8.1:1.5.1:6.3.2:4.1.3:6.3.3:6.3.4 +2.7.4:6.3.4:2.7.1:1.8.1:1.5.1:6.3.4 +2.4.2:1.3.1:2.7.1:2.7.4 +4.2.3:6.2.1:4.1.1:3.8.1:2.5.1:6.3.2:3.6.1:1.4.1 +4.2.1:1.4.3:3.2.1:6.3.1:4.4.1:2.2.1:1.1.1 +2.6.1:2.7.1:2.7.4:1.4.3 +3.5.1:2.7.2:6.3.5:2.7.6:2.1.2:6.2.1:2.7.1:5.3.1:4.2.1:6.3.5 +1.1.1:4.4.1:1.5.1:4.2.1 +3.6.1:2.7.7:2.7.4:4.3.1 +2.4.2:2.7.7:3.1.3:2.3.1:5.1.3 +2.6.1:3.5.5 +4.2.1:4.2.1:3.5.1:2.7.2:3.5.3:4.3.2:6.3.2 +2.7.1:2.5.1:1.4.1:2.3.1:2.7.4:2.1.1:2.5.1 +4.1.2:3.1.3:2.1.2 +3.5.1:6.3.4:2.6.1:6.3.1 +1.2.1:2.6.1:4.1.1 +3.6.1:6.3.3:1.8.1:1.5.1:2.1.1:3.5.2:2.7.2:4.1.1 +2.7.2:2.5.1:2.7.2:2.5.1:2.3.1:1.14.99:5.4.2 +4.3.1:4.3.2:2.4.2 +4.1.2:5.4.99:3.5.3:2.7.1:3.1.2:1.2.1:3.6.1:4.3.2:2.7.7 +1.2.1:2.6.1:2.1.2:2.4.1:4.1.1:2.5.1:1.14.12:3.4.13:4.2.1:2.6.1:4.1.2 +2.3.1:3.2.1:2.7.2:2.7.1:2.6.1:3.1.3 +2.7.1:2.6.1:6.3.4:5.4.2:1.1.1:5.4.2:2.6.1:4.3.2:2.5.1:6.3.2 +5.4.2:1.5.1:2.7.7:3.1.2:2.5.1:5.3.1:2.1.3 +1.1.1:4.3.1:4.2.1:1.2.4:6.3.4:6.3.1:2.1.1 +2.7.1:4.3.2:5.3.1:3.5.3 +2.7.7:1.2.1:4.3.2 +1.5.1:2.3.3:2.7.7:2.3.1:3.6.1:2.7.7:2.6.1:6.3.4:5.4.2 +4.4.1:1.1.1:2.1.1:2.7.1:2.5.1:5.4.2:6.3.5 +2.5.1:4.2.1:1.1.1:2.7.6 +2.7.7:6.3.3:3.6.1:1.5.1:2.7.1:6.3.4 +2.7.2:5.4.1:2.5.1:3.5.1:6.3.3 +1.5.1:1.2.1:2.5.1:3.6.1:4.1.1:2.5.1 +1.3.3:3.2.2:3.2.1 +1.4.1:6.3.2:2.1.1:1.1.1:4.4.1:1.1.1:4.1.1 +2.3.1:4.2.3:1.1.1:2.7.6 +4.1.3:2.3.1:4.2.1:2.7.2:9.9.9 +4.2.1:5.4.2 +2.7.1:3.5.1:3.1.2:6.3.4:6.3.3 +1.1.1:2.3.1:2.3.3:2.3.1:2.2.1:2.7.7:1.3.99:3.5.4 +1.3.1:2.3.1:3.6.1:2.7.1 +2.7.7:4.1.1 +1.5.3:3.5.1 +1.2.1:5.4.99:6.3.3:1.1.1:2.7.9:3.5.1:2.3.1 +5.3.1:5.3.1 +2.7.4:3.1.3:1.2.1:2.5.1 +1.1.1:4.3.2 +2.7.4:6.2.1:5.3.1:3.1.3 +1.8.1:4.2.1:2.6.1:2.4.1:2.3.1:1.2.1:2.3.1:2.3.1 +1.5.1:1.1.1:2.7.4:3.1.2 +1.1.1:4.3.1:2.1.1:5.3.1 +1.2.1:2.1.2:2.4.2 +3.5.1:3.5.1:1.1.1:2.7.1:1.2.1:4.2.1:1.3.1:6.3.5 +2.3.1:1.17.1:4.2.3:4.2.3 +6.3.5:1.1.1:2.7.7 +6.3.4:2.6.1:2.7.7:4.1.1:2.7.1:2.5.1:2.1.3:5.3.1:2.7.2 +1.1.1:2.7.7 +2.7.4:1.1.1:5.3.1:4.1.1 +2.3.1:1.2.5:6.1.1:2.6.1:1.2.1 +5.4.2:2.3.1:2.2.1:3.1.2:3.5.1:6.3.2 +1.3.99:2.7.1:2.1.1:6.3.4:4.4.1:1.7.2:5.4.99:1.3.99:2.6.1:2.5.1:3.1.3:1.11.1:1.7.99 +1.2.1:2.7.2:4.3.1:6.3.4:1.1.1:2.7.1:3.6.1:2.1.2:1.5.1:4.3.1:1.1.1 +4.3.2:6.4.1:6.3.4:2.4.2 +1.1.1:4.1.1:4.1.2:2.1.2:3.1.5:1.5.1:1.1.1:2.5.1:3.2.1:1.2.1:2.8.1 +1.13.11:2.3.1:2.7.2:2.7.1:1.2.1 +1.1.1:4.1.1:4.1.2:2.3.1 +2.5.1:2.7.1:3.4.13:3.5.3 +2.7.1:4.1.1:2.6.1:2.5.1:4.2.3:1.1.1:2.7.1 +4.2.3:4.2.1:2.7.1:4.1.1:3.5.1:4.1.1 +1.14.12:4.1.1:5.3.1 +1.1.1:4.4.1:4.2.3:4.2.1 +4.2.3:6.3.2:3.1.3 +1.2.4:4.1.1:2.4.2 +6.3.5:4.3.1:3.1.1:2.2.1:1.2.1:6.3.5:1.5.1:4.1.1 +3.6.1:3.6.1:2.3.1 +4.1.3:3.1.3:2.1.2:1.2.1:1.2.1:1.1.1 +2.3.1:2.4.2:1.1.1:3.5.2:2.4.1:4.2.1:2.3.1:6.3.1 +3.6.1:2.7.2:2.7.2:5.4.99:2.7.4 +3.1.3:3.5.2:4.2.1:2.7.6:1.5.1:2.4.2 +2.3.1:1.5.1 +2.3.3:1.2.4:6.2.1:5.3.1:2.7.1 +2.5.1:2.4.2:4.1.2:2.3.1:2.7.6 +2.7.1:3.5.1:4.2.1 +3.5.4:6.2.1:2.3.1:1.1.1:1.1.1:2.7.1:4.2.1 +1.5.1:2.6.1:2.5.1:2.7.2:1.13.11:1.2.1:2.3.1:2.7.7:4.2.1 +1.2.4:2.3.1:6.3.2:3.1.2:2.1.3:1.1.1 +3.5.1:1.2.1:2.4.2:3.1.4 +9.9.9:6.3.4:4.1.1:4.1.1 +4.2.1:2.7.7:4.1.1 +2.3.1:4.1.2 +2.5.1:1.2.1:2.7.1 +2.7.7:3.1.3:6.1.1:2.5.1:4.1.1:1.7.3:2.4.2:2.1.3:1.1.1 +1.4.1:2.6.1 +3.1.3:1.1.1:6.3.4:2.6.1 +9.9.9:5.4.99:1.5.1:2.3.1 +4.2.1:4.1.1:1.2.1:6.3.2:1.1.1:4.1.1 +2.7.1:6.3.2:2.5.1:2.7.2 +1.1.1:2.4.2:2.7.1:4.2.1:1.1.1 +2.1.3:2.5.1:3.5.1:3.5.1 +5.1.3:1.2.1 +3.5.3:2.5.1:3.1.2:2.7.1 +6.4.1:4.4.1:4.2.1:2.5.1:3.5.2:3.5.1 +4.3.1:3.13.1:2.5.1 +5.3.1:3.1.1:5.4.99 +1.1.1:3.2.1:3.4.11:2.3.1:4.3.1 +4.2.1:2.7.1:4.4.1:3.1.2 +3.5.4:3.5.1:6.2.1:4.4.1:2.6.1 +2.7.2:1.3.99:6.3.2 +1.2.1:1.1.1:2.1.2:2.7.2 +2.4.2:4.2.1:3.1.3:2.7.9:3.1.3:3.2.2 +2.3.1:3.5.3:1.1.1:5.3.1 +3.4.11:1.8.1:1.14.13:4.3.2:2.7.1 +1.1.1:4.3.1:1.1.1 +4.1.3:4.1.1:2.7.7:6.3.4:2.4.2:2.1.1 +5.3.1:4.1.1:3.5.1 +2.1.3:6.3.3:6.3.4:2.1.1:4.3.1:2.6.1 +9.9.9:2.6.1:5.4.99:3.1.3 +3.5.4:2.5.1 +4.1.1:3.5.1:4.3.2:3.5.3 +6.3.4:2.6.1:4.3.2:4.1.1 +2.7.2:2.3.1:2.4.1:4.1.2:3.1.1 +1.2.4:6.3.4:2.7.1:4.1.1:3.1.3 +1.7.99:3.5.5:2.4.2:2.7.4:3.6.1:2.4.2:1.2.1:4.1.3:3.4.13:3.5.3:2.7.1 +1.1.1:1.1.1:1.3.99 +2.7.1:1.2.1:2.7.1:2.8.1:2.1.3 +2.7.6:2.7.1:2.3.1:2.3.1 +3.5.1:2.7.1:2.3.1:4.1.1 +4.1.1:2.7.4:1.1.1:3.1.3 +2.1.2:2.3.1:6.2.1:5.3.1:1.2.1:3.1.2:2.1.3:1.14.13 +1.2.1:4.1.1:4.3.1:1.13.12:2.5.1 +3.5.1:3.1.5 +1.1.1:3.5.1:4.3.1:2.3.1:1.5.99 +3.4.11:2.7.4:4.1.1:3.1.1:6.3.2:2.1.3 +4.2.3:6.3.1:3.7.1 +2.3.1:2.6.1:4.1.1:3.2.2 +2.3.1:5.4.2:2.7.2:2.7.2 +3.5.2:2.7.7:2.6.1:3.5.1:4.1.2:4.1.1 +6.3.2:2.7.1:2.7.1:2.7.4:2.5.1 +3.5.1:6.3.5:5.3.1:2.1.3:2.3.1:2.7.1:4.1.1:6.3.2:2.7.1:1.5.1 +4.1.1:2.6.1:2.4.2:2.3.1:1.14.16 +4.1.1:2.5.1:4.1.1 +2.7.6:4.1.1:2.2.1:2.4.2:3.5.4 +2.1.2:4.1.1:2.7.2:1.1.1:3.5.1:4.3.2:5.1.3 +1.1.1:4.2.3:2.7.1:5.3.1:2.6.1:4.1.2 +2.1.2:1.4.4:1.5.1:2.3.1:3.1.5 +4.1.1:2.7.7:6.3.4 +2.5.1:3.5.1:3.1.3:3.5.1:4.2.1:2.7.1:4.1.3:4.3.2:4.1.3:4.1.1:6.3.4 +2.6.1:2.5.1:2.4.2:2.3.1:4.3.1:4.4.1:4.1.1 +5.1.1:5.4.2:6.3.3:2.3.1:2.4.2:6.3.2:4.2.3:4.1.1 +2.1.3:2.1.3:2.5.1:3.1.3:4.3.1:2.4.2:4.1.2:1.8.1:4.1.1:2.7.2:2.7.2 +2.5.1:4.1.2:5.4.1:2.7.8:2.7.2:6.3.4:6.3.4:2.3.1 +2.7.1:4.1.1 +2.5.1:4.3.1:2.5.1:5.4.99 +5.1.3:3.7.1:4.3.1:3.5.4:1.5.1 +2.1.4:4.1.2:1.1.1:1.4.1 +3.4.11:6.3.2:1.2.1:5.3.1:4.2.1 +6.3.4:2.7.8:2.7.2:1.4.1:3.5.2:4.1.3:2.1.3:2.7.1 +2.3.1:4.1.1:5.1.1 +1.17.4:4.2.3:3.2.2:6.3.4:2.7.7:2.3.2:2.1.2:2.3.1 +6.3.4:4.1.1:1.1.1:3.5.1:2.4.2:1.5.1:4.1.1:2.3.1 +2.1.1:6.3.1:2.7.1:2.3.1:5.4.2:3.5.4:2.7.4:3.5.1 +2.7.8:2.3.1:3.5.1:1.1.1:3.7.1 +4.2.3:3.5.1:3.5.3:2.5.1:2.5.1 +4.3.1:4.1.1:5.1.3:1.5.99 +2.8.1:6.4.1:2.5.1 +1.3.1:2.3.1:3.5.1:2.1.2 +4.1.3:1.2.1:2.5.1:2.8.1:1.2.1:3.1.3:2.7.6:2.1.2:2.4.2 +1.5.99:1.4.1:5.3.1 +3.5.1:1.2.4:2.7.7:2.3.1:6.3.3:2.3.1:2.7.1:4.4.1:2.7.7:1.4.99:4.1.3:4.2.1:3.5.3:6.3.4 +6.3.2:4.1.1:4.1.2:2.4.1:6.3.4:1.5.1:6.3.5 +6.3.2:1.14.13:3.5.3 +2.7.7:2.3.1:1.2.4:1.5.1 +3.5.1:3.7.1:1.2.1 +2.6.1:2.6.1:1.1.1 +2.3.1:2.7.2:4.1.1:2.7.1:2.4.1 +6.3.4:2.6.1:3.2.1:1.2.1:4.2.1:1.2.1:5.1.2:1.2.1:1.1.1:3.1.3:3.5.1:3.6.1:2.7.7 +1.1.1:3.5.3:4.1.1:2.3.1:3.1.4:5.-.-:1.1.1:4.1.1:1.4.3 +6.3.3:5.4.1:1.8.1:1.2.1:3.5.1:2.3.3 +1.1.1:2.6.1:3.5.1:4.1.1:4.1.1:5.4.99 +2.7.8:2.3.1:1.5.1:4.2.1:2.4.2:2.7.1:6.3.4 +6.3.4:2.7.7:4.1.2:3.5.5 +2.4.2:3.1.3:2.7.1 +3.6.1:2.6.1:3.2.1:2.7.2:4.1.2:1.2.5:6.3.4:5.1.3:2.4.2:2.5.1:2.6.1:4.2.1:4.2.1 +1.2.1:3.7.1:4.1.3:2.7.7:3.5.1:2.3.1:4.2.1:2.7.2:2.6.1 +2.7.7:1.2.4:4.2.1:2.3.1 +3.5.2:2.1.2:1.1.1:3.5.3:2.7.1:6.3.1:2.1.3:1.5.1 +4.4.1:2.2.1:1.8.1:1.7.2:5.4.99:2.3.1:1.2.1:5.4.99:1.2.4:4.1.1:2.5.1 +2.3.1:2.5.1:1.2.1:3.1.3:2.6.1 +2.1.1:1.5.1:2.5.1:1.1.1 +1.2.1:1.3.3:4.1.3:1.7.2:2.1.2 +2.7.1:3.5.1:2.1.3:3.2.1:6.2.1:2.7.1:3.5.1 +1.13.11:1.5.99:6.3.1:4.1.2 +2.7.6:4.1.2:2.6.1:2.3.1 +1.2.1:3.1.1:1.1.1:4.1.1:3.5.1 +2.7.1:2.3.1:4.2.3 +2.1.3:3.5.99:2.7.1 +1.13.11:1.1.1:1.3.1:5.1.3:1.2.1:2.1.3:4.2.1:1.7.99 +1.4.1:2.7.1:2.1.2 +4.1.1:2.3.1:2.6.1:2.7.6:2.5.1:2.7.2:1.3.3:4.1.1:4.3.1:1.1.1 +3.4.11:4.3.1 +6.3.4:1.2.4:3.5.1:6.3.4 +2.7.7:1.2.1:2.1.1:2.3.1 +2.3.3:1.5.1:2.4.2:2.7.1:1.7.2:4.3.1 +4.1.1:6.2.1:2.3.1:3.1.3 +2.3.1:4.3.1:3.1.3:2.6.1 +1.1.1:3.1.7:2.7.8:6.3.2:5.3.1 +1.5.1:1.1.1:3.1.3:3.2.1:1.1.1:2.1.1 +4.2.3:2.1.3:4.4.1:3.5.4:2.5.1:2.3.1:3.1.3:1.3.1:4.1.3:2.3.1 +3.1.3:6.2.1:2.3.1:2.7.2:5.4.99:1.1.1:2.3.1 +1.1.1:1.5.1:5.3.1:4.4.1:4.1.1:2.6.1:5.4.2 +2.7.2:6.2.1:1.8.1 +1.4.1:2.7.2:3.1.5:6.3.2:1.2.1:1.4.1:2.7.1 +6.3.5:4.1.1:2.6.1:3.5.99 +1.5.99:4.1.1:2.1.2 +6.3.2:1.1.1:4.3.1:2.7.1:2.7.1:5.4.2:1.1.1:6.3.1:1.4.1:4.1.1:1.1.1:6.3.4 +2.5.1:2.5.1:3.5.1:6.3.2:1.1.1:2.7.8:2.1.1:2.7.4:4.2.1:6.3.5 +2.5.1:2.5.1:1.4.1:3.1.3:3.5.4:1.4.1 +3.5.1:2.7.4:5.3.1:1.1.1:5.1.3:1.18.6 +2.5.1:3.5.3:5.4.99 +3.5.3:1.2.1:3.2.1:2.5.1:1.5.1 +4.1.1:3.6.1:2.6.1:2.7.1:1.5.1 +2.3.1:2.7.1:1.1.1:3.1.1:4.1.1 +2.6.1:6.3.2:2.7.4 +2.7.1:4.3.2:4.1.1 +5.3.1:4.1.1:4.1.1 +2.4.1:2.2.1:3.6.1:1.1.1:2.3.1 +2.5.1:2.6.1:2.8.3:2.7.7:3.4.11:4.3.2:1.3.3:6.3.5:2.1.4:4.2.1 +3.5.3:2.3.1:2.5.1:1.1.1 +2.6.1:5.4.99:2.3.1:1.2.1:2.7.1:3.5.1:2.1.2:2.1.3 +6.3.4:2.4.2:5.1.3 +1.4.1:6.3.3:4.1.1:5.3.1:4.4.1:2.7.1:2.7.1:2.5.1:1.2.1 +6.4.1:5.3.1:2.4.1:1.2.1:1.7.99:2.3.1:3.5.3 +2.4.2:3.1.3:1.1.1:2.7.1:2.7.7:3.1.7:4.3.1 +2.1.2:2.7.1 +2.4.1:3.5.1 +3.5.1:1.1.1:5.3.1:1.1.1:2.1.3:1.7.2:2.1.2:6.3.2 +5.4.99:2.4.2:4.3.1:6.3.5:6.3.4:2.7.8 +2.7.1:4.1.3:2.7.7:4.3.1:2.7.2 +1.3.99:1.5.1:2.7.1:4.1.2:6.3.2:1.1.2:6.3.2 +3.5.3:1.5.99:2.3.3 +2.3.3:3.5.4 +6.3.2:4.3.1:2.1.2 +4.3.1:1.14.16:2.5.1:1.1.1:2.7.7:2.1.1:2.7.1:4.3.2:1.17.4:6.3.4 +1.2.1:1.11.1:5.3.1 +1.7.2:3.5.1:4.2.1:1.1.1:3.5.1:2.7.1:2.6.1 +2.7.1:1.1.1:4.1.1 +3.1.3:3.6.1:3.5.1 +5.3.1:2.7.7:2.1.1:3.2.1 +5.3.1:5.4.99:3.5.1 +4.3.2:2.6.1:2.7.2:2.5.1:1.1.1 +4.2.1:4.4.1:6.3.4 +5.4.2:2.6.1:1.1.1:2.5.1:4.3.2:4.1.1 +2.7.2:6.3.4:1.1.1:3.1.1:1.4.1:2.6.1:2.7.7 +2.4.2:1.2.1:2.7.7:2.5.1 +1.1.1:1.3.1:3.5.4:2.7.8:2.6.1 +2.7.1:4.2.1:5.4.99:4.2.1:1.1.1 +1.5.1:2.4.2:4.1.2:5.4.2:4.1.1:3.2.2:1.8.1:3.5.4:1.4.1:3.1.3 +1.2.4:2.3.1:1.2.1:2.3.1 +4.1.1:2.7.9:6.3.2 +6.3.3:6.3.5:2.5.1:2.1.2:2.6.1 +3.1.3:1.5.1:2.3.3:2.7.2:2.6.1 +2.6.1:3.2.2:4.2.3:1.5.99:2.6.1:2.7.6:6.3.5 +1.2.1:1.5.1:3.1.1:6.3.2:1.2.1 +2.3.1:4.1.1:4.1.2:1.1.1:1.1.1 +3.1.3:2.1.2:1.4.1:4.1.2 +9.9.9:1.1.5:1.3.3 +6.3.4:3.6.1:5.1.3:2.5.1:6.3.4:1.2.1:1.3.3 +2.7.2:2.7.4:4.2.1:4.2.1:2.3.1:2.7.4:3.5.99:6.3.4:2.3.1 +1.2.1:2.5.1 +6.3.4:4.2.1:1.1.1 +4.3.1:4.2.1:1.3.1:1.1.1:2.4.1:6.4.1 +2.7.1:2.1.3 +2.7.2:6.4.1:2.5.1:6.3.4:3.1.1:2.3.1:1.2.4:6.3.3:6.3.2 +2.5.1:4.3.1:2.3.1:2.5.1:4.1.1 +2.7.1:6.3.5:4.1.2:2.3.1:2.1.1 +2.7.4:3.1.2:4.4.1:4.3.2 +1.1.1:2.3.1:1.1.1:1.5.1:2.6.1:3.5.1:2.3.1 +3.1.3:1.1.1:2.3.1:1.2.4:1.4.1:1.1.1:6.3.3:4.1.1:1.4.3 +4.1.1:4.3.2:4.1.1:4.1.1:6.3.3:5.3.1:3.1.3 +3.5.1:2.6.1:6.3.4 +3.2.2:1.5.1:2.6.1:2.7.4:5.3.1:2.7.1:3.5.3:1.1.1:2.7.1 +3.5.1:4.1.3:5.4.2:3.6.1:2.4.1:3.5.1 +2.1.3:3.6.1:6.3.5:6.3.3:2.5.1:6.3.4:3.5.1 +2.4.2:1.1.5:2.3.1:1.3.99:6.3.1:4.1.3:6.6.1:2.7.1 +1.2.1:2.7.4:1.13.11:2.3.1:2.7.4:3.2.1:6.3.4:2.5.1 +3.1.3:3.1.3:4.3.2:2.6.1:2.7.4:2.4.2:2.1.2:6.3.4 +2.3.1:2.7.7:1.1.1:2.1.3 +4.3.1:2.5.1:2.4.1 +4.3.2:2.5.1:2.3.1:3.1.1:3.5.1:2.6.1 +6.3.2:4.1.3:1.1.1 +1.5.1:2.1.1:2.5.1:3.1.3:2.7.1:3.2.1 +2.7.7:2.7.2:2.7.2:4.3.2 +6.1.1:1.2.4:2.7.1:1.1.5:2.1.2 +9.9.9:5.4.99:2.6.1 +1.4.1:4.1.1:2.1.1:4.3.1 +1.2.4:2.6.1:4.1.2:2.7.1:3.4.11:2.2.1:2.3.1 +5.1.2:2.4.2:4.1.1 +2.1.3:2.1.2:2.7.7:2.1.2:4.2.3:4.1.2:2.3.1:2.7.7 +2.4.2:4.2.-:2.1.3:4.1.1:1.1.1 +3.5.1:2.5.1:2.7.1:1.1.1 +5.4.99:1.2.1:2.7.1:2.5.1:5.3.1:2.7.8:2.4.2:3.1.1:1.5.1:6.3.2:1.1.1:4.6.1 +4.4.1:1.18.-:4.1.2:6.2.1:2.3.1:1.2.1:1.1.1:2.1.3:2.3.1:3.5.1:2.1.2:2.6.1 +1.1.1:2.5.1:2.7.1:1.1.2:5.4.2 +5.4.99:6.3.2:4.1.1:2.6.1:1.5.1 +2.1.1:2.6.1:2.7.2:2.3.1:1.1.1:4.2.-:3.6.1:1.2.5 +3.1.3:2.7.1:6.2.1 +6.3.5:4.1.1:2.1.3:2.7.1:5.3.1 +3.5.1:1.5.99:5.4.2:2.7.4:6.3.5:1.3.1:2.5.1:1.14.16:2.6.1 +4.3.1:1.2.1:1.11.1 +2.5.1:2.6.1 +6.3.4:4.3.2:1.1.1:2.7.4:3.5.1 +3.1.3:1.2.1:2.4.2:2.1.3:2.7.1:2.7.1 +2.3.1:4.3.2:2.3.1:2.6.1:1.5.1:2.3.3:2.1.2 +4.1.1:6.4.1:3.4.11:1.1.1:2.5.1:1.1.3:2.1.4:3.6.1 +4.1.1:3.5.1:2.3.1:3.1.4:1.1.1:2.7.1 +3.2.1:5.4.99:4.2.2 +2.6.1:1.1.1:2.4.2:2.7.4:4.1.1 +4.2.3:6.4.1:1.4.3:3.5.1:5.4.2 +2.2.1:1.2.1:6.3.5 +4.4.1:3.3.1:2.3.1:4.2.1 +1.5.1:1.1.1:3.5.1 +4.2.1:2.6.1:1.4.99:6.2.1:2.6.1:4.1.2:4.2.3:2.7.1 +5.4.2:4.2.3:1.1.1 +2.7.2:3.5.1 +4.3.1:6.3.3:5.3.1:2.1.1 +9.9.9:3.5.99:5.4.99 +4.1.2:2.3.3:4.3.1 +6.3.4:1.17.4:1.5.1 +2.3.1:4.3.2:1.4.1 +3.1.3:1.1.3:5.3.1:3.2.2:1.3.99:2.3.1:2.6.1 +3.5.1:1.5.1:4.1.1:1.3.3:1.1.1:4.1.1:5.3.1 +1.8.1:4.1.1:3.6.1:1.2.4 +2.1.1:1.1.1:5.3.1 +2.3.1:1.5.1:3.5.3:2.1.3 +5.3.1:1.1.1:2.7.4:1.14.12:2.5.1 +4.1.1:4.2.1 +5.1.1:2.7.1 +2.1.3:2.5.1:2.7.1:1.2.1:3.1.3 +1.7.2:1.3.1:6.3.3:2.7.4:5.4.4:2.7.1 +6.3.4:1.3.3:2.5.1:2.6.1 +2.7.1:1.2.4:3.5.1:4.3.2:2.1.2 +2.4.2:4.3.2:1.2.1:1.2.1:1.14.13:2.7.2:1.1.1:2.5.1:9.9.9:2.1.3:5.4.99:1.4.4:3.2.2:4.3.2 +4.4.1:6.3.5:5.1.3:5.4.99 +9.9.9:1.1.1:2.7.1:2.1.2:1.2.1:3.1.3 +1.5.1:1.2.1:2.7.4 +4.1.2:3.2.1:2.7.1:2.7.1:1.1.5:2.4.2:2.7.4:3.5.1 +4.3.2:4.4.1:1.8.1 +6.3.5:2.1.1:4.1.1:1.5.1:2.1.2:2.7.7:3.5.4:1.4.3 +1.2.1:2.7.1:2.7.2:6.3.1:2.4.2 +4.3.1:5.1.3:4.2.-:3.1.2:4.2.1:2.4.2:1.5.1 +2.7.7:1.2.1:1.2.1:4.2.1 +2.6.1:2.7.7:1.2.1:5.1.3:2.6.1:3.1.3:2.7.7:3.5.1:3.1.1:4.3.2:3.1.3:2.7.4:2.6.1:3.5.1 +4.2.1:2.3.1:1.4.1:2.7.7:4.3.2 +1.3.1:2.6.1:4.4.1:6.2.1 +2.7.6:3.1.3:4.3.1 +2.5.1:2.3.1:1.1.1:2.7.4:1.1.1:2.6.1:3.6.1:4.3.1 +5.5.1:4.3.2:4.2.1:6.3.4:3.5.1:1.1.1:2.7.1 +5.3.1:4.2.1:3.2.1:2.6.1:2.3.1 +5.3.1:2.7.1:2.4.2:4.2.1:1.1.1:2.4.1:2.7.1:2.3.1:2.7.2 +4.1.2:3.2.1:1.4.1:4.3.1 +2.7.2:2.3.1:2.7.1:4.1.1:6.3.3:4.2.-:2.7.1 +3.6.1:4.1.1:5.1.1:3.5.3:2.7.4 +2.5.1:9.9.9:3.2.2 +6.3.5:4.2.3:3.2.1:1.3.1:1.18.-:4.1.1:1.17.4 +1.4.99:1.5.1:2.1.3 +4.1.1:3.5.3:3.6.1:4.3.1:6.3.4:2.7.2:2.7.1:4.1.1 +2.7.2:3.1.3:2.7.7:2.3.1:6.3.5:3.5.1 +5.3.1:2.1.1:5.4.2:1.5.1 +2.7.4:2.5.1 +1.2.4:6.3.4:2.3.1:2.6.1:5.3.1 +2.2.1:2.7.1:2.1.1:1.4.1:6.4.1 +1.2.7:2.7.1:2.1.3:2.7.2:3.2.1:6.3.3:3.2.2 +2.1.2:2.5.1:6.2.1:2.7.1:6.1.1:1.8.1 +1.3.1:3.5.1:2.2.1:1.7.99:5.3.1 +1.2.4:2.7.1:5.4.2:2.3.1:2.6.1 +2.6.1:2.7.1:5.4.99:3.2.1:2.5.1:6.3.4:2.4.2:3.5.2:4.3.1:2.5.1:2.1.2:6.3.4 +1.2.1:2.7.1:2.7.2:2.4.2:3.5.1:6.3.4:2.7.4 +1.1.2:2.3.1:6.2.1:3.5.2:4.1.2:3.5.3:2.3.1:2.7.1:1.3.99 +2.3.1:2.3.1:2.7.1:2.5.1:4.3.1:2.7.8 +3.5.3:4.1.1:6.3.2:4.1.1:2.1.3 +6.3.2:2.7.7:3.1.3 +1.1.1:1.1.1:4.2.1:4.1.1:4.1.3:1.17.1:1.3.3:2.6.1 +1.4.1:3.1.3:3.5.1:2.7.1 +1.5.1:3.1.5:2.6.1:2.3.1:3.6.1 +1.1.1:2.7.1:2.7.1:1.1.1:4.1.1:2.3.1:2.4.2:3.5.1 +3.3.1:4.2.1:2.1.1:4.2.1:2.5.1:2.7.1:4.1.3:4.2.1:2.7.2:1.1.1 +1.13.11:1.2.1:4.1.3:4.1.1 +2.7.7:2.4.2 +6.3.1:5.4.2:4.2.1:2.3.1 +3.5.1:3.1.3:1.2.4 +6.3.4:2.7.6:1.1.1 +2.1.2:2.7.7:2.7.7:5.4.2:2.3.1 +1.5.1:3.5.1:3.5.1:4.2.1 +2.3.3:2.5.1:4.1.1:4.3.2:9.9.9:4.1.2:3.5.1 +2.3.1:4.4.1:2.7.7:2.6.1:6.3.1:3.6.1:2.7.1 +2.7.2:2.6.1:4.4.1 +2.4.1:1.4.1:4.1.2:2.3.1:2.3.3 +3.2.1:2.1.1 +4.1.1:2.5.1:2.3.1:2.6.1:2.7.2:1.5.1:1.4.1:1.2.1 +4.1.2:2.5.1:1.7.2:2.7.4:6.4.1:2.7.1:5.3.1:6.4.1 +4.2.1:4.3.2:1.7.2:1.1.1:4.3.1 +6.1.1:1.2.1:2.1.1 +5.3.1:3.5.1:1.1.1:1.1.1:1.5.3 +2.7.1:3.2.2:2.1.1:3.2.1:3.5.1:2.6.1:2.1.1:4.1.3:4.2.1 +2.4.2:4.2.3:2.7.8:4.1.1:3.6.1 +2.5.1:4.1.2:2.7.2:4.3.1:1.1.1:1.13.11:1.17.4:6.3.4:1.4.1 +4.1.1:3.5.1:4.3.1:2.3.1:2.1.3 +4.3.1:3.5.2:9.9.9:4.2.1 +1.3.1:2.5.1:2.3.3 +2.7.1:4.2.3:5.3.1 +4.3.1:6.3.5:2.6.1:2.7.1:4.1.1:2.6.1 +4.1.2:1.1.1:3.2.1:3.1.2:2.3.1:9.9.9:3.4.11:4.1.1:2.7.4 +2.7.1:4.4.1:2.1.3 +1.1.1:1.1.1:1.1.1:1.2.4:2.5.1:1.4.1 +5.4.2:3.5.1:2.7.6:2.7.1:2.7.1:2.7.1:1.2.1:4.3.1:2.1.2:2.7.2 +2.3.1:3.5.1:2.7.4:2.7.1:6.2.1 +1.5.1:2.3.3 +2.7.1:2.3.3:6.3.1 +2.7.7:1.4.1:4.1.2:5.4.2:1.2.4 +1.1.1:2.3.1:4.1.2:6.3.2:2.7.1:4.2.1:2.3.1:3.4.11:2.7.2:5.4.2:3.1.3 +2.7.1:4.3.2:3.1.1:2.7.1 +3.5.1:2.7.4:4.4.1:1.5.1:4.2.1:5.4.2 +1.14.13:1.1.1:1.3.99:2.1.1:2.7.7:4.1.1:1.3.99 +5.1.3:2.3.1:1.3.99:5.4.3:2.7.6:4.2.1:1.1.1 +3.2.1:4.1.1:2.7.4:2.8.1 +3.5.2:5.1.1:2.3.1 +1.2.1:2.7.2 +4.3.2:2.4.2:2.7.1 +1.3.99:3.5.1:3.5.4:1.1.1 +1.14.13:1.1.1:1.1.1:2.7.7:2.5.1 +3.5.1:5.4.2:1.5.1:2.1.2:2.3.1 +4.2.-:1.3.99:4.1.1:1.2.1:2.7.4:1.2.1:4.4.1:2.7.1 +2.1.1:2.7.1:4.1.2:1.4.1:2.4.2 +6.3.4:2.3.1:5.4.2:2.7.4:3.5.4:5.1.3:5.3.3 +6.3.4:6.3.4:4.3.1 +1.1.1:2.2.1:3.6.1:1.1.1:5.3.1 +3.2.1:2.1.3:1.17.4:2.7.1:1.2.1:2.5.1 +6.3.4:1.7.2:1.2.1 +3.5.3:1.2.1 +4.1.3:1.1.2:2.7.8:1.3.3:2.3.1:4.1.1:1.2.1:6.3.5 +4.2.1:1.1.1:2.5.1:4.2.3:1.3.1 +1.3.3:3.5.1:2.7.8:2.7.7:5.3.1:1.1.1:4.3.2:3.1.2 +3.1.1:2.3.1:3.1.3:4.3.1:2.3.1:2.6.1:3.5.1:2.7.2:4.3.2:2.6.1:2.7.7:2.3.3 +2.1.3:5.3.1:4.4.1:6.3.4 +2.3.3:1.2.5 +3.4.11:4.1.3:3.1.3:2.7.1:1.1.1 +2.7.4:4.3.2 +2.7.1:2.7.2:5.3.1:1.3.99:2.1.1:5.4.99:1.2.1:5.4.99 +2.5.1:4.3.1:1.4.3:2.4.2:2.3.1 +2.1.2:2.6.1 +4.1.1:2.4.2:4.3.1:2.5.1:2.3.1:2.5.1:3.6.1 +6.3.3:2.5.1:1.7.2:3.2.1:4.3.1 +2.3.1:4.2.-:4.2.1:2.7.2:4.3.2:1.17.4 +5.3.1:6.3.4:4.4.1:2.4.2:4.1.3:4.1.1:1.2.1:2.7.1:2.7.1:1.8.1 +1.4.99:2.1.1 +3.1.3:4.1.1:3.1.4:2.7.1:1.1.1 +5.4.2:9.9.9:4.2.1:3.1.2 +6.1.1:2.7.9:1.2.1:4.1.1:4.1.1:5.4.2:6.3.2 +3.1.3:2.7.7:2.4.2:3.1.3:2.5.1:3.5.3 +5.1.2:2.4.1:4.1.1:2.4.2 +6.3.4:1.2.1 +4.2.1:1.4.1:6.3.4 +1.2.4:6.3.4:6.3.4:5.1.3:4.3.2 +5.4.2:6.3.3:4.3.1:2.7.1:4.2.1:9.9.9:3.5.3:1.5.1:1.2.1 +2.1.4:4.2.-:2.8.1:3.5.4:3.5.99:2.6.1:4.2.1:3.2.2 +1.2.1:2.3.1:2.7.6:5.3.1:4.1.3 +6.3.2:6.3.4:2.5.1:1.5.1:2.1.4:4.1.1:5.4.2:1.1.1:2.7.1:4.1.3:2.3.1:1.2.1 +2.5.1:2.5.1:2.3.1:2.7.2:1.7.2:6.3.3 +2.1.2:1.8.1 +9.9.9:1.1.1:2.5.1:3.5.4:1.1.1:2.3.1 +4.4.1:2.7.6:2.6.1:3.4.11:2.4.1:1.1.1:5.3.1 +1.2.1:2.3.1:2.1.3:1.-.-:4.4.1 +2.7.1:1.1.1:3.6.1:1.5.1:5.3.1:4.3.2:1.2.1 +2.7.2:2.7.1:2.4.2:2.5.1 +3.5.4:2.7.6:2.1.2 +4.2.1:1.1.3 +2.1.3:1.2.1:3.2.2:2.7.1 +5.4.3:3.5.1 +4.2.1:2.5.1:4.1.1:6.3.2:2.1.1 +1.5.99:2.7.6:6.3.4:2.7.1:4.2.1:2.1.3 +2.3.3:4.2.1:2.6.1:4.3.1:6.3.5:6.3.1:1.1.1:2.7.7:2.7.1:3.3.1:4.3.2:6.3.2 +3.2.1:1.2.1:5.3.1:2.7.7:2.6.1:2.6.1:2.7.8 +1.14.13:1.1.1:2.7.1:2.3.1:4.1.1:2.7.4:3.2.1:2.5.1 +4.3.1:2.5.1 +2.7.2:2.5.1:5.4.2:1.4.1:4.1.2:4.1.1 +1.4.1:4.2.3:6.3.3:6.3.4:1.5.1:1.2.1:1.1.1:4.1.1:2.5.1 +3.1.2:3.1.3:4.1.1:2.7.2 +1.8.1:4.3.2:2.3.1 +2.5.1:2.7.1:4.3.1 +2.6.1:2.3.1:2.3.1:2.7.1:2.7.4:2.1.2 +3.5.3:1.1.1:3.1.3 +2.4.2:2.3.1:2.3.3:4.1.1:1.2.4:2.4.1:2.7.8:2.7.7 +6.3.4:1.1.3:2.7.1:1.3.99:2.1.1:3.5.2 +2.7.1:2.7.2:4.1.2:3.7.1:2.7.2:3.5.3:4.4.1 +2.5.1:2.7.7:2.7.1 +1.14.13:1.1.1:4.3.2:5.3.1:6.3.2:2.7.2:2.7.7:6.3.4 +4.3.2:2.5.1:2.5.1 +2.5.1:6.3.3:2.7.1:6.3.4:4.3.1:2.6.1:4.1.3 +2.2.1:5.4.1:4.2.1 +2.7.4:5.3.1:2.8.1:3.5.1:3.5.1:6.2.1:2.6.1 +6.3.2:2.4.2:2.1.3:2.6.1:3.5.1:2.1.3:3.6.1 +2.1.3:2.4.2:2.3.3 +4.2.3:2.4.2:2.6.1:2.1.2 +4.4.1:4.1.3:4.1.1 +6.3.5:3.5.1:2.7.1:2.5.1:2.8.3:3.5.3:2.7.1 +6.2.1:3.1.3:6.3.4:4.2.1:1.14.12:3.4.13:4.1.1:1.1.1:1.4.99:1.7.99 +2.4.2:4.4.1:1.2.1 +6.3.2:3.5.3:4.2.1:4.1.1:1.1.5 +1.2.1:1.1.1:2.3.1:4.1.1:1.1.1 +2.7.4:4.2.1:2.7.8:4.3.1 +2.5.1:2.1.3:1.2.1:4.1.1:2.4.1:1.1.1:1.8.1:4.3.2:2.7.1:1.1.-:1.2.1 +1.5.1:1.1.1:1.3.99:2.6.1:2.1.3:2.7.6:2.7.6:1.2.4 +2.7.7:1.4.1:5.4.2:3.1.3:2.3.1:5.4.2:3.5.1:3.5.1:2.7.1 +2.5.1:3.5.4:2.5.1:3.2.1:2.1.3:4.4.1 +4.2.1:2.1.2:3.6.1:3.5.1:1.13.11:1.1.1 +1.2.1:1.7.2:1.5.1:2.7.1:2.3.1:3.5.4 +2.3.3:3.6.1:2.3.1:3.5.2:2.7.4:2.7.1:2.2.1 +4.3.1:9.9.9:1.2.4:4.3.1:2.1.2 +2.5.1:3.5.1:2.5.1:4.3.1:6.2.1 +1.5.1:6.3.2:4.1.1:2.1.3:1.3.1:2.7.1:3.5.4:3.6.1:5.1.2 +5.4.2:3.5.3:4.2.3 +2.4.2:4.3.2:2.7.7:1.14.13 +1.2.1:3.1.3:2.4.2:2.4.2:4.2.3:3.5.3:2.4.2:2.1.2:2.7.1 +3.4.13:4.3.1:2.4.1:6.3.4 +3.5.3:1.2.1:4.2.1:1.2.1:4.1.2:2.7.2 +3.5.1:2.7.6 +1.4.1:3.1.4:1.2.1 +2.5.1:3.5.4:3.1.3:3.1.4:4.1.1 +4.3.2:4.1.1:2.7.7 +3.5.1:3.5.1:2.3.1:1.8.1 +1.5.1:5.4.2:4.4.1:6.3.3 +2.7.2:3.1.3:3.5.1:2.3.1:2.3.3:2.6.1:6.3.4 +2.4.2:3.5.1:4.2.3:9.9.9:3.8.1:3.2.2 +3.1.3:1.3.99:4.1.1:4.2.1:1.13.12:3.1.3:6.3.4:3.5.2 +4.3.2:1.4.3:2.4.2:2.4.2 +4.2.1:4.1.1:4.1.1:6.3.4:2.3.1 +5.3.1:2.4.2:5.1.3 +3.1.2:2.3.1:1.11.1:6.3.4:4.1.1:2.2.1 +6.3.2:2.8.3:4.1.1:1.7.2:3.5.1:2.1.1:3.1.2:1.14.11:2.7.1 +1.2.4:2.5.1:6.3.3:6.2.1:4.1.1 +2.7.2:2.5.1:4.4.1:1.4.1:2.7.1:4.4.1:1.5.1:2.3.1 +2.5.1:6.3.5:6.3.5:4.1.3 +4.2.1:4.3.2:4.1.1:2.1.2 +2.2.1:1.2.1:2.3.3:2.7.1:2.7.1 +3.1.4:2.3.1:4.1.1:3.5.1:1.2.4:2.6.1:4.3.2:4.1.1:2.4.1:3.5.3:4.3.1 +3.6.1:5.4.1 +2.1.3:2.2.1:4.1.1 +1.2.1:3.1.1:2.6.1 +3.5.3:2.6.1:1.5.1:2.7.8 +2.6.1:4.2.1:3.5.1 +1.2.1:2.4.2:2.3.1:2.7.2 +3.2.2:2.5.1:2.7.1:3.5.4:1.17.4:1.2.1 +1.5.1:5.4.2 +1.2.5:5.1.2:4.4.1:2.7.1:4.1.2:1.1.1:2.6.1:1.1.1 +5.4.99:4.2.1:2.3.3:1.17.1:3.2.2:2.4.1 +4.1.1:2.7.2:2.7.1:1.4.1:2.7.1:6.3.4:2.6.1:1.13.11:1.3.99:3.5.2:2.5.1:6.3.5 +3.1.3:1.1.1:1.2.1:2.1.2:1.1.2:1.5.1:2.5.1 +2.6.1:1.1.1:3.2.2 +2.7.7:4.1.3:1.5.1:1.17.4:4.1.1:1.8.1:4.1.1 +2.4.1:2.3.3:1.2.1:2.6.1:4.1.1:3.5.3 +2.6.1:4.4.1:2.1.1:2.1.3:2.6.1:6.3.2:2.7.1:1.1.1 +2.1.2:1.5.1:4.2.1:2.4.2:4.2.1:4.3.1:6.3.4:4.1.1 +4.1.1:2.7.1:1.4.4 +1.11.1:2.7.6:2.1.3:2.7.1 +5.1.1:9.9.9:2.7.1 +4.2.1:3.5.4:1.1.1:2.6.1:2.4.2 +5.4.1:2.1.2:1.5.1 +4.1.3:2.7.7:1.1.1:2.7.1 +1.2.1:2.7.2:5.4.2:5.3.1:4.2.1:2.7.2:2.1.2:2.8.1 +1.2.1:5.4.2:4.1.2:1.-.-:3.1.3:2.5.1 +2.7.1:4.1.2:3.5.1:3.2.2 +5.4.99:6.4.1:2.7.7:6.2.1:2.3.1:1.1.2 +1.4.1:1.13.11 +5.3.1:1.4.1:1.2.4:6.3.1 +1.1.5:2.7.2:4.1.1 +6.3.2:2.3.1:6.3.4:1.3.99:2.1.1 +1.1.1:3.6.1:2.3.1:4.4.1:4.1.1:4.2.1 +5.4.99:3.4.13 +5.4.2:2.3.3:4.99.1:1.17.1:6.3.4:1.5.1:2.6.1:2.3.1:2.6.1:2.7.2:3.3.1:3.5.3 +2.3.1:2.1.2:5.1.3 +2.3.1:3.2.1:2.3.1:1.1.1:2.3.1:4.1.1:3.1.1:4.2.3:2.5.1 +2.7.1:1.5.1:4.3.1:1.13.12:2.7.1:4.3.2:2.4.2:2.4.1:1.2.1:2.7.6:4.1.1 +6.3.2:4.1.1:4.2.-:2.8.1:2.7.4 +5.4.99:1.5.1:3.5.3:1.1.5:1.14.99 +2.6.1:4.1.2:2.7.1 +4.1.1:2.1.1:2.3.1:3.2.2:1.4.1:6.3.4:4.2.1:5.4.2:2.1.2:2.3.1:2.6.1:1.2.1 +2.3.1:4.2.1:1.1.1:2.7.2 +4.2.1:2.7.2:2.7.1:6.3.5:5.3.1 +2.3.1:2.1.3:4.3.2:4.3.1:2.1.2:3.1.3 +4.1.1:1.4.1:2.7.1 +6.3.2:1.2.4:1.7.99:6.3.4:2.6.1:4.2.1 +2.3.1:6.3.4:2.7.2:4.1.2:6.3.2:2.7.1:4.4.1:2.1.2:3.5.3:1.2.1 +1.5.1:6.3.4:2.6.1:4.3.1:3.5.1:1.8.1:4.2.3:4.3.1 +2.7.1:3.5.4:5.1.3 +2.7.2:2.7.1:3.5.1:1.5.1 +1.8.1:4.1.2:5.1.1:4.1.1 +1.18.6:3.5.4:2.3.1:4.2.-:5.4.99:2.1.2 +1.2.1:6.3.4:4.4.1:6.3.4:2.6.1:2.4.2:1.5.1 +4.4.1:5.3.1:3.1.3:1.1.1:3.5.1:2.7.1:2.5.1:2.1.2:5.3.1 +2.1.2:1.-.-:1.2.4:6.3.1:4.1.2 +2.1.3:6.3.5:2.3.1:2.7.1:2.1.2:1.2.1:1.5.1 +2.3.3:4.3.2:2.4.2:6.2.1 +2.3.1:4.6.1:3.1.4 +1.5.1:3.5.2:4.1.1:1.3.99:2.7.1:2.7.1:6.2.1 +6.3.5:2.7.7:4.1.1:3.2.2:4.1.1 +5.3.1:2.4.1:2.5.1 +2.7.7:4.1.1:2.6.1:6.3.1:6.3.5:2.1.2:1.13.11:2.4.2:2.6.1 +2.7.8:1.1.2:4.1.1:2.7.1:1.1.1:4.3.2 +2.7.9:5.4.99:1.8.1:3.1.1:3.5.3:2.7.1:4.1.3:2.7.1 +1.1.1:2.4.2:2.7.4 +3.5.1:6.6.1:1.4.4 +6.3.2:1.1.1:3.5.1:3.2.1:3.5.1 +5.4.99:2.7.7:4.3.1:4.2.1:2.3.1 +1.5.1:6.3.4:2.4.2:2.7.7:5.3.1:3.1.2:6.3.5 +2.7.1:4.2.1:2.1.2:2.5.1:2.6.1 +4.3.2:3.6.1 +5.4.2:4.4.1 +3.6.1:2.5.1:3.1.3:2.6.1:4.1.2:2.2.1:2.8.1 +5.3.1:3.2.2:1.1.1:2.5.1:1.11.1:2.3.1 +2.1.2:5.4.99:1.3.1:2.4.2:2.6.1:4.2.1 +6.3.4:3.4.13:3.5.1:2.7.1 +2.4.1:1.1.1:3.5.3 +1.4.1:2.7.1 +2.1.2:6.3.5:1.11.1:3.4.13:2.1.1 +6.3.1:5.3.1:3.6.1 +4.3.2:2.3.1:1.1.1:2.7.2:2.3.1 +2.4.1:2.5.1:2.1.2:5.4.2:2.1.1 +6.3.4:2.4.2:6.1.1:4.1.1:4.3.1:1.1.1:1.1.1 +6.3.4:1.4.3:3.5.1 +6.2.1:2.7.4:2.7.4:2.3.1:9.9.9 +1.1.1:4.2.1:4.3.1:1.1.1 +4.1.1:4.1.1:5.4.2:3.1.3 +3.1.3:2.7.2:9.9.9:1.2.1:3.1.3:6.3.4:1.5.1:4.3.2 +5.1.3:2.1.1:6.3.1:1.1.1 +2.7.4:1.1.1:1.1.1:1.4.1:2.3.1 +4.3.2:6.3.5:2.1.1 +1.2.1:6.3.3:1.3.99:3.6.1:2.3.1:2.6.1:2.4.2:2.7.9:2.6.1:3.5.4 +2.5.1:5.4.2:2.5.1:3.1.3 +6.3.2:5.4.99:2.5.1 +4.3.1:2.7.8:2.6.1:6.3.2:2.7.2:2.7.1:5.4.99 +4.1.3:4.1.2:4.3.1:4.3.1:4.1.1 +3.1.5:4.4.1:4.2.1:6.1.1 +2.7.1:5.1.2:1.2.1:2.4.2:4.2.1:5.1.1:2.6.1:2.6.1 +4.3.1:3.6.1:1.7.99:2.7.4:1.2.1:2.3.3:1.3.1:1.1.1:2.5.1:1.5.1:2.4.2:2.7.1 +6.3.2:4.1.2 +4.3.1:4.2.1 +2.1.1:2.7.1 +2.7.6:6.3.4:2.7.1:2.7.4 +2.3.1:4.2.3:6.3.3 +1.1.1:2.3.3:4.2.1:1.7.2:2.3.1 +1.14.-:1.4.4:3.1.4:1.2.1:2.6.1:2.3.1:1.5.1:2.3.1 +2.7.4:1.1.1:2.1.1:1.8.1 +2.5.1:1.1.1:3.5.1:4.2.1:3.1.3 +2.6.1:2.3.1:4.1.3:1.1.1:3.1.3 +1.5.1:1.4.4:1.5.1:6.3.4 +4.1.1:5.3.1:6.3.3:2.6.1:2.1.2:2.6.1:1.14.12:5.1.3 +5.4.2:4.1.1:2.7.2:4.1.1:4.4.1 +1.1.2:4.1.1 +2.7.1:6.3.4:4.3.2 +2.7.1:6.3.5:4.1.2:2.7.4:2.6.1:3.1.1 +4.4.1:3.5.1:2.7.1:2.6.1:4.4.1:2.5.1:2.3.1 +5.3.1:2.6.1:3.5.1:2.5.1:1.8.1:3.1.3:1.2.4 +4.2.1:2.6.1:2.7.6 +2.7.1:2.1.3:4.3.1:4.2.3 +1.4.1:4.1.1:2.3.1:2.1.1:1.2.1:2.6.1:3.5.1:2.6.1:3.5.4 +4.1.1:2.7.7:2.7.1:4.2.1:2.1.2 +1.1.1:1.2.4:1.3.1:4.2.1:2.3.1:2.1.3:2.7.1:3.2.1:3.5.3:2.2.1 +1.5.1:1.2.4:4.1.1:5.4.2 +6.3.2:2.7.7:2.4.2:5.3.1:4.4.1:2.1.3:2.7.1:2.7.2:2.7.7:1.3.99:6.3.4 +6.3.4:3.4.13:4.3.2:3.1.3:2.6.1 +4.1.1:1.1.1:1.18.-:2.5.1 +1.3.1:2.7.1:5.4.2 +3.1.3:3.5.4:1.1.1:1.3.1:2.7.2 +2.7.2:1.4.1:1.5.1:2.5.1:2.3.1 +2.7.4:2.1.2 +2.7.6:2.4.1:2.4.2:2.7.7:6.3.5 +2.4.2:6.2.1:2.7.1:2.3.1:3.3.1 +6.3.1:2.4.2:4.1.2 +3.5.4:4.3.1:6.3.2 +2.6.1:2.5.1:5.3.1 +3.5.1:4.3.2:5.3.1:6.3.4:6.6.1:2.7.2:3.5.1:1.2.1:2.7.1:2.7.2:2.7.7 +1.2.1:6.3.4:2.1.1:3.4.11:1.18.6 +2.6.1:1.2.1:3.1.2:3.1.3:1.3.99 +2.7.1:3.5.1:2.3.1:2.7.4:1.7.1:3.8.1 +6.3.5:3.5.3:4.2.1:2.7.6:3.5.1:9.9.9 +2.5.1:3.2.1 +2.7.1:1.2.7:2.5.1:2.7.7 +2.4.2:1.3.99:1.1.1:4.4.1:3.4.11:2.4.2:4.1.2:2.5.1:2.7.1:3.4.11 +2.5.1:1.5.1:2.3.1 +3.5.1:3.5.1:6.4.1:2.7.1 +5.4.99:2.7.4:2.3.1:5.1.1:4.2.1:2.4.2:2.1.2:4.1.1:6.3.1:1.5.1:2.7.1:2.7.1:1.13.11 +4.3.1:4.1.1:4.4.1:3.5.1:1.2.1:3.5.1 +6.3.2:3.6.1:2.1.2:5.4.2:1.8.1:6.3.5 +2.4.2:4.1.2:2.6.1:1.-.-:4.3.2:3.1.1:2.4.2 +1.2.1:3.2.1:3.5.1:6.3.4 +6.3.4:6.6.1 +1.2.1:2.3.1:5.4.2 +3.2.1:2.1.3:1.5.1 +2.7.7:2.7.1:4.1.2:1.1.2:4.1.2 +5.4.2:2.1.3:4.1.2:3.1.3:4.2.1 +5.4.2:3.5.1:5.3.1:5.4.3:2.7.2 +1.4.1:5.3.1:3.5.1:2.4.2:1.2.1 +2.7.2:4.1.3:3.1.3:1.5.1:1.5.1:4.2.1 +4.2.3:6.3.3:6.3.2:3.6.1:1.4.1:2.7.7 +4.1.1:4.1.3:4.2.1 +4.2.1:5.3.1:4.2.1:5.4.2 +1.2.1:2.1.1 +4.2.1:4.3.2:3.1.1:4.1.1:3.2.1:2.1.1:4.2.3 +6.3.3:3.5.3:2.3.1 +2.3.1:3.1.2:4.3.2:6.2.1:2.3.1 +6.3.3:3.4.13:2.7.1:4.3.2:3.2.2:6.1.1:1.2.1:6.2.1:2.6.1 +1.2.1:2.6.1:1.1.1:1.4.3:3.6.1:2.7.1:2.3.1 +6.3.5:4.2.1:6.3.1:3.5.1:9.9.9:4.2.1:2.7.1:4.1.2:1.7.99 +1.1.5:6.3.2:4.1.1:2.3.1:2.2.1:5.4.99:2.4.2:4.1.2:2.6.1 +2.7.4:2.3.1:1.5.1:2.7.4:3.5.1:1.4.3 +2.1.3:9.9.9:1.2.1:2.5.1:3.5.1:6.3.2 +1.1.5:9.9.9:2.7.2:5.4.2 +3.5.3:1.2.1 +2.7.1:4.2.1:2.7.1:2.8.1:3.1.3:3.6.1:4.1.2:4.1.2 +4.2.1:2.1.3:2.7.8:2.7.1:4.2.1 +2.7.1:4.2.1:2.3.1:2.3.1:2.7.1:2.1.1 +4.1.1:1.2.1:2.7.2 +1.1.1:2.3.1:4.1.2:3.5.3:2.7.1:1.5.99:2.6.1 +1.8.1:2.1.2:2.1.2:6.3.4:2.3.1 +2.6.1:6.3.3 +2.7.8:2.7.2:4.1.1 +4.2.3:6.3.4:6.3.3 +5.3.1:4.3.1:6.3.4:1.17.4:2.7.7:3.1.1:2.1.2:2.7.8 +4.3.2:2.7.4:5.1.3:4.1.2:2.7.7:3.5.2 +2.7.1:1.2.1:3.1.3:5.4.99:2.7.1:4.1.2 +5.4.2:2.6.1:2.7.1:4.2.3:2.1.3:3.1.3 +1.2.1:4.2.1:2.3.1:4.1.1:4.2.1:2.7.6:2.3.3 +1.4.3:1.1.1:2.4.2:1.8.7:3.1.3 +4.1.1:2.3.1:6.3.3:2.6.1:2.3.3:5.3.1 +1.1.1:4.1.3:1.8.1:2.7.6:2.7.1:1.1.1:1.5.1 +1.5.1:1.1.1:5.3.1:2.3.1 +1.1.1:2.4.2:2.3.1:3.5.1:3.6.1:2.4.2 +4.4.1:4.3.2:6.3.5:2.6.1 +2.7.2:2.3.3:2.3.1:2.7.1:1.3.3:4.2.3:4.2.1:6.1.1 +2.7.1:3.6.1 +2.4.2:2.7.2:2.1.2:1.1.1 +3.1.3:2.7.1:4.1.3:2.7.2:6.3.5 +2.7.4:6.3.4 +4.1.2:2.6.1:2.6.1:1.7.1 +4.2.1:3.1.3:2.1.1:2.7.4:2.3.1 +6.3.2:3.5.3:2.3.1:2.1.1:2.7.4:3.2.1:6.3.1 +3.5.1:6.3.4:5.1.2:2.6.1 +6.3.3:2.4.2:2.5.1:4.3.1:3.6.1 +2.6.1:4.1.1:1.1.1:3.5.1:3.1.3:5.4.2:2.3.1 +4.1.2:2.3.1:2.1.3:6.3.2:3.1.2 +4.4.1:2.3.1:2.3.1:4.2.1:2.7.1 +5.4.2:6.3.3:3.6.1 +2.7.1:1.5.1:2.3.1:1.2.1:6.3.2:2.3.1 +3.6.1:3.2.1:5.3.1:1.7.2:4.3.2:2.7.7 +5.4.99:5.3.1:2.7.1 +2.7.1:2.3.1:1.1.1:4.4.1:2.7.1:3.6.1:6.3.3:5.4.99 +2.5.1:2.1.2:2.5.1:2.7.7:5.4.99:3.3.1 +4.1.3:3.1.3:2.4.1:6.3.5 +1.2.4:2.4.1:1.1.1:2.7.1:6.2.1:2.5.1:3.5.3 +2.6.1:2.7.1 +1.17.4:3.5.1:4.4.1:2.7.7:2.6.1 +2.7.1:1.1.1:1.5.1:3.6.1:2.4.1:2.4.1 +2.7.7:3.5.1:2.1.3:5.4.1:2.1.3:5.4.2:3.1.5 +2.3.1:4.2.1:2.3.1:2.3.1:4.4.1 +2.7.7:2.3.3:5.4.2:2.1.1:2.3.1:1.13.11 +4.4.1:5.4.2:3.1.4:1.1.1:4.2.3:4.1.1:1.1.1:2.7.6 +2.2.1:3.6.1:2.1.2:2.2.1:2.7.2 +2.7.7:6.3.2:6.3.5:3.2.2:2.6.1:2.1.1 +3.3.1:3.5.1:1.5.1:6.3.2:2.7.4:1.7.1:2.7.4 +1.1.1:4.2.1:3.1.3:1.4.3:3.2.2:1.2.1:2.7.2 +1.5.3:2.6.1:2.5.1:4.2.1 +2.7.8:3.2.1:1.13.11:3.6.1:4.4.1 +6.3.3:2.7.1:2.6.1:1.1.1:2.7.2:2.7.7 +1.5.99:6.3.2:2.7.2:4.3.2:6.2.1 +3.5.3:1.1.1:4.4.1 +3.5.4:2.7.1:2.3.1 +1.3.99:2.7.1:4.2.1:4.2.3:2.7.1 +2.4.2:2.7.1:5.3.1:3.5.1 +2.5.1:1.4.1:3.5.1:1.7.99:2.3.1:6.3.3:1.2.1:4.1.2:2.7.7 +4.1.1:3.5.1:2.4.2:2.7.1:2.3.1:1.17.4:1.5.1 +2.6.1:1.3.1:6.3.3:2.7.2:4.2.3 +4.2.1:2.5.1:2.7.4:2.6.1:4.4.1:2.1.3:3.4.13 +6.3.4:3.1.3:2.4.1:2.5.1:1.17.1:1.1.1:4.1.1:5.4.2 +5.3.1:2.7.4:2.7.1 +4.4.1:4.1.2:6.1.1:4.2.3 +2.6.1:2.5.1:6.3.3 +4.3.1:1.1.1:3.1.3 +3.5.1:4.3.1:3.6.1:1.2.1:5.1.2:6.3.4 +3.1.3:5.4.2:2.7.2:6.3.4:2.7.7 +4.3.2:4.1.1:2.3.1:2.1.2:1.2.4:4.2.1 +1.13.12:2.3.1:3.6.1:2.7.7:3.5.3 +2.7.1:3.5.2:6.3.4:1.2.1:2.3.1 +4.1.1:2.2.1 +4.1.1:2.7.1:2.2.1:5.3.1:1.5.1:4.4.1:1.4.1:3.6.1:2.1.2 +2.8.1:5.3.1:1.1.2 +2.4.2:3.5.1:4.2.1:1.2.4 +2.3.1:1.5.99:2.7.1:2.3.1 +2.6.1:2.1.2:4.1.1:3.4.11:1.2.1:1.17.4:4.2.3 +2.4.2:2.6.1:1.13.11:5.1.3:2.4.2:4.2.1:3.5.1 +2.1.2:4.1.1:6.3.4:1.4.1:2.7.7 +2.3.1:2.3.1:6.3.3:1.4.3:5.1.3:2.7.1:2.3.1:5.3.1:1.2.1:2.5.1 +1.1.1:2.7.2:1.1.5:2.3.1 +1.2.1:2.6.1:4.1.2:2.1.2 +6.3.5:2.7.1:4.4.1:1.5.99 +5.4.99:2.1.2:3.5.99:4.1.3:6.3.4:2.7.4 +6.2.1:2.7.7 +4.3.1:3.5.3:4.2.1:6.3.4:4.1.3:5.1.3:4.1.1 +4.3.1:3.1.3:2.1.2:3.2.2:4.1.2:2.3.1:5.3.1:1.1.1:2.5.1 +2.6.1:2.6.1:2.7.7:2.3.1:2.6.1:2.5.1:2.3.1:2.7.2 +2.3.3:1.1.1:6.3.1:2.3.1:4.1.1:1.2.1 +2.7.2:4.1.1:2.7.4:3.2.1:1.5.1:2.6.1:3.5.3:1.1.1:2.3.1 +4.2.1:4.1.1:1.2.1:2.7.2 +2.5.1:5.4.2:3.1.3:1.14.13:2.6.1:1.2.4:2.4.2:4.2.1:1.13.12:4.1.1:6.2.1:2.4.2 +2.7.4:2.3.1:1.2.1:4.2.1:3.5.1 +6.3.4:4.3.2:4.2.1:6.3.4:3.5.1:1.1.1:3.5.1 +4.3.2:9.9.9:4.6.1:6.3.5:4.2.1 +1.14.13:2.5.1:2.6.1 +1.2.4:4.4.1 +2.3.1:4.1.1:2.1.1:1.2.1 +3.5.2:2.7.7:2.7.1:3.1.1:2.1.2 +2.5.1:3.1.5:4.1.1 +6.3.4:3.5.1:2.2.1:9.9.9 +1.1.1:4.99.1:1.7.2:2.1.1:1.4.3 +6.3.4:2.3.1:4.4.1:3.5.1:4.1.3 +2.7.2:1.2.1:3.1.3:5.1.3:4.3.2:1.1.1:2.5.1 +2.7.1:3.2.1:2.1.2:4.2.1:2.3.2:4.3.2:1.2.1 +1.8.1:2.7.1:2.8.1:1.4.1:1.5.99:3.6.1:4.3.1 +2.3.1:2.6.1:2.7.1:6.3.1:3.5.1 +1.1.1:4.2.1:4.1.2:4.2.3 +2.7.1:4.3.2:2.3.1:4.2.1:1.2.1:4.4.1 +1.14.15:1.5.1 +2.4.1:4.4.1:2.3.1:2.7.2:2.7.4:4.3.1:2.1.1:1.7.1:4.2.1:1.1.1:4.1.1:2.7.4 +2.5.1:6.3.4:3.5.1:6.3.5 +2.3.3:3.2.1:2.7.1:6.3.5 +2.5.1:2.7.7:3.5.2:5.4.2:1.1.1 +3.2.1:2.7.8:5.3.1 +2.2.1:1.2.4:3.5.1 +1.5.99:2.7.1:3.5.3 +4.4.1:2.7.1:1.5.1:2.5.1:2.6.1:5.3.1 +2.5.1:6.3.4:2.1.1:3.5.1:2.7.2 +2.7.1:2.1.2:1.1.1 +1.7.1:9.9.9:2.5.1:4.1.1 +2.3.1:1.1.1:2.3.3:2.7.1:4.1.1:2.5.1:2.7.1:6.3.2:2.4.2 +2.7.4:1.13.11:3.5.1:2.3.1:4.3.1:3.5.3 +3.2.2:4.3.2:6.3.2 +2.5.1:2.7.4:4.3.2 +1.17.4:3.5.4:4.3.2 +4.1.1:3.1.3:2.7.2:1.5.1:1.1.1:2.7.4:6.3.2:2.6.1 +4.1.1:3.2.2:5.1.3:3.5.3 +3.5.3:4.1.3:2.7.7:2.7.1 +5.4.2:3.5.1:4.3.2:6.2.1:4.1.1:2.5.1:2.3.1:1.7.99:4.1.1:2.7.8 +2.3.1:1.5.1:2.5.1:4.3.2 +2.7.1:3.1.4:1.3.99:3.5.1:3.1.3:4.2.1:3.5.2:4.2.3 +2.5.1:4.4.1:2.7.7:2.1.4:5.3.1:4.1.3 +2.8.1:4.3.1:2.7.1:2.3.1 +4.1.2:4.1.3:6.3.5 +3.1.3:4.1.2:1.1.5:2.1.2:1.4.3 +3.5.3:5.3.1:1.4.1 +1.2.1:2.1.1:4.4.1 +5.4.2:5.4.99:1.3.1:3.1.3:1.3.99 +1.1.1:3.4.11:3.5.4 +1.2.1:1.1.5:4.4.1 +4.2.1:6.3.1:1.2.1:5.3.1:2.7.2:2.8.1 +3.6.1:2.6.1:2.6.1:1.1.1 +1.4.99:4.2.1:2.7.2:2.7.7:2.6.1:2.3.1:5.1.2 +2.7.6:1.4.3:2.7.1:1.1.1 +2.1.2:2.1.1 +4.1.1:4.1.2 +4.3.2:3.1.4 +4.1.1:3.2.1:6.3.4:4.3.1:1.1.1 +2.7.7:3.7.1:2.7.4:2.6.1:2.7.1:2.3.3 +1.1.1:2.7.6:2.3.1:2.6.1 +3.2.2:2.4.2:4.1.3:2.7.7:6.2.1 +4.1.2:4.6.1:4.3.2:4.2.1:3.5.1:4.2.1 +3.1.4:6.3.4:2.7.2:2.3.1:2.7.1:1.1.1 +6.2.1:2.1.3 +3.1.3:1.1.1:3.6.1:4.3.1:3.5.1 +3.2.2:2.4.1:3.6.1 +1.1.2:1.1.1:2.4.2:4.3.2 +1.2.1:5.4.99:2.1.2 +3.5.3:2.3.1:2.7.1:2.4.2:2.4.2 +2.7.2:5.3.1:2.7.2 +5.1.3:2.3.1:2.3.1:5.4.99:4.3.2 +1.2.1:3.5.1 +4.1.1:1.14.13:3.5.3:6.3.2:2.3.1:4.1.3:4.1.3:2.3.1 +5.3.1:4.3.1:2.8.1:2.1.1:4.1.1:1.2.1:4.2.3:2.7.2:1.1.1:4.3.1 +4.1.1:1.1.1:4.3.2:2.3.1:1.5.1:4.3.2 +2.4.2:6.3.4:4.1.2:1.2.4:6.2.1:2.6.1 +5.3.1:6.3.4:4.3.1 +3.2.1:2.5.1:2.6.1 +6.3.2:2.7.7:4.2.1:2.7.2:5.3.1:1.7.99:1.1.2:6.4.1:6.3.2:1.2.1:2.7.1:1.3.1:2.7.1:6.3.2 +3.2.1:2.3.1:3.5.1 +4.2.1:2.4.2:2.3.1 +2.3.1:2.4.2:2.7.1:5.1.2:2.7.2:5.3.1:3.1.4:1.1.1 +2.7.2:5.1.3:1.5.1:1.2.7:1.7.99:1.4.1:2.7.1 +2.7.8:2.3.1:1.18.6:4.3.2:2.6.1:1.2.1:1.1.1:2.7.1 +3.5.1:5.4.99:4.1.2 +2.4.2:5.1.1:6.3.5:3.4.13:4.3.2:6.3.4:1.2.1:2.5.1:1.1.1:6.3.3:2.3.1 +3.5.1:1.2.1:3.1.1 +1.1.1:3.5.1:1.2.1 +2.7.2:6.3.2:4.3.1:2.1.2:3.5.3:1.5.1:3.1.3 +2.3.1:6.3.4:2.1.3:5.3.1:5.4.99:3.5.4:2.1.1 +2.4.2:2.3.1:5.3.1:3.5.3:6.3.1 +2.7.7:1.5.3:2.5.1:4.1.1 +4.1.3:3.5.1:1.4.99:6.2.1 +5.4.99:4.3.1:2.1.2 +4.1.3:4.1.2:2.1.2:2.4.1:2.7.2 +2.7.1:2.7.1:2.7.4:6.3.4:2.3.3 +2.3.1:2.6.1:3.6.1 +2.6.1:6.3.2:3.1.1:2.7.1:6.3.4:2.7.1:2.7.1:3.5.3:6.3.5:6.4.1 +3.5.99:1.5.1:1.3.1 +2.7.7:3.5.1:4.2.1:2.3.1 +1.3.99:1.5.1:2.7.4:6.2.1:2.1.2:2.4.2:5.1.3:2.1.1 +2.7.1:4.3.1:5.3.1:4.2.3 +3.5.1:2.5.1:4.1.3:2.5.1:3.6.1:4.2.3:2.7.7:6.3.4:2.5.1 +3.4.11:2.7.7:6.3.2:1.8.4:4.2.3:2.7.1:1.5.1:6.6.1:1.5.99:2.3.1:6.3.4:3.1.3:4.1.1 +2.7.2:3.5.1:1.1.1:2.7.2:2.3.1:2.7.1:2.7.4:2.3.1 +5.3.1:4.1.2:2.6.1:2.4.2:2.7.4:4.3.2:2.7.2 +3.5.1:2.3.1:2.7.7:3.1.3:6.3.3:1.2.1 +2.3.1:2.1.2:1.-.-:1.5.1:2.3.1 +6.2.1:2.1.2:2.7.6 +4.3.1:3.5.4:4.3.2:3.5.1:4.1.2 +2.7.2:2.6.1:5.4.2 +4.2.2:4.1.1:2.5.1:3.1.3:1.1.1 +4.1.3:2.7.1:6.3.1:2.3.1:3.1.3 +1.4.1:2.4.2:6.3.4:2.7.2:3.2.1:1.1.1 +4.2.3:6.2.1:6.3.4 +3.6.1:2.4.2:5.5.1:2.3.1:3.2.1 +4.4.1:5.3.1:2.4.1:4.1.1 +3.2.1:1.5.1:3.1.4:1.4.1:1.1.1 +1.3.3:5.1.1:2.5.1 +3.5.1:2.7.1:6.3.2:1.17.1:1.1.1:5.3.3 +4.1.1:4.4.1 +2.5.1:2.7.6:4.1.2:1.2.1:1.1.1:1.4.1 +3.1.2:6.3.4:4.1.1 +2.6.1:2.7.1:2.7.2 +4.2.1:2.7.7:2.7.1:4.1.1:2.3.1 +4.2.1:3.5.1:2.4.2:1.7.1:6.3.3:3.1.2 +6.3.4:6.3.4:1.2.1:2.7.7 +4.1.1:3.1.3:4.1.1 +2.5.1:1.2.1:2.7.1:6.3.4:1.1.1:9.9.9 +2.6.1:3.5.3:3.5.4:2.4.2:3.5.3:2.7.1:3.5.1:3.2.1:4.2.1:2.3.1 +2.7.1:5.4.99:2.7.1:1.5.99:4.2.3:2.4.2 +3.5.3:6.3.4:1.2.4 +2.3.1:2.3.1:2.7.2:2.3.1 +3.6.1:2.5.1:3.5.4:1.5.1:2.7.7:2.7.7:2.3.1:2.7.4:1.1.1:2.1.2 +2.7.6:1.1.1:4.1.99:2.7.7:6.3.2:2.3.1:3.2.1:2.7.2:6.3.4 +4.1.1:2.1.3:4.2.1:2.1.2:4.1.1 +3.5.1:1.2.1:4.4.1:3.5.4:3.5.3:1.1.1 +4.2.1:1.2.4:4.3.1 +2.5.1:1.5.1:3.1.3:2.5.1:2.6.1:6.3.5:3.5.3 +1.4.3:3.5.3:3.5.3:6.3.2 +6.3.1:5.4.2:3.5.3:2.7.1:2.3.1 +4.1.1:9.9.9:1.3.99:6.3.4:2.7.4 +2.7.7:1.7.99:2.5.1:1.3.99:2.6.1:1.8.1 +4.4.1:2.6.1 +2.3.1:3.5.2:1.5.1:4.3.1:2.3.3 +2.7.1:1.1.2:3.5.3:4.1.2:4.1.1 +5.4.2:2.1.1:2.7.2:3.5.1:2.7.1:1.1.1:4.1.1 +6.4.1:2.7.1:3.1.7:4.2.1:2.3.1 +5.3.3:2.1.2:3.5.1:4.2.1:3.5.4:3.1.3:3.5.1:5.4.99 +6.3.5:2.3.1:1.2.1:2.7.1:4.2.1:1.5.1 +3.6.1:4.2.1:2.7.2 +2.6.1:5.3.1:2.4.2:1.1.1:4.3.2 +4.2.1:1.1.2:2.1.2:3.1.3 +2.3.1:6.1.1:2.3.1:6.3.4:2.5.1:2.7.1:1.2.1:6.3.2:3.5.1:4.2.1:3.1.3:1.1.1:5.3.1:2.6.1:4.1.3 +2.4.2:5.1.3:2.7.7:2.7.4:3.5.3 +2.6.1:5.4.2:2.2.1:2.7.8:2.6.1:2.1.2:4.1.1 +3.5.1:3.4.11:1.4.4:6.3.4:1.2.1:1.17.4:5.3.1:5.3.1:5.4.99 +2.7.6:3.1.1:2.1.1:1.7.2 +1.4.1:2.7.6:3.5.99 +4.3.1:2.1.1 +2.7.1:3.5.1:4.3.2:2.6.1:4.1.3:1.1.1 +2.7.1:2.2.1:3.1.1:2.3.1:2.7.7:4.1.2:1.1.1:6.3.4:2.7.6:6.3.5 +3.1.3:2.3.1:3.5.1:2.5.1:6.3.4 +5.4.2:2.7.7:1.2.1:2.1.1:1.2.4:3.5.1:1.4.3 +2.7.4:3.1.1:4.4.1:4.3.2:2.4.2 +4.1.2:4.1.2 +4.1.1:2.6.1:2.1.1:2.7.1 +2.6.1:1.2.1:2.4.2:5.4.2:2.7.2 +3.2.1:2.1.3:2.4.2:2.7.7:2.1.1:1.2.1 +1.2.1:2.7.1:4.1.1:2.7.1 +1.14.13:2.3.1:1.2.1 +4.2.1:6.3.4:2.3.3:4.1.1 +2.6.1:3.5.1:4.1.2 +1.2.1:2.6.1:2.3.1 +5.2.1:2.7.7:4.1.2:2.1.2:2.6.1:3.5.3:2.7.7:2.3.1:2.6.1:2.7.7:1.5.1:3.5.3:1.17.1 +3.5.3:1.17.4:2.7.1:4.2.1:2.6.1 +1.5.1:2.7.7 +3.1.3:1.2.1:6.3.3:4.2.1:2.3.3 +6.2.1:2.6.1:2.7.1:2.5.1:1.5.1 +3.1.3:6.3.2:2.1.1:4.1.1:2.6.1 +1.3.1:2.2.1:2.7.2:2.7.1:1.2.1:3.3.1:5.1.2:2.7.7:1.3.3:1.2.1:3.2.1:4.2.3:1.2.1 +2.4.2:2.3.1:3.2.1:2.1.2:1.1.1:1.2.1:2.1.1:4.3.1:3.5.3:1.1.1 +2.3.1:5.4.99:1.14.16:4.3.2:6.3.3:2.1.2:1.5.1:2.7.2:4.3.2 +3.4.13:2.4.2:2.5.1:2.1.3:2.1.3 +3.6.1:2.5.1:4.1.3:4.2.1:4.1.3:2.3.1 +2.6.1:1.1.1:4.1.3 +1.2.1:2.3.1:1.2.1:1.4.1:2.4.2:2.3.1:4.2.1:2.7.1 +2.7.2:4.1.1:1.4.1:4.2.1:1.3.1 +5.4.99:2.5.1:2.5.1 +4.3.1:4.1.3:1.2.1:2.4.2:2.3.3:1.2.1 +4.3.1:4.1.1:4.4.1 +2.7.1:4.2.1:1.4.3 +2.7.2:4.1.3:2.7.2:2.4.2:2.3.1:2.3.1:4.2.1 +1.13.12:2.7.4:1.1.1:6.3.5:3.2.2 +2.3.1:3.5.1:1.5.1 +6.3.4:5.4.99 +4.3.2:2.7.1:4.1.1:2.7.2 +2.7.2:2.7.2:2.6.1 +3.1.2:2.7.7:2.1.4:1.14.11:4.3.1:6.3.5:1.2.1:2.7.2 +3.1.3:4.2.1:2.7.4:1.4.1:2.6.1 +4.1.2:2.7.2:2.2.1:3.5.4:1.2.1:2.7.1:1.7.1:2.1.3:2.5.1:3.6.1:2.7.7 +2.1.2:3.2.1:4.2.1 +4.2.1:2.3.1:4.1.1:3.2.2:2.5.1 +4.2.1:1.4.1:2.7.7:1.5.1:2.5.1:4.3.1:4.1.1:2.4.2 +2.7.6:6.3.4:3.5.2:4.2.3:4.3.2:4.3.2:1.3.3:4.1.2 +1.1.1:1.2.4:2.3.1 +6.1.1:4.3.2:3.5.3:2.3.3:2.7.1:2.3.1:3.6.1:9.9.9:1.14.13:5.1.3:1.1.1:2.7.1 +3.4.11:4.2.1:3.5.3:1.7.2:3.5.3 +2.3.1:4.2.1:2.4.2:3.1.3 +2.3.1:1.5.1:2.5.1 +1.2.1:3.5.3:3.5.1 +6.3.4:4.2.1:1.1.1:1.1.1:1.5.1 +2.3.1:2.6.1:6.3.4:1.5.1 +2.7.1:4.3.1:5.4.99:3.6.1:2.7.2:1.2.1:6.3.5 +4.2.1:1.1.1:4.2.1:3.6.1:2.5.1 +4.2.1:2.6.1:2.6.1 +2.7.4:4.1.1:2.3.1 +6.3.4:2.7.1:1.5.1:4.1.3:2.7.8:2.1.1:6.2.1:4.2.3:6.3.2:4.2.1:2.7.2 +3.1.3:2.7.2:2.7.4:1.1.99:1.1.2:5.3.1:1.4.1:2.7.1 +3.4.11:1.1.1:2.7.1:5.4.99:2.3.1:1.2.1 +1.14.13:1.5.1:6.3.4:2.7.4 +1.1.2:2.7.7:4.2.1:3.2.1 +1.3.99:3.4.13:6.3.3 +2.1.2:2.7.1:2.7.1 +1.8.1:3.5.1:2.5.1 +1.3.3:3.5.1:2.7.7:2.7.9 +2.8.1:4.4.1:6.3.4 +2.7.7:1.2.1:2.3.1:2.1.3:4.3.2 +4.2.1:5.4.99:2.7.2 +4.3.1:2.1.1:1.2.4 +2.6.1:1.1.1:4.2.1:6.4.1 +3.5.3:4.2.1:2.5.1:2.3.1:2.3.1:4.6.1:6.3.3 +4.1.1:1.1.5:4.3.2:2.5.1 +1.13.11:2.7.1:4.3.2:4.1.1:2.1.2:6.3.4:1.2.1:6.3.2:4.4.1:4.1.1:4.3.1:6.4.1 +4.2.1:3.5.1:1.1.1:2.7.2:2.4.2 +2.1.1:2.7.2 +2.3.1:1.5.1:2.2.1:2.7.1:1.2.1:6.3.4 +2.7.7:3.6.1:2.5.1:2.5.1:2.7.2:1.1.1 +2.5.1:1.1.1:2.7.7:3.5.1:2.1.2:2.7.1:1.1.1 +1.1.1:4.1.1:2.3.1:2.4.1 +2.1.3:2.7.7:2.7.1:1.2.1:4.3.1:2.3.1:1.4.1:4.4.1:2.3.1:2.1.3:5.3.1:5.4.99 +2.7.1:3.1.7:1.1.1 +4.1.1:5.4.2 +3.6.1:1.3.3:2.6.1:4.1.1 +1.1.1:4.3.2:6.3.3:2.7.7:1.13.11:1.17.4:1.3.99:5.4.99 +4.1.1:3.1.3:4.1.1:4.2.3:6.3.4 +1.13.11:4.1.2:2.6.1:2.1.2:3.5.3:4.1.1:3.5.1:4.1.3:1.5.1 +2.6.1:6.3.5:6.2.1 +1.1.1:6.3.4:2.5.1:6.3.4:4.1.1:6.3.3:5.1.3:5.1.1:1.4.1:2.5.1:2.4.2 +1.2.7:2.7.2:2.7.2:1.4.1:3.6.1:1.13.11 +2.6.1:4.3.2:2.4.2:2.7.4:1.2.1:3.1.3:2.5.1 +2.7.1:2.7.1 +1.5.99:1.1.1:4.2.1:6.4.1:5.4.99:2.4.2 +1.1.1:3.5.1:4.4.1:4.1.1:4.2.3:6.2.1:4.2.1 +3.5.3:2.7.1:4.3.2 +2.7.7:4.1.1:1.17.1:2.3.1:6.3.4 +2.7.7:4.1.1:6.3.2:1.4.1:2.3.1:3.1.3 +2.4.2:3.6.1:6.3.2 +3.8.1:2.7.1:2.7.7 +3.6.1:2.5.1:2.2.1:2.3.3:1.1.1:1.2.1 +2.3.1:6.3.5:2.1.1:1.2.1:1.2.1:2.5.1:4.3.2 +6.3.2:1.1.1:1.3.99:6.4.1 +2.6.1:4.1.1:2.6.1:2.4.2:9.9.9 +6.3.5:2.7.2:6.3.4:4.1.1:4.2.1:1.7.2 +2.7.1:2.5.1:4.3.2:4.2.- +3.1.3:4.2.1:6.3.1:1.1.1:2.3.1:1.2.4:6.3.5 +2.3.1:4.1.1:4.2.3:6.3.4:2.7.1:1.3.99 +1.5.1:4.3.2:2.7.4:4.1.1:3.5.1:2.7.2 +3.1.3:1.1.1:6.3.5:3.1.3:5.4.2:2.3.1:4.4.1 +2.7.7:2.1.3:2.7.7:2.3.1:4.4.1:2.5.1 +2.5.1:2.7.1:2.7.8:3.2.2:4.2.1 +6.3.5:1.8.1 +2.5.1:6.3.2:6.3.5 +2.6.1:2.5.1 +2.7.1:2.4.2:4.3.2:4.4.1:2.5.1 +1.2.1:4.1.1:1.1.1:2.5.1:4.1.1:1.1.1:1.2.1:6.3.5:5.1.1:2.7.8:1.1.1 +5.4.99:2.7.2:2.7.1:5.3.1:2.7.1:2.3.1:3.5.1 +1.2.1:4.4.1:3.5.1 +6.3.4:1.2.4:1.2.1:4.4.1 +2.7.2:1.2.1:4.1.1:2.7.1 +4.1.1:4.1.1:1.1.1 +1.1.1:3.1.4:3.5.1:1.1.5 +2.7.2:4.3.1:1.1.1 +3.6.1:2.3.1:1.4.3 +5.1.3:2.6.1:6.3.2:2.7.2 +2.3.1:2.5.1:3.1.4:2.8.3:4.1.2:2.3.1:1.1.1 +2.5.1:6.4.1:4.1.1:2.6.1:3.5.1:1.5.1 +2.3.1:3.5.1 +2.7.1:2.7.1:3.1.3:2.5.1:2.3.1:3.6.1:5.3.3 +2.7.2:2.3.1:2.1.1 +6.3.5:6.3.4:2.4.2:2.3.1:2.4.2:2.7.1:2.6.1 +2.7.6:2.3.1:3.5.3:2.1.2 +1.17.1:2.5.1:4.2.1 +2.7.1:1.1.1:2.3.1:2.4.2:4.1.1:5.4.99:2.1.3 +5.4.2:2.5.1:1.2.1:1.5.1:2.1.2:2.3.1 +3.4.13:4.2.3:4.1.1:2.3.1 +2.6.1:2.3.1:6.1.1 +2.6.1:6.3.4:6.3.4:4.4.1:3.5.99:5.3.1:1.2.1:2.7.4 +2.3.1:1.17.4:1.17.1:3.5.1:3.6.1 +3.5.1:4.3.2:4.3.1:1.2.1:5.3.1:4.2.3:5.4.2 +1.1.1:4.2.1:6.3.4:6.3.2:4.2.1 +1.1.1:2.6.1:4.2.-:2.5.1:4.1.1 +2.7.4:3.5.1:1.5.1:2.3.3:1.5.1:1.5.99:4.3.2 +3.5.3:4.4.1:5.3.1:3.5.4:3.4.11:1.4.3:2.1.2:2.3.3:4.3.2:2.5.1:2.1.2:4.3.1 +2.2.1:9.9.9:2.1.3:1.1.1:3.4.13 +2.3.1:2.6.1:2.3.1:2.6.1:3.5.1:3.1.7:1.3.99:2.5.1:5.1.3:2.7.6:4.1.1:2.7.1:3.1.1 +4.3.2:2.7.1:2.1.1:2.5.1:1.1.1:1.1.3 +3.1.3:2.7.4:2.3.1 +2.5.1:6.3.3:6.3.2:4.1.2:2.3.3:2.1.1:1.1.1 +2.7.1:6.3.5 +2.4.1:6.2.1:3.6.1:6.3.4:2.7.7:4.3.2 +2.6.1:2.6.1:2.5.1:4.4.1 +2.7.7:1.1.1:2.7.7:2.3.1:2.5.1:2.3.1:2.3.1:2.3.1:2.7.6:1.2.1:4.3.2:4.3.1:2.7.1:1.1.3 +5.3.1:2.5.1:4.1.3:2.7.6:3.1.3:3.1.5 +4.2.1:2.1.4:5.4.2:4.3.2:2.7.1 +9.9.9:2.1.2:3.5.3 +3.1.4:4.2.1 +6.3.2:2.3.1:3.6.1:4.1.2:1.2.1:4.1.1:1.1.1:5.3.1 +2.7.2:3.1.4:2.7.1:2.7.7 +1.1.1:2.7.1:2.5.1:3.1.2:5.3.1:1.7.3:2.4.2 +2.7.2:2.7.4:2.5.1:4.3.1 +1.1.1:3.5.3:2.7.1:1.14.13:2.7.2:4.2.3:1.1.2:4.1.1:2.4.2:2.1.2:2.3.1:2.5.1 +4.2.3:2.6.1:4.1.1:4.2.3:2.3.1 +6.3.5:2.1.3:3.5.3 +2.7.1:2.6.1:2.7.8:2.1.3:5.1.2:6.3.2 +4.2.1:2.3.1:2.3.1:1.8.4 +2.3.1:2.3.1:6.3.4:2.7.7:6.3.4:3.5.3:1.1.1 +1.18.6:1.1.1:2.7.2:2.1.3:1.8.1 +2.7.1:3.2.2:2.3.1:5.3.1:9.9.9:2.7.2 +2.7.7:2.8.3:2.7.7:4.4.1:4.3.2:1.1.1:2.5.1:1.1.1 +2.5.1:2.1.1:1.14.13:6.3.4:1.5.1 +1.1.2:1.1.1:4.3.2:4.2.1:6.3.4 +2.3.1:1.7.2:1.3.1:1.2.1:3.1.1:2.7.2:1.1.1:6.3.5:4.2.1:2.4.1:2.3.1:2.3.1:2.1.3:3.5.1 +2.1.2:2.6.1:4.1.1 +2.3.3:4.2.3:1.4.3:2.1.1:2.7.7 +1.14.12:6.3.3:3.5.1 +1.1.2:4.1.1:4.2.1 +1.2.4:5.3.1:5.1.3:1.1.1 +4.1.2:2.3.1:1.2.1:1.1.1 +6.3.4:4.3.1 +5.4.3:2.7.7:2.7.1:4.2.1:4.4.1:2.1.2:3.5.2:3.1.3:6.2.1:1.1.1:6.3.1:3.5.3:1.17.1 +2.4.2:1.7.3:1.2.1 +6.3.5:2.5.1:1.5.1:4.3.1:2.7.8 +6.3.5:2.7.2:4.3.2:1.5.1 +1.7.99:2.4.2:5.3.3:4.2.1:6.1.1 +2.3.1:4.99.1:2.1.3 +2.7.1:4.2.1:2.7.4:3.5.1:2.5.1 +1.2.1:4.3.2:5.3.1 +2.4.1:1.1.1:3.1.3:1.5.3:2.3.3:3.1.3:6.3.5 +2.7.1:2.7.2:3.1.3:2.7.4:4.1.1 +2.6.1:2.7.7:1.7.1:4.2.3:1.14.- +2.1.2:9.9.9:2.7.8 +1.2.5:2.3.1:4.99.1 +2.7.1:2.3.1 +3.5.1:2.8.1:2.4.2:1.4.1 +2.7.7:5.3.1:2.7.7:4.1.1:4.1.1:5.3.1 +6.3.4:3.5.1:2.1.2:3.2.1:1.5.1:4.1.3:9.9.9 +2.1.2:1.1.1:3.5.1:4.1.1:4.4.1 +3.3.1:4.1.1:1.4.3:4.2.1 +1.1.1:5.4.99:1.4.4:2.7.2:3.5.1:4.2.1 +5.-.-:2.6.1:1.5.1:6.3.5:3.4.11 +1.1.1:1.5.1:1.5.1:5.1.3:2.2.1:3.6.1:1.2.1:3.1.2:3.5.3 +4.2.-:2.2.1:3.1.3:2.7.2:2.5.1:3.6.1:9.9.9:3.4.13 +2.7.2:2.7.6:2.3.3:3.2.1:2.5.1:3.5.3:2.6.1 +4.1.1:6.3.5:4.1.3:2.1.1:1.1.1:3.1.1:2.3.1:3.1.3:1.2.4:1.3.1:2.7.7:4.3.2:4.3.1:1.5.1:5.4.2 +3.5.3:4.2.1:1.5.1:2.7.4:4.3.2:6.3.5:3.1.3:2.3.1:6.3.2:2.5.1 +4.1.1:6.3.2:1.5.1:1.2.1:3.1.4:2.4.1:3.2.1 +4.3.1:3.5.1:5.3.1 +1.1.1:2.3.1:3.5.3:4.1.2:5.1.2:5.3.1:3.5.1:1.1.1:6.3.4:2.7.1 +5.4.99:2.7.9:5.4.2:5.3.1:2.7.7:4.2.3:3.1.3:4.1.1:4.1.1:2.5.1:1.5.1:5.1.3:2.7.1 +2.7.1:4.1.3:6.4.1:2.6.1 +3.2.1:5.4.99:2.7.1:2.7.2:6.3.4:2.3.1 +3.7.1:2.7.4:4.1.1:2.7.1:1.7.2 +4.1.1:1.5.1:4.2.1:2.5.1:3.5.1:1.4.3:2.7.2 +2.5.1:2.7.7:1.2.1:1.2.1:4.3.1:2.6.1 +4.3.1:2.6.1:3.5.3:6.3.2:3.5.4:6.3.2 +2.3.1:5.1.1:2.3.1:2.3.1:2.4.2:3.6.1 +5.1.3:2.7.2:4.1.2:1.17.1:5.3.1:1.-.-:3.5.1:4.1.1 +1.3.1:2.7.8 +5.4.2:3.1.7:1.5.1 +2.6.1:3.1.3:2.4.2:2.1.1:4.2.1:5.3.1 +2.7.4:4.4.1:3.1.4 +2.4.2:3.5.2:4.1.1:2.4.2:4.4.1 +4.3.1:2.6.1:3.1.3:4.2.1:2.3.1:2.5.1:4.2.3:2.1.2:1.1.1 +2.7.2:5.3.1:4.1.2:2.7.7 +4.2.1:2.7.2:1.7.2 +1.5.1:3.1.3:2.3.3:2.3.1:1.1.1 +4.4.1:1.2.1:1.1.1:2.3.3:4.2.1:2.6.1:2.5.1:1.2.1:4.1.1 +1.2.4:1.1.1:3.8.1:6.3.5:2.7.1:4.1.2:2.1.2 +1.5.1:6.3.4:5.3.1:2.7.6:3.1.7:3.4.11 +2.7.8:2.7.7:1.4.1 +2.3.1:3.1.3:3.5.1:1.2.7:6.3.4 +6.3.2:2.3.1:1.14.13:2.7.8:5.4.3 +2.3.1:2.1.2:5.3.1:4.4.1:4.3.1 +4.2.1:2.1.1:2.3.1:4.3.2:3.5.1:5.3.1:2.1.1 +4.1.1:5.4.2:3.1.3:5.3.1:6.3.3:3.5.1:3.6.1 +4.1.1:3.5.5 +6.3.4:6.3.3:1.1.1:4.1.1:1.4.1:1.2.1 +2.3.1:4.3.2:4.3.2:3.5.1:2.5.1:2.6.1:4.1.2:2.7.1:6.3.4:6.3.2 +2.4.2:3.1.3:1.4.1:2.4.2:2.2.1 +2.7.4:1.3.1:4.1.1:2.1.1:5.1.2:2.7.1:3.5.1:4.3.1:2.7.1 +6.3.5:4.1.1:2.1.1:6.3.4:3.5.3 +2.3.1:4.1.1 +3.5.1:6.3.3:5.4.99:5.3.1:2.7.1:2.5.1:5.4.2:6.3.4:1.1.1 +2.3.1:1.4.1:2.4.2:2.7.1:6.2.1:1.3.1 +2.4.2:4.3.1:2.6.1:1.2.1 +1.5.99:4.2.1:2.4.1:1.1.1:2.5.1:2.7.7 +4.3.2:2.4.2:2.7.1:4.1.1:4.3.1:6.3.4:2.7.8:2.7.1:1.1.1 +3.1.3:2.7.7:1.13.11:5.4.99 +4.1.2:2.6.1:1.4.1:4.1.2:6.3.5 +6.3.2:2.6.1:4.4.1 +2.6.1:4.3.1:2.5.1:2.1.1 +4.2.3:4.1.1:2.7.4:2.3.1:2.6.1:3.3.1:2.3.1 +6.2.1:1.3.1:3.5.3:2.4.2:2.6.1:3.5.3:6.3.2 +4.2.1:2.7.7:5.4.2:2.5.1:6.3.2:4.1.1 +2.3.1:3.6.1 +6.2.1:1.1.1:2.7.1 +2.3.1:2.3.1:1.14.16:3.6.1 +1.2.4:3.1.3:2.7.1:3.1.4:4.1.1:2.6.1:3.4.13:1.3.1:1.8.1 +3.1.3:2.7.4:2.1.3 +4.4.1:2.7.1:3.5.1:2.6.1 +4.2.1:4.3.1:3.5.1:3.5.1:1.1.5:1.3.3 +2.7.7:4.2.1:2.5.1:5.3.1 +5.4.2:4.2.3:2.5.1:2.7.4:2.1.1 +5.1.2:4.3.2:2.7.7 +4.2.3:5.4.2:2.4.2 +2.7.2:2.5.1 +6.3.4:2.5.1 +4.2.3:3.5.3:2.7.2:1.4.1:1.2.4:4.2.3:2.7.2 +2.6.1:2.7.1:2.1.3 +2.7.2:1.18.6:1.8.1:4.1.2:4.2.1 +2.7.2:5.4.3 +2.7.7:1.2.1:4.2.3 +2.3.1:2.6.1:2.7.2 +2.1.1:6.3.4:6.3.3:4.2.3 +2.7.9:6.3.2:4.3.2:3.1.4:6.3.2:2.3.1:2.3.1:2.7.1:4.3.1:5.4.99 +2.7.1:1.5.1:2.7.1:4.1.1:1.1.1:4.1.1 +6.3.3:6.2.1:4.1.1:1.5.1 +4.1.2:2.6.1:2.4.1:2.6.1:3.1.3:6.3.5:1.2.5:2.1.1 +1.13.11:4.2.1:2.5.1:4.1.3:2.7.7:1.4.1:1.1.1:2.5.1:3.5.1:4.4.1 +3.5.1:3.5.3:3.5.1:2.6.1:1.14.13:4.1.1 +6.3.5:5.4.2:2.7.4 +2.4.2:1.1.1:6.3.2:2.7.7 +2.3.1:2.5.1:1.1.1 +3.5.5:4.1.1:4.3.2:4.1.1:6.3.3:2.7.1:2.3.1:2.3.1:1.1.1:3.6.1:3.1.3:2.6.1 +2.4.2:4.1.2:2.3.2:3.6.1 +4.4.1:4.1.3:4.4.1:3.1.3:5.4.2:3.5.2:5.-.-:4.1.1:2.1.3:1.1.1 +4.3.1:3.5.2:2.4.2 +4.1.3:6.4.1:2.1.1:2.7.6:2.7.2 +1.2.1:2.7.2:1.2.4:4.1.3:3.5.2:6.3.4:4.3.2:1.2.4:4.1.1:2.3.1:1.1.1:4.3.1:4.1.1 +3.5.3:5.3.1:3.5.1 +2.7.1:1.2.1:2.1.1:1.3.99:6.3.4:3.5.4:6.3.5 +4.1.1:2.4.2:2.6.1:2.7.2 +5.3.1:1.1.1:6.3.4:5.4.2:5.3.1:6.3.2:2.7.2:3.5.1:2.7.2:2.7.4:2.7.7 +6.3.1:5.3.1:2.3.1 +3.1.3:2.7.2:4.3.2:2.5.1 +2.3.1:5.4.2:2.7.1:4.1.3:2.7.1 +2.6.1:1.2.1:1.1.1:2.7.4:1.5.1:3.3.1:2.5.1:5.1.1 +1.5.1:2.3.1:1.1.1 +2.6.1:4.1.1:6.3.4:1.3.1:5.1.2:2.7.7:3.1.4:2.7.7:1.14.13:9.9.9:3.6.1:2.7.1 +4.2.1:6.4.1:1.11.1:3.2.2:4.3.2 +2.7.1:4.1.2:3.5.1:2.7.2:6.3.2:2.6.1 +2.7.1:4.2.1 +3.5.1:1.2.1:1.5.1:4.3.1:2.7.6 +5.4.99:6.3.4:5.3.1:1.4.1 +4.1.2:2.3.1:2.3.1:1.1.1:3.1.1 +4.1.1:2.3.1:2.7.8:2.7.2:1.3.3 +6.3.4:6.3.1:2.7.7:6.3.5:2.5.1:4.2.1 +1.5.1:2.4.1:1.1.1 +2.3.1:3.3.1:1.13.11:3.5.1:2.1.1:5.4.99:2.4.2:2.6.1:4.2.1:1.3.1 +2.6.1:2.1.2:5.4.2:5.1.3:3.5.1 +4.2.1:2.1.4:4.1.3 +1.5.1:1.4.3:1.1.1:4.1.2 +2.4.1:4.3.1:2.7.4:5.4.2:4.1.2:1.5.1:2.6.1:1.5.1:2.7.7:6.3.2 +2.3.1:2.3.1:2.1.1 +4.6.1:1.5.1:2.3.1:3.5.3:2.1.2:2.2.1:3.1.3:2.4.1:2.4.2:5.3.1 +2.5.1:2.5.1:4.1.2:2.3.3:5.3.1 +4.1.3:2.7.4:2.7.1 +4.2.1:4.1.1:1.7.99:2.3.1:5.3.1:3.6.1 +1.11.1:4.1.1:1.14.13 +3.5.1:2.3.1:2.7.1:2.3.1:3.5.2:1.5.3:2.6.1:2.7.1:2.3.3:4.3.2 +2.7.7:2.5.1:2.7.1 +2.6.1:2.5.1:2.7.8:6.4.1:6.3.3 +4.1.1:5.4.2:3.2.1:3.1.3:4.3.2:3.4.11:3.1.3:2.6.1:6.4.1 +2.3.1:6.3.5:2.6.1 +5.4.2:1.2.1:4.1.1:4.1.2 +2.1.2:2.4.2:4.1.1:2.3.3:2.6.1 +5.3.1:1.3.99:2.7.2:6.3.4 +2.7.7:2.7.2:3.1.1 +4.3.2:2.7.1:2.3.2:4.2.1:2.7.1:2.1.2:9.9.9:3.1.4 +4.2.3:2.6.1:2.6.1:6.3.1:2.7.4:4.1.3:3.1.3:2.7.1:2.6.1:1.1.1:2.3.3:2.4.1:2.7.2:2.7.4 +5.3.1:3.5.2:3.5.1 +5.4.2:4.3.1:2.3.1:2.8.1:3.1.3:1.4.1:2.7.7 +2.7.1:4.2.3:4.1.2 +2.1.3:4.2.3:1.2.1:3.6.1:5.2.1:3.6.1:2.7.2 +2.7.4:3.6.1:1.3.3:4.1.2:3.6.1:2.7.1:4.3.2 +2.8.1:2.3.1:1.5.1:2.4.1:3.1.2 +2.7.2:5.3.1:1.8.1:2.3.3:6.3.5:4.3.2 +2.4.2:4.2.1:2.7.4:4.3.1:3.2.1 +2.5.1:5.3.1:1.5.1:2.1.1:1.2.7:3.1.3:4.2.1:2.3.1:2.1.1:4.2.3:3.5.3:1.1.5:4.4.1 +1.2.4:2.4.2:6.3.4:6.3.4 +3.1.3:6.4.1 +2.6.1:4.2.1:4.3.2:2.7.2 +4.4.1:3.5.4:4.1.1:4.1.1 +5.1.3:3.5.2:6.3.4:1.3.3 +2.7.4:3.5.1:5.3.1 +3.5.1:3.5.3:1.2.1:2.7.4:4.1.1:6.3.5:2.4.1 +4.1.1:1.8.1:4.2.1:2.7.2:4.1.3:1.1.1 +3.1.3:6.3.2:6.2.1:3.5.3:2.7.1:2.7.7 +2.7.7:3.1.7:4.1.1:4.2.1:6.3.4 +3.1.7:1.3.99:3.1.4 +6.3.5:5.3.1:2.7.1:1.1.1:5.4.99:2.7.1 +4.1.1:6.3.4:1.2.4:2.6.1:6.3.4 +1.1.1:6.3.3 +6.4.1:4.1.1:2.6.1:4.1.3:2.4.2 +2.3.1:3.5.4:2.5.1 +6.3.5:2.7.6:6.2.1:2.7.1:4.2.1:3.5.1 +2.1.1:4.2.1:1.2.5:6.3.2:1.1.1:3.1.3:1.1.1:1.2.1 +2.7.1:4.1.1:1.7.2:1.1.1:1.3.99:5.4.2:2.3.1:1.5.99:2.-.-:3.5.1:4.1.1 +2.5.1:4.4.1:6.3.4:2.7.2 +3.1.2:1.2.1:1.2.1 +4.1.2:2.3.1:2.1.3 +1.1.1:6.3.4:2.3.1:2.7.2:3.5.4:5.3.1 +2.7.1:1.4.1:6.3.2 +4.2.1:3.1.2:4.2.1:3.1.3:2.5.1 +2.6.1:1.4.3:4.3.2:1.2.1:1.5.99 +4.1.3:2.7.1:3.5.2:2.5.1:1.1.1:4.2.1:6.3.2 +4.1.2:1.2.1:2.1.2:1.14.-:4.2.1 +1.5.1:5.1.1:2.4.1:2.6.1:4.1.1 +6.3.4:1.1.1:2.7.1:1.5.99:1.3.3 +4.1.3:2.8.3:3.6.1:5.3.1:2.3.1:4.4.1 +2.3.1:4.3.2 +2.7.6:2.7.1:2.7.1:1.1.1:1.7.2 +3.5.3:2.6.1:2.1.3:2.1.1:3.1.5 +6.3.2:1.3.3:1.5.1:1.1.1:2.3.1 +4.1.1:2.5.1:3.2.1:2.2.1:2.7.1:3.2.1:1.1.1 +2.5.1:1.1.1:1.1.1:5.3.1 +4.1.2:2.4.2 +2.7.2:5.1.3:2.1.2:1.2.1:4.1.2 +2.6.1:3.2.1:3.1.4 +2.7.1:4.2.-:6.3.4:4.1.2 +4.1.1:2.7.4:1.1.1:1.1.1:2.1.4 +2.4.2:1.1.1:2.7.8:1.1.1 +2.7.4:1.7.99:4.1.2:2.6.1:6.3.4:1.14.16 +3.2.1:4.2.3:4.4.1:1.1.1:3.2.1:6.3.5:2.7.7:2.3.1 +4.2.1:5.1.3:4.1.1 +2.7.7:2.6.1:6.3.3 +2.7.1:4.3.1:3.5.4:2.5.1:1.2.1:1.5.1:1.2.1:5.3.1 +3.4.13:2.7.1:9.9.9:3.5.1 +2.7.1:1.5.1 +2.4.2:6.3.2 +1.2.4:2.5.1:1.2.1 +2.5.1:2.6.1:2.6.1:2.3.1 +2.3.1:2.1.2:6.3.3:2.7.7:3.1.1 +4.1.1:4.3.1:3.6.1 +2.7.1:6.3.4:4.2.1:1.2.1:2.3.3:1.2.4 +1.4.4:5.4.99:1.4.99:2.2.1 +4.6.1:2.2.1 +6.3.4:1.2.1 +4.1.3:6.3.2:2.5.1:9.9.9:1.2.1:1.5.99:2.3.1 +4.1.1:2.1.1:2.6.1:2.5.1:3.5.1:4.2.1 +2.7.1:4.1.1:3.5.1:2.7.1 +2.7.2:5.4.99:2.6.1:2.3.1 +9.9.9:2.7.1:1.3.3:1.5.1:4.1.1 +2.6.1:4.1.2:4.2.1:3.5.1:2.7.4:5.4.99 +6.3.1:2.7.2:3.6.1:6.3.4:4.2.1:6.2.1:2.3.1:1.1.1:3.5.1 +2.7.2:1.1.1:2.7.8:2.5.1 +2.7.1:2.1.1:4.3.1:4.1.2 +2.3.1:2.1.3:2.7.2 +3.5.1:5.4.99:3.5.1:6.3.2:3.5.1:3.1.3:4.1.1 +6.3.5:4.2.1:2.6.1:5.3.1:6.3.4 +2.6.1:4.3.1:1.1.1:2.3.1:3.1.4:1.1.1 +6.4.1:2.3.3:1.3.99:6.4.1:1.1.1:6.3.2:4.2.1:1.17.4:4.2.1:2.3.3:4.1.1 +5.4.99:2.7.8:1.2.4:3.1.4 +2.7.2:2.1.1:1.3.1:2.1.2:2.6.1 +4.1.2:6.3.3:2.7.1 +2.7.7:1.4.1:2.7.7:1.4.3:4.3.1:4.4.1 +1.5.1:6.3.4:3.1.1:4.1.3 +6.3.2:2.1.2:2.6.1:4.1.2:4.1.3:2.7.1 +3.1.3:3.5.4:4.1.1:2.5.1:1.1.1 +2.7.4:4.3.1:2.5.1 +3.1.1:6.3.3:1.2.5:2.1.1:3.5.4:2.3.1:6.3.5:2.7.4:4.4.1:3.6.1:3.4.11:3.3.1:3.1.2:2.7.1 +2.3.1:4.1.2:2.5.1:6.3.3 +2.6.1:1.1.-:3.5.3:2.7.2 +1.2.1:3.5.1:4.1.1 +6.3.2:2.7.1:2.5.1:2.7.1:2.7.4:2.7.2:4.3.2:2.7.2 +2.7.7:5.3.1:6.3.5 +2.5.1:5.4.2:2.3.1:4.3.2:4.1.3:2.7.1:4.1.3 +1.5.1:2.6.1:3.5.1:2.3.1:4.4.1:2.7.1:2.5.1 +1.2.4:4.1.1:1.5.1:3.2.1:6.3.4:4.2.3 +2.1.1:2.1.2:1.5.1 +1.97.1:4.2.3:1.2.4:1.5.1:2.7.1:1.1.1:4.2.1:2.6.1:2.5.1:2.7.4:2.3.1 +1.2.1:2.5.1:3.1.4:4.3.1:2.1.1 +2.3.3:6.3.2:4.99.1:1.5.1 +1.1.1:1.4.4:4.2.1:3.5.5:2.3.1:4.2.1:5.1.3 +2.6.1:3.1.1:1.1.1:2.8.1:2.7.4:6.3.4 +5.1.3:2.6.1:2.1.1:6.3.4:2.7.7:2.7.1:2.3.1:6.3.4:4.1.1:5.1.1:5.4.99 +4.1.2:1.2.1:3.1.3:2.7.2:2.6.1 +4.2.3:2.7.1:2.5.1:3.5.1:2.3.1 +3.5.1:4.2.1:1.4.1:5.4.99:6.3.4:6.3.5:6.3.3:3.5.3:2.7.1 +2.3.1:2.7.7:5.1.3:4.2.1:2.7.7:2.7.1 +4.1.1:1.3.1:3.1.3:4.3.2 +5.1.3:4.2.3:2.7.1 +6.3.4:1.2.1:2.6.1:2.6.1:1.2.4:3.2.1:2.3.1:1.1.1:1.1.1 +1.5.1:2.1.3:3.5.4:2.4.2:2.5.1:2.6.1 +2.1.2:1.2.4:4.1.2:2.3.1:2.7.1 +4.1.3:2.7.2:2.5.1:1.2.1:4.1.2 +2.7.2:2.1.3:2.5.1:6.2.1:2.3.1:2.3.1:4.3.2:3.1.4:6.3.4:6.3.2 +2.3.1:6.3.3:2.4.2 +2.5.1:1.1.1:3.2.1:5.4.2:4.1.2:1.4.1:2.7.1:2.5.1 +2.7.2:4.1.1:2.6.1:2.5.1:3.5.1 +4.1.1:4.4.1:2.7.1:2.6.1:4.3.2 +4.1.2:3.5.4:4.2.3:2.7.1 +6.3.4:5.4.99:5.4.99:1.1.1 +5.4.99:2.7.8:3.5.2:1.4.1:1.1.3:1.2.1:4.1.1 +1.1.1:6.3.1:2.3.1 +4.1.1:2.7.1:4.3.2:1.2.4:2.7.1:2.7.6:4.1.2:2.4.1 +2.1.3:4.1.1:3.1.3 +2.7.1:4.1.1:4.1.1 +2.5.1:4.2.-:3.5.1:1.4.99:1.4.3:1.2.1:3.7.1:1.2.1:2.1.3 +1.1.1:4.2.1:6.2.1:6.3.5 +1.3.3:2.7.2:6.3.1:2.7.7:1.4.1:5.4.99 +1.2.1:2.7.2:3.1.4 +3.4.13:4.2.3:4.2.1:5.3.1:2.1.3 +1.2.1:2.5.1:3.5.1 +4.3.1:4.4.1:2.1.2:4.2.1:6.2.1:4.4.1:6.3.4:4.2.3 +6.1.1:4.2.3:1.1.1:2.3.1 +2.5.1:4.2.1:3.6.1:2.7.1:5.3.1 +1.2.1:3.1.1:1.8.4:4.1.2:5.4.2:4.1.1:1.1.1:2.3.3:4.1.1:3.5.1:1.5.1:3.4.11:4.1.2 +5.1.3:4.2.1:2.5.1:3.5.1:2.3.1:3.5.3 +2.4.1:6.3.5:1.2.1:4.1.99:4.1.1:6.4.1:6.3.4:1.17.4 +3.6.1:5.4.99 +2.2.1:6.3.2:1.4.3:2.6.1:2.3.1 +2.3.1:1.1.1:2.7.2:1.8.7:2.3.3:2.7.2:2.7.2:4.2.1:3.5.1:2.3.1:3.5.4 +2.7.4:2.6.1:2.3.1:2.3.1:2.7.1:2.3.1:1.2.1 +2.6.1:1.2.1:1.1.1 +6.3.2:6.3.4:2.1.1:1.2.1 +2.3.1:5.3.1:5.4.2:4.1.1:2.1.1:2.7.1 +6.3.3:2.4.2 +4.2.1:4.3.2:4.1.2:2.6.1:4.2.1 +1.1.1:4.3.1:2.1.3:2.3.1:3.1.3:4.1.1:2.1.2:2.1.2:1.2.1:1.5.1 +2.1.3:2.7.4:2.6.1:3.5.3:1.2.4:4.1.1:2.5.1:2.4.2 +4.2.1:2.7.2:2.3.1:2.3.3 +2.7.8:4.4.1:1.5.1 +4.1.2:2.7.1:3.6.1:2.7.1:2.6.1 +1.14.13:3.1.4:2.6.1:3.6.1 +4.3.2:6.3.4:2.7.7 +4.3.1:2.7.7:3.1.3:4.1.1:1.5.1 +6.3.4:1.2.1:2.7.1:6.3.4:2.3.3:4.1.2 +2.7.1:4.1.2:2.7.1:1.2.1:1.1.1 +2.5.1:6.3.4:2.6.1:2.7.7:1.1.1:3.1.3:2.5.1 +4.2.1:3.5.2:3.5.3:4.2.1 +1.2.1:3.5.1:3.6.1:4.3.2 +1.2.1:2.4.2 +2.7.1:2.7.2:5.1.3:2.4.1:3.1.3:3.2.1 +3.5.1:4.1.2:4.1.1 +2.7.1:2.3.1:1.1.5 +2.3.1:4.1.1 +3.1.3:3.5.1 +2.4.2:1.1.1:6.3.4:1.2.1:4.1.1:9.9.9:2.6.1:3.5.1:6.3.2 +2.7.7:5.4.2:6.3.4:1.3.3:2.6.1 +6.3.2:3.6.1:4.3.1:1.17.4:1.1.1:1.1.1:3.1.3:6.3.2:2.4.2 +3.4.11:2.3.1:3.1.3:2.3.1:6.3.4:2.7.7 +1.1.1:2.7.2:2.6.1:2.7.7 +2.7.1:6.3.5:4.1.3:3.5.3:4.4.1 +2.3.1:2.3.1:1.5.99:4.4.1:2.7.1:6.3.5 +4.1.1:3.2.1:6.3.5 +3.5.3:2.1.2:2.3.1:2.1.3:4.1.3:1.3.3:5.4.99 +2.7.1:6.3.4:2.1.3:4.1.1:1.2.1:1.2.1:4.2.3:2.7.9 +5.3.1:2.3.1:2.7.2:9.9.9:2.5.1:6.3.2:1.5.1:4.1.99:3.6.1 +1.1.1:1.4.1:2.7.1:4.2.1:5.4.2:6.3.3 +4.3.2:2.6.1 +3.6.1:3.2.1:2.3.1:5.3.1:3.5.1 +1.2.1:2.7.1:2.7.2:1.2.1 +6.2.1:1.4.4:4.1.3:3.2.1:4.2.1:6.2.1 +5.3.1:2.1.1:6.2.1 +1.2.4:2.7.2:2.7.4:2.6.1:1.4.1:2.1.2:4.2.1:4.2.-:1.1.5:1.2.1 +3.1.3:1.5.99:3.5.1:1.2.1 +2.6.1:2.4.2 +4.2.1:4.3.1:2.7.1:4.2.-:2.7.7:4.4.1:4.3.2:1.2.1:1.1.1:1.3.1:4.4.1:2.7.1 +2.1.2:2.7.4:1.2.1:1.5.1 +1.4.1:2.5.1:2.3.1:2.1.4 +6.3.4:3.5.3:1.2.1:2.3.3 +4.4.1:4.2.1:5.4.2 +1.14.12:3.5.1:6.3.1:4.1.3 +4.1.1:2.7.6:3.6.1 +2.3.1:3.1.3:1.17.4:1.1.1:1.14.13 +2.4.2:1.5.99:1.1.1 +1.2.4:1.17.4:4.2.3 +3.5.1:1.1.1:2.7.1:2.3.1:1.1.1:6.3.1:2.7.1:2.3.1:2.7.4 +3.4.11:3.5.1 +2.7.1:4.1.3:1.4.1:6.1.1:3.2.1:1.2.99 +1.2.1:2.6.1:1.14.13:2.7.1:2.3.1:6.3.2:2.7.1:2.6.1 +3.5.3:2.1.1:2.7.7:4.2.3:5.1.1:2.3.3:1.17.4 +1.17.4:1.4.1:1.1.1 +2.4.2:2.3.1:2.1.3:2.5.1:6.3.1 +1.5.1:6.3.4:2.3.1:6.3.2:2.7.4:2.5.1:1.1.1:3.2.1:2.8.1:3.4.13:2.1.2:2.3.1 +2.6.1:1.2.1 +3.6.1:4.1.1:2.1.2:4.2.3:1.17.4 +3.4.11:4.4.1:1.14.13:1.5.1:2.4.1:4.3.1:3.1.1 +2.7.6:2.5.1:4.1.3:1.1.5:2.3.3 +1.14.13:2.6.1:4.3.1:2.4.2 +2.3.1:4.1.1 +4.1.1:4.3.1:1.5.1:2.1.2:2.7.1:2.3.1 +2.7.4:1.17.1:2.5.1:2.5.1:1.5.99:2.1.3 +1.2.5:6.3.2:2.1.2:1.1.5:2.3.1:2.5.1 +2.6.1:2.7.2:5.1.3:6.3.4 +4.99.1:2.5.1:2.3.1:2.7.1:6.3.4 +1.4.1:1.4.4:2.3.1 +4.1.1:6.3.1:4.1.3 +3.5.1:4.2.-:1.4.1:2.1.1:1.1.1 +4.1.1:2.3.1:2.1.3:2.1.3:1.3.1:4.1.1:4.3.1:5.4.99:4.1.2:4.1.3:4.2.1:2.7.1:3.1.3 +1.7.1:2.7.8:3.5.1:5.3.1:5.4.2:1.1.1 +5.4.2:3.2.2:1.3.99:2.3.1:3.1.3:6.3.1 +6.3.4:3.6.1:4.1.2:4.1.2:2.7.7:6.3.1:1.5.1:2.7.2:5.3.1:6.2.1:6.3.4:6.4.1:2.5.1 +4.3.2:1.5.1:2.3.3:1.1.1:6.3.3:2.1.2:2.6.1:2.1.2:6.3.4 +4.1.1:2.7.7:6.3.3:1.2.1:1.7.2:3.2.2 +2.3.1:1.1.1:2.7.7:4.2.3 +4.1.3:4.3.1:4.1.1:2.3.1:3.2.2 +2.3.1:6.1.1:4.3.1:2.7.7:2.6.1:2.7.2 +2.7.7:4.1.2:2.5.1:4.2.1 +1.3.3:3.1.3:2.7.1:5.4.99:2.7.7 +2.1.2:2.7.7:6.3.4:3.1.2 +4.1.3:4.2.1:6.3.4 +2.1.1:4.3.1:5.3.1:2.1.3:5.3.1 +2.1.1:1.4.1:2.3.1:4.4.1:4.2.1 +1.3.99:3.1.3:4.1.1:2.7.4 +5.4.2:2.6.1:3.5.1:2.7.2:2.7.1:4.3.1:6.3.4:5.4.99:2.7.1:1.1.1:3.6.1:2.1.2:5.1.3 +1.2.1:2.1.2:2.6.1:6.3.4:1.1.1:3.1.3 +3.5.1:3.4.13:6.3.4:1.1.1 +1.1.2:2.5.1 +2.1.3:1.4.1:4.2.1:5.3.1:3.6.1:2.6.1:5.4.99 +2.5.1:5.4.99:3.5.2:6.4.1 +6.3.1:6.3.2:1.1.1 +1.1.1:6.3.1:5.1.2 +1.5.1:2.5.1:1.2.1:2.7.4:6.3.5 +2.8.1:2.7.8:1.5.99:6.3.4 +1.1.1:6.3.4:2.6.1 +3.5.3:2.7.6:2.4.2:2.3.1:2.7.1 +3.5.1:6.2.1:1.7.2 +6.2.1:3.5.1:2.7.1:2.7.2:6.3.4:5.1.3:4.3.2:3.5.4:3.5.3:3.5.3:2.7.2:2.6.1:2.7.4 +6.6.1:2.7.2:4.1.1 +5.1.3:1.3.1:1.1.1:4.1.1:6.3.2:1.5.99:1.1.1 +2.3.1:4.1.2:3.1.1 +1.3.3:2.6.1:4.1.2:6.3.4:3.4.11 +4.2.3:3.1.4 +2.7.1:4.3.2:4.1.3:2.5.1 +4.1.3:1.8.1:2.4.1:4.1.2 +2.7.7:3.4.13:3.5.1:3.5.1 +2.1.1:6.3.5:3.5.1:6.3.2:2.1.2:1.1.1:1.4.99:3.6.1 +5.3.1:3.5.1:4.1.1:1.1.1:6.3.2:1.3.3:1.5.1 +3.1.3:3.1.2:2.6.1:6.4.1:4.1.1:2.7.6 +4.1.3:1.4.1 +2.4.2:1.2.1:4.2.1:4.1.1:3.2.1:1.4.3 +2.1.3:5.3.1:1.4.1 +1.3.3:3.2.1:3.3.1:4.2.1:1.1.1 +1.1.1:6.3.4:2.7.1:3.1.3:6.4.1 +4.2.3:2.7.1:5.3.1:3.6.1:2.3.1 +4.4.1:4.1.3:2.7.7:2.1.3:1.4.3:2.6.1:3.5.2:4.1.1:2.7.7:1.5.99 +2.4.2:2.6.1:1.3.99:5.4.2:3.1.2 +3.1.4:2.3.1 +2.3.3:2.7.1:1.1.1 +2.7.2:2.7.2:4.3.2 +4.3.1:4.1.1:2.3.1:4.2.3:4.3.1:1.5.1 +4.1.1:4.3.1:1.2.1:2.7.1:3.2.1:2.4.2 +1.5.3:5.3.1:2.6.1:1.5.1 +4.1.1:5.4.99:1.7.1:2.6.1:2.1.2:3.1.3:2.1.1:2.7.4 +4.2.3:2.6.1:1.6.1:3.5.1 +2.3.3:2.7.2:6.3.5 +2.6.1:2.7.4:4.1.1:2.3.3:2.4.2:2.7.4:1.1.1:5.4.2 +6.3.5:2.2.1:2.7.4:2.1.2:1.3.99:2.6.1:4.2.1:4.2.-:2.3.1:2.7.1:2.1.3:1.3.3 +4.2.1:5.4.99:2.5.1 +6.2.1:2.1.2:6.3.3 +4.2.1:1.2.1:2.1.2 +1.4.1:6.1.1:4.3.2:3.6.1 +1.2.1:1.4.1:3.6.1:4.2.1:5.3.1:4.3.2:2.5.1 +5.1.3:2.3.1:3.2.1:2.1.2 +1.1.1:4.2.3:2.7.1:2.3.1 +1.2.1:2.5.1 +3.5.3:5.4.99:2.7.2 +4.3.2:2.7.1:4.3.1 +4.3.2:3.1.3:1.2.1 +2.7.1:4.3.2:2.7.1:6.3.5:2.7.1 +2.7.7:2.7.7:6.3.2:6.2.1:6.3.4 +1.2.1:3.6.1 +4.2.1:4.1.1:2.7.2:2.3.1:1.1.1 +5.3.1:5.1.2:2.6.1:5.3.1:2.3.1:6.3.4:2.4.2:1.7.2:2.7.7 +5.3.1:3.5.1:2.6.1:2.4.2:4.2.3:6.3.2:2.7.8:2.3.1:4.3.1 +4.4.1:2.3.1:2.4.2:5.3.1:2.6.1:2.7.1 +2.7.7:3.1.2:5.1.2:3.5.1 +2.3.1:3.5.4:3.1.3:2.7.2:2.7.2 +2.4.1:1.2.1:3.5.4 +4.1.1:6.3.3:2.4.2:1.1.1:2.6.1:3.5.3:4.3.1:2.4.2 +3.5.4:2.3.1:2.1.2:4.1.1:2.7.4:2.7.6:2.7.1:6.3.2:1.1.1:2.7.9:1.2.4 +4.1.3:6.3.3:3.2.1:2.6.1:4.1.3:2.3.1:2.6.1:2.1.1 +2.1.2:4.1.1:2.5.1:3.5.3:1.18.6 +2.1.2:3.5.1:4.4.1:9.9.9 +2.7.8:6.3.4:2.1.2 +2.3.1:2.4.2:1.1.1 +5.1.2:2.4.2:2.3.1:2.4.2:6.3.4:2.1.2:1.17.1 +2.5.1:3.4.13:4.3.2:1.2.1:2.1.3:4.4.1:3.1.3:2.1.1:2.5.1:4.2.1:3.5.1:4.1.2 +1.5.1:2.3.1:2.1.1:5.4.2:2.8.3:2.1.1:2.7.7:5.4.99 +3.4.11:2.7.1:6.3.4:6.3.5:3.4.13:6.2.1 +5.4.99:6.3.5:1.1.1:3.6.1:6.3.3 +2.7.1:3.5.2:2.3.1:2.5.1:6.4.1:2.7.1:2.7.7:6.3.5 +4.2.3:1.17.1:2.7.1 +2.3.1:3.2.1:4.1.2 +2.3.1:5.1.1:4.1.2:1.1.1:2.6.1:1.3.1:4.2.1:1.1.1:4.2.3:3.1.4 +2.7.2:4.1.1:2.7.4:5.4.99:5.4.2:1.3.3 +5.1.3:4.1.1:2.6.1:2.6.1:5.4.99 +2.7.2:2.7.9:4.1.3:3.5.3 +1.5.99:3.5.3:1.3.99:2.6.1:4.4.1:2.5.1:3.6.1 +4.2.-:1.5.1:1.14.12:4.1.1:2.1.2:4.2.3:1.3.3:1.4.1:6.2.1:6.3.1:3.5.3 +3.5.3:4.3.2:2.6.1:2.2.1:2.1.3:6.3.5:2.7.7 +2.5.1:4.4.1:2.7.1:4.2.3:4.3.1 +2.7.2:4.1.3:1.4.3:5.3.1:2.7.7 +1.4.1:2.7.1:4.3.1:1.17.4 +2.3.1:2.3.1:1.13.11:5.1.3:2.7.1 +1.4.4:2.7.1:3.6.1:1.2.1 +4.4.1:3.5.1:3.6.1 +4.1.3:6.2.1 +2.7.1:6.3.2:1.1.1:1.2.4:1.1.1 +2.3.1:4.1.1:1.-.-:6.3.2:4.2.1:6.4.1:2.6.1 +1.2.1:3.5.1:2.7.2 +6.2.1:2.4.2:2.6.1:1.7.99:2.1.2:4.99.1:3.2.2:2.3.3 +4.1.1:4.1.2:1.1.1:3.1.2:2.1.3:6.3.5:2.7.1 +2.1.2:1.1.1 +2.7.1:2.7.2:4.1.1:2.7.1:3.2.1:2.7.1:5.3.1:2.2.1:1.1.1:2.1.2:2.7.7:2.7.1:2.7.1:3.4.13 +2.5.1:5.4.99:6.3.3:2.7.1:6.3.2:1.1.1 +1.3.1:2.1.3:2.6.1:4.1.1 +2.5.1:4.3.2:2.4.2:1.1.1:3.1.1:1.2.1:6.3.4:9.9.9 +6.3.2:4.3.1 +2.1.3:3.1.4:2.1.1:2.4.2:4.2.1:1.8.1:4.1.1:2.1.1:3.2.1 +1.1.1:5.1.2:2.3.1:1.2.4:2.3.1 +6.3.2:4.3.1:1.2.1:2.6.1 +1.4.1:4.3.1:1.1.1:1.1.1 +2.4.1:3.1.3:2.7.7:1.1.1:4.1.1:3.6.1:3.1.3:5.3.1:4.2.1 +2.6.1:3.1.1:1.13.11 +6.3.4:4.1.1:2.1.1:2.3.1 +1.2.1:2.4.2 +6.3.2:5.3.1:2.7.8:3.2.2 +4.1.2:2.7.1:2.3.1:3.1.2:3.5.4:3.2.1 +5.1.3:1.3.99:3.2.2:4.2.3:2.7.4:2.7.2 +2.6.1:1.2.4:4.1.1:2.3.1:3.2.1:1.17.4:2.1.2:1.5.99:5.4.2 +4.1.2:4.1.3:1.1.1:1.2.1 +4.-.-:3.1.1:2.7.1 +2.7.2:4.4.1:6.3.5 +5.4.99:3.5.1:3.6.1:2.3.1 +2.7.4:4.1.2:3.2.1:4.2.1:1.13.11:2.5.1:6.3.3:2.4.2:2.3.1:3.5.4:6.3.2 +2.5.1:3.1.2 +4.2.1:2.2.1:4.3.1:4.3.1:2.1.3:1.1.1:5.4.2 +2.7.2:1.4.1:2.1.3 +2.5.1:1.2.1:3.2.1:2.3.1:2.7.7:2.7.1:1.2.1:2.7.7:2.1.2:3.6.1 +4.3.2:2.6.1:2.3.3:3.2.1:2.6.1:2.7.2:3.1.7:2.4.2 +2.4.2:4.3.2:4.4.1 +4.4.1:1.2.1:2.6.1:4.3.2:3.1.1:6.3.5:4.1.1:2.3.3:2.7.2:2.4.2:4.2.1:1.7.2:3.1.3 +2.5.1:2.-.-:4.1.1 +9.9.9:6.3.5:4.1.1:1.2.1:1.2.1:2.6.1 +3.1.3:4.2.1:2.6.1 +2.7.1:3.5.1:5.3.1:3.6.1:6.3.1 +1.4.99:2.7.1:4.2.1:1.1.1:6.3.1:1.1.1:1.2.1 +4.3.2:4.3.1:2.7.7:4.2.1:3.2.1 +5.4.99:2.7.1:3.1.3:2.1.3:4.2.1:6.3.4:2.3.1 +4.1.1:4.1.2:2.7.1:1.2.1:2.3.1 +6.3.4:3.4.11 +3.6.1:5.3.1:2.7.4:5.3.1:2.7.9 +1.2.1:3.1.3:3.5.2:6.3.2:3.5.3:2.1.2:2.1.1:1.5.1 +2.7.4:2.7.1:2.3.1:6.3.4:2.7.2:4.1.2:2.5.1 +5.4.2:2.7.1:4.99.1:2.6.1:1.1.1 +2.6.1:2.6.1:2.1.2 +1.11.1:5.3.1:2.7.8:2.2.1 +4.1.1:2.1.3:2.3.1:1.14.16:4.3.2:1.7.99 +5.3.1:3.1.3:2.3.1:6.3.2:2.1.3:2.5.1 +2.4.2:4.1.1 +2.6.1:3.1.1:4.3.1:5.5.1:3.6.1:2.4.2:3.6.1 +1.1.1:3.5.5:5.4.99:2.7.6:2.6.1:4.2.3:2.1.3 +1.4.1:2.1.1 +4.3.2:4.4.1:3.1.3:4.2.1 +3.5.1:3.4.13:1.5.1:2.3.3:2.7.1:3.5.1:1.2.1:6.3.4 +2.5.1:6.3.4:2.3.1:2.5.1:3.3.1 +6.2.1:3.4.11:2.6.1:2.1.2:2.7.1:4.1.3:2.5.1 +2.7.4:5.3.1:6.3.5:2.6.1 +3.1.2:2.7.2:1.1.1:1.2.1:3.5.1:2.7.9:2.7.1 +1.5.1:2.7.2:2.7.7:3.5.3 +3.1.1:3.5.1:2.1.2:3.5.1 +2.7.6:1.1.1:3.5.1:4.1.1 +2.3.1:2.5.1:2.1.2 +4.1.1:2.3.1:2.1.2:2.5.1:5.4.2:4.1.1 +1.1.1:2.7.1 +1.3.3:3.1.1:4.1.1:1.1.1 +1.14.12:1.4.99 +3.5.1:4.1.2:2.3.1:1.7.99:6.3.5:1.17.4:2.1.4:6.3.4:4.1.1:1.1.5:2.1.2:4.3.2:2.3.1:2.6.1 +4.3.2:1.14.13:1.17.1:1.17.4:4.3.1:3.5.2:3.5.3 +3.5.1:4.1.1:4.1.1:4.3.1:4.1.3 +2.7.6:2.3.1:2.7.4:4.1.1:6.3.5:2.7.1 +4.1.3:6.3.4:2.1.3:4.3.2 +2.1.2:2.7.1:2.7.1 +2.3.1:4.1.1:4.2.1:3.5.4:4.3.1:2.7.4 +2.7.4:1.7.2 +6.3.4:3.5.1 +6.3.2:4.3.2:2.3.1 +2.6.1:1.1.1:5.4.2:3.6.1:4.1.2 +3.5.1:2.3.1:2.6.1:2.3.1:1.1.1:6.3.5 +4.1.1:2.7.1:4.1.3:2.5.1 +2.4.2:6.3.2:3.5.1:4.1.2:4.4.1 +4.1.2:2.7.1:2.7.7 +2.7.7:1.2.1:2.7.2:1.7.99 +2.6.1:2.3.1:1.5.1:2.1.2 +5.3.1:2.6.1:4.4.1:6.2.1:2.1.1 +3.4.11:1.1.1:1.3.1:3.5.1:6.4.1:2.1.2:2.7.1 +3.6.1:3.5.1:2.6.1:4.3.1:1.4.1 +3.6.1:2.1.1:4.1.1:2.7.1 +1.11.1:4.1.1:2.7.1:1.2.1:4.3.2 +2.4.2:6.3.4:5.4.99:4.1.2 +4.1.1:6.1.1:9.9.9:2.4.2:4.4.1 +1.1.1:2.1.3:4.3.2:2.7.7:1.4.1 +5.4.2:6.3.4:2.4.1:3.1.3 +4.1.1:2.5.1:3.5.3:6.3.3 +2.5.1:6.3.2:3.6.1:5.4.2:1.2.1:2.7.2:2.7.4:6.3.2:1.2.1 +4.1.1:2.1.2:4.1.2:2.7.1:3.5.5:1.1.1 +6.3.4:5.3.1:2.7.1:3.5.4:2.7.1 +6.3.4:1.1.1:3.5.1:1.5.1:2.4.2:6.3.4 +1.14.13:2.5.1 +3.1.4:4.1.1:3.5.3:1.2.1:2.8.3:2.7.6:2.4.2:2.6.1:1.5.1:4.1.1:2.3.1 +3.5.1:5.3.1:3.5.3:1.2.1:2.7.7:1.1.1:2.4.2:2.2.1:2.4.2:5.3.1 +2.3.1:1.2.1 +3.5.1:6.3.2:2.7.1:4.2.1:4.4.1 +2.2.1:2.7.4 +1.1.1:2.7.1:1.2.1:2.1.2:6.3.3:2.4.1:2.1.1:4.2.1 +2.3.1:1.2.1:5.1.3:2.3.1 +3.1.3:4.3.2:5.4.2:1.2.4:2.7.1:2.3.1:1.1.1 +2.1.3:6.3.5:1.2.4:2.1.2:2.7.1:2.1.1 +2.7.1:2.6.1:1.1.1:1.1.5 +1.1.1:2.4.2:6.3.4:1.7.99:6.1.1:4.2.1 +6.2.1:1.3.99:4.3.1:1.5.1:1.5.1:4.1.1 +6.3.4:5.1.3:2.7.1 +4.1.1:2.5.1:2.3.1:2.6.1:4.3.1 +6.3.4:9.9.9 +2.3.1:6.3.5:4.3.2:3.5.3 +4.1.1:3.1.3:1.1.5:4.1.1:2.5.1 +2.4.2:6.3.2:1.1.1 +5.3.1:6.3.4:2.4.2 +2.5.1:6.3.5:2.6.1:3.5.1:2.6.1:2.6.1:2.7.1:4.1.1:2.5.1 +5.3.1:1.5.1:2.7.7:2.7.1 +3.4.11:2.5.1:4.3.2:2.6.1:4.1.1 +2.7.2:1.2.1:3.1.3:2.7.2 +5.4.2:2.7.1:4.3.1:1.4.1:2.7.8:1.4.1:3.5.1:1.1.1 +4.2.1:2.1.4:2.6.1 +4.1.2:2.1.1:1.17.1:4.4.1 +1.1.1:2.2.1:4.1.1:4.3.1:3.6.1:4.3.1 +2.7.1:4.3.2:5.1.3:4.2.1:2.6.1 +4.3.2:6.3.4:5.1.3:5.4.2:6.3.4:2.7.2:9.9.9:2.7.1 +2.3.1:3.1.1:4.2.3:2.7.1:6.3.4 +2.6.1:2.7.2:4.1.3 +2.7.1:4.2.1:6.3.3:6.3.2 +4.1.1:4.2.1:1.14.11:4.1.1 +3.2.1:4.1.1:1.5.1 +3.5.1:3.1.4:3.6.1:1.1.1 +2.7.4:2.3.1:3.2.1 +1.-.-:2.6.1:6.4.1:2.7.1 +6.4.1:3.1.4:1.1.1:6.3.4:2.7.4:3.2.1:5.1.3:4.1.1:6.3.4:2.7.2 +2.7.1:2.3.1:4.1.3:4.2.1:2.4.2:1.13.11 +5.4.2:2.7.6:6.3.4:5.3.1:1.1.1:1.2.5:1.1.1:4.1.1:2.6.1:2.7.1 +3.1.3:4.1.1:3.5.3:1.2.1:4.1.1 +2.7.2:2.4.2:2.1.3:3.3.1:1.2.1:2.7.1:3.5.3 +1.1.5:5.3.1:3.5.1:4.3.2:3.1.2:2.5.1:2.6.1:2.7.2:2.6.1:4.1.2:2.3.1 +1.3.3:6.3.2:2.7.8:9.9.9:2.5.1:2.7.2:6.3.4 +2.7.1:5.3.1 +4.4.1:2.3.1:2.7.4:5.3.1:3.1.3:2.7.6:2.6.1:2.3.1:3.5.4 +1.2.1:6.2.1:2.6.1:6.3.1:2.3.1 +2.7.1:2.6.1:1.8.1:2.3.1 +2.7.1:4.2.3:2.3.1:2.7.1:5.4.99:1.2.1:6.3.5:9.9.9 +6.4.1:4.3.2 +6.1.1:1.1.1 +2.5.1:5.4.2:2.3.2:6.3.5:5.3.1:3.5.1 +1.1.1:2.6.1:5.3.1:2.7.2:6.3.1 +3.5.1:4.3.2:5.4.99:5.4.2:2.1.2:1.5.1:2.1.2:4.4.1:3.6.1:4.3.2 +1.2.1:4.2.3:2.7.2 +2.7.1:3.1.1:2.7.1:1.2.4:3.1.3:2.3.1 +3.1.3:1.4.1:3.6.1:2.7.1:6.3.1:3.2.1:4.1.1:3.6.1 +6.3.2:4.1.1 +6.2.1:2.1.2:3.6.1:4.1.1:1.4.3 +6.3.5:3.5.2:2.5.1:4.3.2 +1.2.7:3.5.1:1.2.1:3.2.1:2.6.1 +4.2.1:2.1.3:3.2.1 +2.5.1:6.3.1:5.1.3:6.2.1:4.1.1:5.4.99:5.1.1:5.4.2 +2.6.1:1.5.1:2.7.1:3.5.2 +6.3.4:2.4.1:2.7.7:1.1.1:2.7.1:3.5.1:3.4.13:6.2.1:2.7.2 +3.5.1:4.2.1:1.1.1 +2.1.2:2.7.7:2.1.1:6.2.1:4.3.2:3.1.3:1.2.1:3.6.1:2.6.1 +4.3.1:1.4.3 +2.6.1:2.3.1:2.4.2:2.1.3:5.3.1 +2.3.1:6.3.2:4.3.1:6.3.3 +2.7.1:6.3.4:1.1.1:4.1.1:2.3.1:2.4.2:2.6.1 +1.1.1:4.4.1:3.5.3:2.7.1:1.3.1 +4.1.2:2.1.2:1.14.16:1.3.3:2.6.1 +1.1.1:4.1.2:1.2.4:4.1.1 +1.5.1:4.2.3:2.1.4 +2.7.1:1.4.3:2.6.1:2.3.1:2.3.1:1.4.1:1.2.1 +1.2.4:1.3.1:2.2.1:2.1.3:3.1.3 +6.3.2:2.3.1:2.6.1:3.1.1 +6.3.4:2.5.1:3.1.3:2.1.1:3.5.1:4.3.1:4.2.3:3.1.2:4.2.1:1.5.99 +4.2.1:3.2.1:4.3.2:1.1.1:3.5.1:2.7.1:4.1.1:3.5.1:9.9.9 +1.8.99:3.5.3:4.1.1:2.5.1:4.3.1 +3.5.1:2.7.1:2.5.1:2.7.7:3.1.2:4.3.1 +1.1.1:2.5.1:1.1.1:4.1.2:2.4.2:2.6.1 +6.2.1:2.7.2:2.5.1:2.7.1:2.1.3:1.14.13:6.3.3 +2.7.2:2.3.1:6.3.2:4.1.1 +1.5.1:2.8.3:3.5.3 +2.7.1:3.1.2:1.3.99:4.1.2:1.1.1:3.5.3:1.8.1:1.1.1:1.1.1:2.3.1 +1.2.4:6.3.4:2.5.1 +1.4.1:5.4.2:2.3.1:4.4.1 +4.1.1:6.3.4:3.5.1:4.3.1:2.1.1 +2.4.2:4.1.1:1.1.1:4.1.2:2.7.1 +2.6.1:3.6.1:3.4.11:3.1.3:2.4.2:2.6.1 +4.2.1:2.7.4:6.3.4 +6.3.2:1.1.1:6.3.4:2.6.1:2.7.4:2.7.1:2.7.2:1.2.1:3.5.1 +6.3.5:4.2.-:6.3.5:2.3.1:6.3.2:5.3.1:4.3.1 +2.7.2:5.4.2:6.3.2:1.1.1:2.3.1 +3.5.4:1.5.1:2.1.2:6.3.4:3.2.1:1.1.1 +2.3.1:2.7.2:2.7.7:2.4.2:6.3.4 +2.3.1:2.3.1:2.1.3 +6.3.2:2.3.1:3.1.3:4.1.2:6.3.5:4.2.3:3.7.1 +3.1.7:6.3.4:2.7.1:1.5.1:4.2.-:2.3.1:2.6.1:2.4.2:2.6.1:2.7.2 +2.1.1:6.3.4:1.1.1 +5.3.1:4.2.3:3.3.1:2.7.1 +5.4.2:1.2.4:6.3.5:2.7.2 +6.3.2:2.2.1:2.3.1 +6.2.1:4.1.2:2.1.1:3.1.2:2.6.1:2.7.2:4.4.1:2.7.4:2.3.1:2.3.1:2.3.1:1.5.99 +3.7.1:1.2.1:4.1.2:2.7.1:3.5.1:5.4.99:3.7.1:3.5.4:2.6.1 +2.4.1:4.2.-:6.3.5:1.1.1:4.1.1:2.7.6 +2.7.2:2.7.7 +2.5.1:3.1.3:4.2.1:2.7.2:2.3.1:2.5.1 +2.7.6:1.5.1:4.2.1:2.6.1:2.6.1:2.2.1 +4.4.1:3.5.1:2.3.1:2.1.2:2.7.7:2.3.1:2.3.1 +4.3.2:1.5.1:2.1.3:1.17.4 +2.7.1:4.3.2:2.4.1 +5.4.2:6.3.1:1.13.11:2.7.1:5.3.1:2.5.1:2.-.-:1.2.1:4.3.2:2.4.2 +2.6.1:2.5.1:4.1.1:2.5.1:4.1.1:2.7.1:5.3.1:1.14.99:3.1.4 +6.4.1:2.7.1:6.3.5:2.8.1:2.6.1 +1.2.1:1.3.3:2.7.2:3.5.3 +2.1.4:4.2.3:2.7.6 +2.7.2:2.3.1:1.13.11:2.3.1 +1.2.1:3.5.3:2.4.1:2.3.1:5.1.1:1.13.11 +2.3.1:2.4.2:1.14.15:5.4.99 +2.3.1:4.3.2:6.3.5:2.4.1:2.3.1:3.4.11:1.5.1:3.1.4 +2.7.1:4.1.3:4.1.1:6.3.1:4.1.1:1.1.1:2.5.1:6.3.4 +3.5.1:5.4.2:5.4.2:2.7.6:1.3.99:6.3.4:3.4.13:4.4.1 +4.1.1:5.3.1:4.3.2:4.1.1 +2.7.9:4.1.2:1.5.1:4.1.1:3.4.13:3.5.4 +4.2.1:3.1.1:4.1.1:5.4.99:3.1.7:2.5.1 +2.3.3:4.1.2:2.3.1:2.4.2:2.2.1 +4.1.2:2.1.3:1.1.1:2.7.4 +1.5.1:5.4.2:3.1.3:1.1.1:2.3.1:2.7.2:2.5.1:6.3.2:1.1.3:9.9.9 +4.1.2:4.3.1:6.3.3:1.5.1:2.1.3 +5.3.1:2.1.2:5.4.99:5.4.99:3.5.1:2.7.2:4.1.3:1.2.1:6.3.4:1.4.1:1.4.1:6.3.3 +2.5.1:6.3.4:2.4.2:6.2.1 +2.4.2:4.1.3:2.6.1:5.4.99:2.7.4:6.3.4 +5.1.3:5.4.99:1.2.4:2.7.2:1.2.4 +2.3.1:5.3.1:2.3.1:3.4.11:4.1.1:4.1.1 +6.3.4:5.4.99:5.4.99 +6.3.3:4.1.2:1.1.1:2.7.1:5.4.2:2.7.4:2.9.1 +1.5.3:3.1.3:5.1.1:2.7.2:2.1.1 +3.6.1:2.6.1:3.1.5:2.3.1:1.1.1 +1.2.1:2.5.1:2.6.1:4.1.2:4.4.1:2.4.2:4.2.1:1.2.5:4.3.2 +6.3.4:4.3.1:1.1.2:2.7.1:3.1.3:4.1.1:6.3.5 +3.5.1:3.5.3:2.7.1:2.7.7:3.1.2:2.1.3:1.2.1 +2.7.2:5.3.1:2.2.1:2.4.1:2.7.2 +9.9.9:1.1.1:2.3.1:2.5.1:2.2.1:2.7.4:2.1.1 +2.7.1:2.5.1:2.3.1:2.7.7:3.5.1:2.7.7:1.5.1:3.5.1:2.3.1:4.1.2 +3.5.1:1.17.4:2.6.1:1.1.5 +3.5.1:2.7.1:2.4.2:2.7.6:2.2.1:5.3.1:2.7.1:2.7.6:2.7.4:2.7.2 +4.2.1:4.1.1:2.7.1:1.5.1:2.7.7 +2.8.1:4.2.3:2.1.4 +3.5.4:4.2.-:2.3.1:2.1.2:2.4.1 +2.3.1:2.7.1:4.4.1:2.7.8:4.3.2 +2.4.2:4.1.1:2.4.2:4.2.3:4.1.1:4.1.1:1.5.99:3.4.11:4.3.2:1.7.1:1.1.1 +1.4.3:1.2.1:6.3.3:2.7.1:2.3.1:2.7.1:4.1.1:6.1.1:3.1.3 +6.3.5:2.3.1:1.2.4:2.5.1:4.1.1 +1.2.1:2.7.8:2.5.1:3.5.4:3.5.1:2.5.1 +1.1.1:2.3.1:2.3.1:5.4.2:4.1.3:4.2.1 +4.4.1:1.2.1:6.3.3:6.3.2:2.3.3 +2.6.1:6.3.2:2.7.2:1.7.1:6.3.3:3.5.4 +4.4.1:1.4.99:9.9.9:4.1.1:2.5.1 +2.1.3:2.7.7:1.2.1:2.7.7:2.1.2:5.3.1:4.1.1:3.6.1:2.7.1:3.5.5 +4.3.1:2.3.1 +2.7.4:1.3.99:4.1.2:2.7.2:4.2.1:3.5.1:4.1.1:3.1.1:1.17.4:4.2.1 +1.2.1:2.7.1:2.4.2:3.6.1:3.1.3:4.1.2 +2.1.2:2.6.1:2.7.4:2.3.1:6.3.5 +2.3.1:1.4.3:2.4.2:2.7.1:3.5.3:3.1.3:2.4.1:1.1.1:5.4.2 +4.1.2:3.1.3:3.4.13:2.1.2:1.14.13 +2.3.1:2.4.2:1.2.1:1.3.1:2.6.1 +3.5.2:1.5.1:4.1.1:4.2.1 +1.3.1:1.13.11:2.3.1 +3.2.1:1.13.11:1.1.1:3.5.1:4.2.1 +2.6.1:1.2.4:3.2.1:3.5.2 +1.5.1:4.1.1:1.3.99:4.3.1:2.7.1 +6.3.2:2.7.7:2.7.6:3.2.1 +2.3.1:1.11.1:2.5.1:2.7.1 +3.4.11:4.1.2:5.4.2:4.4.1 +4.2.1:4.1.1:3.5.1:5.3.3:5.4.2:2.1.2:6.3.3 +2.7.1:6.1.1:2.5.1:1.1.1:3.5.1:3.1.1:3.5.1 +2.7.1:6.3.2:6.3.4:4.4.1:5.4.2:6.3.3:1.7.2 +4.1.1:6.3.4:1.2.4:3.5.3:3.1.3:3.5.1:1.17.4:1.3.3 +2.5.1:3.2.1:1.1.5 +1.1.1:4.3.2:3.5.3:3.4.13 +1.2.4:1.2.1:2.6.1:1.2.4:1.2.1:2.3.1:4.2.1:1.2.4:2.3.1 +2.3.1:2.6.1:2.6.1:3.5.1 +2.7.1:2.7.4:6.3.4:2.7.2:6.4.1:3.5.1:2.7.8:3.5.1:4.1.1:6.2.1:6.3.5:2.1.2:3.2.2 +2.6.1:2.7.4:2.3.1:4.1.1:3.5.1 +6.3.4:4.1.1:1.2.4:2.1.2:1.1.1 +2.2.1:6.3.4:4.4.1:2.6.1:2.1.1:4.2.1:2.8.1:2.9.1 +1.2.4:4.1.1:1.5.1 +3.1.7:1.1.1:5.4.2:4.2.1:4.2.3 +5.4.2:1.8.1 +2.2.1:3.5.4:1.3.1 +2.5.1:2.1.1:3.5.1 +2.1.3:2.7.4:2.7.1:2.5.1 +6.3.3:3.5.3:2.3.1 +4.1.2:4.1.1:2.7.8:2.6.1 +5.4.99:2.3.1:3.1.3:2.7.1:1.13.11 +3.2.1:1.1.1:1.1.1:2.5.1:2.4.1 +3.5.2:3.1.2:2.5.1:2.4.2:3.6.1:3.5.4:4.2.1:4.4.1:3.6.1:2.7.4:3.5.2:2.6.1 +3.1.1:4.1.2:4.2.1:2.7.2:5.2.1:4.1.2:2.1.2:2.3.3:2.7.4:2.5.1:3.3.1 +1.1.1:2.7.7:2.3.1:2.7.4:2.7.7 +2.3.1:4.2.3:2.7.7:3.6.1:2.7.2 +5.4.99:2.6.1:1.2.1:3.5.4:3.5.1:4.1.1:1.14.16 +4.1.1:1.1.1:3.6.1 +2.3.1:1.5.1 +2.4.1:4.2.1:2.7.1:2.7.1:5.4.2:4.2.1:5.4.99 +1.8.1:1.1.1:1.2.1:1.4.1:2.5.1 +1.1.1:2.3.1:4.3.2:2.7.2 +2.3.1:5.1.1:1.5.1:1.2.1:1.2.1 +4.2.3:1.1.1:6.4.1 +4.1.2:2.3.1:4.1.3:4.1.2:2.7.4 +6.3.5:2.6.1 +6.3.4:1.7.2:2.7.7:3.1.4:6.3.4 +2.5.1:2.3.1:2.3.1:1.2.1:2.7.1:2.6.1:3.2.1:2.1.2:2.6.1 +2.6.1:6.3.2:3.2.1:5.4.99:3.5.2 +2.9.1:6.3.4:6.3.2:3.1.3:1.2.4 +2.7.1:4.4.1 +2.1.2:5.4.2:2.5.1:1.1.3 +2.6.1:2.4.2:2.7.2 +5.3.1:6.3.1:1.4.1:3.13.1:2.5.1:2.7.2:3.1.4 +3.5.1:1.5.99:4.3.2:1.7.2:2.3.1:1.1.2 +4.1.3:5.4.99:1.4.1 +4.1.1:2.5.1:3.5.4:1.5.1:2.1.2 +5.3.1:1.2.1:3.5.1 +2.8.1:2.4.2:4.2.1:2.7.1:1.3.3:1.5.99:3.5.2:2.7.1 +2.4.2:2.6.1:1.8.1:6.3.5:1.1.1 +4.1.2:2.1.1:6.3.2:2.6.1 +2.4.1:9.9.9:6.3.4:1.1.1 +3.6.1:3.6.1:1.1.1 +3.5.3:1.2.1:5.1.1:2.7.1:3.1.3:2.7.2:1.2.1:2.4.2:2.3.1:3.5.1 +4.1.1:4.1.3:2.7.2 +3.1.3:6.3.5:3.1.4:4.3.2:6.3.3:2.6.1 +1.2.1:2.7.2:4.2.-:2.3.1 +2.7.1:4.3.1:5.4.1:2.4.1:3.5.3:2.7.7 +5.4.99:2.7.1:2.1.2:6.3.5:6.3.4:4.1.1:4.1.1:2.7.7:3.5.3 +3.1.3:9.9.9:2.3.1 +6.3.3:2.1.3:1.1.1:1.1.1:1.2.1:4.1.1 +6.3.4:2.7.4:5.3.1:1.3.99:2.1.2:3.2.1:9.9.9 +6.3.4:4.2.1:3.5.1 +2.3.3:1.2.1:1.2.4:4.1.1:1.2.4:1.2.1 +3.5.1:3.1.3:4.1.1:1.1.1:4.4.1:3.5.1:3.4.11 +1.2.1:4.1.1:3.5.3:2.2.1:3.1.1:4.3.2:1.2.1 +1.2.4:3.4.11:3.5.1:1.7.1:2.3.1:2.7.1 +3.5.1:1.8.1:2.7.7:2.7.7:5.4.2:3.5.2 +2.4.2:3.5.1:2.7.1:1.1.1:3.5.1:2.7.7 +6.3.5:2.7.4:2.7.1 +1.2.4:2.3.1:4.3.2:5.4.2:2.1.1 +4.1.1:2.5.1 +4.3.1:1.8.1:1.2.1:2.7.1:2.5.1 +1.5.1:2.7.2 +6.3.2:6.3.5:1.2.1:1.2.1:4.2.1 +3.5.1:4.3.1:6.3.3 +2.5.1:2.3.1:2.3.1:2.5.1:1.1.2:1.2.4:2.7.1:5.4.99 +2.2.1:2.5.1:2.1.1:1.3.99 +6.3.5:2.7.7:4.1.3:3.1.1:2.5.1 +3.1.3:6.3.5:6.3.3:2.3.1:2.7.2:5.4.2:2.7.4:5.3.1 +1.1.1:2.1.2:2.7.4:2.3.1 +2.7.1:3.5.1:2.3.1 +5.3.1:2.6.1:5.3.1 +2.6.1:1.1.1:4.2.1:2.7.7:2.7.4:1.5.1:1.5.1:6.3.3 +1.1.3:2.7.6:1.1.1:2.7.1:4.2.1:3.5.1:4.1.1:3.1.3:5.4.2:1.1.5 +4.3.1:3.5.3:2.7.2:2.7.1:2.6.1 +5.4.2:6.3.1:4.2.1:4.2.3:3.2.2:6.3.3:3.1.3:2.7.2 +2.7.2:6.3.3:2.7.2 +2.7.1:5.1.3:6.3.3:4.3.2:4.3.1:2.6.1:6.3.2 +1.1.1:6.3.5 +2.3.1:2.3.1:3.6.1:4.2.1 +2.2.1:1.1.1:2.5.1:1.2.4:2.7.7 +4.1.2:3.1.3:4.3.2:1.3.99:4.2.1:2.3.3:1.4.99:3.6.1:4.3.2 +6.3.1:6.2.1:2.4.2:4.1.1:2.6.1:4.4.1:1.5.1 +2.3.1:3.5.1:4.4.1:4.1.2:3.5.3:5.4.2:3.5.3:1.2.1 +5.1.3:6.3.5:2.6.1:4.1.1:6.3.4:1.2.1:5.1.3:6.2.1 +5.3.1:2.3.1:4.1.1:1.4.99:5.3.1:4.3.1:2.7.4:2.7.1 +2.7.7:2.5.1:4.1.1:4.4.1:4.1.3:4.3.2 +1.3.99:2.1.2:1.4.1:4.3.2 +2.3.1:6.2.1:1.7.99 +3.1.3:3.5.1:6.3.4:2.1.2 +4.3.2:1.1.1:2.7.4:2.1.2:2.2.1:2.3.1 +1.2.4:4.3.1:4.4.1:2.5.1:2.7.4:5.1.3:4.1.2 +2.1.1:1.2.1:3.5.3:2.7.1:3.4.13:6.3.1:2.7.9:5.1.2 +3.1.3:3.5.1:6.2.1 +3.6.1:4.4.1:5.4.99:1.8.1:1.1.1:1.2.1:4.3.2 +1.17.4:2.6.1 +1.1.1:4.1.1:2.1.2:2.3.1:5.3.1 +3.5.1:2.7.2:1.2.1:2.7.2 +2.5.1:1.17.1:2.7.7:4.2.1 +4.1.1:2.6.1:2.6.1:6.3.4:2.3.1:1.3.99:1.1.1:6.3.5:4.3.2:4.1.1:1.2.1:4.1.1:2.7.2 +1.2.1:2.7.7:4.1.3:4.1.1:4.1.1 +3.5.1:2.1.3:1.14.12:6.1.1:6.3.4 +3.5.3:3.1.3:2.6.1:3.1.1:2.7.2:3.2.1:2.3.1:1.1.1:1.4.3:4.1.3:2.7.1:3.1.3 +6.3.1:4.1.1:1.14.13:2.4.2:4.1.1:2.3.3:4.4.1 +4.1.2:6.3.1:2.4.2:2.5.1:2.7.4:4.2.1 +4.1.3:3.5.4:2.5.1:4.2.3:2.3.1 +1.2.1:9.9.9:2.7.7:1.13.12 +2.4.2:3.5.1:5.4.99:1.2.1:2.6.1:6.3.4:2.5.1:1.2.1:1.5.1:1.5.99 +1.1.1:2.7.1:2.7.1 +6.3.4:1.1.1:6.3.2 +2.3.1:4.3.2:2.7.1:3.5.1:3.6.1:4.2.1:1.5.1 +2.7.1:2.6.1:4.3.2:2.3.1 +4.1.2:2.3.1:5.3.1:6.3.4:1.1.1:4.1.1:6.2.1:3.1.3 +4.2.1:2.3.1:4.1.2:6.3.4:4.2.1:2.1.1:2.7.1:2.3.1:2.3.1:2.7.7:3.2.1:4.1.1 +3.5.1:2.1.3:1.5.1:1.2.1 +3.5.4:1.5.1:2.1.2 +1.2.1:4.1.1:3.6.1:2.6.1:1.2.1 +2.7.1:3.6.1:1.3.99:1.1.1:2.7.4:4.3.1:1.5.1:6.3.3:2.6.1:2.6.1:1.5.3 +6.3.3:3.5.1:4.3.2:2.6.1:4.1.2:1.5.1 +6.3.2:3.1.3:2.7.1:5.4.99:2.4.2:2.1.1 +3.6.1:2.3.1:1.5.1:2.1.3:4.1.1:6.3.1:6.2.1:1.4.1:4.1.2:2.7.2 +2.5.1:6.3.3:2.6.1:2.1.1:3.5.3:1.7.2:4.1.1:2.4.2 +6.3.5:2.6.1:4.3.2:2.3.1:6.3.1:3.1.7 +4.2.1:4.1.3:4.1.2:2.7.1 +2.7.8:1.8.1:5.4.99:2.8.1 +2.7.1:2.4.2:6.3.4:4.4.1:1.4.1 +2.3.1:3.5.4:3.5.4:2.2.1 +4.2.1:2.7.1:2.3.3:6.3.3:2.3.1 +4.1.1:5.4.2:4.1.3:2.1.3:2.3.1:2.3.1:1.5.1:4.2.1:4.1.1:1.1.2:6.1.1:2.7.1:1.1.1:2.7.7 +6.3.4:1.2.1:1.8.1:2.7.7:4.4.1:3.5.2:2.7.1:3.6.1:6.3.2:2.7.1:1.4.1:3.1.3:2.6.1 +2.1.1:3.5.4:3.2.1:5.1.3 +3.1.4:6.3.2:2.1.2:1.8.1:3.5.1:4.1.3 +4.2.1:1.8.1:2.7.4 +5.4.2:4.1.1:2.8.3:2.4.2 +1.1.1:1.1.1:2.7.2:4.1.3:2.7.2 +2.7.1:2.6.1:2.7.1:2.6.1:4.2.1 +2.4.1:3.4.11:1.3.1 +2.7.7:2.3.1:2.8.3:2.7.1:1.2.1 +2.6.1:1.14.11:6.3.1:2.7.2:4.2.1:3.1.1 +3.6.1:1.1.1 +3.1.3:3.5.1:6.1.1:4.1.3:2.3.1:2.7.7:2.7.2:2.7.1 +3.6.1:1.5.99:2.7.1:2.7.4 +2.6.1:5.4.99:6.3.2 +3.6.1:1.1.2:4.2.1 +6.3.2:4.3.1:1.1.1:1.2.1:1.5.1:1.2.1:4.1.2:2.1.3:4.3.2 +1.2.1:3.1.3:6.3.4:4.1.3:6.3.4:1.1.1:2.7.1:2.4.2 +4.1.1:3.5.1:3.2.1:6.3.3 +6.3.4:2.3.1:1.1.1:1.4.3 +2.4.2:4.2.1:2.3.1:2.5.1 +2.3.1:6.2.1:2.7.4:2.7.1:2.7.2:4.4.1:1.7.2 +4.1.1:2.7.7:4.1.1:6.3.5 +3.5.2:2.4.2:3.6.1:2.7.1 +2.8.1:1.97.1:3.1.3:2.5.1:2.7.1:2.7.6:3.5.3 +4.3.2:2.7.1:1.5.1:2.7.2:4.4.1:3.5.2 +3.1.3:2.7.1:2.1.1:1.17.1 +2.6.1:1.1.1:2.7.7:2.6.99:2.7.2:4.4.1:1.5.1 +4.3.1:6.3.3:2.3.1:1.1.1 +4.3.2:3.1.3:2.-.- +2.4.1:6.3.1:1.4.99 +4.2.1:5.4.2 +1.8.1:1.5.1:2.7.1:2.1.1:2.6.1:2.7.9:4.4.1:1.5.1:4.4.1 +3.5.3:2.7.6:6.3.4:2.3.1:1.11.1:2.1.2 +6.3.4:2.7.2:2.1.2:3.5.4:2.1.1:2.3.1:6.3.4:2.3.1 +2.5.1:1.1.1:4.2.1:6.3.2:2.7.2:2.7.1 +2.7.1:2.6.1:2.6.1:4.2.3:6.3.2:1.1.1:1.4.3 +2.7.9:4.2.3:4.1.1 +4.3.2:4.1.1:5.4.99:2.6.1:1.4.1 +1.1.1:5.1.2:3.1.3:6.3.3:2.7.1:4.1.3 +2.7.2:1.2.1:4.1.1:2.3.1:2.5.1:1.8.1:3.1.3:1.5.1:4.3.1 +1.4.1:4.3.1:2.3.3 +4.1.1:3.6.1:4.1.1 +2.1.2:4.4.1:1.5.1:1.5.1:3.5.1 +1.4.1:2.2.1:2.7.4:2.7.1 +1.1.5:4.1.1:5.3.1:5.4.2:2.3.1 +1.1.1:1.2.1:2.7.4:2.7.7:5.4.2 +4.2.1:5.3.1 +6.3.2:5.4.99 +3.5.4:2.4.2:1.1.1:2.1.2:5.4.99:2.3.1:1.1.1:2.4.2:2.2.1 +3.5.1:2.7.4:2.6.1:3.1.4 +1.2.1:2.5.1 +4.3.1:6.3.2:2.7.7:2.5.1:1.11.1:4.2.3:2.7.1:4.1.2 +4.1.1:1.1.1 +4.2.1:4.2.1:2.3.1:6.3.4:2.1.1:3.2.1 +4.3.2:2.6.1 +2.6.1:6.3.4:2.6.1:2.5.1 +2.6.1:2.7.2 +2.6.1:4.3.1:2.7.1 +1.13.11:2.7.1:4.1.1:2.1.1:4.1.1:3.5.1:2.1.2:3.5.1 +2.7.2:2.7.2:2.3.1:2.4.1:1.1.1 +2.7.6:4.1.1:2.3.1:2.1.1 +2.6.1:1.4.4:3.5.4:2.7.2:2.4.2 +1.2.1:5.4.2:6.3.3:2.7.7:2.3.1:1.5.1:1.1.1:2.7.1:3.5.4:6.3.5:3.5.3 +2.7.2:5.4.2:4.1.1 +2.4.2:3.4.11:4.2.3:2.7.2:2.1.2 +1.1.1:2.7.8:6.3.5:2.6.1 +5.3.1:2.8.1:6.1.1 +4.1.1:1.1.1:2.3.3:2.3.1 +4.3.1:4.2.1:6.3.2 +3.2.1:2.4.1:2.3.1 +2.7.4:4.4.1:2.3.1:1.4.1:3.2.2:2.6.1:2.5.1 +3.2.1:2.4.2:2.7.1:4.1.1:1.2.1 +2.6.1:6.3.4:2.7.4:3.5.1:4.2.3:2.7.1 +1.7.2:2.7.6 +1.1.1:6.1.1:2.1.1:3.5.1:2.6.1:3.5.3:3.4.11:4.1.2:1.2.1:3.5.2:6.3.3 +1.14.12:6.3.2 +4.3.1:2.7.1:3.2.2:1.2.1:2.1.1:4.1.2 +1.2.1:2.2.1:2.1.2:6.3.2:2.5.1:1.2.4 +3.5.4:1.3.1:1.2.1 +2.7.7:3.5.3 +4.1.1:4.3.2:2.3.1:2.7.7:3.5.4:2.7.8 +1.2.1:4.4.1 +4.1.1:2.7.2:4.1.1 +2.7.1:6.3.2:2.3.1:5.1.1:2.7.1 +2.3.3:2.7.2:2.6.1:1.2.1:9.9.9 +2.4.2:4.3.2:2.4.2:2.7.8:1.5.99 +3.5.1:3.1.3:1.1.1:2.6.1 +1.7.2:1.5.1:2.7.6:4.1.1:3.1.1:1.5.1 +6.3.4:2.6.1:2.6.1 +2.1.3:2.5.1:2.6.1:2.7.2:2.3.1:2.5.1:1.2.1:6.3.2:2.1.1:2.7.7 +4.2.1:2.4.2:3.5.1:4.1.1:5.3.1:2.3.1 +4.3.1:3.5.1:1.14.16:2.5.1:2.7.2 +2.3.1:3.6.1 +4.2.1:2.6.1:6.3.4:1.1.1:3.5.4:1.5.1:2.7.7 +1.13.11:2.1.2:3.5.3:4.2.1 +6.3.4:2.3.1:4.4.1:6.3.4:4.1.2:2.7.1 +2.7.1:2.1.2:2.3.1:1.3.99:2.5.1:2.6.1:4.2.3:5.4.2:4.99.1:2.7.2:4.2.1:4.3.1 +2.1.2:1.2.1:3.1.4:5.4.99 +2.1.2:9.9.9:1.1.1:5.3.1:3.5.1 +2.6.1:2.7.2 +4.3.1:3.6.1:2.1.1 +2.1.2:2.5.1:2.1.2:2.7.7:1.1.3:2.6.1:3.2.2:3.1.3:4.1.2:6.3.2:1.2.1 +2.7.4:1.2.1:2.5.1:4.3.2:4.1.2:6.4.1:4.3.1:4.1.1 +6.1.1:4.2.3:3.6.1:6.3.4:3.5.1:1.5.1:2.3.1:5.4.99:2.7.1:2.2.1 +4.2.-:1.3.1:1.4.1 +4.2.1:2.7.9:1.2.4:1.1.1:2.7.2 +4.2.1:4.2.3:2.4.2 +4.2.3:2.4.1:4.1.1:3.6.1:3.1.1:2.7.1:2.7.1:2.3.1:6.3.1:4.1.1:6.3.4 +2.3.1:2.1.2:2.6.1:5.4.2:3.5.1:2.7.2:2.4.1:2.4.2:2.4.2:1.4.1 +2.4.2:4.1.1:1.2.7:2.3.3 +1.1.1:4.1.1:4.2.99:2.4.2:2.7.1:2.6.1:6.3.4 +4.1.1:1.1.5:3.5.4:1.2.1:4.1.1 +2.7.1:6.3.2:2.1.2:3.6.1 +1.4.1:2.7.1:1.14.12 +4.2.1:1.8.1:2.7.4:2.7.1:2.3.1:1.2.1 +5.4.99:1.4.99:3.6.1 +2.4.2:1.1.1:3.1.3:4.2.3 +1.1.1:4.2.1:2.3.1:6.3.3 +3.5.1:1.5.1:6.3.4:2.6.1:6.3.4:1.3.99 +4.1.1:6.3.4 +4.2.3:2.7.1 +6.3.4:3.1.1:4.2.1:2.3.3:2.5.1:2.3.3:4.1.2:5.4.2:4.3.1:1.2.1 +2.2.1:2.7.4:1.2.1:2.7.2:2.3.3 +4.2.1:4.1.1:5.2.1 +4.3.1:4.1.1:2.1.2:6.3.4:2.7.2:2.7.7:5.4.99:3.1.4 +2.7.1:2.5.1:4.4.1:4.3.2:4.1.3:2.7.6:2.7.1:1.2.1 +3.4.13:2.7.1:4.2.1:2.3.1 +3.2.1:6.4.1:1.1.1 +6.3.5:1.2.1:2.6.1:4.3.1:6.3.3:1.1.1:1.2.1:5.3.1:4.2.3 +2.7.2:5.4.99:2.1.1:5.4.2:3.4.13:4.4.1 +3.1.3:5.1.3:5.4.2:1.2.1 +5.4.99:2.5.1:2.7.1:2.7.1:6.3.4:4.4.1:6.3.2:2.7.4 +5.4.3:1.2.1:2.7.2:4.2.1:2.7.1 +2.5.1:6.3.4 +9.9.9:5.1.1:3.5.99:2.3.1:2.7.2:1.5.1:2.2.1 +5.3.1:5.3.1:6.2.1:4.1.2 +1.2.1:4.3.1:1.8.1 +4.1.1:3.5.1:2.7.1:4.3.2:1.5.1:4.3.1:1.2.1:3.1.4:1.1.1 +2.4.2:4.1.1 +2.6.1:2.7.2:2.3.1 +2.6.1:4.3.1:2.7.8:1.1.1:1.1.1:2.1.3:2.7.6:1.2.4 +2.2.1:3.5.3:2.7.7 +4.1.1:6.3.2:2.3.1 +2.7.7:3.1.4:4.3.2:2.7.1:4.3.2 +3.1.3:3.1.1:4.2.1:3.5.3:3.4.13:6.4.1:2.4.2:6.2.1 +3.1.3:1.2.4:2.4.2:4.2.1:1.5.1:2.4.2:2.3.1 +4.3.2:2.3.1:4.1.3:2.7.6:2.7.2:4.1.2:2.1.2:4.2.1 +2.7.4:2.7.4 +3.5.1:2.7.6:4.2.3:1.4.1 +1.2.1:1.1.2:2.3.1:4.3.1:1.2.1:2.7.1:2.7.2:4.3.2:1.5.1 +3.5.1:2.2.1:1.1.1:3.5.5:2.7.1:2.7.7:6.3.5:4.3.2:3.5.3 +2.3.1:3.5.1:1.13.11:1.1.1:2.5.1 +3.5.1:1.1.1:4.1.2:2.1.1 +1.2.1:4.1.3:4.2.1:4.1.1:2.7.2 +2.7.1:3.5.3:3.1.3:2.5.1:6.3.4:5.3.1:2.7.1 +3.1.4:3.5.2:4.2.1:4.3.2:4.1.3:3.5.1:2.-.- +2.1.2:2.7.1:3.5.1:2.3.1 +6.3.4:3.2.2:2.8.1:3.1.3:4.1.2 +2.7.2:2.3.1:4.4.1:3.5.1 +2.5.1:2.5.1:4.2.1:4.1.2:1.2.1:2.5.1:1.5.1:2.5.1 +2.1.2:4.2.-:4.2.1:2.6.1:3.5.3:4.2.1:4.1.1:2.5.1:2.7.1:4.1.2:2.7.2:6.3.4 +5.3.1:1.2.4:6.4.1 +2.3.3:2.7.1:3.5.3:5.1.3:1.2.1:3.4.11:2.3.1:2.7.9 +3.5.1:1.1.1:2.5.1:2.5.1:1.1.1:2.7.1:2.7.6:2.6.1:2.6.1 +2.7.4:2.7.8:1.5.1:4.2.3 +2.7.1:6.3.2:4.4.1 +2.3.1:1.1.1:2.5.1:2.7.1 +1.1.1:3.1.5:3.5.1:4.2.3:2.5.1 +2.3.1:4.1.2:3.5.1:4.2.3:3.8.1:2.1.3:2.7.1:2.5.1 +2.6.1:2.6.1:2.5.1:6.3.2:4.1.3 +1.3.3:6.3.2:2.8.1:4.4.1:1.-.- +6.3.2:2.4.2:6.3.2:1.5.1:4.1.1:4.2.1:4.1.3 +3.2.1:3.1.3:6.3.4 +1.1.1:2.1.3 +5.1.1:3.2.1:2.4.2:4.1.3:6.3.2 +2.6.1:4.2.1:4.1.2 +1.5.1:2.3.1:6.3.5:2.6.1:2.4.2:1.1.1:1.3.1:4.1.1:3.5.1:1.7.2 +1.7.99:1.5.1:4.1.3:2.7.8:2.3.1:1.8.1 +5.1.1:3.2.1:2.3.1:4.4.1:4.3.1:4.1.2 +4.1.1:2.1.1:1.2.1:3.2.1:2.6.1:2.6.1 +1.2.1:5.3.1:2.7.1:4.2.3:2.4.2:4.4.1:2.7.1:2.7.4:2.7.2:6.3.4:3.1.3:2.5.1:2.6.1 +2.4.2:5.4.99:3.2.1:3.1.2 +6.2.1:5.3.1:6.3.4:3.1.3:1.1.1:4.4.1:3.5.5:2.7.1 +4.1.1:2.6.1:2.7.7:3.2.2:6.3.1 +1.7.2:3.6.1:4.3.1:3.5.3:4.4.1:2.7.1 +3.2.1:2.7.2:2.4.2:2.1.3:4.3.1:2.6.1:2.6.1:2.7.1 +3.5.1:4.3.2:4.3.2:4.2.1:6.3.2:2.7.2 +3.5.1:2.3.3:2.7.2:4.1.2:1.7.2:1.4.1:2.1.2 +4.1.1:5.5.1:5.4.99:1.3.1 +3.1.1:3.1.1:3.6.1 +6.3.4:2.7.7:1.1.1:3.5.1:1.1.1:2.5.1:3.1.4:4.1.2:1.1.3:3.5.1 +2.3.1:4.1.1:1.1.1:4.1.2:3.1.1:3.5.4:4.1.3:2.5.1:4.1.2 +4.2.1:2.7.8:1.5.3:2.7.4:1.1.1:1.2.1:3.6.1 +2.1.3:1.17.7:2.5.1:3.5.1 +6.3.2:3.5.1:2.7.2:3.5.1 +1.5.1:2.7.2:2.7.1:1.3.99 +1.5.3:1.2.1:6.3.4:3.5.1:5.3.1:4.1.1:2.7.1:6.3.3:1.1.1:2.7.4:4.1.1:3.1.3:3.1.3 +1.5.1:1.2.1:2.7.6:2.4.2:2.7.4:4.3.2:2.7.4 +1.1.1:4.2.1:4.3.1 +2.7.2:2.3.1:4.2.1 +4.1.1:3.5.1:5.3.1:4.1.1:3.1.3 +1.4.4:1.2.1:3.4.13 +4.3.2:4.1.3:4.1.3:4.3.2:5.3.1:3.1.1 +2.7.8:1.4.4:1.5.1:2.5.1:6.3.4:4.1.1 +3.2.2:2.7.2 +6.3.4:3.6.1:4.3.2:4.3.2:2.1.3 +2.8.1:2.2.1:4.1.1:3.5.3:6.3.4:1.11.1:2.3.1:2.7.7:6.3.4:3.1.3:4.1.1:2.7.8 +1.4.1:2.4.2:4.2.3 +5.3.1:1.1.1:2.5.1:4.2.1:6.3.3:2.8.1:2.3.1 +2.7.1:5.4.2:4.3.1:3.1.3:4.2.3:3.5.4:1.2.1:3.6.1 +1.2.1:3.1.3:1.1.1 +2.1.1:4.1.2:2.7.2:6.3.4 +5.1.1:1.5.1:2.3.1 +2.7.1:1.2.7:2.7.1 +1.5.1:2.7.6:2.7.2:1.2.1 +4.2.3:3.1.3:4.3.2:3.5.4:6.3.4:2.3.1:1.4.1 +1.3.1:2.7.1:1.4.1:2.4.2:1.2.1 +3.5.1:3.5.1:2.7.1:4.1.1:1.4.1 +3.7.1:6.3.3:2.7.1:2.7.1:2.6.1 +2.7.1:6.3.4:2.3.1:2.6.1:2.3.1 +1.14.99:4.2.1:1.2.1:1.1.1 +1.7.99:6.2.1:2.2.1:4.2.1:1.5.1:4.99.1:2.7.4:2.7.2 +1.1.1:1.5.1:5.4.99:2.7.4:4.2.1:5.3.1:2.5.1:1.14.16:2.1.1:4.4.1:5.1.3 +2.7.1:3.1.3:4.2.3 +4.2.1:6.3.4:6.3.4:4.2.1:2.7.2 +1.5.1:4.2.1:3.5.1:2.7.1:4.2.1:2.3.1:3.1.3:2.7.2:2.5.1 +6.3.3:1.2.1:1.1.1:6.3.4:2.7.2:4.2.3:1.5.1:1.1.1 +1.17.4:1.2.1 +3.5.1:2.5.1:1.1.1:1.1.1:4.4.1 +5.4.2:5.3.1:2.5.1:2.5.1:3.1.2:2.5.1:2.3.1:1.1.1:5.4.99:1.2.1 +4.3.1:5.4.99 +2.6.1:2.1.4:4.2.1 +4.1.1:5.4.99:1.2.1:4.4.1:2.1.1 +3.1.3:2.4.2:2.6.1 +1.1.1:1.7.2:2.7.7 +2.6.1:5.3.1:2.7.8:2.1.1:2.6.1 +6.2.1:4.2.1 +4.1.1:1.3.3:2.3.1:4.3.2 +2.7.7:2.3.3:2.7.7:6.1.1 +4.1.2:1.2.1:4.1.2:6.3.4 +4.1.3:3.6.1:2.2.1:1.2.1:3.5.4:2.1.1:2.6.1:5.3.1 +4.2.3:3.5.5:4.3.2 +5.1.3:2.3.1:6.3.5:4.2.1 +4.1.1:2.1.2:6.3.3:5.1.3:2.6.1 +6.3.5:1.1.1:3.5.1 +1.13.11:3.2.1:1.5.1 +2.4.1:2.6.1:2.7.8:2.3.3:3.1.7:3.5.1:9.9.9:2.7.2:2.7.4:2.6.1:3.1.3 +2.6.99:4.2.3:4.1.3:2.7.6:4.1.2:4.1.1:3.5.1:3.6.1:1.2.1 +4.2.1:1.2.1:1.4.1:1.2.1:2.3.3:1.4.4:2.5.1:3.4.11:2.7.4 +3.5.1:2.7.4 +2.7.1:5.4.2:3.1.4 +1.4.3:2.5.1 +2.5.1:4.2.3:3.5.1:4.4.1 +2.3.1:5.4.99:2.4.2 +1.3.99:4.1.2:3.1.4:6.3.2:1.1.1 +4.3.2:4.6.1:2.1.1:1.13.11 +3.5.1:4.4.1:2.7.1:1.2.1 +3.4.13:2.7.1:2.4.2 +1.2.1:4.3.1:3.1.1:1.2.1:2.4.2 +2.4.2:4.1.2:4.1.1:4.1.1:4.4.1:2.1.1:1.2.1:1.4.1:2.6.1 +4.1.1:1.2.1:1.5.99:2.1.1:4.3.2 +3.1.3:2.7.6:5.1.3:4.1.2 +2.5.1:3.4.11:2.3.3:5.4.2:4.3.1:2.7.2:1.4.1 +1.1.2:2.8.1:5.4.2:4.3.2:2.6.1:6.3.4:1.3.3:2.1.3:5.3.1 +2.1.1:2.3.1:4.1.3:2.4.2:3.5.1:1.1.1 +3.5.1:3.5.5:2.5.1 +3.1.3:1.4.1:2.7.2:5.3.1:2.3.1:6.3.4 +4.3.1:2.7.1:4.1.2:2.1.3:4.1.2:2.7.2 +2.7.7:1.8.1:1.2.4:1.4.4 +1.5.1:1.1.1:1.2.1:3.5.1:1.1.1:6.4.1:6.3.4 +5.3.1:1.1.1:3.5.1:4.3.2:2.7.2:3.2.1 +1.1.1:2.7.4:3.5.3:4.1.3:2.3.1:2.7.2 +1.5.1:3.5.4:5.1.3:6.3.1:3.2.1:1.2.1:1.2.1:4.1.1:4.1.1:2.2.1:3.1.3 +2.7.4:4.3.1:5.3.1:1.17.1:2.3.3:2.7.1:4.2.1:2.7.7 +2.5.1:4.1.3:2.7.2 +4.1.1:1.1.1:1.5.1:1.2.1:6.3.2 +6.3.4:2.7.1:2.2.1 +3.2.1:2.1.1:2.4.2:2.4.2:4.3.2:6.2.1 +2.3.1:2.7.1:2.1.3 +1.4.1:3.1.4:2.3.1 +2.2.1:1.14.13:2.7.7:4.1.1:6.3.2:4.3.2 +3.5.3:2.7.4:4.2.3:2.5.1:2.3.1:6.3.4:4.4.1:5.4.99 +3.5.1:2.3.3:2.1.1:4.1.3:3.1.3:6.3.2:2.7.1:1.1.1 +2.3.1:1.1.1:2.4.1:1.3.99:2.7.2:1.2.1 +3.6.1:2.5.1 +1.1.1:1.1.1:4.1.1:3.5.3:3.5.99 +3.1.3:2.7.2:2.7.2 +2.3.1:1.1.1:2.3.1:5.3.1 +2.6.1:4.3.1:3.5.1:1.2.1:2.7.1 +1.2.1:2.7.7:2.3.1:3.2.1:4.4.1:2.7.2:1.2.1:5.4.2 +2.1.2:2.3.1:9.9.9:6.3.4:3.2.2:2.5.1:3.5.1:1.1.1:3.5.4:1.2.1:2.7.7 +3.2.2:2.3.3:2.7.1 +3.5.1:4.1.1 +6.3.4:2.7.4:4.3.1:4.2.1:4.2.1:2.7.9:4.3.2 +4.1.2:2.7.1:3.5.1:1.1.5:4.2.1 +4.3.1:2.7.9:1.3.99:6.3.3:2.6.1:1.2.4:1.5.1 +2.6.1:2.7.1:4.3.2:3.5.1:3.5.3:4.2.3 +2.1.1:2.7.1:3.6.1 +2.3.1:1.4.1:1.1.1:2.7.7 +4.1.2:2.7.1:2.8.3:1.14.16:1.5.1 +2.7.1:2.5.1 +2.7.2:3.3.1:4.2.1:2.7.1:2.3.1:2.7.1:4.2.1:2.7.4 +2.3.1:4.1.3:3.1.3 +2.6.1:1.8.1:4.1.1:2.7.7:1.1.1 +2.6.1:4.2.1 +6.3.4:1.1.1:4.1.1:2.3.3:4.2.1:1.4.1:2.7.1 +6.3.4:3.5.5:4.2.1:6.3.2:4.2.1 +2.7.7:3.1.4:4.1.1:2.2.1:1.5.1:1.18.6:1.2.1:4.3.1:1.3.3 +1.1.1:2.2.1:5.4.2:6.3.4 +2.7.6:2.1.1:6.3.4:2.4.2:1.2.1:1.2.1:4.2.1:4.2.1:2.7.2:2.7.1 +4.3.1:1.2.4:4.2.1 +2.7.1:3.1.1:2.7.4:3.5.3:3.5.5 +2.7.7:2.5.1:1.2.1:2.7.4:4.2.1 +1.1.2:3.2.1:1.2.1 +6.3.5:1.3.3:1.4.1:6.3.4:2.6.1:4.3.2:6.3.4:5.3.1:5.1.3:1.97.1:6.3.4 +3.4.11:2.7.1:4.4.1 +4.3.1:1.13.12:4.99.1:2.7.1 +2.3.1:1.8.4:1.2.1:3.1.3:3.5.3:4.1.2:4.2.1:2.7.1:2.4.2:2.7.7 +1.5.1:3.5.2:3.1.7:3.6.1 +5.3.1:2.1.3:1.1.1:2.7.1 +1.2.1:5.4.2:2.7.4 +2.1.2:3.5.1:2.7.4:2.7.1:2.7.1:2.7.1 +4.4.1:2.3.1:2.7.7 +3.1.7:1.1.1:2.7.2:2.7.1:3.5.3:6.3.4 +2.6.1:1.8.1:2.7.1 +2.1.3:3.1.4:3.1.3:5.4.99 +4.1.1:2.1.3:4.1.1:3.5.4:2.1.1 +4.99.1:4.1.3:2.7.1:2.6.1:4.1.1:4.1.1 +6.3.5:2.1.3:2.4.2:4.4.1:1.1.1:2.1.2 +6.3.5:2.5.1:2.7.2 +2.3.1:4.3.1 +6.3.2:3.5.3:2.6.1:1.2.1 +2.7.7:3.5.99:2.7.1 +6.3.5:1.7.1:6.3.4 +2.5.1:2.1.1:1.2.1:2.6.1:1.2.1:4.1.2:1.1.1:1.1.2:4.2.3:2.4.2:6.3.4:2.3.2 +1.11.1:1.5.1:4.1.3:2.1.3:2.2.1:4.4.1:2.6.1:2.1.2 +4.3.1:2.4.2:1.2.4:4.3.2:2.6.1 +6.3.4:3.5.1:2.4.2:6.3.2:2.7.8 +3.1.3:4.1.1:5.4.99 +1.2.4:5.4.2:1.5.1:6.3.1:2.7.1:2.7.2 +3.5.3:5.4.2 +4.1.1:4.1.1:5.4.2:2.3.1:5.4.2:4.1.1:2.5.1:2.7.4 +3.5.1:6.3.2:3.6.1:3.5.2:3.5.1 +2.7.1:2.7.1:2.5.1:1.2.1:4.2.1:6.3.4:1.1.1:2.7.2:6.3.4 +2.3.1:4.1.1:4.2.3:1.1.1:6.3.4:2.5.1:2.7.4:6.3.4:2.4.2:9.9.9 +2.1.2:2.3.1:4.4.1:4.3.1:4.1.1 +1.7.99:1.1.1:5.4.99:1.1.1:3.7.1:2.7.1 +2.3.1:1.7.99:1.5.1:2.7.6 +5.3.1:2.6.1:2.3.1 +5.3.1:4.1.1:6.3.4:2.3.1:3.5.3 +4.1.3:4.1.1:3.5.3:2.7.4:3.5.1:2.7.4:2.6.1 +1.1.1:1.1.1:3.5.3:2.7.7 +4.1.1:2.6.1:2.1.1:4.2.3:3.5.3 +2.3.1:2.7.2 +1.1.2:3.1.2:6.3.3:2.4.2:3.2.2:6.3.2:4.1.1:1.5.1:2.4.2:2.7.4:4.2.1 +2.8.2:2.7.1 +2.7.4:1.3.99:1.17.1:1.4.1 +1.1.1:5.4.1:6.3.2:2.4.2:2.4.1:3.2.1 +4.3.2:6.3.4:1.3.99:2.5.1:4.2.1:6.2.1 +2.7.1:2.7.1:3.6.1:2.7.4:4.2.1:4.4.1:1.2.1 +1.1.1:5.4.99:2.5.1:2.1.2:2.6.1 +5.1.3:2.3.1:4.1.1:3.4.13 +2.7.4:1.1.1:2.7.1:1.1.1:1.1.1:3.5.1 +6.3.5:4.2.3:4.1.2 +3.5.1:1.13.12:3.1.2:2.7.1 +2.1.3:3.1.3:6.2.1 +5.3.1:1.5.1:6.3.1:2.6.1 +2.7.2:4.2.3:3.4.13:6.3.2:6.3.5 +2.7.1:2.7.1:3.1.3:1.1.1:5.4.99 +5.4.99:6.4.1 +1.3.1:5.3.1:2.5.1:2.5.1 +2.3.1:1.2.1:1.4.1:3.5.4:1.1.1 +6.3.4:1.3.3:2.3.1:4.3.2:6.3.5 +3.1.3:2.3.1:3.5.2:4.2.1:2.7.2 +4.1.2:2.1.2:1.7.2:4.2.1:1.2.1 +6.3.2:2.7.2:2.7.8:2.7.2:2.4.2 +2.6.1:2.6.1:6.6.1:4.1.2:2.4.2:2.7.8:2.1.1 +4.3.2:1.5.1:2.3.3 +2.1.2:2.7.7:2.3.1:2.7.9:2.5.1:2.4.2 +4.1.1:4.3.1:1.14.15:4.2.1:1.2.1:1.2.1:4.1.1 +1.7.2:5.4.99:2.7.1:4.2.1 +2.1.4:3.5.1:9.9.9:2.1.1:2.7.7:2.7.1 +3.5.3:3.6.1:3.5.3:2.7.7:3.1.3 +4.1.3:6.3.2:2.7.2:2.5.1:2.5.1:6.3.2:4.1.2:4.3.1:4.1.2 +6.3.5:5.3.1:2.1.1:3.5.1:5.3.1:4.2.1:1.1.1:4.1.1:1.4.3:6.3.4:2.6.1:4.1.2 +1.4.1:4.1.1:2.1.2:4.3.1:3.5.2:5.4.99:2.7.1:4.3.2:1.2.1 +6.2.1:6.3.5:6.2.1 +5.4.99:2.7.1:6.3.5:3.1.3:4.1.1:2.3.1 +6.3.1:2.6.1:1.3.1:3.4.13:4.2.1:2.7.1:2.3.1:1.2.4:3.5.1 +3.5.1:2.6.1 +2.7.7:3.5.1:5.1.3:4.3.2:2.7.2:1.5.1 +2.3.3:4.3.2 +1.2.1:1.4.1:6.4.1 +4.2.1:4.2.1:2.1.1:1.14.13:4.2.1 +2.7.4:4.4.1:6.3.4:6.3.4 +3.5.1:1.7.99:2.1.2:2.3.1:6.3.2:1.2.1 +2.5.1:3.6.1:6.2.1:4.1.3:6.3.4 +1.18.-:1.1.1:2.3.1:6.3.4 +6.3.3:4.1.1:2.5.1:2.7.6:4.1.2:1.1.1 +5.3.1:2.3.3:2.7.1:6.3.1:5.3.1:1.5.1:3.2.2:4.2.1:2.7.1 +2.6.1:2.7.6:2.7.2:6.3.4:3.1.2:5.4.99:4.2.1 +3.2.1:4.2.1:1.3.99:2.7.1:6.3.4:1.5.99:2.7.4:1.1.1 +2.5.1:2.3.1:2.1.1:2.7.8:2.7.1 +1.1.1:4.1.1:3.5.1:4.1.1:2.3.1:1.5.1 +2.7.8:3.1.1:1.5.1 +4.3.1:2.6.1:2.5.1:5.4.99 +4.2.1:1.4.1 +2.7.1:2.5.1:2.4.2 +2.7.6:3.7.1:2.7.1:1.1.1:2.3.3:2.1.2 +2.6.1:1.8.4:3.1.1:2.2.1:4.2.1 +6.3.3:6.3.4:2.6.1:2.6.1:2.3.1 +2.4.2:2.8.1:4.4.1:2.1.1:4.3.1:5.3.1:2.7.1:2.3.1:5.4.99 +2.4.1:3.1.4:4.3.2:5.4.99:2.7.1:2.7.7:1.1.1 +2.5.1:2.7.4:3.2.1:6.3.3:6.3.5:2.3.1:2.1.1 +4.1.1:2.7.4:2.5.1:1.1.1:3.5.1:4.1.3:1.1.1:1.3.99:2.6.1:2.1.1:3.4.11:2.3.1:1.1.1:6.3.4 +4.4.1:3.1.3 +2.1.2:2.1.1:2.1.2 +4.4.1:2.6.1:4.2.1 +2.6.1:2.7.1:4.4.1:4.1.1 +6.3.4:3.1.3:2.3.1:1.2.1:2.3.1:3.4.13 +6.3.4:1.1.1:2.7.1:1.2.1:2.1.3:2.6.1:2.7.4 +3.2.1:2.7.4:3.1.2:3.1.3 +1.4.1:4.1.1:2.6.1:3.6.1:1.1.1:2.7.1:3.6.1:4.3.2:2.7.1:2.4.2:1.1.1:4.1.1:2.7.1:6.3.4 +4.3.1:3.1.2:1.4.1:3.1.3:5.1.1:2.3.1 +4.3.1:2.7.2:4.3.2:1.1.1:5.3.1:6.3.2:4.2.3 +1.2.1:4.2.1:2.7.1:2.1.3:2.1.3 +2.1.2:2.3.1:4.1.3:1.8.1:3.6.1:1.1.1 +1.5.1:3.2.1:1.1.1:3.5.3 +2.1.4:2.4.1:3.2.2:4.1.2 +2.4.2:3.1.3:2.4.2 +1.8.1:2.4.2:2.1.4:6.3.1:2.3.1:3.2.1 +3.6.1:1.2.1 +5.1.2:2.7.1:2.1.1:5.4.2:3.5.3:1.1.1:1.2.1 +3.2.1:2.1.2:2.4.2:4.1.1:2.7.4 +1.11.1:6.3.2:1.1.1:3.1.3:2.7.1:9.9.9:1.5.1:4.2.1:6.3.3 +1.17.1:2.5.1:4.4.1:2.7.1 +2.3.1:6.4.1:5.3.1:2.1.2:4.1.1:1.3.3:3.6.1 +1.2.4:4.4.1:4.1.1:2.6.1:3.5.4:3.4.13:4.3.2:2.7.1:3.1.3 +4.3.2:2.1.4:2.1.3:1.2.1:2.6.1 +2.1.1:1.2.1 +2.5.1:6.3.2:2.4.2:1.5.1:3.7.1:2.4.1:2.6.1:2.3.1 +1.2.1:3.1.3:1.2.4:6.3.4:3.5.1:4.2.1:1.5.99:6.3.2:4.1.1:4.2.1:2.7.8:2.6.1:3.5.1:2.3.3 +1.2.1:2.3.1:2.6.1:4.2.3:9.9.9 +3.1.3:1.5.3:6.3.5:1.5.1:4.1.1 +6.3.3:2.1.2:2.7.4:2.6.1:4.4.1:2.1.2 +4.2.1:1.1.1:2.3.1:6.3.2 +2.5.1:4.3.1:2.6.1 +4.2.3:2.7.1:4.1.1:9.9.9:2.4.2:2.7.4:4.1.1 +2.1.1:5.1.2:3.5.4 +3.5.4:6.3.1:3.8.1:4.2.1:6.2.1 +5.4.2:2.4.2:2.7.1:3.1.2:1.14.13:2.7.4:2.6.1:2.2.1 +5.4.99:6.3.2:6.3.2:2.4.2:1.1.2:2.7.2:2.3.1 +4.3.2:2.7.2:1.5.3 +4.2.1:3.1.3:2.7.6:2.1.4:1.1.1 +4.1.2:6.3.3:1.7.99:2.6.1:1.14.13:6.3.4:3.5.1:5.4.99 +2.7.1:3.4.11:3.6.1:2.3.1:2.3.1:2.5.1:2.5.1 +2.7.8:6.3.5:4.3.1:5.4.2:4.1.1:1.5.3:3.1.1:6.3.4 +2.6.1:1.2.1:1.1.1:3.3.1:2.7.4 +6.3.2:4.2.1:2.1.1:6.2.1:2.8.1:2.1.1 +2.7.6:6.3.2:2.4.2:1.17.4:2.7.4:4.6.1:2.3.3 +5.4.2:2.6.1:3.5.3:3.6.1:1.1.1:6.3.4 +4.1.2:3.4.11:3.1.4 +3.1.3:2.7.2:2.1.3:2.1.2:2.7.2:2.7.1:4.4.1:2.5.1 +3.5.1:4.2.1:3.1.2:4.1.2:1.2.1:4.2.1:3.2.1 +3.5.1:2.3.1:4.3.2:4.3.1:3.1.7:2.1.1 +2.6.1:4.2.1:3.5.1:2.3.1 +6.2.1:2.7.1:1.4.1:4.2.-:2.1.1:4.1.1 +4.1.2:5.4.2:4.3.1 +2.5.1:2.5.1:2.5.1 +2.3.1:4.2.1:5.1.2:3.2.2:6.3.4:1.14.12:2.3.1:3.1.3:2.7.1 +3.5.3:2.7.6:4.3.1 +1.5.1:2.7.9:3.1.3:2.1.3:2.7.7:2.7.2:6.3.2 +4.2.1:3.5.1:5.4.99:2.3.1:3.5.1 +6.3.2:4.4.1:1.5.1:3.4.11 +1.2.1:6.3.4:2.7.1:3.5.5:2.5.1:2.4.2:2.1.2 +6.3.3:2.5.1:5.4.99:2.3.1:4.1.1:5.4.99:1.4.1:5.4.2:4.3.1 +2.4.2:2.7.4:2.4.1:2.3.3 +2.1.2:2.5.1:2.7.1 +1.1.1:5.4.99:6.2.1:2.7.2 +5.5.1:2.7.7:4.1.1:2.7.1 +1.2.4:4.1.1:2.6.1:2.7.1:6.3.4:6.3.5:3.5.3:1.8.1 +2.7.1:1.3.1:4.2.1:2.7.1:4.2.1 +2.7.2:4.1.1:1.4.1:4.3.1:2.7.7:1.1.1:2.7.7:4.2.1:2.7.1 +1.5.1:5.4.4:1.5.1:4.3.2:5.4.2:2.7.2:5.3.1:1.14.13 +6.3.3:2.6.1:2.7.1:6.3.4:2.6.1:2.5.1:2.7.1 +2.7.2:2.5.1:2.6.1 +3.1.1:5.4.2:2.7.4:4.2.3:2.7.1:1.1.1 +3.5.3:2.7.8:4.1.3:1.2.1:3.1.3:2.4.2 +2.7.1:5.4.99:3.6.1 +1.3.1:4.4.1:3.1.4 +2.7.7:2.7.1:4.1.1:2.7.6 +3.3.1:1.14.13:1.2.4:1.1.1:1.1.1:5.3.1:5.3.1:1.2.1 +2.5.1:2.7.6:2.7.1:1.2.1 +5.3.1:2.3.2:5.4.2 +3.6.1:3.2.2:2.3.1:2.5.1:6.3.4:1.7.1:2.3.1:4.2.1:2.4.2:3.1.5:2.7.2 +6.3.4:6.3.4:2.3.1:2.7.4:2.1.2:3.1.7 +6.3.4:2.3.1:2.7.1:5.1.3:9.9.9 +2.5.1:4.4.1:4.3.2:2.7.1:2.1.2:1.2.1:2.5.1:1.1.1 +1.13.11:2.5.1:4.1.3:5.4.2:4.2.1:2.5.1:2.4.2:3.2.1:2.5.1 +2.3.1:3.4.11:2.1.2:6.3.4:5.4.99:1.1.1:6.3.4:6.3.4 +1.1.1:4.3.1:1.1.1:2.7.1:2.7.2:2.7.1:2.3.1:9.9.9:2.2.1:4.1.1:2.7.1 +3.6.1:3.1.3:2.7.2:1.18.-:2.7.1 +3.1.1:4.3.2:3.5.1 +2.1.1:2.6.1:4.3.1:1.2.1:2.4.2:5.4.2 +4.2.3:9.9.9:5.4.99:2.3.3:5.1.2:4.2.1 +2.7.6:1.4.1:2.1.2:1.5.99:2.5.1:2.3.1 +4.4.1:2.1.1:2.1.3:2.7.4:2.3.1 +2.6.1:2.3.1:1.1.1:4.1.2:1.1.1:6.3.1 +1.2.1:4.3.1:6.2.1:5.3.1:4.1.3:5.3.1 +2.7.4:2.7.7:4.2.1:3.5.1:2.7.8:2.7.8:1.2.4:2.7.1:2.7.7 +5.3.1:1.8.1 +1.1.1:1.1.3:2.7.1 +2.8.1:4.1.2:3.5.3 +4.2.3:4.2.3:4.3.2:1.5.1:1.2.1 +2.1.2:2.3.1:3.2.1:3.5.1:2.5.1 +4.3.1:1.17.4:3.1.4:2.5.1 +1.4.1:1.1.1:1.1.1:4.1.1:1.1.1:4.3.1:2.1.3:4.1.3:2.5.1:4.2.3 +3.5.3:5.3.1:2.1.2:2.4.2:1.4.1:2.4.1 +1.2.1:3.1.5:4.1.1:2.3.1:2.1.3:2.3.3:4.3.1 +2.5.1:4.2.1 +4.3.1:4.3.1:4.1.1:6.3.4:1.1.1:3.1.1 +5.4.99:2.4.2:4.1.1 +3.1.3:2.1.1:6.2.1:1.2.4 +1.2.1:2.7.1:6.4.1:1.1.1:2.7.2:1.3.99:5.4.2:6.3.1:2.3.1 +3.6.1:3.5.1:2.3.1:4.1.2:2.5.1:2.5.1 +4.1.1:3.5.1:6.3.4:2.7.1 +5.1.1:3.5.1:1.2.1:2.6.1:3.4.13 +2.7.1:2.7.1:4.3.2:2.7.4 +5.3.1:6.3.2:5.3.1:2.4.2 +2.7.9:1.5.99:5.4.2:1.1.1:2.7.1:2.3.1:2.5.1 +1.2.1:4.1.1:1.4.3:6.3.5:2.2.1:4.2.3:4.3.2:3.2.1:2.7.1 +2.5.1:3.1.3:2.5.1 +6.3.5:2.7.7:6.3.3 +2.7.6:2.7.1:2.8.3:4.2.1:1.13.11:3.5.2:5.1.1:2.1.1 +3.1.2:2.1.1:2.7.2:3.2.1:5.4.2 +6.3.4:1.5.1:2.3.1 +6.3.4:1.5.99:3.1.3:2.7.2:6.3.4:2.7.7 +2.5.1:1.3.3:5.4.99:1.1.1:2.5.1 +6.3.2:4.3.2:2.3.1:1.1.1 +2.5.1:2.7.1:6.3.5 +2.6.1:5.4.99:4.3.1:4.99.1:1.2.1:9.9.9:2.4.2:1.4.1:2.3.3:4.2.1 +3.4.13:3.5.2:4.3.1:4.2.3:5.1.3 +4.1.3:2.3.3:2.6.1:4.1.2:6.3.4:5.4.2:6.4.1:1.4.1:2.3.1:4.2.1:6.3.4:4.4.1:2.3.1:6.3.3 +1.2.4:2.3.1:2.7.1:2.3.1 +2.3.1:2.7.7:4.1.1:2.6.1:2.4.2:1.1.3:2.6.1:4.2.1:3.5.4:1.2.4:4.4.1:3.1.3:2.1.2:3.1.4 +2.7.9:4.1.1 +4.2.1:4.1.1:2.4.2:2.1.1:2.3.1:4.1.1:4.2.1 +6.3.4:2.4.2:1.2.1:1.1.1 +2.1.3:4.3.1:4.1.1:1.5.1:2.4.2:3.2.2:2.5.1:3.5.1:5.4.2 +5.3.1:2.4.1:2.1.3:3.5.1:4.4.1 +2.1.2:2.1.3:2.7.1:1.2.1 +3.1.3:2.7.2:6.3.1:3.1.3:4.1.1 +2.3.1:4.1.1 +2.3.1:4.3.2:6.3.5:4.1.2:3.1.3:2.6.1:2.7.6:6.3.1:4.1.1:1.2.4 +6.3.5:2.7.7:4.2.3 +2.4.2:1.1.1:4.1.2:2.7.6:3.5.1:6.3.2:2.7.1:5.4.2:6.3.5 +4.1.1:2.6.1:4.1.3 +3.5.1:5.4.2:2.7.1:2.7.1 +4.1.1:6.3.4:1.1.1 +2.3.3:6.3.4:2.4.2 +2.7.4:1.1.1:3.5.1:3.5.4:4.3.1 +4.2.1:3.4.11:2.4.2:5.4.99:2.5.1:1.14.12 +2.7.1:1.5.1:1.5.1:5.3.1:1.1.1 +4.4.1:2.7.7 +4.1.1:4.2.1:6.3.2 +1.2.1:1.1.1:1.1.1:5.3.1:4.3.1:4.2.3:2.3.1:2.7.1:6.3.5 +1.3.3:4.3.2:2.3.1:2.1.2:3.5.1 +5.3.1:3.5.1:2.4.2:2.1.3 +1.1.1:2.6.1:2.8.1:3.1.4:5.4.99:2.7.7:6.3.5 +1.1.1:3.6.1:2.7.4:6.3.2:2.6.1:4.1.1 +2.7.1:5.1.2:5.1.3:5.3.1:3.1.3:2.7.1 +2.1.3:3.5.1:1.4.4:1.7.3 +3.2.1:6.3.4 +2.7.4:2.1.3:3.1.2:2.5.1:5.3.1:1.1.1:1.2.1:1.2.1:1.3.99 +4.2.1:1.1.1:2.1.1:6.3.5:5.4.99:6.2.1:3.6.1:6.3.4 +1.14.13:2.6.1:1.7.2:2.6.1 +1.4.1:6.3.2:1.3.99 +2.1.3:3.1.1:5.1.2:2.3.1:2.6.1 +2.6.1:2.7.4 +1.1.1:2.7.4:2.7.2 +1.1.1:2.7.7:2.1.1 +2.7.7:4.2.1:1.3.1:1.1.1 +1.14.16:1.2.1:1.5.1:4.1.1:4.2.3:5.3.1:5.3.1:4.2.1:3.1.5:5.4.2:2.5.1 +2.4.2:4.1.1:2.7.1:2.1.2:3.5.1:4.3.1:1.1.1:4.2.1:4.4.1:2.6.1 +3.5.3:4.1.1:4.1.3:3.1.3:1.4.1:3.5.1:6.3.4 +2.3.1:3.1.3:6.3.2:1.2.1:2.7.2:5.4.2 +2.3.1:2.7.7:2.7.1 +3.5.1:2.1.3 +4.1.3:2.7.8:3.5.4:5.4.2:4.3.2:2.1.1:6.2.1:1.2.1:2.4.2:1.8.1 +5.1.1:4.3.1:2.1.2 +2.7.8:2.7.2:2.5.1:9.9.9:2.4.2:1.1.1:6.2.1:2.3.1:1.1.1 +3.1.3:1.3.1:3.4.13:2.4.2:6.1.1 +1.5.1:2.4.2:3.1.4:2.3.1:2.7.7:6.3.4:2.7.6:6.3.4 +1.2.1:5.1.3:6.3.4:2.4.2:1.2.1:5.4.2:3.6.1:1.14.13:2.3.1 +1.2.4:2.7.1:6.3.4:2.7.6:2.2.1:6.3.2:3.1.3:2.4.2:4.4.1 +2.4.2:2.3.1:6.3.4:4.1.3:6.3.4:1.7.99 +2.1.1:2.7.1:1.4.1:2.7.8:4.3.1:5.1.3:2.5.1:4.1.3 +2.3.1:2.5.1:2.3.1:4.2.-:4.3.1:3.5.1:2.1.3 +2.4.2:5.3.1:1.1.1 +5.1.3:2.5.1:2.1.1:4.3.1:2.7.2 +4.3.2:6.3.1:4.4.1:2.7.4 +2.7.2:2.7.7:3.1.3 +6.4.1:5.1.3:6.3.2:2.5.1:2.7.1 +1.1.1:2.1.1:2.7.1 +2.7.2:4.2.99 +2.7.1:1.1.1:1.4.1:6.3.2:2.3.1:1.1.1:4.2.1:3.5.1 +1.4.4:1.14.13:3.7.1:3.4.-:6.3.2:2.7.1:3.1.1:1.2.1:2.7.2 +1.17.4:6.3.4:2.5.1:4.2.1 +5.1.1:1.1.1:2.7.8:2.6.1 +4.1.1:1.2.1 +1.2.1:6.3.4:2.6.1:2.6.1:4.4.1 +2.3.3:5.3.1:6.4.1:4.1.1 +2.1.2:4.1.3:2.4.2:1.1.1 +5.1.3:2.7.1:3.2.1:1.1.1:4.3.2:4.1.1:1.2.1:4.3.2:3.2.1:4.3.2:2.4.1:4.1.1:1.17.4 +4.3.2:2.4.2:2.1.2:3.1.2:2.4.1:6.3.3:6.3.3 +2.5.1:1.1.2:4.1.2:4.1.1 +6.4.1:2.4.1:2.1.4:2.7.7:1.2.1:2.1.1 +2.7.1:1.3.99:2.7.1:3.1.4:3.5.1:2.6.1:4.1.3:5.3.1:2.3.1 +4.1.1:3.1.3:2.5.1:1.2.1:6.3.4:2.3.1 +3.1.7:5.4.2:1.2.4:2.6.1 +2.7.6:6.3.1:2.1.3:6.3.3 +1.5.1:6.3.4:2.1.1 +2.3.1:3.5.1 +2.7.2:2.2.1:5.1.1:4.1.2:4.1.1:2.7.1:5.4.99:4.1.3:3.1.2 +3.2.1:5.4.99:3.2.1:1.2.1:5.3.1:2.6.1:4.1.3 +1.2.1:1.2.4:1.3.99:1.1.1:3.1.3:2.7.2:6.3.3:6.3.2 +1.1.1:1.1.1:3.5.4:2.1.2:1.5.1 +1.8.1:4.3.1:2.5.1:3.6.1 +1.2.5:4.1.2:3.2.1:4.3.2 +2.4.2:5.3.1:1.4.1:1.5.1:2.7.1:2.2.1:2.6.1:2.7.4:5.4.3:4.4.1 +1.2.1:4.2.1:2.5.1:4.1.1 +5.4.2:2.1.1:4.1.1:4.4.1:2.3.3:6.3.4:6.3.3:2.5.1:4.2.3:4.1.1:1.1.1:3.6.1 +2.7.1:3.5.1:3.6.1:1.6.1:1.1.1:3.1.3:2.3.1:1.4.1:2.7.1:4.2.1:2.7.4 +1.17.4:1.1.1:2.5.1:4.4.1 +2.7.4:1.1.1:4.1.1:4.1.1:6.3.3:2.6.1:1.4.3:3.6.1:3.6.1:6.3.4 +4.2.-:2.7.1:4.3.1:2.7.7:2.7.1:3.5.3 +2.1.4:2.7.1:2.7.7:3.5.1:6.4.1:6.3.3:4.4.1 +2.3.1:2.6.1:4.1.1:3.1.3:4.2.- +2.7.1:4.1.2:4.2.1:1.4.3:2.7.2:2.3.1 +1.4.1:4.3.2:5.1.1:6.3.5:4.1.1:4.1.3:4.1.1:1.1.1 +1.1.1:1.2.1:2.7.4:2.1.2:2.5.1:2.7.1 +2.3.1:6.3.4:1.5.1:2.7.2:1.5.1:3.1.4 +2.3.1:1.1.1:2.7.1 +1.5.1:2.6.1:6.3.4 +6.3.2:2.7.7:1.2.1:2.6.1 +2.7.1:6.3.4:3.1.2:4.4.1 +3.1.7:6.3.5:1.1.1:4.1.2:3.5.1 +6.3.3:4.4.1:1.5.1:2.5.1:1.5.1:4.3.1:4.1.1 +4.4.1:1.2.1:1.2.4:3.5.2:1.1.1:1.5.1:2.7.1:2.3.1:4.4.1 +2.1.2:4.3.1:4.4.1:6.3.2:4.2.1 +5.3.1:1.1.1:2.5.1:5.4.99:5.3.1:9.9.9:2.6.1:1.2.4:2.7.7:6.3.4:1.17.4:6.3.2 +4.1.1:4.1.1:4.1.1 +2.7.1:3.5.1:6.2.1:6.3.5 +2.6.1:2.1.1:2.7.7:1.1.1:3.1.4 +6.3.4:2.4.2:4.1.1 +3.6.1:2.3.1:6.3.5:1.14.12:2.7.2:4.1.2 +2.4.2:2.5.1:3.5.1:5.3.3:5.4.2 +5.1.3:3.5.1:2.7.2 +3.1.2:2.6.1:2.7.1:1.1.1:6.3.2:2.3.1 +1.1.1:2.6.1:2.7.8:3.5.3:2.6.1:6.3.5 +3.5.3:6.1.1:6.4.1:4.3.2:5.3.1:1.3.1:6.3.4:5.3.1 +4.4.1:4.1.1:1.14.16:4.1.1:3.5.2 +2.1.2:9.9.9 +4.1.2:6.2.1:3.1.2:1.3.99:4.3.1:3.6.1:3.2.1:4.3.1:3.1.3 +2.3.1:3.5.3:2.7.1:3.5.1 +4.4.1:1.2.1:2.3.3:2.7.1 +2.2.1:6.3.3:3.2.1 +3.5.1:3.5.1:2.3.1:2.3.1:1.1.1 +1.2.1:2.7.2:2.3.1:1.1.1 +1.8.1:2.6.1:1.7.2:3.5.3:2.4.2:1.5.1:2.5.1:1.1.2:2.7.1:3.4.11:4.1.2:2.7.1 +4.4.1:2.4.2:3.5.1:3.1.3:1.1.1:6.3.2 +2.6.1:3.2.1:5.4.2 +6.3.5:1.5.1:2.1.1 +2.3.1:2.6.1:2.7.2:2.3.1:4.1.1 +1.2.1:2.1.2:2.7.8 +2.4.2:4.1.1:5.1.2 +2.5.1:3.6.1:4.1.1:1.5.99:4.1.1:3.2.1:2.1.2:4.1.1 +2.7.1:2.7.2:2.3.1:2.7.1:5.3.1 +3.5.1:2.7.4:2.7.1:6.3.4:3.5.3 +1.1.1:2.7.9:2.7.1:2.1.1:4.2.1:3.1.3:2.4.2:3.5.5:2.1.2:6.3.3 +4.3.1:2.3.1:1.5.1:6.3.4:1.14.11 +2.1.1:6.3.2:9.9.9:4.3.2 +2.7.1:2.3.1 +3.1.4:4.1.1 +2.4.2:2.7.7 +2.3.1:6.3.2:4.4.1:2.7.1:2.3.3:2.6.1:5.3.1 +6.3.4:1.2.1:6.3.5:6.3.4:4.2.1 +6.3.4:1.2.1:6.3.4:2.4.2:4.2.1 +2.7.1:2.5.1 +2.1.1:6.3.5:2.6.1:4.2.1:2.3.1:2.8.1:1.1.2:2.5.1 +1.3.3:3.1.3:2.3.1:4.3.2 +2.7.1:2.8.1:3.4.13 +3.5.1:2.7.1:2.6.1:2.7.1 +4.1.1:5.4.99:1.2.4:2.3.1:4.3.1 +1.5.1:6.3.1:5.4.2 +2.7.7:2.7.1:2.7.7 +3.1.4:4.2.1:3.5.1 +4.1.99:4.1.3:2.3.1:4.3.1 +2.6.1:5.1.3:4.2.1:2.7.2:3.6.1 +3.2.1:2.1.1:1.17.7:4.1.1:1.2.1:3.6.1:1.1.1 +5.4.2:2.7.1:6.4.1:4.1.3:4.3.2 +4.3.1:2.3.3:1.5.1:4.1.1:1.3.3:1.13.12 +2.7.1:1.4.99:2.7.1:4.1.2 +2.6.1:4.-.-:1.2.1:2.7.8 +2.6.1:3.5.4:4.2.3:4.1.1:6.3.4 +1.1.3:1.5.1:1.2.1:5.3.1:1.2.1:2.4.2:2.3.1:1.3.3:4.1.2:1.1.1:3.5.1:3.5.1:6.3.2:1.2.1 +1.-.-:5.4.2:1.5.3:2.7.2:2.4.2:3.5.1 +6.3.4:2.7.1:2.7.1:4.2.1:4.3.2:6.3.2 +2.7.1:3.4.13:3.5.1:3.5.3:4.2.1:2.7.2 +1.14.16:1.1.1 +4.3.1:4.2.1:2.7.1:2.7.1:6.2.1 +4.1.1:3.5.2:2.3.1:2.3.1:3.2.2:9.9.9 +2.5.1:3.3.1:2.4.2:6.3.4:2.7.1 +4.3.1:6.3.2:5.4.2:4.3.2:6.3.4:1.2.1:2.4.2:1.14.16:1.2.4:2.7.2:3.5.1:2.3.3 +1.1.1:2.1.1:2.7.1:2.7.2 +2.7.7:5.4.2:2.6.1:3.5.3:2.4.2:4.1.2:4.1.1 +2.7.1:5.1.1 +2.1.1:4.3.1:2.1.1:1.7.99 +2.6.1:2.1.1:2.4.2 +4.2.1:2.4.2:2.7.4:1.4.1:1.4.99:4.1.1 +4.3.1:4.3.1:6.3.2 +4.4.1:1.5.1:6.3.2:4.1.2 +3.6.1:4.1.2:9.9.9:4.2.1:2.4.2:2.7.4:2.7.4:2.1.3 +2.6.1:2.7.7:2.7.7:1.1.1:1.1.1 +3.2.2:4.1.2:3.5.2:4.4.1 +3.5.2:4.3.1:5.3.1:2.7.2:2.-.-:1.5.1:4.3.2 +2.1.3:1.5.1:4.2.1:1.4.1 +3.5.1:5.4.99:4.1.2:5.4.2:6.3.4:2.3.1 +2.1.2:6.3.1:3.5.1:4.1.1:4.1.2 +2.7.1:3.1.3:3.5.3:2.4.2 +6.3.2:5.1.2:2.7.1:1.1.1:2.6.1:2.3.1:3.5.1 +4.2.1:4.1.1:2.2.1:4.1.3:4.1.1:4.99.1:5.1.1:2.4.2 +2.7.1:3.3.1:3.5.1:2.7.7:3.5.1:6.3.4:4.3.2:2.2.1 +2.7.1:2.7.1:6.3.4:2.7.7:2.3.1:1.1.1:4.1.1:3.6.1:3.5.1:3.2.2:2.5.1:2.3.1:1.7.2 +2.4.2:2.1.1:2.7.7:4.2.3 +6.3.4:3.5.3:2.6.1:4.2.1 +5.4.99:3.1.1:1.1.1 +2.1.2:4.2.1:1.1.1:3.1.1:4.2.1:1.5.1 +4.1.1:3.5.1:1.2.1:1.1.1 +2.4.2:1.1.1:2.5.1:5.4.2:3.1.3:2.1.2 +2.1.1:2.3.3:2.3.1:2.7.2 +3.5.2:2.7.4:2.3.1:3.1.2:4.2.3:3.5.1:6.3.4:2.1.2:2.3.1:2.1.2:3.5.1 +3.1.2:1.14.13 +6.3.4:1.2.1:4.1.3:2.7.4:1.17.1:2.6.1 +3.1.3:3.6.1:2.3.1:1.2.1:4.1.3:2.7.1:4.4.1:1.1.1:2.5.1:4.2.3:2.1.3:3.6.1 +3.1.3:1.4.1 +3.1.2:2.6.1:4.2.1:2.7.2:2.4.2:1.1.1 +1.2.1:2.5.1:3.4.11 +2.7.1:2.7.1:2.3.1:6.3.4 +2.4.2:2.7.1:1.2.1 +3.7.1:1.5.1:3.4.13:1.1.1:3.6.1:6.3.2 +4.3.2:2.7.1:2.1.3:2.3.1:2.4.2 +2.6.1:2.7.2:1.3.1:4.2.1:2.3.1:2.5.1:1.2.5:1.2.1:2.7.1:3.1.4:4.1.1:3.6.1 +2.5.1:2.7.9:6.3.2:1.4.1:2.5.1:3.1.3:1.1.1:2.7.8:2.7.8:5.4.99:2.7.1 +2.3.1:2.7.2:5.4.2:3.3.1:2.7.2 +4.3.1:2.7.7:1.2.1:5.4.2 +1.-.-:2.7.8:2.6.1:2.7.1:1.1.1:2.5.1:2.4.2:1.2.4 +3.5.5:2.1.1:2.3.1:2.3.1:4.1.2:4.3.1 +3.1.3:1.2.99:2.5.1:6.3.2:2.7.7:4.1.1:6.3.5:6.3.3:5.3.1:1.1.1:6.3.2 +2.7.2:3.5.3:4.1.3:6.3.2:2.7.1:4.6.1 +1.8.1:1.7.99:6.3.4:1.18.-:1.2.1:2.1.2:6.3.5:5.3.1:4.1.1:2.6.1:3.5.1:5.4.2 +3.1.1:2.6.1:1.1.1:3.1.3:6.3.4:3.2.1:2.1.4:4.3.2:5.3.1 +6.3.3:1.2.1 +2.4.2:2.7.1 +2.5.1:4.1.1:4.1.1:2.1.4 +2.7.1:3.1.3:6.3.3:1.4.1 +2.1.3:6.3.3:1.17.4:3.5.3 +4.3.1:3.5.3:2.6.1:3.1.7 +1.2.4:1.3.3:6.3.4:4.1.1 +6.3.2:2.3.1:5.4.2:1.5.1:5.3.1:2.1.2 +4.1.1:5.3.1:2.4.2:2.3.1 +1.1.1:4.4.1 +2.5.1:2.4.1:5.1.2:6.3.2:6.3.2:1.2.4:3.5.3 +1.3.1:2.5.1:4.2.1:2.6.1:4.2.1:2.3.1:4.4.1 +4.2.1:1.2.1:4.2.1:5.1.1 +2.7.1:3.5.1:6.3.2 +2.8.1:2.4.2:2.3.1:6.3.4:2.7.2 +1.1.1:2.7.7:4.1.2:6.4.1:1.1.1:3.4.13 +2.6.1:6.3.2:5.4.2:5.3.1:2.3.1 +1.14.11:1.1.1:6.3.1:2.5.1 +1.1.1:4.3.1:1.3.1:5.4.2:5.4.99:2.7.2:2.7.4:2.7.1:4.4.1:1.4.1:3.5.3:6.3.4:6.2.1 +2.7.7:1.2.4:2.3.3:3.5.1:2.6.1 +3.1.1:1.8.1:1.5.1:6.3.3:2.5.1:2.7.1 +1.5.1:3.6.1 +3.6.1:2.3.1 +6.3.4:1.17.1:2.1.2:2.3.1:6.3.2:4.1.1 +2.3.2:2.6.1:4.2.3:2.6.1:3.1.2:2.3.1:3.1.2:4.2.1:4.3.1:6.3.1:2.7.8:6.3.4:2.5.1:6.3.4 +3.5.4:2.3.1:3.1.2:1.7.2:3.5.1:4.2.1:4.3.1:4.2.3:3.1.3:1.4.1:2.3.1:4.2.1 +2.5.1:6.3.4:4.1.1:2.3.1:1.1.1 +5.4.2:2.5.1:1.4.1:5.3.1:1.5.99 +4.6.1:5.3.1:2.1.2:6.4.1:4.1.1:3.2.1 +2.1.2:4.1.1:1.1.1:2.7.7:4.4.1 +6.3.3:3.1.1:1.1.1:1.2.1 +1.3.1:4.1.2:6.3.2:5.3.1:1.1.1:2.7.1:4.1.1:2.7.7:2.7.4 +2.3.1:3.5.3:1.1.1:1.5.1:6.3.5 +2.7.1:2.3.1 +2.1.1:1.1.1:1.4.1 +3.5.3:3.5.3:4.1.1:3.6.1 +1.5.99:4.3.1 +1.1.1:2.7.2:5.4.2:2.1.2 +2.7.1:3.5.1:5.3.1:2.3.1:1.1.1:2.3.1:5.3.1:3.2.1 +5.4.2:2.3.1:6.3.2:2.7.1:6.3.4:6.3.4 +1.2.1:3.5.3 +5.4.2:4.1.2:2.6.1 +2.4.2:2.3.3:3.6.1:2.7.7:1.5.99:2.5.1:4.3.2:2.4.2 +1.8.1:2.1.2:2.7.1:3.1.3 +4.2.1:5.4.2:6.3.2:6.2.1 +2.8.1:1.1.1:1.3.3:4.4.1:6.3.5 +6.3.3:4.1.1:2.1.1:1.1.1:4.2.1:2.7.1 +5.1.2:2.1.2:4.1.1:4.2.3:2.4.2 +6.3.5:4.4.1:6.3.2:2.3.1:2.3.1:4.1.1:2.3.1 +3.2.1:4.2.1:4.3.1:5.1.3 +5.4.2:3.1.4:1.4.1:2.4.2:2.7.2:2.3.1 +2.8.2:1.4.3:3.6.1:2.7.2 +2.6.1:4.3.1:1.1.1:3.5.1:5.4.99:4.3.2:1.1.5:4.1.1:2.4.2 +6.3.2:5.4.1 +1.5.99:4.2.1:1.1.1 +3.5.1:1.1.5:4.3.1:6.3.4:6.3.4:1.4.1:2.4.2:3.4.13 +5.4.99:2.3.1:3.4.13:3.6.1:4.3.2:4.1.3:2.6.1 +5.4.2:1.1.1:2.3.3:1.1.1:2.5.1:4.1.1:4.1.1 +1.4.1:3.5.1:4.1.2:3.1.3:2.3.3:6.3.5:6.3.2:3.5.1:5.1.3 +1.2.1:4.3.1:3.1.3:4.4.1:2.3.1:2.5.1:5.4.2 +2.4.2:3.6.1:1.17.4 +6.3.4:6.3.2:4.3.2:5.4.2:2.5.1:3.5.3:2.2.1:4.3.1 +1.2.1:2.7.1:2.4.2 +5.4.99:2.4.2 +1.2.1:2.1.1:3.5.1:4.1.1 +1.13.11:2.7.1:4.3.1:4.1.1:6.3.4 +2.7.2:1.5.1:2.7.2:2.7.7:3.5.4:6.3.4:1.2.1:1.3.99:6.3.3:2.7.1 +4.3.2:2.7.1:1.2.1:4.2.1:2.7.7:1.1.1 +4.1.3:1.1.1:2.7.1:6.3.4:2.7.7 +1.4.3:2.7.1:3.1.3:1.2.1 +2.3.3:3.5.1:4.1.2 +4.2.1:1.13.11:2.7.6:1.14.13:3.5.1 +6.3.5:1.2.4:1.1.1 +4.2.1:2.7.9:2.5.1:2.3.1 +3.6.1:2.7.2 +3.5.3:1.3.3:2.5.1 +2.3.1:4.3.1:2.4.2:4.3.2:6.3.2:4.2.1 +5.1.3:2.7.7:2.5.1:5.3.1:2.1.4:1.1.1:2.7.1 +2.5.1:1.5.1:2.4.2:2.3.3:2.1.2:6.3.2:2.1.3:4.2.1 +1.3.1:2.5.1:4.3.1:1.2.4:4.2.1:4.4.1 +6.3.5:5.3.1:1.2.1 +2.7.4:2.7.1 +2.3.1:3.5.1:1.2.4:2.7.9:2.7.2 +4.2.1:2.7.9:2.7.1:1.1.1:2.7.1:1.2.1:1.2.1:2.7.1:3.4.11:2.7.7 +1.17.4:2.1.3:5.1.2:2.6.1:2.7.1 +5.3.1:2.7.1:3.2.1:6.3.4:3.5.3 +4.1.1:2.3.1:4.1.1:1.3.99:3.6.1 +3.5.3:5.3.1:1.2.1:2.3.1 +2.6.1:3.1.1:2.5.1:2.7.1 +4.2.1:2.1.1:2.4.2 +2.1.1:3.5.3:2.4.1:3.6.1:6.3.2 +1.2.1:1.7.1:1.1.1:2.6.1:6.3.4 +3.5.1:1.5.1:3.5.3:2.5.1:1.8.1:3.1.2:3.5.4:4.2.1 +3.1.3:1.1.1:2.4.2:6.3.2 +5.1.3:1.13.11:4.1.1 +2.4.2:2.5.1:4.1.1:3.5.1:2.5.1:2.7.8:4.1.2:1.1.1:4.3.2 +4.2.1:6.3.3:6.3.1:1.1.1:2.3.1 +1.4.1:4.1.1:4.2.1:4.2.1:1.11.1 +2.6.1:1.5.1:2.1.3:5.4.2:2.6.1:1.2.4:2.1.2:1.5.1:2.7.1:1.1.1:1.1.1 +4.1.1:5.1.1:4.2.1 +2.7.1:2.7.9:3.5.1:2.7.7:2.7.6:2.7.7:1.3.1 +1.5.1:4.2.1:1.4.1 +3.5.1:2.7.2:1.3.1:2.7.1:3.1.1:6.3.2 +5.4.2:1.1.1 +2.5.1:2.3.1:5.3.1:3.5.4 +2.7.6:1.2.1:3.1.3:1.2.1:9.9.9 +3.1.2:1.1.1:2.7.4:1.1.1:2.7.7 +6.3.2:1.1.5:2.7.7:2.3.1:4.1.1 +2.5.1:3.6.1:2.7.2:1.2.1 +2.7.2:5.1.3:1.1.1:6.3.2:5.4.2:2.5.1:6.3.1 +5.4.99:3.4.13:2.7.4:2.3.3:2.3.3:2.7.1:1.2.1 +2.5.1:1.5.1:2.7.1:4.3.1 +1.1.1:1.5.1:2.5.1 +6.1.1:6.3.4 +2.7.7:5.1.1:5.4.2:5.1.3:3.5.1 +1.5.1:2.4.2:3.1.1:1.3.99:5.3.1:2.7.1:1.1.1:4.2.1:2.7.2:2.4.2:2.1.2 +2.7.8:1.1.5:5.3.1:1.2.1:5.4.2:3.5.1:6.3.5 +3.5.1:2.7.4:1.4.1 +2.4.2:1.1.1:6.2.1:2.5.1 +3.5.4:3.5.1 +1.1.1:1.2.4 +2.3.1:3.5.3 +6.3.5:1.1.1:2.7.1:4.3.1:1.3.1 +2.7.2:2.1.1:2.1.2:1.1.1 +1.1.1:5.4.2:2.7.1 +1.2.4:4.1.1:2.7.1:3.1.4:4.2.1:4.3.2 +2.7.1:4.1.2:5.4.99:3.2.2:3.5.1:2.7.7:2.7.1 +2.7.1:3.2.1:4.3.2:3.5.1:2.7.4 +4.1.1:4.4.1:2.5.1:1.3.99:2.3.1:1.5.1:2.3.1 +2.1.1:4.99.1:2.6.1:6.3.2:2.7.7:6.3.1:3.5.1:4.1.2:2.4.2:4.4.1:2.6.1:5.1.2 +3.5.1:3.1.2:9.9.9:1.1.1:3.5.3:4.2.1 +4.2.1:4.1.3:1.4.1 +2.7.1:1.14.13 +1.4.1:3.5.1:1.2.1:2.1.2 +2.7.2:2.5.1:6.2.1 +3.1.3:2.7.1:2.7.4 +4.1.2:2.1.1:4.1.2:1.2.5:1.2.4:2.7.1 +1.14.13:3.5.3:3.5.1:2.7.4:1.18.6:2.4.2:2.7.4:2.4.2:1.2.1:3.13.1 +4.4.1:4.4.1:4.1.1:2.6.1:6.3.3:1.1.3:3.1.2:2.3.1:1.2.1:1.1.1:4.2.1:2.7.1:2.7.1 +4.2.3:2.4.2:1.2.4 +2.1.2:3.1.3:6.1.1:1.1.1:2.1.2:5.4.99:6.3.4:4.1.1:4.1.2:3.6.1:2.6.1:2.5.1:2.6.1 +5.1.3:3.4.13:5.4.99:2.7.7:2.7.1:5.5.1:5.4.99:6.3.2 +5.4.2:5.4.99:2.7.8:3.1.2:5.3.3:4.1.1:3.1.3:1.1.1:2.7.7:2.1.1:2.2.1:2.3.1:1.1.1 +1.1.1:4.3.2:2.7.1 +2.3.1:2.7.2:6.3.4:3.5.3 +2.1.1:2.7.6:2.7.1:3.5.1:6.3.4:2.5.1:1.13.11:2.7.2 +2.5.1:3.1.3:4.3.1:2.4.2:2.4.2 +2.7.7:6.3.4:2.5.1:3.4.11:2.7.1:2.4.2 +2.4.1:2.7.1:2.7.1:6.3.1 +2.7.9:4.2.1:4.1.2:5.2.1:2.3.1:4.3.2 +4.2.1:2.7.1:1.1.1:4.1.3:3.5.3:4.2.1:2.3.1:1.13.11:4.2.-:2.6.1 +4.2.1:2.4.2:1.5.1:2.5.1:5.1.1:1.8.1:3.5.1:1.4.1:2.3.1 +6.3.2:2.6.1:4.2.1:1.1.1:3.6.1 +6.3.4:2.3.1:5.1.1:3.6.1:5.4.99:2.6.1:1.8.1:3.1.3:6.3.3:4.1.1:4.1.2 +4.1.2:5.4.2:5.3.1:1.1.1:2.4.1 +2.3.1:1.5.1:4.1.2:4.1.1 +2.3.1:1.8.1:1.2.1:1.1.1 +2.5.1:4.3.2:1.1.1:2.4.2 +3.8.1:3.8.1:5.3.1:1.2.4 +4.3.1:1.4.1:2.3.3 +1.1.1:4.4.1:3.1.2:6.3.2:3.6.1 +4.1.1:6.3.2:2.7.7:3.5.3:6.3.3:4.3.2:2.7.7:2.3.1 +2.1.3:2.7.7:4.1.1:2.7.2:4.1.1:2.5.1:6.3.4:4.1.2 +2.3.1:1.4.1:5.4.99 +2.3.1:2.5.1:4.3.2 +4.4.1:2.4.2:5.3.1:4.99.1:3.4.11:3.5.1 +4.4.1:2.7.1:4.3.1:9.9.9:4.2.1 +1.13.12:2.6.1:4.3.2:2.3.1:3.5.1:4.2.1:3.5.1:2.3.1:5.4.99 +2.3.1:2.3.1:6.2.1:3.5.1:4.4.1:4.2.1:4.2.3:1.1.1:1.3.3:5.3.1:2.3.1:6.3.4:2.1.2 +1.2.1:1.7.99:1.1.1:2.7.1:2.5.1:1.1.1 +2.7.2:2.3.1:6.3.2 +2.7.1:2.7.4:2.7.1:1.8.1:4.1.1:5.1.3 +1.5.1:1.4.3:1.1.5 +4.1.1:6.3.4:4.4.1:6.3.2:3.1.4 +1.5.1:6.3.2:2.3.1 +2.4.2:6.3.4:2.1.1 +1.1.1:2.7.1:4.4.1:2.1.3:2.1.2:2.6.1:6.3.5 +3.6.1:6.3.4:1.3.1:1.17.1:1.2.1:2.3.1:4.1.2:2.7.1:2.3.1:4.2.1 +5.1.2:2.7.1:6.3.4:1.1.1:2.4.2:4.1.1:1.17.4:9.9.9:3.5.1:2.3.1:4.1.1 +2.7.2:5.4.2:2.7.2:4.2.1:4.3.2:2.7.2:2.6.1 +4.6.1:2.3.1:2.-.-:5.3.1 +4.2.1:1.5.1:3.2.1:4.2.1:4.2.1:4.1.2:2.7.1 +2.1.2:3.1.3:3.6.1:2.7.7 +3.5.3:2.3.1:2.4.2:2.5.1 +4.2.3:2.7.2:2.7.4:3.2.1:2.7.4:2.4.2:5.4.99:2.7.1:1.2.1 +6.3.3:4.3.1:6.3.4 +2.7.7:1.7.99:6.4.1:5.1.3 +1.1.5:1.1.1:6.3.5:1.7.99 +2.1.1:1.2.4:1.7.2:2.6.1:2.7.4:2.3.1:1.2.1:4.3.1:2.6.1:2.5.1:2.7.7:2.6.1 +4.3.2:9.9.9:6.3.1:3.5.2:1.2.1:4.3.1:1.4.1 +2.3.1:4.1.1:3.5.4:4.1.1 +1.2.1:1.2.1:1.3.99:3.1.3:2.7.1:1.5.1:5.4.3:2.6.1:4.2.3:2.3.1:4.4.1:2.1.3:4.3.2 +3.5.1:2.5.1:4.1.1:6.4.1:2.7.1:4.2.3:2.6.1:2.4.2 +2.7.1:2.3.1:2.5.1 +2.7.7:3.4.13:6.3.4 +1.2.1:4.3.2:6.3.4:6.3.2 +2.4.2:5.3.1:2.7.4:2.7.1:2.7.7:9.9.9:2.5.1:6.3.1 +2.7.2:2.1.3:3.5.3:1.5.1:2.1.4:2.5.1:2.7.2 +1.1.1:4.1.2:2.3.1:2.3.1:2.3.1 +4.1.3:2.7.1:4.2.3:4.4.1:3.1.2 +1.8.1:6.3.3:2.3.1:4.1.1:2.7.1 +4.1.2:2.5.1:1.5.1:2.6.1:5.3.1:2.6.1:1.3.1:1.1.1:1.5.1:1.2.1:3.6.1:4.1.1:2.1.1:2.6.1 +6.2.1:1.3.99:2.3.1:1.5.99:2.1.2 +2.7.1:4.3.1:1.3.1:1.4.1:2.7.7:2.7.1:3.1.5:1.2.1 +1.13.12:3.5.2:2.4.2 +4.2.1:1.7.99:4.3.1:2.7.7:2.6.1:1.5.1 +1.5.99:3.1.3:2.3.3:3.5.1:4.1.2:3.3.1 +2.3.3:3.5.3:3.1.3:5.4.2 +1.17.1:2.6.1:3.3.1:4.1.2:2.7.2:6.3.3 +2.3.1:4.2.1 +2.1.1:2.6.1:2.6.1:5.4.2:2.3.1:2.5.1:2.1.1:2.7.2 +4.1.1:2.3.1:5.4.99 +5.4.99:4.1.3:2.7.6:3.5.1:1.2.1:2.1.1:2.1.4:4.1.1:4.3.2:2.1.2 +1.5.1:1.1.1:4.1.1:5.4.2:2.6.1:2.4.2:1.5.1 +2.7.6:5.1.3:4.1.1:5.3.1:2.8.1:1.2.1:2.3.1 +4.4.1:4.2.3:1.2.1:2.4.2:3.4.13:5.3.1:2.7.2:2.2.1:6.3.4:2.3.3:4.2.1:3.5.1:1.1.1 +3.6.1:3.5.3:2.7.2 +1.2.1:4.2.- +2.7.4:4.1.1:2.1.3:1.1.1 +2.7.1:1.1.3:5.3.1:2.7.2 +2.4.1:4.4.1:2.4.2:2.8.1:1.1.1:3.1.3:1.7.99:1.2.1:2.7.1 +2.7.1:4.1.3:2.1.3 +3.1.3:1.5.1:3.1.3:6.3.3:1.2.1 +6.3.5:4.4.1 +2.7.7:4.3.2:6.3.4:3.5.1 +3.5.3:4.1.1:2.4.1:3.1.1:1.7.99:2.1.1:2.3.3 +2.8.1:5.3.1:2.7.2:6.3.4 +3.2.2:6.3.3:6.3.5:6.1.1:2.7.6 +4.1.1:3.5.3:4.3.2:2.1.2 +5.3.1:4.1.1:4.1.2 +4.1.1:2.7.1:6.3.4:4.4.1:1.5.1 +6.3.3:2.3.1:6.3.3:2.5.1:4.1.2 +2.6.1:1.1.1:1.1.1:2.1.3:2.7.1:4.2.3:3.6.1:4.1.1:2.3.1 +1.2.4:3.6.1:2.1.3 +2.8.1:5.4.99:1.-.- +2.7.1:4.1.1:3.2.1:4.3.1:1.7.99 +2.3.1:5.3.1:1.7.1 +9.9.9:2.3.1:2.5.1:4.2.1 +6.3.2:4.2.2:4.1.2:3.5.1 +6.3.4:2.5.1:1.2.1:1.3.1:1.2.1 +3.5.2:5.3.1:3.6.1:2.6.1:2.7.1:6.3.4:1.4.3:2.6.1 +6.3.3:2.7.2:5.4.99:4.1.3:1.3.99:4.1.2:2.4.2:6.3.2:4.2.1 +2.3.1:5.4.99 +4.1.3:2.7.7:3.5.1:2.3.1:2.7.1:2.4.2:1.1.1:4.3.2 +2.7.1:4.3.2:1.1.1:2.1.2:2.3.1:4.1.1:1.3.1:2.1.1 +3.1.3:4.3.2:6.3.1 +2.7.7:5.1.2:4.4.1:2.7.1:1.3.1 +1.4.1:2.6.1:2.3.1:2.7.1:1.2.1:4.2.1:1.4.1:1.4.1 +1.5.1:2.7.1:2.7.6:2.5.1 +5.3.1:9.9.9:2.8.1:1.4.99:4.3.1:5.4.2:2.7.1:3.1.3 +2.3.1:1.2.4:3.5.1:5.4.99:2.4.2 +1.5.1:4.1.1:4.2.1:3.6.1:1.1.1 +2.7.1:2.4.2:4.1.2:2.5.1:1.2.1 +1.4.4:1.1.1 +2.1.2:6.3.4 +4.1.3:4.4.1:4.1.3:2.5.1:2.7.8:1.1.1:3.6.1 +6.3.1:3.5.1:2.4.2 +6.3.5:2.6.1:4.2.1:2.3.1:3.2.1:1.1.1:1.4.4 +2.3.3:6.3.3:2.4.2:5.4.2:4.3.2 +2.6.1:1.2.1:1.14.13 +1.2.1:3.1.1:1.1.1:3.1.3:2.7.1:2.3.1 +3.1.3:6.2.1:2.7.2:4.3.1:2.1.2:2.7.4:3.5.1:3.6.1 +6.3.2:6.3.4:2.1.1:1.1.1 +6.3.4:2.7.7:2.7.4:4.2.1:1.5.1:1.3.99 +3.5.1:6.3.2:2.5.1:2.7.1:4.3.1:4.4.1 +2.7.1:2.5.1:2.5.1:1.2.1:5.3.1 +2.3.1:2.3.3:4.3.1:3.5.4:5.4.99 +6.3.2:2.1.1:2.3.1:2.3.2:5.4.99:1.2.4:1.5.1 +4.2.3:2.8.3:4.1.1:6.3.5:2.5.1:2.5.1:4.3.2:6.3.4 +1.2.1:6.3.4:1.4.1:4.1.1:1.3.99:1.2.1:6.3.1 +2.7.1:2.2.1:2.1.1:2.5.1:1.2.1 +1.17.4:5.4.99:3.1.4:1.1.1 +1.17.4:2.3.1:2.2.1:3.2.1:4.1.1 +3.4.13:2.3.1:4.3.1 +1.4.4:4.2.-:2.7.4:2.5.1:4.3.1:5.3.1 +2.6.1:6.3.3:4.1.1:2.5.1:2.3.1:6.3.2:2.6.1 +4.2.1:2.5.1:6.1.1:1.2.4:2.7.1 +3.5.1:2.7.2:2.3.1:2.7.7:1.4.1:2.1.2:3.1.3:1.1.1:1.5.1:2.6.1:5.4.2:1.2.1:5.3.1 +2.7.1:1.5.1:6.1.1:2.2.1:6.3.4 +5.3.1:1.2.1:5.3.3:3.5.4 +4.3.1:2.7.2:4.2.1:2.7.8 +4.1.1:4.2.1:4.2.1:1.2.1 +2.3.1:6.3.4 +6.4.1:3.5.1:2.4.1:1.2.1 +2.1.1:2.5.1:4.99.1:1.4.1:2.3.1:1.2.1:6.3.4:2.7.2 +2.3.1:5.3.1:1.5.1:3.5.4:3.5.1:3.6.1 +2.3.1:2.6.1:2.5.1:4.1.3:5.3.1:3.1.4:4.2.1 +4.1.2:2.3.3:4.2.1:4.1.1:2.5.1:3.2.2 +6.3.4:2.7.1:1.4.3:1.4.1:6.3.2:4.2.3:6.3.2:3.6.1 +2.6.1:6.3.3:3.1.5 +2.7.7:2.1.1:1.2.1:4.4.1:2.6.1:2.6.1:2.4.1:5.1.3 +1.2.5:2.3.1:1.4.1:1.1.1:2.3.3:1.14.13 +3.5.1:3.1.3:4.2.1:2.4.2 +2.1.1:2.7.1:4.2.1:4.2.1:1.2.1 +5.4.99:3.1.3:1.2.1 +2.5.1:2.4.2:2.3.1:2.1.1:5.4.2:4.2.3:5.3.1:2.5.1:1.1.1:2.7.4:4.1.2:1.1.1:6.3.4:3.5.4:4.1.1 +1.1.2:1.17.4:4.1.3 +5.5.1:6.3.3:1.2.1 +2.1.2:2.3.1:4.1.1:1.4.1:2.7.8:2.7.1 +4.1.3:6.3.4:5.4.2:1.2.1:2.7.2:2.7.4:1.1.5 +4.3.1:2.5.1:2.7.1:5.1.1:3.5.1:1.1.5:4.1.1:5.4.2:2.3.3:1.1.1:4.2.3:2.7.1:1.2.1:2.7.1 +2.7.1:2.7.4:2.3.1:3.5.1:6.3.1:1.7.99 +4.1.3:2.3.1:1.5.1:6.4.1:2.7.2:2.8.1 +2.1.2:1.2.1:3.5.1 +1.2.1:4.2.1:2.6.1:6.3.5 +2.7.1:6.4.1:3.8.1:4.3.2:4.1.1:5.3.1:1.5.1:1.2.7:9.9.9 +2.7.1:2.7.7 +4.1.2:2.7.1:2.7.2:2.6.1 +4.2.1:5.4.99:4.1.1:2.7.2 +1.2.1:3.5.1:2.1.1:6.3.4:3.1.3 +2.7.1:4.2.1:2.1.2:3.1.3:4.2.1 +3.5.1:4.2.1:3.5.1 +2.5.1:2.3.1:4.2.-:2.6.1:2.5.1:5.1.3 +4.3.2:1.1.1:6.4.1:4.1.1:2.1.2:1.5.1:4.1.3:5.4.3:3.5.3:1.4.1:3.1.4 +2.3.1:2.4.2:1.5.99:9.9.9:1.2.1:5.4.2:5.1.2:5.3.1:3.2.1:2.7.2:6.3.4:6.3.2 +4.3.1:2.7.1:2.7.7:2.7.2:2.3.1 +2.5.1:2.7.2:4.3.1:1.5.1:2.1.1:2.7.2:1.1.5:6.3.4:4.1.2:4.1.1:2.3.1:4.3.1 +2.7.2:5.4.99 +2.5.1:3.5.3:5.3.1:3.1.2:2.4.1:1.3.3:1.1.1 +3.5.3:2.3.1:2.5.1 +2.7.4:2.1.2:2.7.1:2.8.1:1.4.1:1.4.1:5.4.99:2.7.4:6.3.1:3.1.2:5.4.99:1.1.1:4.2.1 +2.3.1:1.2.1:2.7.1 +3.2.2:4.1.1:1.2.1:1.2.5:1.4.1 +2.7.6:4.2.1:4.3.1:5.4.2:3.1.2 +2.7.7:2.3.3:2.1.1:5.4.2 +4.2.1:2.4.2:3.5.1:2.3.1:2.7.6:6.2.1 +2.6.1:2.3.1:4.2.1:2.7.1:2.6.1 +1.1.1:2.6.1:6.2.1:1.1.1:2.7.7:4.1.1 +3.5.1:2.7.2:2.7.4:1.1.2:2.7.1:5.1.1:1.1.1 +2.7.7:4.2.1:2.7.7:4.2.1 +4.2.1:4.2.3:3.5.1:3.5.1 +3.5.1:4.3.1:6.3.3:3.6.1:2.6.1:2.5.1:2.1.1 +2.3.1:2.6.1:1.2.1:1.2.1:2.5.1:4.4.1:4.3.1 +5.4.2:2.7.1:2.7.7:2.7.1:6.3.4 +2.4.2:2.4.2:4.1.1 +1.2.4:4.2.1:5.3.1:3.1.3:1.7.3:3.6.1:3.2.1:1.5.1 +1.5.1:1.1.1:6.3.4:5.3.1:1.3.1 +4.99.1:1.1.1:6.3.4:1.3.1 +3.5.99:2.7.1:5.4.2:3.1.3 +2.5.1:6.3.1:4.1.2:2.7.8:5.3.1:3.4.13:3.5.1:4.3.2 +4.3.2:6.1.1 +1.11.1:3.5.4:2.7.1 +1.2.1:1.3.99:2.3.1:1.2.1:1.3.99 +2.5.1:2.6.1:2.7.1 +4.1.1:5.4.2:1.14.11:2.5.1:2.7.2 +3.1.4:4.4.1:4.1.2:2.6.1 +2.3.1:1.1.1:2.3.1:3.5.1:4.1.1 +3.1.1:4.1.1:1.1.1 +3.1.3:2.1.2:1.1.1:6.3.3:1.5.1:1.13.11 +6.2.1:3.1.3:3.5.1:4.1.1:3.4.13:2.1.1:6.3.3:1.2.1:6.3.5 +4.4.1:4.4.1:4.1.1 +1.2.1:6.3.5:4.4.1:4.2.3:5.4.99:2.7.1 +5.1.1:3.5.99:2.1.2:4.2.1:2.3.1 +2.7.1:2.5.1:3.5.1:1.1.1:4.1.2:6.3.4 +4.4.1:3.1.3:1.1.1:1.3.1:4.1.1 +1.2.1:3.1.3:1.2.5:2.7.7 +1.18.-:2.3.1:3.5.1 +2.3.1:2.7.4:3.5.1:2.7.7:5.3.1 +1.4.1:4.2.1:2.4.2:2.1.1:6.3.1:2.1.3:3.5.1:2.7.4:5.4.99:1.1.1 +5.3.1:1.1.1:2.7.1:2.4.2:2.3.1:4.2.1:6.3.4:1.2.4 +6.4.1:2.3.1:5.3.1:4.2.1:6.3.2:2.1.1:3.5.1 +9.9.9:5.4.2:2.5.1:2.3.1:1.2.1:3.1.1:2.7.1:1.2.1:4.1.1:3.1.3:6.4.1:2.3.1:4.4.1 +2.3.1:2.7.2:2.7.2:2.3.3 +1.1.1:3.5.1:2.1.2:1.3.3:2.5.1:2.3.1 +1.2.1:2.1.3:4.3.2:3.6.1:3.5.1:4.3.1:3.5.1:1.4.1:1.5.1:2.7.6 +5.4.99:4.2.1:1.1.1 +4.3.1:4.3.2:2.7.7:3.5.3:1.5.1:2.5.1:3.1.1:1.5.1:2.7.1:4.3.2 +2.7.7:1.1.1 +2.5.1:4.3.1:4.3.1 +3.5.3:2.7.1:4.1.1:1.1.1:1.5.1:4.1.1:3.2.1:3.5.1:3.1.3 +5.4.99:2.7.1:4.3.1:2.5.1 +5.-.-:2.3.1 +2.7.1:2.7.1 +5.4.2:1.5.1:2.1.2 +1.2.1:5.4.2:1.1.1:1.7.99:5.4.2:6.3.3:1.5.1 +1.1.1:6.3.4:1.3.1 +2.3.1:2.1.3:3.2.1:2.8.3:1.2.4:2.4.2:1.-.-:1.2.4:2.4.2:2.3.1:2.1.2 +2.7.2:6.3.3:2.1.2:2.6.1:1.5.1:4.3.1:3.1.3:2.3.3:3.1.3:2.4.2 +2.3.1:1.1.1:1.2.4:3.1.4:2.7.1 +2.7.4:6.3.4:3.5.5:2.7.6:1.1.1:4.4.1:2.1.2:3.5.1 +2.7.8:1.2.1:4.1.1:4.1.1:2.7.4:5.3.3 +2.7.2:2.5.1:5.3.1:2.3.1:2.7.6:2.5.1:2.5.1:5.1.1:2.2.1 +2.7.2:6.3.4:2.1.1:4.2.1 +3.5.1:4.4.1:2.7.4:3.6.1:2.7.7:1.5.1 +3.1.3:2.7.1:2.5.1:3.2.2:1.5.1:4.2.1 +1.5.1:2.4.2:2.7.4 +5.3.1:4.1.3 +6.3.3:1.3.1:2.4.2:3.5.3:2.7.7:5.3.1:1.5.1:4.2.1 +6.3.4:3.5.3:2.7.1:1.7.1:5.4.99:3.1.3:1.2.1:6.3.4 +1.5.1:2.5.1:5.4.2 +4.3.2:2.3.1:3.5.1:5.1.3:5.4.99:3.5.1 +2.7.1:4.1.1:2.4.2 +4.1.1:1.2.4 +2.5.1:3.5.1:4.1.1:2.6.1:2.1.3:4.1.1:4.1.2 +1.7.2:2.4.2:6.3.1 +2.1.1:2.7.7:2.3.1:2.7.7:1.4.1:2.4.2:6.3.3 +2.6.1:1.1.1:5.4.2:2.3.1:2.1.3:6.3.5 +4.1.1:1.2.1:1.2.7 +2.7.1:2.3.1:4.3.1:1.1.5:6.3.1:4.4.1 +4.1.1:2.3.1:4.2.3:3.1.3 +3.5.1:2.5.1:2.3.1:6.3.4 +3.1.4:6.3.4 +2.1.1:2.7.7:1.5.1 +2.7.1:1.7.99:2.4.2:5.4.99:2.6.1 +4.1.1:6.4.1:2.3.1:4.2.3:4.4.1:4.3.2:1.2.1 +1.2.1:4.1.1:1.2.1:2.7.2:1.17.4:2.6.1:2.6.1 +1.2.1:6.3.2:1.1.1:6.3.3 +5.1.2:6.3.4:1.4.1:2.7.1:2.5.1:4.2.3:2.5.1:3.1.3 +4.3.1:1.3.1:2.7.4:2.7.2 +2.2.1:2.7.1 +6.3.3:1.6.1 +5.4.99:6.3.4:4.2.3:3.1.4 +2.1.3:2.6.1:1.2.1 +4.4.1:1.5.1:2.7.7:1.1.1:2.4.2:4.1.1 +4.4.1:2.7.7:1.17.4:2.7.7:6.3.3:2.3.1:1.1.1 +2.7.4:2.7.1:5.4.99:6.3.4:4.2.1:2.7.9 +3.1.3:1.4.1:6.3.4:2.7.1:4.1.2:2.6.1:5.3.1:1.5.1 +3.1.1:2.3.1:1.1.1:2.7.7 +6.3.5:2.6.1:2.6.1:4.3.2 +2.7.2:1.4.3:2.7.2:4.2.3:2.8.1:3.5.1:2.4.2:2.7.1 +2.4.2:4.2.1:2.7.8:2.7.2:1.1.1:2.3.1 +3.5.3:3.6.1:2.5.1:2.5.1 +2.7.6:2.3.1:4.1.1:2.7.4:3.1.3:4.1.1 +2.7.2:1.5.1:3.4.13:4.2.3 +6.3.4:6.3.5:4.2.1 +5.3.1:4.1.1:4.2.1:1.4.1:1.1.1:3.5.1 +2.7.7:3.5.1:2.7.2 +4.2.1:3.5.5:3.1.4:2.6.1 +2.1.2:1.2.1:2.3.3:2.3.1 +2.7.1:6.3.4:2.7.4 +1.3.1:1.4.1:2.7.1 +4.1.1:2.4.2:4.1.1:3.1.3:2.7.2:6.3.5:5.4.99:3.5.3:2.7.6:6.3.3:2.4.2:4.3.1:2.1.1:1.14.- +3.5.1:1.5.1 +6.3.4:3.1.2 +6.3.4:3.5.3 +2.5.1:5.4.2:2.7.1:4.3.2:2.7.7 +1.7.1:5.4.2:2.7.6:5.-.-:4.3.2 +3.1.7:2.1.4:1.2.1:3.2.1:3.5.1:3.1.3 +6.3.4:6.3.3:2.6.1:9.9.9:2.1.1:5.1.3:3.5.1 +3.4.13:1.2.1:2.7.4 +3.5.3:2.1.3:2.7.7 +2.3.1:2.1.3:4.1.3:2.7.1 +6.3.5:6.3.5:2.5.1:6.1.1:1.2.1 +2.4.2:3.5.3:1.4.4:1.5.1:4.2.1:4.3.2:2.1.3:1.7.99:1.2.4:1.2.1 +3.4.13:3.5.1:2.5.1:1.2.1:2.7.1 +6.3.4:2.3.1:4.2.1:5.4.2 +1.2.1:1.2.1:1.2.1:2.6.1:3.6.1:1.1.1:2.5.1 +3.6.1:4.3.1:6.3.5:2.7.8:1.2.1:2.7.2:4.1.1 +2.4.2:2.7.2 +2.7.4:1.3.1:6.3.4:4.3.2:2.4.2 +1.4.1:2.7.7 +3.1.3:4.1.2:1.3.99:2.1.3 +2.1.2:2.5.1:3.5.1 +2.1.1:1.2.1 +4.1.1:3.5.1:2.7.1:4.2.1:1.1.2 +2.7.1:2.7.1:2.1.3:3.1.3 +3.5.3:3.5.3:6.3.4:3.5.1:4.1.1:1.5.1:4.4.1 +4.2.1:4.2.3:1.2.1:2.7.2:4.2.1 +3.5.1:5.1.3:2.7.9 +1.2.1:6.3.4:2.3.1:2.3.1:1.4.1:4.1.1:1.2.1:3.2.1:4.2.1:4.1.1:2.6.1 +2.7.2:2.8.3:6.3.1:4.4.1:4.4.1:2.5.1:4.1.1 +2.3.1:1.2.1:2.7.4:2.7.7:2.3.1 +2.1.1:4.1.3:2.3.1 +2.7.2:3.5.1:1.2.1 +2.3.1:2.5.1:4.1.1:6.3.4:2.6.1 +2.3.3:2.4.2:2.3.1:3.1.3:4.1.3 +5.4.2:1.3.3:2.1.1:5.4.2:2.6.1 +4.2.1:5.3.1:2.3.1:2.3.1:5.1.3 +1.-.-:1.2.1 +2.7.7:6.1.1:6.3.4:1.5.1:6.3.3:2.7.2:2.7.2 +3.1.4:1.1.1:1.2.1:4.3.1:6.3.4:5.1.2:2.3.1:6.3.3:2.7.1 +1.13.11:1.2.1:1.2.1:2.7.2:1.2.1:1.4.3:2.7.2:1.1.1:1.1.1:4.1.3:4.1.1:4.1.1:1.5.1:2.7.1 +5.3.1:2.7.4:9.9.9:2.6.1:3.1.4 +4.3.1:5.4.2:3.6.1:6.3.5:1.5.1:2.6.1:3.3.1 +4.1.2:2.7.1:5.4.2:2.7.2:6.3.2 +6.3.4:5.3.1:6.3.2 +6.3.3:5.3.1:1.3.99:5.1.3:3.7.1:3.3.1 +2.7.7:6.3.5:5.4.2 +1.1.1:2.7.4:4.4.1:2.6.1:1.2.1 +2.7.6:2.7.1:3.5.1:2.7.2 +1.5.99:4.1.2:1.3.99:1.3.1 +4.2.3:6.3.4:1.2.1:4.2.3:2.4.2:3.1.4:2.7.8:4.1.1:2.5.1:4.1.1 +3.5.3:1.1.2:5.3.1 +4.2.1:4.2.1:2.5.1:1.8.1:5.4.2 +2.6.1:5.3.1:4.1.2:2.7.1 +1.4.1:5.4.2:2.6.1:2.5.1:4.2.1:3.6.1 +1.5.1:2.3.1:4.1.1:6.2.1:2.1.1:3.5.4:2.6.1:2.4.2:2.6.1:4.2.1:4.3.2:3.5.4:2.7.1 +2.7.7:2.4.2:4.4.1:2.7.1:3.5.1 +4.3.1:1.5.1:4.4.1:1.1.1:4.1.3 +2.7.8:2.3.1:1.2.4:1.1.1:2.4.2:3.1.3:2.1.3:2.7.1 +3.1.1:2.8.3:4.2.3:6.3.4:2.3.1 +2.3.1:1.1.1:1.1.3:5.3.1 +3.1.3:2.7.1:1.5.1 +2.1.3:2.3.1:4.1.2:4.1.1:6.2.1:5.3.1:4.3.1:2.3.1 +2.4.2:1.3.1 +3.5.3:4.1.2:2.1.2:6.3.4:3.7.1:4.2.1:1.1.1:3.5.1 +4.2.1:2.1.1:2.7.2:2.7.2 +2.7.2:1.5.1:6.3.4:2.2.1:4.1.1 +1.1.1:4.3.1:2.3.1:2.7.2 +2.7.1:4.1.2:3.5.1:4.3.1:4.3.2:1.2.4 +4.4.1:2.5.1:4.1.2:2.7.9 +2.7.1:4.2.3:3.5.4:2.7.1 +4.4.1:2.3.1:3.1.3:1.2.4:1.5.1:2.3.1:2.6.1 +3.5.3:3.2.2:6.3.3:2.3.1:2.1.2:3.1.3:2.3.1 +4.3.2:2.7.1 +4.1.3:2.7.4 +3.1.3:1.2.1:6.3.2:1.2.4:2.3.1:1.5.1:6.3.3:4.2.- +4.1.2:2.7.6:2.5.1:4.1.3:6.3.5 +1.3.3:2.3.1:2.5.1:2.6.1 +3.5.1:2.6.1:4.1.1 +5.4.99:1.2.4:1.2.1:6.3.5:2.3.1:1.5.99:2.4.2:2.3.1:2.7.1 +3.4.11:1.2.1:2.7.2 +6.3.1:2.7.7:6.3.5:1.7.2:1.2.1:2.6.1:2.3.1 +2.6.1:6.3.1:2.6.1:2.7.1:2.7.7:5.1.2:4.2.3 +2.7.4:3.5.1:4.3.2:4.2.1:2.1.1:1.1.5:3.6.1:5.3.1 +1.2.1:1.1.1 +1.2.1:2.7.4:4.1.1 +2.7.1:1.7.2:4.1.1:4.1.2:6.3.5:1.8.1:2.7.2:2.3.1:2.7.7:1.1.1:1.5.1 +2.3.3:1.4.1:1.2.1 +2.3.1:4.1.99:4.1.2:2.7.4 +5.1.2:6.3.4:3.5.1 +6.3.1:2.3.1:4.1.2 +2.7.1:3.5.1:3.5.3:5.4.99:2.7.9:2.6.1:3.5.2 +1.5.99:2.3.1 +1.17.1:2.7.1:4.3.2 +5.4.99:1.1.1:4.3.2 +1.3.99:4.3.2:1.1.1 +2.7.7:2.7.1:1.2.1:2.3.1:4.3.1 +4.3.2:2.3.1:3.5.1:2.7.4:3.5.3:1.1.1 +4.3.1:2.5.1:5.3.1:2.7.1:6.2.1 +4.3.2:2.4.1:2.7.7:4.2.1 +6.3.1:1.1.1:2.7.1:4.1.1:4.1.2 +4.3.1:6.3.5:2.3.1 +2.7.1:1.5.1:4.2.1:6.3.2:2.7.7:4.1.1:2.3.3:1.2.1:1.2.1 +4.2.1:3.6.1:4.1.1:1.1.1:2.7.2 +2.6.1:3.5.1:4.4.1 +2.1.1:1.1.1:3.5.4:3.5.4:2.6.1:4.3.2 +3.2.2:2.7.1:5.3.1 +5.3.1:2.1.2:1.4.1:4.2.1:1.5.1:4.3.1:1.5.99:1.1.1:3.5.1 +2.1.2:3.1.3:3.3.1:1.11.1:5.1.2:3.6.1 +2.1.3:2.3.1:2.3.1:3.6.1:1.17.1 +1.4.99:2.6.1:5.4.3 +2.3.3:2.6.1:1.1.1 +4.1.2:1.1.1 +4.1.2:1.2.1:6.3.1:5.1.3 +2.1.2:2.1.2:2.7.6:4.2.3:6.3.5:2.8.1:3.7.1:2.1.1 +3.6.1:2.3.1 +2.3.1:4.2.1:6.3.4:2.6.1:2.7.7:2.5.1:2.6.1 +2.7.4:1.2.5:4.4.1 +6.3.4:3.1.4:3.1.1:3.2.1 +1.4.1:1.3.3:6.3.4:3.6.1:4.2.3 +1.4.1:2.3.1:3.5.4 +5.4.2:1.1.1:5.3.1:5.4.99:5.1.3:6.3.3:1.4.1:2.6.1 +3.2.1:2.1.4:2.3.1:2.7.1:4.2.1:2.4.2:5.4.2:4.1.2:1.5.1 +2.3.1:2.7.7:6.3.2 +1.2.4:1.18.1:6.3.4:4.4.1 +4.3.2:2.1.3:2.3.1 +1.14.12:2.3.1:9.9.9:4.4.1:1.1.1:1.4.4:3.5.4:3.5.1:6.3.5:3.5.1:3.5.3 +6.2.1:4.1.1:2.4.1:1.17.4:2.7.1:3.1.4:4.1.1:1.2.1 +3.1.3:2.7.8:1.3.99:2.4.1:2.7.2:2.5.1:6.3.1 +5.4.2:2.7.6:2.7.1:2.7.2 +2.7.1:6.3.4:2.1.2:6.3.2:5.3.1:2.3.1 +1.2.1:3.5.1:2.7.7:6.3.4:6.2.1 +2.6.1:6.3.5:2.7.6:4.1.1:4.1.3:1.4.1 +2.7.6:3.2.2:1.8.1:6.1.1:5.4.2:5.4.99:2.3.3:6.3.1:2.1.3:3.1.1:4.2.1:1.4.1:1.2.1 +4.3.1:1.4.1:2.6.1:1.1.1 +4.1.1:5.4.2:4.3.2:2.5.1:2.3.1:6.3.2:1.5.1 +3.2.2:3.5.1:2.3.1 +6.3.2:3.5.1:2.7.4:1.7.99:5.3.1:4.4.1:1.2.1:2.1.1 +6.3.2:2.7.1 +2.7.4:5.1.2:6.2.1:3.1.3 +2.7.4:3.5.1:6.3.4 +3.5.1:2.4.2:2.1.4:1.1.5 +4.3.1:2.4.1:2.3.1:6.2.1:6.3.2:5.4.2:6.3.4 +2.7.2:1.2.1:2.3.1 +1.2.1:1.2.1:2.7.2:3.1.3:1.2.4:5.3.1:6.4.1 +3.5.3:1.5.1:2.3.1 +2.1.2:1.2.1:6.3.4:2.3.1:4.2.1:4.1.3:6.3.4:3.5.3:1.1.1:6.3.2 +2.7.1:1.2.4:1.4.99:4.3.2:2.3.1 +3.6.1:2.6.1:1.3.99:2.3.1:1.2.1 +5.3.1:4.3.2:1.17.4 +1.1.1:2.7.2:1.3.3:1.14.11:6.3.4 +1.14.16:2.3.1:3.1.3:5.4.2:2.5.1 +5.3.1:2.7.4:2.7.1:1.2.1:5.3.1:2.7.4:2.1.3:2.7.1:2.8.3 +2.1.2:3.5.1:1.2.1:4.1.2:6.3.3:6.4.1:1.13.11:2.7.4 +6.3.1:2.5.1:2.-.-:2.7.1:3.5.1:1.1.1:6.3.2:2.3.1:2.6.1:3.5.1:1.1.1 +2.3.3:1.7.2:1.1.1:2.5.1:2.3.3 +4.3.1:1.17.1:2.5.1:1.1.1:2.7.7:2.5.1:2.4.2 +4.4.1:2.3.1:2.3.1:6.3.4 +2.7.8:2.7.1:1.8.1:2.7.7:5.4.2 +2.7.6:3.2.1:2.7.7:2.3.1:2.3.3:2.7.1:2.1.4 +1.4.1:2.7.2:5.4.99:2.4.2:2.7.1:2.1.2:2.4.2:6.3.4:2.5.1:1.1.1:1.3.99:1.1.5:3.6.1 +3.6.1:1.3.3 +2.3.1:6.3.5:5.4.2 +2.4.1:3.2.2:6.4.1:3.1.2:2.1.2 +1.14.13:5.1.2:4.4.1:4.2.3:2.7.1 +5.1.3:2.7.1:3.5.5:4.2.3 +4.3.1:2.6.1:2.4.2:5.4.2:4.2.1:5.1.3:4.4.1:2.3.1:3.4.13:2.3.1 +2.3.1:1.5.1:3.1.3:1.5.1:2.4.2:6.3.2 +4.1.3:6.4.1:5.4.2:4.1.1:2.1.2:1.2.1:3.5.3 +1.1.1:2.2.1:1.4.99:1.5.1:2.3.1:2.7.4:5.3.1:2.5.1:2.7.7:1.1.2 +1.4.1:2.4.2:6.3.2 +2.3.1:3.2.1:1.4.1:6.3.4:3.5.1:2.6.1 +6.3.2:1.1.1:5.1.3 +6.3.5:6.3.3:2.4.2:1.1.1:3.5.3 +2.6.1:3.5.1:3.1.3:4.4.1:3.2.1 +4.1.2:2.5.1:2.3.1 +6.3.5:3.1.3:2.3.1:1.8.1:5.1.1:2.3.1:1.1.1:4.4.1:1.17.1 +1.2.1:1.2.1:1.4.1:4.2.3 +3.5.1:4.2.1:6.3.2:2.3.1:2.1.2:6.3.4:2.3.1:2.2.1:3.1.3:3.5.4:2.7.2:3.5.1:2.6.1 +1.1.1:3.5.3:2.7.7:6.3.2:2.6.1 +2.4.2:3.1.3:2.1.1:2.4.2 +2.1.3:2.5.1:1.2.1:6.3.5:2.7.4:2.7.1 +4.1.3:1.5.99:2.7.7:4.2.3:6.3.4:2.3.1 +1.1.1:2.7.7:4.3.2:6.3.5:2.3.3:4.3.2 +2.7.2:4.3.1:2.2.1:4.1.1:5.3.1:4.1.1:2.7.2:4.2.1:2.7.4 +6.3.4:4.2.3 +5.3.1:1.5.1:6.3.4:4.3.1:3.5.4 +2.3.1:6.3.2:2.1.2 +2.4.2:3.5.1:2.6.1:2.7.4:4.4.1:1.-.- +2.5.1:2.7.6:6.3.4 +2.4.2:5.3.1:5.4.99:2.3.1 +1.4.1:4.1.2:2.5.1:1.1.1:1.1.1:3.5.1:2.5.1:1.3.3 +6.3.2:3.1.1:2.5.1:2.5.1:3.5.99:2.1.3 +1.2.1:3.6.1:6.3.2:2.1.2:2.3.1 +2.7.6:2.3.1:2.4.1:5.3.1 +2.7.7:2.7.1:2.3.1:6.3.4:5.4.2:4.1.1 +6.3.4:5.3.1:1.1.1 +4.1.2:1.1.1:1.5.1:6.3.2:1.2.1:6.3.2 +2.5.1:4.1.1:4.1.3:1.4.1 +4.1.1:6.3.2:3.1.3:2.3.1:4.3.2 +4.4.1:5.4.99:4.1.1:2.5.1:4.3.2:4.3.1:3.5.3 +1.1.1:3.1.1:1.14.13:5.3.1:4.1.3:4.3.2:2.3.1 +6.2.1:1.7.99:2.7.1:1.2.1:2.7.8:1.1.1:6.3.4 +5.3.1:1.5.1:2.1.3:6.3.4 +2.7.9:2.3.1:1.2.1:2.7.9:2.7.7:3.5.1 +2.1.1:2.7.1:2.5.1:6.2.1 +1.1.1:4.4.1:2.7.7:1.2.1:3.5.1:3.5.1:4.3.2:6.3.5:1.1.1 +2.7.1:3.6.1:1.1.1:2.6.1:1.4.3:4.1.3:3.5.2:3.6.1 +3.6.1:1.2.4 +3.1.1:2.3.1:4.4.1:2.5.1:2.6.1:2.7.6:3.6.1:2.7.4 +2.6.1:1.2.1:2.7.7:1.2.1:4.3.1:3.1.3 +2.7.2:2.1.1:5.1.3:1.2.4 +1.1.3:2.6.1:2.7.7:2.3.1:6.3.4:6.3.4:4.2.3:4.3.1:2.7.2 +2.3.1:3.5.1:3.1.1:1.14.13:1.1.1:2.6.1 +2.3.1:1.3.1 +4.1.1:2.3.3:5.4.2:1.17.7:2.2.1:2.3.1:1.2.4:2.3.1:2.1.3:1.3.99:4.1.1:2.1.3:4.2.1 +1.3.3:2.3.1 +6.3.2:6.3.3:2.3.1 +1.1.2:4.1.2:3.5.1:6.3.4:6.3.3 +3.2.1:1.17.4:4.1.2:6.3.3:1.1.1:1.1.1 +1.5.1:1.13.11:3.5.3 +4.1.2:2.7.1:3.5.1:1.7.2 +2.1.2:6.3.3:1.3.1 +2.7.1:1.5.1:2.6.1:4.4.1:4.1.3:2.3.1:2.6.1:5.4.99:2.3.1:5.4.99:5.1.1:4.1.2 +4.1.1:4.2.3:2.1.1:2.1.3:2.8.1:2.7.2:2.1.1:1.2.1:5.4.2:2.7.7 +2.5.1:2.5.1 +1.1.1:2.7.1:2.7.6 +1.2.1:4.2.3:1.4.3 +1.2.1:3.5.99:1.1.1:6.3.5:3.5.3:1.2.1:4.1.1:4.1.1:1.2.1:2.5.1:2.5.1:2.3.1:5.3.1:2.5.1:1.5.1 +5.1.3:6.3.2:2.7.7:6.3.2:2.6.1:4.1.2:1.5.1:2.1.2 +2.1.1:2.1.2:2.7.4 +1.1.1:4.3.2:6.3.2:5.3.1 +2.3.1:4.2.3:1.1.1:3.6.1:2.8.1:6.3.5:3.2.2:1.7.1 +1.1.1:1.2.4:6.3.4:1.1.1:3.1.2:4.2.-:5.4.99 +5.3.1:1.2.1:3.1.3:5.4.99:2.3.1:3.5.4 +1.2.1:1.1.1:2.7.2:4.1.1:2.7.1:6.3.4 +6.3.4:3.1.3:4.2.1:3.5.1:4.2.3 +2.7.2:2.3.1:2.7.1 +2.1.2:3.5.1:2.7.1 +3.8.1:4.2.3:9.9.9 +3.5.1:6.3.4:6.3.4 +4.1.3:5.4.99:1.3.3:6.3.4:1.4.1:6.3.4:6.3.2:6.3.3:3.1.3:2.7.7:4.1.1 +4.1.3:1.1.5:6.3.4:6.1.1:4.1.1 +2.2.1:2.5.1:4.1.1:3.5.3:1.1.1 +2.6.1:1.2.1:1.5.1:1.4.4:5.4.2:2.3.1:3.1.4:2.5.1 +5.4.2:6.3.4:2.7.2 +4.2.1:3.6.1 +4.1.1:4.4.1:1.5.99:1.1.1:2.7.4:2.3.1:4.1.2:3.1.3 +2.7.1:1.2.1:2.5.1:1.1.1 +2.5.1:6.3.4:4.3.1:2.7.4 +2.1.3:1.5.1:4.1.1:3.5.4:1.4.4 +3.1.1:2.1.1:2.7.1:2.1.3:6.3.2:1.5.1 +3.6.1:2.3.1:4.3.1:2.5.1:1.5.1 +6.3.3:3.5.4:6.3.4:1.4.3:3.2.1:2.7.1 +3.1.2:2.1.3:4.1.1:2.1.3:2.6.1:1.2.1 +2.5.1:4.3.1:1.2.1:6.3.4:4.4.1:5.3.1:2.6.1 +1.5.1:2.4.1:2.7.7:2.4.2:1.2.1:2.7.4:5.4.99 +2.7.1:2.7.6:2.3.1:2.7.9:2.5.1:4.1.1:1.3.99 +5.3.1:2.7.7:3.1.1:1.2.4 +3.1.1:1.1.1:6.3.4:3.1.5:2.5.1:1.4.1:6.3.4:3.2.1 +4.3.1:3.5.1:2.6.1:6.3.5:6.4.1 +2.7.6:3.5.2:2.2.1 +1.2.1:1.5.1:2.3.1:2.8.1:2.4.2 +3.5.3:1.2.1:4.1.1:4.3.2:4.1.1:5.3.1:2.3.1 +4.2.1:2.6.1:2.7.1:3.5.1:3.6.1:9.9.9:2.7.1:4.2.1:2.7.4:4.2.3 +4.2.1:1.5.1:2.4.1:2.5.1:4.2.1:6.3.3:1.1.1:2.6.1:6.3.4 +2.7.2:2.6.1 +2.5.1:1.1.1:1.3.99:2.8.1 +4.1.1:1.8.1 +3.5.1:2.1.1:6.3.5:6.3.4:4.2.3:2.3.1:1.1.1:1.3.3:4.2.1 +2.7.4:1.2.4 +4.1.3:2.3.1:3.2.2:2.1.2:1.17.1:4.4.1 +1.3.1:1.8.1:2.7.1:6.3.4:2.3.1:4.2.1:2.3.1:2.6.1 +1.2.1:4.2.1:2.7.2:1.2.1:5.4.2 +6.3.4:2.6.1:1.8.1:4.1.1:1.1.1:1.5.1:5.4.2:2.7.1:1.3.1:1.1.1:6.2.1 +2.4.1:2.7.4:5.1.1:5.4.2:2.6.1:2.3.1 +2.1.3:2.1.1:3.1.3:2.5.1:2.7.4:9.9.9:2.3.1 +6.3.2:1.4.1:4.3.1:4.2.1:1.3.99:3.5.4 +6.3.4:2.4.2:2.7.1:1.4.1:1.2.1:3.5.1 +5.1.3:2.6.1:6.3.1 +4.2.1:4.3.1 +1.1.1:2.1.1:6.3.5 +6.3.4:1.4.1:4.1.1:1.7.2:4.1.1 +2.3.3:2.7.4:2.7.1:1.2.1 +4.2.1:2.3.1:2.1.1:4.1.2 +4.2.1:2.3.1:2.5.1:3.1.3:2.1.1:1.11.1:5.4.99 +2.5.1:2.1.3 +2.7.6:2.7.4:2.5.1:6.3.5:6.3.2:4.2.1:4.4.1 +3.6.1:4.2.1:6.3.4 +2.1.3:5.1.2:2.4.1:1.1.1:2.1.1:1.2.1:2.3.1:2.7.1 +5.5.1:6.3.4:3.1.3:1.1.1:2.1.3 +4.1.3:2.5.1:1.4.1:4.2.-:6.3.2:6.3.4:4.3.1:6.3.5 +2.3.1:2.6.1:2.7.2:1.5.1:2.4.2:4.1.1 +4.1.3:4.1.1:2.7.1:1.1.1 +4.1.2:2.7.2:2.4.2:3.5.4:2.7.7:5.4.99:5.4.2:2.3.1 +2.7.1:3.1.7:1.1.1 +1.5.1:2.7.4:2.6.1:1.2.1:4.2.1:2.1.1 +6.6.1:5.1.1:5.4.2:2.7.4:6.2.1:3.5.1:4.2.-:5.4.1:3.5.3:2.6.1:3.5.4 +2.7.1:5.4.2 +3.5.1:5.4.2:2.1.1:1.2.4:2.5.1:3.1.3 +3.1.3:1.5.1:1.11.1:1.17.4:3.1.4 +1.2.1:2.1.3 +4.1.2:3.3.1:2.5.1:4.1.1:2.7.4 +2.1.1:2.1.2:1.1.1 +2.5.1:4.2.3:6.3.2:6.3.2:2.7.4:2.5.1:2.7.1:3.1.4:2.7.7:2.7.2 +1.2.1:6.3.4:3.2.1:4.1.1 +2.6.1:4.2.1:1.4.1:1.5.3:1.17.4:3.5.4 +2.3.1:4.1.1:4.2.1:2.7.4:2.3.1 +2.4.2:4.3.1:5.1.3:3.4.13:1.1.1:2.7.7 +4.2.1:2.7.4:2.7.8:1.1.2:2.5.1:6.3.2:4.1.1:3.1.2:5.4.99:2.7.1 +3.5.4:2.5.1:2.6.1:6.3.5:2.7.7 +3.5.1:2.5.1:2.7.1:2.7.7 +3.5.1:1.1.1 +5.1.3:4.2.1:2.7.4 +2.1.2:4.2.1:2.6.1:6.3.3:6.3.3:3.5.1:4.2.1:5.4.2 +2.3.3:5.3.1:2.7.7 +3.5.2:6.2.1:2.6.1:1.5.1:6.3.3:4.1.1 +1.6.1:1.1.3 +4.4.1:2.1.2:2.1.1:4.2.1:4.1.2 +6.3.4:2.4.2:4.1.3:1.1.5:4.1.1:2.6.1 +1.1.5:2.4.2:4.1.2:1.2.1:6.3.3 +2.7.1:2.1.2:2.3.1:3.1.7 +2.7.7:1.14.99:2.1.2 +4.2.3:2.5.1:4.2.3:4.2.-:3.5.4 +2.4.2:2.3.1:4.3.2:3.6.1:3.6.1:2.6.1:2.6.1 +4.1.1:3.6.1:2.1.2:6.3.2:3.5.1:1.2.1 +1.2.1:2.1.3:3.5.1:3.6.1:9.9.9:6.2.1:4.2.1 +2.7.1:4.3.1:2.6.1:5.2.1:1.4.1:6.3.5 +4.1.3:4.1.1:2.6.1:4.1.1:3.5.1:2.7.2:5.1.3:1.1.1 +4.1.1:3.2.2:2.3.1:1.6.1:2.6.1:1.5.1 +2.6.1:1.1.1:1.-.-:6.3.5 +2.3.1:1.4.1:2.1.1:2.1.3:2.2.1:2.4.2:6.3.2 +2.6.1:2.6.1:6.3.1:2.2.1:2.3.1:2.7.7:2.5.1:2.3.1:2.6.1 +4.1.2:4.3.2:4.2.1:2.1.1:2.7.8:2.7.2 +2.5.1:5.4.2:6.3.2:4.2.3:2.7.2:6.3.5:2.4.2:1.5.1 +2.7.1:1.2.1:2.5.1 +3.4.13:2.6.1:3.5.1 +6.2.1:4.2.1:6.3.5:3.5.1 +3.5.4:4.2.1:6.1.1 +1.3.99:4.4.1:4.2.1:3.5.3:4.2.3:6.4.1:5.4.99:2.4.2:4.2.1:3.13.1:2.4.2 +1.1.1:2.7.4:2.4.2:1.2.4 +2.6.1:6.1.1:2.7.1:2.7.2:1.3.99:3.5.2:1.1.99:4.2.1:2.4.2:6.3.4:2.5.1:3.1.3:2.3.1:4.2.3 +1.3.1:4.4.1:4.3.2:2.7.6:2.3.1:2.3.1:1.14.11 +1.2.1:5.3.1:5.1.3:5.4.2:4.2.3 +2.7.2:2.5.1:2.6.1 +2.7.2:1.4.1:2.7.1:1.17.1:1.3.3 +2.6.1:3.6.1:2.5.1 +1.3.99:2.5.1:3.5.3:3.2.1:4.4.1 +6.2.1:3.5.1:4.2.1:2.6.1 +1.2.1:6.3.5:1.5.1:2.3.1:2.1.1 +2.1.3:3.6.1:2.7.2:2.1.1:2.5.1:6.3.2:2.5.1:5.4.2:2.8.1:1.1.1 +4.6.1:2.3.3:1.1.1:2.7.2:2.3.3 +3.4.13:2.3.1:3.5.1:1.2.1:6.3.4:2.4.2:2.7.4:1.1.1:4.2.1:1.1.1:2.6.1 +2.1.2:1.4.3:2.5.1:1.1.1 +4.1.1:1.2.1:3.5.1:5.1.3:3.1.3:2.7.1:2.7.4:2.1.3:3.4.13 +1.2.1:2.2.1:2.7.2:6.2.1:2.8.1 +4.3.1:3.4.13:2.7.4:3.4.11:2.3.1 +5.1.3:5.1.3:1.4.1:6.3.5:1.3.99 +3.5.3:2.2.1:2.6.1:4.3.1 +3.5.1:2.5.1:4.1.1:1.3.1 +2.6.1:9.9.9:2.7.4 +2.7.7:2.3.1:3.1.4 +1.2.1:4.3.1:3.5.1:3.6.1:2.5.1 +2.7.4:2.7.7:2.5.1:1.2.1:4.3.1 +2.7.1:3.6.1:2.5.1 +4.1.1:6.3.3:2.7.7:6.3.4 +2.7.4:4.2.1:1.2.1:2.3.1:1.1.1:1.1.1:4.1.2:3.5.1:2.5.1:6.3.3 +2.1.3:1.5.1:1.1.1:5.1.3 +3.6.1:2.6.1:4.2.1:1.7.99:1.2.4:6.3.1:1.7.99:1.1.1 +5.4.2:2.3.1:6.3.3:6.3.5:2.7.7:2.7.1:4.3.2:1.4.1:2.7.1 +1.1.1:2.7.4:4.1.1:2.4.2 +1.3.1:1.8.1:3.6.1:2.1.1 +2.7.8:9.9.9:4.4.1:2.1.4 +2.5.1:2.5.1 +2.3.1:4.1.1:4.1.1 +3.5.1:2.1.3:3.2.1:1.13.12:3.5.1:4.3.1:4.3.1 +2.2.1:2.6.1:3.6.1:2.6.1 +6.3.4:3.5.2:3.5.1:2.3.1:2.5.1:2.5.1:3.6.1:3.1.3:6.3.1 +2.4.2:2.1.3:6.3.2:2.3.1 +6.3.2:2.3.2 +1.2.1:2.5.1 +6.3.1:4.2.-:5.4.2:3.5.3:2.7.1 +2.3.1:2.1.2:2.1.2:2.1.3:4.2.3 +1.4.1:2.7.1:4.1.2:6.3.4:4.1.1 +4.1.1:5.4.2:2.1.1:4.2.1:4.1.3:2.7.1:3.5.3:2.4.2 +6.3.4:5.3.1:1.1.5:2.6.1:4.2.1:2.1.2:4.1.3:3.1.3 +1.13.11:2.4.2:2.5.1:6.3.4:1.3.99:2.1.1:2.7.2:4.1.1:4.2.1:1.2.1:6.3.4:1.8.1:1.4.1 +2.7.1:6.3.1:2.5.1 +2.6.1:3.1.3:2.3.1:2.7.4:5.1.1:4.3.1:1.1.1:2.7.1:2.4.2:2.5.1:4.1.2:1.1.1:2.6.1 +2.1.2:4.3.1:6.3.2 +4.4.1:5.3.1:1.1.1:6.3.2 +1.1.1:2.1.1:1.1.1 +4.3.1:3.1.1:1.13.11:2.7.8:1.3.1:6.2.1:1.2.1:1.4.1:3.5.3:3.1.3:1.1.1 +4.1.1:1.3.99:3.5.1:6.3.4:2.4.2:1.8.1:1.1.5 +5.4.99:2.3.1:1.1.1:4.3.1:2.7.2:2.6.1:5.1.3:2.7.7:4.3.1:2.6.1 +6.3.4:6.3.2:5.4.99 +2.5.1:2.1.1:1.2.4 +4.2.1:4.3.2:1.1.5:2.1.1:1.1.1:2.7.8:4.1.3 +2.5.1:5.4.2:2.4.2:4.3.2:4.1.2:2.3.1:3.4.13:4.2.3 +6.3.3:6.3.5:2.7.7:4.2.1:2.7.1:1.2.1:2.6.1 +1.1.1:2.7.1:1.1.2 +2.6.1:2.7.1:2.7.4 +3.5.1:4.2.1:2.5.1 +1.4.3:6.3.2:2.5.1:4.2.1:1.5.1:2.1.1:2.3.1 +4.2.1:9.9.9:4.2.1:2.7.2 +6.2.1:3.1.3:4.4.1:1.2.1:6.3.4:2.5.1 +5.4.99:1.1.1:2.6.1:2.3.1:1.1.1 +2.3.1:4.2.1:1.5.1:3.6.1 +1.2.1:2.7.6:1.2.1:2.7.1 +2.4.2:3.5.1:2.2.1:6.3.5 +2.2.1:5.1.1:2.3.1:3.5.1:4.2.1 +2.7.4:1.2.4:9.9.9:2.7.4 +1.5.1:3.5.5:5.4.2:2.4.2:6.2.1:2.3.1 +4.1.1:2.1.3:6.3.4:3.5.5 +4.4.1:2.1.1:4.4.1:4.2.1:2.7.1 +1.13.11:2.7.1:6.4.1 +2.7.1:5.3.1:2.7.2:3.1.1:6.3.4 +6.3.4:2.6.1 +2.7.4:2.7.1:2.5.1:2.1.1:2.3.1:1.2.4 +3.4.13:2.7.2:2.1.2:6.3.2:3.2.2:3.2.2:1.2.1 +5.4.99:4.2.3:1.14.13:4.2.3:6.1.1 +2.6.1:2.7.1:2.7.7:1.1.1:1.5.1:4.1.1:3.1.3:4.1.1:4.4.1:5.3.3:4.1.1:2.7.4:1.2.4:2.4.2 +5.4.99:3.2.1:2.3.3:2.3.1:2.3.1:1.1.1 +2.7.1:6.3.4:6.3.2:1.3.3:6.3.3:2.7.8:6.3.3 +2.7.1:4.1.1:2.4.2 +1.4.1:5.4.2:4.3.2:5.3.1:3.6.1:3.6.1:4.1.1:2.1.3 +2.7.2:2.7.1:2.1.2:1.2.1 +6.3.2:6.3.5:2.4.2:2.4.2:3.1.1:2.6.1:2.4.2:2.3.1 +2.5.1:2.4.2:3.5.1 +6.3.5:2.6.1:4.2.1:4.1.1:2.1.1:2.7.4:2.1.3:4.3.2:6.3.2:1.4.1:3.6.1 +5.3.1:1.18.1:2.5.1:6.3.5:3.5.99:2.6.1 +2.7.4:1.1.1:6.3.4:1.1.1:3.1.1:3.5.3:2.3.3 +5.4.2:5.4.99:2.1.2 +2.4.1:2.7.8:4.1.2:2.7.2:2.6.1 +2.6.1:5.1.3:1.2.1:1.13.11:2.7.2 +1.13.12:6.3.5:2.7.1:2.5.1:2.5.1:1.2.1:3.5.3:2.1.1:2.7.1:1.1.1 +4.2.3:4.1.1:4.2.3 +2.7.1:1.1.1:5.4.3:3.5.1:2.7.6 +2.7.1:1.1.1:3.1.4:1.18.- +1.5.1:2.3.1 +2.3.1:4.3.1:4.2.1:2.6.1 +1.3.99:5.4.99:1.5.1 +2.1.2:4.2.3:2.7.4 +3.6.1:2.7.1:2.7.2:2.1.4:2.3.1:2.7.9:6.3.5 +2.6.1:2.3.1:6.3.4:1.2.1:3.5.4 +2.3.1:2.3.1:2.3.1:5.4.2:3.6.1:3.6.1 +5.3.1:3.5.1:2.7.1:2.6.1:2.6.1 +3.5.2:2.4.2:2.7.1:1.1.1:1.1.3:2.7.7 +2.7.4:2.7.4:6.3.4:2.7.9:6.3.5 +5.1.3:4.2.1:1.5.1:4.1.3:2.6.1 +3.5.4:2.7.4:2.7.1:3.1.3 +1.13.11:2.4.2 +2.7.1:4.3.1:2.2.1:6.3.2 +2.7.7:2.3.1:3.5.3:2.3.1:2.7.2 +1.7.2:2.4.2:5.4.99:5.4.99:2.7.7:6.3.4 +2.7.2:6.3.4:2.7.2:3.5.4:3.5.1:2.7.7:4.1.3:6.3.4:1.2.4 +6.4.1:2.5.1:5.3.1:3.5.3:1.2.1:2.3.1:2.7.1:2.4.2:4.1.2 +4.1.1:4.4.1 +5.4.3:4.1.2:2.7.4:1.4.3:3.1.1:2.5.1:2.4.2 +1.14.13:2.7.7:1.2.1:2.6.1:2.7.7 +5.3.1:4.1.1:6.3.3:6.3.4 +2.7.2:6.3.2:4.3.2:6.3.4:1.17.4:2.7.1 +3.5.4:1.7.99:6.3.3:3.1.1 +2.4.1:4.2.1:3.6.1:4.2.1 +6.3.4:3.1.3:4.3.1:3.6.1 +2.3.1:5.4.2 +3.1.3:2.4.2:4.2.3 +1.1.1:2.3.1:2.6.1:4.1.1 +2.6.1:3.1.4:4.1.3:3.1.3 +5.4.2:1.5.1:1.2.1:5.4.99:6.1.1 +2.1.1:2.3.1:2.3.3:5.3.1:2.5.1:2.7.7 +3.5.1:2.8.3:5.4.2:1.13.11:3.5.1:5.3.1:3.1.4 +2.1.3:4.2.1:2.6.1:4.2.1:2.5.1:4.2.1:3.2.2:4.1.1:4.2.1 +3.6.1:1.3.1:3.6.1:2.5.1 +6.2.1:4.2.3:1.5.1:5.3.1:2.4.2:1.5.1:4.2.1 +2.7.1:4.1.2 +2.4.1:3.5.1:4.1.1:2.1.2 +2.1.1:2.6.1:5.4.2:4.4.1:2.1.3:4.3.2:5.4.2 +2.7.1:4.3.1:2.2.1 +3.5.1:2.3.1:1.2.4:2.3.1 +1.17.1:2.4.1:3.5.1:5.3.1:2.7.1:2.4.2:4.2.1:2.3.1:2.7.6:2.4.1:3.1.4:1.2.4:4.1.1:2.6.1 +2.3.1:1.2.4:2.7.2:2.6.1:2.7.7:4.3.1:2.4.2:1.2.1 +1.1.1:2.7.1:2.6.1:4.3.1:2.6.1:2.3.1 +2.7.2:2.7.1:2.6.1:4.2.1:3.5.1 +3.5.1:2.4.2:6.3.2:4.1.2:1.2.1:3.3.1:4.2.3 +3.1.3:2.3.1:3.1.4:1.13.11 +5.3.1:2.3.1:2.3.2:4.4.1:1.5.1:6.3.5 +2.3.1:3.1.1:2.1.2:2.7.1:1.1.2:4.1.1:1.2.1 +2.3.1:2.6.1:3.5.1:2.3.1:1.13.11 +4.1.2:2.6.1:4.1.2:1.14.13:2.3.1:6.3.2:1.1.3 +1.7.1:3.5.1:2.8.1 +2.7.2:6.3.4:2.7.1:3.5.3:2.7.4:6.3.3:5.1.1:2.3.1 +3.5.4:4.2.1:4.2.- +2.7.4:2.7.7:2.4.1:2.7.2:3.1.3 +4.1.1:4.3.1:2.7.1 +2.7.1:2.1.1:6.3.4:4.1.1:2.1.2:1.3.1:4.2.1:4.1.1:4.3.2:2.3.3 +2.4.2:2.3.3:2.5.1:2.5.1:3.1.3:2.7.6:2.7.2:1.13.11:6.3.2:2.4.2:3.3.1 +1.1.5:2.3.3:5.1.3:6.3.4:2.3.1:3.1.1 +1.2.1:2.3.3 +1.2.1:6.3.4:4.2.3 +3.6.1:4.2.-:3.6.1:6.3.4 +5.4.2:2.1.1:4.3.2:1.2.1 +1.3.1:4.1.1:2.1.4:4.3.2:2.7.2:1.4.1:2.7.1:2.3.1:2.5.1:2.2.1:4.3.2 +2.3.1:4.3.2:2.4.2:4.1.1:6.3.4:4.2.1:1.1.1:2.3.1:2.7.1:3.5.4:4.1.1:3.1.3:2.5.1 +2.3.1:3.1.3:1.2.1:1.5.1:2.3.1 +1.4.1:6.3.5:6.4.1:4.1.1:2.7.1 +2.7.1:3.5.1:5.3.1:2.1.2:4.2.1:1.5.1:2.3.1 +4.3.1:4.2.3 +3.5.2:2.7.7:5.4.2:2.5.1:1.3.99:6.3.1:4.2.1 +4.3.1:5.4.99:2.3.1:2.7.4:5.4.2:1.1.1:4.3.2 +2.7.6:1.2.4:1.2.1:1.1.5:6.2.1:1.4.1:2.4.1 +6.3.2:2.6.1:3.5.3:6.3.3:4.3.1:1.1.1:4.2.- +3.5.1:2.1.3:1.4.4:5.3.1 +1.7.1:3.5.3:2.3.1 +6.2.1:3.5.4:1.14.16:1.2.4 +4.3.2:1.3.99:2.3.1 +2.4.2:2.3.1:2.4.2:2.1.1:1.2.4 +5.4.2:5.1.3:4.2.3:1.2.1:2.7.1:1.1.1 +1.4.4:4.2.1:1.4.1:1.1.99:2.4.2:1.2.4:1.1.1 +2.7.2:2.6.1:2.6.1:1.17.4 +5.4.2:6.3.3:4.1.3:5.3.1:2.1.2 +1.5.1:2.3.1:4.3.2 +4.4.1:9.9.9:1.1.1:4.1.1:2.6.1:2.6.1:3.1.1 +4.3.2:6.2.1:1.3.99:4.1.1:3.5.1:2.2.1:2.4.1:5.4.2:2.6.1:2.4.2:2.3.1:3.5.1:3.2.2:6.3.4 +1.-.-:4.1.2 +6.3.4:3.1.3:2.5.1:2.3.1:3.5.1:3.5.2 +6.3.4:6.3.5:1.1.1:1.5.1:1.4.4:2.6.1:5.4.2:4.3.1:2.1.2:2.3.1:5.3.1 +6.2.1:6.3.4:6.3.2:5.3.1:2.7.1:1.2.1:2.7.1:4.1.1:1.1.1:3.5.3 +2.7.1:5.1.3:1.2.1:2.7.7:1.1.1:2.7.2:5.4.2:2.1.3:2.5.1:1.2.1 +6.3.4:1.2.4:4.3.1 +5.4.99:2.1.1:2.7.4:3.6.1:1.5.1 +3.1.7:2.7.7:1.3.1 +2.7.1:3.5.1:1.1.1:1.2.1:2.6.1 +4.2.1:6.3.4:6.3.5:4.1.3:2.5.1:1.4.1 +1.4.1:2.7.1:2.6.1:2.7.2:2.7.7 +1.5.1:4.2.1:6.3.2:4.1.2 +2.7.1:2.1.3:3.2.2 +4.4.1:4.2.1:4.1.1:6.2.1:2.7.1 +4.4.1:4.2.1:6.1.1:6.3.3:2.7.1:2.1.3:5.4.2:2.3.1:2.1.2:4.2.1:2.7.2 +4.2.3:2.6.1:4.2.1:3.1.3 +2.3.1:3.1.2:2.7.4:2.6.1:1.2.1:4.1.2:4.3.2 +6.3.5:4.4.1 +3.5.1:1.1.1:6.3.1:2.6.1:1.4.1:2.3.3:4.1.2:2.3.1:2.7.1 +2.5.1:5.4.99:2.2.1:2.3.1:6.3.4:5.3.1:1.2.1:3.1.4:1.1.1:1.2.4 +2.1.3:1.5.1:4.2.3:6.2.1:1.2.4:5.3.1:1.8.1:4.3.2:1.7.2:6.2.1:2.1.2:4.2.-:4.3.2:2.5.1 +6.3.5:2.7.1:2.7.7:2.4.2:2.3.1 +4.1.1:1.5.1 +2.6.1:2.3.1:2.1.2:1.2.4:1.1.1 +2.4.2:4.1.3:2.7.1:1.7.1 +2.6.1:4.2.1:2.7.4 +2.3.1:1.2.1:2.3.3:4.1.1:1.1.1:2.7.4 +2.1.1:1.2.99:2.4.2:3.5.1:3.1.3 +3.1.4:4.2.1:5.3.1:2.7.2:1.1.1 +3.1.1:2.1.1:5.3.1:4.3.1:2.3.1 +4.3.1:1.2.1:2.5.1:4.1.2:3.5.1:2.5.1:2.3.1 +2.3.1:4.1.3:2.4.2:1.5.1 +1.3.1:4.2.1:2.4.2:1.1.5 +1.4.3:2.7.7 +1.1.1:4.3.1:4.4.1:2.3.1:1.1.1:1.1.1 +5.3.1:2.4.1:1.2.1:1.2.1 +1.5.1:2.7.1:1.5.1:4.1.2:4.3.1 +2.3.1:1.1.1:2.7.7:2.7.6:1.5.1 +1.1.1:4.1.1:3.4.11:2.7.7:2.7.1:6.3.1:2.7.4:2.1.1:6.3.3 +2.1.2:5.3.1:2.1.3:1.1.5:4.2.1:2.6.1:2.7.8:1.5.1:1.5.1 +2.7.4:3.5.3:2.4.2:1.5.1:4.2.1:4.1.1:5.1.1:4.1.1 +2.3.1:4.2.1:4.4.1:4.1.1 +2.5.1:5.4.2:1.7.99:4.1.1:3.5.1 +2.5.1:1.1.1 +2.7.4:2.4.2:1.3.99:3.4.11:3.1.2 +3.5.3:3.1.2:1.1.5:2.1.3:2.3.1:4.1.3:2.5.1:3.5.99 +2.6.1:2.2.1:2.7.9:4.3.1 +1.5.1:4.1.2:1.1.1:5.4.99:1.5.1:5.4.3:4.4.1 +2.4.2:2.7.4:2.3.1:3.1.2:4.1.2:6.3.4:6.3.3:2.4.1 +1.1.1:1.5.1:3.1.3:2.7.1:3.5.3 +1.4.4:2.6.1:2.3.1:2.5.1:2.7.1:2.2.1:4.2.3:5.3.1:2.7.2:3.5.1:2.7.1 +1.2.1:1.1.1:4.2.1:4.2.1:3.6.1 +4.-.-:6.3.4:6.3.4:4.1.1:3.5.1 +2.7.2:2.7.8 +3.5.3:2.1.3:2.5.1 +4.1.1:4.3.1:4.3.1:6.3.4:5.3.1:1.13.11:2.6.1 +4.1.1:1.2.1:2.4.2:4.3.1:6.3.2:5.5.1:2.7.1 +1.5.1:1.2.4:4.2.3:1.1.1:6.3.4 +1.1.1:4.1.2:2.7.7:3.5.1:2.1.3:4.1.1 +2.7.1:2.1.2:2.6.1:2.7.2:6.3.4 +2.7.1:4.2.3:2.7.1:1.5.99 +1.3.99:2.6.1:1.5.1 +2.5.1:2.5.1 +2.7.2:6.3.3:1.-.-:6.3.4:3.5.3:4.3.1 +2.1.2:2.4.2:2.-.-:2.6.1 +3.1.3:2.7.1:4.1.1:4.6.1:1.2.1:1.1.1:1.4.1 +2.6.1:6.3.2:4.3.2:6.3.4:2.1.2:3.6.1:2.1.2 +3.5.2:2.7.1:4.2.1:1.5.1 +2.1.3:2.1.1:3.5.1:1.5.1:5.4.99:3.1.1 +1.3.1:3.5.4:9.9.9:2.7.8:2.1.4:3.3.1 +2.7.1:2.5.1:2.7.2:5.3.1:2.3.1 +6.1.1:6.3.5:3.1.3:2.5.1:2.5.1 +2.6.1:1.5.3:1.1.1:1.1.1 +2.6.1:2.6.1:3.5.1:3.2.2:2.7.7 +5.4.2:6.3.2:2.3.1:4.1.1:2.7.7:1.3.1 +9.9.9:4.3.2:4.1.1:2.7.1:2.3.1:1.4.1 +2.6.1:1.2.5:1.2.1:2.1.3:4.2.- +5.4.99:2.1.3 +3.5.1:2.6.1:2.6.1 +4.3.2:4.3.2:2.7.2:4.1.1:3.1.3 +2.3.3:5.4.3:6.3.1:6.3.2:2.4.2:4.1.2:2.2.1 +2.6.1:2.1.3:4.2.1:4.3.1:3.1.4:2.7.4:2.7.2:2.7.1:4.1.3:1.1.1:2.4.2 +5.4.99:2.6.1:3.1.3 +1.4.1:6.2.1:3.5.99:1.1.1 +2.1.2:1.8.1:3.5.1:1.5.1:2.7.2 +2.3.1:2.3.1:2.3.1:1.1.1:4.2.1:1.1.1:6.4.1 +1.5.1:1.5.99:2.7.1 +5.1.1:6.3.1:1.1.1:3.1.2:6.3.4:2.7.1 +4.3.1:3.1.4:2.2.1 +2.7.1:4.1.2:6.3.1:2.3.1:4.1.1 +4.2.1:1.3.3:4.2.3:4.3.2 +3.5.4:2.6.1:2.7.2 +1.13.11:2.5.1:2.5.1:6.3.4 +1.2.1:4.1.1:2.5.1:4.2.-:5.1.2:1.3.1:1.2.1:1.2.1:1.3.3:2.3.1:1.2.1 +2.3.3:4.2.1:4.2.1:2.7.1 +4.2.3:2.7.1:1.1.1:2.7.2:2.5.1:4.1.1:1.4.1 +6.3.4:6.3.3 +3.6.1:2.7.1:4.3.1:2.1.2:2.4.2:2.6.1:4.1.1 +4.1.1:3.5.1:4.4.1:6.3.2:4.1.1:2.6.1:4.3.2:3.2.2:5.4.2 +1.5.1:2.7.4:2.2.1:1.2.4:4.1.1:1.2.1:2.3.1:1.5.1:1.2.4:2.5.1:3.5.1:2.1.2:6.3.1 +1.2.1:4.2.1:2.7.1:2.6.1:3.1.4:1.4.1:2.6.1:1.7.99:1.4.1:1.14.12:4.2.3:4.1.1:2.7.1:2.7.1:2.4.2 +4.-.-:2.1.3:1.5.1:6.3.4 +4.1.1:3.6.1:3.5.1:6.4.1:3.5.1 +3.6.1:2.1.2:6.3.3:2.7.1:4.2.1:2.3.1:1.3.99 +2.5.1:1.8.1:1.2.1 +4.2.3:4.3.2:4.3.2:4.1.1:2.7.1 +3.1.1:3.5.1 +6.3.2:4.1.1:2.5.1:5.4.2 +1.7.99:2.6.1:2.9.1:1.2.1:5.1.3:6.3.4:2.3.1:1.4.3:1.1.1 +6.3.4:3.6.1:2.5.1:2.3.3:2.7.6 +2.4.2:4.1.1:5.3.1:1.2.1:6.3.5 +1.7.99:4.1.3:2.1.2:1.1.1:1.3.3 +1.1.1:1.1.1:2.4.1 +3.6.1:4.3.2 +2.3.1:4.1.2:3.5.3:4.2.3:2.7.7:1.2.1 +1.3.1:2.7.7:1.4.1:1.4.1:2.5.1:3.5.1:1.2.1 +3.2.1:4.1.1:2.1.3:4.1.2:2.3.1:2.7.2:2.3.1 +6.3.3:3.5.3:2.7.6 +2.3.3:2.7.1:2.6.1:1.4.3:2.1.3:2.7.2:4.3.2:1.2.1:2.7.7:2.1.2:1.4.4:2.7.2 +2.5.1:4.1.1:4.4.1:3.1.1:2.7.1:3.5.1:2.3.1:2.4.2:2.1.2 +2.2.1:2.2.1:2.3.1:2.7.1:4.1.3:3.5.1:2.7.2:4.1.1 +2.2.1:1.1.1:4.1.1:2.1.4 +2.7.4:4.1.2:1.2.1 +2.3.1:2.7.7:1.1.1:3.1.3:5.3.1 +1.17.4:1.4.1:1.5.1 +1.18.6:2.1.2:2.7.4:5.3.1:4.-.-:2.1.1:4.3.1 +4.3.2:2.7.1:2.4.2 +3.2.1:4.1.2:2.6.1:3.1.1:5.3.1:2.6.1:1.7.2:6.3.1:2.8.1 +2.8.3:2.3.1:3.5.5 +5.3.1:1.2.1:2.7.6:1.2.1:3.5.99:2.3.1:6.3.5:6.3.2 +6.3.4:1.1.1:2.7.2:1.2.1 +2.4.2:3.2.2:6.2.1:2.8.1:2.8.3:6.3.5:1.2.1:4.1.1 +1.2.1:3.2.1:2.7.2:2.1.1:4.2.1:3.6.1:4.3.1:2.7.7 +3.5.1:2.7.1:6.3.4:2.5.1:1.4.1:5.3.3:4.3.2 +1.5.99:4.2.1:6.3.2:3.5.1:4.2.3:2.6.1:3.5.3 +1.1.1:3.4.13 +4.1.3:5.1.2:5.4.99:5.1.1:2.4.2:4.3.1:1.2.1:5.1.1:2.4.2 +3.1.1:2.1.3:2.1.4:4.4.1:3.4.13 +6.4.1:1.11.1:6.3.5:6.3.2:2.5.1:3.2.2:1.4.99:2.3.1 +6.3.4:3.2.1:6.3.5 +6.3.4:2.7.7:3.5.1:6.3.4 +2.1.4:6.3.1:1.1.1:2.4.2 +4.1.1:6.3.1:1.1.1:2.3.1:2.7.1:4.2.1 +6.3.4:4.4.1:1.4.1:2.1.3 +6.3.4:1.4.1:1.1.5:1.1.1:6.3.4 +6.3.2:2.3.3:2.3.1:3.1.3 +1.2.1:6.2.1:2.8.1:2.7.2:3.5.1 +1.8.1:4.1.1:3.1.1 +2.4.1:5.3.1:2.7.7 +1.1.1:1.1.1:5.3.1:5.1.3:3.5.1:2.1.2:3.1.3:2.5.1 +4.1.1:2.4.2:5.4.2:5.1.3:2.7.1:4.1.99 +2.7.9:2.3.1 +4.3.1:2.1.3:2.3.1:4.3.2:5.3.1:2.7.1:2.1.3:1.17.4:1.2.1 +2.3.1:2.7.7:3.1.3:6.3.1:3.6.1 +1.14.16:4.2.-:2.3.1:3.6.1:2.3.1:2.7.2:3.1.4:2.3.1 +3.1.3:4.3.1:4.3.1:5.1.3:3.13.1:4.3.2:5.3.1 +2.6.1:1.2.5:2.6.1 +2.7.1:2.3.1:1.5.1:2.1.2 +1.2.1:2.5.1:6.2.1:2.5.1 +6.3.4:4.3.2:2.3.1:6.2.1 +1.5.1:2.4.2:3.6.1:5.3.1:3.1.3 +5.4.99:1.5.1:6.3.5:2.4.2:2.7.4 +2.6.1:2.6.1:2.6.1:1.5.1 +2.8.1:2.4.2:2.1.1:3.4.11:3.5.1:3.5.4:4.1.1 +2.3.1:2.1.3:4.2.3:3.5.3:3.6.1:2.3.1:3.5.3 +3.5.1:1.2.1 +2.7.1:1.5.1:3.8.1 +4.1.2:4.2.3:3.6.1:6.3.4:2.7.4:3.5.3:2.7.1 +2.1.1:2.7.7:4.2.1:1.1.1 +2.3.1:4.1.1:2.7.4:3.5.1 +1.5.1:1.1.1:2.3.1:4.4.1 +3.5.1:2.5.1 +3.5.1:2.1.2 +4.2.1:4.3.1:3.5.1:4.1.1 +4.2.1:2.4.1:3.5.3:1.5.1:4.4.1:2.7.1:2.7.7 +6.4.1:2.1.1 +3.4.13:4.4.1:3.5.2:4.1.1:4.2.1 +3.1.4:4.4.1:3.1.4:6.2.1:4.1.2:1.1.1 +3.1.2:2.1.3:5.3.1:4.1.1:3.5.3:4.3.1:2.3.1 +2.7.1:2.6.1:2.4.2:4.1.1:6.3.2:3.5.1:1.4.1:6.3.5:5.1.1 +2.4.2:5.3.1:1.2.1:2.7.2:2.7.1 +6.2.1:1.4.3:1.1.1 +2.3.1:6.3.4:5.4.2:2.3.1:1.1.1:4.2.1:6.3.2:3.5.2:4.3.2:2.5.1:6.3.2:3.6.1 +5.4.99:2.7.4:5.4.99:2.1.2:4.3.2:3.2.1 +3.5.3:6.4.1:3.5.1 +1.4.1:5.5.1:2.3.1:2.3.1:2.7.2:1.1.1 +1.8.1:2.1.1:5.4.2:2.1.2:2.7.1:2.4.2:2.5.1:4.2.3:2.3.1:1.1.1:1.8.1:1.2.1 +2.4.2:2.7.2:4.2.3:4.1.3:1.5.1:1.5.3 +2.3.1:1.3.3:3.5.1 +2.4.2:3.1.2:2.3.1:4.4.1 +3.2.1:6.1.1:2.1.2 +1.13.11:1.1.1:1.2.4:6.3.4 +2.6.1:4.3.2:3.3.1:6.3.4:4.2.1:2.6.1 +2.3.1:2.1.2:3.1.3:1.5.1 +1.5.1:4.1.1:1.1.5:6.3.4 +2.3.1:2.7.7:9.9.9:2.5.1 +3.5.1:4.3.1:3.4.11:2.6.1:2.7.2 +2.3.1:5.3.1:4.1.2 +2.1.1:2.1.1:3.1.3:2.7.1:4.4.1:1.4.1:1.2.4 +6.3.1:1.8.1:6.3.5 +2.7.1:2.4.2:4.3.1:2.7.1:2.4.2:6.3.4:4.1.2:6.3.5 +2.7.1:6.3.3:4.1.3:2.7.7:2.3.1:2.7.4:3.6.1 +4.2.1:1.7.2:1.3.99:2.3.1:3.5.4:3.1.2:5.4.2:2.3.1:2.7.7 +4.2.1:3.1.1:2.3.3:1.1.1:3.6.1:2.1.2 +3.5.1:6.3.2:2.3.1 +3.2.1:3.2.1:2.4.2:9.9.9:2.7.2:2.3.1:1.3.3:2.1.1:1.1.1:3.5.3:2.7.7 +1.17.1:3.5.3:2.1.1:1.3.99:2.3.1:6.2.1 +2.7.2:2.1.1 +1.1.1:3.1.3:4.4.1 +4.1.1:4.3.2:5.4.99:1.2.1:2.1.1:3.6.1:6.3.5:3.2.1:3.1.3 +1.1.1:2.6.1:6.3.4:2.5.1 +2.5.1:1.2.1:4.4.1:1.8.1 +2.7.4:4.2.1:5.4.99 +6.4.1:2.5.1:2.4.2:1.1.2:1.4.1 +6.3.4:2.1.1:5.3.1:1.4.4 +2.7.2:1.1.1:2.7.7:2.3.1 +1.5.1:1.5.1:5.3.1:2.3.1:6.2.1:4.2.1:3.5.3:4.1.3:6.3.2 +2.6.1:6.1.1:3.5.4:4.2.1 +6.3.2:1.2.4:2.5.1:5.4.2 +1.2.1:2.7.2:1.4.1:2.1.3:1.1.1:2.7.2:2.7.1:1.4.3 +2.1.2:4.1.2:4.2.1:1.2.4:3.6.1 +6.3.4:2.3.1:2.3.1:2.7.7:2.5.1 +3.5.1:5.3.1:2.1.1:2.4.2:2.4.2:2.1.3 +2.1.3:4.1.1:1.1.1:4.3.1:4.3.2:3.5.1:2.4.1:4.1.1:1.2.1:2.7.4:2.7.2:1.2.1:5.1.3 +3.6.1:2.7.2:2.4.2:2.6.1:5.4.2 +2.3.3:2.6.1:2.7.4:5.4.99:6.3.4:2.7.7:4.1.1 +2.5.1:5.4.99 +2.5.1:2.1.1:2.6.1:4.2.1 +1.1.1:4.2.1:2.3.1:2.7.4 +1.5.1:5.1.1:6.3.4 +1.5.1:1.1.1:5.3.1:2.7.1:2.5.1:4.1.2:1.5.1:1.3.1:4.1.1 +1.13.11:2.3.1:4.1.3:6.3.2:5.4.2 +1.4.4:2.1.1:2.4.2:1.2.1 +3.5.1:4.3.1:1.1.1 +2.7.1:2.3.1:3.5.3:2.7.7:1.5.1 +4.3.1:1.1.1:1.4.1:1.1.1:2.3.1 +3.5.3:5.4.99:2.6.1:1.2.1:2.7.7:6.3.4:3.3.1:3.5.1:4.2.3:4.3.1:2.6.1 +1.1.1:2.7.1:2.7.6:2.7.8:1.1.1:3.1.3:1.2.1:5.4.2 +6.1.1:6.3.3:4.1.1:4.2.1:3.5.1:1.5.99:1.1.1:5.1.3:5.4.2:3.5.99:2.7.1:1.3.99:2.5.1:4.1.2:3.6.1 +1.5.1:6.3.4:1.5.1 +4.1.1:2.7.1:2.7.4:1.2.1 +4.4.1:3.5.1:2.7.1:3.5.1 +4.1.1:4.3.1:2.1.2:1.1.1 +2.7.1:4.3.2:4.2.3 +3.1.2:2.6.1:2.4.1:2.7.1:1.2.1 +3.1.3:4.2.1:2.3.1 +2.4.1:4.1.1:4.1.3:1.2.1:4.3.1 +2.7.1:3.1.3:1.13.12:4.3.2:3.5.4:4.1.1 +2.3.1:4.3.1:4.2.1:1.7.99 +3.1.2:4.3.1:3.5.2:2.4.2:2.7.2:2.7.6 +2.7.2:2.1.3:2.7.7:2.1.1:1.2.1:1.4.3 +3.5.3:1.2.1:3.5.3:1.2.1:1.2.1 +3.1.3:6.3.2:4.3.2:4.2.1:3.1.1:3.6.1:2.5.1 +4.3.2:2.7.2:2.6.1:3.5.3:2.1.1:2.7.7 +1.5.1:3.1.3:3.1.3:2.3.1 +4.2.1:2.3.1:2.7.1:1.2.1:5.4.99 +1.5.1:2.3.1:2.4.2:4.1.1:3.5.1:2.3.1:6.3.5:2.3.1:6.3.1 +1.4.1:3.1.4:2.7.1:4.2.1:2.7.6:2.4.2:2.7.2 +3.1.1:4.1.3:2.3.1 +1.1.5:3.5.1 +2.6.1:4.1.1:2.1.2:1.4.1 +2.7.1:3.6.1:4.2.1:2.7.1:2.1.1:6.1.1 +2.6.1:3.5.99:1.1.1:1.4.1:4.1.1 +1.1.1:3.5.1:2.7.6:1.2.1:2.6.1:4.2.1 +1.1.1:5.1.1 +1.5.1:3.1.3:1.1.1:4.1.2:1.3.3:2.5.1 +1.3.1:2.6.1:2.7.1:6.3.4:2.5.1:3.1.3 +2.7.7:4.1.3:6.3.4:2.7.1:6.3.5:6.3.4:2.3.1:2.7.1 +2.1.1:2.-.- +2.7.1:2.7.1:1.5.99:1.17.4:2.3.1:2.7.2:1.13.11:5.3.1 +2.7.4:6.3.4:2.4.1:2.3.1:2.7.8:2.3.1:1.1.1 +1.1.1:4.4.1:1.1.1:2.5.1 +1.1.1:4.3.1 +1.14.12:2.5.1:4.1.1:2.3.1 +6.3.2:4.3.1:2.1.2:1.3.99:2.2.1 +4.2.1:3.4.11:5.1.2:3.5.1 +3.5.1:5.4.2:2.5.1:2.7.1:2.3.1:1.14.16:6.3.4 +1.1.1:6.3.4:2.7.2:2.5.1:1.17.4:3.5.1 +2.7.6:4.3.1:6.3.3:2.3.1:4.3.1 +3.6.1:4.2.1:2.7.1:2.6.1:2.2.1:4.1.2:3.1.4:2.4.1:3.6.1:6.3.4 +1.2.4:6.3.3:3.5.1:2.7.2 +4.3.1:4.3.1:4.3.2 +5.4.99:2.7.8:5.4.2:2.3.1 +1.1.1:2.2.1:4.2.1:2.3.1:2.7.1:3.3.1:1.2.1 +2.1.1:1.3.3:4.1.2:3.1.3 +3.6.1:1.5.1:1.2.4:3.1.2:2.1.3:3.2.1:6.3.4:5.3.1 +2.1.1:2.7.4:1.5.99 +2.3.1:1.2.1:5.4.2:3.1.2:1.5.1:2.7.7 +2.6.1:3.6.1:2.5.1:1.2.1:1.2.1:1.2.1:1.2.1 +3.2.1:4.1.1:4.1.1:1.1.1:2.5.1:4.4.1:5.-.- +6.3.1:1.17.4:2.4.2:4.4.1:1.2.1:2.1.1 +2.1.2:2.1.3 +3.1.5:5.4.2:1.2.1:3.5.3:4.3.1:3.5.3:2.4.2:2.3.1:2.7.2:1.18.-:4.1.3:1.5.3 +4.1.1:2.6.1:3.1.3:3.5.3 +1.4.1:4.1.1:2.6.1:3.5.1:2.7.7 +4.1.1:2.4.2 +4.1.1:2.5.1 +1.1.1:1.1.1:2.3.1 +2.3.3:2.3.3:3.5.1:2.7.7:4.3.2:2.1.2:6.3.4 +4.1.1:2.6.1:2.6.1:3.5.1:2.7.8 +2.1.1:5.4.2:5.4.2:4.2.1:4.2.3:1.2.1:1.2.1:2.7.1 +6.4.1:4.2.-:1.5.1:2.1.1:3.1.3:6.3.2:3.5.1:6.3.4 +6.3.3:2.5.1:3.1.3:2.7.9:5.4.99:2.6.1 +1.3.99:4.1.2:1.4.1:1.2.1:1.4.3:5.1.1:1.5.1:2.1.2:2.6.1:6.3.5:2.3.1 +2.4.2:4.2.1:5.4.2:2.-.-:5.3.1:2.1.2:6.3.5 +2.3.1:4.1.1:2.4.2:2.6.1 +4.1.1:2.3.3:4.1.1:2.5.1 +2.1.2:2.7.1:3.5.1:2.3.1:5.4.2:3.1.3 +2.7.1:4.3.2:2.5.1:1.5.1:2.7.2 +5.3.1:2.3.1:1.97.1:2.3.1:4.1.1:2.6.1:1.13.11 +2.7.1:2.1.2:1.2.1:2.1.1:5.1.3 +2.7.7:1.5.1:1.1.1:3.1.1 +6.3.4:4.1.3:2.7.1:3.5.1:1.5.1:4.2.1:2.5.1 +2.1.2:3.4.13:2.4.2:3.1.3:6.3.5 +6.3.2:2.7.2:5.1.2:3.2.1 +3.6.1:4.3.1:9.9.9 +2.7.4:1.1.3 +5.3.1:3.1.3:2.7.2:2.6.1:4.1.2:1.7.3:2.5.1:2.3.1:2.3.1:3.5.3 +3.1.5:2.7.8:5.4.2:1.2.1 +4.1.1:1.7.2:6.3.5:2.6.1:2.5.1:2.7.2:4.1.1:4.1.2:4.2.1 +3.5.2:4.1.1:4.4.1:1.7.2:2.7.4:1.5.1:2.7.1 +2.1.1:4.2.1:1.4.1:3.5.3:4.1.1:2.7.7:1.1.1:3.1.1:2.6.1:1.7.99:4.1.1:1.2.1 +1.17.4:4.3.1:1.2.1 +2.7.1:2.3.1:2.4.2:2.7.4:1.14.16:6.3.4:9.9.9:2.6.1:1.5.99 +3.5.1:1.1.1:1.1.1:4.3.1 +3.5.1:3.5.1:4.2.3:1.1.1 +5.1.3:2.7.7:2.4.2 +6.3.5:2.3.1:3.5.1:4.3.2:3.5.2:3.5.2 +2.7.7:1.1.1:1.2.1:5.3.1:6.3.5 +3.2.1:3.1.4:2.3.1:1.2.1:6.4.1:2.1.2:5.3.1:3.5.1 +1.17.4:4.1.3:2.3.1 +2.3.3:4.3.2:1.1.1 +1.4.1:1.3.99:2.6.1:1.1.1 +3.2.1:1.1.1:2.3.1:6.3.4:9.9.9:2.7.1:3.6.1:6.3.5:2.7.2:2.6.1:2.5.1:1.1.1 +6.3.4:3.1.1:1.2.4:1.5.1:2.3.1:1.1.1:6.3.2 +4.4.1:2.7.6:2.5.1:2.5.1:4.4.1:6.3.4:6.3.5 +5.4.2:4.1.1:6.3.3 +1.1.1:4.2.-:4.3.2:2.1.3 +1.1.1:2.6.1 +2.6.1:1.2.1:3.5.2:4.1.3 +3.5.2:2.1.2:4.1.1:5.3.1 +1.2.4:1.3.99:2.6.1:2.3.1 +3.4.13:3.5.1 +4.2.1:6.4.1:4.1.3:2.5.1:1.2.1:2.7.2:1.1.1:2.6.1:2.3.1:3.5.1 +2.7.8:5.3.1:4.3.2:1.14.12:4.1.2 +3.1.3:1.8.1:1.1.1:4.1.1:4.2.1 +4.3.1:1.14.13:2.5.1:3.2.2 +6.3.2:2.7.1:1.2.4:1.2.1:6.2.1:3.5.1:3.5.1 +1.8.1:1.1.1:2.7.1 +6.3.2:6.3.4:2.7.1:6.3.4:4.2.3 +1.1.5:2.5.1:4.2.1 +1.2.4:4.2.3:2.3.1:1.5.1:6.3.4:4.1.1 +3.2.1:1.1.1:6.3.4:6.3.3 +2.5.1:4.1.2:4.4.1:6.3.4:4.1.2:1.1.1:2.1.2:2.7.1:6.3.2 +6.3.5:5.4.99:6.3.5:6.3.4:4.1.1:2.7.1:2.5.1 +4.2.3:6.3.5:2.5.1:3.6.1:2.4.1:1.2.1:1.5.1:4.1.2:2.1.2 +4.4.1:3.5.1:3.5.1:2.5.1:6.3.2:1.1.1 +1.1.1:3.5.3:3.5.1:6.3.5:6.3.2:2.6.1:1.1.1:1.1.1:2.4.1:2.7.1 +2.7.7:2.7.4:4.1.1:2.5.1:3.1.3 +4.1.1:4.3.1:4.4.1:4.1.3:2.7.1:1.2.1:2.7.1 +2.7.1:4.1.1 +1.1.1:4.1.1:2.1.1:1.1.5:2.7.4:3.1.2 +2.3.1:1.8.1:2.6.1:3.6.1:6.3.3:4.1.3:4.1.1:2.1.1:3.4.11:5.1.3:4.2.1:3.6.1:2.5.1 +3.5.1:1.1.1:2.1.1:3.5.1 +4.3.2:2.1.2:2.5.1:6.3.4:5.4.2:1.4.1 +3.5.3:6.3.4:1.1.1:6.3.4:2.6.1:3.1.3 +1.5.1:2.7.1:6.3.4:4.1.1:2.1.2:5.4.2:3.5.1 +3.4.11:2.5.1:1.2.7:1.1.1 +1.2.5:4.3.2:5.3.1:1.1.1:2.7.6:2.3.1:4.1.3:2.4.1 +2.7.2:2.4.2:6.3.4:2.4.1:2.7.2:2.6.1 +2.3.1:3.2.1:2.1.2:3.5.2:2.8.3:2.7.2:2.5.1:2.7.1 +1.17.4:2.3.1:2.7.2:3.5.1:6.3.3:6.3.4 +2.4.2:5.3.1:2.7.8 +4.3.1:1.3.99:2.5.1:1.2.1:4.1.1:5.4.99:4.1.1 +2.4.2:4.1.2:2.2.1:3.5.2:3.5.1:2.5.1:5.3.1:2.3.1:2.6.1 +3.4.13:2.6.1:3.5.3:2.4.2:2.7.1:3.5.4:3.2.2:6.6.1:2.3.1:1.17.4:4.1.1:2.3.1 +2.3.1:4.2.1:4.3.1:5.3.1:1.2.1:1.5.1:1.14.11:3.1.2:2.7.4:1.1.1 +2.8.1:1.1.1 +6.3.4:3.1.3:2.7.1:4.1.1:6.3.4:6.3.4:1.7.99 +3.5.1:1.1.1:2.3.1 +1.2.4:5.4.3:2.1.1 +1.1.1:2.6.1:5.4.99:1.1.1 +3.2.1:2.1.3:2.6.1:5.4.2:4.2.1:2.1.3:1.5.1:2.7.1:2.4.2:6.3.4:1.2.1:3.7.1 +2.3.1:5.4.2:4.3.1:4.3.1:2.5.1 +4.2.1:2.5.1:6.3.4:1.1.1:1.5.1 +3.5.99:4.2.1:2.1.2:2.7.1:1.2.1 +6.3.4:2.1.2:5.3.1:3.5.1:1.2.1:3.2.1:4.3.1:2.3.1 +2.4.2:2.7.1 +1.1.1:1.1.5:2.7.1:2.1.1 +2.3.1:4.4.1:2.6.1:2.7.7:3.5.4:2.1.1:2.3.3:2.3.1:2.1.1:2.1.3 +4.3.2:2.7.2:6.3.3:2.3.1:1.1.1:2.1.2:1.1.1 +1.1.1:4.3.1:1.5.1:3.6.1:4.3.2:2.3.1:2.1.2:6.3.5:1.1.1 +2.2.1:4.2.1:1.1.1:2.7.7:6.3.5 +3.4.11:2.4.2:4.1.1:1.1.1:3.6.1 +2.3.1:1.2.1:5.4.2 +1.1.2:2.7.7:2.8.1:2.4.2:4.1.1:2.3.1:2.7.7:1.2.1 +3.1.4:2.7.2:6.3.4:1.2.1:2.7.8:2.7.1:3.5.1 +3.5.1:2.8.3:3.1.3:6.3.5:2.1.1 +1.2.4:6.3.4:2.7.1:5.1.3:6.3.5:4.2.3:6.3.4:2.2.1:5.4.2:4.2.2:2.7.1 +2.7.4:1.2.4:2.1.3 +6.3.5:6.3.2:6.3.1:2.3.3:5.4.2:1.2.4 +2.3.1:1.1.1:3.5.1:4.3.2:1.5.1:2.6.1:2.3.1 +2.7.1:5.4.2:2.1.3:3.1.3:2.6.1:5.3.1:4.2.1 +3.2.1:2.6.1:2.3.1:6.3.3:2.3.1:2.7.4:1.1.1:4.2.1 +2.1.2:4.3.1:4.2.1:2.6.1:2.3.3:1.1.1:3.6.1 +2.7.7:2.5.1:2.1.2:4.1.1:1.1.1:4.1.2:2.3.1:2.7.2:1.4.1:6.3.4 +3.7.1:2.7.4:1.17.1 +1.5.1:2.5.1:2.6.1:1.1.1:5.4.2:2.7.4 +3.1.7:2.7.4:1.1.1:5.4.2:3.1.5:2.3.1 +3.6.1:2.3.1 +2.5.1:3.5.4:3.1.3:1.2.1:2.6.1:2.6.1 +2.3.1:2.7.2:6.3.3 +1.5.3:3.1.3:1.1.1:4.1.2:3.1.5:4.1.1:3.6.1 +1.3.3:4.3.1:5.3.1:2.3.1:2.7.1 +1.5.1:2.1.1:2.7.1:4.3.1 +2.7.8:1.1.1:5.4.2:2.3.1:4.4.1:4.1.1:4.1.1 +1.1.1:2.3.1:4.2.3 +2.4.2:1.17.4:4.3.1 +3.5.3:2.3.1 +2.1.1:4.1.1:5.4.3 +4.1.2:6.3.4:2.4.2:2.5.1:5.4.99:4.4.1:2.6.1 +2.1.1:3.1.4:2.5.1:2.3.1:6.3.2:4.2.3:2.7.7:5.1.1:5.3.1 +3.1.2:3.2.2:4.1.3 +4.1.2:6.3.2:2.3.1:3.1.3:1.4.1:1.1.1:6.3.5:1.5.1 +2.6.1:1.2.1:1.2.4:2.6.1:3.4.11:2.6.1:1.17.1:3.1.4:2.7.1:1.2.1:4.3.2 +2.4.2:2.7.1:3.6.1:4.1.2:2.7.2:1.3.1 +3.5.3:2.7.8:2.1.3:2.1.3:3.4.11:3.2.1:3.5.1 +2.7.1:6.3.5:4.2.3:2.7.8:2.7.1:1.1.1 +2.7.1:4.1.1:2.7.2:2.5.1:3.6.1:5.3.1 +2.3.1:6.3.1:1.7.99:2.7.2:4.3.2 +1.7.1:6.2.1:4.3.2:3.5.3 +1.2.4:4.3.2:6.3.5 +1.1.5:3.1.1:5.4.99 +2.3.1:3.5.1:3.5.3:4.2.3:4.3.2 +1.2.1:2.3.1:3.1.3:2.4.2:1.1.1:1.8.1:4.1.1 +2.6.1:1.4.1:2.7.2:3.1.3 +1.2.4:5.4.99:3.1.3:4.1.3 +2.1.1:4.3.2:1.1.1:2.3.1:2.4.1:6.2.1:2.1.2:2.6.1 +2.7.2:1.8.1:3.5.1 +1.2.1:1.2.1:2.5.1:2.1.2:4.3.1:2.1.1:4.1.2:4.1.1:5.3.1:1.2.1:2.6.1:3.1.3:1.3.99 +1.7.1:2.3.1:1.2.1:4.1.1:2.3.1:2.3.1:2.7.1:2.5.1:6.4.1 +3.6.1:3.6.1:2.5.1:4.2.1:4.4.1:5.4.1 +1.2.5:2.7.9:1.2.1 +3.6.1:4.2.1:5.4.2:2.5.1 +2.7.7:1.8.1:2.5.1:1.2.1:4.3.1:2.1.2 +5.4.99:4.2.1:6.3.4:6.3.1:2.1.4:4.2.1:2.5.1:2.7.1 +2.7.1:6.3.4:3.6.1:6.3.4:1.1.1:4.1.1:1.1.1:6.2.1 +2.1.1:2.7.1:2.5.1 +2.1.1:4.2.1:2.7.1:1.1.1:4.2.3:2.6.1:4.2.1:2.6.1 +1.1.1:2.3.3:1.5.1:2.3.1 +2.6.1:2.3.1:2.7.2:3.5.3:1.1.1:4.1.3:1.2.1:2.7.8:3.2.1 +2.7.4:1.2.7:2.7.7:2.7.8:2.1.2:2.2.1 +2.6.1:1.1.1:4.1.2:1.2.4:5.4.2:2.3.3:5.3.1:1.2.1:2.6.1:3.5.1:9.9.9 +5.3.1:1.3.1:5.4.2:1.2.1:2.1.2 +1.5.99:1.1.1:2.6.1:2.4.2:2.7.6:3.6.1 +2.6.1:2.7.1:2.7.4:2.7.1:1.3.1:3.5.1:2.4.1:6.3.4:4.1.1:1.1.1:1.4.1 +3.4.13:4.1.3:3.1.3:9.9.9:2.3.3:2.7.1:6.3.4 +1.1.2:4.3.1:4.3.1:1.2.4:2.6.1 +3.2.1:3.5.1:2.1.2:3.5.4:2.3.1 +2.4.2:4.1.1:2.7.2:4.1.1:6.3.4:4.4.1:6.3.3:1.1.1:2.7.7 +3.1.1:1.1.1 +1.2.1:4.1.3:2.7.8 +6.3.4:2.4.2:5.3.1 +2.1.3:4.3.2:1.1.1:2.7.7 +2.7.7:4.2.3 +1.5.1:6.3.4:1.2.1:4.2.1:2.7.1 +1.5.1:2.5.1:5.4.99:1.2.1:4.2.1:2.7.2:2.3.1:2.4.2:2.3.1:2.7.1:3.5.3:3.5.1:1.1.1:2.3.1 +2.3.1:2.3.1:6.3.4:5.3.1:3.1.3:2.7.1 +2.3.1:6.3.4:4.1.2:5.4.99 +2.4.2:2.7.1:4.1.2:1.1.1:5.4.2:2.3.3 +2.8.1:3.2.2:3.5.4:1.1.1:3.13.1:2.7.2 +2.4.2:4.1.1:2.7.1:4.2.1 +4.1.1:2.3.1:2.3.1:2.1.3:1.1.1 +4.1.2:2.4.2:6.4.1:2.1.2:4.3.2 +3.5.3:5.1.3:1.4.1:2.7.4:2.5.1:1.1.1:6.3.5:4.3.1 +6.3.4:1.2.4 +1.14.13:5.1.3:4.1.2:3.1.3 +2.7.1:2.1.2:6.3.4:2.3.1:2.7.1 +1.5.99:3.5.4:4.1.2:4.1.3:2.7.8 +1.1.1:4.1.1:4.2.3:5.3.1:2.3.1:6.3.4 +3.5.1:2.1.1:4.2.3:3.5.4:2.7.7:2.5.1:3.5.3:4.1.2 +6.3.4:3.1.1:2.7.2:3.5.1 +4.1.3:1.3.1:1.2.4:3.2.1:2.3.1:5.4.99:6.3.5 +6.3.5:2.7.1:6.3.5:2.3.1:2.5.1:2.6.1:2.1.2 +4.3.1:4.1.1:5.1.3:5.4.2:1.1.5:4.1.2:1.1.1 +2.7.4:2.3.1:4.1.1:4.1.3:1.2.1:6.3.1 +2.7.4:2.5.1:6.3.4:1.14.15 +3.5.1:3.1.3:4.2.3 +6.2.1:5.1.3:5.4.2:1.1.3 +2.7.8:3.4.13:1.4.1:2.7.1:2.7.6 +2.4.2:3.5.2:4.2.3:2.5.1:2.1.2 +3.5.3:2.6.1:2.7.2 +3.5.3:5.4.2:1.3.1:2.7.7:6.2.1:2.4.2:1.2.1:5.1.3 +6.3.4:3.4.13:5.4.2:5.4.99:6.3.3 +3.6.1:1.5.1:2.1.2:1.2.4:6.3.4:1.2.4:1.2.1 +2.7.2:6.3.2:4.6.1:2.3.1:1.17.4 +2.3.1:6.2.1 +3.5.1:2.6.1:6.3.4:2.5.1 +2.5.1:2.7.1:4.4.1 +3.2.1:6.3.4:1.5.1:2.5.1:1.2.1:4.1.1 +2.4.2:1.14.12:3.5.1:3.1.3:1.13.12:2.3.1:4.2.1:1.3.1:3.1.3:1.1.1:5.3.1 +4.1.1:2.7.1:4.2.1:4.1.1:2.7.1:5.3.1:6.3.5:3.4.11 +1.1.1:2.3.1:4.1.2:6.3.2:2.7.8:1.2.1:1.4.1:6.3.2 +2.6.1:4.1.2:6.3.3:6.3.5:5.3.1:1.3.1:6.3.2:1.4.1:4.4.1:3.6.1:5.1.2:6.3.3:2.1.1 +5.3.1:6.4.1 +1.5.1:2.2.1:3.5.1:2.1.2:2.6.1:2.6.1:1.1.1:1.1.1:4.1.1 +3.1.4:3.5.3:4.2.3:3.1.3 +2.7.2:1.2.1:2.6.1:3.2.1:6.3.2:3.5.2:4.1.1:6.3.4:1.1.1:4.2.3:2.7.1:1.5.1:2.8.3 +4.1.2:2.1.1:2.7.1 +2.6.1:5.3.1:2.4.2:2.3.1:3.5.1 +3.6.1:4.2.3:2.7.2:4.3.2 +4.3.2:4.3.2:1.5.1 +2.7.2:1.2.4:4.1.3:3.5.1:3.5.2:2.3.1:3.6.1:4.2.3:6.3.5:4.3.1:4.2.1 +4.1.1:2.7.7:4.1.2:6.3.2:3.2.1:1.2.1 +2.4.2:2.1.2:3.5.3:2.5.1 +1.4.1:5.1.3:2.3.1:1.4.1:3.5.1:3.1.3:1.1.1:1.2.4 +2.4.2:4.3.1:2.7.1:1.5.1 +6.3.5:1.1.1:1.5.99:1.1.1:2.4.2:4.3.2:6.3.5:4.1.1 +3.2.2:4.3.1:3.5.1:4.1.2:2.3.1:4.1.1:2.3.1:2.7.1:4.1.3:2.7.2 +6.3.4:2.6.1:4.1.2:1.17.4:1.4.1:4.4.1:2.3.3:6.3.1:4.1.2:6.4.1:1.1.1 +1.1.1:2.7.2:2.3.3:3.1.5 +4.2.1:2.7.1:2.1.2:3.5.99:1.3.1 +2.5.1:1.1.2:4.4.1:2.7.1:1.4.1:2.5.1:2.1.2 +3.5.2:3.5.1:3.8.1:2.5.1:3.5.1:4.2.1 +1.5.3:2.3.1:5.1.3 +6.3.3:6.3.4:3.5.3 +2.3.1:1.2.1:6.3.4 +2.7.4:2.3.1:3.5.3:3.5.4:4.1.1:4.1.3:1.4.3:2.4.2:2.3.1 +1.2.1:3.5.3:2.6.1:6.4.1:6.3.5:4.2.1 +3.1.3:2.7.1:1.5.1:1.1.1:1.5.1:1.5.1 +4.3.2:1.1.1:1.2.1 +2.3.1:2.5.1:2.4.1:2.7.6:6.3.3:2.3.1:1.7.2:2.4.1 +4.3.1:2.6.1:4.2.1:2.4.2 +3.5.1:3.1.3:2.6.1:6.3.4 +4.1.2:2.5.1:3.1.4:2.7.2 +2.2.1:2.5.1:4.1.2:2.3.1:2.6.1:2.6.1:1.17.4 +2.7.1:6.3.2:4.1.2:2.7.1:2.7.1:4.1.1:6.3.4:3.1.7:2.7.2:1.2.1:1.1.1 +3.1.3:2.7.1:2.6.1:6.3.4:4.2.3:5.3.1:4.1.3:2.6.1 +2.9.1:2.7.1:2.1.1 +1.2.1:2.3.1:5.4.1:5.4.99 +5.3.1:1.2.4:3.2.1:1.4.4:1.1.1 +2.1.2:3.5.1:2.7.1:1.3.3 +2.6.1:3.5.1:2.6.1:2.3.3:1.1.1 +6.3.5:3.5.1:2.3.1:5.4.2 +1.2.1:5.1.3:4.1.1 +1.8.1:1.5.1:2.5.1 +2.6.1:2.7.1:3.1.7:1.4.1:5.1.1:2.7.6:5.4.2:1.1.1:2.7.4 +2.7.6:6.3.1:2.1.1:2.6.1 +3.1.2:5.3.1:2.6.1:1.17.4:2.1.1:4.2.1:5.4.99 +3.5.1:1.5.1:2.3.1:2.6.1:4.1.1:3.6.1:1.1.3 +2.4.2:2.3.1:2.5.1:9.9.9:4.3.1:3.4.13:5.4.2:1.1.1 +2.7.2:3.2.1 +2.3.1:2.3.3:2.7.1 +4.1.1:4.2.3:4.4.1:3.1.3:9.9.9:4.1.1:2.7.7 +1.2.1:3.1.3:2.4.2:1.2.1:3.5.4:2.6.1:1.2.1 +2.1.1:2.7.2:2.5.1:1.2.1:1.5.1:2.5.1:1.1.1:2.7.7:2.5.1:1.1.1:2.3.1 +5.3.1:1.1.1:6.3.1 +6.3.4:3.1.4 +2.5.1:4.1.3:2.3.3:1.1.5:2.7.1:2.7.1 +2.7.1:4.3.2:3.2.1:6.3.5 +2.2.1:1.4.1:5.4.2:6.3.4:2.6.1:1.5.1:2.7.2:2.5.1 +1.5.1:1.1.1:4.2.1:3.5.4:2.1.1:4.2.3:3.5.3 +6.3.4:3.11.1:4.1.1:2.5.1:2.6.1:2.7.1 +5.4.99:2.3.3:2.7.4:2.7.1:3.1.3:1.2.1:1.1.1:1.2.4 +2.3.1:2.7.1:2.2.1:5.3.1:3.1.3:2.1.1:1.2.1 +2.7.1:1.4.1:4.1.1:2.7.2 +3.5.3:1.18.-:2.7.2:2.3.1:9.9.9:4.4.1:2.6.1:6.3.1 +3.1.1:2.7.7:6.3.4:4.3.1 +2.2.1:1.8.1:6.3.5:1.7.99:5.4.99:2.4.2:2.7.1 +3.5.3:6.3.1:2.4.1:6.3.4 +2.3.1:6.3.5:2.7.1:2.4.2:1.4.3:6.3.5:3.4.13:4.3.2 +4.3.1:3.1.2 +4.3.1:2.3.1 +2.5.1:1.7.3:2.5.1:6.3.3:2.7.7:2.5.1:6.3.4 +1.2.1:2.1.2:2.4.2:3.1.4:2.5.1 +6.3.4:1.2.4:5.4.2:2.6.1:3.1.3:2.7.2:2.3.1 +2.5.1:1.4.1:4.2.1 +2.4.2:3.5.2:2.4.1:4.2.1 +6.3.4:6.3.2:1.14.13 +5.4.2:1.5.1:6.3.4:3.1.4:2.7.8:4.3.2:1.2.1 +2.7.2:2.3.1:3.6.1:6.3.2:3.5.1 +3.5.4:2.6.1:2.7.1:2.1.2:2.7.1:2.4.1 +1.1.1:2.6.1:4.1.1:1.2.1:3.4.11 +1.11.1:6.3.4:4.2.1 +1.1.1:2.7.1:2.3.1:1.1.1:3.1.3:1.4.1 +1.1.1:2.7.2:3.5.1:2.1.2 +2.5.1:2.7.1:3.1.4:2.4.1:3.5.2:6.3.4:2.7.2 +2.5.1:5.-.-:2.5.1:5.3.1:3.5.1:2.5.1:5.3.1 +3.1.2:2.3.1 +1.4.1:1.1.1:4.3.1 +3.6.1:2.1.4:2.7.4:4.3.1:1.2.1:2.1.2:2.7.2 +2.1.3:1.1.1 +4.3.1:2.6.1:2.3.1:3.5.1:2.7.1 +2.7.1:2.3.3:2.6.1 +3.1.3:1.6.1:2.7.1:4.2.1:4.99.1 +4.3.-:2.6.1:1.1.1:3.5.3 +1.11.1:2.6.1:6.3.4:3.1.1:2.1.1 +2.3.1:5.3.1:2.7.1:1.2.1:6.2.1:6.3.1:3.6.1 +5.4.2:2.3.1:6.3.2:2.7.4:4.1.3:2.7.2:2.6.1:6.3.2 +1.3.99:2.7.1:4.3.2:1.5.1 +2.3.1:6.3.4:6.3.4:2.7.1 +3.2.1:4.1.1 +2.1.1:4.4.1:6.3.4 +2.5.1:3.1.3:3.5.1 +3.5.3:2.1.1:2.6.1:4.3.1:3.1.3:2.7.1:6.3.2:4.1.1:2.3.1 +1.5.1:2.5.1:5.1.2:2.7.4 +2.7.1:4.1.1 +2.6.1:2.7.2:3.5.3 +5.3.1:1.1.1:5.1.3:2.6.1:2.6.1:5.4.99 +4.3.1:3.6.1:1.5.1:6.3.4 +1.2.1:5.3.1:2.7.2:2.5.1:3.5.4:2.7.2:2.7.2:1.1.1 +2.5.1:1.5.1:2.3.1:2.5.1:4.1.1 +1.7.3:1.2.1:4.1.3:6.3.5:1.1.1:2.8.3:2.6.1:2.7.2:3.5.3:2.2.1:3.5.1:2.6.1:1.4.3 +4.2.1:2.7.1:4.1.2 +2.7.2:4.1.1:1.-.-:1.1.1:3.2.2:1.2.1:3.6.1:2.7.4 +2.7.2:3.5.2:4.2.1:2.6.1:5.4.2 +2.2.1:1.14.-:2.3.3:2.6.1 +6.2.1:3.5.99:1.2.4:4.1.3:4.4.1:2.7.4:2.7.4:1.17.1:2.3.1:1.2.1:6.3.2:2.5.1:1.5.1 +4.2.1:5.4.99:4.2.3 +2.7.7:5.1.3:2.5.1:2.7.2 +1.2.1:2.5.1:4.3.2:4.1.3:1.1.1:2.7.1 +4.3.1:2.5.1:1.1.1:3.5.1:2.6.1:1.1.1:3.5.4:4.3.2 +4.2.3:6.3.3:1.1.1 +1.1.1:2.7.2:2.7.6 +1.1.1:5.4.2 +4.1.3:2.4.1:3.5.1:2.7.4:4.4.1 +2.7.1:1.1.1:6.3.4:2.7.1:1.7.99:2.1.2 +6.3.3:6.3.4:2.3.1:2.3.1:2.5.1 +3.6.1:6.3.1:2.7.1:1.1.2:2.7.7:4.1.1 +2.1.2:3.1.1:1.11.1:4.1.3 +6.3.4:2.3.1 +3.5.2:3.2.2:5.4.99:1.1.1:1.2.1:2.6.1 +2.3.1:3.1.3:1.5.1:1.1.1 +5.4.2:4.2.1:1.14.16:2.5.1:2.4.2 +2.3.1:2.7.1:2.3.1 +3.2.2:6.4.1:1.1.3:6.3.4:3.2.1:2.3.1 +5.3.1:1.1.1:4.1.1 +6.3.4:6.3.4:2.7.2:2.7.1 +4.1.2:2.3.1:4.1.1:1.8.1:1.4.1:5.1.3 +2.4.2:4.1.1:6.3.4 +2.5.1:2.3.1:2.7.4:1.1.1:1.13.11:6.3.1:1.5.1:6.3.2:6.3.4 +5.4.2:4.3.1:4.2.-:3.1.4:1.1.1:2.7.1:5.4.2:4.1.1 +2.4.2:6.3.4:4.1.3:2.3.1:2.7.4 +2.3.1:4.2.1:4.2.1:3.1.1:2.3.1:3.1.3 +4.2.1:2.7.1:2.6.1 +4.1.1:6.3.1:1.1.1:2.1.1 +2.6.1:2.3.1:1.5.1 +2.3.1:5.4.3:3.6.1 +4.1.3:4.1.1:2.6.1 +2.5.1:3.5.1 +4.3.2:2.1.4:1.2.4:2.7.6:4.1.1:3.5.1:4.4.1 +6.2.1:6.4.1:4.1.2:2.4.1 +5.4.99:1.2.1:1.8.1:2.4.2:1.14.13:2.1.2:3.1.1:1.2.1:1.2.1:1.2.4:1.2.1:1.1.1:4.2.1:2.5.1 +6.4.1:3.5.3:2.6.1 +4.3.1:2.3.1:5.3.1 +3.1.1:1.14.16:4.1.3:1.2.1:6.3.1 +2.6.1:2.7.1:2.6.1:5.4.2:5.3.1 +2.6.1:2.3.1:1.1.1:2.3.1:1.1.1:2.7.4:4.1.1:4.1.1:2.3.3 +2.7.7:2.7.4:3.5.1:4.3.1:2.4.2:4.2.1:1.3.3:3.5.1 +4.1.1:2.1.3:2.1.1:3.1.3:4.2.3:5.1.2 +1.2.1:5.1.3:2.5.1:6.3.4:1.8.1:4.1.1 +4.2.1:2.1.2:3.4.13:1.3.1 +1.-.-:1.4.4:1.97.1:2.6.1:2.7.2:1.8.99:1.4.1 +4.2.1:2.4.1:1.1.1:2.3.1:2.5.1:3.1.3:4.2.3:4.3.2:3.2.2 +1.1.1:3.5.2:2.7.1:4.4.1:5.3.1 +2.2.1:3.5.3:2.4.2:2.1.1 +2.7.1:6.3.2:5.4.2:4.1.1:2.7.1:2.5.1:3.1.3:2.6.1:6.3.5:4.2.1 +4.1.1:2.5.1:1.2.1 +2.8.1:3.1.3:4.2.3 +3.5.1:2.4.1:5.3.1 +1.1.5:1.1.1:4.1.1:3.6.1:3.5.3 +6.3.4:2.7.1:3.5.1:1.2.1:3.5.3 +1.3.99:6.3.4:1.2.1:1.2.1 +2.3.3:6.3.1:2.6.1:3.6.1 +5.4.2:6.3.1:1.2.1:4.2.1:4.3.2 +3.6.1:6.3.5:3.2.1:1.1.1:1.2.1:4.1.2 +1.3.99:1.2.1:6.3.2:4.2.3:6.3.4:2.7.7:2.7.1:4.99.1:1.5.1 +2.3.1:1.1.1:2.4.2:2.5.1:1.5.1:2.1.2:1.2.1 +3.5.99:4.2.1:6.3.1:5.1.3 +2.3.1:5.3.1:4.2.3:4.2.3 +1.13.11:3.5.1:5.3.1:2.1.1:1.4.4:6.3.2 +3.2.1:3.2.1:9.9.9:3.6.1:4.3.2 +2.3.1:1.8.1:6.3.1:1.-.-:1.4.1:6.3.1:4.3.2 +5.4.2:2.3.1:2.1.2 +2.7.2:2.1.3:1.4.3:2.1.2:2.6.1:2.5.1 +3.5.5:6.3.5:4.2.1:4.1.1 +3.1.4:6.3.4:2.7.6:2.1.2:2.7.7:3.5.1:2.7.1:1.1.1:1.5.99:2.6.1 +3.1.2:2.1.3:2.3.1:6.4.1:1.1.1 +2.7.7:2.4.2:4.3.2:2.6.1:3.5.1:2.1.1:2.7.1 +6.3.5:2.4.1:4.3.1:6.3.5:1.4.1:4.3.2:2.7.2:2.5.1:3.1.3:3.7.1 +3.2.1:2.1.3:2.5.1:4.3.2:1.17.1 +4.4.1:2.6.1:5.3.1 +3.5.1:3.1.3:2.7.1:2.7.1:1.1.1 +2.5.1:4.1.1:2.1.2:2.7.7 +6.3.4:1.1.1 +2.7.2:3.1.4:1.2.1:6.3.4:2.7.1:5.4.99:5.4.99:2.4.2:2.1.2:2.1.2:2.7.8 +6.3.2:4.4.1:1.5.1:2.1.2:1.2.1:2.7.4 +2.7.7:2.7.2:2.5.1 +3.2.2:5.4.2:4.1.1:1.14.- +4.2.1:2.7.2:4.2.1:1.1.3:4.4.1 +1.2.1:3.5.2:5.4.2:1.1.2:3.5.1:4.1.1:5.3.1:3.5.1:2.6.1 +3.2.1:9.9.9:1.1.1:6.3.2:1.2.1:2.7.7:4.3.1:5.3.1 +1.1.5:2.7.1 +1.4.3:2.1.3:2.3.1:6.3.3:1.1.1:3.5.3:4.2.1 +2.6.1:6.3.4:6.3.5:1.5.99:6.3.4:6.3.5 +4.3.2:1.17.4:4.2.-:1.5.1 +4.1.1:6.3.1:2.6.1 +4.1.2:1.8.1:1.1.1:2.1.1:2.1.1:2.3.1:4.2.1:2.7.1:2.3.3:2.1.2 +4.1.2:1.4.1:2.5.1:6.3.4:2.3.1 +2.6.1:4.4.1:2.7.1:2.3.1:2.7.2 +6.4.1:2.3.1:2.7.1:2.4.2 +2.1.2:1.1.1:9.9.9:1.1.1:2.4.2:4.3.2:2.7.1:2.3.1:2.6.1:3.6.1:4.2.1:2.3.1:4.1.1 +1.5.1:1.2.4:2.6.1 +1.2.1:1.5.1:4.1.1:4.3.1:5.1.3:2.4.2:2.3.1:2.5.1:4.2.1:2.1.1:2.2.1 +6.1.1:2.3.1:1.2.1:1.1.1:6.3.3:1.7.1:4.3.2 +4.2.1:1.1.1:4.3.1 +2.5.1:6.3.5:2.6.1 +3.2.1:4.1.1:3.1.2:3.1.4:3.4.11 +5.5.1:2.5.1:4.2.1:2.1.4:2.6.1:2.1.3 +1.5.1:6.3.4:6.3.4:4.1.1:4.2.3:5.4.2:2.7.2:4.3.2:2.7.1:2.5.1 +3.5.3:2.6.1:5.3.1:3.5.3 +1.1.1:6.3.4:2.7.1:2.1.3:2.7.1:3.5.1:1.4.1 +1.3.3:1.5.1:6.3.2:1.4.1:2.1.2:2.3.1:2.7.1:5.4.2 +3.1.3:2.7.1 +2.7.1:2.7.6:1.5.99 +1.5.1:2.3.1:5.3.1:1.2.1:1.14.12:2.6.1 +1.1.1:2.1.2:5.4.2 +1.3.3:4.1.2:2.6.1:4.3.1:6.3.3:2.4.1:3.1.3:6.3.2:4.1.3 +4.3.2:1.1.1:4.2.1 +2.4.1:2.1.2:2.6.1:2.7.7:2.5.1:4.1.1:2.5.1:3.6.1:6.3.5:3.6.1:2.6.1:4.1.1:1.1.1:2.7.1:2.7.1 +2.3.1:4.1.1:4.3.1:2.3.1 +4.1.1:1.1.1:2.7.7:4.1.1:2.7.1:2.5.1:2.3.1 +2.5.1:6.3.4:1.3.3:4.1.1:2.4.2:1.1.2:5.4.2 +6.3.4:2.7.1:2.5.1 +2.7.7:2.4.2:1.1.1:2.7.1:1.3.1:2.5.1:2.6.1:2.5.1:4.2.1 +2.7.7:2.1.1:1.1.1 +5.4.2:6.3.4:2.3.3:2.3.1:1.1.1:6.3.4:1.17.1 +4.2.1:2.6.1:2.3.1:6.3.4:4.1.2 +2.6.1:6.3.1:6.3.5:2.3.1:5.4.2:4.1.1:4.1.1:3.1.2:2.2.1 +1.3.1:2.6.1:2.7.1:4.1.1:4.2.3:2.1.1:1.3.1 +1.1.1:2.7.2:2.7.7 +3.6.1:2.1.1:2.1.2:2.7.1:3.1.3:2.7.7 +2.7.1:6.3.5:1.4.3:6.3.4:4.3.1:3.6.1:4.3.1:2.7.1:3.1.3 +2.7.4:4.2.1 +1.7.2:2.5.1:1.1.1:5.3.1:1.3.3:6.3.5:1.5.99 +1.4.1:1.2.1:3.2.1:2.4.2 +6.3.4:2.7.2:6.3.4 +2.7.7:6.3.4:2.7.6:3.1.7:2.6.1 +4.1.3:4.1.1:2.5.1:4.1.1:2.7.6 +3.5.1:2.2.1:2.1.2:1.1.1 +2.1.2:2.7.1:2.7.8:4.1.2:2.7.1:2.5.1 +1.1.1:4.1.1:2.1.3:4.3.2 +4.4.1:1.7.1:2.4.2 +3.1.2:2.3.1 +1.1.1:6.3.2:2.7.2:2.3.1:1.1.1:2.3.1 +2.3.1:5.4.99:1.2.1:2.7.2:1.2.1 +2.6.1:1.4.3 +2.3.1:1.1.1:5.4.2:2.3.1:2.3.1:6.1.1 +1.4.1:2.6.1:2.5.1:2.7.1:6.3.4 +3.4.13:4.4.1:2.7.4:2.7.6 +1.2.1:4.1.1:3.5.1:3.5.1:2.6.1:2.6.1:2.6.1:3.3.1:9.9.9 +1.1.1:1.1.1:4.1.1:2.7.1:2.4.2:1.1.1 +1.1.2:1.4.1:2.6.1:3.6.1 +2.4.2:6.3.2:4.1.1:6.3.2:3.1.3 +3.1.2:5.3.1:2.6.1:2.7.1:1.5.1:1.1.1:1.2.5:1.2.1 +4.1.1:4.1.1:3.5.3:1.2.1:2.7.2:1.2.1 +3.1.2:1.5.1:1.2.4 +1.5.1:2.6.1:3.5.1:1.2.1:5.4.99:2.9.1 +2.1.3:2.2.1:2.3.1 +2.5.1:4.3.1:4.1.1 +4.2.1:2.1.1:6.3.1:1.4.1:3.4.13 +1.13.12:4.3.1:6.3.2 +6.3.4:2.7.2:6.3.4:2.7.7:2.4.2:1.2.1:2.1.1 +2.7.1:3.2.1:2.6.1:6.3.3 +5.1.1:3.5.3:1.3.1:2.7.4:1.3.3:3.5.4:2.7.1:2.7.7:6.2.1 +2.4.2:1.5.1:2.7.1:4.1.2 +1.1.1:1.5.1:6.3.5:3.5.3:3.5.1:2.7.1 +3.1.3:2.7.6:3.6.1:2.7.1:2.7.6:4.3.1 +3.5.3:2.2.1:4.3.2:2.6.1:2.7.6 +2.7.1:2.3.1:4.1.1:1.4.3:4.1.1:2.7.1 +9.9.9:3.1.4:4.6.1 +2.7.1:1.4.1:2.1.1:1.2.1:3.3.1:2.7.1:6.3.1 +3.5.1:2.7.1:2.1.3 +3.4.11:1.1.1:4.1.1:2.7.1:2.6.1 +1.5.99:3.1.2:4.3.1:4.4.1:2.7.2:2.1.2:2.1.3 +2.1.2:1.1.1:1.7.2:3.5.1:2.7.4:1.2.5:3.1.3:5.4.2:6.3.4 +1.5.1:9.9.9:6.3.1 +6.3.2:2.7.8:2.1.2:3.4.11:3.1.4 +1.2.4:4.4.1:5.4.2:1.1.1 +2.7.1:2.7.2:2.7.1:6.3.4:6.3.2:4.2.3:3.5.1:2.4.2:2.1.2:4.4.1 +1.6.1:5.1.1 +5.1.3:3.5.1:4.2.1:2.7.9:2.3.1:1.2.4 +3.5.1:2.7.2:4.1.2:2.7.1:5.4.2:2.1.1:2.1.4:2.5.1 +2.5.1:6.3.4:1.14.12 +6.3.4:2.1.2:3.5.1 +4.3.2:2.4.2:1.2.1 +3.5.1:2.6.1:2.7.8:5.4.99:6.3.4:4.1.3 +3.1.3:4.2.3:5.4.1:3.5.4:3.1.3:6.3.3:4.1.1:5.3.1 +2.4.2:2.7.1:2.1.2:2.7.1:4.3.1:6.3.3:4.1.3 +3.5.3:1.2.1:3.5.99:6.3.2:4.1.3 +2.8.3:1.2.1:2.1.4:2.7.2:2.3.1 +6.3.5:2.1.4:2.7.1:1.2.1:4.1.1 +2.3.1:4.2.3:2.1.2:3.5.1 +6.3.2:4.1.3:2.1.3:2.1.3:4.1.1 +1.14.12:2.7.2:1.1.1:1.1.1 +2.3.3:1.4.1 +2.1.3:2.3.1:2.7.1:1.5.1:1.1.1 +2.4.2:2.1.3:2.1.3:2.7.7 +2.3.1:2.1.1:2.9.1 +3.6.1:4.3.1 +5.4.2:6.3.4:3.2.2:2.1.2 +2.6.1:3.6.1:2.3.3:4.1.1 +2.3.1:4.3.1:4.4.1:4.2.3 +2.7.7:2.1.3:4.2.1:1.2.1 +4.1.1:2.7.4 +2.5.1:1.4.1:1.1.1:1.1.1 +2.6.1:4.4.1:4.1.1:1.1.1:2.6.1:6.2.1:4.2.1:5.1.3 +1.1.1:4.1.2:4.3.1 +4.1.1:2.7.1:2.3.1:2.8.1:3.1.4 +1.2.1:4.1.1:4.2.3 +6.3.4:2.8.1:1.4.1:3.4.11:4.4.1:1.5.1:3.4.13:4.2.3:5.3.1:3.6.1 +4.1.2:6.3.4:2.3.1 +2.7.6:2.7.1:3.6.1 +4.2.3:4.1.1:1.1.3:1.1.1:1.2.1:2.8.2:1.1.1:2.6.1:2.6.1:2.1.3 +3.1.3:3.5.3:1.2.1:3.6.1:3.5.4 +1.2.4:4.2.-:4.3.1:4.1.1 +4.4.1:4.4.1:2.4.2:6.3.1:1.4.1:2.3.1 +2.7.1:2.1.1:2.5.1 +1.1.1:2.3.1:2.7.2:1.3.1:1.17.4:5.4.2 +4.2.1:2.3.1:2.5.1:4.3.1 +2.5.1:5.1.3:2.7.4:2.7.1:3.5.4:2.6.1 +1.8.1:4.2.3 +2.3.3:5.1.2:6.3.2:2.4.2:1.5.1:2.4.1 +4.2.1:2.7.1:2.6.1:2.6.1 +2.7.1:3.5.99:1.3.99:5.4.2:2.7.2:2.1.1:2.3.1:5.1.3 +6.2.1:5.3.1:3.5.1:2.6.1:3.7.1:3.6.1 +3.1.3:2.1.1:1.1.1:4.2.3:2.5.1 +4.1.2:3.1.3:2.6.1:2.7.2 +1.3.99:2.6.1:2.5.1:3.5.5:1.1.1:3.5.4 +3.6.1:2.7.1:2.7.1:6.2.1:4.1.2:2.3.3:3.5.1:1.4.4:2.7.1:4.3.1:4.2.1 +2.7.2:2.1.3:4.1.1:4.2.1:1.2.1 +2.7.1:2.7.2:1.3.99:2.1.2:4.2.3:3.5.1:1.5.99:5.3.1:5.5.1:1.1.1:2.7.1:4.1.1:2.6.1 +6.3.5:3.5.2 +2.3.3:1.2.4:6.3.4 +2.4.1:5.1.1:6.3.2:2.3.3:6.3.3 +2.5.1:1.1.1:2.7.1:2.7.8:5.3.1:2.6.1:2.1.1:4.4.1:3.5.3:3.1.4:2.7.4 +4.3.1:1.17.1:4.1.1:4.1.2 +2.3.1:2.1.1:3.7.1:4.3.1:3.5.3:2.7.1 +2.6.1:6.3.4 +2.7.4:2.7.2:2.7.1:2.1.3:2.7.1:2.3.1:2.3.1:5.4.2:2.3.1 +4.2.1:3.5.1:1.1.1 +4.2.1:4.1.1:2.1.3:6.3.3:2.7.4:2.1.2 +4.1.1:5.3.1:6.3.4 +2.1.1:4.3.2 +3.1.3:6.3.1:4.2.1:1.3.3 +2.5.1:2.7.1:1.2.7 +4.1.2:6.1.1:2.3.3:2.7.1:2.1.1:1.7.99 +1.8.1:1.1.1 +3.5.1:3.1.1:2.7.1:4.1.1:4.2.1 +1.1.1:1.1.1:2.4.2:4.2.1:2.7.1:2.7.7:2.4.1 +2.7.4:1.1.-:4.2.1:4.3.1:4.1.1:4.1.3:6.3.4 +3.5.1:1.14.13:3.1.4:2.3.1:3.5.1 +2.7.2:4.2.3:2.7.1:2.7.2:1.1.1 +4.1.3:1.2.1:1.1.1:2.1.2 +6.3.4:2.4.2:2.6.1 +2.3.1:2.5.1:2.1.2:2.1.4:2.7.1:1.5.1:5.4.99:1.4.1 +5.3.1:3.5.1:1.1.1:2.6.1:1.5.1:2.3.1:2.7.2 +3.1.3:5.4.2:1.2.1 +2.4.2:2.3.1:2.5.1:4.2.1:2.5.1:4.1.1:3.6.1 +3.6.1:2.5.1 +6.3.2:4.2.3:1.2.5:3.5.1:2.2.1:1.2.4:2.7.7 +3.5.3:2.3.3:2.5.1 +4.1.2:1.2.1:2.1.1:3.4.13:5.1.3 +5.1.1:4.4.1:2.6.1 +4.3.2:1.8.1:5.4.2:2.1.1:2.6.1:4.2.1:2.7.1:2.6.1:6.3.5:6.2.1 +5.1.3:6.3.2:2.6.1:6.3.2:4.4.1:5.4.99:2.7.1:2.7.4:4.1.2:5.3.1:4.2.1:5.3.1 +6.3.5:6.3.3:4.2.-:5.3.1:5.1.3:2.7.4:6.3.2 +6.3.4:2.1.3:4.1.2:2.7.2:2.8.1:3.1.1 +2.1.2:9.9.9 +2.5.1:2.6.1:1.2.1 +1.2.1:1.5.99 +6.3.5:3.1.7 +2.3.1:4.1.1:4.2.1:2.3.1:4.1.1:4.2.1:2.7.1:4.2.3 +3.6.1:4.4.1:3.5.5:3.1.4 +2.6.1:1.2.4:2.7.2 +9.9.9:1.5.1:1.5.1:6.2.1:3.6.1:6.3.3:5.3.1:1.5.1:4.3.1:2.4.1:6.3.4:2.7.2 +2.3.1:2.7.4:2.6.1:3.3.1:2.7.7 +3.3.1:2.4.1:2.1.3:1.7.99:6.3.3:2.4.2:2.7.1:2.6.1 +2.3.1:2.7.4:1.1.1:3.5.3:6.3.4:2.4.1:5.4.99 +6.2.1:1.2.5:6.4.1:1.5.3:1.3.99:3.1.2 +2.1.3:4.1.2:2.7.1:2.2.1:3.5.1 +3.5.4:1.2.1 +1.13.11:4.1.1:1.5.1:1.2.1:2.7.1:1.13.11 +4.1.1:5.4.2:2.4.2:2.5.1:2.7.1 +2.3.1:1.3.1:2.3.1 +5.4.2:1.4.3:6.3.1:6.3.4 +2.6.1:2.3.3:2.3.1:2.4.1 +3.5.4:2.3.1:3.1.2:1.8.1:6.3.5:2.5.1 +2.7.2:2.1.2:6.3.4:4.2.1 +2.6.1:2.6.1:2.3.3:6.3.4:2.3.1 +2.4.2:4.1.1:2.1.2 +2.7.1:2.5.1:1.1.1 +2.7.1:6.3.3:2.1.2 +6.3.4:2.1.2:5.4.2:6.3.3:6.3.4:5.4.2:2.5.1:2.3.3:4.3.2:2.3.1 +4.1.2:4.3.1:3.1.1:1.8.1:1.4.1:4.4.1:3.8.1:5.3.1 +2.6.1:2.7.8:2.1.3:3.3.1:5.3.1:2.3.1:2.7.1 +4.4.1:2.8.1:2.5.1 +4.1.1:2.6.1:4.4.1:4.4.1 +3.6.1:1.2.1:1.2.1 +1.2.1:2.7.7:1.1.1:4.2.1:5.3.1:1.2.1 +2.1.3:3.5.3:1.1.1:4.1.1:2.7.7:2.6.1:2.5.1 +2.4.1:2.7.1:3.6.1:2.3.1 +2.7.1:1.3.3:3.5.1:5.3.1:3.1.3 +2.7.7:2.7.1:5.4.99:2.3.1 +2.6.1:1.17.7:2.7.7:2.5.1:2.6.1:4.1.1:2.7.1:6.3.1:2.5.1:4.1.1:2.7.1:4.1.1:2.6.1:2.7.7:4.2.1 +1.1.1:5.3.1:2.7.7:1.1.1:1.3.99:1.13.11 +1.1.1:4.4.1:3.5.3:3.6.1 +2.5.1:3.5.4:2.8.1:2.7.1:1.3.3 +4.2.1:3.3.1:4.1.1:1.1.1 +2.7.7:5.4.2:4.2.1:4.2.1:3.5.3 +2.6.1:1.4.3:3.1.4:4.2.1 +2.4.2:2.1.1:3.1.2 +1.2.7:2.3.1:3.1.1:2.6.1:6.3.2 +2.3.1:3.5.1:3.5.1:6.2.1:2.5.1:2.5.1:1.2.1:6.3.3:3.5.1:5.1.1 +6.3.2:2.7.2:2.6.1:1.1.1:2.6.1:4.1.2:2.6.1:1.5.1:3.5.1:2.7.1 +2.3.3:2.3.1:2.7.1:2.6.1:1.7.2:1.2.1:4.4.1:3.2.1:2.3.1 +4.1.2:3.5.1:5.1.3:6.3.2:2.1.2:4.2.3:2.6.1:2.3.1:1.5.99:1.2.4:4.2.1:4.2.1:2.1.1 +1.2.1:1.5.1:6.3.5:3.4.13 +2.1.1:2.5.1:2.5.1:2.1.1:1.2.4 +2.7.6:2.7.1:2.7.1:3.5.1:2.7.7 +6.3.4:6.3.4:2.7.1:5.4.2 +1.1.1:5.4.99:6.3.2:2.7.1:6.3.5:5.3.1 +3.4.13:2.7.2:4.3.1 +2.1.3:2.7.1:1.7.2 +4.1.2:2.7.7:2.7.4:4.1.3 +6.3.2:6.3.2:2.7.1:1.5.1 +1.3.3:4.1.1:5.4.99:1.5.1 +2.4.2:1.1.1:2.7.6:2.5.1:2.3.1:4.2.1:2.1.1:2.1.1:2.5.1:6.3.5 +3.5.1:2.7.6:2.3.1:2.7.1:4.3.2:1.1.1 +3.5.1:2.3.1:4.1.1:2.7.2 +4.3.1:3.5.3:2.6.1 +5.3.1:3.5.1:2.3.3 +2.6.1:2.7.1:3.6.1:2.6.1:2.4.2:2.6.1:2.7.7:2.4.2:1.4.1 +2.1.2:2.7.7:1.13.11:5.1.3:2.7.1:3.5.3:2.7.7:2.7.4 +4.1.2:1.5.1:3.5.2:3.6.1 +3.5.1:2.5.1:2.4.2:3.1.3 +3.1.1:1.1.1:3.5.3:3.5.2:2.5.1:1.2.1:1.1.1:1.1.1 +4.1.1:2.3.1:2.7.4:4.2.1:1.2.1:2.1.3:2.7.1:2.6.1:1.3.3 +2.5.1:2.7.2:1.4.1 +2.6.1:3.5.4:2.7.4:4.4.1 +2.7.1:4.3.1:6.3.3:2.3.1:2.3.1:1.2.1:1.3.1 +4.1.1:5.4.2:6.3.4:2.4.2:2.5.1:2.7.1:2.7.7:4.3.2 +2.7.1:2.4.2:2.3.1:4.2.1:2.1.3:3.6.1 +1.17.4:2.1.1:3.1.1:4.1.2:2.5.1 +1.1.5:4.2.-:4.4.1:5.4.2:4.3.1:1.2.1 +6.3.2:4.3.2:5.3.1 +2.3.3:2.7.1:2.1.3 +1.4.1:2.7.7:2.7.2:1.2.1 +3.6.1:2.7.2:2.7.7:2.7.1:4.1.2:6.2.1:5.2.1 +2.7.1:3.5.3:2.3.1:5.3.1:5.4.99 +1.3.99:2.7.1:5.3.1:2.3.1:5.1.3:1.17.4 +4.2.1:6.3.5:6.3.4:1.1.1:4.3.1:2.3.1:2.5.1:4.1.1 +4.1.1:6.3.4:2.7.7:4.2.1 +2.7.7:1.18.6:3.5.1:1.1.1:2.5.1:1.2.4:1.1.5 +6.3.2:6.3.2:1.1.1:6.3.4 +1.1.1:1.2.4:2.3.3:3.4.13 +2.4.1:3.6.1:2.7.7 +2.7.2:2.7.8:3.5.3:6.2.1:3.6.1:4.2.3:2.7.1:1.7.1:1.5.1:6.3.3 +3.6.1:6.4.1 +1.3.3:3.5.4:2.6.1:2.7.4 +2.7.7:1.4.4:2.1.2:6.3.1:1.1.1 +4.2.3:3.5.1:1.1.1 +1.2.1:1.2.1:1.1.2 +6.3.2:3.6.1:4.3.2:2.7.6 +2.4.2:3.6.1:3.1.2:4.1.2:3.2.2 +3.5.2:3.1.4:1.2.1 +1.2.1:5.3.1:4.1.2:2.7.7 +2.7.4:1.2.4:2.4.2 +1.14.13:4.1.1:6.3.4:2.3.1 +4.2.1:4.3.2:5.1.2:4.1.1:2.5.1:1.3.1:2.6.1:1.1.1:4.1.1:1.5.1:1.1.5:1.1.1:5.4.99:1.2.4 +2.4.2:2.3.1:5.3.1:1.3.3:2.7.2 +4.4.1:2.7.2:2.1.4:2.1.1:2.7.6:1.2.1:4.3.1 +2.5.1:4.3.2:1.2.1 +2.7.2:2.4.2:3.5.1:2.7.1:3.5.1:2.7.7 +1.1.1:4.2.1:4.2.1:2.6.1 +4.2.1:1.2.1:5.4.2:1.2.4:2.5.1 +5.3.1:2.5.1:1.1.1 +3.5.4:1.1.1 +1.2.1:3.1.2:4.3.1 +2.7.9:5.5.1:6.3.2:4.3.2:2.3.1:1.3.1:1.17.1:2.6.1:2.3.1 +2.5.1:3.2.1:1.6.1:2.7.7:2.6.1:4.4.1 +2.4.2:2.7.6:5.3.1:2.3.1 +2.1.2:4.2.1:5.4.2:5.1.2:3.2.1:4.2.1:1.1.1 +1.4.1:4.2.1:1.17.4:6.3.4:2.7.1:1.1.1:2.7.1 +2.7.7:2.1.3:3.1.3:2.7.1:2.7.1 +4.3.2:4.3.1:2.7.1:2.7.2:2.7.1:2.3.1:2.3.1:2.1.3:4.4.1:2.3.1 +1.2.1:6.1.1:1.4.4 +4.3.2:3.1.1:2.1.2:3.4.13:3.4.11 +6.3.2:6.3.5:4.3.2:2.5.1:2.4.1 +1.2.1:1.13.11:2.4.2:1.4.1 +4.2.1:1.13.11:2.3.1:5.4.2:2.7.2:2.1.1 +2.6.1:1.3.3:4.1.1:2.3.1 +1.4.99:2.1.2:1.1.1:1.1.1:1.1.1:2.3.1 +6.3.5:2.1.3 +4.1.1:1.1.1 +5.4.99:3.1.1:3.5.1 +2.3.1:2.7.7:1.2.4:4.4.1:2.6.1:3.3.1:3.5.3 +2.6.1:3.2.2:5.1.3:2.3.1:3.5.1:4.4.1:5.4.99:6.6.1 +3.2.1:1.2.1:2.1.2:2.6.1:2.7.1 +1.5.1:1.1.3:1.4.3:2.5.1:2.4.2 +2.7.1:4.2.3:2.2.1:1.1.1 +4.1.1:3.5.1:6.3.4:4.2.-:2.7.6:4.1.2:2.1.1 +2.5.1:2.7.1:2.3.1:1.1.1:2.7.1 +3.6.1:6.3.1:2.5.1:2.6.1 +2.5.1:2.3.1:4.3.1:5.4.2:1.2.1:1.5.1:2.7.6:2.1.2:3.5.1:1.2.1 +4.2.1:4.2.1:2.7.1:2.7.2:3.5.1 +2.7.1:2.3.1:6.3.2:3.5.1 +4.3.1:2.7.1:6.3.5:3.6.1:4.3.1:3.1.3:3.5.3:6.3.2:2.1.3:1.2.1 +4.2.1:5.4.2:6.3.2:2.4.2:2.7.1:3.5.4:2.3.2:3.5.4:1.1.1:1.1.1:2.7.9 +3.5.1:1.2.4:9.9.9:6.3.5:1.4.1:3.1.2:4.2.1:2.5.1 +4.3.1:5.4.99:6.2.1:2.7.2 +2.7.1:1.3.3:5.4.99:9.9.9:1.1.1:3.5.1:6.3.5:6.3.4:4.3.1:2.3.1 +6.3.5:1.4.4:2.1.1:2.1.2:2.6.1:2.7.7:4.3.2:1.2.1:4.2.1 +6.3.1:2.3.1:2.7.4:3.5.1:1.5.1:2.5.1 +3.1.7:2.3.3:3.1.1:2.7.7:5.3.1:4.3.1:6.3.4:4.3.1:5.4.99:2.7.1:2.7.7:2.3.1:1.1.1:4.3.2 +4.1.1:6.3.5:2.4.2:1.7.99:2.1.2:3.1.3 +3.5.3:3.5.1:4.2.1:3.1.3 +3.1.3:6.3.2:6.3.3:4.1.1 +4.3.1:1.7.99:4.1.3 +9.9.9:4.3.1:5.3.1:2.7.7:2.4.2:3.5.3:2.3.1 +3.6.1:2.3.1:2.7.1:6.3.3:1.18.-:2.3.1 +4.2.1:2.7.4:2.4.2:2.7.1 +6.3.2:2.7.7:3.5.1:4.1.3:2.3.1 +4.1.1:1.4.1:2.7.1:2.7.2:3.1.3 +2.4.2:4.2.1:2.7.1 +2.7.7:1.2.4 +2.7.4:2.1.3:5.4.2 +1.5.3:4.1.1:2.7.2:5.4.2:6.3.1:2.3.1:3.1.3:4.3.2:2.3.1 +1.2.1:6.3.4:3.4.11:3.5.3:6.3.2:2.7.7:2.7.1:2.7.2:2.3.1:4.1.1:2.4.2 +3.2.2:4.2.1:1.5.1:1.1.1:2.6.1:2.7.2:1.4.3 +4.1.3:4.1.2:2.7.2:2.7.2 +6.3.2:2.7.7:2.3.1 +3.2.1:2.7.1:2.1.3:4.1.2:2.5.1:3.2.1 +4.3.2:6.3.3:4.3.1:2.5.1:4.3.1 +1.3.99:2.6.1:3.5.1:2.3.1 +1.1.1:2.6.1:1.11.1:1.1.5 +4.2.1:4.4.1:3.1.3:2.6.1:3.6.1:3.5.4:4.1.2 +2.6.1:4.2.1:6.3.5 +4.1.1:2.7.1:2.5.1:4.1.1:2.7.2:3.1.3:1.-.-:2.7.2:2.7.7 +4.1.2:6.3.4:3.2.1:1.1.1:2.7.8:5.1.3:4.2.1:2.7.6:3.1.3:3.1.2:2.7.7 +1.13.12:2.7.4:5.4.99 +3.5.3:1.17.4:2.1.4:6.3.4:3.5.4:1.1.5 +2.1.4:6.3.2:4.4.1:2.1.3 +3.2.2:2.3.1:2.3.1:4.2.1:2.5.1:4.1.1:1.1.1:4.1.1 +2.7.7:2.7.1:4.3.1:4.3.1:1.8.1:4.1.1:4.4.1:1.2.4:4.1.1 +2.1.2:2.5.1:2.7.2:4.1.1 +4.3.2:1.5.99 +4.3.2:1.1.1:1.4.1 +2.1.2:2.7.2:6.4.1:1.5.1 +3.5.1:4.2.3:5.3.1:4.4.1:2.5.1:4.1.1:2.4.2 +1.1.1:2.7.1:2.3.1:6.3.2:5.1.1 +4.3.2:2.1.2:2.6.1:4.1.1 +6.3.3:2.5.1:2.7.1:6.3.2:4.3.1:4.1.2:2.6.1:1.2.1:2.7.2 +3.6.1:3.1.3:1.5.99:6.3.1:4.4.1:2.7.4 +4.4.1:2.3.1:2.7.1:2.5.1:1.1.1:2.1.2:1.1.5 +2.5.1:4.2.1:2.3.1 +3.5.3:5.4.2:6.1.1:4.1.3:2.7.1 +1.2.1:2.3.1:1.8.1:5.3.1:5.4.2 +2.7.1:2.7.1:4.3.2:5.3.1:6.3.3:3.5.3:2.7.2:1.2.1 +1.2.1:3.4.11 +2.5.1:4.2.1:4.1.2:3.5.1:4.3.1:2.1.1:4.2.1:1.5.1:1.2.1 +2.3.1:5.4.2:3.5.1:4.1.1:3.1.3:3.5.3 +6.3.4:3.5.1:2.3.1:1.2.1:2.7.2:6.3.1:6.3.3 +4.1.2:6.3.2 +2.3.1:1.1.1:2.7.7:4.2.3 +2.7.1:6.3.2:3.1.3:2.7.1:1.4.1:5.3.1 +2.3.3:2.5.1:1.1.1:2.7.1 +4.1.2:4.2.1:1.2.1:6.3.1:4.4.1:2.7.1:6.3.4 +2.1.2:4.1.1 +4.2.1:1.1.1:6.3.5:3.5.1 +2.5.1:2.2.1:3.5.1:1.17.7:2.7.1 +3.5.3:4.1.1:4.1.1:4.3.2:6.3.5 +5.4.2:2.5.1:2.3.1:2.4.2:3.4.13:2.6.1:4.1.1:6.3.2:3.2.1 +4.4.1:3.5.1:3.1.3:2.4.2:1.1.1:1.1.1 +2.1.1:2.5.1:4.1.1:1.1.1 +2.4.2:2.6.1:2.7.1 +4.1.1:2.7.7:6.3.5:5.1.3 +3.1.2:2.7.7 +2.7.7:2.7.1:4.1.2:1.2.1:1.1.1:4.2.1 +6.4.1:3.1.1:3.5.1:3.1.2:2.4.1 +3.5.1:6.3.3:6.3.3:1.1.1 +5.4.2:5.3.1:1.2.1 +2.7.1:2.3.1:2.7.2 +2.5.1:6.2.1:1.3.1 +5.4.2:3.1.1:2.7.4:4.1.1 +3.1.2:1.1.1 +4.1.1:2.1.3:1.1.1:1.4.3:2.7.1:2.1.2:5.3.1 +2.6.1:2.5.1 +2.7.4:6.3.2:6.3.2:3.5.1:4.3.1 +2.7.1:1.5.99:2.1.1:2.5.1:2.5.1:2.5.1:5.4.2:2.7.4:4.1.1 +4.4.1:1.4.1:2.1.2:3.5.4:3.1.3:1.14.16:2.7.9:6.3.4:2.6.1:3.4.13:4.3.1 +5.1.3:2.7.4 +2.1.2:2.1.1:5.3.1 +1.14.13:4.3.2:6.3.1:6.3.2:4.3.2:5.3.1:2.7.6:2.7.1 +1.5.1:2.4.2 +1.4.1:2.3.1:4.2.1:1.1.1:2.3.1:2.7.1:2.5.1:4.1.2 +5.4.2:3.1.7:2.7.2:2.1.2 +2.6.1:5.1.1:2.3.1:5.3.1:3.1.1:2.7.1:3.6.1:1.4.3:2.5.1:3.5.1 +3.5.1:3.6.1:2.7.7:3.5.3:2.3.1:2.3.1:2.5.1:2.3.1:1.5.1:2.7.1 +3.1.3:2.3.1:2.7.1:4.2.1 +1.1.1:1.5.1:4.3.2:2.5.1:2.3.1:4.1.3 +3.5.99:4.4.1:4.4.1:4.3.2:4.3.1 +4.2.1:2.3.1:1.2.1:2.1.1:2.1.1 +5.3.1:4.3.1:1.2.1:3.5.4:3.5.1 +3.4.11:2.4.1:2.5.1:5.1.3:4.1.1:4.1.3:5.4.2:1.4.1 +1.1.1:2.4.2 +4.1.1:2.7.2:3.5.1:2.5.1:4.3.1:2.1.3:2.7.2:3.1.4:4.1.1:4.1.2:1.5.1:2.7.6:2.5.1 +2.3.3:1.14.13:2.6.1:6.3.4 +2.7.2:3.5.1:3.5.1:1.4.1 +6.3.1:2.7.1:3.5.1:3.5.3 +2.5.1:1.4.1:5.4.2 +2.5.1:1.1.1:1.5.99 +2.4.2:4.2.1:6.3.2 +3.5.3:3.1.4:2.5.1:4.3.2:5.4.2:4.2.3:4.2.1 +1.2.1:4.2.3:5.4.99:2.5.1:2.2.1:2.3.3 +1.8.1:2.6.1:9.9.9:1.2.1:3.1.2 +1.4.4:2.6.1:2.7.2:1.2.4:2.7.1 +5.1.1:5.4.99:2.4.2:6.3.3:4.1.1:2.1.2:3.2.1:2.3.1 +1.2.1:2.7.4:3.6.1:2.5.1:5.3.1:4.2.1:2.3.1:4.3.1:3.5.4:6.3.4 +2.5.1:3.5.1:2.7.1:2.7.1:2.7.1:4.99.1:2.1.2 +2.7.1:4.4.1:2.7.6:4.3.1 +4.1.2:3.5.99:3.5.1:2.1.1 +2.7.1:2.5.1:4.1.1:2.6.1 +2.7.1:2.7.1:2.7.2:1.5.1 +5.4.2:2.3.1:2.1.1:2.7.1:2.5.1:2.1.3 +2.3.1:3.5.1:2.3.3:2.3.1:2.8.3:2.7.1:3.1.1 +2.3.1:1.2.1:3.5.99:1.2.1 +1.1.1:1.13.12:3.1.3:5.4.99:1.1.1:2.5.1:1.2.1:1.14.13:4.1.1 +2.5.1:5.3.3:5.3.1:2.1.4:6.2.1:4.2.1:3.5.1:2.7.2 +2.3.1:6.3.4 +4.1.2:4.1.1:1.2.4:6.3.5:6.3.4 +1.2.1:2.6.1:2.3.1 +6.3.4:4.2.3:2.6.1:4.1.2:5.1.3 +1.18.-:2.2.1:2.1.2 +4.3.2:2.6.1:2.4.2:1.12.99:2.7.4:2.3.1:2.7.1:1.1.1:2.3.1 +1.5.1:2.7.2:5.3.1:2.7.1 +2.3.1:2.1.3:3.2.1 +4.4.1:6.2.1:2.4.1:2.7.7:6.3.5:6.3.4:2.7.4 +1.4.1:6.3.4:1.5.1:1.5.99:6.3.4:5.3.1:4.3.2:3.1.3:3.5.1:2.6.1:3.1.3:1.3.1 +2.7.1:4.2.1:1.3.1 +5.1.3:2.3.1:5.3.1:5.3.1:2.5.1:2.6.1:2.3.1:6.3.5:1.1.1:2.3.1 +2.6.1:5.3.1:6.3.1:2.1.2:4.1.2:4.2.- +2.6.1:6.3.2:1.1.1:3.5.3:6.2.1 +4.3.2:2.1.1:2.1.2:5.4.2 +2.4.2:2.6.1:4.3.1:3.5.3:1.1.1:3.2.1:2.3.1 +1.1.1:4.3.1:4.4.1:4.1.3:2.7.4:2.8.1:4.1.1 +6.2.1:2.7.8:6.3.4:2.5.1:1.4.1:4.2.1:4.1.1:5.3.1 +6.4.1:2.7.1:4.1.1 +4.1.2:3.4.11:6.3.5:4.3.1:2.1.4 +6.3.3:4.1.1:1.18.6:6.3.1 +3.5.3:5.1.1:2.1.3:6.3.4 +2.7.8:4.1.2:4.2.1 +3.6.1:4.2.1:1.1.1:3.2.1:6.3.4:1.1.1:3.1.3 +2.6.1:9.9.9:1.1.1 +3.2.1:3.6.1:4.1.1:2.7.2:3.5.1:5.3.1 +2.5.1:2.7.7:2.7.4 +2.7.1:5.3.1:2.3.1:2.3.1:4.1.1:3.5.1:3.2.2:2.4.2 +1.6.1:2.7.8:9.9.9:5.4.2:2.5.1:2.3.3:3.4.13:1.4.1:4.2.3 +3.6.1:4.1.2:4.3.1:2.7.4 +1.17.1:6.3.2:1.1.1 +4.3.2:2.7.2:1.2.4:6.3.4:6.2.1:3.5.4:4.3.2 +6.3.4:1.2.4:2.5.1:2.7.7:4.6.1 +1.13.11:6.3.3:4.2.1:3.1.3:1.4.1:2.1.1 +3.5.1:4.2.1:4.1.2:1.5.1 +2.5.1:4.1.3:2.7.4 +2.3.2:6.3.2:1.3.1:1.2.1:4.1.1 +3.5.1:2.6.1:3.1.3:6.3.1 +4.3.2:2.7.2:3.1.3 +1.1.1:2.3.1:4.1.3:3.5.3 +4.2.1:2.1.2:6.2.1:2.7.8:3.5.1:1.1.1 +2.6.1:4.1.1:2.7.2 +3.1.3:3.5.1:2.1.1:3.5.99 +1.14.13:4.2.3:1.2.1:3.5.3:1.2.4 +2.1.3:4.3.1:3.5.4:5.3.1:2.5.1 +2.7.1:4.2.3:2.7.2:4.2.3:4.2.3:6.2.1 +1.7.99:2.7.4:4.3.1:4.4.1 +2.7.1:2.7.1:2.7.4:2.4.2:2.6.1:6.2.1:2.5.1 +2.1.3:1.5.1:4.1.1:6.3.2:2.4.2:1.2.1:2.7.4 +2.7.7:2.6.1 +4.1.1:1.3.1:3.5.1:2.1.1:3.1.3:2.5.1:4.1.2:1.5.1:4.1.1:5.4.2:2.5.1:2.5.1 +4.4.1:1.2.1:2.3.1:6.3.2:4.2.3:1.3.99 +1.5.1:1.2.5:2.3.1 +5.4.2:2.7.7:2.7.4 +4.1.1:2.8.1:2.7.1:4.1.2 +3.1.1:4.2.1 +5.1.3:4.3.2:3.5.1:4.1.1 +3.1.2:3.5.3:3.2.2 +6.3.4:2.7.1 +5.3.1:6.3.2:1.8.1:4.2.1:3.1.1:4.2.3:5.4.99:2.7.1:1.17.1:4.1.3:3.1.1:2.3.1 +2.3.1:3.5.1:1.2.1:1.1.3:5.1.3:1.1.1:3.1.2 +1.2.1:1.2.1:2.6.1:2.1.3:4.2.1 +6.3.2:2.1.3:2.7.1 +1.2.4:2.6.1:2.4.2:1.2.1:2.7.7:2.6.1 +2.6.1:2.6.1:2.7.7 +2.7.1:2.3.1:2.4.2:1.5.1:2.7.1 +1.2.1:4.1.1:1.13.11:1.2.4:3.5.5:5.4.99 +1.7.2:2.7.1:2.7.1:2.7.4:2.4.2 +4.2.1:3.1.4:2.3.1 +3.5.3:2.7.7:2.3.1:2.1.2 +4.3.2:1.1.1:5.3.1:1.5.1:2.2.1:4.1.3:4.1.1 +2.3.3:2.1.1:2.7.1:4.1.2:2.4.2:6.3.5:2.1.1:2.3.1 +2.7.8:3.1.3:1.2.4:4.3.2:5.4.99:3.5.4 +2.6.1:2.3.1:2.1.1:2.4.1:2.1.2 +2.7.9:2.3.1:2.3.1:4.3.2:1.4.3 +3.1.1:4.1.1:4.3.1:3.5.1 +4.1.1:1.4.1:6.3.5:2.7.1:1.1.1:5.1.3:2.3.1:1.2.1:2.7.2:1.4.1 +2.7.6:4.1.1:1.2.1 +2.7.1:4.2.1:2.5.1:4.99.1 +2.4.2:1.4.1:4.2.3:2.3.1:5.2.1:1.1.1:5.4.2:2.5.1 +1.4.1:2.5.1:4.2.1:2.7.7:3.5.4:6.3.2:5.4.3 +6.3.5:1.5.1:4.3.1:2.3.1 +3.1.4:1.1.1:4.1.1:3.5.1:2.7.7:4.3.2:2.1.2:1.5.1:3.5.1:2.7.2:4.1.1:6.3.2:6.3.4 +1.13.11:4.1.1:6.3.2 +3.2.1:2.1.1:4.2.3:2.5.1:2.1.1 +2.1.3:3.5.1:2.7.4:3.5.1:2.6.1:2.1.3 +2.7.1:2.6.1:4.3.1:1.5.1:3.6.1 +3.5.3:6.3.3:2.7.1:3.5.1:1.1.1:2.6.1:2.7.1:2.7.1:2.7.2 +1.1.1:4.1.1:3.6.1:1.1.1:3.1.1:6.3.4 +6.3.5:4.1.2:1.8.1:4.1.1:2.3.1:1.5.1:6.3.5 +2.4.2:1.3.3:3.2.2:2.7.2 +4.2.1:2.3.1:6.3.1:4.2.1:3.2.1:2.3.1:6.4.1 +2.1.2:4.2.1:3.6.1:2.7.8:1.1.1:5.3.1 +2.3.1:2.8.1:4.1.1:2.1.1:2.7.1 +2.5.1:4.2.1:4.1.1:1.4.1:3.1.1 +6.3.4:2.5.1:3.5.1:1.3.99 +1.17.4:2.3.1:5.4.2:2.3.1:3.4.11:1.18.6 +2.7.7:3.5.1:2.7.1:2.4.2:1.3.99:4.1.1:4.4.1:2.7.2:2.7.2:2.4.2 +3.1.3:1.13.11:2.7.6 +2.5.1:6.3.4:1.5.99:2.7.1:5.4.2:1.5.1:3.6.1 +4.3.2:2.7.1:2.5.1:2.7.2:3.1.3:3.5.1:4.3.1:2.7.1 +6.3.4:2.5.1:4.2.1 +4.3.2:1.1.1:2.5.1:6.3.2:6.3.3:2.7.1:4.2.1:2.7.8:2.7.4:3.5.3:2.4.2:2.5.1:2.4.2:1.4.1 +3.5.1:2.3.1:6.3.4:3.2.1:3.5.1 +2.5.1:2.3.1:2.4.1:2.3.1 +2.7.1:2.7.4:4.3.1:4.3.1:4.1.1:2.7.1:4.2.1 +3.2.1:2.3.1:2.2.1 +2.1.2:3.6.1:3.1.3:1.8.1:2.7.2:2.4.2:6.3.5:1.7.99 +4.1.3:4.2.1:1.5.99:1.4.1:2.3.3:4.1.2:1.3.3 +2.7.1:2.6.1:4.1.2:4.1.1:2.1.4:2.8.1:2.6.1:2.7.2 +1.2.1:2.7.4:2.3.1 +5.4.2:2.7.2:2.7.2 +4.3.1:2.7.2:1.5.1:2.7.1 +1.2.7:3.1.3 +2.7.1:9.9.9:2.7.1:2.7.2 +6.3.3:4.1.1:1.7.2:2.5.1:1.11.1:2.7.4 +6.4.1:1.1.1:3.1.2:2.7.7:2.3.1 +3.6.1:2.3.1:1.17.1:6.3.4:3.5.1 +2.7.7:4.2.3:2.7.4:2.7.7 +2.7.9:6.2.1:2.3.1:9.9.9:3.5.99:2.1.2:4.1.1:5.3.1:3.5.1 +4.4.1:3.5.1:1.1.1:3.1.3:6.3.4:1.11.1:4.3.1:2.7.4:2.7.6:2.3.1:4.1.3:1.4.99:1.1.1 +3.5.2:1.1.1:3.6.1:2.5.1:2.1.2 +2.3.1:1.2.1 +1.4.99:3.1.3:3.5.1:2.3.3:4.1.1:3.5.1 +2.4.2:2.7.1:2.7.4:2.7.2:2.6.1:4.2.3:1.2.1:2.7.4 +1.4.1:4.3.1:2.4.2:2.5.1 +4.1.2:6.3.4:2.3.1:4.1.1:4.1.1:6.3.4:4.1.1:4.3.2 +4.3.2:1.2.1:3.1.4:3.5.2:1.1.1:2.3.1:3.5.4:3.5.1:5.1.3:2.1.3:2.1.1 +2.3.1:9.9.9:3.1.4:2.1.1 +2.7.2:5.4.99:3.1.3:3.4.13:1.2.7:6.3.4 +2.6.1:3.5.1:1.2.5:4.2.1:3.5.1:3.6.1 +3.1.1:1.14.16:6.3.1:4.4.1:4.1.1:1.1.1:3.1.4:4.3.2:4.1.1 +2.1.2:6.3.5:2.7.8:2.7.9:3.1.3 +1.2.1:2.1.2:2.7.7:2.7.1:5.4.99 +6.3.4:4.4.1:3.5.1:4.1.3 +5.4.99:5.1.1 +2.3.1:6.3.4:2.3.1:6.3.3:1.4.1:1.2.1:5.4.99:2.7.4 +2.5.1:2.3.1:2.1.1:5.1.1:2.4.2:4.1.1:4.99.1:9.9.9:1.1.5:5.3.1:2.3.1 +4.2.1:1.1.1:5.4.2:4.1.1:2.1.2:6.3.4:2.3.1:4.1.1 +6.3.5:1.4.1:2.7.2:5.1.3:1.2.4 +2.1.2:4.3.1:1.1.1:3.5.1:6.3.1:1.2.1:6.3.5:1.17.4:1.4.1:4.1.1:4.4.1:2.5.1 +4.1.1:2.7.7:6.3.5:2.5.1:2.3.1:2.7.1:6.3.4:1.2.1:3.4.13:2.7.2:1.5.1:2.1.1 +2.7.1:4.3.1:2.3.1:2.3.1:3.5.4:2.5.1:1.1.1:6.3.4:3.2.1:4.1.2:4.1.1:2.1.1:4.1.1 +2.3.1:2.4.2:6.3.2:1.1.1:4.99.1:2.5.1 +1.2.4:2.4.2 +6.3.4:3.5.99 +3.5.3:2.6.1:4.3.2 +1.5.1:4.1.1:6.3.3:1.1.1:4.1.1 +4.2.1:3.5.3:2.2.1:1.7.2 +1.3.99:1.1.1:6.4.1:2.7.1:4.3.2 +1.4.99:2.3.3:3.5.1 +2.3.1:4.2.-:1.1.2:3.1.3:5.3.1:4.2.1:5.4.2:6.3.5:2.7.2 +4.3.1:4.2.1:1.17.4:2.3.1:2.6.1:3.5.1:4.3.2:6.3.4:3.6.1 +3.5.1:4.1.3:4.1.2:1.2.1:1.3.99:1.2.1:1.2.4:2.7.7 +2.5.1:2.1.1 +1.5.1:1.4.1:2.4.2:4.2.1:2.6.1:1.5.1 +2.5.1:4.3.1:3.5.1:2.3.1:5.1.3 +6.3.4:1.5.1 +2.3.1:3.7.1:2.6.1:2.3.1:2.7.4:4.2.3:2.5.1:6.3.4 +4.3.1:2.6.1:3.5.4:1.1.1 +6.3.5:1.-.-:2.1.2:2.7.1:5.4.2:1.1.1:5.4.2:2.1.1 +4.1.1:2.4.2:3.1.3:2.7.2:4.1.3 +2.3.1:2.7.1:4.2.1:2.4.1:2.1.2:1.1.1:1.1.1:5.4.99 +4.3.2:5.1.3:2.7.4:5.4.2 +6.3.4:2.3.1:2.5.1:4.1.2:2.7.1:5.4.99 +1.4.4:2.4.2:2.4.2 +6.3.2:6.3.5:6.3.2:2.1.4:2.5.1 +5.4.2:3.5.1:3.1.1 +2.1.2:6.3.2:2.7.7:6.3.3:6.3.2 +6.3.3:1.2.1:6.3.4:6.3.1:2.7.1 +1.1.1:2.5.1:2.7.1:3.4.13 +2.3.3:2.7.7:2.4.1:2.3.3:3.5.4:2.7.4:6.4.1:2.7.2 +2.5.1:1.1.2 +2.4.1:5.1.3:2.4.2:2.1.2:2.7.1:1.1.1:4.1.3 +2.7.1:4.3.1:2.7.1:6.6.1:2.7.4:2.1.2 +6.3.2:2.7.1:1.4.3:6.3.2:3.1.3:4.4.1 +2.6.1:3.1.2:1.2.1:2.7.7:6.4.1:6.3.5 +2.7.4:6.3.5:4.1.1:2.7.2:3.1.1:1.1.1 +2.7.1:2.3.1:3.1.2:4.2.1 +2.7.4:3.5.1:6.3.2:3.1.1:2.6.1:1.13.11:6.3.4:5.4.99:2.7.7:3.6.1:2.7.1 +4.3.2:3.3.1:4.4.1:2.7.4:3.5.4:2.5.1:2.4.2:2.3.3 +2.1.3:2.7.4:2.6.1:1.5.1 +1.2.4:6.3.1:1.2.1 +2.1.1:5.4.2:4.1.1:2.6.1:1.1.1:4.4.1:2.5.1:6.3.2:3.5.3 +2.4.2:2.3.3:1.2.1:3.6.1:2.7.1:1.1.1 +6.3.5:3.5.3:3.4.11:3.5.4:4.4.1:6.3.2:1.5.99:1.8.1 +6.3.4:4.1.1:6.3.3:4.1.1 +2.7.1:2.4.2:2.3.1:2.6.1:2.2.1:2.7.1 +4.2.1:5.4.2:3.1.3:1.2.1 +1.1.1:2.4.2:5.3.1:4.1.1 +2.1.1:4.1.1:1.1.1:2.1.1:1.1.2 +6.4.1:1.97.1:2.4.2:2.7.4 +2.7.2:2.3.1:2.3.1:3.5.5:3.1.3 +1.5.1:2.1.2:4.1.2:2.4.1:4.2.1:2.7.1:2.6.1 +3.5.3:1.8.1:4.1.2:2.5.1:2.5.1:3.5.1 +2.3.1:3.1.3:2.5.1:1.2.1:6.3.5:2.3.1:2.1.1:4.3.1 +2.3.3:4.1.1:6.3.4:1.2.1 +3.1.3:1.4.3:4.2.3:2.8.1:3.5.4 +6.2.1:4.3.2:1.8.1:2.3.1:3.5.1 +6.2.1:3.1.3 +2.3.1:2.7.8:4.1.1 +2.7.7:2.3.1:4.3.1:2.7.8:5.4.99:4.3.2:1.1.1:2.5.1:1.2.7:1.5.1:4.1.2:3.4.11:1.2.1 +3.5.3:3.6.1 +4.4.1:2.4.1:4.1.2:1.5.99:4.1.1 +3.5.3:5.3.1 +2.3.1:5.4.2:1.1.1:1.4.4:2.7.8:2.3.1 +3.6.1:6.3.5:2.5.1:2.7.2:2.7.7:2.6.1:2.3.1 +1.17.4:4.1.1:4.1.2:1.17.1:2.6.1:2.4.2:3.5.1 +3.6.1:4.1.1:3.6.1:2.7.1:2.6.1:3.1.3 +4.1.1:1.1.1:6.1.1:3.5.4:6.3.2 +3.5.1:4.3.2:6.3.4:1.2.1:6.2.1:3.1.4 +6.3.3:2.3.1:6.2.1:2.7.1 +1.5.1:2.3.1:4.3.1:2.3.1:1.2.7:2.3.1:3.5.3:3.1.3:4.1.1:6.2.1:9.9.9:2.1.3 +1.1.1:1.8.1:4.1.2:5.4.2 +2.7.9:1.3.3:4.1.2 +2.7.1:3.5.3:2.7.1:1.2.1:2.7.1:1.4.1:2.6.1 +1.5.1:4.1.1:1.14.13:4.3.2:2.7.1:2.7.4:6.3.5 +2.7.7:2.1.1:2.3.1:2.7.4 +2.5.1:3.4.11:4.2.- +2.7.1:2.3.1:2.8.3:3.5.4 +1.2.1:6.3.1:2.3.1:2.4.2:1.7.2:6.3.2:4.1.3 +1.2.1:1.1.1:2.3.1:2.6.1:2.6.1 +2.6.1:4.4.1:3.5.1:1.2.4:2.5.1 +2.1.3:2.4.2:3.5.3 +1.1.1:4.1.3:1.1.1:1.11.1:3.5.3:1.1.5 +2.3.1:2.7.7:2.8.3:2.3.3:3.1.2:4.1.1:2.7.1:3.1.1:4.99.1:2.7.4:4.1.1:2.1.3:1.2.1 +2.5.1:2.3.1:2.7.7:2.3.1:2.3.1 +5.1.3:5.1.1:2.7.1:1.3.3:4.1.2:5.3.1:4.1.1:4.1.1:4.1.1:1.2.1:3.5.2 +3.5.3:2.4.2:4.1.1:1.3.99:3.6.1:3.5.3:1.4.1:2.2.1:1.5.99:1.1.1:3.5.1:4.3.1 +2.3.1:1.17.4:4.4.1:5.4.2:4.1.1 +1.7.3:5.1.1:5.3.1:6.2.1:2.3.3 +2.3.1:4.3.1:3.5.3 +4.1.1:3.5.3:2.4.2:2.7.7:3.5.1:3.5.3:2.7.1 +3.1.2:6.3.4:3.5.4:4.2.1 +6.3.2:3.5.3:2.1.3:1.2.1:2.7.4:6.3.2 +2.6.1:6.3.5:2.7.2:6.3.4:3.5.1:6.3.2 +3.1.3:2.5.1:3.6.1:2.3.3:1.2.1 +4.1.1:6.1.1:6.3.2:5.4.99:2.7.7:2.7.1:2.7.2:2.7.1 +2.7.1:4.3.1:2.5.1:4.3.1:2.7.1:2.7.6 +6.3.4:3.5.1 +5.4.99:3.2.1:2.5.1:1.4.1 +5.3.1:6.3.3:6.3.5:2.7.7:4.1.1 +6.3.4:1.5.1:2.7.2:2.1.3:2.6.1:3.5.2:4.1.3:1.8.1 +4.3.1:1.4.3:5.4.2:3.5.1:3.6.1:1.1.1:2.3.1:3.5.3:5.4.99 +3.1.4:6.4.1:1.3.99:1.5.1:4.4.1:4.2.- +1.4.1:5.1.1:2.7.1 +6.3.1:2.4.2:2.1.1:4.1.1:2.7.1:6.3.2:2.6.1 +1.1.1:5.3.1:3.5.3:2.4.1:4.1.1 +2.2.1:4.1.1:6.3.4:2.6.1 +2.6.1:2.1.3:2.4.2:1.2.1:1.4.3:1.1.1:4.2.3:2.7.1:4.1.3:4.1.2:1.1.1:1.7.2 +2.4.2:2.5.1:2.1.2:4.1.1:2.3.1 +4.1.2:1.1.1:1.1.1:2.7.2:2.1.1:2.1.2:6.2.1:4.1.1 +2.6.1:1.1.1:2.1.2:2.4.2:6.3.5 +2.1.4:4.99.1:2.1.1:2.7.2 +1.3.99:5.1.1:2.1.2:1.3.99:4.3.2 +1.3.99:3.5.99:2.3.3:4.3.2:1.2.1 +2.5.1:2.7.4:2.1.1 +1.2.1:2.7.2:4.2.3:2.7.7:6.3.5:4.1.1:4.3.1:3.5.1:1.14.16:3.1.1:2.4.2 +2.7.2:4.1.1:5.4.99:4.1.3:5.4.2:2.5.1 +6.3.4:4.2.1:1.3.1:1.4.1:2.7.2:2.6.1:6.3.4 +5.3.1:5.3.1:3.1.4:3.1.3:2.7.1:3.1.3:1.5.1:4.2.3:2.1.1:2.4.1:6.2.1:2.1.1:6.3.5 +4.1.3:2.7.9:3.1.1:6.3.4:2.7.1 +2.3.3:2.4.2:3.1.3:2.1.2:2.5.1 +6.3.4:1.4.3:1.1.1:2.7.1:2.7.4:4.2.3 +2.6.1:2.5.1:9.9.9:5.4.99:1.2.4 +1.1.1:4.2.1:3.2.1 +2.4.2:4.3.1:2.7.4 +1.2.1:6.3.4:3.2.1:5.4.2 +4.2.1:2.7.4:6.2.1:4.1.1 +1.13.11:5.3.1:2.7.7 +1.2.4:5.3.1:2.7.1:4.3.2:2.6.1 +5.3.1:4.3.1:4.1.2:6.3.1:4.3.2:2.7.1:2.4.2 +2.7.7:2.1.2:1.4.3 +2.7.4:2.6.1:2.1.3 +3.6.1:1.-.-:2.7.1 +4.3.1:2.5.1:2.4.2:2.4.2 +4.3.2:6.3.2:1.1.1:2.4.2 +1.8.1:6.3.3:3.2.1:5.3.1:1.1.1 +2.5.1:6.3.1:6.3.4:1.2.1 +1.3.3:5.4.99:1.1.1 +6.3.1:1.2.1:2.7.1:6.2.1:5.3.1 +4.3.2:6.4.1:2.7.2 +2.7.4:1.1.1 +6.3.4:4.2.1:1.4.1:2.3.1:2.6.1:3.1.3:2.5.1:4.1.1:2.6.1:2.7.4:4.2.1:2.7.4:4.2.1 +2.7.1:2.3.3:5.4.99:5.3.1:2.5.1 +1.5.1:5.3.1:1.4.3 +6.3.4:2.6.1:5.1.3 +2.7.7:6.2.1:3.1.7:4.1.1 +2.7.1:1.7.2:2.7.1 +2.3.1:1.1.1:3.5.1:3.1.3:4.6.1 +6.6.1:1.2.1:2.6.1:2.7.1 +2.7.4:4.1.1:4.1.1 +2.7.1:3.2.2:3.6.1:2.7.2:3.1.3:2.7.2:3.6.1 +2.3.3:6.4.1:5.1.2 +4.1.1:3.6.1:6.3.3:4.3.2:4.2.1:6.3.2:6.3.2 +3.5.1:6.2.1 +5.1.1:1.1.1:2.7.2:2.7.1:1.3.99 +6.3.4:1.8.1:2.7.7:2.5.1 +2.5.1:2.1.2:2.7.1:6.3.2:4.2.1:4.3.2:2.7.4 +1.4.1:3.1.2:3.5.1 +4.1.2:4.6.1:2.7.1:2.7.2 +4.1.1:6.3.3:5.5.1:2.7.1 +1.1.2:1.5.3:4.1.3:6.3.5:1.2.1:5.4.99 +1.5.1:1.2.1 +1.5.1:6.2.1:2.4.2:4.2.3:1.5.1 +2.7.2:2.5.1:2.5.1:5.4.2:2.7.1:4.3.1:2.1.2:6.3.4 +2.7.4:1.2.5:1.13.11 +2.7.2:6.3.5:2.6.1:4.2.3:3.1.3:4.1.1 +3.1.1:5.4.99:2.5.1:2.7.2:6.3.5 +5.4.2:4.1.1:4.1.2 +4.1.1:5.3.1:2.7.8:2.5.1:5.2.1:9.9.9:5.4.99:5.1.1:2.7.1:4.3.1:2.7.7:1.3.99 +2.5.1:1.1.1:1.2.1:1.4.1 +3.5.4:2.7.1:1.2.1:2.6.1:2.2.1:2.4.2:2.7.1 +2.6.1:4.3.2:6.3.2:4.1.1:2.5.1 +4.1.3:4.3.2:2.4.2:4.3.2:2.7.9:2.7.9 +3.2.1:4.1.1:3.6.1:4.1.2 +3.5.1:2.6.1 +2.7.4:2.6.1:2.5.1:3.2.1:2.3.2:4.1.1:1.1.1 +1.5.1:3.1.2:3.5.3:4.2.1:4.1.1:4.3.2:1.4.1:2.3.1:2.7.1:4.3.1:1.1.3:2.4.1 +2.1.3:2.1.2:5.3.1:6.3.3:2.6.1:2.8.1:1.4.1:2.7.7:1.17.4 +2.4.2:2.5.1:2.7.1:4.2.3:5.3.1 +2.1.2:4.2.1:2.3.1:6.3.2:2.5.1:1.3.3 +3.1.3:4.1.3:4.2.3 +3.1.3:6.3.4:2.3.1:4.2.1:6.3.4:2.3.1:2.5.1 +1.2.1:3.5.1:1.2.1:4.1.3:4.1.1:2.7.4:2.7.8 +1.1.1:2.4.2:2.4.1:5.4.2:2.3.1:6.3.2:2.7.2 +2.5.1:1.2.1:2.1.1:4.1.3:1.1.1:2.1.2 +1.4.1:4.3.1:2.3.1 +5.4.99:4.3.2:2.5.1 +1.5.1:1.2.1:6.3.5:2.3.1 +2.7.1:6.3.2:2.4.2:2.7.1 +3.6.1:2.7.2:4.3.2:2.1.3:1.5.1:1.4.1:4.3.1:2.7.2:3.5.1 +4.1.2:1.1.1:2.3.1:4.3.1:4.3.2:4.1.1:1.17.4:2.1.2 +1.1.3:4.2.1:4.1.3:2.4.2:1.2.1:6.3.4:5.3.1 +2.1.2:3.5.1 +2.3.1:2.4.2:3.5.1:2.3.1 +5.4.2:3.5.1:5.1.3 +2.6.1:4.3.2:1.1.1:2.4.2:3.5.3:4.1.3 +1.8.1:2.7.1:4.1.3:3.5.3:2.3.1 +2.7.2:4.1.1:5.4.99:3.1.3:3.5.3 +4.1.1:6.3.2:1.1.1:6.3.3:4.2.1 +2.6.1:6.3.4:5.4.99 +2.7.9:1.4.1:3.2.1:3.2.2:2.1.1:6.3.4 +5.1.3:2.1.3:2.7.1 +2.1.2:5.1.2:1.1.1:6.2.1:3.6.1:4.3.2:4.1.2:3.1.3:1.1.1:2.5.1 +1.7.2:4.2.-:2.7.4:1.2.1 +2.7.2:5.4.2:2.7.7 +2.5.1:4.3.1:2.6.1:6.1.1 +2.7.1:2.6.1 +6.2.1:5.4.4:2.1.1:2.7.1 +2.1.1:2.7.2:4.2.1:2.7.2 +1.3.1:2.7.7:2.1.3:3.5.3 +2.7.1:1.2.1:4.2.3:4.2.3:1.7.2:1.2.1:1.17.4:6.2.1 +5.3.1:4.1.1:5.4.99:2.7.1:2.7.1:2.7.2 +2.1.2:6.3.4:2.1.1 +6.2.1:4.1.1:4.1.1 +2.7.4:6.3.4:3.1.3:2.7.1:1.2.1:3.5.3:2.7.1:3.1.1:1.13.11:4.2.1:3.2.2 +4.2.3:2.7.2:6.3.2:2.6.1:5.1.1:6.3.4 +2.4.1:2.1.2:3.5.1:3.4.13:2.4.2:2.6.1:6.3.5:3.5.1 +2.7.2:4.4.1:3.6.1:4.3.1:3.1.1:1.5.1:1.17.1 +3.6.1:2.7.7:2.3.1:6.2.1 +2.6.1:5.4.99:6.2.1:6.3.4 +2.6.1:2.5.1:6.3.4 +4.3.1:2.7.4 +5.4.2:6.3.4:4.3.2:4.3.1 +4.1.2:2.7.1 +2.7.4:2.5.1:2.1.3:1.4.1 +2.8.3:2.7.4:6.3.5:3.5.3:5.4.99 +2.7.7:5.2.1:2.7.1:1.2.1:2.7.1 +1.3.1:2.6.1:1.5.1:2.1.2:6.3.4:6.3.4 +2.7.1:2.3.1:4.1.1:5.4.99:4.1.1:2.3.1:5.4.2 +4.2.1:2.7.8:2.5.1:3.2.1:6.3.4:4.4.1:4.1.1 +2.7.1:2.3.1:3.5.1:4.3.1:4.1.1:2.5.1:6.3.2:1.1.1:6.3.3:1.4.1:4.3.1:4.3.1 +4.1.1:3.3.1:4.3.2:2.3.1:4.1.2 +3.2.2:2.6.1:2.7.1:4.3.2:5.1.2:3.1.1:2.6.1:2.1.2:1.5.1:2.3.1 +5.4.2:6.2.1:2.3.1:4.3.1:1.1.1:3.1.3 +1.1.1:6.4.1:3.5.1:3.5.1:2.4.1:3.5.4:3.5.1:3.5.1:4.3.1:3.5.1 +1.1.1:1.1.3:4.2.1 +2.5.1:2.7.6:2.7.2:3.4.13:2.6.1:2.1.1:6.3.2:2.7.1:4.2.1 +3.5.4:1.3.99:1.2.1:2.1.1:4.1.3 +5.3.1:6.3.2:3.5.3 +4.1.2:1.2.1:1.14.-:2.7.2:6.3.4:3.5.1:4.3.1:2.6.1:1.1.1:1.3.1:6.3.5:2.7.4:2.7.1:1.3.99 +4.1.1:4.1.2 +1.2.5:1.7.2:2.4.2 +2.3.1:4.2.1:4.2.1:3.3.1 +2.1.3:3.5.4:4.4.1 +6.3.1:2.7.8:6.3.4:6.3.3 +4.4.1:2.3.1:4.3.1 +2.3.1:4.1.1:3.1.2:3.5.1:6.3.2:2.7.4:1.2.1:5.3.1:3.5.1 +2.3.1:4.2.1:4.3.1:4.3.1:4.1.1:6.2.1:2.7.1 +2.7.7:2.3.3:6.3.4 +9.9.9:5.5.1:2.7.1:2.3.1 +2.3.1:1.5.1:2.4.1:4.1.1:2.5.1:1.1.1:2.1.1:2.6.1:3.1.3 +2.7.2:2.7.6:1.17.4:2.6.1:3.5.3:4.1.1 +4.2.1:2.1.1:6.3.4:3.2.1:1.1.1:5.4.2:5.4.2 +2.7.7:2.7.4:3.1.3:2.1.4:3.5.4 +2.7.6:1.3.1:2.3.1:4.3.2:2.7.8 +2.7.2:2.3.1:2.3.1:3.5.1:3.2.2 +6.3.4:1.1.1:4.1.1:5.4.2:2.7.2:2.4.2:2.7.2 +6.3.4:1.4.1 +1.1.1:2.3.1:1.3.1:2.1.2:2.1.3 +2.7.6:2.1.2:5.3.1 +2.2.1:2.4.2:5.1.1 +1.2.1:4.3.1:5.3.1:3.5.5 +3.5.3:6.3.2:4.3.1:4.1.3:1.5.99:1.1.1:1.5.1:2.7.1:3.4.13:2.1.2:2.3.1:5.1.2 +1.1.1:5.4.99:5.3.1:3.5.1:5.3.3:2.3.1 +5.3.1:6.3.3:4.1.1:4.1.3:2.4.2:2.7.2:4.2.1:1.14.13:3.2.1:2.3.1:2.7.6:2.1.2 +2.5.1:3.6.1:2.5.1:1.2.1:4.2.1 +1.2.1:1.1.1:3.5.3:4.1.1 +5.4.2:3.1.3:1.2.1:2.1.1 +1.2.1:1.14.12 +1.1.1:3.5.1:6.3.5:4.1.2:6.1.1:2.3.3:6.4.1:3.5.1:2.4.2:4.2.1:2.7.2 +2.3.1:5.1.2:1.4.1:6.3.4:1.1.1:2.7.1:2.6.1:1.1.1:5.4.99 +4.2.1:4.2.1 +4.4.1:3.5.3 +2.1.1:2.3.3:4.2.1:1.2.1:4.4.1:2.5.1:3.5.2:2.4.2:5.4.2 +6.3.2:5.4.99:4.3.2:6.3.5:5.1.1:2.7.2:2.7.8:6.3.5:3.1.4:6.3.4:4.4.1:2.7.1 +3.1.2:2.6.1 +2.6.1:2.6.1:2.7.1:1.4.1:6.3.3 +2.7.8:2.3.1:3.5.3:1.2.1:5.4.99:4.4.1:4.1.1 +1.2.1:2.3.1:1.17.4 +2.5.1:2.7.1:3.5.1:2.5.1 +1.14.99:2.7.7:2.3.3:4.1.1:6.2.1 +5.4.2:1.7.2:1.3.1:1.5.1:5.4.2:4.1.1 +2.1.1:1.1.1:2.4.2:4.1.2 +1.8.1:3.5.3:3.5.1:6.3.3:4.1.2 +6.3.2:2.7.1:1.2.4:2.7.1 +1.2.1:1.1.2:4.3.1 +4.1.2:1.4.1:4.4.1:2.6.1:6.3.2 +2.7.2:2.5.1:4.2.3:1.1.1:1.5.1:5.3.1 +6.3.5:1.5.1:1.18.-:3.6.1:6.3.4:1.7.2:2.4.2:1.4.1 +2.7.1:1.2.1:2.7.1:9.9.9:2.7.1 +1.2.1:2.3.1:3.6.1 +3.2.1:2.1.1 +2.7.2:2.7.1:6.3.4:2.4.2:1.1.1:2.6.1 +2.4.1:4.1.3:5.4.2 +6.3.3:4.3.2:2.1.1:2.1.2:1.3.99:5.1.3:2.3.1:3.2.1:3.5.1:4.1.1:1.1.1 +2.7.2:4.1.2:5.4.1:3.5.1:5.3.1:4.1.3:6.3.4:4.2.1 +1.1.1:4.1.1:1.1.1:2.7.1:1.8.1:1.5.99:4.1.1:3.1.7:2.5.1:1.1.1 +2.5.1:4.2.1:4.2.1:2.5.1:6.4.1:3.1.3 +2.5.1:1.2.5:4.3.2:1.17.1:4.1.1:3.6.1 +2.5.1:3.6.1:1.5.1:1.5.1:4.2.1:4.2.1:3.5.3:1.1.1:5.3.1:2.7.4:3.1.3:1.2.1:1.1.1:2.7.4:6.3.2:1.3.99 +4.3.2:6.3.2:2.6.1:1.2.1:3.5.3 +3.1.3:2.7.2:2.8.1 +2.4.2:2.6.1:2.7.1:6.3.2:4.3.2 +4.1.1:3.5.1:2.3.3:2.7.2:4.3.2 +1.2.1:4.2.1:6.2.1:6.3.5 +3.1.4:1.5.1 +1.7.1:4.1.3:6.3.5:3.5.1:6.3.2 +2.7.4:1.4.1:1.5.3:4.3.1 +4.1.1:2.3.1:6.3.5 +1.1.1:1.1.5:6.3.4:2.4.1:2.7.4:3.5.4:4.3.1 +5.3.1:1.8.1:1.4.1:1.5.1:4.1.1:1.8.1:2.5.1 +4.2.1:2.3.3:2.7.1:2.3.1:1.1.1 +2.7.8:2.7.6:6.4.1:4.1.1 +5.3.1:1.3.99:1.1.1:2.5.1:3.5.2 +1.1.1:2.6.1:4.1.1:2.7.8 +1.4.1:2.6.1:1.5.3:3.5.3:1.2.4:2.1.1:2.5.1:2.3.1:2.1.2:6.3.4:3.1.3:6.4.1:3.1.1 +1.2.1:6.3.4:4.6.1:2.5.1 +2.7.4:2.5.1:2.5.1:1.1.1:3.1.3:3.5.2:1.1.1:5.4.2:6.3.3:4.3.2:6.2.1 +3.6.1:1.7.99:1.11.1:2.7.1:2.7.4:4.3.1:4.3.1:2.7.7:5.4.2 +1.1.1:1.8.1:6.3.4:3.5.4 +4.3.1:4.2.-:2.1.3:4.2.1:1.3.99 +1.2.1:1.7.99:2.7.7:3.1.3:3.2.2:2.6.1:2.7.1:4.3.2:5.3.1:3.5.5:2.1.3:2.5.1 +2.7.7:3.6.1:4.3.2 +4.1.2:2.5.1:3.2.1:2.7.2:2.7.7:2.7.1:1.2.1:5.4.2 +4.99.1:3.1.1:1.1.1:2.6.1:4.1.2:3.5.1:4.1.1 +5.4.99:3.1.3:4.2.3:3.6.1:2.3.1 +6.2.1:1.1.1:2.7.8:2.7.2:1.5.1 +5.2.1:4.3.1:2.7.2:2.7.2:4.2.1 +2.3.3:2.3.1:5.3.1:3.2.1:1.1.3:3.4.13 +3.4.11:2.7.4:4.1.2 +2.5.1:1.1.1:6.3.5:2.7.1:4.1.2 +2.3.1:1.5.99:2.7.2 +5.3.1:2.1.1:2.8.1:2.1.1 +2.6.1:2.7.1:6.3.4:4.3.1:6.3.2 +5.1.3:4.1.2 +1.4.4:3.5.4:6.3.1:2.5.1:4.3.1 +4.1.2:2.8.3:2.4.2:2.7.4:3.5.4:5.4.99 +2.7.1:4.1.2:2.7.6:6.3.4:2.7.6:2.7.1:5.3.1 +3.5.99:3.1.3:6.3.4:4.3.1:2.7.1:3.1.3:2.4.2 +2.3.1:4.1.2:3.1.7:4.1.1:4.1.2 +2.3.3:1.1.1:2.3.2:1.4.1:2.3.1:3.5.4:1.4.1 +1.5.1:2.7.1 +5.-.-:4.1.1 +4.1.2:3.1.2:1.1.1:3.1.3:2.6.1:4.1.1:2.7.6:4.1.1:2.1.2:4.1.1:3.1.3:4.1.1:3.6.1 +2.7.7:2.2.1:2.4.1:2.4.2:3.1.3:6.3.2:2.6.1 +2.5.1:3.4.11:2.6.1:5.4.99:1.2.1 +2.6.1:3.5.4:2.1.1:4.1.1:4.3.1 +2.3.1:1.4.3:4.3.2:2.1.4:2.7.1 +4.1.1:2.7.1:2.7.1 +2.7.1:5.3.1:4.1.2:4.3.2 +2.3.1:3.6.1:5.1.3:2.1.2:2.1.1:1.2.4:2.5.1:5.1.3:5.1.3:3.5.4:3.2.1 +2.6.1:1.5.1:1.1.1:4.2.1:4.2.3:1.1.1:4.1.1 +2.4.2:4.3.2:5.4.99:2.7.9 +4.2.1:2.3.1:4.2.3:5.3.1:5.3.1 +2.7.7:1.5.1:1.4.1:1.2.1:2.7.4:6.3.2:1.3.99:4.1.1 +3.5.1:6.3.3:5.4.3:4.3.1:5.4.99:4.3.2 +5.5.1:1.7.99:4.1.1:1.1.1:5.4.2 +2.7.1:1.2.1:4.2.3 +2.4.1:2.5.1 +3.5.3:2.8.3:3.3.1 +2.3.1:2.4.2:2.5.1:3.6.1:2.5.1:1.2.1 +2.7.1:2.7.8 +3.4.13:4.99.1:1.1.1:4.2.1:2.5.1:3.1.3:5.4.99:1.1.1:9.9.9:2.7.1:1.2.4:2.7.1 +1.5.3:2.6.1:2.3.3 +1.1.1:3.5.3 +4.1.1:4.3.2:4.1.1:2.6.1:2.7.1 +1.5.1:1.1.1:2.7.2:2.7.7 +2.7.2:3.1.3:2.4.2:1.2.1:2.1.1:6.2.1 +9.9.9:2.1.2:2.1.2:3.3.1 +4.3.1:2.7.9:3.1.2:4.1.1 +4.4.1:2.5.1:1.13.11:2.7.1 +1.4.1:2.6.1:4.1.1:1.1.1:1.4.1:2.1.2:1.17.4:6.3.4 +2.1.3:2.7.1:6.2.1:6.2.1:1.1.1:5.4.99:6.2.1 +3.5.1:4.3.2:2.7.1:2.7.7:4.2.1:2.7.7:1.4.1 +2.3.1:1.14.12:1.2.4:5.4.3:3.5.3:4.1.1:1.3.1:6.4.1 +3.5.1:3.6.1:3.5.3:2.7.2:3.6.1 +1.4.1:6.2.1:2.3.1:6.3.2 +2.6.1:6.3.4:2.6.1 +6.3.4:3.1.2:4.1.1:4.2.1:4.3.2:3.5.1 +3.5.1:2.7.8:3.5.99 +2.7.2:2.3.1:2.6.1:1.1.1 +2.7.1:2.7.1 +1.5.1:2.6.1:4.1.2:2.7.1:4.1.2:3.5.4:2.5.1:6.3.3:2.1.2 +5.4.2:1.2.1:2.6.1:2.4.2:3.1.3:5.4.2:2.3.3:2.5.1:1.4.1:2.7.8 +4.2.1:2.6.1 +1.1.1:6.1.1:3.4.11:1.5.1:2.4.2:2.6.1 +4.1.1:2.1.2:1.3.1 +1.1.2:3.1.2:2.7.7:1.5.99:3.5.1:2.3.1:5.1.3:3.5.1:2.1.2 +3.1.1:6.3.4:2.3.1:6.1.1:3.5.1:2.3.1:5.4.2 +2.3.1:1.4.3:5.3.1:1.1.1 +6.3.4:1.2.1:1.2.1:5.3.1:4.1.1:2.7.8 +2.7.1:2.7.7:2.1.2:3.1.3:1.5.1:2.7.1 +2.7.2:2.1.3:3.1.3:2.1.1:1.1.1:4.1.2 +4.2.1:6.3.5:2.5.1:2.5.1:4.1.1 +1.1.1:2.3.1:6.3.5:1.2.1:4.3.2:2.7.2:2.7.1:3.6.1:2.6.1:4.3.1:5.3.1:3.6.1:2.6.1 +2.4.1:1.3.1:2.3.1 +5.3.1:4.1.1:3.6.1:4.1.2 +2.1.3:2.7.1:2.3.1 +2.3.2:4.2.1:4.4.1:5.3.1:1.3.99:1.4.1:2.7.1:4.1.1:4.2.1:2.7.7 +1.7.2:3.1.4:3.5.1:2.7.4:1.1.1 +2.1.3:5.1.3:2.1.3:5.1.1:9.9.9 +2.7.2:1.4.3:1.4.1:3.1.1:5.4.2:3.2.2 +2.7.2:2.8.1:2.6.1:5.4.2 +1.2.1:2.4.2:4.3.2:2.6.1:2.7.4 +2.7.7:1.1.1:4.3.2:5.4.2 +5.4.2:4.3.2 +2.3.1:2.7.2:1.3.3:1.2.1:3.6.1:4.2.1 +2.7.1:5.1.3 +1.1.1:1.1.1 +1.2.1:5.3.1:2.4.2:2.1.3:1.2.1:4.2.3:2.1.2:2.1.2:1.1.1:5.4.99:6.3.4 +6.3.3:4.3.2:6.3.4:2.7.7 +4.1.1:2.5.1:3.5.1:3.1.5:2.7.1:2.1.2 +2.6.1:2.4.2:4.3.2 +3.6.1:1.1.5:2.3.1:1.2.4:3.5.3 +5.4.99:1.1.5:6.2.1:2.4.1:2.1.1:3.6.1:3.1.3:1.1.1 +1.4.1:2.1.2:4.1.3:4.1.1:2.5.1:4.1.1:1.2.1 +2.5.1:2.7.1:5.1.3:4.1.3:2.5.1:5.4.99 +5.4.2:2.5.1:4.1.1:2.7.1:2.1.1:1.1.1:3.5.1 +4.2.1:4.2.1:1.2.4 +4.2.1:4.2.1:6.2.1:3.5.1 +5.3.1:6.3.3:1.1.1:6.3.4:1.2.1 +3.4.13:2.7.1:2.6.1:3.2.1:5.4.99:1.5.1:1.5.3 +2.1.4:3.5.2:4.2.3:4.3.1:3.2.1 +3.6.1:5.5.1:1.2.1 +2.1.1:4.3.2:6.2.1:6.3.4:4.3.2:2.7.2:2.6.1:2.7.7:4.3.1:2.6.1 +2.3.3:3.6.1:2.2.1:2.6.1 +6.4.1:2.6.1:1.5.1 +1.17.4:6.3.1:5.1.3 +3.5.1:4.1.2 +2.7.2:6.2.1:6.3.5:3.1.2:3.5.1:4.2.3 +2.5.1:5.4.99:4.3.1:2.4.2:3.1.3:4.1.3:4.1.2:4.1.1:2.1.2:2.3.1 +3.1.1:4.2.3:1.1.1:4.1.2:3.2.2:5.3.1 +6.3.4:2.5.1:5.4.99:2.3.1:4.1.99:2.7.8:6.3.4:2.3.1 +3.6.1:4.1.1:2.5.1:1.2.1:2.7.1:2.1.1:4.1.2 +1.4.1:1.2.1:4.4.1:4.1.1:2.7.2 +6.2.1:4.2.1:2.7.1 +2.1.3:2.7.7:2.5.1 +2.3.1:1.7.1:3.5.1 +9.9.9:6.3.5:2.3.1:1.17.4 +4.4.1:1.4.1:4.2.3:2.3.3:4.3.1 +6.2.1:4.1.1:2.7.2:2.6.1:3.1.1:2.3.1:4.3.1:2.3.1:2.2.1 +3.5.3:2.3.1:6.3.4:3.1.3:1.2.4:2.7.1:1.1.1:2.7.4:6.3.1 +2.5.1:1.14.11 +4.3.2:2.3.2:2.1.1:1.1.1:6.3.2 +1.3.99:5.1.3:2.7.2:2.6.1:2.7.2 +3.4.11:2.7.1:2.3.1:6.3.4:1.2.4:2.1.1:2.3.1 +1.2.4:4.3.2:2.4.2 +4.3.1:3.1.3:4.1.1:2.6.1:2.7.4 +1.1.1:3.4.13 +4.3.2:6.4.1:2.7.9:5.3.1:2.7.1 +5.1.3:2.7.7:4.3.1:5.3.1:2.7.1:2.3.1:1.17.4:6.3.2 +1.1.1:2.7.6:2.6.1:4.1.2:2.7.1:6.3.4:3.6.1:4.2.1 +6.3.5:2.5.1:2.3.1:2.7.1:1.7.99 +2.3.1:2.4.2:1.2.1:2.1.1:4.2.1 +2.4.1:2.3.3:2.5.1 +5.4.99:3.1.3 +3.5.1:3.1.1:4.1.3:4.2.3:6.3.5 +3.6.1:3.1.5:6.3.2:4.2.-:2.7.1 +2.1.1:2.4.2:6.3.2:3.6.1:2.4.2:4.2.1:3.1.3:1.1.1 +2.4.2:2.1.2:4.2.1:6.3.4 +2.5.1:2.7.2:3.5.2 +2.1.1:3.1.3:4.1.3:4.2.1:2.6.1:2.7.2:5.4.99:4.1.1:2.1.1 +2.7.1:6.2.1:2.3.1:6.3.4:1.4.3:1.14.13:1.2.5 +1.2.4:4.3.1:1.3.99:2.1.2:4.1.2:2.1.3 +1.1.1:2.7.1:4.1.1 +4.1.1:2.6.1:1.2.4 +4.2.3:4.1.1:4.3.1:1.1.1 +2.7.6:2.5.1:4.1.1:2.3.1:2.1.2:1.13.11:2.7.4 +1.5.1:5.4.2:4.1.3:1.1.1:2.7.1 +6.3.4:2.7.2:3.5.1:2.7.6 +2.9.1:1.2.1:6.3.4:6.3.4:3.5.1:3.5.1 +2.7.7:3.1.3:2.4.2:2.3.1 +2.7.7:3.4.13:3.6.1 +2.4.2:6.3.2:6.3.3:3.5.4:2.3.1 +2.3.2:3.5.4:3.5.2:3.5.4:4.4.1 +4.3.1:5.4.99:2.6.1 +3.6.1:3.5.2:4.3.1 +2.6.1:2.1.1:2.6.1:2.2.1 +4.4.1:2.3.1:6.3.4 +6.3.2:5.3.1:2.4.2:3.1.5:4.2.1 +3.1.2:1.1.1:2.7.1:6.3.5:6.3.4:3.1.1 +2.3.1:6.3.1:2.7.4:3.2.2:4.1.2:2.7.1:4.1.1:1.5.1 +4.6.1:6.3.4 +4.3.1:2.1.1:2.3.1:5.3.1 +2.1.2:4.3.1:2.1.1:2.7.2:3.1.3 +1.14.13:1.4.1:4.4.1:1.4.1:5.4.2:1.13.11:1.2.7:3.5.3:2.7.7 +2.3.1:4.1.1:2.7.7:4.1.2 +2.7.2:4.1.2:2.7.2:9.9.9:4.3.1:1.1.1:2.7.4 +9.9.9:2.1.3:3.5.4:3.5.1:4.1.1:4.1.1 +6.3.4:2.1.3 +2.7.4:1.4.99:1.2.1 +2.7.1:3.6.1:2.7.6:5.1.2:1.18.6:6.1.1:1.3.99 +2.7.1:1.14.12:1.7.99:3.5.3:4.3.1:2.1.1:2.7.1 +4.1.1:1.2.1:2.5.1:2.3.1:4.2.1:2.7.1:2.7.7:4.1.1 +2.3.1:3.7.1 +5.4.99:4.2.1:4.1.1:5.4.99 +2.7.1:5.1.3:3.5.1:5.4.2:4.3.2:2.1.3 +2.4.2:2.3.1:1.2.1:3.5.5:2.3.1 +2.1.3:2.2.1:2.7.1:1.13.11:4.2.1:6.3.4 +4.2.1:6.3.2:4.1.2:2.4.2:4.1.3:2.8.1:4.3.1:4.2.1:1.1.1:5.4.2:2.7.1 +1.2.1:2.7.1:4.4.1 +3.5.1:2.5.1:1.1.- +6.3.2:4.1.2:3.6.1:4.1.1 +6.2.1:3.5.1:3.5.1:2.5.1 +3.1.3:6.3.2:2.7.7:3.5.1:1.1.1:2.1.3:1.1.1:4.2.1 +3.1.1:1.1.1:2.3.1:4.2.1:4.4.1:2.4.2:6.3.5:3.1.3:4.4.1 +5.3.1:4.2.3:3.6.1:4.3.2 +1.1.1:2.7.2:4.1.1:2.7.4 +4.2.1:5.4.2 +2.7.2:1.13.11:5.3.1:4.1.1:4.1.1:2.7.1 +4.2.1:4.1.3:2.1.2:1.1.1:2.7.6 +1.5.1:2.1.2:2.7.2:2.5.1 +2.3.1:1.1.1:2.7.6:6.3.3:2.7.4:2.3.1 +4.3.2:3.13.1:1.17.4:4.1.1:2.7.2:4.4.1:2.7.7:2.7.6 +2.3.1:2.3.1:2.7.1:4.1.1 +4.3.2:1.5.1 +3.5.1:2.7.6:2.5.1:2.1.1:2.7.2 +2.6.1:2.4.2:3.6.1:2.6.1:6.4.1:6.3.4:6.3.1:2.1.4 +1.8.1:2.7.2:2.1.3:3.6.1:2.7.2:6.3.4:5.4.99:5.3.1:6.2.1:3.1.1:1.7.2 +5.4.2:2.4.1:1.4.1:4.4.1:2.7.1:4.2.1:2.1.2:2.3.1 +5.1.1:2.4.2:2.5.1 +1.1.1:2.3.1:2.4.2:1.4.1 +2.7.6:3.6.1:4.3.2:2.8.1:4.2.1:3.2.2 +3.2.1:3.1.2:1.5.1:2.6.1 +2.7.1:2.5.1:5.1.3:6.3.4:6.3.1 +4.1.2:2.7.1:2.7.1 +2.6.1:6.3.4:2.7.9:2.7.2:4.1.1:1.1.2:2.5.1:1.4.4:2.3.1 +1.2.1:1.1.1:5.3.1:1.14.13:5.3.1:2.8.3:1.7.2 +2.7.2:4.1.1:2.4.2:3.1.3:1.13.11:2.7.1 +3.1.3:2.7.7:3.5.3:2.3.1:2.3.1 +2.7.1:2.7.7:3.6.1 +2.5.1:1.1.2:2.6.1:5.4.2:2.4.2:3.5.1:2.6.1:2.1.2 +2.3.1:3.5.1:4.1.1 +1.4.1:2.7.8 +2.3.1:4.1.2:2.5.1:2.4.2:2.7.1:1.-.- +4.3.1:4.1.2:4.1.3:2.1.3:3.5.5 +2.7.1:1.1.1:2.7.1:2.1.3:2.3.1:2.6.1:2.5.1:2.4.2 +4.2.3:1.2.4:2.1.1 +2.7.1:3.1.2:1.14.12 +5.3.1:2.7.1:3.5.3:4.1.2 +2.1.1:2.7.7:3.6.1:1.2.1:4.1.2:4.1.1:6.3.3:1.18.6:2.6.1:2.5.1 +2.3.1:2.7.1 +5.4.99:4.2.1:2.8.1:6.3.4:2.1.1 +4.3.2:3.5.1:5.4.99:2.7.1:2.7.4:2.4.2:6.3.4:1.3.1:2.7.1:4.1.1:4.1.1 +1.1.1:2.6.1:2.6.1:4.2.1:4.1.1:5.3.1:5.3.1 +5.4.2:2.3.1:1.2.1:1.2.1:5.1.2:3.1.1:2.7.1:2.5.1 +1.3.99:2.3.1:2.1.2 +2.6.1:2.7.2:1.1.1:6.2.1:2.7.7 +2.7.1:2.7.1:4.2.3:2.7.1 +4.1.3:3.5.1:1.3.3:3.5.4:6.3.4:4.2.1 +3.5.1:2.5.1 +2.7.1:2.1.2:4.3.1 +4.1.1:2.5.1:1.2.1:2.5.1:2.3.3:4.1.1:3.1.3:1.2.4:6.2.1 +4.1.1:2.7.1:4.1.1:6.3.3:4.3.2:2.7.1:2.3.1 +5.3.1:5.3.1 +1.1.2:1.2.4:6.3.2:4.3.2:2.5.1:2.7.2:1.5.1 +2.7.6:6.3.4:3.5.4 +2.3.1:2.7.1 +2.7.7:2.1.2:4.2.1:5.3.1 +1.1.1:2.7.1:4.1.1:4.3.1:6.2.1 +2.5.1:1.2.5:5.1.3:4.4.1 +1.2.4:1.2.4:2.4.2:2.3.1:2.7.4:2.7.2:2.3.1:4.4.1:3.6.1 +2.5.1:2.4.2:1.1.1:5.1.2:6.3.3:2.7.2:4.3.2:1.2.1 +4.2.-:6.3.4:3.5.1 +3.5.99:1.2.1:1.2.4:5.4.99:3.2.2:3.1.3 +6.3.5:5.4.2:4.4.1:2.7.1 +4.2.1:6.3.1:1.5.99:4.2.1:2.5.1:3.5.1:2.6.1 +4.2.1:4.1.3:4.2.3:1.2.4:1.1.1 +1.2.1:2.7.4:1.14.13:4.2.1:2.7.2:2.4.2:2.7.1:2.6.1:3.6.1:2.6.1:2.3.1 +4.1.3:2.6.1:2.5.1:1.5.1 +2.7.2:2.3.1:3.5.3 +3.1.5:2.7.4:1.1.1:5.4.99:2.6.1 +3.5.1:2.5.1:1.13.11:1.2.1:2.7.1:2.4.2:6.4.1:4.3.1 +6.3.4:2.7.2:5.4.99:1.2.1:2.1.2 +2.1.2:2.7.7:1.7.99:3.5.3:1.1.1 +6.3.5:3.5.1:3.5.4:6.3.2:3.4.11:6.4.1:6.3.5:1.2.1:3.4.11:1.4.99 +1.1.1:5.4.99:2.7.7:2.6.1:6.3.3 +4.2.1:6.3.5:2.7.2:6.3.4:3.5.3:2.1.2:2.5.1:6.3.4:2.7.1:1.2.1:4.2.1:2.5.1 +3.5.3:2.3.1:4.4.1 +2.5.1:2.6.1 +6.3.4:2.1.1:6.3.4:2.1.1 +5.4.3:5.1.3:2.5.1:2.7.1:3.5.1:1.1.1:3.5.1:6.3.4:5.3.1:1.4.1 +2.6.1:5.3.1:5.4.2:4.3.1:2.7.2:2.7.1 +6.3.4:3.5.4:4.1.3:2.3.1:2.4.2:2.7.2:2.3.1:2.7.1:2.4.2:1.2.4:2.7.7:2.7.1 +3.5.5:5.3.1 +1.1.1:2.8.1:2.1.3:2.3.1:2.6.1:2.7.4 +2.5.1:5.4.2:6.3.4:5.4.99 +2.5.1:4.1.1:3.5.2:3.5.3:4.2.1:2.5.1:4.1.1:9.9.9:6.3.4:2.7.7 +3.2.2:2.6.1:2.3.1:4.1.3:3.1.4:2.4.2:1.1.1:4.3.1:4.2.1:2.7.1 +4.1.1:1.1.1:2.5.1 +3.5.1:4.3.1:4.2.3:4.3.1:2.7.1:2.7.4:3.5.3:2.2.1:1.2.1:4.1.1:2.5.1 +2.1.1:1.1.1:2.7.2 +1.1.1:4.1.2:3.2.1:1.2.1:2.6.1:1.17.1 +3.3.1:1.4.4:4.1.3 +2.7.2:2.7.1:2.7.7:2.7.1 +4.1.2:1.1.5:4.2.1:2.7.7:3.5.1:4.1.1 +1.5.1:1.14.13:1.1.1:3.5.1:3.6.1:2.6.1:2.7.2:4.3.1 +2.3.1:2.3.1:3.4.11:1.1.1:2.8.1 +5.3.1:1.1.1:4.2.2:4.2.1:2.3.3:3.4.11:1.5.1 +2.3.1:1.2.1:1.3.3 +3.2.2:3.5.3:3.5.1 +3.6.1:2.5.1:1.2.1:2.3.1 +2.7.4:2.7.7:6.3.4 +3.2.1:6.3.4:2.3.1:2.7.1:2.5.1:2.7.2:5.4.99 +3.2.2:2.3.1:2.6.1 +4.2.1:2.7.1:4.1.1:3.1.1 +4.2.1:6.3.2:1.1.1:2.1.2:2.1.1:4.1.1:1.2.1:2.6.1:4.1.3:6.3.5:4.1.1 +5.3.1:3.4.13:4.2.1:2.3.1:6.1.1 +4.3.1:2.8.3 +3.5.1:5.1.2:3.6.1:4.1.1 +4.1.1:1.1.1:4.1.2:5.1.2:4.2.1:2.1.1 +2.6.1:2.7.1:2.4.2:3.4.13:3.5.5 +1.3.3:3.4.13:3.6.1:1.17.4:1.2.1:4.1.1 +4.4.1:4.1.2:2.3.1:6.3.4:3.5.1:2.5.1 +3.1.3:2.4.2:6.2.1:5.1.3 +4.1.1:1.3.1:3.1.3:6.3.5:3.3.1:4.1.3:6.3.4:3.1.1:2.4.2:2.7.8:2.3.1:4.2.1:1.1.2 +4.1.1:2.7.2:4.2.3:6.3.5:1.17.4:1.1.1:1.17.1 +1.3.99:1.1.2:6.3.4:3.5.1:3.2.2:1.3.3:5.1.1:4.3.1:2.4.1 +3.1.4:4.3.2:1.8.4:2.7.4:2.3.1:3.5.1:6.2.1:2.7.1:6.3.4:4.2.3 +9.9.9:6.3.4 +4.1.1:2.1.3:1.2.1:6.3.4:6.3.1:2.4.2:3.5.1:2.1.2 +2.5.1:4.1.2:1.14.13:2.7.4 +1.2.1:4.1.2 +3.5.3:4.1.1:4.2.1 +2.5.1:2.7.1:4.2.3:2.7.1:1.2.1 +2.5.1:2.7.2:6.3.4:4.1.1:2.7.1:2.7.6:3.6.1:1.17.4:5.1.3 +4.2.1:1.1.1:1.1.1:4.1.1:2.1.1 +2.4.2:2.6.1:1.2.1:1.3.99:3.5.3 +2.3.1:4.3.2 +4.2.1:2.3.1:2.7.1:2.7.4:2.4.2 +4.2.3:1.2.4:3.6.1 +4.2.1:1.2.1:4.1.3:4.1.2 +6.2.1:4.4.1:1.17.4:6.3.5:3.6.1 +3.6.1:2.3.1 +3.1.1:4.1.1:6.3.4:5.1.2:2.7.4:2.1.1:6.3.2:2.1.2:4.1.2 +2.7.1:4.1.3:4.2.- +4.2.3:4.1.1:4.2.3:2.6.1:2.4.2:2.7.1 +3.1.2:2.1.3:6.3.4 +4.1.1:2.6.1:2.1.3 +1.8.1:4.6.1:6.3.4:3.5.1:6.3.4 +4.3.2:6.3.2:2.5.1:2.1.2 +3.5.2:5.4.2:4.3.1 +5.4.2:3.1.3:2.7.1:4.1.1:1.2.1:5.1.3:1.2.1:1.4.1 +2.7.1:6.3.2:3.1.3:3.4.11 +2.7.2:1.1.1:2.5.1 +2.7.2:4.2.3:6.3.4:4.4.1:3.6.1:3.1.5:2.1.2:2.3.1 +3.1.3:5.4.99:4.2.1:3.4.11 +2.6.1:1.7.1:4.3.2:2.7.2:2.6.1:4.1.1:3.1.1:2.6.1:2.7.4:2.7.1 +2.4.2:1.1.1:4.1.3:3.5.1:2.6.1 +1.1.1:2.7.2:4.1.1:4.3.1:4.2.1:1.3.99 +5.4.99:2.3.1:2.4.2:1.3.1:2.2.1:2.5.1:1.2.7:4.1.3:2.5.1:3.4.13:6.3.5 +1.5.99:1.2.1:4.1.1 +4.1.1:4.2.1:6.3.5:6.2.1:3.5.4 +4.1.1:4.1.3:1.2.4:4.1.1:2.7.6:6.3.1:2.1.2:2.4.1 +9.9.9:5.4.2:4.1.2:4.1.2:6.2.1 +2.6.1:4.1.1:1.4.1:4.2.1:3.6.1:6.3.4:1.3.3 +9.9.9:1.2.4:6.3.2:2.3.3:4.2.1:6.3.2:2.3.1:1.4.1:2.3.1 +2.4.2:4.2.1:1.1.2:3.5.1 +2.3.1:3.5.4:2.6.1:5.3.1:2.3.1:1.5.1 +4.3.2:2.1.1:2.4.1 +3.1.3:1.7.2:4.1.1:2.5.1:2.3.1 +1.8.1:2.7.2:1.2.1:1.4.1:6.3.4:3.1.2:2.6.1:2.3.1:3.6.1 +2.7.7:4.4.1:1.2.1:3.5.3:4.1.1:2.3.1:2.1.1:3.2.2:1.4.1:2.1.2 +1.1.1:1.2.5:1.5.1:2.7.1:4.2.1:2.1.1:2.7.1:2.4.2 +5.-.-:2.7.1:2.4.2:3.5.1:4.3.1 +1.1.1:2.7.1:2.7.1:1.7.99:2.4.2:6.3.5:1.1.1:5.4.99:5.1.3:5.1.3:2.6.1:4.2.1 +2.7.2:6.4.1 +2.7.1:2.4.2 +2.7.2:2.5.1:2.6.1:1.2.1:2.7.1:3.5.1:2.5.1:3.4.11:5.4.99:3.1.3:6.1.1 +2.6.1:2.7.7:4.1.1:2.1.2:2.1.3:1.1.1:2.7.1:2.5.1:1.3.99:4.1.1:2.7.6 +1.2.1:3.1.3:4.2.1:2.7.7:1.1.1:3.5.1:2.1.4:6.4.1 +4.3.2:4.1.3 +1.2.1:1.4.1:3.1.3:2.4.2:6.3.5:3.1.4:2.6.1 +2.8.1:2.4.2:2.6.1:4.1.1 +4.1.3:1.1.1:2.5.1:4.1.1:1.1.1:2.7.6:2.3.1:3.2.1 +1.17.4:4.1.1:1.4.3 +4.1.2:2.4.1:2.6.1 +2.7.2:2.5.1:3.2.1 +2.7.8:2.7.1 +4.1.1:1.3.99:1.1.1 +2.5.1:2.7.2:2.7.6:5.4.99:1.1.1:2.5.1:2.1.2:1.2.4:4.1.1 +2.1.2:4.1.1:3.1.3:6.3.4:2.3.1:4.2.1 +2.7.7:3.1.3:2.1.2:4.1.2:3.5.1 +4.3.1:6.2.1:4.3.1:4.4.1:1.14.13:6.3.5 +1.1.1:2.6.1:1.5.1:3.1.4 +3.1.3:2.1.3:2.5.1 +4.1.1:2.3.1:2.6.1 +6.4.1:1.3.99:3.5.3 +6.3.4:3.5.99:2.7.2:2.7.1:1.1.1:2.7.2:6.3.3:2.1.2:2.1.3:4.4.1:2.7.7:2.7.2:5.4.99:2.1.3:1.1.1 +6.3.2:1.5.1:4.2.1 +1.2.1:3.1.2:4.2.1:3.5.1:2.2.1:4.1.3 +2.3.3:2.3.3:1.8.4:1.7.99 +2.1.3:2.4.2:1.2.1 +4.2.1:4.3.2:2.5.1 +2.3.1:2.7.1:1.3.3:1.2.1 +2.7.4:2.7.7:4.3.1 +1.3.3:4.4.1:1.1.1:1.1.1:1.3.99 +2.4.2:2.6.1:4.2.1:2.7.1:4.1.2:1.2.7:1.3.3:1.1.2:6.2.1:2.4.2 +6.4.1:4.1.1:1.4.1:4.1.1:4.3.2 +2.7.1:2.7.4:2.6.1:2.5.1:4.2.3 +6.3.4:6.3.4:1.2.1:2.5.1:4.2.1:4.4.1:4.1.2:2.3.1:2.7.7:4.1.3:1.1.1:2.5.1 +4.4.1:3.1.3:2.7.1:6.3.2:3.6.1:2.5.1:9.9.9 +2.1.1:2.7.1:1.13.11:4.1.1 +9.9.9:4.1.2:2.7.4:2.3.1:2.5.1:3.5.3:2.7.1:2.7.8 +1.5.1:4.2.1:1.5.99:5.4.2:1.13.12:4.1.3:3.1.2:1.2.1 +2.7.1:2.7.1:6.3.5:2.5.1:2.5.1 +4.1.1:2.4.2:6.3.4:9.9.9:2.7.2:6.3.5:2.7.1:3.5.1:2.7.7:4.1.1:2.7.1:4.2.3:6.3.3:4.1.2 +9.9.9:3.5.1 +2.3.1:4.1.2:4.1.2:3.5.1:2.7.1 +1.2.1:4.1.2:1.1.1:4.2.1:3.5.3:2.1.3:4.1.3 +6.4.1:2.4.2:2.7.1:2.6.1:1.1.1:1.13.11:4.2.1:4.1.3 +2.7.2:3.2.1:2.7.1:6.3.2:5.4.2:2.6.1:2.4.2:3.1.1:2.8.1:3.5.1 +1.1.1:2.7.2:1.2.4:1.1.1:2.7.1 +2.7.7:1.1.1:2.1.3:2.7.1:4.1.1:3.2.1 +2.7.1:2.5.1 +4.2.1:1.2.1:4.1.1 +6.3.2:2.3.3:2.1.1:3.3.1:1.1.1:2.6.1:3.5.3:3.5.1:5.1.3:2.6.1 +1.17.4:1.7.99:4.3.2:2.4.2 +1.3.3:2.4.2:1.1.1:1.1.1:2.3.1:2.4.2 +2.4.2:6.3.4:2.3.1:3.5.4:1.2.1 +1.7.99:6.4.1 +2.7.7:2.7.2:2.3.1:5.4.2:2.7.1 +2.3.1:6.3.2:2.5.1:4.1.1:6.3.2:2.1.1:4.2.1 +2.1.3:2.1.2:2.3.1:4.1.2:5.4.2 +3.2.1:1.7.99:6.3.2:6.3.3:3.1.1 +3.1.4:2.1.1:1.4.1:5.1.2:5.3.1:5.3.1:2.7.1:6.3.4:2.5.1 +6.3.4:6.3.2:3.6.1:2.7.6:1.5.1 +1.2.1:1.1.1:2.3.1:4.3.2:2.5.1:1.5.1 +2.5.1:1.1.1:4.2.1:2.3.3:2.3.1 +2.1.1:2.3.1:2.3.1:2.7.4:1.8.1:6.3.4:2.4.2:2.7.2:2.5.1:2.7.1 +1.1.1:2.5.1:4.1.1:2.7.1:3.5.3:4.3.2 +2.8.1:5.4.2:2.6.1:4.1.1 +2.7.4:6.3.4:1.1.5:1.1.1:4.3.2:5.1.3:1.8.1:4.2.3:3.6.1 +5.4.2:1.7.2:4.1.1:6.3.2:1.4.1:1.2.4 +3.5.1:4.2.1:3.5.1:5.4.2:4.3.1:1.2.4:1.4.4:4.1.2:1.5.99:4.1.1:3.5.3 +3.5.1:4.1.1:1.5.1 +2.6.1:6.3.4:4.1.2:2.7.9:4.1.1 +6.3.4:2.3.1:5.4.1:2.4.1:2.7.2:1.1.1:2.7.1:4.3.1:2.1.1:2.6.1:6.3.3:1.1.1 +1.8.1:4.1.1:2.7.4:5.4.2:4.2.3 +5.4.3:2.5.1:5.4.2:2.3.3:3.1.3:1.1.5:2.7.1 +1.17.4:1.2.4:2.4.2:1.1.1:3.4.11:4.1.2 +1.4.1:2.7.2:1.2.1:3.2.1:2.3.1:1.2.4:1.5.1:4.4.1:2.3.3:2.6.1:3.1.1:2.5.1:2.3.1 +2.7.1:4.1.1:3.5.1:2.3.1:3.1.2:2.7.9:4.2.1:1.1.1 +2.7.2:1.3.99:6.3.3 +1.7.1:6.3.5:1.4.1:2.1.1 +2.3.1:2.7.1:3.4.13:1.5.1:3.5.1:4.1.1 +2.7.2:2.7.4:4.2.-:2.5.1:2.3.1:4.3.1:3.5.1:2.7.2:1.1.1:2.3.3:5.4.2:1.8.1 +2.7.1:4.1.3:3.6.1:6.3.2 +3.1.3:6.3.2:2.7.1:6.3.4:2.7.2:4.3.2:2.7.8:4.3.2 +3.1.3:5.3.1:2.3.1:1.4.1:3.1.7:3.6.1 +4.1.99:3.1.3:6.3.2:3.1.5 +4.99.1:4.3.1:2.1.1:2.7.2:2.7.1:1.5.1 +1.5.1:2.7.1:2.7.2:2.1.1:5.4.3:6.2.1:2.6.1:4.1.2 +2.7.8:6.3.4:2.7.2 +5.1.1:4.1.1:3.4.13:4.3.2 +2.7.2:4.4.1:1.3.1:2.3.1:2.1.3 +2.5.1:5.4.2:2.3.1 +4.3.1:3.1.3:4.4.1:2.5.1:3.6.1:2.7.2:6.3.4:1.1.1:2.4.2 +1.1.1:5.1.3:2.1.1:2.5.1 +2.7.2:2.6.1 +6.1.1:2.5.1:2.6.1:2.1.3:6.3.5:4.2.1 +6.3.4:1.1.1:1.2.4:4.2.3:2.3.3:2.7.7 +1.8.1:2.3.1:4.2.1 +2.7.1:3.1.3:1.4.1:6.2.1 +4.3.2:6.2.1:1.13.11:1.1.1 +2.3.1:1.2.1:2.5.1:4.2.3:2.6.1:2.7.2 +5.4.99:4.1.1:5.4.2:2.4.1:2.7.2:2.4.1 +2.3.1:2.3.1:4.3.1:6.3.4:2.7.1 +6.3.1:2.7.8:6.4.1:3.1.7:4.2.1 +2.4.2:2.6.1:1.5.1:1.1.1:2.1.3 +1.2.1:4.2.3:6.3.1:4.3.1 +3.3.1:2.7.2:2.7.4:4.1.1 +6.3.2:3.1.4:1.4.4:1.1.1 +2.7.2:2.1.1:6.3.4:5.4.99:2.7.4 +6.3.3:3.1.3:2.7.4:2.3.1:1.5.1 +2.1.3:2.6.1:1.4.1:2.5.1:2.3.1:2.7.7 +5.4.2:6.3.2:3.5.4 +3.4.13:3.1.5:4.2.3:5.3.1:4.2.-:2.7.1 +6.3.2:1.1.1:2.7.2:5.3.1 +2.7.4:4.1.1:2.6.1 +2.3.1:5.3.1:2.7.4:1.4.3 +1.5.1:2.6.1:3.5.3:1.1.1:1.2.4:2.7.1 +2.3.1:3.4.13:1.4.1:5.4.2:2.7.2:2.3.1:1.2.1:6.3.4:2.7.1 +2.7.1:9.9.9 +5.4.2:2.2.1:1.2.4:2.3.1:6.4.1:2.3.1:3.1.3:1.2.1:3.4.11:2.6.1:6.3.4 +2.1.2:2.7.7 +2.7.7:3.5.1:2.4.2:2.6.1:2.3.1:3.5.2:2.7.1:2.4.2 +2.1.3:4.2.1:2.7.1:3.5.99:1.7.99 +1.1.1:2.6.1:2.6.1:2.6.1:2.6.1:2.6.1:5.4.99 +1.2.4:2.6.1:2.5.1:3.2.1:6.3.4 +2.1.2:2.4.2:2.2.1:3.1.2:6.3.1 +1.1.1:2.6.1:1.1.1:2.7.7:1.1.1:2.7.1:4.1.2:2.4.2:2.1.4:6.3.3:4.1.1 +3.1.1:2.6.1:2.3.1:1.5.1:2.7.2:5.4.99 +4.1.2:3.1.1:1.5.1:2.7.2 +5.1.2:2.5.1:6.3.4 +4.1.1:2.6.1:2.7.1 +2.7.2:6.3.5:4.1.2:3.2.1:1.7.2:2.6.1:3.1.1:2.3.1:4.3.2:1.13.11 +2.4.2:1.1.1:1.4.1 +3.5.1:2.1.2:4.1.2:3.1.5:2.4.2:1.14.11:2.8.1:1.3.99:2.3.1:4.3.1:4.1.2 +4.99.1:2.7.7:2.1.1 +4.3.2:3.1.3:2.1.2:5.3.1:2.6.1 +1.1.1:4.2.1:2.1.1:2.7.2 +1.8.1:2.7.9:4.4.1 +5.4.2:2.5.1:2.6.1:2.7.4:3.5.1:2.1.2:2.7.2:1.1.1:4.1.3:3.5.1:3.5.1 +4.1.2:3.1.4:4.4.1:2.7.9 +2.3.1:1.-.-:6.3.5:2.7.7:2.7.1:1.5.1:2.7.8:5.3.1:4.1.1:6.3.4 +4.4.1:6.3.1:2.5.1:2.7.8 +6.3.4:2.7.7:2.2.1 +2.7.1:6.3.1:9.9.9:4.1.1:3.4.13:1.13.11:2.3.1:2.7.1:2.7.1 +1.5.1:2.1.1:6.3.4:2.7.4 +1.2.1:1.1.1:3.5.2:1.2.1 +2.4.1:1.5.1:2.6.1:4.1.2 +4.1.2:2.7.1:2.5.1:4.1.1:4.6.1 +4.3.1:3.5.1:5.1.3:1.2.4:1.17.4:6.3.4:2.3.1:6.3.4:1.1.1 +2.7.4:6.3.2:5.3.1 +2.6.1:3.5.3:2.3.3:1.5.1:1.5.1:4.1.1:3.6.1:5.4.2 +4.1.1:2.6.1:2.6.1 +2.6.1:4.1.1:2.7.7:2.4.2 +5.3.1:3.5.1:2.5.1:3.5.1 +1.4.3:6.3.2:4.1.1:6.3.4:2.1.2:6.3.4:1.3.1:2.7.7 +1.17.4:2.4.2:6.3.4:6.3.4:1.14.13:4.1.2 +2.6.1:3.1.3 +2.7.7:4.3.1:2.4.2 +2.7.4:3.6.1:5.1.3:4.3.2:1.1.1 +4.1.1:2.1.4:4.2.3 +1.13.11:2.7.7:2.7.1:1.2.1:4.3.2:4.2.1:1.2.1:2.6.1:5.4.2:3.4.11 +2.5.1:3.5.1:3.1.2:4.4.1:4.3.2:6.3.4 +6.3.5:2.6.1:4.1.1:1.2.4:6.3.5:5.4.2:6.3.2:4.3.1:2.6.1:1.2.4:2.3.1:2.7.1:2.3.1:3.5.1:4.2.3 +1.5.1:2.7.2:3.1.1:2.7.2 +6.3.2:1.1.1:6.3.4:2.1.2:1.1.1:3.5.3:2.3.3:6.3.5 +1.4.3:1.1.1:4.3.1:1.3.1 +2.7.4:2.7.7:6.3.4:2.1.3:2.3.1 +2.7.4:1.1.1:4.3.1:2.7.1 +2.3.1:3.2.1:4.4.1:2.6.1:6.4.1:6.3.4:2.4.2:1.3.1:2.1.3 +1.5.1:3.5.3:1.1.1:4.1.2:2.3.1:2.7.8:2.7.2:6.3.4:2.7.1:1.8.1:1.13.12 +5.4.99:4.1.1:2.6.1 +3.5.4:5.4.3 +2.7.7:1.3.99:5.5.1:4.1.1:3.5.3:2.5.1:6.3.2:5.3.1 +3.1.3:3.1.3:1.5.1:2.1.3:2.6.1:2.3.1:2.3.1:3.5.1 +3.2.1:6.3.4:1.18.6:4.3.2:3.1.3 +6.3.5:4.2.1:2.1.2:1.1.1 +3.1.2:2.3.1:4.3.2:2.1.2:1.2.1:2.7.8:2.5.1:1.1.1 +4.3.1:4.2.1:2.6.1:2.7.2:3.6.1:2.7.7:1.2.4:2.5.1:1.1.1 +2.3.1:2.7.4:2.5.1 +2.3.1:2.1.2:4.3.2:5.4.2:3.5.1:1.2.1:4.2.1:4.2.1 +4.3.2:3.8.1:4.1.1:4.1.1:2.1.3 +2.7.1:2.7.2:4.3.2:5.4.2:1.1.1 +2.1.2:2.7.1:2.1.1:2.5.1:1.4.1:4.1.1:2.1.3 +1.2.5:6.3.3:2.3.1:3.1.1:1.2.1:1.17.4:2.6.1:6.3.5:4.3.1:2.3.1 +2.4.1:3.5.3:3.5.1:2.7.2:2.3.1:4.2.1 +4.2.1:6.3.4:4.2.3:2.3.1:2.3.2:2.7.1:6.3.5:2.7.4:3.5.3 +2.6.1:2.7.1:6.3.5:4.1.1:2.3.1 +4.4.1:2.3.1:4.1.2:3.4.11:4.1.2:4.1.1:2.3.1:2.7.1:4.2.1:2.7.1 +4.1.1:2.7.1:3.5.1 +6.2.1:5.4.2:2.6.1:5.1.2:2.7.2:1.2.1 +2.3.1:5.3.1:4.3.2:4.3.2:5.4.2 +4.1.1:1.1.1 +1.14.13:1.2.4:2.6.1:2.1.3:4.2.3 +2.5.1:2.4.2:2.3.1 +2.7.1:2.7.7:2.7.2:3.5.1:6.3.4 +4.3.2:1.1.1:3.3.1:3.5.4 +2.5.1:3.2.1:3.5.4:3.5.1 +4.1.2:4.1.1 +1.1.1:1.1.-:5.1.3:3.1.3:2.1.3:4.1.1:1.1.1 +1.1.1:2.7.2:6.3.4 +4.1.1:2.1.1:3.1.4:2.6.1 +9.9.9:6.3.4:5.3.1:6.3.3:3.6.1 +4.1.1:1.2.1:6.3.2 +3.1.3:4.4.1:2.7.2:1.1.1 +1.7.2:4.2.3 +1.1.1:4.1.1:2.3.1 +6.3.3:5.3.1:2.7.7:2.6.1 +2.7.1:1.1.1:2.5.1:2.7.2:1.1.1 +2.1.3:1.2.1:2.6.1:6.3.4 +1.1.3:2.4.2:5.4.2:2.7.1:2.6.1 +6.3.1:2.6.1:2.4.2:4.4.1 +6.3.2:4.4.1:2.4.2:2.6.1 +2.7.1:1.1.1 +1.1.1:2.1.2:2.4.1:6.3.5:4.2.1 +5.4.2:4.1.1 +3.2.2:1.2.1:4.1.3:5.4.2 +1.1.5:1.1.2:4.2.1:6.3.4:2.8.1:5.4.2 +6.3.1:3.5.3:2.1.3:1.7.1 +3.1.1:4.3.2:2.6.1:1.1.1 +3.5.1:3.5.3 +4.1.1:2.7.1:2.3.1:2.5.1:3.7.1:4.3.2:2.1.2:4.3.1:1.3.3 +1.2.1:1.3.1:2.3.1:1.1.1:2.3.1:4.2.1:1.2.1:2.3.1 +2.3.1:3.2.1:3.5.3:5.4.2:2.4.2 +2.7.1:5.4.2:2.7.1:5.4.2:1.3.99:2.7.2:3.1.3:1.5.1:4.3.2:4.3.2 +5.1.3:3.1.3:2.7.1:2.2.1:2.7.7:6.3.2:2.7.7 +2.1.3:2.7.1:3.2.2 +6.3.4:4.2.1:2.3.1 +3.5.1:3.6.1:4.3.2:2.3.1 +2.7.6:1.1.1:1.2.1:2.1.2:9.9.9:1.3.99 +5.4.99:2.3.1:3.5.3:2.6.1:4.3.2:2.1.3 +2.7.8:3.5.99:2.7.7:5.4.2:2.4.2:5.4.2:3.2.1 +4.3.2:1.2.5:3.6.1 +1.5.1:6.4.1:2.3.1:2.8.1:3.1.5:2.8.3:2.5.1:1.5.1:6.2.1 +5.4.2:1.2.5:6.3.2:2.3.1:1.5.1 +1.2.4:1.4.1:3.6.1 +1.2.1:4.3.1:2.4.1:3.5.3:1.7.99:4.3.2 +5.3.1:4.3.2:2.3.1:4.1.2:6.3.2 +2.6.1:2.5.1:2.6.1:6.3.4:5.4.99 +1.2.4:1.5.1:5.4.2:3.5.5:6.3.4:4.3.1 +2.5.1:6.3.5:3.6.1:1.1.3 +4.1.1:5.4.99:6.3.5:4.2.1:2.1.1:4.2.1 +2.7.1:4.1.2:3.1.7:1.13.12 +4.1.1:2.3.1:2.7.1:5.4.2:1.2.1:1.2.1 +4.3.1:9.9.9:4.2.1:1.4.1:2.7.1:2.3.1:4.4.1:6.3.4 +3.5.1:2.7.1:4.2.1:1.3.1:1.4.1:2.7.4 +6.3.4:1.1.3:2.7.1:2.5.1:2.3.1:3.5.1:2.3.1:2.6.1 +5.3.1:5.1.3:2.1.1 +4.2.1:2.7.1:2.1.2:6.3.3:1.2.1:4.1.1:2.7.9:2.6.1:6.3.4 +1.2.4:2.5.1:3.1.2:2.7.1 +6.2.1:2.7.1:6.3.4 +3.5.3:3.5.1:6.4.1:6.3.3:1.1.1:1.4.1:1.4.1:2.1.1:4.1.1 +1.2.1:5.4.99 +2.7.1:2.3.1:1.2.4:1.2.1 +2.7.4:2.5.1:5.4.99:1.1.1:2.6.1 +2.7.1:4.2.1:1.8.1:5.4.2:2.4.2 +2.1.4:5.3.3:4.1.1:5.4.99 +2.4.2:1.1.1:3.5.4:1.3.3:6.3.4 +1.1.5:2.7.1:3.1.3:2.4.2:2.7.4:2.1.2:6.3.2:2.7.7 +5.4.99:2.7.2:2.1.2:2.7.2:2.7.1 +1.4.99:6.3.1:2.7.1:1.8.1:5.4.99 +4.2.3:2.2.1:2.7.1:1.1.1:3.1.2:4.2.1:6.3.2:6.3.1:4.1.3:4.3.1:1.6.1:1.17.4:4.4.1:6.2.1:6.2.1:6.3.3:4.2.1 +1.4.3:5.4.1:4.2.1:2.6.1:5.1.3:2.7.7 +3.1.1:2.8.1:4.1.1:1.2.1:1.2.1:2.3.1:4.2.3 +1.17.1:2.6.1:6.3.4:3.5.3:2.4.1 +2.7.4:2.7.1:2.1.1:3.6.1:2.7.1:1.1.1:2.6.1 +1.4.1:2.7.1 +5.-.-:3.5.1:2.3.1:2.6.1:3.6.1:4.2.1:2.7.1 +5.3.1:4.3.2:1.2.1:2.7.1 +4.1.2:2.8.1:2.3.1:1.8.1:5.1.2 +4.2.1:1.4.1:6.3.1:2.4.2:2.7.4:6.3.4:5.4.99:1.5.1 +9.9.9:6.2.1:4.1.3:6.3.3:4.2.1:1.1.1:3.5.1 +6.3.1:2.7.1:3.1.1:4.3.1 +3.5.1:4.1.1:1.5.1 +2.3.1:1.2.1:3.6.1:6.3.4 +3.4.13:5.4.2:4.2.1:2.5.1:1.3.99:4.1.1:1.17.4:2.7.1 +2.6.1:3.1.3:4.2.1:4.3.1:2.3.1:2.7.1 +6.3.4:3.6.1:2.7.1:1.5.1:2.8.1:9.9.9 +2.5.1:2.6.1:2.5.1:2.4.2:2.3.1:6.3.2:2.3.1:2.1.3:1.2.1 +5.4.2:4.3.2:4.1.1 +1.2.1:2.6.1:2.7.1:4.3.1 +4.1.1:2.6.1:1.4.1:4.4.1:4.2.3:1.2.1:1.2.1 +2.3.1:2.1.2 +4.1.1:2.4.2 +3.6.1:3.5.1:4.3.2:3.5.1:1.1.1:2.5.1:1.7.1:1.4.3:4.4.1 +5.1.3:5.3.1:1.4.3:5.4.99:6.3.1 +2.1.2:6.3.3:5.4.2:2.6.1 +4.1.1:2.1.2:2.6.1:5.1.3:2.5.1:1.2.4 +2.4.2:1.3.99:3.5.3:4.1.3 +2.5.1:4.3.2:1.5.99:2.1.1:2.7.1:2.1.3 +5.-.-:1.17.4:2.6.1:4.1.2 +2.4.2:2.7.7:2.7.2:3.6.1 +2.3.1:4.1.1:1.4.3:6.3.2:1.2.1:4.3.1:2.7.4 +1.1.1:1.4.1:1.14.13:1.1.2 +1.5.1:2.3.1 +3.5.3:2.7.1:3.1.7:2.7.4 +4.2.3:6.3.1:6.3.5:4.4.1 +6.3.4:2.5.1:1.1.1:4.3.1:2.8.1 +1.5.1:2.6.1 +6.3.2:2.6.1:4.1.1:4.1.1:2.3.1:1.3.99:2.3.1 +2.3.1:2.3.1:5.1.2:4.2.1 +2.8.1:2.5.1:3.4.13:5.3.1 +2.7.4:5.1.3:5.4.99:1.1.1:4.4.1:3.5.1:6.3.4 +1.4.1:2.5.1:2.6.1:5.4.2:5.4.99:1.1.1:1.5.1 +6.3.4:2.7.1:3.5.1:2.3.1 +1.2.1:1.2.1:2.5.1 +1.7.99:2.3.1:4.2.-:3.1.1:2.3.1:2.5.1:1.1.1:1.5.1 +3.1.3:4.2.3:1.2.1:2.3.1 +1.1.1:1.1.1:2.7.2:3.5.1:6.3.2:4.2.3 +2.6.1:4.1.1:1.1.1:1.5.99 +6.4.1:3.5.3:1.3.99:2.4.2 +2.3.1:6.3.1:1.4.3:5.3.1:5.4.99 +2.3.1:2.1.2:3.5.2:2.7.2:5.1.2:2.7.7:4.1.3:4.1.3:2.7.4:2.7.2 +1.2.1:6.3.1:2.5.1:4.2.1 +2.1.2:2.7.6:2.1.2:1.14.11:5.4.99:5.1.3 +2.7.4:4.4.1:3.6.1:1.2.1:2.3.1 +6.3.4:6.3.3:1.1.1:2.7.1:1.2.1:4.2.1 +2.6.1:4.1.3:2.3.1:2.7.2 +5.4.99:6.3.5:3.5.3:2.1.1:1.4.3:1.5.1:4.2.1:2.1.1 +2.7.4:4.1.1:6.4.1:5.3.1:4.2.1:2.7.1 +4.2.-:1.2.4:2.1.2:2.7.1:4.2.1:2.3.1 +4.2.1:2.4.2:4.3.2:2.5.1:3.1.1:2.5.1:1.2.1:2.4.2:3.5.3 +3.5.1:4.1.2:3.5.4:6.3.2:4.1.2:4.2.1:4.1.3:2.7.1:2.4.2:2.7.4 +2.1.2:2.5.1:6.3.2:4.4.1:4.2.3 +1.17.4:4.1.2:1.2.4:1.1.1:1.1.1 +1.3.99:2.7.4:5.4.99 +2.6.1:2.4.2:2.3.1:1.2.1:4.2.1:2.5.1:2.6.1:2.4.2:2.5.1:6.3.4:4.2.1 +5.3.1:5.4.99:6.2.1:6.3.2:5.4.99:1.1.1:6.3.2 +2.7.2:2.6.1:2.7.7:4.2.1:2.7.2:1.2.1:2.5.1:1.1.2:2.7.6:3.5.1:6.3.3:4.2.3 +5.3.1:2.5.1:3.4.11 +2.4.2:2.7.7:5.3.1:4.1.1:2.1.4 +4.4.1:4.1.1:2.7.2 +3.6.1:2.7.8 +4.3.1:2.7.2:4.3.2:1.4.1:2.7.4:2.3.1:2.3.1 +6.3.4:2.1.2:2.6.1:6.3.4 +6.3.2:3.5.1:1.-.-:4.1.1:1.13.11:5.3.1 +2.1.3:4.4.1:1.5.1 +5.1.3:2.5.1:4.1.2 +2.3.1:4.1.2:2.5.1:4.1.2:1.2.1:2.6.1:2.7.7:2.1.3 +6.3.5:5.3.1:2.7.2:4.4.1 +2.7.1:2.1.3:2.7.2:6.3.5:3.4.11:3.5.3:3.2.2:3.5.1:3.2.1 +5.4.99:6.3.1:4.3.2:4.2.1 +2.7.1:4.4.1:2.6.1:4.2.1:4.2.1:2.7.1:4.1.2 +2.3.1:2.1.2:6.3.5:2.5.1 +3.2.1:6.3.1:2.7.1 +2.3.1:1.11.1:1.1.1:5.1.3:2.5.1 +2.7.8:2.7.7:3.5.1:6.3.4:6.3.2:4.1.1:1.1.1:1.3.3:1.2.1:1.2.1:3.4.11:1.1.1:4.2.3 +4.3.1:2.7.2:1.5.1 +6.3.4:5.1.2:4.1.1:3.5.1:1.3.99 +5.3.1:4.1.2:2.7.1 +5.4.99:4.4.1:3.5.1:2.4.2:2.4.1 +6.3.5:6.3.1:4.1.1 +1.2.1:1.4.1:3.1.2:2.3.1 +3.6.1:2.3.1:1.1.1 +2.3.1:1.5.99:4.1.1 +2.5.1:2.1.1 +2.7.1:4.4.1:5.1.3 +1.7.99:6.3.3:1.3.1:3.5.1:2.7.7:2.5.1:2.1.2 +1.3.1:1.1.1:1.1.1:2.6.1 +2.4.2:2.7.2:6.3.4:3.6.1:1.5.1:1.2.1:5.4.99:2.8.3 +2.6.1:1.1.5:2.7.4:2.7.1:2.7.7:2.7.2:3.6.1:4.4.1 +1.2.1:5.1.1:2.1.2:2.4.2:4.1.1:4.2.3:3.6.1:2.1.3 +4.4.1:2.3.1:4.2.1:3.5.3:6.3.3:4.1.1 +1.1.1:2.7.2 +3.1.1:2.4.1:2.7.1:2.6.1:6.3.1:6.3.5 +1.14.13:4.3.2:2.3.1:4.3.2 +2.7.1:4.3.2:3.1.2 +2.3.1:1.1.1:6.3.4:1.2.1 +6.3.4:2.4.2:1.17.4:2.7.7 +4.2.1:3.6.1:1.5.1 +4.3.2:1.8.1:1.11.1:3.5.1:5.1.3 +1.7.2:4.3.1:6.3.4 +4.4.1:1.2.1:6.3.4:2.1.1:4.1.2 +1.2.4:3.5.1:1.2.1:5.4.2:3.1.3 +4.3.2:4.1.2:1.1.1:4.99.1:1.5.1:2.3.3:1.3.99 +1.2.1:5.3.1:4.4.1:3.5.4 +9.9.9:2.4.2:1.1.5 +6.3.1:2.5.1 +3.4.13:4.4.1:3.5.3:2.7.7 +4.2.1:4.2.3 +2.6.1:4.2.1 +2.8.3:4.4.1:2.5.1:6.3.4:3.5.1:4.2.3 +2.7.1:2.6.1:5.3.1:4.3.1:1.5.1:5.3.1:4.3.1:2.6.1 +4.3.2:2.7.1:3.2.1:1.1.1:2.7.7:2.3.1:1.4.3:4.3.1:1.7.1:2.3.1 +2.6.1:6.3.4:2.-.-:2.1.2 +2.6.1:6.3.2:2.5.1:2.3.1:1.2.1:2.6.1:2.3.1 +2.7.2:1.5.1:4.1.1:6.3.5:4.1.1 +2.5.1:6.2.1 +4.2.3:4.1.1:6.1.1:4.1.3:5.1.2:1.4.1:4.2.1:4.3.2:5.4.99:4.2.1:2.4.1:2.7.1:4.2.3:4.2.3 +2.1.2:4.1.2:4.2.1:6.3.2 +2.3.1:1.1.1:2.7.1:1.2.1:2.3.1:4.1.2:1.1.2 +2.3.1:2.7.1 +1.2.1:2.8.3:5.3.1:2.4.2:2.4.2 +1.4.1:1.5.99:1.14.16:3.5.4 +1.1.1:6.3.4:2.7.6:6.2.1:2.4.2 +5.3.1:3.5.3:2.3.1:1.1.1:4.2.3:4.1.1:4.2.3:6.3.2:1.1.1 +2.5.1:4.1.2:1.3.99 +1.2.1:4.4.1:5.5.1:1.8.1:1.5.1:4.1.1:4.2.1 +4.4.1:2.7.2:4.4.1 +4.3.2:6.2.1 +5.4.2:4.1.2:6.4.1:2.2.1:2.5.1:6.3.4:2.7.7:2.7.4:2.7.1:1.-.-:1.1.1 +4.3.1:6.3.1:2.1.1:1.5.1 +4.1.1:3.5.4:2.7.1:6.3.1 +2.3.1:4.2.3:2.3.1:3.5.1