/* Generated by Nim Compiler v0.16.0 */
/*   (c) 2017 Andreas Rumpf */
/* The generated code is subject to the original license. */
#define NIM_INTBITS 64

#include "nimbase.h"
#include <setjmp.h>
#include <string.h>
#undef linux
typedef struct Suggest_tFc84OXhHlhBIifsMtOJew Suggest_tFc84OXhHlhBIifsMtOJew;
typedef struct TY_sdDP1TTkc2gaTu5fV53Zqg TY_sdDP1TTkc2gaTu5fV53Zqg;
typedef struct TY_qERWGavQjzug69cyzEYP39bQ TY_qERWGavQjzug69cyzEYP39bQ;
typedef struct TNimType TNimType;
typedef struct TNimNode TNimNode;
typedef struct Tsym_AXG7xcvKqaxY6koRX1xkCw Tsym_AXG7xcvKqaxY6koRX1xkCw;
typedef struct Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw;
typedef struct Tcontext_5TfOJKwTttj3W1t1tMzWUQ Tcontext_5TfOJKwTttj3W1t1tMzWUQ;
typedef struct Tnode_bROa11lyF5vxEN9aYNbHmhw Tnode_bROa11lyF5vxEN9aYNbHmhw;
typedef struct Ttype_LTUWCZolpovw9cWE3JBWSUw Ttype_LTUWCZolpovw9cWE3JBWSUw;
typedef struct NimStringDesc NimStringDesc;
typedef struct TGenericSeq TGenericSeq;
typedef struct Tident_4umxGerWTHGPwUms7Yqu3g Tident_4umxGerWTHGPwUms7Yqu3g;
typedef struct TY_ehmV9bTklH2Gt9cXHV9c0HLeQ TY_ehmV9bTklH2Gt9cXHV9c0HLeQ;
typedef struct Tpasscontext_qNsm39cWb35W2r5AAd9ch87g Tpasscontext_qNsm39cWb35W2r5AAd9ch87g;
typedef struct TNimObject TNimObject;
typedef struct Tscope_1cQRXW6aAknk7ywAwjH3nw Tscope_1cQRXW6aAknk7ywAwjH3nw;
typedef struct Tproccon_s5jyYR8yL1QmFqiHICzU9aQ Tproccon_s5jyYR8yL1QmFqiHICzU9aQ;
typedef struct TY_sksVpmPRIkNR9axiwtD1Guw TY_sksVpmPRIkNR9axiwtD1Guw;
typedef struct Intset_PQrmFm4BXFkFSVOUl1ojSg Intset_PQrmFm4BXFkFSVOUl1ojSg;
typedef struct Trunk_ul49aWfv9aes8cutmeltT3gQ Trunk_ul49aWfv9aes8cutmeltT3gQ;
typedef struct TY_9brg1xNurxcus33lU4IE1Dw TY_9brg1xNurxcus33lU4IE1Dw;
typedef struct Tlinkedlist_9aBiIjAa4z2zTLjp4yMUvLw Tlinkedlist_9aBiIjAa4z2zTLjp4yMUvLw;
typedef struct Tlistentry_U4JkVlrJQaACKZ9a9cwCla3Q Tlistentry_U4JkVlrJQaACKZ9a9cwCla3Q;
typedef struct Tidtable_9aiv9bp2t5icFNINcg9c4xi1Q Tidtable_9aiv9bp2t5icFNINcg9c4xi1Q;
typedef struct TY_Mh9agqM29bm9aP5AUL1x7dZGA TY_Mh9agqM29bm9aP5AUL1x7dZGA;
typedef struct Tstrtable_f07aOS3dr28kGa5wcE29aFA Tstrtable_f07aOS3dr28kGa5wcE29aFA;
typedef struct Tctx_hJGtOysUvnnuB9cLutWG9a2w Tctx_hJGtOysUvnnuB9cLutWG9a2w;
typedef struct TY_jWKvSdankQPoT5bw9cBU9aiw TY_jWKvSdankQPoT5bw9cBU9aiw;
typedef struct IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw;
typedef struct ModulegraphHEX3Aobjecttype_RZI3hCs0FTPYx8StfC81qQ ModulegraphHEX3Aobjecttype_RZI3hCs0FTPYx8StfC81qQ;
typedef struct Exception Exception;
typedef struct TSafePoint TSafePoint;
typedef struct Cell_1zcF9cV8XIAtbN8h5HRUB8g Cell_1zcF9cV8XIAtbN8h5HRUB8g;
typedef struct Cellseq_Axo1XVm9aaQueTOldv8le5w Cellseq_Axo1XVm9aaQueTOldv8le5w;
typedef struct Gcheap_1TRH1TZMaVZTnLNcIHuNFQ Gcheap_1TRH1TZMaVZTnLNcIHuNFQ;
typedef struct Gcstack_7fytPA5bBsob6See21YMRA Gcstack_7fytPA5bBsob6See21YMRA;
typedef struct Memregion_x81NhDv59b8ercDZ9bi85jyg Memregion_x81NhDv59b8ercDZ9bi85jyg;
typedef struct Smallchunk_tXn60W2f8h3jgAYdEmy5NQ Smallchunk_tXn60W2f8h3jgAYdEmy5NQ;
typedef struct Llchunk_XsENErzHIZV9bhvyJx56wGw Llchunk_XsENErzHIZV9bhvyJx56wGw;
typedef struct Bigchunk_Rv9c70Uhp2TytkX7eH78qEg Bigchunk_Rv9c70Uhp2TytkX7eH78qEg;
typedef struct Intset_EZObFrE3NC9bIb3YMkY9crZA Intset_EZObFrE3NC9bIb3YMkY9crZA;
typedef struct Trunk_W0r8S0Y3UGke6T9bIUWnnuw Trunk_W0r8S0Y3UGke6T9bIUWnnuw;
typedef struct Avlnode_IaqjtwKhxLEpvDS9bct9blEw Avlnode_IaqjtwKhxLEpvDS9bct9blEw;
typedef struct Gcstat_0RwLoVBHZPfUAcLczmfQAg Gcstat_0RwLoVBHZPfUAcLczmfQAg;
typedef struct Cellset_jG87P0AI9aZtss9ccTYBIISQ Cellset_jG87P0AI9aZtss9ccTYBIISQ;
typedef struct Pagedesc_fublkgIY4LG3mT51LU2WHg Pagedesc_fublkgIY4LG3mT51LU2WHg;
typedef struct Tidobj_raN9cHVgzmvaXisezY9aGg9cg Tidobj_raN9cHVgzmvaXisezY9aGg9cg;
typedef struct TY_zuqP4Riz26Oi5fWgPYVEgA TY_zuqP4Riz26Oi5fWgPYVEgA;
typedef struct TY_DXS6mEo7PVUFJkirsQ9bNQA TY_DXS6mEo7PVUFJkirsQ9bNQA;
typedef struct Tloc_EtHNvCB0bgfu9bFjzx9cb6aA Tloc_EtHNvCB0bgfu9bFjzx9cb6aA;
typedef struct Ropeobj_HF4qJnb6xiOddgPmsxodtQ Ropeobj_HF4qJnb6xiOddgPmsxodtQ;
typedef struct Tlib_4f9aBgmqEuj7uWJdBBGcRgA Tlib_4f9aBgmqEuj7uWJdBBGcRgA;
typedef struct Ttabiter_VYF5VQsIYEVaBL0fKZJkbg Ttabiter_VYF5VQsIYEVaBL0fKZJkbg;
typedef struct TY_sM4lkSb7zS6F7OVMvW9cffQ TY_sM4lkSb7zS6F7OVMvW9cffQ;
typedef struct Tdocumentor_AoMzi1HUj6N6QwYiA5PvoQ Tdocumentor_AoMzi1HUj6N6QwYiA5PvoQ;
typedef struct TY_iGkpo9aKQdr3NWelKC4cnJA TY_iGkpo9aKQdr3NWelKC4cnJA;
typedef struct Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA;
typedef struct TY_xITzrU1RhJLKwBlRCAbn9bA TY_xITzrU1RhJLKwBlRCAbn9bA;
typedef struct TY_XOVT24GHXwqiEj5GCsEGCA TY_XOVT24GHXwqiEj5GCsEGCA;
typedef struct TY_uZlRb8w5pa9b16Yfjq9cGRXQ TY_uZlRb8w5pa9b16Yfjq9cGRXQ;
typedef struct Tidpair_AdFnD2YdADPeuJbG2YJ4vg Tidpair_AdFnD2YdADPeuJbG2YJ4vg;
typedef struct TY_9bAGqSvkAaFL9bWjsEPslrFA TY_9bAGqSvkAaFL9bWjsEPslrFA;
typedef struct TY_dRkMGUPOSmkGlhHeIeiomQ TY_dRkMGUPOSmkGlhHeIeiomQ;
typedef struct PprocHEX3Aobjecttype_VFEBuxrDHC6kHPzc1TWaRQ PprocHEX3Aobjecttype_VFEBuxrDHC6kHPzc1TWaRQ;
typedef struct TY_RsxI3z4wK8jTuZiO0576gQ TY_RsxI3z4wK8jTuZiO0576gQ;
typedef struct Tinstantiationpair_HkXM4cJmOpk8zFcmq9c9c3gQ Tinstantiationpair_HkXM4cJmOpk8zFcmq9c9c3gQ;
typedef struct Tinstantiation_5LqgVn6Tq9ainQRK7TQAQxA Tinstantiation_5LqgVn6Tq9ainQRK7TQAQxA;
typedef struct Table_tfmlwa8ktiw8woWAs5vhtQ Table_tfmlwa8ktiw8woWAs5vhtQ;
typedef struct TY_kxu4GK0onha2t9bo86mdVAg TY_kxu4GK0onha2t9bo86mdVAg;
typedef struct TY_48JTohSgTy339bRxHzUD8KA TY_48JTohSgTy339bRxHzUD8KA;
typedef struct Basechunk_Sdq7WpT6qAH858F5ZEdG3w Basechunk_Sdq7WpT6qAH858F5ZEdG3w;
typedef struct Freecell_u6M5LHprqzkn9axr04yg9bGQ Freecell_u6M5LHprqzkn9axr04yg9bGQ;
typedef struct Rstgenerator_bnsEnRKte9bKKfeTFpYaoSQ Rstgenerator_bnsEnRKte9bKKfeTFpYaoSQ;
typedef struct Stringtableobj_DKRIdH9c9cKI7YpQb9c0wKlEw Stringtableobj_DKRIdH9c9cKI7YpQb9c0wKlEw;
typedef struct TY_b7kA8pLABz0wMAUNGYo6Wg TY_b7kA8pLABz0wMAUNGYo6Wg;
typedef struct Table_zjMaDBasw1LnKbj11akpfw Table_zjMaDBasw1LnKbj11akpfw;
typedef struct TY_pUxI6Ljo6IKKHXKOZkQ7Og TY_pUxI6Ljo6IKKHXKOZkQ7Og;
typedef struct Jsonnodeobj_df9bshXB7C9cTiWPIOtX3j1Q Jsonnodeobj_df9bshXB7C9cTiWPIOtX3j1Q;
typedef struct TY_a09bGTAl9ceOKTAytYdkbyKg TY_a09bGTAl9ceOKTAytYdkbyKg;
typedef struct TY_JokFGfUW6i9b6aeU7xu6xBw TY_JokFGfUW6i9b6aeU7xu6xBw;
typedef struct TY_SlmU1Ju0WFHUWkihyHMVYg TY_SlmU1Ju0WFHUWkihyHMVYg;
typedef struct TY_UCrBsiykDha2x4hr9aWPwKA TY_UCrBsiykDha2x4hr9aWPwKA;
typedef struct Vmargs_0UUl6e5CNNQfMon2xW2bVA Vmargs_0UUl6e5CNNQfMon2xW2bVA;
typedef struct TY_xDU9bZmv1ZbZkJDaATBekIQ TY_xDU9bZmv1ZbZkJDaATBekIQ;
typedef struct TY_4eQHGndY6XBYpFOH09apV8Q TY_4eQHGndY6XBYpFOH09apV8Q;
typedef struct Tocentry_z7kal23LlR1mL50YJIPMCw Tocentry_z7kal23LlR1mL50YJIPMCw;
typedef struct Rstnode_CjRS2xrmuD58kdGedE3yyg Rstnode_CjRS2xrmuD58kdGedE3yyg;
typedef struct TY_sr3s7uVHpu9cEbbDnCSg8yQ TY_sr3s7uVHpu9cEbbDnCSg8yQ;
typedef struct Orderedtable_AF39bJ7XDr6gpANuGpxkHrw Orderedtable_AF39bJ7XDr6gpANuGpxkHrw;
typedef struct TY_MlAD6nAPq9bHKla9cWiIZP0g TY_MlAD6nAPq9bHKla9cWiIZP0g;
typedef struct TY_oLpBKXzW3hF9aCVMo5EymfQ TY_oLpBKXzW3hF9aCVMo5EymfQ;
typedef struct Tblock_2tJGcW69ahqq39a9bVJC1sqGQ Tblock_2tJGcW69ahqq39a9bVJC1sqGQ;
typedef struct TY_qwqHTkRvwhrRyENtudHQ7g TY_qwqHTkRvwhrRyENtudHQ7g;
typedef struct TY_UV3llMMYFckfui8YMBuUZA TY_UV3llMMYFckfui8YMBuUZA;
typedef struct TY_sawZST1Esj3o7EY9ayWwGPw TY_sawZST1Esj3o7EY9ayWwGPw;
typedef struct TY_awOivLjlO76sGdHY7nQUjQ TY_awOivLjlO76sGdHY7nQUjQ;
typedef struct {
N_NIMCALL_PTR(void, ClPrc) (Suggest_tFc84OXhHlhBIifsMtOJew* result0, void* ClEnv);
void* ClEnv;
} TY_S1iHa9bJe79be19aRwtH7KMRg;
struct TY_sdDP1TTkc2gaTu5fV53Zqg {
void* Field0;
TY_qERWGavQjzug69cyzEYP39bQ* Field1;
};
typedef NU8 Tnimkind_jIBKr1ejBgsfM33Kxw4j7A;
typedef NU8 Tnimtypeflag_v8QUszD1sWlSIWZz7mC4bQ_Set;
typedef N_NIMCALL_PTR(void, TY_ojoeKfW4VYIm36I9cpDTQIg) (void* p0, NI op0);
typedef N_NIMCALL_PTR(void*, TY_WSm2xU5ARYv9aAR4l0z9c9auQ) (void* p0);
struct  TNimType  {
NI size;
Tnimkind_jIBKr1ejBgsfM33Kxw4j7A kind;
Tnimtypeflag_v8QUszD1sWlSIWZz7mC4bQ_Set flags;
TNimType* base;
TNimNode* node;
void* finalizer;
TY_ojoeKfW4VYIm36I9cpDTQIg marker;
TY_WSm2xU5ARYv9aAR4l0z9c9auQ deepcopy;
};
typedef NU8 Tnimnodekind_unfNsxrcATrufDZmpBq4HQ;
struct  TNimNode  {
Tnimnodekind_unfNsxrcATrufDZmpBq4HQ kind;
NI offset;
TNimType* typ;
NCSTRING name;
NI len;
TNimNode** sons;
};
typedef N_NIMCALL_PTR(void, TY_T4eqaYlFJYZUv9aG9b1TV0bQ) (void);
struct  Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw  {
NI16 line;
NI16 col;
NI32 fileindex;
};
typedef NU8 Tcheckpointresult_mp7otVupbkudrLwM0IFcHg;
typedef NU16 Tnodeflag_jyh9acXHkhZANSSvPIY7ZLg_Set;
typedef NU8 Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw;
struct  TGenericSeq  {
NI len;
NI reserved;
};
struct  NimStringDesc  {
  TGenericSeq Sup;
NIM_CHAR data[SEQ_DECL_SIZE];
};
struct  Tnode_bROa11lyF5vxEN9aYNbHmhw  {
Ttype_LTUWCZolpovw9cWE3JBWSUw* typ;
Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw info;
Tnodeflag_jyh9acXHkhZANSSvPIY7ZLg_Set flags;
Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw kind;
union{
struct {NI64 intval;
} S1;
struct {NF floatval;
} S2;
struct {NimStringDesc* strval;
} S3;
struct {Tsym_AXG7xcvKqaxY6koRX1xkCw* sym;
} S4;
struct {Tident_4umxGerWTHGPwUms7Yqu3g* ident;
} S5;
struct {TY_ehmV9bTklH2Gt9cXHV9c0HLeQ* sons;
} S6;
} kindU;
NimStringDesc* comment;
};
struct  TNimObject  {
TNimType* m_type;
};
struct  Tpasscontext_qNsm39cWb35W2r5AAd9ch87g  {
  TNimObject Sup;
NIM_BOOL fromcache;
};
struct  Intset_PQrmFm4BXFkFSVOUl1ojSg  {
NI counter;
NI max;
Trunk_ul49aWfv9aes8cutmeltT3gQ* head;
TY_9brg1xNurxcus33lU4IE1Dw* data;
};
struct  Tlinkedlist_9aBiIjAa4z2zTLjp4yMUvLw  {
Tlistentry_U4JkVlrJQaACKZ9a9cwCla3Q* head;
Tlistentry_U4JkVlrJQaACKZ9a9cwCla3Q* tail;
NI counter;
};
struct  Tidtable_9aiv9bp2t5icFNINcg9c4xi1Q  {
NI counter;
TY_Mh9agqM29bm9aP5AUL1x7dZGA* data;
};
typedef N_NIMCALL_PTR(Tnode_bROa11lyF5vxEN9aYNbHmhw*, TY_AKW0Vo9cFIVu0NCvmOexsSA) (Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tnode_bROa11lyF5vxEN9aYNbHmhw* n0);
typedef NU16 Texprflag_0WWd9a4ssQWuY7Q6ZKepq9cQ_Set;
typedef N_NIMCALL_PTR(Tnode_bROa11lyF5vxEN9aYNbHmhw*, TY_iQuMqQxTQ0KsiquHcemjUQ) (Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tnode_bROa11lyF5vxEN9aYNbHmhw* n0, Texprflag_0WWd9a4ssQWuY7Q6ZKepq9cQ_Set flags0);
typedef NU32 Tsymkind_cNCW9acsSznmEccl1fgQwkw_Set;
typedef N_NIMCALL_PTR(Tnode_bROa11lyF5vxEN9aYNbHmhw*, TY_C8AXaVscqGOxLOeiHy1lmw) (Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tnode_bROa11lyF5vxEN9aYNbHmhw* n0, Tnode_bROa11lyF5vxEN9aYNbHmhw* norig0, Tsymkind_cNCW9acsSznmEccl1fgQwkw_Set filter0);
typedef N_NIMCALL_PTR(Ttype_LTUWCZolpovw9cWE3JBWSUw*, TY_bA9c5ClPJvgmXvNlbUiJQiQ) (Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tnode_bROa11lyF5vxEN9aYNbHmhw* n0, Ttype_LTUWCZolpovw9cWE3JBWSUw* prev0);
typedef struct {
N_NIMCALL_PTR(Tnode_bROa11lyF5vxEN9aYNbHmhw*, ClPrc) (Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tidtable_9aiv9bp2t5icFNINcg9c4xi1Q pt0, Tnode_bROa11lyF5vxEN9aYNbHmhw* n0, void* ClEnv);
void* ClEnv;
} TY_rVRuvning49bS21o9c7OfIPQ;
typedef struct {
N_NIMCALL_PTR(Tsym_AXG7xcvKqaxY6koRX1xkCw*, ClPrc) (Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tsym_AXG7xcvKqaxY6koRX1xkCw* fn0, Tidtable_9aiv9bp2t5icFNINcg9c4xi1Q pt0, Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw info0, void* ClEnv);
void* ClEnv;
} TY_jT9bmmdeK1mqhnuxic7a1jw;
struct  Tstrtable_f07aOS3dr28kGa5wcE29aFA  {
NI counter;
TY_sksVpmPRIkNR9axiwtD1Guw* data;
};
typedef NU8 Ttypeattachedop_jZY2AMF49b43fezf9aDwN9c9cQ;
typedef N_NIMCALL_PTR(Tsym_AXG7xcvKqaxY6koRX1xkCw*, TY_kd4mVSM3CyNW38z8itHZOA) (Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tsym_AXG7xcvKqaxY6koRX1xkCw* dc0, Ttype_LTUWCZolpovw9cWE3JBWSUw* t0, Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw info0, Ttypeattachedop_jZY2AMF49b43fezf9aDwN9c9cQ op0, NI col0);
struct  Tcontext_5TfOJKwTttj3W1t1tMzWUQ  {
  Tpasscontext_qNsm39cWb35W2r5AAd9ch87g Sup;
Tsym_AXG7xcvKqaxY6koRX1xkCw* module;
Tscope_1cQRXW6aAknk7ywAwjH3nw* currentscope;
Tscope_1cQRXW6aAknk7ywAwjH3nw* importtable;
Tscope_1cQRXW6aAknk7ywAwjH3nw* toplevelscope;
Tproccon_s5jyYR8yL1QmFqiHICzU9aQ* p;
TY_sksVpmPRIkNR9axiwtD1Guw* friendmodules;
NI instcounter;
Intset_PQrmFm4BXFkFSVOUl1ojSg ambiguoussymbols;
NI intypeclass;
NI ingenericcontext;
NI inunrolledcontext;
NI compilescontextid;
NI compilescontextidgenerator;
NI ingenericinst;
TY_sksVpmPRIkNR9axiwtD1Guw* converters;
TY_sksVpmPRIkNR9axiwtD1Guw* patterns;
Tlinkedlist_9aBiIjAa4z2zTLjp4yMUvLw optionstack;
Tidtable_9aiv9bp2t5icFNINcg9c4xi1Q symmapping;
Tlinkedlist_9aBiIjAa4z2zTLjp4yMUvLw libs;
TY_AKW0Vo9cFIVu0NCvmOexsSA semconstexpr;
TY_iQuMqQxTQ0KsiquHcemjUQ semexpr;
TY_iQuMqQxTQ0KsiquHcemjUQ semtryexpr;
TY_AKW0Vo9cFIVu0NCvmOexsSA semtryconstexpr;
TY_iQuMqQxTQ0KsiquHcemjUQ semoperand;
TY_AKW0Vo9cFIVu0NCvmOexsSA semconstboolexpr;
TY_C8AXaVscqGOxLOeiHy1lmw semoverloadedcall;
TY_bA9c5ClPJvgmXvNlbUiJQiQ semtypenode;
TY_rVRuvning49bS21o9c7OfIPQ seminferredlambda;
TY_jT9bmmdeK1mqhnuxic7a1jw semgenerateinstance;
Intset_PQrmFm4BXFkFSVOUl1ojSg includedfiles;
Tstrtable_f07aOS3dr28kGa5wcE29aFA userpragmas;
Tctx_hJGtOysUvnnuB9cLutWG9a2w* evalcontext;
Intset_PQrmFm4BXFkFSVOUl1ojSg unknownidents;
TY_jWKvSdankQPoT5bw9cBU9aiw* generics;
NI topstmts;
NI lastgenericidx;
NI hloloopdetector;
NI inparallelstmt;
TY_kd4mVSM3CyNW38z8itHZOA insttypeboundop;
Tident_4umxGerWTHGPwUms7Yqu3g* selfname;
IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw* cache;
ModulegraphHEX3Aobjecttype_RZI3hCs0FTPYx8StfC81qQ* graph;
Tstrtable_f07aOS3dr28kGa5wcE29aFA signatures;
NimStringDesc* recursivedep;
};
typedef NU8 Idecmd_1Ced39bl5eePmZ1PKMPXigQ;
struct  Exception  {
  TNimObject Sup;
Exception* parent;
NCSTRING name;
NimStringDesc* message;
NimStringDesc* trace;
};
typedef struct {
N_NIMCALL_PTR(NIM_BOOL, ClPrc) (Exception* e0, void* ClEnv);
void* ClEnv;
} TY_KeeAOYBd84Ofsw6Y7LizaQ;
struct  TSafePoint  {
TSafePoint* prev;
NI status;
jmp_buf context;
NIM_BOOL hasRaiseAction;
TY_KeeAOYBd84Ofsw6Y7LizaQ raiseAction;
};
struct  Cell_1zcF9cV8XIAtbN8h5HRUB8g  {
NI refcount;
TNimType* typ;
};
struct  Cellseq_Axo1XVm9aaQueTOldv8le5w  {
NI len;
NI cap;
Cell_1zcF9cV8XIAtbN8h5HRUB8g** d;
};
typedef Smallchunk_tXn60W2f8h3jgAYdEmy5NQ* TY_SiRwrEKZdLgxqz9a9aoVBglg[512];
typedef Trunk_W0r8S0Y3UGke6T9bIUWnnuw* TY_lh2A89ahMmYg9bCmpVaplLbA[256];
struct  Intset_EZObFrE3NC9bIb3YMkY9crZA  {
TY_lh2A89ahMmYg9bCmpVaplLbA data;
};
struct  Memregion_x81NhDv59b8ercDZ9bi85jyg  {
NI minlargeobj;
NI maxlargeobj;
TY_SiRwrEKZdLgxqz9a9aoVBglg freesmallchunks;
Llchunk_XsENErzHIZV9bhvyJx56wGw* llmem;
NI currmem;
NI maxmem;
NI freemem;
NI lastsize;
Bigchunk_Rv9c70Uhp2TytkX7eH78qEg* freechunkslist;
Intset_EZObFrE3NC9bIb3YMkY9crZA chunkstarts;
Avlnode_IaqjtwKhxLEpvDS9bct9blEw* root;
Avlnode_IaqjtwKhxLEpvDS9bct9blEw* deleted;
Avlnode_IaqjtwKhxLEpvDS9bct9blEw* last;
Avlnode_IaqjtwKhxLEpvDS9bct9blEw* freeavlnodes;
NIM_BOOL locked;
NIM_BOOL blockchunksizeincrease;
NI nextchunksize;
};
struct  Gcstat_0RwLoVBHZPfUAcLczmfQAg  {
NI stackscans;
NI cyclecollections;
NI maxthreshold;
NI maxstacksize;
NI maxstackcells;
NI cycletablesize;
NI64 maxpause;
};
struct  Cellset_jG87P0AI9aZtss9ccTYBIISQ  {
NI counter;
NI max;
Pagedesc_fublkgIY4LG3mT51LU2WHg* head;
Pagedesc_fublkgIY4LG3mT51LU2WHg** data;
};
struct  Gcheap_1TRH1TZMaVZTnLNcIHuNFQ  {
Gcstack_7fytPA5bBsob6See21YMRA* stack;
void* stackbottom;
NI cyclethreshold;
Cellseq_Axo1XVm9aaQueTOldv8le5w zct;
Cellseq_Axo1XVm9aaQueTOldv8le5w decstack;
Cellseq_Axo1XVm9aaQueTOldv8le5w tempstack;
NI recgclock;
Memregion_x81NhDv59b8ercDZ9bi85jyg region;
Gcstat_0RwLoVBHZPfUAcLczmfQAg stat;
Cellset_jG87P0AI9aZtss9ccTYBIISQ marked;
Cellseq_Axo1XVm9aaQueTOldv8le5w additionalroots;
};
struct  Tidobj_raN9cHVgzmvaXisezY9aGg9cg  {
  TNimObject Sup;
NI id;
};
typedef NU8 Tsymkind_cNCW9acsSznmEccl1fgQwkw;
typedef NU16 Tmagic_shZhZOdbVC5nnFvcXQAImg;
typedef NU32 Tsymflag_K9ay6LWMat9bUiT9bIbMxpDHw_Set;
typedef NU32 Toption_WspMeQySXNP2XoTWR5MTgg_Set;
typedef NU8 Tlockind_O7PRFZKuiBBWbku09cayVBg;
typedef NU8 Tstorageloc_JK9cKMX3XnqHaUky9b6gkGEw;
typedef NU16 Tlocflag_o2bqJgR4ceIupnUSpxiudA_Set;
struct  Tloc_EtHNvCB0bgfu9bFjzx9cb6aA  {
Tlockind_O7PRFZKuiBBWbku09cayVBg k;
Tstorageloc_JK9cKMX3XnqHaUky9b6gkGEw s;
Tlocflag_o2bqJgR4ceIupnUSpxiudA_Set flags;
Ttype_LTUWCZolpovw9cWE3JBWSUw* t;
Ropeobj_HF4qJnb6xiOddgPmsxodtQ* r;
};
struct  Tsym_AXG7xcvKqaxY6koRX1xkCw  {
  Tidobj_raN9cHVgzmvaXisezY9aGg9cg Sup;
Tsymkind_cNCW9acsSznmEccl1fgQwkw kind;
union{
struct {TY_zuqP4Riz26Oi5fWgPYVEgA* typeinstcache;
} S1;
struct {TY_DXS6mEo7PVUFJkirsQ9bNQA* procinstcache;
Tsym_AXG7xcvKqaxY6koRX1xkCw* gcunsafetyreason;
} S2;
struct {TY_DXS6mEo7PVUFJkirsQ9bNQA* usedgenerics;
Tstrtable_f07aOS3dr28kGa5wcE29aFA tab;
} S3;
struct {Tsym_AXG7xcvKqaxY6koRX1xkCw* guard;
NI bitsize;
} S4;
} kindU;
Tmagic_shZhZOdbVC5nnFvcXQAImg magic;
Ttype_LTUWCZolpovw9cWE3JBWSUw* typ;
Tident_4umxGerWTHGPwUms7Yqu3g* name;
Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw info;
Tsym_AXG7xcvKqaxY6koRX1xkCw* owner;
Tsymflag_K9ay6LWMat9bUiT9bIbMxpDHw_Set flags;
Tnode_bROa11lyF5vxEN9aYNbHmhw* ast;
Toption_WspMeQySXNP2XoTWR5MTgg_Set options;
NI position;
NI offset;
Tloc_EtHNvCB0bgfu9bFjzx9cb6aA loc;
Tlib_4f9aBgmqEuj7uWJdBBGcRgA* annex;
Tnode_bROa11lyF5vxEN9aYNbHmhw* constraint;
};
struct  Tscope_1cQRXW6aAknk7ywAwjH3nw  {
NI depthlevel;
Tstrtable_f07aOS3dr28kGa5wcE29aFA symbols;
Tscope_1cQRXW6aAknk7ywAwjH3nw* parent;
};
struct  Ttabiter_VYF5VQsIYEVaBL0fKZJkbg  {
NI h;
};
typedef N_CLOSURE_PTR(void, T_EV5hHJmjIY9cla9b9be7fSVJQ_6) (Suggest_tFc84OXhHlhBIifsMtOJew* result0);
struct  Suggest_tFc84OXhHlhBIifsMtOJew  {
Idecmd_1Ced39bl5eePmZ1PKMPXigQ section;
TY_sM4lkSb7zS6F7OVMvW9cffQ* qualifiedpath;
NimStringDesc* filepath;
NI line;
NI column;
NimStringDesc* doc;
Tsymkind_cNCW9acsSznmEccl1fgQwkw symkind;
NimStringDesc* forth;
NI quality;
NIM_BOOL isglobal;
NI tokenlen;
};
typedef NU8 Tsymflag_K9ay6LWMat9bUiT9bIbMxpDHw;
struct  Tident_4umxGerWTHGPwUms7Yqu3g  {
  Tidobj_raN9cHVgzmvaXisezY9aGg9cg Sup;
NimStringDesc* s;
Tident_4umxGerWTHGPwUms7Yqu3g* next;
NI h;
};
typedef NU64 Tglobaloption_RAfAEZqjnKMDumgyKKc1qw_Set;
typedef NU8 Tglobaloption_RAfAEZqjnKMDumgyKKc1qw;
typedef NU8 Tprefereddesc_tnd4qt9c4xddV8oKV5zyusw;
typedef NU8 Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag;
typedef NU8 Tcallingconvention_yjAJ8w0h1PBaSwSGJ3P7IA;
typedef NU32 Ttypeflag_x2m5g1NpbmDig4wLT3Ylhw_Set;
struct  Ttype_LTUWCZolpovw9cWE3JBWSUw  {
  Tidobj_raN9cHVgzmvaXisezY9aGg9cg Sup;
Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag kind;
Tcallingconvention_yjAJ8w0h1PBaSwSGJ3P7IA callconv;
Ttypeflag_x2m5g1NpbmDig4wLT3Ylhw_Set flags;
TY_zuqP4Riz26Oi5fWgPYVEgA* sons;
Tnode_bROa11lyF5vxEN9aYNbHmhw* n;
Tsym_AXG7xcvKqaxY6koRX1xkCw* owner;
Tsym_AXG7xcvKqaxY6koRX1xkCw* sym;
Tsym_AXG7xcvKqaxY6koRX1xkCw* destructor;
Tsym_AXG7xcvKqaxY6koRX1xkCw* deepcopy;
Tsym_AXG7xcvKqaxY6koRX1xkCw* assignment;
TY_iGkpo9aKQdr3NWelKC4cnJA* methods;
NI64 size;
NI16 align;
NI16 locklevel;
Tloc_EtHNvCB0bgfu9bFjzx9cb6aA loc;
Ttype_LTUWCZolpovw9cWE3JBWSUw* typeinst;
};
typedef struct {
N_NIMCALL_PTR(NI, ClPrc) (Tsym_AXG7xcvKqaxY6koRX1xkCw* x_HajRHuG3hBLu9aRClDrclVA, Tsym_AXG7xcvKqaxY6koRX1xkCw* y_KmGmpKMOJbSpotUkWVINGw, void* ClEnv);
void* ClEnv;
} TY_ebCc9bLaaaoeQAaNbPKMIRA;
typedef NU8 Sortorder_8iBc6wlNqBa9cju9cUAhUAxA;
typedef N_CLOSURE_PTR(NI, T_EV5hHJmjIY9cla9b9be7fSVJQ_13) (Tsym_AXG7xcvKqaxY6koRX1xkCw* x_HajRHuG3hBLu9aRClDrclVA_2, Tsym_AXG7xcvKqaxY6koRX1xkCw* y_KmGmpKMOJbSpotUkWVINGw_2, void* ClEnv);
typedef NU64 Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag_Set;
typedef NU8 Tcandidatestate_C8RXb59bvbxaTzDOqx49aVVg;
struct  Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA  {
Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c;
NI exactmatches;
NI genericmatches;
NI subtypematches;
NI intconvmatches;
NI convmatches;
Tcandidatestate_C8RXb59bvbxaTzDOqx49aVVg state;
Ttype_LTUWCZolpovw9cWE3JBWSUw* callee;
Tsym_AXG7xcvKqaxY6koRX1xkCw* calleesym;
NI calleescope;
Tnode_bROa11lyF5vxEN9aYNbHmhw* call;
Tidtable_9aiv9bp2t5icFNINcg9c4xi1Q bindings;
Tmagic_shZhZOdbVC5nnFvcXQAImg magic;
NIM_BOOL basetypematch;
Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag fauxmatch;
NIM_BOOL genericconverter;
NIM_BOOL coercedistincts;
NIM_BOOL typedescmatched;
NIM_BOOL isnocall;
NU8 mutabilityproblem;
NI inheritancepenalty;
TY_xITzrU1RhJLKwBlRCAbn9bA* errors;
};
typedef NU8 Ttypeflag_x2m5g1NpbmDig4wLT3Ylhw;
typedef Ttype_LTUWCZolpovw9cWE3JBWSUw* TY_BF9aKj6RAH9ccQDWaEKQ1HOw[1];
typedef NU8 Ttyperelation_1IMf5P083XuEtWGxYaIXyQ;
typedef NU8 Ttypecmpflag_72pgRXSg7774cr9aCWVPORw_Set;
typedef NU8 Skippedptr_WOSTpykTcTHo6Kb9bHoOUqQ;
struct TY_XOVT24GHXwqiEj5GCsEGCA {
NimStringDesc* Field0;
NI Field1;
};
typedef NU16 Tmsgkind_IGAWgv9aR2KqPKJfPZPEWaw;
typedef N_CLOSURE_PTR(Tnode_bROa11lyF5vxEN9aYNbHmhw*, T_EV5hHJmjIY9cla9b9be7fSVJQ_24) (Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tidtable_9aiv9bp2t5icFNINcg9c4xi1Q pt0, Tnode_bROa11lyF5vxEN9aYNbHmhw* n0);
typedef N_CLOSURE_PTR(Tsym_AXG7xcvKqaxY6koRX1xkCw*, T_EV5hHJmjIY9cla9b9be7fSVJQ_25) (Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tsym_AXG7xcvKqaxY6koRX1xkCw* fn0, Tidtable_9aiv9bp2t5icFNINcg9c4xi1Q pt0, Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw info0);
typedef N_CLOSURE_PTR(Tnode_bROa11lyF5vxEN9aYNbHmhw*, T_EV5hHJmjIY9cla9b9be7fSVJQ_28) (Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tidtable_9aiv9bp2t5icFNINcg9c4xi1Q pt0, Tnode_bROa11lyF5vxEN9aYNbHmhw* n0);
typedef N_CLOSURE_PTR(Tsym_AXG7xcvKqaxY6koRX1xkCw*, T_EV5hHJmjIY9cla9b9be7fSVJQ_29) (Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tsym_AXG7xcvKqaxY6koRX1xkCw* fn0, Tidtable_9aiv9bp2t5icFNINcg9c4xi1Q pt0, Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw info0);
struct TY_uZlRb8w5pa9b16Yfjq9cGRXQ {
Tsym_AXG7xcvKqaxY6koRX1xkCw* Field0;
NI Field1;
};
typedef N_CLOSURE_PTR(NI, T_EV5hHJmjIY9cla9b9be7fSVJQ_36) (Tsym_AXG7xcvKqaxY6koRX1xkCw* x_HajRHuG3hBLu9aRClDrclVA_3, Tsym_AXG7xcvKqaxY6koRX1xkCw* y_KmGmpKMOJbSpotUkWVINGw_3, void* ClEnv);
typedef NU8 Trenderflag_wrPgUo1ExBlHvFnXN2nSHw_Set;
typedef N_CLOSURE_PTR(Tsym_AXG7xcvKqaxY6koRX1xkCw*, T_EV5hHJmjIY9cla9b9be7fSVJQ_45) (Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tsym_AXG7xcvKqaxY6koRX1xkCw* fn0, Tidtable_9aiv9bp2t5icFNINcg9c4xi1Q pt0, Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw info0);
struct TY_qERWGavQjzug69cyzEYP39bQ {
char dummy;
};
struct  Tproccon_s5jyYR8yL1QmFqiHICzU9aQ  {
Tsym_AXG7xcvKqaxY6koRX1xkCw* owner;
Tsym_AXG7xcvKqaxY6koRX1xkCw* resultsym;
Tsym_AXG7xcvKqaxY6koRX1xkCw* selfsym;
NI nestedloopcounter;
NI nestedblockcounter;
NI intrystmt;
Tproccon_s5jyYR8yL1QmFqiHICzU9aQ* next;
NIM_BOOL wasforwarded;
Tnode_bROa11lyF5vxEN9aYNbHmhw* bracketexpr;
};
typedef NI TY_9a8QARi5WsUggNU9bom7kzTQ[8];
struct  Trunk_ul49aWfv9aes8cutmeltT3gQ  {
Trunk_ul49aWfv9aes8cutmeltT3gQ* next;
NI key;
TY_9a8QARi5WsUggNU9bom7kzTQ bits;
};
struct  Tlistentry_U4JkVlrJQaACKZ9a9cwCla3Q  {
  TNimObject Sup;
Tlistentry_U4JkVlrJQaACKZ9a9cwCla3Q* prev;
Tlistentry_U4JkVlrJQaACKZ9a9cwCla3Q* next;
};
struct  Tidpair_AdFnD2YdADPeuJbG2YJ4vg  {
Tidobj_raN9cHVgzmvaXisezY9aGg9cg* key;
TNimObject* val;
};
typedef NU8 Tevalmode_UbrbHUpo4hYFr1DbYzJgRQ;
typedef NU8 Tsandboxflag_JyPEhkAmDAldmLHNNrLR0A_Set;
struct  Tctx_hJGtOysUvnnuB9cLutWG9a2w  {
  Tpasscontext_qNsm39cWb35W2r5AAd9ch87g Sup;
TY_9bAGqSvkAaFL9bWjsEPslrFA* code;
TY_dRkMGUPOSmkGlhHeIeiomQ* debug;
Tnode_bROa11lyF5vxEN9aYNbHmhw* globals;
Tnode_bROa11lyF5vxEN9aYNbHmhw* constants;
TY_zuqP4Riz26Oi5fWgPYVEgA* types;
Tnode_bROa11lyF5vxEN9aYNbHmhw* currentexceptiona;
Tnode_bROa11lyF5vxEN9aYNbHmhw* currentexceptionb;
NI exceptioninstr;
PprocHEX3Aobjecttype_VFEBuxrDHC6kHPzc1TWaRQ* prc;
Tsym_AXG7xcvKqaxY6koRX1xkCw* module;
Tnode_bROa11lyF5vxEN9aYNbHmhw* callsite;
Tevalmode_UbrbHUpo4hYFr1DbYzJgRQ mode;
Tsandboxflag_JyPEhkAmDAldmLHNNrLR0A_Set features;
NIM_BOOL traceactive;
NI loopiterations;
Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw comesfromheuristic;
TY_RsxI3z4wK8jTuZiO0576gQ* callbacks;
NimStringDesc* errorflag;
IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw* cache;
};
struct  Tinstantiationpair_HkXM4cJmOpk8zFcmq9c9c3gQ  {
Tsym_AXG7xcvKqaxY6koRX1xkCw* genericsym;
Tinstantiation_5LqgVn6Tq9ainQRK7TQAQxA* inst;
};
typedef Tident_4umxGerWTHGPwUms7Yqu3g* TY_CBfZt49asUfAsBVM7a3Rc9cw[8192];
struct  IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw  {
TY_CBfZt49asUfAsBVM7a3Rc9cw buckets;
NI wordcounter;
Tident_4umxGerWTHGPwUms7Yqu3g* idanon;
Tident_4umxGerWTHGPwUms7Yqu3g* iddelegator;
Tident_4umxGerWTHGPwUms7Yqu3g* emptyident;
};
struct  Table_tfmlwa8ktiw8woWAs5vhtQ  {
TY_kxu4GK0onha2t9bo86mdVAg* data;
NI counter;
};
struct  ModulegraphHEX3Aobjecttype_RZI3hCs0FTPYx8StfC81qQ  {
TY_sksVpmPRIkNR9axiwtD1Guw* modules;
Tstrtable_f07aOS3dr28kGa5wcE29aFA packagesyms;
Intset_PQrmFm4BXFkFSVOUl1ojSg deps;
NIM_BOOL suggestmode;
NIM_BOOL invalidtransitiveclosure;
Table_tfmlwa8ktiw8woWAs5vhtQ incltomod;
TY_48JTohSgTy339bRxHzUD8KA* importstack;
TNimObject* backend;
};
struct  Gcstack_7fytPA5bBsob6See21YMRA  {
Gcstack_7fytPA5bBsob6See21YMRA* prev;
Gcstack_7fytPA5bBsob6See21YMRA* next;
void* starts;
void* pos;
NI maxstacksize;
};
struct  Basechunk_Sdq7WpT6qAH858F5ZEdG3w  {
NI prevsize;
NI size;
NIM_BOOL used;
};
struct  Smallchunk_tXn60W2f8h3jgAYdEmy5NQ  {
  Basechunk_Sdq7WpT6qAH858F5ZEdG3w Sup;
Smallchunk_tXn60W2f8h3jgAYdEmy5NQ* next;
Smallchunk_tXn60W2f8h3jgAYdEmy5NQ* prev;
Freecell_u6M5LHprqzkn9axr04yg9bGQ* freelist;
NI free;
NI acc;
NF data;
};
struct  Llchunk_XsENErzHIZV9bhvyJx56wGw  {
NI size;
NI acc;
Llchunk_XsENErzHIZV9bhvyJx56wGw* next;
};
struct  Bigchunk_Rv9c70Uhp2TytkX7eH78qEg  {
  Basechunk_Sdq7WpT6qAH858F5ZEdG3w Sup;
Bigchunk_Rv9c70Uhp2TytkX7eH78qEg* next;
Bigchunk_Rv9c70Uhp2TytkX7eH78qEg* prev;
NI align;
NF data;
};
struct  Trunk_W0r8S0Y3UGke6T9bIUWnnuw  {
Trunk_W0r8S0Y3UGke6T9bIUWnnuw* next;
NI key;
TY_9a8QARi5WsUggNU9bom7kzTQ bits;
};
typedef Avlnode_IaqjtwKhxLEpvDS9bct9blEw* TY_0aOLqZchNi8nWtMTi8ND8w[2];
struct  Avlnode_IaqjtwKhxLEpvDS9bct9blEw  {
TY_0aOLqZchNi8nWtMTi8ND8w link;
NI key;
NI upperbound;
NI level;
};
struct  Pagedesc_fublkgIY4LG3mT51LU2WHg  {
Pagedesc_fublkgIY4LG3mT51LU2WHg* next;
NI key;
TY_9a8QARi5WsUggNU9bom7kzTQ bits;
};
struct  Ropeobj_HF4qJnb6xiOddgPmsxodtQ  {
  TNimObject Sup;
Ropeobj_HF4qJnb6xiOddgPmsxodtQ* left;
Ropeobj_HF4qJnb6xiOddgPmsxodtQ* right;
NI length;
NimStringDesc* data;
};
typedef NU8 Tlibkind_9b8v60kso59bBaw9cp8B9a9apKQ;
struct  Tlib_4f9aBgmqEuj7uWJdBBGcRgA  {
  Tlistentry_U4JkVlrJQaACKZ9a9cwCla3Q Sup;
Tlibkind_9b8v60kso59bBaw9cp8B9a9apKQ kind;
NIM_BOOL generated;
NIM_BOOL isoverriden;
Ropeobj_HF4qJnb6xiOddgPmsxodtQ* name;
Tnode_bROa11lyF5vxEN9aYNbHmhw* path;
};
typedef NU8 Outputtarget_lDlBg9cTod71s9abpUj82lsw;
typedef NU8 Rstparseoption_fiZmsylYkyh6nEciRZcPsw_Set;
typedef N_NIMCALL_PTR(NimStringDesc*, TY_zTTG1BW0RKgQJxZCxtMtzw) (NimStringDesc* filename0);
typedef NU8 Msgkind_iviJnHlj9acPYlnNRbd9bhkQ;
typedef N_NIMCALL_PTR(void, TY_tyrxeYd2fCCwD9a8BTYcYJA) (NimStringDesc* filename0, NI line0, NI col0, Msgkind_iviJnHlj9acPYlnNRbd9bhkQ msgkind0, NimStringDesc* arg0);
typedef NimStringDesc* TY_C9cQfUOxfT2Mk6yT19cPu9aIA[5];
struct  Table_zjMaDBasw1LnKbj11akpfw  {
TY_pUxI6Ljo6IKKHXKOZkQ7Og* data;
NI counter;
};
struct  Rstgenerator_bnsEnRKte9bKKfeTFpYaoSQ  {
  TNimObject Sup;
Outputtarget_lDlBg9cTod71s9abpUj82lsw target;
Stringtableobj_DKRIdH9c9cKI7YpQb9c0wKlEw* config;
NI splitafter;
NI listingcounter;
TY_b7kA8pLABz0wMAUNGYo6Wg* tocpart;
NIM_BOOL hastoc;
NimStringDesc* theindex;
Rstparseoption_fiZmsylYkyh6nEciRZcPsw_Set options;
TY_zTTG1BW0RKgQJxZCxtMtzw findfile;
TY_tyrxeYd2fCCwD9a8BTYcYJA msghandler;
NimStringDesc* filename;
TY_C9cQfUOxfT2Mk6yT19cPu9aIA meta;
NimStringDesc* currentsection;
Table_zjMaDBasw1LnKbj11akpfw seenindexterms;
};
typedef Ropeobj_HF4qJnb6xiOddgPmsxodtQ* TY_YAK3AUlia0Xx2JCfYWAUzg[25];
struct  Tdocumentor_AoMzi1HUj6N6QwYiA5PvoQ  {
  Rstgenerator_bnsEnRKte9bKKfeTFpYaoSQ Sup;
Ropeobj_HF4qJnb6xiOddgPmsxodtQ* moddesc;
NI id;
TY_YAK3AUlia0Xx2JCfYWAUzg toc;
TY_YAK3AUlia0Xx2JCfYWAUzg section;
NimStringDesc* indexvalfilename;
NimStringDesc* analytics;
Stringtableobj_DKRIdH9c9cKI7YpQb9c0wKlEw* seensymbols;
Jsonnodeobj_df9bshXB7C9cTiWPIOtX3j1Q* jarray;
Tstrtable_f07aOS3dr28kGa5wcE29aFA types;
NIM_BOOL ispurerst;
};
struct TY_a09bGTAl9ceOKTAytYdkbyKg {
NI Field0;
Tsym_AXG7xcvKqaxY6koRX1xkCw* Field1;
};
typedef NU8 Tslotkind_QOyrDzzey9cf6gDtSRPuZMQ;
struct TY_SlmU1Ju0WFHUWkihyHMVYg {
NIM_BOOL Field0;
Tslotkind_QOyrDzzey9cf6gDtSRPuZMQ Field1;
};
typedef TY_SlmU1Ju0WFHUWkihyHMVYg TY_ORKcvNw6ApGJhbot1dJ6oA[256];
struct  PprocHEX3Aobjecttype_VFEBuxrDHC6kHPzc1TWaRQ  {
TY_JokFGfUW6i9b6aeU7xu6xBw* blocks;
Tsym_AXG7xcvKqaxY6koRX1xkCw* sym;
TY_ORKcvNw6ApGJhbot1dJ6oA slots;
NI maxslots;
};
typedef struct {
N_NIMCALL_PTR(void, ClPrc) (Vmargs_0UUl6e5CNNQfMon2xW2bVA* args0, void* ClEnv);
void* ClEnv;
} TY_S09bPfanQx9bEvdh4862x8zw;
struct TY_UCrBsiykDha2x4hr9aWPwKA {
NimStringDesc* Field0;
TY_S09bPfanQx9bEvdh4862x8zw Field1;
};
struct  Tinstantiation_5LqgVn6Tq9ainQRK7TQAQxA  {
Tsym_AXG7xcvKqaxY6koRX1xkCw* sym;
TY_zuqP4Riz26Oi5fWgPYVEgA* concretetypes;
NI compilesid;
};
struct TY_xDU9bZmv1ZbZkJDaATBekIQ {
NI Field0;
NI32 Field1;
NI32 Field2;
};
struct  Freecell_u6M5LHprqzkn9axr04yg9bGQ  {
Freecell_u6M5LHprqzkn9axr04yg9bGQ* next;
NI zerofield;
};
typedef NU8 Stringtablemode_G9c4wVDFIzf0xHmQvxso9a9cQ;
struct  Stringtableobj_DKRIdH9c9cKI7YpQb9c0wKlEw  {
  TNimObject Sup;
NI counter;
TY_4eQHGndY6XBYpFOH09apV8Q* data;
Stringtablemode_G9c4wVDFIzf0xHmQvxso9a9cQ mode;
};
struct  Tocentry_z7kal23LlR1mL50YJIPMCw  {
Rstnode_CjRS2xrmuD58kdGedE3yyg* n;
NimStringDesc* refname;
NimStringDesc* header;
};
struct TY_sr3s7uVHpu9cEbbDnCSg8yQ {
NI Field0;
NimStringDesc* Field1;
NI Field2;
};
typedef NU8 Jsonnodekind_RUngo7nCHe6O8aBGIcrhtg;
struct  Orderedtable_AF39bJ7XDr6gpANuGpxkHrw  {
TY_MlAD6nAPq9bHKla9cWiIZP0g* data;
NI counter;
NI first;
NI last;
};
struct  Jsonnodeobj_df9bshXB7C9cTiWPIOtX3j1Q  {
Jsonnodekind_RUngo7nCHe6O8aBGIcrhtg kind;
union{
struct {NimStringDesc* str;
} S1;
struct {NI64 num;
} S2;
struct {NF fnum;
} S3;
struct {NIM_BOOL bval;
} S4;
struct {Orderedtable_AF39bJ7XDr6gpANuGpxkHrw fields;
} S6;
struct {TY_oLpBKXzW3hF9aCVMo5EymfQ* elems;
} S7;
} kindU;
};
struct  Tblock_2tJGcW69ahqq39a9bVJC1sqGQ  {
Tsym_AXG7xcvKqaxY6koRX1xkCw* label;
TY_qwqHTkRvwhrRyENtudHQ7g* fixups;
};
struct  Vmargs_0UUl6e5CNNQfMon2xW2bVA  {
NI ra;
NI rb;
NI rc;
void* slots;
Tnode_bROa11lyF5vxEN9aYNbHmhw* currentexception;
Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw currentlineinfo;
};
struct TY_UV3llMMYFckfui8YMBuUZA {
NimStringDesc* Field0;
NimStringDesc* Field1;
};
typedef NU8 Rstnodekind_Q1jM9a8f0MKlvbLZpipB3qg;
struct  Rstnode_CjRS2xrmuD58kdGedE3yyg  {
Rstnodekind_Q1jM9a8f0MKlvbLZpipB3qg kind;
NimStringDesc* text;
NI level;
TY_sawZST1Esj3o7EY9ayWwGPw* sons;
};
struct TY_awOivLjlO76sGdHY7nQUjQ {
NI Field0;
NI Field1;
NimStringDesc* Field2;
Jsonnodeobj_df9bshXB7C9cTiWPIOtX3j1Q* Field3;
};
struct TY_sM4lkSb7zS6F7OVMvW9cffQ {
  TGenericSeq Sup;
  NimStringDesc* data[SEQ_DECL_SIZE];
};
struct TY_sksVpmPRIkNR9axiwtD1Guw {
  TGenericSeq Sup;
  Tsym_AXG7xcvKqaxY6koRX1xkCw* data[SEQ_DECL_SIZE];
};
struct TY_zuqP4Riz26Oi5fWgPYVEgA {
  TGenericSeq Sup;
  Ttype_LTUWCZolpovw9cWE3JBWSUw* data[SEQ_DECL_SIZE];
};
struct TY_xITzrU1RhJLKwBlRCAbn9bA {
  TGenericSeq Sup;
  TY_uZlRb8w5pa9b16Yfjq9cGRXQ data[SEQ_DECL_SIZE];
};
struct TY_ehmV9bTklH2Gt9cXHV9c0HLeQ {
  TGenericSeq Sup;
  Tnode_bROa11lyF5vxEN9aYNbHmhw* data[SEQ_DECL_SIZE];
};
struct TY_9brg1xNurxcus33lU4IE1Dw {
  TGenericSeq Sup;
  Trunk_ul49aWfv9aes8cutmeltT3gQ* data[SEQ_DECL_SIZE];
};
struct TY_Mh9agqM29bm9aP5AUL1x7dZGA {
  TGenericSeq Sup;
  Tidpair_AdFnD2YdADPeuJbG2YJ4vg data[SEQ_DECL_SIZE];
};
struct TY_jWKvSdankQPoT5bw9cBU9aiw {
  TGenericSeq Sup;
  Tinstantiationpair_HkXM4cJmOpk8zFcmq9c9c3gQ data[SEQ_DECL_SIZE];
};
struct TY_DXS6mEo7PVUFJkirsQ9bNQA {
  TGenericSeq Sup;
  Tinstantiation_5LqgVn6Tq9ainQRK7TQAQxA* data[SEQ_DECL_SIZE];
};
struct TY_iGkpo9aKQdr3NWelKC4cnJA {
  TGenericSeq Sup;
  TY_a09bGTAl9ceOKTAytYdkbyKg data[SEQ_DECL_SIZE];
};
struct TY_9bAGqSvkAaFL9bWjsEPslrFA {
  TGenericSeq Sup;
  NU32 data[SEQ_DECL_SIZE];
};
struct TY_dRkMGUPOSmkGlhHeIeiomQ {
  TGenericSeq Sup;
  Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw data[SEQ_DECL_SIZE];
};
struct TY_RsxI3z4wK8jTuZiO0576gQ {
  TGenericSeq Sup;
  TY_UCrBsiykDha2x4hr9aWPwKA data[SEQ_DECL_SIZE];
};
struct TY_kxu4GK0onha2t9bo86mdVAg {
  TGenericSeq Sup;
  TY_xDU9bZmv1ZbZkJDaATBekIQ data[SEQ_DECL_SIZE];
};
struct TY_48JTohSgTy339bRxHzUD8KA {
  TGenericSeq Sup;
  NI32 data[SEQ_DECL_SIZE];
};
struct TY_b7kA8pLABz0wMAUNGYo6Wg {
  TGenericSeq Sup;
  Tocentry_z7kal23LlR1mL50YJIPMCw data[SEQ_DECL_SIZE];
};
struct TY_pUxI6Ljo6IKKHXKOZkQ7Og {
  TGenericSeq Sup;
  TY_sr3s7uVHpu9cEbbDnCSg8yQ data[SEQ_DECL_SIZE];
};
struct TY_JokFGfUW6i9b6aeU7xu6xBw {
  TGenericSeq Sup;
  Tblock_2tJGcW69ahqq39a9bVJC1sqGQ data[SEQ_DECL_SIZE];
};
struct TY_4eQHGndY6XBYpFOH09apV8Q {
  TGenericSeq Sup;
  TY_UV3llMMYFckfui8YMBuUZA data[SEQ_DECL_SIZE];
};
struct TY_MlAD6nAPq9bHKla9cWiIZP0g {
  TGenericSeq Sup;
  TY_awOivLjlO76sGdHY7nQUjQ data[SEQ_DECL_SIZE];
};
struct TY_oLpBKXzW3hF9aCVMo5EymfQ {
  TGenericSeq Sup;
  Jsonnodeobj_df9bshXB7C9cTiWPIOtX3j1Q* data[SEQ_DECL_SIZE];
};
struct TY_qwqHTkRvwhrRyENtudHQ7g {
  TGenericSeq Sup;
  NI data[SEQ_DECL_SIZE];
};
struct TY_sawZST1Esj3o7EY9ayWwGPw {
  TGenericSeq Sup;
  Rstnode_CjRS2xrmuD58kdGedE3yyg* data[SEQ_DECL_SIZE];
};
N_NIMCALL(void, nimGCvisit)(void* d0, NI op0);
static N_NIMCALL(void, T_EV5hHJmjIY9cla9b9be7fSVJQ_3)(void);
N_NIMCALL(void, nimRegisterGlobalMarker)(TY_T4eqaYlFJYZUv9aG9b1TV0bQ markerproc0);
static N_NIMCALL(void, T_EV5hHJmjIY9cla9b9be7fSVJQ_4)(void);
N_NIMCALL(Tcheckpointresult_mp7otVupbkudrLwM0IFcHg, incheckpoint_GA4ibfeQx1uKQi9bIH2QX4w)(Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw current0);
N_NIMCALL(Tnode_bROa11lyF5vxEN9aYNbHmhw*, findclosestdot_9aBm2OiqFaJoTlXkYMqFfYQ)(Tnode_bROa11lyF5vxEN9aYNbHmhw* n0);
static N_INLINE(NI, safelen_CdME9baJhvveuPEDZE9bXoxAsigmatch)(Tnode_bROa11lyF5vxEN9aYNbHmhw* n0);
N_NIMCALL(Tnode_bROa11lyF5vxEN9aYNbHmhw*, safesemexpr_74xCvYZL9b9cKsQyQ9a9aX3Oqw)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tnode_bROa11lyF5vxEN9aYNbHmhw* n0);
static N_INLINE(void, pushSafePoint)(TSafePoint* s0);
static N_INLINE(void, popSafePoint)(void);
N_NIMCALL(NIM_BOOL, isObj)(TNimType* obj0, TNimType* subclass0);
static N_INLINE(Exception*, getCurrentException)(void);
static N_INLINE(void, popCurrentException)(void);
static N_INLINE(void, asgnRef)(void** dest0, void* src0);
static N_INLINE(void, incref_9cAA5YuQAAC3MVbnGeV86swsystem)(Cell_1zcF9cV8XIAtbN8h5HRUB8g* c0);
static N_INLINE(Cell_1zcF9cV8XIAtbN8h5HRUB8g*, usrtocell_yB9aH5WIlwd0xkYrcdPeXrQsystem)(void* usr0);
static N_INLINE(void, decref_MV4BBk6J1qu70IbBxwEn4wsystem)(Cell_1zcF9cV8XIAtbN8h5HRUB8g* c0);
static N_INLINE(void, rtladdzct_MV4BBk6J1qu70IbBxwEn4w_2system)(Cell_1zcF9cV8XIAtbN8h5HRUB8g* c0);
N_NOINLINE(void, addzct_fCDI7oO1NNVXXURtxSzsRw)(Cellseq_Axo1XVm9aaQueTOldv8le5w* s0, Cell_1zcF9cV8XIAtbN8h5HRUB8g* c0);
N_NIMCALL(void, reraiseException)(void);
N_NIMCALL(void, suggestfieldaccess_sZLTug9chAc5gilY9bLWuoAw)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tnode_bROa11lyF5vxEN9aYNbHmhw* n0, NI* outputs0);
N_NIMCALL(Tsym_AXG7xcvKqaxY6koRX1xkCw*, inittabiter_4ygtuv45J5xOJG1H4GUF9bA)(Ttabiter_VYF5VQsIYEVaBL0fKZJkbg* ti0, Tstrtable_f07aOS3dr28kGa5wcE29aFA tab0);
static N_INLINE(NIM_BOOL, filtersym_XtYBweJqs2OpFBFVtkucbQsigmatch)(Tsym_AXG7xcvKqaxY6koRX1xkCw* s0);
N_NIMCALL(void, suggestresult_XfzKoO09bw9cbOe5pnn9bxngg)(Suggest_tFc84OXhHlhBIifsMtOJew* s0);
N_NIMCALL(void, suggestwriteln_tRbCZ4fGDe9a36bXIedwnwQ)(NimStringDesc* s0);
N_NIMCALL(NimStringDesc*, HEX24_d9cgTr4UmnyMXo9cuHiSWz3Q)(Suggest_tFc84OXhHlhBIifsMtOJew* suggest0);
N_NIMCALL(NimStringDesc*, HEX24_9cJCKitIoTmipZ9bq1gB25Vw)(Idecmd_1Ced39bl5eePmZ1PKMPXigQ c0);
N_NIMCALL(NimStringDesc*, addChar)(NimStringDesc* s0, NIM_CHAR c0);
static N_INLINE(void, appendString)(NimStringDesc* dest0, NimStringDesc* src0);
static N_INLINE(void, copymem_E1xtACub5WcDa3vbrIXbwgsystem)(void* dest0, void* source0, NI size0);
N_NIMCALL(NimStringDesc*, resizeString)(NimStringDesc* dest0, NI addlen0);
N_NIMCALL(NimStringDesc*, reprEnum)(NI e0, TNimType* typ0);
N_NIMCALL(NimStringDesc*, nimIntToStr)(NI x0);
N_NIMCALL(NimStringDesc*, nsuJoinSep)(NimStringDesc** a0, NI a0Len0, NimStringDesc* sep0);
N_NIMCALL(NimStringDesc*, nsuEscape)(NimStringDesc* s0, NimStringDesc* prefix0, NimStringDesc* suffix0);
N_NIMCALL(void, symtosuggest_FFMkcTntV5b53OSyNeVJPQ)(Tsym_AXG7xcvKqaxY6koRX1xkCw* s0, NIM_BOOL islocal0, NimStringDesc* section0, NI quality0, Suggest_tFc84OXhHlhBIifsMtOJew* Result);
N_NIMCALL(void, symtosuggest_tOyawPUH9cST0l28alTZiyQ)(Tsym_AXG7xcvKqaxY6koRX1xkCw* s0, NIM_BOOL islocal0, NimStringDesc* section0, Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw li0, NI quality0, Suggest_tFc84OXhHlhBIifsMtOJew* Result);
N_NIMCALL(Idecmd_1Ced39bl5eePmZ1PKMPXigQ, parseidecmd_TQvrSbYJ8il5GbXHllB0rw)(NimStringDesc* s0);
N_NIMCALL(NimStringDesc*, tofullpath_7s19cb7WBgztz9aqEBzwwuqA)(NI32 fileidx0);
N_NIMCALL(void, unsureAsgnRef)(void** dest0, void* src0);
static N_INLINE(NI, tolinenumber_Vr9aXuUyvBQDK4X2879cHuGgsigmatch)(Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw info0);
static N_INLINE(NI, tocolumn_Vr9aXuUyvBQDK4X2879cHuGg_2sigmatch)(Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw info0);
N_NIMCALL(void*, newSeq)(TNimType* typ0, NI len0);
N_NIMCALL(TGenericSeq*, incrSeqV2)(TGenericSeq* seq0, NI elemsize0);
N_NIMCALL(NimStringDesc*, copyStringRC1)(NimStringDesc* src0);
static N_INLINE(void, nimGCunrefNoCycle)(void* p0);
N_NIMCALL(NimStringDesc*, typetostring_iUZlBdvGqNPVN17wd9aVBNw)(Ttype_LTUWCZolpovw9cWE3JBWSUw* typ0, Tprefereddesc_tnd4qt9c4xddV8oKV5zyusw prefer0);
N_NIMCALL(NimStringDesc*, copyString)(NimStringDesc* src0);
N_NIMCALL(NimStringDesc*, extractdoccomment_gqZQN2lJPlhAvwYOW3Xf8Q)(Tsym_AXG7xcvKqaxY6koRX1xkCw* s0, Tdocumentor_AoMzi1HUj6N6QwYiA5PvoQ* d0);
N_NOINLINE(void, chckNil)(void* p0);
N_NIMCALL(void, genericReset)(void* dest0, TNimType* mt0);
N_NIMCALL(Tsym_AXG7xcvKqaxY6koRX1xkCw*, nextiter_MtRRPpsZix0WHVpZVShg0A)(Ttabiter_VYF5VQsIYEVaBL0fKZJkbg* ti0, Tstrtable_f07aOS3dr28kGa5wcE29aFA tab0);
N_NIMCALL(void, suggesteverything_sZLTug9chAc5gilY9bLWuoAw_2)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tnode_bROa11lyF5vxEN9aYNbHmhw* n0, NI* outputs0);
N_NIMCALL(void, suggestsymlist_xnuyYG9cU5DIguyZ0JEF9cqg)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tnode_bROa11lyF5vxEN9aYNbHmhw* list0, NI* outputs0);
N_NIMCALL(NI, sonslen_qPWPHw7WgJeEVYUdcaRIig)(Tnode_bROa11lyF5vxEN9aYNbHmhw* n0);
N_NIMCALL(void, suggestfield_JoTXekhy9a4BpEitLZpiC8Q)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tsym_AXG7xcvKqaxY6koRX1xkCw* s0, NI* outputs0);
static N_INLINE(NIM_BOOL, fieldvisible_7dkMugvu9c7eUJBaXG7Qzowsigmatch)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tsym_AXG7xcvKqaxY6koRX1xkCw* f0);
N_NIMCALL(Tsym_AXG7xcvKqaxY6koRX1xkCw*, getmodule_0lPlu1uOok1rRK50z1V70A)(Tsym_AXG7xcvKqaxY6koRX1xkCw* s0);
N_NIMCALL(void, suggestoperations_MTkYMSIXBRdtvHqoUHhK1Q)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tnode_bROa11lyF5vxEN9aYNbHmhw* n0, Ttype_LTUWCZolpovw9cWE3JBWSUw* typ0, NI* outputs0);
static N_INLINE(void, asgnRefNoCycle)(void** dest0, void* src0);
N_NIMCALL(void, genericSeqAssign)(void* dest0, void* src_qi9cfsBnd42r9a9cpCLO10jow, TNimType* mt0);
N_NIMCALL(void, sort_pFXw7jjw1D1y9ahnr6FqyYQ)(Tsym_AXG7xcvKqaxY6koRX1xkCw** a0, NI a0Len0, TY_ebCc9bLaaaoeQAaNbPKMIRA cmp0, Sortorder_8iBc6wlNqBa9cju9cUAhUAxA order0);
N_NIMCALL(NI, HEX3Aanonymous_JXbbRJfy9awFVSPUsLGBSEQ)(Tsym_AXG7xcvKqaxY6koRX1xkCw* a_sHo1SPMXhnlNg9cx6eI2XrQ, Tsym_AXG7xcvKqaxY6koRX1xkCw* b_anUFsWNzYbFvMxA6JiUCWA);
N_NIMCALL(NI, cmp_xEnKsp9cfvO7Do9cTYXo8eJw)(NimStringDesc* x0, NimStringDesc* y0);
static N_INLINE(NIM_BOOL, filtersymnoopr_XtYBweJqs2OpFBFVtkucbQ_2sigmatch)(Tsym_AXG7xcvKqaxY6koRX1xkCw* s0);
N_NIMCALL(NIM_BOOL, iskeyword_J8SfzIplItYlZSj2oKWDnA)(Tident_4umxGerWTHGPwUms7Yqu3g* i0);
static N_INLINE(NIM_BOOL, typefits_q79cNzBIFiMxy9cSPq2r9cWPQsigmatch)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tsym_AXG7xcvKqaxY6koRX1xkCw* s0, Ttype_LTUWCZolpovw9cWE3JBWSUw* firstarg0);
N_NIMCALL(NI, sonslen_gG7hUAX9cA629ahMLVL3xN4w)(Ttype_LTUWCZolpovw9cWE3JBWSUw* n0);
N_NIMCALL(Ttype_LTUWCZolpovw9cWE3JBWSUw*, skiptypes_pLCdCGDuirMe9cspwviV9aVA)(Ttype_LTUWCZolpovw9cWE3JBWSUw* t0, Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag_Set kinds0);
N_NIMCALL(Ttype_LTUWCZolpovw9cWE3JBWSUw*, elemtype_46gPaVDDGhiU69b2oKDJZuA_2)(Ttype_LTUWCZolpovw9cWE3JBWSUw* t0);
N_NIMCALL(NIM_BOOL, argtypematches_cr4dgVPGk0yjqqQJn4quJw)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Ttype_LTUWCZolpovw9cWE3JBWSUw* f0, Ttype_LTUWCZolpovw9cWE3JBWSUw* a0);
N_NIMCALL(void, initcandidate_R0iDmZjaDJEKlSDdgINtVg)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* ctx0, Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* c0, Ttype_LTUWCZolpovw9cWE3JBWSUw* callee0);
static N_INLINE(void, initcandidateaux_4N44pnzycRIQPHhvl7qG9cQsigmatch)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* ctx0, Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* c0, Ttype_LTUWCZolpovw9cWE3JBWSUw* callee0);
N_NIMCALL(void, initidtable_9cUS2oaKn1IFXKjLdglPZHQ)(Tidtable_9aiv9bp2t5icFNINcg9c4xi1Q* x0);
N_NIMCALL(Tnode_bROa11lyF5vxEN9aYNbHmhw*, paramtypesmatch_4oz468xMSO9cYY9cQWwg7YHg)(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* m0, Ttype_LTUWCZolpovw9cWE3JBWSUw* f0, Ttype_LTUWCZolpovw9cWE3JBWSUw* a0, Tnode_bROa11lyF5vxEN9aYNbHmhw* arg0, Tnode_bROa11lyF5vxEN9aYNbHmhw* argorig0);
N_NIMCALL(Tnode_bROa11lyF5vxEN9aYNbHmhw*, paramtypesmatchaux_VRvPGOe1y6zeZJmJzzQbsQ)(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* m0, Ttype_LTUWCZolpovw9cWE3JBWSUw* f0, Ttype_LTUWCZolpovw9cWE3JBWSUw* argtype_tI9cURCfcfMTZX8vYUIdGDg, Tnode_bROa11lyF5vxEN9aYNbHmhw* argsemantized0, Tnode_bROa11lyF5vxEN9aYNbHmhw* argorig0);
N_NIMCALL(void, assigntype_50w9aT349c89bOXl19bOrS5HnA)(Ttype_LTUWCZolpovw9cWE3JBWSUw* dest0, Ttype_LTUWCZolpovw9cWE3JBWSUw* src0);
N_NIMCALL(Tnode_bROa11lyF5vxEN9aYNbHmhw*, newnodeit_lbGnVdZM6n2HPza7jVIlww)(Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw kind0, Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw info0, Ttype_LTUWCZolpovw9cWE3JBWSUw* typ0);
N_NIMCALL(Ttype_LTUWCZolpovw9cWE3JBWSUw*, maketypefromexpr_i8yLSSLd36fdLF9a4Nc0aeg)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tnode_bROa11lyF5vxEN9aYNbHmhw* n0);
N_NIMCALL(Ttype_LTUWCZolpovw9cWE3JBWSUw*, newtypes_9cQrDprXawJ1DKOUTsPNMTg)(Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag kind0, Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0);
N_NIMCALL(void*, newSeqRC1)(TNimType* typ0, NI len0);
N_NIMCALL(Ttyperelation_1IMf5P083XuEtWGxYaIXyQ, typerel_0fsYV9bVZA2eXpHTIQspjZA)(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* c0, Ttype_LTUWCZolpovw9cWE3JBWSUw* f0, Ttype_LTUWCZolpovw9cWE3JBWSUw* aorig0, NIM_BOOL dobind0);
static N_INLINE(void, put_JoRvap9abGYCKt6dvPFvsFAsigmatch)(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* c0, Ttype_LTUWCZolpovw9cWE3JBWSUw* key0, Ttype_LTUWCZolpovw9cWE3JBWSUw* val0);
N_NIMCALL(void, idtableput_3gLsywwJ9bZDaf06DfKpYbw)(Tidtable_9aiv9bp2t5icFNINcg9c4xi1Q* t0, Tidobj_raN9cHVgzmvaXisezY9aGg9cg* key0, TNimObject* val0);
static N_INLINE(Ttype_LTUWCZolpovw9cWE3JBWSUw*, skipintlit_Wqqd75hh0NzCssCyCNzd9agmagicsys)(Ttype_LTUWCZolpovw9cWE3JBWSUw* t0);
N_NIMCALL(Ttype_LTUWCZolpovw9cWE3JBWSUw*, getsystype_dewjtBqyEbcVGQRaQFtDAw)(Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag kind0);
N_NIMCALL(Ttype_LTUWCZolpovw9cWE3JBWSUw*, maybeskipdistinct_b9cb0j2qLR8Vva3Tro7wfEA)(Ttype_LTUWCZolpovw9cWE3JBWSUw* t0, Tsym_AXG7xcvKqaxY6koRX1xkCw* callee0);
N_NIMCALL(NIM_BOOL, shouldskipdistinct_knSo3339cRSN2U4HFxzrY1g)(Tnode_bROa11lyF5vxEN9aYNbHmhw* rules0, Tident_4umxGerWTHGPwUms7Yqu3g* callident0);
static N_INLINE(NI, len_CdME9baJhvveuPEDZE9bXoxAlambdalifting)(Tnode_bROa11lyF5vxEN9aYNbHmhw* n0);
N_NIMCALL(Tident_4umxGerWTHGPwUms7Yqu3g*, considerquotedident_bi6H6x9cvavSxJocgYdA9bRw)(Tnode_bROa11lyF5vxEN9aYNbHmhw* n0);
N_NIMCALL(Ttype_LTUWCZolpovw9cWE3JBWSUw*, base_46gPaVDDGhiU69b2oKDJZuA)(Ttype_LTUWCZolpovw9cWE3JBWSUw* t0);
N_NIMCALL(Ttype_LTUWCZolpovw9cWE3JBWSUw*, lastson_E41DMKHtT9c6sAMyyvhmSIw)(Ttype_LTUWCZolpovw9cWE3JBWSUw* n0);
static N_INLINE(NIM_BOOL, sameenumtypes_8v4PltvnKUFVoINNTE260gsigmatch)(Ttype_LTUWCZolpovw9cWE3JBWSUw* a0, Ttype_LTUWCZolpovw9cWE3JBWSUw* b0);
static N_INLINE(Tnode_bROa11lyF5vxEN9aYNbHmhw*, HEX5BHEX5D_4mGh5VHoHoaSkXDYdG6pyAitersgen)(Tnode_bROa11lyF5vxEN9aYNbHmhw* n0, NI i0);
N_NIMCALL(Tnode_bROa11lyF5vxEN9aYNbHmhw*, tryresolvingstaticexpr_9c6ZlcqOU7h9ajbZLjoxOM0w)(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* c0, Tnode_bROa11lyF5vxEN9aYNbHmhw* n0);
N_NIMCALL(Tnode_bROa11lyF5vxEN9aYNbHmhw*, replacetypesinbody_B4zyXrESj1hI8fRLnmKryA)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* p0, Tidtable_9aiv9bp2t5icFNINcg9c4xi1Q pt0, Tnode_bROa11lyF5vxEN9aYNbHmhw* n0, Tsym_AXG7xcvKqaxY6koRX1xkCw* owner0);
N_NOINLINE(Ttyperelation_1IMf5P083XuEtWGxYaIXyQ, typerangerel_h89bCS2h619a5vh77e9bOGAjQ)(Ttype_LTUWCZolpovw9cWE3JBWSUw* f0, Ttype_LTUWCZolpovw9cWE3JBWSUw* a0);
N_NIMCALL(NI64, firstord_HUiBYxvKiECXCv8BzQNheg)(Ttype_LTUWCZolpovw9cWE3JBWSUw* t0);
N_NIMCALL(NI64, lastord_HUiBYxvKiECXCv8BzQNheg_2)(Ttype_LTUWCZolpovw9cWE3JBWSUw* t0);
N_NIMCALL(NIM_BOOL, isconvertibletorange_02bS6aQ1YnsMHEF1Do9aHsg)(Ttype_LTUWCZolpovw9cWE3JBWSUw* f0, Ttype_LTUWCZolpovw9cWE3JBWSUw* a0);
N_NIMCALL(Ttyperelation_1IMf5P083XuEtWGxYaIXyQ, handlerange_9bd6b9aVP68tDeJTTDO30vSg)(Ttype_LTUWCZolpovw9cWE3JBWSUw* f0, Ttype_LTUWCZolpovw9cWE3JBWSUw* a0, Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag min0, Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag max0);
static N_INLINE(NIM_BOOL, isintlit_UBQknCC9aYWKMNMK4dmeTlQtypes)(Ttype_LTUWCZolpovw9cWE3JBWSUw* t0);
N_NIMCALL(Ttyperelation_1IMf5P083XuEtWGxYaIXyQ, handlefloatrange_2C61PQXVzju4z2HN0r7b0g)(Ttype_LTUWCZolpovw9cWE3JBWSUw* f0, Ttype_LTUWCZolpovw9cWE3JBWSUw* a0);
static N_INLINE(NIM_BOOL, isfloatlit_UBQknCC9aYWKMNMK4dmeTlQsigmatch)(Ttype_LTUWCZolpovw9cWE3JBWSUw* t0);
N_NIMCALL(TNimObject*, idtableget_D12lVDWWPrKae8szg3EYLw)(Tidtable_9aiv9bp2t5icFNINcg9c4xi1Q t0, Tidobj_raN9cHVgzmvaXisezY9aGg9cg* key0);
N_NIMCALL(Ttype_LTUWCZolpovw9cWE3JBWSUw*, newtypewithsons_7xhH3IRNjYY0XJGePt8pLA)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag kind0, TY_zuqP4Riz26Oi5fWgPYVEgA* sons0);
N_NIMCALL(Tnode_bROa11lyF5vxEN9aYNbHmhw*, newintnode_v2VGJAZNfKPVngZCqEXQtA)(Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw kind0, NI64 intval0);
N_NIMCALL(NI64, lengthord_HUiBYxvKiECXCv8BzQNheg_3)(Ttype_LTUWCZolpovw9cWE3JBWSUw* t0);
N_NIMCALL(NI, len_gG7hUAX9cA629ahMLVL3xN4w_2)(Ttype_LTUWCZolpovw9cWE3JBWSUw* n0);
static N_INLINE(Ttyperelation_1IMf5P083XuEtWGxYaIXyQ, allowsnil_59aII9aHhpaoZviau1LkOWWwsigmatch)(Ttype_LTUWCZolpovw9cWE3JBWSUw* f0);
N_NIMCALL(NIM_BOOL, isordinaltype_XI7vH8jtAcp7rWqTmfZOSg_2)(Ttype_LTUWCZolpovw9cWE3JBWSUw* t0);
N_NIMCALL(void, internalerror_5XY9cUy7hZmUusM38U9cYYdw)(NimStringDesc* errmsg0);
N_NIMCALL(Ttyperelation_1IMf5P083XuEtWGxYaIXyQ, recordrel_ATXQei1OP9acdbktDwpAl9ag)(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* c0, Ttype_LTUWCZolpovw9cWE3JBWSUw* f0, Ttype_LTUWCZolpovw9cWE3JBWSUw* a0);
N_NIMCALL(NIM_BOOL, sametype_EjIk4Kwv9bxfpaU9cx49cCrBQ)(Ttype_LTUWCZolpovw9cWE3JBWSUw* a0, Ttype_LTUWCZolpovw9cWE3JBWSUw* b0, Ttypecmpflag_72pgRXSg7774cr9aCWVPORw_Set flags0);
N_NIMCALL(Ttyperelation_1IMf5P083XuEtWGxYaIXyQ, minrel_cHQQLlmn22nDWBNFDVGjGw)(Ttyperelation_1IMf5P083XuEtWGxYaIXyQ a0, Ttyperelation_1IMf5P083XuEtWGxYaIXyQ b0);
N_NIMCALL(void, internalerror_MXmtqrCmYwtOPkDCFgUWKQ)(Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw info0, NimStringDesc* errmsg0);
N_NIMCALL(NIM_BOOL, sameobjecttypes_bXxjiP8HPzKjOso3AVsG5w)(Ttype_LTUWCZolpovw9cWE3JBWSUw* a0, Ttype_LTUWCZolpovw9cWE3JBWSUw* b0);
N_NIMCALL(NI, isobjectsubtype_AAFgb9cf1jok4tDnzcxROEA)(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* c0, Ttype_LTUWCZolpovw9cWE3JBWSUw* a0, Ttype_LTUWCZolpovw9cWE3JBWSUw* f0, Ttype_LTUWCZolpovw9cWE3JBWSUw* fgenericorigin0);
static N_INLINE(NIM_BOOL, samedistincttypes_E81g0CHdt1olSerxA8b5oAsigmatch)(Ttype_LTUWCZolpovw9cWE3JBWSUw* a0, Ttype_LTUWCZolpovw9cWE3JBWSUw* b0);
N_NIMCALL(Ttyperelation_1IMf5P083XuEtWGxYaIXyQ, proctyperel_ATXQei1OP9acdbktDwpAl9ag_2)(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* c0, Ttype_LTUWCZolpovw9cWE3JBWSUw* f0, Ttype_LTUWCZolpovw9cWE3JBWSUw* a0);
N_NIMCALL(Ttyperelation_1IMf5P083XuEtWGxYaIXyQ, procparamtyperel_ATXQei1OP9acdbktDwpAl9ag_3)(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* c0, Ttype_LTUWCZolpovw9cWE3JBWSUw* f_ZGbbZW755tWLjGofnyQdGA, Ttype_LTUWCZolpovw9cWE3JBWSUw* a_vkoKSj6s9c29bFdjsTemg9amQ);
N_NIMCALL(NIM_BOOL, ismetatype_BP9bVN0WuPxtcisPwKXmzoQ)(Ttype_LTUWCZolpovw9cWE3JBWSUw* t0);
N_NIMCALL(Ttype_LTUWCZolpovw9cWE3JBWSUw*, generatetypeinstance_J1KXEIMiOMsSsHjeCCCXbQ)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* p0, Tidtable_9aiv9bp2t5icFNINcg9c4xi1Q pt0, Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw info0, Ttype_LTUWCZolpovw9cWE3JBWSUw* t0);
static N_INLINE(NIM_BOOL, inconsistentvartypes_v1q2uuw9bsT7guGlN6Ln1vgsigmatch)(Ttype_LTUWCZolpovw9cWE3JBWSUw* f0, Ttype_LTUWCZolpovw9cWE3JBWSUw* a0);
N_NIMCALL(NIM_BOOL, compatibleeffects_ulOq8f6fsd9cVuZJ1lRYKMw)(Ttype_LTUWCZolpovw9cWE3JBWSUw* formal0, Ttype_LTUWCZolpovw9cWE3JBWSUw* actual0);
N_NIMCALL(Ttype_LTUWCZolpovw9cWE3JBWSUw*, skipgenericalias_46gPaVDDGhiU69b2oKDJZuA_3)(Ttype_LTUWCZolpovw9cWE3JBWSUw* t0);
N_NIMCALL(NIM_BOOL, isgenericsubtype_iFYDgIHQFHAIUyeXIQKySg)(Ttype_LTUWCZolpovw9cWE3JBWSUw* a0, Ttype_LTUWCZolpovw9cWE3JBWSUw* f0, NI* d0);
N_NIMCALL(Ttype_LTUWCZolpovw9cWE3JBWSUw*, skiptoobject_2mzjvZ9aRUzu3xJQF0NC3eQ)(Ttype_LTUWCZolpovw9cWE3JBWSUw* t0, Skippedptr_WOSTpykTcTHo6Kb9bHoOUqQ* skipped0);
N_NIMCALL(Ttype_LTUWCZolpovw9cWE3JBWSUw*, concretetype_LygDqx9ccbKjtPzfFJFniJQ)(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* c0, Ttype_LTUWCZolpovw9cWE3JBWSUw* t0);
N_NIMCALL(NimStringDesc*, rawNewString)(NI space0);
N_NIMCALL(Ttyperelation_1IMf5P083XuEtWGxYaIXyQ, matchusertypeclass_NSmou3mZj0I2im7PS4zUIg)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* m0, Ttype_LTUWCZolpovw9cWE3JBWSUw* ff0, Ttype_LTUWCZolpovw9cWE3JBWSUw* a0);
N_NIMCALL(void, localerror_GarD0CQJ5aQhoHekHYinVQ)(Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw info0, NimStringDesc* arg0);
N_NIMCALL(NimStringDesc*, HEX24_qX5C9b0n9bOP7jk69amC8dA7A_2)(Tnode_bROa11lyF5vxEN9aYNbHmhw* n0);
N_NIMCALL(Tscope_1cQRXW6aAknk7ywAwjH3nw*, openscope_en8ki68OmR49cqJSPN5rSJQ)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0);
N_NIMCALL(Tsym_AXG7xcvKqaxY6koRX1xkCw*, newsym_2uJTpCZGZAi7a4eAm1ds8Q)(Tsymkind_cNCW9acsSznmEccl1fgQwkw symkind0, Tident_4umxGerWTHGPwUms7Yqu3g* name0, Tsym_AXG7xcvKqaxY6koRX1xkCw* owner0, Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw info0);
N_NIMCALL(Ttype_LTUWCZolpovw9cWE3JBWSUw*, maketypedesc_CqYEBJKDkKTW89cDtM9aYg4g)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Ttype_LTUWCZolpovw9cWE3JBWSUw* typ0);
N_NIMCALL(void, adddecl_n1KYyMdrfFhXnSjpmEHg9cA_2)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tsym_AXG7xcvKqaxY6koRX1xkCw* sym0);
N_NIMCALL(Ttype_LTUWCZolpovw9cWE3JBWSUw*, makevartype_mDAs5V37nZYC3ByzC3o7dQ)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Ttype_LTUWCZolpovw9cWE3JBWSUw* basetype0);
N_NIMCALL(NimStringDesc*, HEX24_k53Ge4e9cDjc7y9c5uML7sPQ)(TY_XOVT24GHXwqiEj5GCsEGCA x0);
N_NIMCALL(Tnode_bROa11lyF5vxEN9aYNbHmhw*, copytree_lz8T1F9c0YwEOpUnrAUYgjg_2)(Tnode_bROa11lyF5vxEN9aYNbHmhw* src0);
N_NIMCALL(void, closescope_r2b7lx9cCbS9b0TH9b5UCNxAA)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0);
N_NIMCALL(NIM_BOOL, HEX3DHEX3D_59b802owH8LncWkMg9cCE3ng)(TY_zuqP4Riz26Oi5fWgPYVEgA* x0, TY_zuqP4Riz26Oi5fWgPYVEgA* y0);
N_NIMCALL(NIM_BOOL, exprstructuralequivalent_XApnXRaD9btY9a4pkMO0ITTg)(Tnode_bROa11lyF5vxEN9aYNbHmhw* a0, Tnode_bROa11lyF5vxEN9aYNbHmhw* b0, NIM_BOOL strictsymequality0);
N_NIMCALL(void, localerror_VpilfPWbplGz6ny7O9cfr2g)(Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw info0, Tmsgkind_IGAWgv9aR2KqPKJfPZPEWaw msg0, NimStringDesc* arg0);
N_NIMCALL(void, incmatches_pC7j2mDtrjUpKOb1X8xk5A)(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* m0, Ttyperelation_1IMf5P083XuEtWGxYaIXyQ r0, NI convmatch0);
N_NIMCALL(Tnode_bROa11lyF5vxEN9aYNbHmhw*, newsymnode_slQ2jWOFI1ND3N9c79b7b18g)(Tsym_AXG7xcvKqaxY6koRX1xkCw* sym0, Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw info0);
N_NIMCALL(Tnode_bROa11lyF5vxEN9aYNbHmhw*, implicitconv_ttBE689bA8zSgXJt6wtOZGA)(Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw kind0, Ttype_LTUWCZolpovw9cWE3JBWSUw* f0, Tnode_bROa11lyF5vxEN9aYNbHmhw* arg0, Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* m0, Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0);
N_NIMCALL(Tnode_bROa11lyF5vxEN9aYNbHmhw*, newnodei_PIqgSH9b0m7nFpOyXf9cpz5w)(Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw kind0, Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw info0);
N_NIMCALL(NIM_BOOL, containsgenerictype_Xhr5Lz1SR4KhD6lSHAyGDA)(Ttype_LTUWCZolpovw9cWE3JBWSUw* t0);
N_NIMCALL(Ttype_LTUWCZolpovw9cWE3JBWSUw*, getinstantiatedtype_4yLeA9cfYvM0ZfKPSGqCZCg)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tnode_bROa11lyF5vxEN9aYNbHmhw* arg0, Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* m0, Ttype_LTUWCZolpovw9cWE3JBWSUw* f0);
N_NIMCALL(Ttype_LTUWCZolpovw9cWE3JBWSUw*, errortype_ShA6p2jJG1xQ4GbGPvr38g)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0);
N_NIMCALL(void, addson_gCCf68XrWL79bKes6htzFjQ)(Tnode_bROa11lyF5vxEN9aYNbHmhw* father0, Tnode_bROa11lyF5vxEN9aYNbHmhw* son0);
N_NIMCALL(NIM_BOOL, isemptycontainer_XI7vH8jtAcp7rWqTmfZOSg_3)(Ttype_LTUWCZolpovw9cWE3JBWSUw* t0);
N_NIMCALL(Tnode_bROa11lyF5vxEN9aYNbHmhw*, userconvmatch_fnGSh6c9cvB9b6ahDjUpd9aAA)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* m0, Ttype_LTUWCZolpovw9cWE3JBWSUw* f0, Ttype_LTUWCZolpovw9cWE3JBWSUw* a0, Tnode_bROa11lyF5vxEN9aYNbHmhw* arg0);
N_NIMCALL(void, markused_Ue6rwV8sAT8uVT9cT5cip9aA)(Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw info0, Tsym_AXG7xcvKqaxY6koRX1xkCw* s0);
N_NIMCALL(void, message_VpilfPWbplGz6ny7O9cfr2g_2)(Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw info0, Tmsgkind_IGAWgv9aR2KqPKJfPZPEWaw msg0, NimStringDesc* arg0);
N_NIMCALL(Tnode_bROa11lyF5vxEN9aYNbHmhw*, newsymnode_1ARBpggFQuvUDBVYjBelcw)(Tsym_AXG7xcvKqaxY6koRX1xkCw* sym0);
N_NIMCALL(Tnode_bROa11lyF5vxEN9aYNbHmhw*, localconvmatch_fnGSh6c9cvB9b6ahDjUpd9aAA_2)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* m0, Ttype_LTUWCZolpovw9cWE3JBWSUw* f0, Ttype_LTUWCZolpovw9cWE3JBWSUw* a0, Tnode_bROa11lyF5vxEN9aYNbHmhw* arg0);
N_NIMCALL(void, add_gCCf68XrWL79bKes6htzFjQ_3)(Tnode_bROa11lyF5vxEN9aYNbHmhw* father0, Tnode_bROa11lyF5vxEN9aYNbHmhw* son0);
N_NIMCALL(void, copycandidate_pupnwSeNO1uiPChHifpilQ)(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* a0, Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* b0);
N_NIMCALL(void, copyidtable_PAWgxjpTWlqAOeehMcKZ0w)(Tidtable_9aiv9bp2t5icFNINcg9c4xi1Q* dest0, Tidtable_9aiv9bp2t5icFNINcg9c4xi1Q src0);
static N_NIMCALL(void, Marker_TY_xITzrU1RhJLKwBlRCAbn9bA)(void* p, NI op);
N_NIMCALL(void, genericAssign)(void* dest0, void* src0, TNimType* mt0);
N_NIMCALL(NI, cmpcandidates_y6m9bhhlwHAuzsfu0xg0hDQ)(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* a0, Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* b0);
N_NIMCALL(NI, complexdisambiguation_QYrRv9bDF6IEx6OHay7hPpg)(Ttype_LTUWCZolpovw9cWE3JBWSUw* a0, Ttype_LTUWCZolpovw9cWE3JBWSUw* b0);
N_NIMCALL(NI, sumgeneric_3yGddmiezmYo8RY02I0sJQ)(Ttype_LTUWCZolpovw9cWE3JBWSUw* t_D7m3YNJLIYTykWw0m4MtHQ);
N_NIMCALL(void, suggestobject_sZLTug9chAc5gilY9bLWuoAw_3)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tnode_bROa11lyF5vxEN9aYNbHmhw* n0, NI* outputs0);
N_NIMCALL(Tnode_bROa11lyF5vxEN9aYNbHmhw*, lastson_esDJA7239bJDiq4UrX9aHCjg)(Tnode_bROa11lyF5vxEN9aYNbHmhw* n0);
N_NIMCALL(Tnode_bROa11lyF5vxEN9aYNbHmhw*, findclosestcall_9aBm2OiqFaJoTlXkYMqFfYQ_2)(Tnode_bROa11lyF5vxEN9aYNbHmhw* n0);
N_NIMCALL(Tnode_bROa11lyF5vxEN9aYNbHmhw*, copynode_lz8T1F9c0YwEOpUnrAUYgjg)(Tnode_bROa11lyF5vxEN9aYNbHmhw* src0);
N_NIMCALL(void, suggestcall_u17D1X5DVdBh1NyIkw529aA)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tnode_bROa11lyF5vxEN9aYNbHmhw* n0, Tnode_bROa11lyF5vxEN9aYNbHmhw* norig0, NI* outputs0);
N_NIMCALL(NI, HEX3Aanonymous_JXbbRJfy9awFVSPUsLGBSEQ_2)(Tsym_AXG7xcvKqaxY6koRX1xkCw* a_yPPkY7dTxpeaTMk1k7YiRw, Tsym_AXG7xcvKqaxY6koRX1xkCw* b_rfNMfeaXpUQljDe6qQUHPw);
N_NIMCALL(NIM_BOOL, namefits_aHOzXQ5KFmG6jnLobldVaw)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tsym_AXG7xcvKqaxY6koRX1xkCw* s0, Tnode_bROa11lyF5vxEN9aYNbHmhw* n0);
N_NIMCALL(NIM_BOOL, argsfit_Qn09aGeFsj9bCZF8BCCdCa0Q)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tsym_AXG7xcvKqaxY6koRX1xkCw* candidate0, Tnode_bROa11lyF5vxEN9aYNbHmhw* n0, Tnode_bROa11lyF5vxEN9aYNbHmhw* norig0);
N_NIMCALL(void, initcandidate_k2gpOBVyx13JjcoIpvVYvQ)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* ctx0, Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* c0, Tsym_AXG7xcvKqaxY6koRX1xkCw* callee0, Tnode_bROa11lyF5vxEN9aYNbHmhw* binding0, NI calleescope0);
N_NIMCALL(Tsym_AXG7xcvKqaxY6koRX1xkCw*, originatingmodule_ugWPlZqqVshHUeOH4zw3vA_2)(Tsym_AXG7xcvKqaxY6koRX1xkCw* s0);
N_NIMCALL(Tsym_AXG7xcvKqaxY6koRX1xkCw*, skipgenericowner_ugWPlZqqVshHUeOH4zw3vA)(Tsym_AXG7xcvKqaxY6koRX1xkCw* s0);
N_NIMCALL(void, partialmatch_x3U2uVO0diqi4Z4tOU2y9aw)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tnode_bROa11lyF5vxEN9aYNbHmhw* n0, Tnode_bROa11lyF5vxEN9aYNbHmhw* norig0, Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* m0);
N_NIMCALL(void, initintset_a9a80eJplB17xrdZJ41Baww)(Intset_PQrmFm4BXFkFSVOUl1ojSg* Result);
N_NIMCALL(void, matchesaux_5B328Lq3sbOWOpGv9bkDcTg)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tnode_bROa11lyF5vxEN9aYNbHmhw* n0, Tnode_bROa11lyF5vxEN9aYNbHmhw* norig0, Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* m0, Intset_PQrmFm4BXFkFSVOUl1ojSg* marker0);
N_NIMCALL(void, incl_iUpE9bYmIR0fROyJskQwN8g)(Intset_PQrmFm4BXFkFSVOUl1ojSg* s0, NI key0);
N_NIMCALL(Ttype_LTUWCZolpovw9cWE3JBWSUw*, arrayconstr_kYM3keGF9bgNpWhgQ6i4cvw)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw info0);
N_NIMCALL(void, rawaddson_52UH8yKinsYmFX9bFij9c2Hw)(Ttype_LTUWCZolpovw9cWE3JBWSUw* father0, Ttype_LTUWCZolpovw9cWE3JBWSUw* son0);
N_NIMCALL(Ttype_LTUWCZolpovw9cWE3JBWSUw*, makerangetype_dvifOZPMqHzaM6DkApBvxg)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, NI64 first0, NI64 last0, Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw info0, Ttype_LTUWCZolpovw9cWE3JBWSUw* inttype0);
N_NIMCALL(void, setson_FXgYDL7XFFjJ13GOQwso6g)(Tnode_bROa11lyF5vxEN9aYNbHmhw* father0, NI at0, Tnode_bROa11lyF5vxEN9aYNbHmhw* son0);
N_NIMCALL(TGenericSeq*, setLengthSeq)(TGenericSeq* seq0, NI elemsize0, NI newlen0);
N_NIMCALL(void, incrindextype_rBBnNicDfwmFIGT2L6rbPA)(Ttype_LTUWCZolpovw9cWE3JBWSUw* t0);
N_NIMCALL(void, preparenamedparam_4aY53hSpWPSeKKJlRFg8JA)(Tnode_bROa11lyF5vxEN9aYNbHmhw* a0);
N_NIMCALL(Tnode_bROa11lyF5vxEN9aYNbHmhw*, newidentnode_G82iaTfj9aP4Nw5aup9b62iQ)(Tident_4umxGerWTHGPwUms7Yqu3g* ident0, Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw info0);
N_NIMCALL(Tsym_AXG7xcvKqaxY6koRX1xkCw*, getsymfromlist_9c9cLkZFlCQ8DEaDRcXgGe9bA)(Tnode_bROa11lyF5vxEN9aYNbHmhw* list0, Tident_4umxGerWTHGPwUms7Yqu3g* ident0, NI start0);
N_NIMCALL(NIM_BOOL, containsorincl_B0EhVMrh5BBBZOOtYjAvVg)(Intset_PQrmFm4BXFkFSVOUl1ojSg* s0, NI key0);
N_NIMCALL(Tnode_bROa11lyF5vxEN9aYNbHmhw*, prepareoperand_aaHsR8QX2N2PHWQRAidM9cQ)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Ttype_LTUWCZolpovw9cWE3JBWSUw* formal0, Tnode_bROa11lyF5vxEN9aYNbHmhw* a0);
N_NIMCALL(NIM_BOOL, matchnodekinds_WRbpWXbxOP9c3ULW5bbDujw)(Tnode_bROa11lyF5vxEN9aYNbHmhw* p0, Tnode_bROa11lyF5vxEN9aYNbHmhw* n0);
N_NIMCALL(NIM_BOOL, islvalue_kCP6QlI8uS4X0pOQUdr7tg)(Tnode_bROa11lyF5vxEN9aYNbHmhw* n0);
N_NIMCALL(Ttype_LTUWCZolpovw9cWE3JBWSUw*, arrayconstr_Y9chpkGw6fgFUgeuv6B8QoA)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tnode_bROa11lyF5vxEN9aYNbHmhw* n0);
N_NIMCALL(void, addsonskipintlit_d0ho9bIGF3YeWTv0iA2z9awA)(Ttype_LTUWCZolpovw9cWE3JBWSUw* father0, Ttype_LTUWCZolpovw9cWE3JBWSUw* son0);
N_NIMCALL(Tnode_bROa11lyF5vxEN9aYNbHmhw*, prepareoperand_KkKYwsOmKMXfkn3glfCbuA)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tnode_bROa11lyF5vxEN9aYNbHmhw* a0);
N_NIMCALL(void, suggestquit_9b9cOrPjJhKLIT47OQsALB4Q)(void);
N_NIMCALL(NimStringDesc*, rendertree_ppjdh9aQ5L0SGPF8yz1gZ9cA)(Tnode_bROa11lyF5vxEN9aYNbHmhw* n0, Trenderflag_wrPgUo1ExBlHvFnXN2nSHw_Set renderflags0);
N_NIMCALL(NimStringDesc*, argtypetostring_4EtZe89aZdrkU6I6iZJr4Yg)(Tnode_bROa11lyF5vxEN9aYNbHmhw* arg0, Tprefereddesc_tnd4qt9c4xddV8oKV5zyusw prefer0);
N_NIMCALL(void, suggestexpr_GPATGlMDRN5VZ5q4eCQYag)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tnode_bROa11lyF5vxEN9aYNbHmhw* node0);
TY_S1iHa9bJe79be19aRwtH7KMRg suggestionresulthook_eFlaOR5uCOtsxg0ev4zSVw;
TNimType NTI_S1iHa9bJe79be19aRwtH7KMRg;
extern TNimType NTI_vr5DoT1jILTGdRlYv1OYpw;
extern TNimType NTI_j4IZVEbOYTm9aXKJeVb8ILQ;
NI suggestversion_yLEg4sXqoMAZlVgI47cCqw;
Tsym_AXG7xcvKqaxY6koRX1xkCw* usagesym_PLzdQrZ70zUrwcAtCuQBMg;
extern TNimType NTI_83n62yi1b9bgUtRR9axFWW9ag;
Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw lastlineinfo_LlUrbumYeVEiQvPHDYfWbg;
extern Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw gtrackpos_MB8TS6WWQAxbT0Tu9b9cDHkg;
extern Idecmd_1Ced39bl5eePmZ1PKMPXigQ gidecmd_juq2yKSgC8DZC5pqLIaQmQ;
extern TSafePoint* exchandler_rqLlY5bs9atDw2OXYqJEn5g;
extern TNimType NTI_YAlYTV9cm9c08Uxrh3d9aczDg;
extern Exception* currexception_9bVPeDJlYTi9bQApZpfH8wjg;
extern Tnode_bROa11lyF5vxEN9aYNbHmhw* emptynode_69ccLGuQ2mITw7zylZYtWcA;
extern Gcheap_1TRH1TZMaVZTnLNcIHuNFQ gch_IcYaEuuWivYAS86vFMTS3Q;
extern TNimType NTI_cNCW9acsSznmEccl1fgQwkw;
extern Tglobaloption_RAfAEZqjnKMDumgyKKc1qw_Set gglobaloptions_j042VVDC9cT5ENYoXnmhhVg;
extern TNimType NTI_sM4lkSb7zS6F7OVMvW9cffQ;
TNimType NTI_tFc84OXhHlhBIifsMtOJew;
extern TNimType NTI_1Ced39bl5eePmZ1PKMPXigQ;
extern TNimType NTI_77mFvmsOLKik79ci2hXkHEg;
extern TNimType NTI_rR5Bzr1D5krxoo1NcNyeMA;
extern TNimType NTI_13aFwjKaWlqhwUBjDHvkIw;
extern TNimType NTI_VaVACK0bpYmqIQ0mKcHfQQ;
extern TNimType NTI_sksVpmPRIkNR9axiwtD1Guw;
extern TNimType NTI_zuqP4Riz26Oi5fWgPYVEgA;
extern TNimType NTI_9a3YiReNVD0IJHWFKgXRe9ag;
TNimType NTI_B8Gf2sSWgQ79bLZ9bYWrLHaA;
extern TNimType NTI_QxKU6hUjq23Dy0KTbUHAjg;
TNimType NTI_C8RXb59bvbxaTzDOqx49aVVg;
extern TNimType NTI_1EooIlSGbJRPSt3SfQJd7Q;
extern TNimType NTI_fKfcLzXYiz5jNu3NH3Tv8Q;
extern TNimType NTI_9aiv9bp2t5icFNINcg9c4xi1Q;
extern TNimType NTI_shZhZOdbVC5nnFvcXQAImg;
extern TNimType NTI_k3HXouOuhqAKq0dx450lXQ;
TNimType NTI_uZlRb8w5pa9b16Yfjq9cGRXQ;
TNimType NTI_xITzrU1RhJLKwBlRCAbn9bA;
STRING_LITERAL(T_EV5hHJmjIY9cla9b9be7fSVJQ_7, "skGlobalVar", 11);
STRING_LITERAL(T_EV5hHJmjIY9cla9b9be7fSVJQ_8, "skGlobalLet", 11);
STRING_LITERAL(T_EV5hHJmjIY9cla9b9be7fSVJQ_9, ".", 1);
STRING_LITERAL(T_EV5hHJmjIY9cla9b9be7fSVJQ_10, "\"", 1);
STRING_LITERAL(T_EV5hHJmjIY9cla9b9be7fSVJQ_11, "", 0);
extern NIM_CONST Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag_Set abstractinst_dLigiD0wrfdW59cejPpTktA;
STRING_LITERAL(T_EV5hHJmjIY9cla9b9be7fSVJQ_14, "forward type in typeRel()", 25);
STRING_LITERAL(T_EV5hHJmjIY9cla9b9be7fSVJQ_15, "recordRel", 9);
STRING_LITERAL(T_EV5hHJmjIY9cla9b9be7fSVJQ_16, "wrong instantiated type!", 24);
STRING_LITERAL(T_EV5hHJmjIY9cla9b9be7fSVJQ_17, "cannot resolve type: ", 21);
STRING_LITERAL(T_EV5hHJmjIY9cla9b9be7fSVJQ_18, " too nested for type matching", 29);
STRING_LITERAL(T_EV5hHJmjIY9cla9b9be7fSVJQ_21, "sigmatch.nim", 12);
NIM_CONST TY_XOVT24GHXwqiEj5GCsEGCA T_EV5hHJmjIY9cla9b9be7fSVJQ_20 = {((NimStringDesc*) &T_EV5hHJmjIY9cla9b9be7fSVJQ_21),
((NI) 619)}
;
NIM_CONST TY_XOVT24GHXwqiEj5GCsEGCA T_EV5hHJmjIY9cla9b9be7fSVJQ_22 = {((NimStringDesc*) &T_EV5hHJmjIY9cla9b9be7fSVJQ_21),
((NI) 1134)}
;
STRING_LITERAL(T_EV5hHJmjIY9cla9b9be7fSVJQ_23, " unknown type kind ", 19);
STRING_LITERAL(T_EV5hHJmjIY9cla9b9be7fSVJQ_26, "getInstantiatedType", 19);
STRING_LITERAL(T_EV5hHJmjIY9cla9b9be7fSVJQ_27, "implicitConv", 12);
STRING_LITERAL(T_EV5hHJmjIY9cla9b9be7fSVJQ_35, "x.state is not csMatch", 22);
NIM_CONST TY_XOVT24GHXwqiEj5GCsEGCA T_EV5hHJmjIY9cla9b9be7fSVJQ_37 = {((NimStringDesc*) &T_EV5hHJmjIY9cla9b9be7fSVJQ_21),
((NI) 127)}
;
STRING_LITERAL(T_EV5hHJmjIY9cla9b9be7fSVJQ_38, "matches", 7);
STRING_LITERAL(T_EV5hHJmjIY9cla9b9be7fSVJQ_39, ": ", 2);
STRING_LITERAL(T_EV5hHJmjIY9cla9b9be7fSVJQ_40, " | ", 3);
STRING_LITERAL(T_EV5hHJmjIY9cla9b9be7fSVJQ_41, "void", 4);
STRING_LITERAL(T_EV5hHJmjIY9cla9b9be7fSVJQ_42, ", ", 2);
STRING_LITERAL(T_EV5hHJmjIY9cla9b9be7fSVJQ_43, "cannot instantiate \'", 20);
STRING_LITERAL(T_EV5hHJmjIY9cla9b9be7fSVJQ_44, "\'", 1);
static N_NIMCALL(void, T_EV5hHJmjIY9cla9b9be7fSVJQ_3)(void) {
	nimGCvisit((void*)suggestionresulthook_eFlaOR5uCOtsxg0ev4zSVw.ClEnv, 0);
}
static N_NIMCALL(void, T_EV5hHJmjIY9cla9b9be7fSVJQ_4)(void) {
	nimGCvisit((void*)usagesym_PLzdQrZ70zUrwcAtCuQBMg, 0);
}

N_NIMCALL(Tcheckpointresult_mp7otVupbkudrLwM0IFcHg, incheckpoint_GA4ibfeQx1uKQi9bIH2QX4w)(Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw current0) {
	Tcheckpointresult_mp7otVupbkudrLwM0IFcHg result0;
{	result0 = (Tcheckpointresult_mp7otVupbkudrLwM0IFcHg)0;
	{
		if (!(current0.fileindex == gtrackpos_MB8TS6WWQAxbT0Tu9b9cDHkg.fileindex)) goto LA3;
		{
			NIM_BOOL LOC7;
			LOC7 = (NIM_BOOL)0;
			LOC7 = (current0.line == gtrackpos_MB8TS6WWQAxbT0Tu9b9cDHkg.line);
			if (!(LOC7)) goto LA8;
			LOC7 = (((NI16)(current0.col - gtrackpos_MB8TS6WWQAxbT0Tu9b9cDHkg.col) > 0? ((NI16)(current0.col - gtrackpos_MB8TS6WWQAxbT0Tu9b9cDHkg.col)) : -((NI16)(current0.col - gtrackpos_MB8TS6WWQAxbT0Tu9b9cDHkg.col))) < ((NI16) 4));
			LA8: ;
			if (!LOC7) goto LA9;
			result0 = ((Tcheckpointresult_mp7otVupbkudrLwM0IFcHg) 2);
			goto BeforeRet;
		}
		LA9: ;
		{
			if (!(gtrackpos_MB8TS6WWQAxbT0Tu9b9cDHkg.line <= current0.line)) goto LA13;
			result0 = ((Tcheckpointresult_mp7otVupbkudrLwM0IFcHg) 1);
			goto BeforeRet;
		}
		LA13: ;
	}
	LA3: ;
	}BeforeRet: ;
	return result0;
}

static N_INLINE(NI, safelen_CdME9baJhvveuPEDZE9bXoxAsigmatch)(Tnode_bROa11lyF5vxEN9aYNbHmhw* n0) {
	NI result0;
	result0 = (NI)0;
	{
		NIM_BOOL LOC3;
		LOC3 = (NIM_BOOL)0;
		LOC3 = ((*n0).kind >= ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 0) && (*n0).kind <= ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 23));
		if (LOC3) goto LA4;
		LOC3 = ((*n0).kindU.S6.sons == 0);
		LA4: ;
		if (!LOC3) goto LA5;
		result0 = ((NI) 0);
	}
	goto LA1;
	LA5: ;
	{
		result0 = ((*n0).kindU.S6.sons ? (*n0).kindU.S6.sons->Sup.len : 0);
	}
	LA1: ;
	return result0;
}

N_NIMCALL(Tnode_bROa11lyF5vxEN9aYNbHmhw*, findclosestdot_9aBm2OiqFaJoTlXkYMqFfYQ)(Tnode_bROa11lyF5vxEN9aYNbHmhw* n0) {
	Tnode_bROa11lyF5vxEN9aYNbHmhw* result0;
{	result0 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
	{
		NIM_BOOL LOC3;
		Tcheckpointresult_mp7otVupbkudrLwM0IFcHg LOC5;
		LOC3 = (NIM_BOOL)0;
		LOC3 = ((*n0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 45));
		if (!(LOC3)) goto LA4;
		LOC5 = (Tcheckpointresult_mp7otVupbkudrLwM0IFcHg)0;
		LOC5 = incheckpoint_GA4ibfeQx1uKQi9bIH2QX4w((*n0).info);
		LOC3 = (LOC5 == ((Tcheckpointresult_mp7otVupbkudrLwM0IFcHg) 2));
		LA4: ;
		if (!LOC3) goto LA6;
		result0 = n0;
	}
	goto LA1;
	LA6: ;
	{
		{
			NI i_QcdIt5lFGbuN9crCcvJBT9cw;
			NI HEX3Atmp_dsPv55aMmx5pZFiSPD4C9cA;
			NI LOC10;
			NI res_5ZdcmCDbZy0ND4vL6QUDXA;
			i_QcdIt5lFGbuN9crCcvJBT9cw = (NI)0;
			HEX3Atmp_dsPv55aMmx5pZFiSPD4C9cA = (NI)0;
			LOC10 = (NI)0;
			LOC10 = safelen_CdME9baJhvveuPEDZE9bXoxAsigmatch(n0);
			HEX3Atmp_dsPv55aMmx5pZFiSPD4C9cA = (LOC10 - 1);
			res_5ZdcmCDbZy0ND4vL6QUDXA = ((NI) 0);
			{
				while (1) {
					if (!(res_5ZdcmCDbZy0ND4vL6QUDXA <= HEX3Atmp_dsPv55aMmx5pZFiSPD4C9cA)) goto LA12;
					i_QcdIt5lFGbuN9crCcvJBT9cw = res_5ZdcmCDbZy0ND4vL6QUDXA;
					result0 = findclosestdot_9aBm2OiqFaJoTlXkYMqFfYQ((*n0).kindU.S6.sons->data[i_QcdIt5lFGbuN9crCcvJBT9cw]);
					{
						if (!!((result0 == NIM_NIL))) goto LA15;
						goto BeforeRet;
					}
					LA15: ;
					res_5ZdcmCDbZy0ND4vL6QUDXA += ((NI) 1);
				} LA12: ;
			}
		}
	}
	LA1: ;
	}BeforeRet: ;
	return result0;
}

static N_INLINE(void, pushSafePoint)(TSafePoint* s0) {
	(*s0).hasRaiseAction = NIM_FALSE;
	(*s0).prev = exchandler_rqLlY5bs9atDw2OXYqJEn5g;
	exchandler_rqLlY5bs9atDw2OXYqJEn5g = s0;
}

static N_INLINE(void, popSafePoint)(void) {
	exchandler_rqLlY5bs9atDw2OXYqJEn5g = (*exchandler_rqLlY5bs9atDw2OXYqJEn5g).prev;
}

static N_INLINE(Exception*, getCurrentException)(void) {
	Exception* result0;
	result0 = (Exception*)0;
	result0 = currexception_9bVPeDJlYTi9bQApZpfH8wjg;
	return result0;
}

static N_INLINE(void, incref_9cAA5YuQAAC3MVbnGeV86swsystem)(Cell_1zcF9cV8XIAtbN8h5HRUB8g* c0) {
	(*c0).refcount = (NI)((NU64)((*c0).refcount) + (NU64)(((NI) 8)));
}

static N_INLINE(Cell_1zcF9cV8XIAtbN8h5HRUB8g*, usrtocell_yB9aH5WIlwd0xkYrcdPeXrQsystem)(void* usr0) {
	Cell_1zcF9cV8XIAtbN8h5HRUB8g* result0;
	result0 = (Cell_1zcF9cV8XIAtbN8h5HRUB8g*)0;
	result0 = ((Cell_1zcF9cV8XIAtbN8h5HRUB8g*) ((NI)((NU64)(((NI) (usr0))) - (NU64)(((NI)sizeof(Cell_1zcF9cV8XIAtbN8h5HRUB8g))))));
	return result0;
}

static N_INLINE(void, rtladdzct_MV4BBk6J1qu70IbBxwEn4w_2system)(Cell_1zcF9cV8XIAtbN8h5HRUB8g* c0) {
	addzct_fCDI7oO1NNVXXURtxSzsRw((&gch_IcYaEuuWivYAS86vFMTS3Q.zct), c0);
}

static N_INLINE(void, decref_MV4BBk6J1qu70IbBxwEn4wsystem)(Cell_1zcF9cV8XIAtbN8h5HRUB8g* c0) {
	{
		(*c0).refcount -= ((NI) 8);
		if (!((NU64)((*c0).refcount) < (NU64)(((NI) 8)))) goto LA3;
		rtladdzct_MV4BBk6J1qu70IbBxwEn4w_2system(c0);
	}
	LA3: ;
}

static N_INLINE(void, asgnRef)(void** dest0, void* src0) {
	{
		Cell_1zcF9cV8XIAtbN8h5HRUB8g* LOC5;
		if (!!((src0 == NIM_NIL))) goto LA3;
		LOC5 = (Cell_1zcF9cV8XIAtbN8h5HRUB8g*)0;
		LOC5 = usrtocell_yB9aH5WIlwd0xkYrcdPeXrQsystem(src0);
		incref_9cAA5YuQAAC3MVbnGeV86swsystem(LOC5);
	}
	LA3: ;
	{
		Cell_1zcF9cV8XIAtbN8h5HRUB8g* LOC10;
		if (!!(((*dest0) == NIM_NIL))) goto LA8;
		LOC10 = (Cell_1zcF9cV8XIAtbN8h5HRUB8g*)0;
		LOC10 = usrtocell_yB9aH5WIlwd0xkYrcdPeXrQsystem((*dest0));
		decref_MV4BBk6J1qu70IbBxwEn4wsystem(LOC10);
	}
	LA8: ;
	(*dest0) = src0;
}

static N_INLINE(void, popCurrentException)(void) {
	asgnRef((void**) (&currexception_9bVPeDJlYTi9bQApZpfH8wjg), NIM_NIL);
}

N_NIMCALL(Tnode_bROa11lyF5vxEN9aYNbHmhw*, safesemexpr_74xCvYZL9b9cKsQyQ9a9aX3Oqw)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tnode_bROa11lyF5vxEN9aYNbHmhw* n0) {
	Tnode_bROa11lyF5vxEN9aYNbHmhw* volatile result0;
	TSafePoint T_EV5hHJmjIY9cla9b9be7fSVJQ_5;
	result0 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
	pushSafePoint(&T_EV5hHJmjIY9cla9b9be7fSVJQ_5);
	T_EV5hHJmjIY9cla9b9be7fSVJQ_5.status = setjmp(T_EV5hHJmjIY9cla9b9be7fSVJQ_5.context);
	if (T_EV5hHJmjIY9cla9b9be7fSVJQ_5.status == 0) {
		result0 = (*c0).semexpr(c0, n0, 0);
		popSafePoint();
	}
	else {
		popSafePoint();
		if (isObj(getCurrentException()->Sup.m_type, (&NTI_YAlYTV9cm9c08Uxrh3d9aczDg))) {
			T_EV5hHJmjIY9cla9b9be7fSVJQ_5.status = 0;
			result0 = emptynode_69ccLGuQ2mITw7zylZYtWcA;
			popCurrentException();
		}
	}
	if (T_EV5hHJmjIY9cla9b9be7fSVJQ_5.status != 0) reraiseException();
	return result0;
}

static N_INLINE(NIM_BOOL, filtersym_XtYBweJqs2OpFBFVtkucbQsigmatch)(Tsym_AXG7xcvKqaxY6koRX1xkCw* s0) {
	NIM_BOOL result0;
	result0 = (NIM_BOOL)0;
	result0 = !(((*s0).kind == ((Tsymkind_cNCW9acsSznmEccl1fgQwkw) 6)));
	return result0;
}

static N_INLINE(void, copymem_E1xtACub5WcDa3vbrIXbwgsystem)(void* dest0, void* source0, NI size0) {
	void* LOC1;
	LOC1 = (void*)0;
	LOC1 = memcpy(dest0, source0, ((size_t) (size0)));
}

static N_INLINE(void, appendString)(NimStringDesc* dest0, NimStringDesc* src0) {
	copymem_E1xtACub5WcDa3vbrIXbwgsystem(((void*) ((&(*dest0).data[((*dest0).Sup.len)- 0]))), ((void*) ((*src0).data)), ((NI) ((NI)((*src0).Sup.len + ((NI) 1)))));
	(*dest0).Sup.len += (*src0).Sup.len;
}

N_NIMCALL(NimStringDesc*, HEX24_d9cgTr4UmnyMXo9cuHiSWz3Q)(Suggest_tFc84OXhHlhBIifsMtOJew* suggest0) {
	NimStringDesc* result0;
	result0 = (NimStringDesc*)0;
	result0 = HEX24_9cJCKitIoTmipZ9bq1gB25Vw((*suggest0).section);
	result0 = addChar(result0, 9);
	{
		NimStringDesc* LOC17;
		NimStringDesc* LOC18;
		NimStringDesc* LOC19;
		if (!((*suggest0).section == ((Idecmd_1Ced39bl5eePmZ1PKMPXigQ) 8))) goto LA3;
		{
			NIM_BOOL LOC7;
			LOC7 = (NIM_BOOL)0;
			LOC7 = ((*suggest0).symkind == ((Tsymkind_cNCW9acsSznmEccl1fgQwkw) 8));
			if (!(LOC7)) goto LA8;
			LOC7 = (*suggest0).isglobal;
			LA8: ;
			if (!LOC7) goto LA9;
			result0 = resizeString(result0, 11);
appendString(result0, ((NimStringDesc*) &T_EV5hHJmjIY9cla9b9be7fSVJQ_7));
		}
		goto LA5;
		LA9: ;
		{
			NIM_BOOL LOC12;
			LOC12 = (NIM_BOOL)0;
			LOC12 = ((*suggest0).symkind == ((Tsymkind_cNCW9acsSznmEccl1fgQwkw) 9));
			if (!(LOC12)) goto LA13;
			LOC12 = (*suggest0).isglobal;
			LA13: ;
			if (!LOC12) goto LA14;
			result0 = resizeString(result0, 11);
appendString(result0, ((NimStringDesc*) &T_EV5hHJmjIY9cla9b9be7fSVJQ_8));
		}
		goto LA5;
		LA14: ;
		{
			result0 = resizeString(result0, reprEnum((NI)(*suggest0).symkind, (&NTI_cNCW9acsSznmEccl1fgQwkw))->Sup.len + 0);
appendString(result0, reprEnum((NI)(*suggest0).symkind, (&NTI_cNCW9acsSznmEccl1fgQwkw)));
		}
		LA5: ;
		result0 = addChar(result0, 9);
		LOC17 = (NimStringDesc*)0;
		LOC17 = nimIntToStr((*suggest0).line);
		result0 = resizeString(result0, LOC17->Sup.len + 0);
appendString(result0, LOC17);
		result0 = addChar(result0, 9);
		LOC18 = (NimStringDesc*)0;
		LOC18 = nimIntToStr((*suggest0).column);
		result0 = resizeString(result0, LOC18->Sup.len + 0);
appendString(result0, LOC18);
		result0 = addChar(result0, 9);
		LOC19 = (NimStringDesc*)0;
		LOC19 = nimIntToStr((*suggest0).tokenlen);
		result0 = resizeString(result0, LOC19->Sup.len + 0);
appendString(result0, LOC19);
	}
	goto LA1;
	LA3: ;
	{
		NimStringDesc* LOC21;
		NimStringDesc* LOC22;
		NimStringDesc* LOC23;
		NimStringDesc* LOC24;
		result0 = resizeString(result0, reprEnum((NI)(*suggest0).symkind, (&NTI_cNCW9acsSznmEccl1fgQwkw))->Sup.len + 0);
appendString(result0, reprEnum((NI)(*suggest0).symkind, (&NTI_cNCW9acsSznmEccl1fgQwkw)));
		result0 = addChar(result0, 9);
		LOC21 = (NimStringDesc*)0;
		LOC21 = nsuJoinSep((*suggest0).qualifiedpath->data, (*suggest0).qualifiedpath->Sup.len, ((NimStringDesc*) &T_EV5hHJmjIY9cla9b9be7fSVJQ_9));
		result0 = resizeString(result0, LOC21->Sup.len + 0);
appendString(result0, LOC21);
		result0 = addChar(result0, 9);
		result0 = resizeString(result0, (*suggest0).forth->Sup.len + 0);
appendString(result0, (*suggest0).forth);
		result0 = addChar(result0, 9);
		result0 = resizeString(result0, (*suggest0).filepath->Sup.len + 0);
appendString(result0, (*suggest0).filepath);
		result0 = addChar(result0, 9);
		LOC22 = (NimStringDesc*)0;
		LOC22 = nimIntToStr((*suggest0).line);
		result0 = resizeString(result0, LOC22->Sup.len + 0);
appendString(result0, LOC22);
		result0 = addChar(result0, 9);
		LOC23 = (NimStringDesc*)0;
		LOC23 = nimIntToStr((*suggest0).column);
		result0 = resizeString(result0, LOC23->Sup.len + 0);
appendString(result0, LOC23);
		result0 = addChar(result0, 9);
		LOC24 = (NimStringDesc*)0;
		LOC24 = nsuEscape((*suggest0).doc, ((NimStringDesc*) &T_EV5hHJmjIY9cla9b9be7fSVJQ_10), ((NimStringDesc*) &T_EV5hHJmjIY9cla9b9be7fSVJQ_10));
		result0 = resizeString(result0, LOC24->Sup.len + 0);
appendString(result0, LOC24);
		{
			NimStringDesc* LOC29;
			if (!(suggestversion_yLEg4sXqoMAZlVgI47cCqw == ((NI) 2))) goto LA27;
			result0 = addChar(result0, 9);
			LOC29 = (NimStringDesc*)0;
			LOC29 = nimIntToStr(((NI) ((*suggest0).quality)));
			result0 = resizeString(result0, LOC29->Sup.len + 0);
appendString(result0, LOC29);
		}
		LA27: ;
	}
	LA1: ;
	return result0;
}

N_NIMCALL(void, suggestresult_XfzKoO09bw9cbOe5pnn9bxngg)(Suggest_tFc84OXhHlhBIifsMtOJew* s0) {
	{
		if (!!((suggestionresulthook_eFlaOR5uCOtsxg0ev4zSVw.ClPrc == 0))) goto LA3;
		suggestionresulthook_eFlaOR5uCOtsxg0ev4zSVw.ClEnv? suggestionresulthook_eFlaOR5uCOtsxg0ev4zSVw.ClPrc(s0, suggestionresulthook_eFlaOR5uCOtsxg0ev4zSVw.ClEnv):((T_EV5hHJmjIY9cla9b9be7fSVJQ_6)(suggestionresulthook_eFlaOR5uCOtsxg0ev4zSVw.ClPrc))(s0);
	}
	goto LA1;
	LA3: ;
	{
		NimStringDesc* LOC6;
		LOC6 = (NimStringDesc*)0;
		LOC6 = HEX24_d9cgTr4UmnyMXo9cuHiSWz3Q(s0);
		suggestwriteln_tRbCZ4fGDe9a36bXIedwnwQ(LOC6);
	}
	LA1: ;
}

static N_INLINE(NI, tolinenumber_Vr9aXuUyvBQDK4X2879cHuGgsigmatch)(Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw info0) {
	NI result0;
	result0 = (NI)0;
	result0 = ((NI) (info0.line));
	return result0;
}

static N_INLINE(NI, tocolumn_Vr9aXuUyvBQDK4X2879cHuGg_2sigmatch)(Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw info0) {
	NI result0;
	result0 = (NI)0;
	result0 = ((NI) (info0.col));
	return result0;
}

static N_INLINE(void, nimGCunrefNoCycle)(void* p0) {
	Cell_1zcF9cV8XIAtbN8h5HRUB8g* c0;
	c0 = usrtocell_yB9aH5WIlwd0xkYrcdPeXrQsystem(p0);
	{
		(*c0).refcount -= ((NI) 8);
		if (!((NU64)((*c0).refcount) < (NU64)(((NI) 8)))) goto LA3;
		rtladdzct_MV4BBk6J1qu70IbBxwEn4w_2system(c0);
	}
	LA3: ;
}

N_NIMCALL(void, symtosuggest_tOyawPUH9cST0l28alTZiyQ)(Tsym_AXG7xcvKqaxY6koRX1xkCw* s0, NIM_BOOL islocal0, NimStringDesc* section0, Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw li0, NI quality0, Suggest_tFc84OXhHlhBIifsMtOJew* Result) {
	(*Result).section = parseidecmd_TQvrSbYJ8il5GbXHllB0rw(section0);
	(*Result).quality = quality0;
	(*Result).isglobal = (((*s0).flags &(1U<<((NU)(((Tsymflag_K9ay6LWMat9bUiT9bIbMxpDHw) 3))&31U)))!=0);
	(*Result).tokenlen = ((*(*s0).name).s ? (*(*s0).name).s->Sup.len : 0);
	{
		if (!((gglobaloptions_j042VVDC9cT5ENYoXnmhhVg &((NU64)1<<((NU)(((Tglobaloption_RAfAEZqjnKMDumgyKKc1qw) 30))&63U)))!=0)) goto LA3;
		(*Result).symkind = (*s0).kind;
		unsureAsgnRef((void**) (&(*Result).filepath), tofullpath_7s19cb7WBgztz9aqEBzwwuqA(li0.fileindex));
		(*Result).line = tolinenumber_Vr9aXuUyvBQDK4X2879cHuGgsigmatch(li0);
		(*Result).column = tocolumn_Vr9aXuUyvBQDK4X2879cHuGg_2sigmatch(li0);
	}
	goto LA1;
	LA3: ;
	{
		NimStringDesc* LOC26;
		(*Result).symkind = (*s0).kind;
		unsureAsgnRef((void**) (&(*Result).qualifiedpath), (TY_sM4lkSb7zS6F7OVMvW9cffQ*) newSeq((&NTI_sM4lkSb7zS6F7OVMvW9cffQ), 0));
		{
			NIM_BOOL LOC8;
			Tsym_AXG7xcvKqaxY6koRX1xkCw* ow0;
			LOC8 = (NIM_BOOL)0;
			LOC8 = !(islocal0);
			if (!(LOC8)) goto LA9;
			LOC8 = !(((*s0).kind == ((Tsymkind_cNCW9acsSznmEccl1fgQwkw) 6)));
			LA9: ;
			if (!LOC8) goto LA10;
			ow0 = (*s0).owner;
			{
				NIM_BOOL LOC14;
				NIM_BOOL LOC15;
				Tsym_AXG7xcvKqaxY6koRX1xkCw* ow20;
				NimStringDesc* LOC20;
				LOC14 = (NIM_BOOL)0;
				LOC15 = (NIM_BOOL)0;
				LOC15 = !((ow0 == NIM_NIL));
				if (!(LOC15)) goto LA16;
				LOC15 = !(((*ow0).kind == ((Tsymkind_cNCW9acsSznmEccl1fgQwkw) 6)));
				LA16: ;
				LOC14 = LOC15;
				if (!(LOC14)) goto LA17;
				LOC14 = !(((*ow0).owner == NIM_NIL));
				LA17: ;
				if (!LOC14) goto LA18;
				ow20 = (*ow0).owner;
				(*Result).qualifiedpath = (TY_sM4lkSb7zS6F7OVMvW9cffQ*) incrSeqV2(&((*Result).qualifiedpath)->Sup, sizeof(NimStringDesc*));
				LOC20 = (NimStringDesc*)0;
				LOC20 = (*Result).qualifiedpath->data[(*Result).qualifiedpath->Sup.len]; (*Result).qualifiedpath->data[(*Result).qualifiedpath->Sup.len] = copyStringRC1((*(*ow20).name).s);
				if (LOC20) nimGCunrefNoCycle(LOC20);
				++(*Result).qualifiedpath->Sup.len;
			}
			LA18: ;
			{
				NimStringDesc* LOC25;
				if (!!((ow0 == NIM_NIL))) goto LA23;
				(*Result).qualifiedpath = (TY_sM4lkSb7zS6F7OVMvW9cffQ*) incrSeqV2(&((*Result).qualifiedpath)->Sup, sizeof(NimStringDesc*));
				LOC25 = (NimStringDesc*)0;
				LOC25 = (*Result).qualifiedpath->data[(*Result).qualifiedpath->Sup.len]; (*Result).qualifiedpath->data[(*Result).qualifiedpath->Sup.len] = copyStringRC1((*(*ow0).name).s);
				if (LOC25) nimGCunrefNoCycle(LOC25);
				++(*Result).qualifiedpath->Sup.len;
			}
			LA23: ;
		}
		LA10: ;
		(*Result).qualifiedpath = (TY_sM4lkSb7zS6F7OVMvW9cffQ*) incrSeqV2(&((*Result).qualifiedpath)->Sup, sizeof(NimStringDesc*));
		LOC26 = (NimStringDesc*)0;
		LOC26 = (*Result).qualifiedpath->data[(*Result).qualifiedpath->Sup.len]; (*Result).qualifiedpath->data[(*Result).qualifiedpath->Sup.len] = copyStringRC1((*(*s0).name).s);
		if (LOC26) nimGCunrefNoCycle(LOC26);
		++(*Result).qualifiedpath->Sup.len;
		{
			if (!!(((*s0).typ == NIM_NIL))) goto LA29;
			unsureAsgnRef((void**) (&(*Result).forth), typetostring_iUZlBdvGqNPVN17wd9aVBNw((*s0).typ, ((Tprefereddesc_tnd4qt9c4xddV8oKV5zyusw) 0)));
		}
		goto LA27;
		LA29: ;
		{
			unsureAsgnRef((void**) (&(*Result).forth), copyString(((NimStringDesc*) &T_EV5hHJmjIY9cla9b9be7fSVJQ_11)));
		}
		LA27: ;
		unsureAsgnRef((void**) (&(*Result).filepath), tofullpath_7s19cb7WBgztz9aqEBzwwuqA(li0.fileindex));
		(*Result).line = tolinenumber_Vr9aXuUyvBQDK4X2879cHuGgsigmatch(li0);
		(*Result).column = tocolumn_Vr9aXuUyvBQDK4X2879cHuGg_2sigmatch(li0);
		unsureAsgnRef((void**) (&(*Result).doc), extractdoccomment_gqZQN2lJPlhAvwYOW3Xf8Q(s0, NIM_NIL));
	}
	LA1: ;
}

N_NIMCALL(void, symtosuggest_FFMkcTntV5b53OSyNeVJPQ)(Tsym_AXG7xcvKqaxY6koRX1xkCw* s0, NIM_BOOL islocal0, NimStringDesc* section0, NI quality0, Suggest_tFc84OXhHlhBIifsMtOJew* Result) {
	chckNil((void*)Result);
	genericReset((void*)Result, (&NTI_tFc84OXhHlhBIifsMtOJew));
	symtosuggest_tOyawPUH9cST0l28alTZiyQ(s0, islocal0, section0, (*s0).info, quality0, Result);
}

N_NIMCALL(void, suggesteverything_sZLTug9chAc5gilY9bLWuoAw_2)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tnode_bROa11lyF5vxEN9aYNbHmhw* n0, NI* outputs0) {
	NIM_BOOL islocal0;
	islocal0 = NIM_TRUE;
	{
		Tscope_1cQRXW6aAknk7ywAwjH3nw* scope_LzlaCtag9bQbr18bhdeafLg;
		Tscope_1cQRXW6aAknk7ywAwjH3nw* HEX3Atmp_HXvGj3SNCsHN0rZwrb7i6A;
		Tscope_1cQRXW6aAknk7ywAwjH3nw* current_Ca9cjbGiKOsv73WpqOwLH7Q;
		scope_LzlaCtag9bQbr18bhdeafLg = (Tscope_1cQRXW6aAknk7ywAwjH3nw*)0;
		HEX3Atmp_HXvGj3SNCsHN0rZwrb7i6A = (Tscope_1cQRXW6aAknk7ywAwjH3nw*)0;
		HEX3Atmp_HXvGj3SNCsHN0rZwrb7i6A = (*c0).currentscope;
		current_Ca9cjbGiKOsv73WpqOwLH7Q = HEX3Atmp_HXvGj3SNCsHN0rZwrb7i6A;
		{
			while (1) {
				if (!!((current_Ca9cjbGiKOsv73WpqOwLH7Q == NIM_NIL))) goto LA3;
				scope_LzlaCtag9bQbr18bhdeafLg = current_Ca9cjbGiKOsv73WpqOwLH7Q;
				{
					if (!(scope_LzlaCtag9bQbr18bhdeafLg == (*c0).toplevelscope)) goto LA6;
					islocal0 = NIM_FALSE;
				}
				LA6: ;
				{
					Tsym_AXG7xcvKqaxY6koRX1xkCw* it_byNyeVaIV9aznEgn4g0RNzA;
					Tstrtable_f07aOS3dr28kGa5wcE29aFA HEX3Atmp_HXvGj3SNCsHN0rZwrb7i6A_2;
					Ttabiter_VYF5VQsIYEVaBL0fKZJkbg it_byNyeVaIV9aznEgn4g0RNzA_2;
					Tsym_AXG7xcvKqaxY6koRX1xkCw* s_3F9b2WDu419cPNuv9ag3AtOCw;
					it_byNyeVaIV9aznEgn4g0RNzA = (Tsym_AXG7xcvKqaxY6koRX1xkCw*)0;
					memset((void*)(&HEX3Atmp_HXvGj3SNCsHN0rZwrb7i6A_2), 0, sizeof(HEX3Atmp_HXvGj3SNCsHN0rZwrb7i6A_2));
					HEX3Atmp_HXvGj3SNCsHN0rZwrb7i6A_2.counter = (*scope_LzlaCtag9bQbr18bhdeafLg).symbols.counter;
					HEX3Atmp_HXvGj3SNCsHN0rZwrb7i6A_2.data = (*scope_LzlaCtag9bQbr18bhdeafLg).symbols.data;
					memset((void*)(&it_byNyeVaIV9aznEgn4g0RNzA_2), 0, sizeof(it_byNyeVaIV9aznEgn4g0RNzA_2));
					s_3F9b2WDu419cPNuv9ag3AtOCw = inittabiter_4ygtuv45J5xOJG1H4GUF9bA((&it_byNyeVaIV9aznEgn4g0RNzA_2), HEX3Atmp_HXvGj3SNCsHN0rZwrb7i6A_2);
					{
						while (1) {
							if (!!((s_3F9b2WDu419cPNuv9ag3AtOCw == NIM_NIL))) goto LA10;
							it_byNyeVaIV9aznEgn4g0RNzA = s_3F9b2WDu419cPNuv9ag3AtOCw;
							{
								NIM_BOOL LOC13;
								NimStringDesc* LOC16;
								Suggest_tFc84OXhHlhBIifsMtOJew LOC17;
								LOC13 = (NIM_BOOL)0;
								LOC13 = filtersym_XtYBweJqs2OpFBFVtkucbQsigmatch(it_byNyeVaIV9aznEgn4g0RNzA);
								if (!LOC13) goto LA14;
								LOC16 = (NimStringDesc*)0;
								LOC16 = HEX24_9cJCKitIoTmipZ9bq1gB25Vw(((Idecmd_1Ced39bl5eePmZ1PKMPXigQ) 1));
								memset((void*)(&LOC17), 0, sizeof(LOC17));
								symtosuggest_FFMkcTntV5b53OSyNeVJPQ(it_byNyeVaIV9aznEgn4g0RNzA, islocal0, LOC16, ((NI) 0), (&LOC17));
								suggestresult_XfzKoO09bw9cbOe5pnn9bxngg((&LOC17));
								(*outputs0) += ((NI) 1);
							}
							LA14: ;
							s_3F9b2WDu419cPNuv9ag3AtOCw = nextiter_MtRRPpsZix0WHVpZVShg0A((&it_byNyeVaIV9aznEgn4g0RNzA_2), HEX3Atmp_HXvGj3SNCsHN0rZwrb7i6A_2);
						} LA10: ;
					}
				}
				{
					if (!(scope_LzlaCtag9bQbr18bhdeafLg == (*c0).toplevelscope)) goto LA20;
					goto LA1;
				}
				LA20: ;
				current_Ca9cjbGiKOsv73WpqOwLH7Q = (*current_Ca9cjbGiKOsv73WpqOwLH7Q).parent;
			} LA3: ;
		}
	} LA1: ;
}

static N_INLINE(NIM_BOOL, fieldvisible_7dkMugvu9c7eUJBaXG7Qzowsigmatch)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tsym_AXG7xcvKqaxY6koRX1xkCw* f0) {
	NIM_BOOL result0;
	NI fmoduleid0;
	Tsym_AXG7xcvKqaxY6koRX1xkCw* LOC1;
	NIM_BOOL LOC2;
	result0 = (NIM_BOOL)0;
	LOC1 = (Tsym_AXG7xcvKqaxY6koRX1xkCw*)0;
	LOC1 = getmodule_0lPlu1uOok1rRK50z1V70A(f0);
	fmoduleid0 = (*LOC1).Sup.id;
	LOC2 = (NIM_BOOL)0;
	LOC2 = (((*f0).flags &(1U<<((NU)(((Tsymflag_K9ay6LWMat9bUiT9bIbMxpDHw) 1))&31U)))!=0);
	if (LOC2) goto LA3;
	LOC2 = (fmoduleid0 == (*(*c0).module).Sup.id);
	LA3: ;
	result0 = LOC2;
	{
		Tsym_AXG7xcvKqaxY6koRX1xkCw* module_W8Ke1hI9b9bLBFpzkxUtWOZQ;
		TY_sksVpmPRIkNR9axiwtD1Guw* HEX3Atmp_Sfbv4bzOhDXOqKL9aOxiT1g;
		NI i_npzQ8UQv9cbzFxOCk5ZY7Hw;
		NI L_KCapER9aqnRg2ofs0G3tJyQ;
		module_W8Ke1hI9b9bLBFpzkxUtWOZQ = (Tsym_AXG7xcvKqaxY6koRX1xkCw*)0;
		HEX3Atmp_Sfbv4bzOhDXOqKL9aOxiT1g = (TY_sksVpmPRIkNR9axiwtD1Guw*)0;
		HEX3Atmp_Sfbv4bzOhDXOqKL9aOxiT1g = (*c0).friendmodules;
		i_npzQ8UQv9cbzFxOCk5ZY7Hw = ((NI) 0);
		L_KCapER9aqnRg2ofs0G3tJyQ = (HEX3Atmp_Sfbv4bzOhDXOqKL9aOxiT1g ? HEX3Atmp_Sfbv4bzOhDXOqKL9aOxiT1g->Sup.len : 0);
		{
			while (1) {
				if (!(i_npzQ8UQv9cbzFxOCk5ZY7Hw < L_KCapER9aqnRg2ofs0G3tJyQ)) goto LA6;
				module_W8Ke1hI9b9bLBFpzkxUtWOZQ = HEX3Atmp_Sfbv4bzOhDXOqKL9aOxiT1g->data[i_npzQ8UQv9cbzFxOCk5ZY7Hw];
				{
					if (!(fmoduleid0 == (*module_W8Ke1hI9b9bLBFpzkxUtWOZQ).Sup.id)) goto LA9;
					result0 = NIM_TRUE;
					goto LA4;
				}
				LA9: ;
				i_npzQ8UQv9cbzFxOCk5ZY7Hw += ((NI) 1);
			} LA6: ;
		}
	} LA4: ;
	return result0;
}

N_NIMCALL(void, suggestfield_JoTXekhy9a4BpEitLZpiC8Q)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tsym_AXG7xcvKqaxY6koRX1xkCw* s0, NI* outputs0) {
	{
		NIM_BOOL LOC3;
		NimStringDesc* LOC7;
		Suggest_tFc84OXhHlhBIifsMtOJew LOC8;
		LOC3 = (NIM_BOOL)0;
		LOC3 = filtersym_XtYBweJqs2OpFBFVtkucbQsigmatch(s0);
		if (!(LOC3)) goto LA4;
		LOC3 = fieldvisible_7dkMugvu9c7eUJBaXG7Qzowsigmatch(c0, s0);
		LA4: ;
		if (!LOC3) goto LA5;
		LOC7 = (NimStringDesc*)0;
		LOC7 = HEX24_9cJCKitIoTmipZ9bq1gB25Vw(((Idecmd_1Ced39bl5eePmZ1PKMPXigQ) 1));
		memset((void*)(&LOC8), 0, sizeof(LOC8));
		symtosuggest_FFMkcTntV5b53OSyNeVJPQ(s0, NIM_TRUE, LOC7, ((NI) 100), (&LOC8));
		suggestresult_XfzKoO09bw9cbOe5pnn9bxngg((&LOC8));
		(*outputs0) += ((NI) 1);
	}
	LA5: ;
}

N_NIMCALL(void, suggestsymlist_xnuyYG9cU5DIguyZ0JEF9cqg)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tnode_bROa11lyF5vxEN9aYNbHmhw* list0, NI* outputs0) {
	{
		NI i_R9b7gHzqZqeW5ijFQOar9aNQ;
		NI HEX3Atmp_5E8QEcG89au3u4tN42OVhCA;
		NI LOC2;
		NI res_MmMtSfhAcMBin3w1dztJgw;
		i_R9b7gHzqZqeW5ijFQOar9aNQ = (NI)0;
		HEX3Atmp_5E8QEcG89au3u4tN42OVhCA = (NI)0;
		LOC2 = (NI)0;
		LOC2 = sonslen_qPWPHw7WgJeEVYUdcaRIig(list0);
		HEX3Atmp_5E8QEcG89au3u4tN42OVhCA = (NI)(LOC2 - ((NI) 1));
		res_MmMtSfhAcMBin3w1dztJgw = ((NI) 0);
		{
			while (1) {
				if (!(res_MmMtSfhAcMBin3w1dztJgw <= HEX3Atmp_5E8QEcG89au3u4tN42OVhCA)) goto LA4;
				i_R9b7gHzqZqeW5ijFQOar9aNQ = res_MmMtSfhAcMBin3w1dztJgw;
				{
					if (!((*(*list0).kindU.S6.sons->data[i_R9b7gHzqZqeW5ijFQOar9aNQ]).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 3))) goto LA7;
					suggestfield_JoTXekhy9a4BpEitLZpiC8Q(c0, (*(*list0).kindU.S6.sons->data[i_R9b7gHzqZqeW5ijFQOar9aNQ]).kindU.S4.sym, outputs0);
				}
				LA7: ;
				res_MmMtSfhAcMBin3w1dztJgw += ((NI) 1);
			} LA4: ;
		}
	}
}

static N_INLINE(void, asgnRefNoCycle)(void** dest0, void* src0) {
	{
		Cell_1zcF9cV8XIAtbN8h5HRUB8g* c0;
		if (!!((src0 == NIM_NIL))) goto LA3;
		c0 = usrtocell_yB9aH5WIlwd0xkYrcdPeXrQsystem(src0);
		(*c0).refcount += ((NI) 8);
	}
	LA3: ;
	{
		Cell_1zcF9cV8XIAtbN8h5HRUB8g* c0;
		if (!!(((*dest0) == NIM_NIL))) goto LA7;
		c0 = usrtocell_yB9aH5WIlwd0xkYrcdPeXrQsystem((*dest0));
		{
			(*c0).refcount -= ((NI) 8);
			if (!((NU64)((*c0).refcount) < (NU64)(((NI) 8)))) goto LA11;
			rtladdzct_MV4BBk6J1qu70IbBxwEn4w_2system(c0);
		}
		LA11: ;
	}
	LA7: ;
	(*dest0) = src0;
}

N_NIMCALL(NI, HEX3Aanonymous_JXbbRJfy9awFVSPUsLGBSEQ)(Tsym_AXG7xcvKqaxY6koRX1xkCw* a_sHo1SPMXhnlNg9cx6eI2XrQ, Tsym_AXG7xcvKqaxY6koRX1xkCw* b_anUFsWNzYbFvMxA6JiUCWA) {
	NI result0;
{	result0 = (NI)0;
	result0 = cmp_xEnKsp9cfvO7Do9cTYXo8eJw((*(*a_sHo1SPMXhnlNg9cx6eI2XrQ).name).s, (*(*b_anUFsWNzYbFvMxA6JiUCWA).name).s);
	goto BeforeRet;
	}BeforeRet: ;
	return result0;
}

static N_INLINE(NIM_BOOL, filtersymnoopr_XtYBweJqs2OpFBFVtkucbQ_2sigmatch)(Tsym_AXG7xcvKqaxY6koRX1xkCw* s0) {
	NIM_BOOL result0;
	NIM_BOOL LOC1;
	NIM_BOOL LOC2;
	NIM_BOOL LOC5;
	result0 = (NIM_BOOL)0;
	LOC1 = (NIM_BOOL)0;
	LOC2 = (NIM_BOOL)0;
	LOC2 = !(((*s0).kind == ((Tsymkind_cNCW9acsSznmEccl1fgQwkw) 6)));
	if (!(LOC2)) goto LA3;
	LOC2 = (((NU8)((*(*s0).name).s->data[((NI) 0)])) >= ((NU8)(97)) && ((NU8)((*(*s0).name).s->data[((NI) 0)])) <= ((NU8)(122)) || ((NU8)((*(*s0).name).s->data[((NI) 0)])) >= ((NU8)(65)) && ((NU8)((*(*s0).name).s->data[((NI) 0)])) <= ((NU8)(90)) || ((NU8)((*(*s0).name).s->data[((NI) 0)])) >= ((NU8)(48)) && ((NU8)((*(*s0).name).s->data[((NI) 0)])) <= ((NU8)(57)) || ((NU8)((*(*s0).name).s->data[((NI) 0)])) >= ((NU8)(128)) && ((NU8)((*(*s0).name).s->data[((NI) 0)])) <= ((NU8)(255)));
	LA3: ;
	LOC1 = LOC2;
	if (!(LOC1)) goto LA4;
	LOC5 = (NIM_BOOL)0;
	LOC5 = iskeyword_J8SfzIplItYlZSj2oKWDnA((*s0).name);
	LOC1 = !(LOC5);
	LA4: ;
	result0 = LOC1;
	return result0;
}

static N_INLINE(void, initcandidateaux_4N44pnzycRIQPHhvl7qG9cQsigmatch)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* ctx0, Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* c0, Ttype_LTUWCZolpovw9cWE3JBWSUw* callee0) {
	unsureAsgnRef((void**) (&(*c0).c), ctx0);
	(*c0).exactmatches = ((NI) 0);
	(*c0).subtypematches = ((NI) 0);
	(*c0).convmatches = ((NI) 0);
	(*c0).intconvmatches = ((NI) 0);
	(*c0).genericmatches = ((NI) 0);
	(*c0).state = ((Tcandidatestate_C8RXb59bvbxaTzDOqx49aVVg) 0);
	unsureAsgnRef((void**) (&(*c0).callee), callee0);
	unsureAsgnRef((void**) (&(*c0).call), NIM_NIL);
	(*c0).basetypematch = NIM_FALSE;
	(*c0).genericconverter = NIM_FALSE;
	(*c0).inheritancepenalty = ((NI) 0);
}

N_NIMCALL(void, initcandidate_R0iDmZjaDJEKlSDdgINtVg)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* ctx0, Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* c0, Ttype_LTUWCZolpovw9cWE3JBWSUw* callee0) {
	initcandidateaux_4N44pnzycRIQPHhvl7qG9cQsigmatch(ctx0, c0, callee0);
	unsureAsgnRef((void**) (&(*c0).calleesym), NIM_NIL);
	initidtable_9cUS2oaKn1IFXKjLdglPZHQ((&(*c0).bindings));
}

static N_INLINE(Ttype_LTUWCZolpovw9cWE3JBWSUw*, skipintlit_Wqqd75hh0NzCssCyCNzd9agmagicsys)(Ttype_LTUWCZolpovw9cWE3JBWSUw* t0) {
	Ttype_LTUWCZolpovw9cWE3JBWSUw* result0;
{	result0 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
	{
		if (!!(((*t0).n == NIM_NIL))) goto LA3;
		{
			if (!((IL64(70866960384) &((NU64)1<<((NU)((*t0).kind)&63U)))!=0)) goto LA7;
			result0 = getsystype_dewjtBqyEbcVGQRaQFtDAw((*t0).kind);
			goto BeforeRet;
		}
		LA7: ;
	}
	LA3: ;
	result0 = t0;
	}BeforeRet: ;
	return result0;
}

static N_INLINE(void, put_JoRvap9abGYCKt6dvPFvsFAsigmatch)(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* c0, Ttype_LTUWCZolpovw9cWE3JBWSUw* key0, Ttype_LTUWCZolpovw9cWE3JBWSUw* val0) {
	Tidobj_raN9cHVgzmvaXisezY9aGg9cg* LOC1;
	Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC2;
	TNimObject* LOC3;
	LOC1 = (Tidobj_raN9cHVgzmvaXisezY9aGg9cg*)0;
	LOC1 = &key0->Sup;
	LOC2 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
	LOC2 = skipintlit_Wqqd75hh0NzCssCyCNzd9agmagicsys(val0);
	LOC3 = (TNimObject*)0;
	LOC3 = &LOC2->Sup.Sup;
	idtableput_3gLsywwJ9bZDaf06DfKpYbw((&(*c0).bindings), LOC1, LOC3);
}

static N_INLINE(NI, len_CdME9baJhvveuPEDZE9bXoxAlambdalifting)(Tnode_bROa11lyF5vxEN9aYNbHmhw* n0) {
	NI result0;
	result0 = (NI)0;
	{
		if (!((*n0).kindU.S6.sons == 0)) goto LA3;
		result0 = ((NI) 0);
	}
	goto LA1;
	LA3: ;
	{
		result0 = ((*n0).kindU.S6.sons ? (*n0).kindU.S6.sons->Sup.len : 0);
	}
	LA1: ;
	return result0;
}

N_NIMCALL(NIM_BOOL, shouldskipdistinct_knSo3339cRSN2U4HFxzrY1g)(Tnode_bROa11lyF5vxEN9aYNbHmhw* rules0, Tident_4umxGerWTHGPwUms7Yqu3g* callident0) {
	NIM_BOOL result0;
{	result0 = (NIM_BOOL)0;
	{
		if (!((*rules0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 130))) goto LA3;
		{
			Tnode_bROa11lyF5vxEN9aYNbHmhw* r_ZDQs9cgscmtXqw9c6py7j9bLA;
			r_ZDQs9cgscmtXqw9c6py7j9bLA = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
			{
				NI i_Ei0jYlBZ9cuBxvD9c9cf6FAMg;
				NI HEX3Atmp_IM1UpU9b9cGnT3YUczwylo2g;
				NI LOC7;
				NI res_Qm9a14DiMyauIOpBXYMUzhg;
				i_Ei0jYlBZ9cuBxvD9c9cf6FAMg = (NI)0;
				HEX3Atmp_IM1UpU9b9cGnT3YUczwylo2g = (NI)0;
				LOC7 = (NI)0;
				LOC7 = len_CdME9baJhvveuPEDZE9bXoxAlambdalifting(rules0);
				HEX3Atmp_IM1UpU9b9cGnT3YUczwylo2g = (LOC7 - 1);
				res_Qm9a14DiMyauIOpBXYMUzhg = ((NI) 0);
				{
					while (1) {
						if (!(res_Qm9a14DiMyauIOpBXYMUzhg <= HEX3Atmp_IM1UpU9b9cGnT3YUczwylo2g)) goto LA9;
						i_Ei0jYlBZ9cuBxvD9c9cf6FAMg = res_Qm9a14DiMyauIOpBXYMUzhg;
						r_ZDQs9cgscmtXqw9c6py7j9bLA = (*rules0).kindU.S6.sons->data[i_Ei0jYlBZ9cuBxvD9c9cf6FAMg];
						{
							Tident_4umxGerWTHGPwUms7Yqu3g* LOC12;
							LOC12 = (Tident_4umxGerWTHGPwUms7Yqu3g*)0;
							LOC12 = considerquotedident_bi6H6x9cvavSxJocgYdA9bRw(r_ZDQs9cgscmtXqw9c6py7j9bLA);
							if (!(LOC12 == callident0)) goto LA13;
							result0 = NIM_TRUE;
							goto BeforeRet;
						}
						LA13: ;
						res_Qm9a14DiMyauIOpBXYMUzhg += ((NI) 1);
					} LA9: ;
				}
			}
		}
		result0 = NIM_FALSE;
		goto BeforeRet;
	}
	goto LA1;
	LA3: ;
	{
		{
			Tnode_bROa11lyF5vxEN9aYNbHmhw* r_ZDQs9cgscmtXqw9c6py7j9bLA_2;
			r_ZDQs9cgscmtXqw9c6py7j9bLA_2 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
			{
				NI i_Ei0jYlBZ9cuBxvD9c9cf6FAMg_2;
				NI HEX3Atmp_IM1UpU9b9cGnT3YUczwylo2g_2;
				NI LOC18;
				NI res_Qm9a14DiMyauIOpBXYMUzhg_2;
				i_Ei0jYlBZ9cuBxvD9c9cf6FAMg_2 = (NI)0;
				HEX3Atmp_IM1UpU9b9cGnT3YUczwylo2g_2 = (NI)0;
				LOC18 = (NI)0;
				LOC18 = len_CdME9baJhvveuPEDZE9bXoxAlambdalifting(rules0);
				HEX3Atmp_IM1UpU9b9cGnT3YUczwylo2g_2 = (LOC18 - 1);
				res_Qm9a14DiMyauIOpBXYMUzhg_2 = ((NI) 0);
				{
					while (1) {
						if (!(res_Qm9a14DiMyauIOpBXYMUzhg_2 <= HEX3Atmp_IM1UpU9b9cGnT3YUczwylo2g_2)) goto LA20;
						i_Ei0jYlBZ9cuBxvD9c9cf6FAMg_2 = res_Qm9a14DiMyauIOpBXYMUzhg_2;
						r_ZDQs9cgscmtXqw9c6py7j9bLA_2 = (*rules0).kindU.S6.sons->data[i_Ei0jYlBZ9cuBxvD9c9cf6FAMg_2];
						{
							Tident_4umxGerWTHGPwUms7Yqu3g* LOC23;
							LOC23 = (Tident_4umxGerWTHGPwUms7Yqu3g*)0;
							LOC23 = considerquotedident_bi6H6x9cvavSxJocgYdA9bRw(r_ZDQs9cgscmtXqw9c6py7j9bLA_2);
							if (!(LOC23 == callident0)) goto LA24;
							result0 = NIM_FALSE;
							goto BeforeRet;
						}
						LA24: ;
						res_Qm9a14DiMyauIOpBXYMUzhg_2 += ((NI) 1);
					} LA20: ;
				}
			}
		}
		result0 = NIM_TRUE;
		goto BeforeRet;
	}
	LA1: ;
	}BeforeRet: ;
	return result0;
}

N_NIMCALL(Ttype_LTUWCZolpovw9cWE3JBWSUw*, maybeskipdistinct_b9cb0j2qLR8Vva3Tro7wfEA)(Ttype_LTUWCZolpovw9cWE3JBWSUw* t0, Tsym_AXG7xcvKqaxY6koRX1xkCw* callee0) {
	Ttype_LTUWCZolpovw9cWE3JBWSUw* result0;
	result0 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
	{
		NIM_BOOL LOC3;
		NIM_BOOL LOC4;
		NIM_BOOL LOC5;
		LOC3 = (NIM_BOOL)0;
		LOC4 = (NIM_BOOL)0;
		LOC5 = (NIM_BOOL)0;
		LOC5 = !((t0 == NIM_NIL));
		if (!(LOC5)) goto LA6;
		LOC5 = ((*t0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 13));
		LA6: ;
		LOC4 = LOC5;
		if (!(LOC4)) goto LA7;
		LOC4 = !(((*t0).n == NIM_NIL));
		LA7: ;
		LOC3 = LOC4;
		if (!(LOC3)) goto LA8;
		LOC3 = shouldskipdistinct_knSo3339cRSN2U4HFxzrY1g((*t0).n, (*callee0).name);
		LA8: ;
		if (!LOC3) goto LA9;
		result0 = base_46gPaVDDGhiU69b2oKDJZuA(t0);
	}
	goto LA1;
	LA9: ;
	{
		result0 = t0;
	}
	LA1: ;
	return result0;
}

static N_INLINE(NIM_BOOL, sameenumtypes_8v4PltvnKUFVoINNTE260gsigmatch)(Ttype_LTUWCZolpovw9cWE3JBWSUw* a0, Ttype_LTUWCZolpovw9cWE3JBWSUw* b0) {
	NIM_BOOL result0;
	result0 = (NIM_BOOL)0;
	result0 = ((*a0).Sup.id == (*b0).Sup.id);
	return result0;
}

static N_INLINE(Tnode_bROa11lyF5vxEN9aYNbHmhw*, HEX5BHEX5D_4mGh5VHoHoaSkXDYdG6pyAitersgen)(Tnode_bROa11lyF5vxEN9aYNbHmhw* n0, NI i0) {
	Tnode_bROa11lyF5vxEN9aYNbHmhw* result0;
	result0 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
	result0 = (*n0).kindU.S6.sons->data[i0];
	return result0;
}

N_NIMCALL(Tnode_bROa11lyF5vxEN9aYNbHmhw*, tryresolvingstaticexpr_9c6ZlcqOU7h9ajbZLjoxOM0w)(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* c0, Tnode_bROa11lyF5vxEN9aYNbHmhw* n0) {
	Tnode_bROa11lyF5vxEN9aYNbHmhw* result0;
	Tnode_bROa11lyF5vxEN9aYNbHmhw* instantiated0;
	result0 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
	instantiated0 = replacetypesinbody_B4zyXrESj1hI8fRLnmKryA((*c0).c, (*c0).bindings, n0, NIM_NIL);
	result0 = (*(*c0).c).semexpr((*c0).c, instantiated0, 0);
	return result0;
}

N_NOINLINE(Ttyperelation_1IMf5P083XuEtWGxYaIXyQ, typerangerel_h89bCS2h619a5vh77e9bOGAjQ)(Ttype_LTUWCZolpovw9cWE3JBWSUw* f0, Ttype_LTUWCZolpovw9cWE3JBWSUw* a0) {
	Ttyperelation_1IMf5P083XuEtWGxYaIXyQ result0;
	NI64 a00;
	NI64 a10;
	NI64 f00;
	NI64 f10;
	result0 = (Ttyperelation_1IMf5P083XuEtWGxYaIXyQ)0;
	a00 = firstord_HUiBYxvKiECXCv8BzQNheg(a0);
	a10 = lastord_HUiBYxvKiECXCv8BzQNheg_2(a0);
	f00 = firstord_HUiBYxvKiECXCv8BzQNheg(f0);
	f10 = lastord_HUiBYxvKiECXCv8BzQNheg_2(f0);
	{
		NIM_BOOL LOC3;
		LOC3 = (NIM_BOOL)0;
		LOC3 = (a00 == f00);
		if (!(LOC3)) goto LA4;
		LOC3 = (a10 == f10);
		LA4: ;
		if (!LOC3) goto LA5;
		result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 10);
	}
	goto LA1;
	LA5: ;
	{
		NIM_BOOL LOC8;
		LOC8 = (NIM_BOOL)0;
		LOC8 = (f00 <= a00);
		if (!(LOC8)) goto LA9;
		LOC8 = (a10 <= f10);
		LA9: ;
		if (!LOC8) goto LA10;
		result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 1);
	}
	goto LA1;
	LA10: ;
	{
		NIM_BOOL LOC13;
		LOC13 = (NIM_BOOL)0;
		LOC13 = (a00 <= f10);
		if (!(LOC13)) goto LA14;
		LOC13 = (f00 <= a10);
		LA14: ;
		if (!LOC13) goto LA15;
		result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 1);
	}
	goto LA1;
	LA15: ;
	{
		result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
	}
	LA1: ;
	return result0;
}

N_NIMCALL(NIM_BOOL, isconvertibletorange_02bS6aQ1YnsMHEF1Do9aHsg)(Ttype_LTUWCZolpovw9cWE3JBWSUw* f0, Ttype_LTUWCZolpovw9cWE3JBWSUw* a0) {
	NIM_BOOL result0;
	result0 = (NIM_BOOL)0;
	{
		NIM_BOOL LOC3;
		LOC3 = (NIM_BOOL)0;
		LOC3 = ((IL64(34151432454144) &((NU64)1<<((NU)((*f0).kind)&63U)))!=0);
		if (!(LOC3)) goto LA4;
		LOC3 = ((IL64(34151432454144) &((NU64)1<<((NU)((*a0).kind)&63U)))!=0);
		LA4: ;
		if (!LOC3) goto LA5;
		result0 = NIM_TRUE;
	}
	goto LA1;
	LA5: ;
	{
		NIM_BOOL LOC8;
		LOC8 = (NIM_BOOL)0;
		LOC8 = ((IL64(1030792151040) &((NU64)1<<((NU)((*f0).kind)&63U)))!=0);
		if (!(LOC8)) goto LA9;
		LOC8 = ((IL64(1030792151040) &((NU64)1<<((NU)((*a0).kind)&63U)))!=0);
		LA9: ;
		if (!LOC8) goto LA10;
		result0 = NIM_TRUE;
	}
	goto LA1;
	LA10: ;
	LA1: ;
	return result0;
}

static N_INLINE(NIM_BOOL, isintlit_UBQknCC9aYWKMNMK4dmeTlQtypes)(Ttype_LTUWCZolpovw9cWE3JBWSUw* t0) {
	NIM_BOOL result0;
	NIM_BOOL LOC1;
	NIM_BOOL LOC2;
	result0 = (NIM_BOOL)0;
	LOC1 = (NIM_BOOL)0;
	LOC2 = (NIM_BOOL)0;
	LOC2 = ((*t0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 31));
	if (!(LOC2)) goto LA3;
	LOC2 = !(((*t0).n == NIM_NIL));
	LA3: ;
	LOC1 = LOC2;
	if (!(LOC1)) goto LA4;
	LOC1 = ((*(*t0).n).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 6));
	LA4: ;
	result0 = LOC1;
	return result0;
}

N_NIMCALL(Ttyperelation_1IMf5P083XuEtWGxYaIXyQ, handlerange_9bd6b9aVP68tDeJTTDO30vSg)(Ttype_LTUWCZolpovw9cWE3JBWSUw* f0, Ttype_LTUWCZolpovw9cWE3JBWSUw* a0, Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag min0, Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag max0) {
	Ttyperelation_1IMf5P083XuEtWGxYaIXyQ result0;
	result0 = (Ttyperelation_1IMf5P083XuEtWGxYaIXyQ)0;
	{
		if (!((*a0).kind == (*f0).kind)) goto LA3;
		result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 10);
	}
	goto LA1;
	LA3: ;
	{
		Ttype_LTUWCZolpovw9cWE3JBWSUw* ab0;
		Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag k0;
		ab0 = skiptypes_pLCdCGDuirMe9cspwviV9aVA(a0, 1048576);
		k0 = (*ab0).kind;
		{
			if (!(k0 == (*f0).kind)) goto LA8;
			result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 4);
		}
		goto LA6;
		LA8: ;
		{
			NIM_BOOL LOC11;
			NIM_BOOL LOC12;
			NIM_BOOL LOC13;
			NIM_BOOL LOC14;
			NI64 LOC18;
			NI64 LOC20;
			LOC11 = (NIM_BOOL)0;
			LOC12 = (NIM_BOOL)0;
			LOC13 = (NIM_BOOL)0;
			LOC14 = (NIM_BOOL)0;
			LOC14 = (k0 == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 31));
			if (!(LOC14)) goto LA15;
			LOC14 = ((IL64(34149286019072) &((NU64)1<<((NU)((*f0).kind)&63U)))!=0);
			LA15: ;
			LOC13 = LOC14;
			if (!(LOC13)) goto LA16;
			LOC13 = isintlit_UBQknCC9aYWKMNMK4dmeTlQtypes(ab0);
			LA16: ;
			LOC12 = LOC13;
			if (!(LOC12)) goto LA17;
			LOC18 = (NI64)0;
			LOC18 = firstord_HUiBYxvKiECXCv8BzQNheg(f0);
			LOC12 = (LOC18 <= (*(*ab0).n).kindU.S1.intval);
			LA17: ;
			LOC11 = LOC12;
			if (!(LOC11)) goto LA19;
			LOC20 = (NI64)0;
			LOC20 = lastord_HUiBYxvKiECXCv8BzQNheg_2(f0);
			LOC11 = ((*(*ab0).n).kindU.S1.intval <= LOC20);
			LA19: ;
			if (!LOC11) goto LA21;
			result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 9);
		}
		goto LA6;
		LA21: ;
		{
			NIM_BOOL LOC24;
			LOC24 = (NIM_BOOL)0;
			LOC24 = ((*f0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 31));
			if (!(LOC24)) goto LA25;
			LOC24 = ((IL64(30064771072) &((NU64)1<<((NU)(k0)&63U)))!=0);
			LA25: ;
			if (!LOC24) goto LA26;
			result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 2);
		}
		goto LA6;
		LA26: ;
		{
			NIM_BOOL LOC29;
			LOC29 = (NIM_BOOL)0;
			LOC29 = (min0 <= k0);
			if (!(LOC29)) goto LA30;
			LOC29 = (k0 <= max0);
			LA30: ;
			if (!LOC29) goto LA31;
			result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 1);
		}
		goto LA6;
		LA31: ;
		{
			NIM_BOOL LOC34;
			NIM_BOOL LOC35;
			NIM_BOOL LOC36;
			NI64 LOC39;
			Tnode_bROa11lyF5vxEN9aYNbHmhw* LOC40;
			Tnode_bROa11lyF5vxEN9aYNbHmhw* LOC42;
			NI64 LOC43;
			LOC34 = (NIM_BOOL)0;
			LOC35 = (NIM_BOOL)0;
			LOC36 = (NIM_BOOL)0;
			LOC36 = ((*a0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 20));
			if (!(LOC36)) goto LA37;
			LOC36 = ((IL64(15459734781952) &((NU64)1<<((NU)((*(*a0).sons->data[((NI) 0)]).kind)&63U)))!=0);
			LA37: ;
			LOC35 = LOC36;
			if (!(LOC35)) goto LA38;
			LOC39 = (NI64)0;
			LOC39 = firstord_HUiBYxvKiECXCv8BzQNheg(f0);
			LOC40 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
			LOC40 = HEX5BHEX5D_4mGh5VHoHoaSkXDYdG6pyAitersgen((*a0).n, ((NI) 0));
			LOC35 = (LOC39 <= (*LOC40).kindU.S1.intval);
			LA38: ;
			LOC34 = LOC35;
			if (!(LOC34)) goto LA41;
			LOC42 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
			LOC42 = HEX5BHEX5D_4mGh5VHoHoaSkXDYdG6pyAitersgen((*a0).n, ((NI) 1));
			LOC43 = (NI64)0;
			LOC43 = lastord_HUiBYxvKiECXCv8BzQNheg_2(f0);
			LOC34 = ((*LOC42).kindU.S1.intval <= LOC43);
			LA41: ;
			if (!LOC34) goto LA44;
			result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 1);
		}
		goto LA6;
		LA44: ;
		{
			result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
		}
		LA6: ;
	}
	LA1: ;
	return result0;
}

static N_INLINE(NIM_BOOL, isfloatlit_UBQknCC9aYWKMNMK4dmeTlQsigmatch)(Ttype_LTUWCZolpovw9cWE3JBWSUw* t0) {
	NIM_BOOL result0;
	NIM_BOOL LOC1;
	NIM_BOOL LOC2;
	result0 = (NIM_BOOL)0;
	LOC1 = (NIM_BOOL)0;
	LOC2 = (NIM_BOOL)0;
	LOC2 = ((*t0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 36));
	if (!(LOC2)) goto LA3;
	LOC2 = !(((*t0).n == NIM_NIL));
	LA3: ;
	LOC1 = LOC2;
	if (!(LOC1)) goto LA4;
	LOC1 = ((*(*t0).n).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 16));
	LA4: ;
	result0 = LOC1;
	return result0;
}

N_NIMCALL(Ttyperelation_1IMf5P083XuEtWGxYaIXyQ, handlefloatrange_2C61PQXVzju4z2HN0r7b0g)(Ttype_LTUWCZolpovw9cWE3JBWSUw* f0, Ttype_LTUWCZolpovw9cWE3JBWSUw* a0) {
	Ttyperelation_1IMf5P083XuEtWGxYaIXyQ result0;
	result0 = (Ttyperelation_1IMf5P083XuEtWGxYaIXyQ)0;
	{
		if (!((*a0).kind == (*f0).kind)) goto LA3;
		result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 10);
	}
	goto LA1;
	LA3: ;
	{
		Ttype_LTUWCZolpovw9cWE3JBWSUw* ab0;
		Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag k0;
		ab0 = skiptypes_pLCdCGDuirMe9cspwviV9aVA(a0, 1048576);
		k0 = (*ab0).kind;
		{
			if (!(k0 == (*f0).kind)) goto LA8;
			result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 4);
		}
		goto LA6;
		LA8: ;
		{
			NIM_BOOL LOC11;
			LOC11 = (NIM_BOOL)0;
			LOC11 = isfloatlit_UBQknCC9aYWKMNMK4dmeTlQsigmatch(ab0);
			if (!LOC11) goto LA12;
			result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 9);
		}
		goto LA6;
		LA12: ;
		{
			NIM_BOOL LOC15;
			LOC15 = (NIM_BOOL)0;
			LOC15 = isintlit_UBQknCC9aYWKMNMK4dmeTlQtypes(ab0);
			if (!LOC15) goto LA16;
			result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 1);
		}
		goto LA6;
		LA16: ;
		{
			NIM_BOOL LOC19;
			LOC19 = (NIM_BOOL)0;
			LOC19 = (((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 36) <= k0);
			if (!(LOC19)) goto LA20;
			LOC19 = (k0 <= ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 39));
			LA20: ;
			if (!LOC19) goto LA21;
			{
				if (!((*f0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 37))) goto LA25;
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 1);
			}
			goto LA23;
			LA25: ;
			{
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 2);
			}
			LA23: ;
		}
		goto LA6;
		LA21: ;
		{
			result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
		}
		LA6: ;
	}
	LA1: ;
	return result0;
}

static N_INLINE(Ttyperelation_1IMf5P083XuEtWGxYaIXyQ, allowsnil_59aII9aHhpaoZviau1LkOWWwsigmatch)(Ttype_LTUWCZolpovw9cWE3JBWSUw* f0) {
	Ttyperelation_1IMf5P083XuEtWGxYaIXyQ result0;
	result0 = (Ttyperelation_1IMf5P083XuEtWGxYaIXyQ)0;
	{
		if (!!((((*f0).flags &(1U<<((NU)(((Ttypeflag_x2m5g1NpbmDig4wLT3Ylhw) 16))&31U)))!=0))) goto LA3;
		result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 3);
	}
	goto LA1;
	LA3: ;
	{
		result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
	}
	LA1: ;
	return result0;
}

N_NIMCALL(Ttyperelation_1IMf5P083XuEtWGxYaIXyQ, minrel_cHQQLlmn22nDWBNFDVGjGw)(Ttyperelation_1IMf5P083XuEtWGxYaIXyQ a0, Ttyperelation_1IMf5P083XuEtWGxYaIXyQ b0) {
	Ttyperelation_1IMf5P083XuEtWGxYaIXyQ result0;
	result0 = (Ttyperelation_1IMf5P083XuEtWGxYaIXyQ)0;
	{
		if (!(a0 <= b0)) goto LA3;
		result0 = a0;
	}
	goto LA1;
	LA3: ;
	{
		result0 = b0;
	}
	LA1: ;
	return result0;
}

N_NIMCALL(Ttyperelation_1IMf5P083XuEtWGxYaIXyQ, recordrel_ATXQei1OP9acdbktDwpAl9ag)(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* c0, Ttype_LTUWCZolpovw9cWE3JBWSUw* f0, Ttype_LTUWCZolpovw9cWE3JBWSUw* a0) {
	Ttyperelation_1IMf5P083XuEtWGxYaIXyQ result0;
{	result0 = (Ttyperelation_1IMf5P083XuEtWGxYaIXyQ)0;
	result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
	{
		NIM_BOOL LOC3;
		LOC3 = (NIM_BOOL)0;
		LOC3 = sametype_EjIk4Kwv9bxfpaU9cx49cCrBQ(f0, a0, 0);
		if (!LOC3) goto LA4;
		result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 10);
	}
	goto LA1;
	LA4: ;
	{
		NI LOC7;
		NI LOC8;
		NI firstfield0;
		LOC7 = (NI)0;
		LOC7 = sonslen_gG7hUAX9cA629ahMLVL3xN4w(a0);
		LOC8 = (NI)0;
		LOC8 = sonslen_gG7hUAX9cA629ahMLVL3xN4w(f0);
		if (!(LOC7 == LOC8)) goto LA9;
		result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 10);
		{
			if (!((*f0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 18))) goto LA13;
			firstfield0 = ((NI) 0);
		}
		goto LA11;
		LA13: ;
		{
			firstfield0 = ((NI) 1);
		}
		LA11: ;
		{
			NI i_lPczT9blTTRzPnN57SLYpYw;
			NI HEX3Atmp_Nx281SG1E8qxc3Mq3AFbYQ;
			NI LOC17;
			NI res_N9bDKfJJAOUnD0ILtiU9c6pg;
			i_lPczT9blTTRzPnN57SLYpYw = (NI)0;
			HEX3Atmp_Nx281SG1E8qxc3Mq3AFbYQ = (NI)0;
			LOC17 = (NI)0;
			LOC17 = sonslen_gG7hUAX9cA629ahMLVL3xN4w(f0);
			HEX3Atmp_Nx281SG1E8qxc3Mq3AFbYQ = (NI)(LOC17 - ((NI) 1));
			res_N9bDKfJJAOUnD0ILtiU9c6pg = firstfield0;
			{
				while (1) {
					Ttyperelation_1IMf5P083XuEtWGxYaIXyQ m0;
					if (!(res_N9bDKfJJAOUnD0ILtiU9c6pg <= HEX3Atmp_Nx281SG1E8qxc3Mq3AFbYQ)) goto LA19;
					i_lPczT9blTTRzPnN57SLYpYw = res_N9bDKfJJAOUnD0ILtiU9c6pg;
					m0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, (*f0).sons->data[i_lPczT9blTTRzPnN57SLYpYw], (*a0).sons->data[i_lPczT9blTTRzPnN57SLYpYw], NIM_TRUE);
					{
						if (!(m0 < ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 3))) goto LA22;
						result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
						goto BeforeRet;
					}
					LA22: ;
					result0 = minrel_cHQQLlmn22nDWBNFDVGjGw(result0, m0);
					res_N9bDKfJJAOUnD0ILtiU9c6pg += ((NI) 1);
				} LA19: ;
			}
		}
		{
			NIM_BOOL LOC26;
			LOC26 = (NIM_BOOL)0;
			LOC26 = !(((*f0).n == NIM_NIL));
			if (!(LOC26)) goto LA27;
			LOC26 = !(((*a0).n == NIM_NIL));
			LA27: ;
			if (!LOC26) goto LA28;
			{
				NI i_lPczT9blTTRzPnN57SLYpYw_2;
				NI HEX3Atmp_Nx281SG1E8qxc3Mq3AFbYQ_2;
				NI LOC31;
				NI res_N9bDKfJJAOUnD0ILtiU9c6pg_2;
				i_lPczT9blTTRzPnN57SLYpYw_2 = (NI)0;
				HEX3Atmp_Nx281SG1E8qxc3Mq3AFbYQ_2 = (NI)0;
				LOC31 = (NI)0;
				LOC31 = sonslen_qPWPHw7WgJeEVYUdcaRIig((*f0).n);
				HEX3Atmp_Nx281SG1E8qxc3Mq3AFbYQ_2 = (NI)(LOC31 - ((NI) 1));
				res_N9bDKfJJAOUnD0ILtiU9c6pg_2 = ((NI) 0);
				{
					while (1) {
						if (!(res_N9bDKfJJAOUnD0ILtiU9c6pg_2 <= HEX3Atmp_Nx281SG1E8qxc3Mq3AFbYQ_2)) goto LA33;
						i_lPczT9blTTRzPnN57SLYpYw_2 = res_N9bDKfJJAOUnD0ILtiU9c6pg_2;
						{
							if (!!(((*(*(*f0).n).kindU.S6.sons->data[i_lPczT9blTTRzPnN57SLYpYw_2]).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 3)))) goto LA36;
							internalerror_MXmtqrCmYwtOPkDCFgUWKQ((*(*f0).n).info, ((NimStringDesc*) &T_EV5hHJmjIY9cla9b9be7fSVJQ_15));
						}
						goto LA34;
						LA36: ;
						{
							if (!!(((*(*(*a0).n).kindU.S6.sons->data[i_lPczT9blTTRzPnN57SLYpYw_2]).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 3)))) goto LA39;
							internalerror_MXmtqrCmYwtOPkDCFgUWKQ((*(*a0).n).info, ((NimStringDesc*) &T_EV5hHJmjIY9cla9b9be7fSVJQ_15));
						}
						goto LA34;
						LA39: ;
						{
							Tsym_AXG7xcvKqaxY6koRX1xkCw* x0;
							Tsym_AXG7xcvKqaxY6koRX1xkCw* y0;
							x0 = (*(*(*f0).n).kindU.S6.sons->data[i_lPczT9blTTRzPnN57SLYpYw_2]).kindU.S4.sym;
							y0 = (*(*(*a0).n).kindU.S6.sons->data[i_lPczT9blTTRzPnN57SLYpYw_2]).kindU.S4.sym;
							{
								NIM_BOOL LOC44;
								Ttyperelation_1IMf5P083XuEtWGxYaIXyQ LOC46;
								LOC44 = (NIM_BOOL)0;
								LOC44 = ((*f0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 17));
								if (!(LOC44)) goto LA45;
								LOC46 = (Ttyperelation_1IMf5P083XuEtWGxYaIXyQ)0;
								LOC46 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, (*x0).typ, (*y0).typ, NIM_TRUE);
								LOC44 = (LOC46 < ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 3));
								LA45: ;
								if (!LOC44) goto LA47;
								result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
								goto BeforeRet;
							}
							LA47: ;
							{
								if (!!(((*(*x0).name).Sup.id == (*(*y0).name).Sup.id))) goto LA51;
								result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
								goto BeforeRet;
							}
							LA51: ;
						}
						LA34: ;
						res_N9bDKfJJAOUnD0ILtiU9c6pg_2 += ((NI) 1);
					} LA33: ;
				}
			}
		}
		LA28: ;
	}
	goto LA1;
	LA9: ;
	LA1: ;
	}BeforeRet: ;
	return result0;
}

N_NIMCALL(NI, isobjectsubtype_AAFgb9cf1jok4tDnzcxROEA)(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* c0, Ttype_LTUWCZolpovw9cWE3JBWSUw* a0, Ttype_LTUWCZolpovw9cWE3JBWSUw* f0, Ttype_LTUWCZolpovw9cWE3JBWSUw* fgenericorigin0) {
	NI result0;
	Ttype_LTUWCZolpovw9cWE3JBWSUw* t0;
	NI depth0;
	Ttype_LTUWCZolpovw9cWE3JBWSUw* last0;
	result0 = (NI)0;
	t0 = a0;
	depth0 = ((NI) 0);
	last0 = a0;
	{
		while (1) {
			NIM_BOOL LOC3;
			NIM_BOOL LOC5;
			LOC3 = (NIM_BOOL)0;
			LOC3 = !((t0 == NIM_NIL));
			if (!(LOC3)) goto LA4;
			LOC5 = (NIM_BOOL)0;
			LOC5 = sameobjecttypes_bXxjiP8HPzKjOso3AVsG5w(f0, t0);
			LOC3 = !(LOC5);
			LA4: ;
			if (!LOC3) goto LA2;
			t0 = (*t0).sons->data[((NI) 0)];
			{
				if (!(t0 == NIM_NIL)) goto LA8;
				goto LA1;
			}
			LA8: ;
			last0 = t0;
			t0 = skiptypes_pLCdCGDuirMe9cspwviV9aVA(t0, 14682384);
			depth0 += ((NI) 1);
		} LA2: ;
	} LA1: ;
	{
		if (!!((t0 == NIM_NIL))) goto LA12;
		{
			NIM_BOOL LOC16;
			NIM_BOOL LOC17;
			NI LOC20;
			NI LOC21;
			LOC16 = (NIM_BOOL)0;
			LOC17 = (NIM_BOOL)0;
			LOC17 = !((fgenericorigin0 == NIM_NIL));
			if (!(LOC17)) goto LA18;
			LOC17 = ((*last0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 11));
			LA18: ;
			LOC16 = LOC17;
			if (!(LOC16)) goto LA19;
			LOC20 = (NI)0;
			LOC20 = len_gG7hUAX9cA629ahMLVL3xN4w_2(last0);
			LOC21 = (NI)0;
			LOC21 = len_gG7hUAX9cA629ahMLVL3xN4w_2(fgenericorigin0);
			LOC16 = ((NI)(LOC20 - ((NI) 1)) == LOC21);
			LA19: ;
			if (!LOC16) goto LA22;
			{
				NI i_yf5CnWkG0hFjLXoBabgffA;
				NI HEX3Atmp_CDxxvxbYtff7hWqjXf7gCg;
				NI LOC25;
				NI res_UscuspQJEbXvSJlOKx0mPA;
				i_yf5CnWkG0hFjLXoBabgffA = (NI)0;
				HEX3Atmp_CDxxvxbYtff7hWqjXf7gCg = (NI)0;
				LOC25 = (NI)0;
				LOC25 = sonslen_gG7hUAX9cA629ahMLVL3xN4w(fgenericorigin0);
				HEX3Atmp_CDxxvxbYtff7hWqjXf7gCg = (NI)(LOC25 - ((NI) 1));
				res_UscuspQJEbXvSJlOKx0mPA = ((NI) 1);
				{
					while (1) {
						Ttype_LTUWCZolpovw9cWE3JBWSUw* x0;
						Tidobj_raN9cHVgzmvaXisezY9aGg9cg* LOC28;
						TNimObject* LOC29;
						if (!(res_UscuspQJEbXvSJlOKx0mPA <= HEX3Atmp_CDxxvxbYtff7hWqjXf7gCg)) goto LA27;
						i_yf5CnWkG0hFjLXoBabgffA = res_UscuspQJEbXvSJlOKx0mPA;
						LOC28 = (Tidobj_raN9cHVgzmvaXisezY9aGg9cg*)0;
						LOC28 = &(*fgenericorigin0).sons->data[i_yf5CnWkG0hFjLXoBabgffA]->Sup;
						LOC29 = (TNimObject*)0;
						LOC29 = idtableget_D12lVDWWPrKae8szg3EYLw((*c0).bindings, LOC28);
						x0 = ((Ttype_LTUWCZolpovw9cWE3JBWSUw*) (LOC29));
						{
							if (!(x0 == NIM_NIL)) goto LA32;
							put_JoRvap9abGYCKt6dvPFvsFAsigmatch(c0, (*fgenericorigin0).sons->data[i_yf5CnWkG0hFjLXoBabgffA], (*last0).sons->data[i_yf5CnWkG0hFjLXoBabgffA]);
						}
						LA32: ;
						res_UscuspQJEbXvSJlOKx0mPA += ((NI) 1);
					} LA27: ;
				}
			}
		}
		LA22: ;
		result0 = depth0;
	}
	goto LA10;
	LA12: ;
	{
		result0 = ((NI) -1);
	}
	LA10: ;
	return result0;
}

static N_INLINE(NIM_BOOL, samedistincttypes_E81g0CHdt1olSerxA8b5oAsigmatch)(Ttype_LTUWCZolpovw9cWE3JBWSUw* a0, Ttype_LTUWCZolpovw9cWE3JBWSUw* b0) {
	NIM_BOOL result0;
	result0 = (NIM_BOOL)0;
	result0 = sameobjecttypes_bXxjiP8HPzKjOso3AVsG5w(a0, b0);
	return result0;
}

static N_INLINE(NIM_BOOL, inconsistentvartypes_v1q2uuw9bsT7guGlN6Ln1vgsigmatch)(Ttype_LTUWCZolpovw9cWE3JBWSUw* f0, Ttype_LTUWCZolpovw9cWE3JBWSUw* a0) {
	NIM_BOOL result0;
	NIM_BOOL LOC1;
	NIM_BOOL LOC3;
	result0 = (NIM_BOOL)0;
	LOC1 = (NIM_BOOL)0;
	LOC1 = !(((*f0).kind == (*a0).kind));
	if (!(LOC1)) goto LA2;
	LOC3 = (NIM_BOOL)0;
	LOC3 = ((*f0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 23));
	if (LOC3) goto LA4;
	LOC3 = ((*a0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 23));
	LA4: ;
	LOC1 = LOC3;
	LA2: ;
	result0 = LOC1;
	return result0;
}

N_NIMCALL(Ttyperelation_1IMf5P083XuEtWGxYaIXyQ, procparamtyperel_ATXQei1OP9acdbktDwpAl9ag_3)(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* c0, Ttype_LTUWCZolpovw9cWE3JBWSUw* f_ZGbbZW755tWLjGofnyQdGA, Ttype_LTUWCZolpovw9cWE3JBWSUw* a_vkoKSj6s9c29bFdjsTemg9amQ) {
	Ttyperelation_1IMf5P083XuEtWGxYaIXyQ result0;
	Ttype_LTUWCZolpovw9cWE3JBWSUw* f0;
	Ttype_LTUWCZolpovw9cWE3JBWSUw* a0;
{	result0 = (Ttyperelation_1IMf5P083XuEtWGxYaIXyQ)0;
	f0 = f_ZGbbZW755tWLjGofnyQdGA;
	a0 = a_vkoKSj6s9c29bFdjsTemg9amQ;
	{
		NIM_BOOL LOC3;
		Ttype_LTUWCZolpovw9cWE3JBWSUw* aresolved0;
		Tidobj_raN9cHVgzmvaXisezY9aGg9cg* LOC6;
		TNimObject* LOC7;
		LOC3 = (NIM_BOOL)0;
		LOC3 = ismetatype_BP9bVN0WuPxtcisPwKXmzoQ(a0);
		if (!LOC3) goto LA4;
		LOC6 = (Tidobj_raN9cHVgzmvaXisezY9aGg9cg*)0;
		LOC6 = &a0->Sup;
		LOC7 = (TNimObject*)0;
		LOC7 = idtableget_D12lVDWWPrKae8szg3EYLw((*c0).bindings, LOC6);
		aresolved0 = ((Ttype_LTUWCZolpovw9cWE3JBWSUw*) (LOC7));
		{
			if (!!((aresolved0 == NIM_NIL))) goto LA10;
			a0 = aresolved0;
		}
		LA10: ;
	}
	LA4: ;
	{
		NIM_BOOL LOC14;
		Ttyperelation_1IMf5P083XuEtWGxYaIXyQ reverserel0;
		LOC14 = (NIM_BOOL)0;
		LOC14 = ismetatype_BP9bVN0WuPxtcisPwKXmzoQ(a0);
		if (!LOC14) goto LA15;
		{
			NIM_BOOL LOC19;
			LOC19 = (NIM_BOOL)0;
			LOC19 = ismetatype_BP9bVN0WuPxtcisPwKXmzoQ(f0);
			if (!LOC19) goto LA20;
			f0 = generatetypeinstance_J1KXEIMiOMsSsHjeCCCXbQ((*c0).c, (*c0).bindings, (*(*c0).call).info, f0);
			{
				NIM_BOOL LOC24;
				LOC24 = (NIM_BOOL)0;
				LOC24 = (f0 == NIM_NIL);
				if (LOC24) goto LA25;
				LOC24 = ismetatype_BP9bVN0WuPxtcisPwKXmzoQ(f0);
				LA25: ;
				if (!LOC24) goto LA26;
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 5);
				goto BeforeRet;
			}
			LA26: ;
		}
		LA20: ;
		reverserel0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, a0, f0, NIM_TRUE);
		{
			if (!(((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8) <= reverserel0)) goto LA30;
			result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 6);
		}
		LA30: ;
	}
	goto LA12;
	LA15: ;
	{
		result0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, f0, a0, NIM_TRUE);
	}
	LA12: ;
	{
		NIM_BOOL LOC35;
		LOC35 = (NIM_BOOL)0;
		LOC35 = (result0 <= ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 3));
		if (LOC35) goto LA36;
		LOC35 = inconsistentvartypes_v1q2uuw9bsT7guGlN6Ln1vgsigmatch(f0, a0);
		LA36: ;
		if (!LOC35) goto LA37;
		result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
	}
	LA37: ;
	}BeforeRet: ;
	return result0;
}

N_NIMCALL(Ttyperelation_1IMf5P083XuEtWGxYaIXyQ, proctyperel_ATXQei1OP9acdbktDwpAl9ag_2)(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* c0, Ttype_LTUWCZolpovw9cWE3JBWSUw* f0, Ttype_LTUWCZolpovw9cWE3JBWSUw* a0) {
	Ttyperelation_1IMf5P083XuEtWGxYaIXyQ result0;
{	result0 = (Ttyperelation_1IMf5P083XuEtWGxYaIXyQ)0;
	switch ((*a0).kind) {
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 25):
	{
		{
			NI LOC4;
			NI LOC5;
			LOC4 = (NI)0;
			LOC4 = sonslen_gG7hUAX9cA629ahMLVL3xN4w(f0);
			LOC5 = (NI)0;
			LOC5 = sonslen_gG7hUAX9cA629ahMLVL3xN4w(a0);
			if (!!((LOC4 == LOC5))) goto LA6;
			goto BeforeRet;
		}
		LA6: ;
		result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 10);
		{
			NI i_scw7ywe9c4IV9ap0Z1wDcHsA;
			NI HEX3Atmp_iBx9cYrjNJVNw9a6dn4Rygrg;
			NI LOC9;
			NI res_UCIf7hPVcYSEdyIVrhTOHQ;
			i_scw7ywe9c4IV9ap0Z1wDcHsA = (NI)0;
			HEX3Atmp_iBx9cYrjNJVNw9a6dn4Rygrg = (NI)0;
			LOC9 = (NI)0;
			LOC9 = sonslen_gG7hUAX9cA629ahMLVL3xN4w(f0);
			HEX3Atmp_iBx9cYrjNJVNw9a6dn4Rygrg = (LOC9 - 1);
			res_UCIf7hPVcYSEdyIVrhTOHQ = ((NI) 1);
			{
				while (1) {
					Ttyperelation_1IMf5P083XuEtWGxYaIXyQ LOC12;
					if (!(res_UCIf7hPVcYSEdyIVrhTOHQ <= HEX3Atmp_iBx9cYrjNJVNw9a6dn4Rygrg)) goto LA11;
					i_scw7ywe9c4IV9ap0Z1wDcHsA = res_UCIf7hPVcYSEdyIVrhTOHQ;
					LOC12 = (Ttyperelation_1IMf5P083XuEtWGxYaIXyQ)0;
					LOC12 = procparamtyperel_ATXQei1OP9acdbktDwpAl9ag_3(c0, (*f0).sons->data[i_scw7ywe9c4IV9ap0Z1wDcHsA], (*a0).sons->data[i_scw7ywe9c4IV9ap0Z1wDcHsA]);
					result0 = minrel_cHQQLlmn22nDWBNFDVGjGw(result0, LOC12);
					{
						if (!(result0 == ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0))) goto LA15;
						goto BeforeRet;
					}
					LA15: ;
					res_UCIf7hPVcYSEdyIVrhTOHQ += ((NI) 1);
				} LA11: ;
			}
		}
		{
			if (!!(((*f0).sons->data[((NI) 0)] == NIM_NIL))) goto LA19;
			{
				Ttyperelation_1IMf5P083XuEtWGxYaIXyQ LOC25;
				if (!!(((*a0).sons->data[((NI) 0)] == NIM_NIL))) goto LA23;
				LOC25 = (Ttyperelation_1IMf5P083XuEtWGxYaIXyQ)0;
				LOC25 = procparamtyperel_ATXQei1OP9acdbktDwpAl9ag_3(c0, (*f0).sons->data[((NI) 0)], (*a0).sons->data[((NI) 0)]);
				result0 = minrel_cHQQLlmn22nDWBNFDVGjGw(result0, LOC25);
				{
					if (!(result0 == ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0))) goto LA28;
					goto BeforeRet;
				}
				LA28: ;
			}
			goto LA21;
			LA23: ;
			{
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
				goto BeforeRet;
			}
			LA21: ;
		}
		goto LA17;
		LA19: ;
		{
			if (!!(((*a0).sons->data[((NI) 0)] == NIM_NIL))) goto LA32;
			result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
			goto BeforeRet;
		}
		goto LA17;
		LA32: ;
		LA17: ;
		{
			NIM_BOOL LOC36;
			LOC36 = (NIM_BOOL)0;
			LOC36 = (((*f0).flags &(1U<<((NU)(((Ttypeflag_x2m5g1NpbmDig4wLT3Ylhw) 1))&31U)))!=0);
			if (!(LOC36)) goto LA37;
			LOC36 = !((((*a0).flags &(1U<<((NU)(((Ttypeflag_x2m5g1NpbmDig4wLT3Ylhw) 1))&31U)))!=0));
			LA37: ;
			if (!LOC36) goto LA38;
			result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
			goto BeforeRet;
		}
		goto LA34;
		LA38: ;
		{
			NIM_BOOL LOC41;
			NIM_BOOL LOC42;
			LOC41 = (NIM_BOOL)0;
			LOC42 = (NIM_BOOL)0;
			LOC42 = (((*f0).flags &(1U<<((NU)(((Ttypeflag_x2m5g1NpbmDig4wLT3Ylhw) 7))&31U)))!=0);
			if (!(LOC42)) goto LA43;
			LOC42 = (((*a0).flags & 130) == 0);
			LA43: ;
			LOC41 = LOC42;
			if (!(LOC41)) goto LA44;
			LOC41 = ((gglobaloptions_j042VVDC9cT5ENYoXnmhhVg &((NU64)1<<((NU)(((Tglobaloption_RAfAEZqjnKMDumgyKKc1qw) 24))&63U)))!=0);
			LA44: ;
			if (!LOC41) goto LA45;
			result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
			goto BeforeRet;
		}
		goto LA34;
		LA45: ;
		{
			if (!!((((*f0).flags & 16384) == ((*a0).flags & 16384)))) goto LA48;
			result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
			goto BeforeRet;
		}
		goto LA34;
		LA48: ;
		{
			if (!!(((*f0).callconv == (*a0).callconv))) goto LA51;
			{
				NIM_BOOL LOC55;
				LOC55 = (NIM_BOOL)0;
				LOC55 = ((*f0).callconv == ((Tcallingconvention_yjAJ8w0h1PBaSwSGJ3P7IA) 8));
				if (!(LOC55)) goto LA56;
				LOC55 = ((*a0).callconv == ((Tcallingconvention_yjAJ8w0h1PBaSwSGJ3P7IA) 0));
				LA56: ;
				if (!LOC55) goto LA57;
				{
					if (!(result0 == ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 6))) goto LA61;
					result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 7);
				}
				goto LA59;
				LA61: ;
				{
					if (!(result0 == ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 5))) goto LA64;
					result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 5);
				}
				goto LA59;
				LA64: ;
				{
					result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 1);
				}
				LA59: ;
			}
			goto LA53;
			LA57: ;
			{
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
				goto BeforeRet;
			}
			LA53: ;
		}
		goto LA34;
		LA51: ;
		LA34: ;
		{
			NIM_BOOL LOC70;
			LOC70 = (NIM_BOOL)0;
			LOC70 = compatibleeffects_ulOq8f6fsd9cVuZJ1lRYKMw(f0, a0);
			if (!!(LOC70)) goto LA71;
			result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
			goto BeforeRet;
		}
		LA71: ;
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 5):
	{
		result0 = allowsnil_59aII9aHhpaoZviau1LkOWWwsigmatch(f0);
	}
	break;
	default:
	{
	}
	break;
	}
	}BeforeRet: ;
	return result0;
}

N_NIMCALL(Ttype_LTUWCZolpovw9cWE3JBWSUw*, skiptoobject_2mzjvZ9aRUzu3xJQF0NC3eQ)(Ttype_LTUWCZolpovw9cWE3JBWSUw* t0, Skippedptr_WOSTpykTcTHo6Kb9bHoOUqQ* skipped0) {
	Ttype_LTUWCZolpovw9cWE3JBWSUw* result0;
	Ttype_LTUWCZolpovw9cWE3JBWSUw* r0;
	NI ptrs0;
	result0 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
	r0 = t0;
	ptrs0 = ((NI) 0);
	{
		while (1) {
			if (!!((r0 == NIM_NIL))) goto LA2;
			switch ((*r0).kind) {
			case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 9):
			{
				r0 = (*r0).sons->data[((NI) 0)];
			}
			break;
			case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 22):
			{
				ptrs0 += ((NI) 1);
				(*skipped0) = ((Skippedptr_WOSTpykTcTHo6Kb9bHoOUqQ) 1);
				r0 = lastson_E41DMKHtT9c6sAMyyvhmSIw(r0);
			}
			break;
			case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 21):
			{
				ptrs0 += ((NI) 1);
				(*skipped0) = ((Skippedptr_WOSTpykTcTHo6Kb9bHoOUqQ) 2);
				r0 = lastson_E41DMKHtT9c6sAMyyvhmSIw(r0);
			}
			break;
			case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 10):
			case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 11):
			case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 4):
			{
				r0 = lastson_E41DMKHtT9c6sAMyyvhmSIw(r0);
			}
			break;
			default:
			{
				goto LA1;
			}
			break;
			}
		} LA2: ;
	} LA1: ;
	{
		NIM_BOOL LOC10;
		LOC10 = (NIM_BOOL)0;
		LOC10 = ((*r0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 17));
		if (!(LOC10)) goto LA11;
		LOC10 = (ptrs0 <= ((NI) 1));
		LA11: ;
		if (!LOC10) goto LA12;
		result0 = r0;
	}
	LA12: ;
	return result0;
}

N_NIMCALL(NIM_BOOL, isgenericsubtype_iFYDgIHQFHAIUyeXIQKySg)(Ttype_LTUWCZolpovw9cWE3JBWSUw* a0, Ttype_LTUWCZolpovw9cWE3JBWSUw* f0, NI* d0) {
	NIM_BOOL result0;
	Skippedptr_WOSTpykTcTHo6Kb9bHoOUqQ askip0;
	Skippedptr_WOSTpykTcTHo6Kb9bHoOUqQ fskip0;
	Ttype_LTUWCZolpovw9cWE3JBWSUw* t0;
	Ttype_LTUWCZolpovw9cWE3JBWSUw* r0;
	NI depth0;
{	result0 = (NIM_BOOL)0;
	askip0 = ((Skippedptr_WOSTpykTcTHo6Kb9bHoOUqQ) 0);
	fskip0 = ((Skippedptr_WOSTpykTcTHo6Kb9bHoOUqQ) 0);
	t0 = skiptoobject_2mzjvZ9aRUzu3xJQF0NC3eQ(a0, (&askip0));
	r0 = skiptoobject_2mzjvZ9aRUzu3xJQF0NC3eQ(f0, (&fskip0));
	{
		if (!(r0 == NIM_NIL)) goto LA3;
		result0 = NIM_FALSE;
		goto BeforeRet;
	}
	LA3: ;
	depth0 = ((NI) 0);
	{
		while (1) {
			NIM_BOOL LOC7;
			NIM_BOOL LOC8;
			LOC7 = (NIM_BOOL)0;
			LOC8 = (NIM_BOOL)0;
			LOC8 = !((t0 == NIM_NIL));
			if (!(LOC8)) goto LA9;
			LOC8 = !(((*r0).sym == (*t0).sym));
			LA9: ;
			LOC7 = LOC8;
			if (!(LOC7)) goto LA10;
			LOC7 = (askip0 == fskip0);
			LA10: ;
			if (!LOC7) goto LA6;
			t0 = (*t0).sons->data[((NI) 0)];
			{
				if (!!((t0 == NIM_NIL))) goto LA13;
				t0 = skiptoobject_2mzjvZ9aRUzu3xJQF0NC3eQ(t0, (&askip0));
			}
			goto LA11;
			LA13: ;
			{
				goto LA5;
			}
			LA11: ;
			depth0 += ((NI) 1);
		} LA6: ;
	} LA5: ;
	{
		NIM_BOOL LOC18;
		LOC18 = (NIM_BOOL)0;
		LOC18 = !((t0 == NIM_NIL));
		if (!(LOC18)) goto LA19;
		LOC18 = (askip0 == fskip0);
		LA19: ;
		if (!LOC18) goto LA20;
		(*d0) = depth0;
		result0 = NIM_TRUE;
	}
	LA20: ;
	}BeforeRet: ;
	return result0;
}

N_NIMCALL(Ttype_LTUWCZolpovw9cWE3JBWSUw*, concretetype_LygDqx9ccbKjtPzfFJFniJQ)(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* c0, Ttype_LTUWCZolpovw9cWE3JBWSUw* t0) {
	Ttype_LTUWCZolpovw9cWE3JBWSUw* result0;
	result0 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
	switch ((*t0).kind) {
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 5):
	{
		result0 = NIM_NIL;
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 8):
	{
		{
			if (!(*c0).isnocall) goto LA5;
			result0 = t0;
		}
		goto LA3;
		LA5: ;
		{
			result0 = NIM_NIL;
		}
		LA3: ;
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 24):
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 19):
	{
		{
			if (!((*(*t0).sons->data[((NI) 0)]).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 3))) goto LA11;
			result0 = NIM_NIL;
		}
		goto LA9;
		LA11: ;
		{
			result0 = t0;
		}
		LA9: ;
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 12):
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 58):
	{
		result0 = t0;
		{
			while (1) {
				Tidobj_raN9cHVgzmvaXisezY9aGg9cg* LOC17;
				TNimObject* LOC18;
				LOC17 = (Tidobj_raN9cHVgzmvaXisezY9aGg9cg*)0;
				LOC17 = &t0->Sup;
				LOC18 = (TNimObject*)0;
				LOC18 = idtableget_D12lVDWWPrKae8szg3EYLw((*c0).bindings, LOC17);
				result0 = ((Ttype_LTUWCZolpovw9cWE3JBWSUw*) (LOC18));
				{
					if (!(result0 == NIM_NIL)) goto LA21;
					goto LA15;
				}
				LA21: ;
				{
					if (!!(((*result0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 12)))) goto LA25;
					goto LA15;
				}
				LA25: ;
			}
		} LA15: ;
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 9):
	{
		NimStringDesc* LOC28;
		NimStringDesc* LOC29;
		LOC28 = (NimStringDesc*)0;
		LOC29 = (NimStringDesc*)0;
		LOC29 = typetostring_iUZlBdvGqNPVN17wd9aVBNw(t0, ((Tprefereddesc_tnd4qt9c4xddV8oKV5zyusw) 0));
		LOC28 = rawNewString(LOC29->Sup.len + 21);
appendString(LOC28, ((NimStringDesc*) &T_EV5hHJmjIY9cla9b9be7fSVJQ_17));
appendString(LOC28, LOC29);
		internalerror_5XY9cUy7hZmUusM38U9cYYdw(LOC28);
		result0 = t0;
	}
	break;
	default:
	{
		result0 = t0;
	}
	break;
	}
	return result0;
}

N_NIMCALL(Ttyperelation_1IMf5P083XuEtWGxYaIXyQ, matchusertypeclass_NSmou3mZj0I2im7PS4zUIg)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* m0, Ttype_LTUWCZolpovw9cWE3JBWSUw* ff0, Ttype_LTUWCZolpovw9cWE3JBWSUw* a0) {
	Ttyperelation_1IMf5P083XuEtWGxYaIXyQ volatile result0;
	Ttype_LTUWCZolpovw9cWE3JBWSUw* body0;
	Tscope_1cQRXW6aAknk7ywAwjH3nw* LOC9;
	TSafePoint T_EV5hHJmjIY9cla9b9be7fSVJQ_19;
{	result0 = (Ttyperelation_1IMf5P083XuEtWGxYaIXyQ)0;
	body0 = skiptypes_pLCdCGDuirMe9cspwviV9aVA(ff0, IL64(9007199254740992));
	{
		Tnode_bROa11lyF5vxEN9aYNbHmhw* LOC5;
		NimStringDesc* LOC6;
		Tnode_bROa11lyF5vxEN9aYNbHmhw* LOC7;
		NimStringDesc* LOC8;
		if (!(((NI) 4) < (*c0).intypeclass)) goto LA3;
		LOC5 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
		LOC5 = HEX5BHEX5D_4mGh5VHoHoaSkXDYdG6pyAitersgen((*body0).n, ((NI) 3));
		LOC6 = (NimStringDesc*)0;
		LOC7 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
		LOC7 = HEX5BHEX5D_4mGh5VHoHoaSkXDYdG6pyAitersgen((*body0).n, ((NI) 3));
		LOC8 = (NimStringDesc*)0;
		LOC8 = HEX24_qX5C9b0n9bOP7jk69amC8dA7A_2(LOC7);
		LOC6 = rawNewString(LOC8->Sup.len + 29);
appendString(LOC6, LOC8);
appendString(LOC6, ((NimStringDesc*) &T_EV5hHJmjIY9cla9b9be7fSVJQ_18));
		localerror_GarD0CQJ5aQhoHekHYinVQ((*LOC5).info, LOC6);
		result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
		goto BeforeRet;
	}
	LA3: ;
	LOC9 = (Tscope_1cQRXW6aAknk7ywAwjH3nw*)0;
	LOC9 = openscope_en8ki68OmR49cqJSPN5rSJQ(c0);
	(*c0).intypeclass += ((NI) 1);
	pushSafePoint(&T_EV5hHJmjIY9cla9b9be7fSVJQ_19);
	T_EV5hHJmjIY9cla9b9be7fSVJQ_19.status = setjmp(T_EV5hHJmjIY9cla9b9be7fSVJQ_19.context);
	if (T_EV5hHJmjIY9cla9b9be7fSVJQ_19.status == 0) {
		Tnode_bROa11lyF5vxEN9aYNbHmhw* checkedbody0;
		Tnode_bROa11lyF5vxEN9aYNbHmhw* LOC43;
		Tnode_bROa11lyF5vxEN9aYNbHmhw* LOC44;
		{
			if (!((*ff0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 53))) goto LA13;
			{
				NI i_TkTXLx9aKuikr5jDq6lM2BA;
				NI HEX3Atmp_ha6HqhjXP4GPMH0ueVMKVQ;
				NI LOC16;
				NI res_1QLD2qdByswMKuXSNdlyJw;
				i_TkTXLx9aKuikr5jDq6lM2BA = (NI)0;
				HEX3Atmp_ha6HqhjXP4GPMH0ueVMKVQ = (NI)0;
				LOC16 = (NI)0;
				LOC16 = len_gG7hUAX9cA629ahMLVL3xN4w_2(ff0);
				HEX3Atmp_ha6HqhjXP4GPMH0ueVMKVQ = ((NI)(LOC16 - ((NI) 1)) - 1);
				res_1QLD2qdByswMKuXSNdlyJw = ((NI) 1);
				{
					while (1) {
						Tident_4umxGerWTHGPwUms7Yqu3g* typeparamname0;
						Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC19;
						Ttype_LTUWCZolpovw9cWE3JBWSUw* typ0;
						Tsym_AXG7xcvKqaxY6koRX1xkCw* volatile param0;
						if (!(res_1QLD2qdByswMKuXSNdlyJw <= HEX3Atmp_ha6HqhjXP4GPMH0ueVMKVQ)) goto LA18;
						i_TkTXLx9aKuikr5jDq6lM2BA = res_1QLD2qdByswMKuXSNdlyJw;
						LOC19 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
						LOC19 = base_46gPaVDDGhiU69b2oKDJZuA(ff0);
						typeparamname0 = (*(*(*LOC19).sons->data[(NI)(i_TkTXLx9aKuikr5jDq6lM2BA - ((NI) 1))]).sym).name;
						typ0 = (*ff0).sons->data[i_TkTXLx9aKuikr5jDq6lM2BA];
						param0 = (Tsym_AXG7xcvKqaxY6koRX1xkCw*)0;
						switch ((*typ0).kind) {
						case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 59):
						{
							param0 = newsym_2uJTpCZGZAi7a4eAm1ds8Q(((Tsymkind_cNCW9acsSznmEccl1fgQwkw) 10), typeparamname0, (*body0).sym, (*(*body0).sym).info);
							asgnRefNoCycle((void**) (&(*param0).typ), base_46gPaVDDGhiU69b2oKDJZuA(typ0));
							asgnRefNoCycle((void**) (&(*param0).ast), (*typ0).n);
						}
						break;
						case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 60):
						{
							param0 = newsym_2uJTpCZGZAi7a4eAm1ds8Q(((Tsymkind_cNCW9acsSznmEccl1fgQwkw) 8), typeparamname0, (*body0).sym, (*(*body0).sym).info);
							asgnRefNoCycle((void**) (&(*param0).typ), typ0);
						}
						break;
						default:
						{
							param0 = newsym_2uJTpCZGZAi7a4eAm1ds8Q(((Tsymkind_cNCW9acsSznmEccl1fgQwkw) 7), typeparamname0, (*body0).sym, (*(*body0).sym).info);
							asgnRefNoCycle((void**) (&(*param0).typ), maketypedesc_CqYEBJKDkKTW89cDtM9aYg4g(c0, typ0));
						}
						break;
						}
						adddecl_n1KYyMdrfFhXnSjpmEHg9cA_2(c0, param0);
						res_1QLD2qdByswMKuXSNdlyJw += ((NI) 1);
					} LA18: ;
				}
			}
		}
		LA13: ;
		{
			Tnode_bROa11lyF5vxEN9aYNbHmhw* param_oyFU9bVn85NUQ0Kq6Fdh62Q;
			Tnode_bROa11lyF5vxEN9aYNbHmhw* HEX3Atmp_ha6HqhjXP4GPMH0ueVMKVQ_2;
			param_oyFU9bVn85NUQ0Kq6Fdh62Q = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
			HEX3Atmp_ha6HqhjXP4GPMH0ueVMKVQ_2 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
			HEX3Atmp_ha6HqhjXP4GPMH0ueVMKVQ_2 = HEX5BHEX5D_4mGh5VHoHoaSkXDYdG6pyAitersgen((*body0).n, ((NI) 0));
			{
				NI i_TkTXLx9aKuikr5jDq6lM2BA_2;
				NI HEX3Atmp_ha6HqhjXP4GPMH0ueVMKVQ_3;
				NI LOC25;
				NI res_1QLD2qdByswMKuXSNdlyJw_2;
				i_TkTXLx9aKuikr5jDq6lM2BA_2 = (NI)0;
				HEX3Atmp_ha6HqhjXP4GPMH0ueVMKVQ_3 = (NI)0;
				LOC25 = (NI)0;
				LOC25 = len_CdME9baJhvveuPEDZE9bXoxAlambdalifting(HEX3Atmp_ha6HqhjXP4GPMH0ueVMKVQ_2);
				HEX3Atmp_ha6HqhjXP4GPMH0ueVMKVQ_3 = (LOC25 - 1);
				res_1QLD2qdByswMKuXSNdlyJw_2 = ((NI) 0);
				{
					while (1) {
						Tnode_bROa11lyF5vxEN9aYNbHmhw* volatile dummyname0;
						Ttype_LTUWCZolpovw9cWE3JBWSUw* volatile dummytype0;
						Tsym_AXG7xcvKqaxY6koRX1xkCw* dummyparam0;
						if (!(res_1QLD2qdByswMKuXSNdlyJw_2 <= HEX3Atmp_ha6HqhjXP4GPMH0ueVMKVQ_3)) goto LA27;
						i_TkTXLx9aKuikr5jDq6lM2BA_2 = res_1QLD2qdByswMKuXSNdlyJw_2;
						param_oyFU9bVn85NUQ0Kq6Fdh62Q = (*HEX3Atmp_ha6HqhjXP4GPMH0ueVMKVQ_2).kindU.S6.sons->data[i_TkTXLx9aKuikr5jDq6lM2BA_2];
						dummyname0 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
						dummytype0 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
						{
							if (!((*param_oyFU9bVn85NUQ0Kq6Fdh62Q).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 143))) goto LA30;
							dummyname0 = HEX5BHEX5D_4mGh5VHoHoaSkXDYdG6pyAitersgen(param_oyFU9bVn85NUQ0Kq6Fdh62Q, ((NI) 0));
							{
								if (!!(((*a0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 23)))) goto LA34;
								dummytype0 = makevartype_mDAs5V37nZYC3ByzC3o7dQ(c0, a0);
							}
							goto LA32;
							LA34: ;
							{
								dummytype0 = a0;
							}
							LA32: ;
						}
						goto LA28;
						LA30: ;
						{
							dummyname0 = param_oyFU9bVn85NUQ0Kq6Fdh62Q;
							dummytype0 = a0;
						}
						LA28: ;
						{
							NimStringDesc* LOC42;
							if (!!(((*dummyname0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 2)))) goto LA40;
							LOC42 = (NimStringDesc*)0;
							LOC42 = HEX24_k53Ge4e9cDjc7y9c5uML7sPQ(T_EV5hHJmjIY9cla9b9be7fSVJQ_20);
							internalerror_5XY9cUy7hZmUusM38U9cYYdw(LOC42);
						}
						LA40: ;
						dummyparam0 = newsym_2uJTpCZGZAi7a4eAm1ds8Q(((Tsymkind_cNCW9acsSznmEccl1fgQwkw) 8), (*dummyname0).kindU.S5.ident, (*body0).sym, (*(*body0).sym).info);
						asgnRefNoCycle((void**) (&(*dummyparam0).typ), dummytype0);
						adddecl_n1KYyMdrfFhXnSjpmEHg9cA_2(c0, dummyparam0);
						res_1QLD2qdByswMKuXSNdlyJw_2 += ((NI) 1);
					} LA27: ;
				}
			}
		}
		LOC43 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
		LOC43 = HEX5BHEX5D_4mGh5VHoHoaSkXDYdG6pyAitersgen((*body0).n, ((NI) 3));
		LOC44 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
		LOC44 = copytree_lz8T1F9c0YwEOpUnrAUYgjg_2(LOC43);
		checkedbody0 = (*c0).semtryexpr(c0, LOC44, 0);
		{
			if (!(checkedbody0 == NIM_NIL)) goto LA47;
			result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
			popSafePoint();
			(*c0).intypeclass -= ((NI) 1);
			closescope_r2b7lx9cCbS9b0TH9b5UCNxAA(c0);
			goto BeforeRet;
		}
		LA47: ;
		result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8);
		popSafePoint();
		(*c0).intypeclass -= ((NI) 1);
		closescope_r2b7lx9cCbS9b0TH9b5UCNxAA(c0);
		goto BeforeRet;
		popSafePoint();
	}
	else {
		popSafePoint();
	}
	{
		(*c0).intypeclass -= ((NI) 1);
		closescope_r2b7lx9cCbS9b0TH9b5UCNxAA(c0);
	}
	if (T_EV5hHJmjIY9cla9b9be7fSVJQ_19.status != 0) reraiseException();
	}BeforeRet: ;
	return result0;
}

N_NIMCALL(Ttyperelation_1IMf5P083XuEtWGxYaIXyQ, typerel_0fsYV9bVZA2eXpHTIQspjZA)(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* c0, Ttype_LTUWCZolpovw9cWE3JBWSUw* f0, Ttype_LTUWCZolpovw9cWE3JBWSUw* aorig0, NIM_BOOL dobind0) {
	Ttyperelation_1IMf5P083XuEtWGxYaIXyQ result0;
	Ttype_LTUWCZolpovw9cWE3JBWSUw* a0;
	Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC9;
{	result0 = (Ttyperelation_1IMf5P083XuEtWGxYaIXyQ)0;
	result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
	{
		if (!((*f0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 6))) goto LA3;
		{
			if (!!((aorig0 == NIM_NIL))) goto LA7;
			put_JoRvap9abGYCKt6dvPFvsFAsigmatch(c0, f0, aorig0);
		}
		LA7: ;
		result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8);
		goto BeforeRet;
	}
	LA3: ;
	LOC9 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
	LOC9 = skiptypes_pLCdCGDuirMe9cspwviV9aVA(aorig0, IL64(576460752311812096));
	a0 = maybeskipdistinct_b9cb0j2qLR8Vva3Tro7wfEA(LOC9, (*c0).calleesym);
	{
		NIM_BOOL LOC12;
		Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC14;
		Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC17;
		LOC12 = (NIM_BOOL)0;
		LOC12 = ((2064 &((NU64)1<<((NU)((*a0).kind)&63U)))!=0);
		if (!(LOC12)) goto LA13;
		LOC14 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
		LOC14 = skiptypes_pLCdCGDuirMe9cspwviV9aVA(f0, 8388608);
		LOC12 = !(((IL64(574208952489745920) &((NU64)1<<((NU)((*LOC14).kind)&63U)))!=0));
		LA13: ;
		if (!LOC12) goto LA15;
		LOC17 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
		LOC17 = lastson_E41DMKHtT9c6sAMyyvhmSIw(a0);
		result0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, f0, LOC17, NIM_TRUE);
		goto BeforeRet;
	}
	LA15: ;
	switch ((*a0).kind) {
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 56):
	{
		result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8);
		{
			Ttype_LTUWCZolpovw9cWE3JBWSUw* branch_iR6OUatgymHYrrJu9b4n2xA;
			TY_zuqP4Riz26Oi5fWgPYVEgA* HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ;
			NI i_dnxDOYngS2xNLN57hKpsNg;
			NI L_rjATi9b0T48QHWapYqbQUbg;
			branch_iR6OUatgymHYrrJu9b4n2xA = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
			HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ = (TY_zuqP4Riz26Oi5fWgPYVEgA*)0;
			HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ = (*a0).sons;
			i_dnxDOYngS2xNLN57hKpsNg = ((NI) 0);
			L_rjATi9b0T48QHWapYqbQUbg = (HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ ? HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ->Sup.len : 0);
			{
				while (1) {
					Ttyperelation_1IMf5P083XuEtWGxYaIXyQ x0;
					if (!(i_dnxDOYngS2xNLN57hKpsNg < L_rjATi9b0T48QHWapYqbQUbg)) goto LA21;
					branch_iR6OUatgymHYrrJu9b4n2xA = HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ->data[i_dnxDOYngS2xNLN57hKpsNg];
					x0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, f0, branch_iR6OUatgymHYrrJu9b4n2xA, NIM_FALSE);
					{
						if (!(x0 == ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0))) goto LA24;
						result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
						goto BeforeRet;
					}
					LA24: ;
					{
						if (!(x0 < result0)) goto LA28;
						result0 = x0;
					}
					LA28: ;
					i_dnxDOYngS2xNLN57hKpsNg += ((NI) 1);
				} LA21: ;
			}
		}
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 55):
	{
		{
			Ttype_LTUWCZolpovw9cWE3JBWSUw* branch_iR6OUatgymHYrrJu9b4n2xA_2;
			TY_zuqP4Riz26Oi5fWgPYVEgA* HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ_2;
			NI i_dnxDOYngS2xNLN57hKpsNg_2;
			NI L_rjATi9b0T48QHWapYqbQUbg_2;
			branch_iR6OUatgymHYrrJu9b4n2xA_2 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
			HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ_2 = (TY_zuqP4Riz26Oi5fWgPYVEgA*)0;
			HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ_2 = (*a0).sons;
			i_dnxDOYngS2xNLN57hKpsNg_2 = ((NI) 0);
			L_rjATi9b0T48QHWapYqbQUbg_2 = (HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ_2 ? HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ_2->Sup.len : 0);
			{
				while (1) {
					Ttyperelation_1IMf5P083XuEtWGxYaIXyQ x0;
					if (!(i_dnxDOYngS2xNLN57hKpsNg_2 < L_rjATi9b0T48QHWapYqbQUbg_2)) goto LA33;
					branch_iR6OUatgymHYrrJu9b4n2xA_2 = HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ_2->data[i_dnxDOYngS2xNLN57hKpsNg_2];
					x0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, f0, branch_iR6OUatgymHYrrJu9b4n2xA_2, NIM_FALSE);
					{
						if (!!((x0 == ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0)))) goto LA36;
						{
							if (!(((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8) <= x0)) goto LA40;
							result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8);
						}
						goto LA38;
						LA40: ;
						{
							result0 = x0;
						}
						LA38: ;
						goto BeforeRet;
					}
					LA36: ;
					i_dnxDOYngS2xNLN57hKpsNg_2 += ((NI) 1);
				} LA33: ;
			}
		}
		result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 57):
	{
		switch ((*f0).kind) {
		case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 57):
		{
			Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC45;
			Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC46;
			LOC45 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
			LOC45 = lastson_E41DMKHtT9c6sAMyyvhmSIw(a0);
			LOC46 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
			LOC46 = lastson_E41DMKHtT9c6sAMyyvhmSIw(f0);
			result0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, LOC45, LOC46, NIM_TRUE);
			goto BeforeRet;
		}
		break;
		default:
		{
			{
				if (!((*f0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 58))) goto LA50;
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8);
			}
			goto LA48;
			LA50: ;
			{
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
			}
			LA48: ;
			goto BeforeRet;
		}
		break;
		}
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 58):
	{
		{
			if (!((*f0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 58))) goto LA56;
			result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8);
		}
		goto LA54;
		LA56: ;
		{
			result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
		}
		LA54: ;
		goto BeforeRet;
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 52):
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 53):
	{
		Ttyperelation_1IMf5P083XuEtWGxYaIXyQ x0;
		x0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, a0, f0, NIM_FALSE);
		{
			if (!(((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8) <= x0)) goto LA62;
			result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8);
			goto BeforeRet;
		}
		LA62: ;
	}
	break;
	default:
	{
	}
	break;
	}
	switch ((*f0).kind) {
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 14):
	{
		{
			NIM_BOOL LOC68;
			LOC68 = (NIM_BOOL)0;
			LOC68 = ((*a0).kind == (*f0).kind);
			if (!(LOC68)) goto LA69;
			LOC68 = sameenumtypes_8v4PltvnKUFVoINNTE260gsigmatch(f0, a0);
			LA69: ;
			if (!LOC68) goto LA70;
			result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 10);
		}
		goto LA66;
		LA70: ;
		{
			Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC73;
			NIM_BOOL LOC74;
			LOC73 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
			LOC73 = skiptypes_pLCdCGDuirMe9cspwviV9aVA(a0, 1048576);
			LOC74 = (NIM_BOOL)0;
			LOC74 = sameenumtypes_8v4PltvnKUFVoINNTE260gsigmatch(f0, LOC73);
			if (!LOC74) goto LA75;
			result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 3);
		}
		goto LA66;
		LA75: ;
		LA66: ;
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 1):
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 2):
	{
		{
			if (!((*a0).kind == (*f0).kind)) goto LA80;
			result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 10);
		}
		goto LA78;
		LA80: ;
		{
			Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC83;
			LOC83 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
			LOC83 = skiptypes_pLCdCGDuirMe9cspwviV9aVA(a0, 1048576);
			if (!((*LOC83).kind == (*f0).kind)) goto LA84;
			result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 3);
		}
		goto LA78;
		LA84: ;
		LA78: ;
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 20):
	{
		{
			Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC96;
			Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC97;
			if (!((*a0).kind == (*f0).kind)) goto LA89;
			{
				Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC93;
				LOC93 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
				LOC93 = base_46gPaVDDGhiU69b2oKDJZuA(f0);
				if (!((*LOC93).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 0))) goto LA94;
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8);
				goto BeforeRet;
			}
			LA94: ;
			LOC96 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
			LOC96 = base_46gPaVDDGhiU69b2oKDJZuA(f0);
			LOC97 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
			LOC97 = base_46gPaVDDGhiU69b2oKDJZuA(a0);
			result0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, LOC96, LOC97, NIM_TRUE);
			{
				if (!!(((257 &(1U<<((NU)(result0)&15U)))!=0))) goto LA100;
				{
					NI i_dnxDOYngS2xNLN57hKpsNg_3;
					NI res_UVwF9ch9cOfZi4yH3XO9cfoGA;
					i_dnxDOYngS2xNLN57hKpsNg_3 = (NI)0;
					res_UVwF9ch9cOfZi4yH3XO9cfoGA = ((NI) 0);
					{
						while (1) {
							if (!(res_UVwF9ch9cOfZi4yH3XO9cfoGA <= ((NI) 1))) goto LA104;
							i_dnxDOYngS2xNLN57hKpsNg_3 = res_UVwF9ch9cOfZi4yH3XO9cfoGA;
							{
								Tnode_bROa11lyF5vxEN9aYNbHmhw* LOC107;
								Tnode_bROa11lyF5vxEN9aYNbHmhw* LOC110;
								LOC107 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
								LOC107 = HEX5BHEX5D_4mGh5VHoHoaSkXDYdG6pyAitersgen((*f0).n, i_dnxDOYngS2xNLN57hKpsNg_3);
								if (!((*LOC107).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 62))) goto LA108;
								LOC110 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
								LOC110 = HEX5BHEX5D_4mGh5VHoHoaSkXDYdG6pyAitersgen((*f0).n, i_dnxDOYngS2xNLN57hKpsNg_3);
								asgnRefNoCycle((void**) (&(*(*f0).n).kindU.S6.sons->data[i_dnxDOYngS2xNLN57hKpsNg_3]), tryresolvingstaticexpr_9c6ZlcqOU7h9ajbZLjoxOM0w(c0, LOC110));
							}
							LA108: ;
							res_UVwF9ch9cOfZi4yH3XO9cfoGA += ((NI) 1);
						} LA104: ;
					}
				}
				result0 = typerangerel_h89bCS2h619a5vh77e9bOGAjQ(f0, a0);
			}
			LA100: ;
		}
		goto LA87;
		LA89: ;
		{
			{
				Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC114;
				LOC114 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
				LOC114 = skiptypes_pLCdCGDuirMe9cspwviV9aVA(f0, 1048576);
				if (!((*LOC114).kind == (*a0).kind)) goto LA115;
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 2);
			}
			goto LA112;
			LA115: ;
			{
				Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC118;
				NIM_BOOL LOC119;
				LOC118 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
				LOC118 = skiptypes_pLCdCGDuirMe9cspwviV9aVA(f0, 1048576);
				LOC119 = (NIM_BOOL)0;
				LOC119 = isconvertibletorange_02bS6aQ1YnsMHEF1Do9aHsg(LOC118, a0);
				if (!LOC119) goto LA120;
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 1);
			}
			goto LA112;
			LA120: ;
			LA112: ;
		}
		LA87: ;
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 31):
	{
		result0 = handlerange_9bd6b9aVP68tDeJTTDO30vSg(f0, a0, ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 32), ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 34));
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 32):
	{
		result0 = handlerange_9bd6b9aVP68tDeJTTDO30vSg(f0, a0, ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 32), ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 32));
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 33):
	{
		result0 = handlerange_9bd6b9aVP68tDeJTTDO30vSg(f0, a0, ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 32), ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 33));
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 34):
	{
		result0 = handlerange_9bd6b9aVP68tDeJTTDO30vSg(f0, a0, ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 32), ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 34));
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 35):
	{
		result0 = handlerange_9bd6b9aVP68tDeJTTDO30vSg(f0, a0, ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 31), ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 35));
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 40):
	{
		result0 = handlerange_9bd6b9aVP68tDeJTTDO30vSg(f0, a0, ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 41), ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 43));
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 41):
	{
		result0 = handlerange_9bd6b9aVP68tDeJTTDO30vSg(f0, a0, ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 41), ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 41));
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 42):
	{
		result0 = handlerange_9bd6b9aVP68tDeJTTDO30vSg(f0, a0, ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 41), ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 42));
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 43):
	{
		result0 = handlerange_9bd6b9aVP68tDeJTTDO30vSg(f0, a0, ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 41), ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 43));
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 44):
	{
		result0 = handlerange_9bd6b9aVP68tDeJTTDO30vSg(f0, a0, ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 40), ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 44));
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 36):
	{
		result0 = handlefloatrange_2C61PQXVzju4z2HN0r7b0g(f0, a0);
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 37):
	{
		result0 = handlefloatrange_2C61PQXVzju4z2HN0r7b0g(f0, a0);
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 38):
	{
		result0 = handlefloatrange_2C61PQXVzju4z2HN0r7b0g(f0, a0);
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 39):
	{
		result0 = handlefloatrange_2C61PQXVzju4z2HN0r7b0g(f0, a0);
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 23):
	{
		{
			Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC141;
			Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC142;
			if (!((*aorig0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 23))) goto LA139;
			LOC141 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
			LOC141 = base_46gPaVDDGhiU69b2oKDJZuA(f0);
			LOC142 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
			LOC142 = base_46gPaVDDGhiU69b2oKDJZuA(aorig0);
			result0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, LOC141, LOC142, NIM_TRUE);
		}
		goto LA137;
		LA139: ;
		{
			Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC144;
			LOC144 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
			LOC144 = base_46gPaVDDGhiU69b2oKDJZuA(f0);
			result0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, LOC144, aorig0, NIM_TRUE);
		}
		LA137: ;
		{
			NIM_BOOL LOC147;
			Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC149;
			Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC150;
			LOC147 = (NIM_BOOL)0;
			LOC147 = (result0 <= ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 4));
			if (!(LOC147)) goto LA148;
			LOC149 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
			LOC149 = lastson_E41DMKHtT9c6sAMyyvhmSIw(f0);
			LOC150 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
			LOC150 = skiptypes_pLCdCGDuirMe9cspwviV9aVA(LOC149, abstractinst_dLigiD0wrfdW59cejPpTktA);
			LOC147 = ((14680064 &((NU64)1<<((NU)((*LOC150).kind)&63U)))!=0);
			LA148: ;
			if (!LOC147) goto LA151;
			result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
		}
		LA151: ;
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 16):
	{
		switch ((*a0).kind) {
		case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 16):
		{
			Ttype_LTUWCZolpovw9cWE3JBWSUw* frange0;
			frange0 = (*f0).sons->data[((NI) 0)];
			{
				Ttype_LTUWCZolpovw9cWE3JBWSUw* prev0;
				Tidobj_raN9cHVgzmvaXisezY9aGg9cg* LOC159;
				TNimObject* LOC160;
				if (!((*frange0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 12))) goto LA157;
				LOC159 = (Tidobj_raN9cHVgzmvaXisezY9aGg9cg*)0;
				LOC159 = &frange0->Sup;
				LOC160 = (TNimObject*)0;
				LOC160 = idtableget_D12lVDWWPrKae8szg3EYLw((*c0).bindings, LOC159);
				prev0 = ((Ttype_LTUWCZolpovw9cWE3JBWSUw*) (LOC160));
				{
					if (!(prev0 == NIM_NIL)) goto LA163;
					put_JoRvap9abGYCKt6dvPFvsFAsigmatch(c0, frange0, (*a0).sons->data[((NI) 0)]);
					frange0 = a0;
				}
				goto LA161;
				LA163: ;
				{
					frange0 = prev0;
				}
				LA161: ;
			}
			LA157: ;
			result0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, (*f0).sons->data[((NI) 1)], (*a0).sons->data[((NI) 1)], NIM_TRUE);
			{
				if (!(result0 < ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8))) goto LA168;
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
				goto BeforeRet;
			}
			LA168: ;
			{
				NIM_BOOL LOC172;
				NIM_BOOL LOC173;
				NI LOC175;
				Tnode_bROa11lyF5vxEN9aYNbHmhw* LOC177;
				Tnode_bROa11lyF5vxEN9aYNbHmhw* len0;
				Tnode_bROa11lyF5vxEN9aYNbHmhw* LOC190;
				LOC172 = (NIM_BOOL)0;
				LOC173 = (NIM_BOOL)0;
				LOC173 = !(((*frange0).n == NIM_NIL));
				if (!(LOC173)) goto LA174;
				LOC175 = (NI)0;
				LOC175 = len_CdME9baJhvveuPEDZE9bXoxAlambdalifting((*frange0).n);
				LOC173 = (((NI) 1) < LOC175);
				LA174: ;
				LOC172 = LOC173;
				if (!(LOC172)) goto LA176;
				LOC177 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
				LOC177 = HEX5BHEX5D_4mGh5VHoHoaSkXDYdG6pyAitersgen((*frange0).n, ((NI) 1));
				LOC172 = ((*LOC177).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 62));
				LA176: ;
				if (!LOC172) goto LA178;
				{
					Ttype_LTUWCZolpovw9cWE3JBWSUw* rangestatict0;
					Tnode_bROa11lyF5vxEN9aYNbHmhw* LOC184;
					Tnode_bROa11lyF5vxEN9aYNbHmhw* LOC185;
					Tnode_bROa11lyF5vxEN9aYNbHmhw* LOC186;
					Ttype_LTUWCZolpovw9cWE3JBWSUw* replacementt0;
					TY_zuqP4Riz26Oi5fWgPYVEgA* LOC187;
					TY_BF9aKj6RAH9ccQDWaEKQ1HOw LOC188;
					NI64 inputupperbound0;
					Tnode_bROa11lyF5vxEN9aYNbHmhw* LOC189;
					if (!(((*frange0).flags &(1U<<((NU)(((Ttypeflag_x2m5g1NpbmDig4wLT3Ylhw) 9))&31U)))!=0)) goto LA182;
					LOC184 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
					LOC184 = HEX5BHEX5D_4mGh5VHoHoaSkXDYdG6pyAitersgen((*frange0).n, ((NI) 1));
					LOC185 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
					LOC185 = HEX5BHEX5D_4mGh5VHoHoaSkXDYdG6pyAitersgen(LOC184, ((NI) 0));
					LOC186 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
					LOC186 = HEX5BHEX5D_4mGh5VHoHoaSkXDYdG6pyAitersgen(LOC185, ((NI) 1));
					rangestatict0 = (*LOC186).typ;
					LOC187 = (TY_zuqP4Riz26Oi5fWgPYVEgA*)0;
					LOC187 = (TY_zuqP4Riz26Oi5fWgPYVEgA*) newSeq((&NTI_zuqP4Riz26Oi5fWgPYVEgA), 1);
					memset((void*)LOC188, 0, sizeof(LOC188));
					LOC188[0] = getsystype_dewjtBqyEbcVGQRaQFtDAw(((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 31));
					asgnRefNoCycle((void**) (&LOC187->data[0]), LOC188[0]);
					replacementt0 = newtypewithsons_7xhH3IRNjYY0XJGePt8pLA((*c0).c, ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 59), LOC187);
					LOC189 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
					LOC189 = HEX5BHEX5D_4mGh5VHoHoaSkXDYdG6pyAitersgen((*(*a0).sons->data[((NI) 0)]).n, ((NI) 1));
					inputupperbound0 = (*LOC189).kindU.S1.intval;
					asgnRefNoCycle((void**) (&(*replacementt0).n), newintnode_v2VGJAZNfKPVngZCqEXQtA(((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 6), (NI64)(inputupperbound0 + IL64(1))));
					put_JoRvap9abGYCKt6dvPFvsFAsigmatch(c0, rangestatict0, replacementt0);
					result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8);
					goto BeforeRet;
				}
				LA182: ;
				LOC190 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
				LOC190 = HEX5BHEX5D_4mGh5VHoHoaSkXDYdG6pyAitersgen((*frange0).n, ((NI) 1));
				len0 = tryresolvingstaticexpr_9c6ZlcqOU7h9ajbZLjoxOM0w(c0, LOC190);
				{
					NIM_BOOL LOC193;
					NI64 LOC195;
					LOC193 = (NIM_BOOL)0;
					LOC193 = ((*len0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 6));
					if (!(LOC193)) goto LA194;
					LOC195 = (NI64)0;
					LOC195 = lengthord_HUiBYxvKiECXCv8BzQNheg_3(a0);
					LOC193 = ((NI64)((*len0).kindU.S1.intval + IL64(1)) == LOC195);
					LA194: ;
					if (!LOC193) goto LA196;
					goto BeforeRet;
				}
				goto LA191;
				LA196: ;
				{
					result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
					goto BeforeRet;
				}
				LA191: ;
			}
			goto LA170;
			LA178: ;
			{
				NI64 LOC200;
				NI64 LOC201;
				LOC200 = (NI64)0;
				LOC200 = lengthord_HUiBYxvKiECXCv8BzQNheg_3(frange0);
				LOC201 = (NI64)0;
				LOC201 = lengthord_HUiBYxvKiECXCv8BzQNheg_3(a0);
				if (!!((LOC200 == LOC201))) goto LA202;
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
			}
			goto LA170;
			LA202: ;
			LA170: ;
		}
		break;
		default:
		{
		}
		break;
		}
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 27):
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 48):
	{
		{
			if (!((*f0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 48))) goto LA208;
			{
				if (!(((*(*f0).sons->data[((NI) 0)]).flags &(1U<<((NU)(((Ttypeflag_x2m5g1NpbmDig4wLT3Ylhw) 0))&31U)))!=0)) goto LA212;
				{
					if (!((*(*f0).sons->data[((NI) 0)]).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 6))) goto LA216;
					goto BeforeRet;
				}
				LA216: ;
			}
			goto LA210;
			LA212: ;
			{
				if (!((*(*f0).sons->data[((NI) 0)]).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 7))) goto LA219;
				goto BeforeRet;
			}
			goto LA210;
			LA219: ;
			LA210: ;
		}
		LA208: ;
		switch ((*a0).kind) {
		case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 27):
		case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 48):
		{
			Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC222;
			Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC223;
			LOC222 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
			LOC222 = base_46gPaVDDGhiU69b2oKDJZuA(f0);
			LOC223 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
			LOC223 = base_46gPaVDDGhiU69b2oKDJZuA(a0);
			result0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, LOC222, LOC223, NIM_TRUE);
			{
				if (!(result0 < ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8))) goto LA226;
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
			}
			LA226: ;
		}
		break;
		case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 16):
		{
			{
				NIM_BOOL LOC231;
				LOC231 = (NIM_BOOL)0;
				LOC231 = !(((*(*f0).sons->data[((NI) 0)]).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 12)));
				if (!(LOC231)) goto LA232;
				LOC231 = ((*(*a0).sons->data[((NI) 1)]).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 3));
				LA232: ;
				if (!LOC231) goto LA233;
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 3);
			}
			goto LA229;
			LA233: ;
			{
				Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC236;
				Ttyperelation_1IMf5P083XuEtWGxYaIXyQ LOC237;
				LOC236 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
				LOC236 = base_46gPaVDDGhiU69b2oKDJZuA(f0);
				LOC237 = (Ttyperelation_1IMf5P083XuEtWGxYaIXyQ)0;
				LOC237 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, LOC236, (*a0).sons->data[((NI) 1)], NIM_TRUE);
				if (!(((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8) <= LOC237)) goto LA238;
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 1);
			}
			goto LA229;
			LA238: ;
			LA229: ;
		}
		break;
		case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 24):
		{
			{
				NIM_BOOL LOC243;
				LOC243 = (NIM_BOOL)0;
				LOC243 = !(((*(*f0).sons->data[((NI) 0)]).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 12)));
				if (!(LOC243)) goto LA244;
				LOC243 = ((*(*a0).sons->data[((NI) 0)]).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 3));
				LA244: ;
				if (!LOC243) goto LA245;
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 1);
			}
			goto LA241;
			LA245: ;
			{
				Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC248;
				Ttyperelation_1IMf5P083XuEtWGxYaIXyQ LOC249;
				LOC248 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
				LOC248 = base_46gPaVDDGhiU69b2oKDJZuA(f0);
				LOC249 = (Ttyperelation_1IMf5P083XuEtWGxYaIXyQ)0;
				LOC249 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, LOC248, (*a0).sons->data[((NI) 0)], NIM_TRUE);
				if (!(((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8) <= LOC249)) goto LA250;
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 1);
			}
			goto LA241;
			LA250: ;
			LA241: ;
		}
		break;
		case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 28):
		{
			{
				if (!((*f0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 27))) goto LA255;
				{
					if (!((*(*f0).sons->data[((NI) 0)]).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 2))) goto LA259;
					result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 1);
				}
				goto LA257;
				LA259: ;
				{
					NIM_BOOL LOC262;
					NIM_BOOL LOC263;
					NI LOC265;
					Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC267;
					Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC268;
					Ttyperelation_1IMf5P083XuEtWGxYaIXyQ LOC269;
					LOC262 = (NIM_BOOL)0;
					LOC263 = (NIM_BOOL)0;
					LOC263 = ((*(*f0).sons->data[((NI) 0)]).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 12));
					if (!(LOC263)) goto LA264;
					LOC265 = (NI)0;
					LOC265 = len_gG7hUAX9cA629ahMLVL3xN4w_2(a0);
					LOC263 = (((NI) 0) < LOC265);
					LA264: ;
					LOC262 = LOC263;
					if (!(LOC262)) goto LA266;
					LOC267 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
					LOC267 = base_46gPaVDDGhiU69b2oKDJZuA(f0);
					LOC268 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
					LOC268 = base_46gPaVDDGhiU69b2oKDJZuA(a0);
					LOC269 = (Ttyperelation_1IMf5P083XuEtWGxYaIXyQ)0;
					LOC269 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, LOC267, LOC268, NIM_TRUE);
					LOC262 = (((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8) <= LOC269);
					LA266: ;
					if (!LOC262) goto LA270;
					result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 1);
				}
				goto LA257;
				LA270: ;
				LA257: ;
			}
			LA255: ;
		}
		break;
		default:
		{
		}
		break;
		}
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 24):
	{
		switch ((*a0).kind) {
		case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 24):
		{
			{
				NIM_BOOL LOC277;
				LOC277 = (NIM_BOOL)0;
				LOC277 = !(((*(*f0).sons->data[((NI) 0)]).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 12)));
				if (!(LOC277)) goto LA278;
				LOC277 = ((*(*a0).sons->data[((NI) 0)]).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 3));
				LA278: ;
				if (!LOC277) goto LA279;
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 3);
			}
			goto LA275;
			LA279: ;
			{
				result0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, (*f0).sons->data[((NI) 0)], (*a0).sons->data[((NI) 0)], NIM_TRUE);
				{
					if (!(result0 < ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8))) goto LA284;
					result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
				}
				goto LA282;
				LA284: ;
				{
					NIM_BOOL LOC287;
					LOC287 = (NIM_BOOL)0;
					LOC287 = (((*f0).flags &(1U<<((NU)(((Ttypeflag_x2m5g1NpbmDig4wLT3Ylhw) 16))&31U)))!=0);
					if (!(LOC287)) goto LA288;
					LOC287 = !((((*a0).flags &(1U<<((NU)(((Ttypeflag_x2m5g1NpbmDig4wLT3Ylhw) 16))&31U)))!=0));
					LA288: ;
					if (!LOC287) goto LA289;
					result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 1);
				}
				goto LA282;
				LA289: ;
				LA282: ;
			}
			LA275: ;
		}
		break;
		case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 5):
		{
			result0 = allowsnil_59aII9aHhpaoZviau1LkOWWwsigmatch(f0);
		}
		break;
		default:
		{
		}
		break;
		}
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 15):
	{
		{
			NIM_BOOL LOC296;
			Ttype_LTUWCZolpovw9cWE3JBWSUw* x0;
			LOC296 = (NIM_BOOL)0;
			LOC296 = isordinaltype_XI7vH8jtAcp7rWqTmfZOSg_2(a0);
			if (!LOC296) goto LA297;
			{
				if (!((*a0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 15))) goto LA301;
				x0 = (*a0).sons->data[((NI) 0)];
			}
			goto LA299;
			LA301: ;
			{
				x0 = a0;
			}
			LA299: ;
			{
				if (!((*(*f0).sons->data[((NI) 0)]).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 0))) goto LA306;
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8);
			}
			goto LA304;
			LA306: ;
			{
				result0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, (*f0).sons->data[((NI) 0)], x0, NIM_TRUE);
				{
					if (!(result0 < ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8))) goto LA311;
					result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
				}
				LA311: ;
			}
			LA304: ;
		}
		goto LA294;
		LA297: ;
		{
			if (!((*a0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 12))) goto LA314;
			result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8);
		}
		goto LA294;
		LA314: ;
		LA294: ;
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 30):
	{
		internalerror_5XY9cUy7hZmUusM38U9cYYdw(((NimStringDesc*) &T_EV5hHJmjIY9cla9b9be7fSVJQ_14));
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 5):
	{
		{
			if (!((*a0).kind == (*f0).kind)) goto LA320;
			result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 10);
		}
		LA320: ;
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 18):
	{
		{
			if (!((*a0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 18))) goto LA325;
			result0 = recordrel_ATXQei1OP9acdbktDwpAl9ag(c0, f0, a0);
		}
		LA325: ;
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 17):
	{
		{
			if (!((*a0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 17))) goto LA330;
			{
				NIM_BOOL LOC334;
				LOC334 = (NIM_BOOL)0;
				LOC334 = sameobjecttypes_bXxjiP8HPzKjOso3AVsG5w(f0, a0);
				if (!LOC334) goto LA335;
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 10);
			}
			goto LA332;
			LA335: ;
			{
				NI depth0;
				depth0 = isobjectsubtype_AAFgb9cf1jok4tDnzcxROEA(c0, a0, f0, NIM_NIL);
				{
					if (!(((NI) 0) < depth0)) goto LA340;
					(*c0).inheritancepenalty += depth0;
					result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 3);
				}
				LA340: ;
			}
			LA332: ;
		}
		LA330: ;
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 13):
	{
		{
			if (!((*a0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 13))) goto LA345;
			{
				NIM_BOOL LOC349;
				LOC349 = (NIM_BOOL)0;
				LOC349 = samedistincttypes_E81g0CHdt1olSerxA8b5oAsigmatch(f0, a0);
				if (!LOC349) goto LA350;
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 10);
			}
			goto LA347;
			LA350: ;
			{
				Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC353;
				LOC353 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
				LOC353 = base_46gPaVDDGhiU69b2oKDJZuA(f0);
				if (!((*LOC353).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 58))) goto LA354;
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8);
			}
			goto LA347;
			LA354: ;
			{
				Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC359;
				if (!(*c0).coercedistincts) goto LA357;
				LOC359 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
				LOC359 = base_46gPaVDDGhiU69b2oKDJZuA(f0);
				result0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, LOC359, a0, NIM_TRUE);
			}
			goto LA347;
			LA357: ;
			LA347: ;
		}
		goto LA343;
		LA345: ;
		{
			NIM_BOOL LOC361;
			Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC363;
			LOC361 = (NIM_BOOL)0;
			LOC361 = ((*a0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 5));
			if (!(LOC361)) goto LA362;
			LOC363 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
			LOC363 = base_46gPaVDDGhiU69b2oKDJZuA(f0);
			LOC361 = ((IL64(1125900835880960) &((NU64)1<<((NU)((*LOC363).kind)&63U)))!=0);
			LA362: ;
			if (!LOC361) goto LA364;
			result0 = allowsnil_59aII9aHhpaoZviau1LkOWWwsigmatch(f0);
		}
		goto LA343;
		LA364: ;
		{
			Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC369;
			if (!(*c0).coercedistincts) goto LA367;
			LOC369 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
			LOC369 = base_46gPaVDDGhiU69b2oKDJZuA(f0);
			result0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, LOC369, a0, NIM_TRUE);
		}
		goto LA343;
		LA367: ;
		LA343: ;
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 19):
	{
		{
			if (!((*a0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 19))) goto LA373;
			{
				NIM_BOOL LOC377;
				LOC377 = (NIM_BOOL)0;
				LOC377 = !(((*(*f0).sons->data[((NI) 0)]).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 12)));
				if (!(LOC377)) goto LA378;
				LOC377 = ((*(*a0).sons->data[((NI) 0)]).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 3));
				LA378: ;
				if (!LOC377) goto LA379;
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 3);
			}
			goto LA375;
			LA379: ;
			{
				result0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, (*f0).sons->data[((NI) 0)], (*a0).sons->data[((NI) 0)], NIM_TRUE);
				{
					if (!(result0 <= ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 1))) goto LA384;
					result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
				}
				LA384: ;
			}
			LA375: ;
		}
		LA373: ;
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 21):
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 22):
	{
		{
			Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC406;
			Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC407;
			if (!((*a0).kind == (*f0).kind)) goto LA389;
			{
				NI LOC393;
				NI LOC394;
				LOC393 = (NI)0;
				LOC393 = len_gG7hUAX9cA629ahMLVL3xN4w_2(a0);
				LOC394 = (NI)0;
				LOC394 = len_gG7hUAX9cA629ahMLVL3xN4w_2(f0);
				if (!(LOC393 < LOC394)) goto LA395;
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
				goto BeforeRet;
			}
			LA395: ;
			{
				NI i_dnxDOYngS2xNLN57hKpsNg_4;
				NI HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ_3;
				NI LOC398;
				NI res_UVwF9ch9cOfZi4yH3XO9cfoGA_2;
				i_dnxDOYngS2xNLN57hKpsNg_4 = (NI)0;
				HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ_3 = (NI)0;
				LOC398 = (NI)0;
				LOC398 = len_gG7hUAX9cA629ahMLVL3xN4w_2(f0);
				HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ_3 = (NI)(LOC398 - ((NI) 2));
				res_UVwF9ch9cOfZi4yH3XO9cfoGA_2 = ((NI) 0);
				{
					while (1) {
						if (!(res_UVwF9ch9cOfZi4yH3XO9cfoGA_2 <= HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ_3)) goto LA400;
						i_dnxDOYngS2xNLN57hKpsNg_4 = res_UVwF9ch9cOfZi4yH3XO9cfoGA_2;
						{
							Ttyperelation_1IMf5P083XuEtWGxYaIXyQ LOC403;
							LOC403 = (Ttyperelation_1IMf5P083XuEtWGxYaIXyQ)0;
							LOC403 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, (*f0).sons->data[i_dnxDOYngS2xNLN57hKpsNg_4], (*a0).sons->data[i_dnxDOYngS2xNLN57hKpsNg_4], NIM_TRUE);
							if (!(LOC403 == ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0))) goto LA404;
							result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
							goto BeforeRet;
						}
						LA404: ;
						res_UVwF9ch9cOfZi4yH3XO9cfoGA_2 += ((NI) 1);
					} LA400: ;
				}
			}
			LOC406 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
			LOC406 = lastson_E41DMKHtT9c6sAMyyvhmSIw(f0);
			LOC407 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
			LOC407 = lastson_E41DMKHtT9c6sAMyyvhmSIw(a0);
			result0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, LOC406, LOC407, NIM_TRUE);
			{
				NIM_BOOL LOC410;
				Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC412;
				Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC413;
				LOC410 = (NIM_BOOL)0;
				LOC410 = (result0 <= ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 4));
				if (!(LOC410)) goto LA411;
				LOC412 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
				LOC412 = lastson_E41DMKHtT9c6sAMyyvhmSIw(f0);
				LOC413 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
				LOC413 = skiptypes_pLCdCGDuirMe9cspwviV9aVA(LOC412, abstractinst_dLigiD0wrfdW59cejPpTktA);
				LOC410 = ((14680064 &((NU64)1<<((NU)((*LOC413).kind)&63U)))!=0);
				LA411: ;
				if (!LOC410) goto LA414;
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
			}
			LA414: ;
			{
				if (!(result0 <= ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 1))) goto LA418;
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
			}
			goto LA416;
			LA418: ;
			{
				NIM_BOOL LOC421;
				LOC421 = (NIM_BOOL)0;
				LOC421 = (((*f0).flags &(1U<<((NU)(((Ttypeflag_x2m5g1NpbmDig4wLT3Ylhw) 16))&31U)))!=0);
				if (!(LOC421)) goto LA422;
				LOC421 = !((((*a0).flags &(1U<<((NU)(((Ttypeflag_x2m5g1NpbmDig4wLT3Ylhw) 16))&31U)))!=0));
				LA422: ;
				if (!LOC421) goto LA423;
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 1);
			}
			goto LA416;
			LA423: ;
			LA416: ;
		}
		goto LA387;
		LA389: ;
		{
			if (!((*a0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 5))) goto LA426;
			result0 = allowsnil_59aII9aHhpaoZviau1LkOWWwsigmatch(f0);
		}
		goto LA387;
		LA426: ;
		{
		}
		LA387: ;
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 25):
	{
		result0 = proctyperel_ATXQei1OP9acdbktDwpAl9ag_2(c0, f0, a0);
		{
			NIM_BOOL LOC432;
			NIM_BOOL LOC433;
			LOC432 = (NIM_BOOL)0;
			LOC433 = (NIM_BOOL)0;
			LOC433 = !((result0 == ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0)));
			if (!(LOC433)) goto LA434;
			LOC433 = (((*f0).flags &(1U<<((NU)(((Ttypeflag_x2m5g1NpbmDig4wLT3Ylhw) 16))&31U)))!=0);
			LA434: ;
			LOC432 = LOC433;
			if (!(LOC432)) goto LA435;
			LOC432 = !((((*a0).flags &(1U<<((NU)(((Ttypeflag_x2m5g1NpbmDig4wLT3Ylhw) 16))&31U)))!=0));
			LA435: ;
			if (!LOC432) goto LA436;
			result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 1);
		}
		LA436: ;
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 26):
	{
		switch ((*a0).kind) {
		case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 26):
		{
			{
				NIM_BOOL LOC442;
				LOC442 = (NIM_BOOL)0;
				LOC442 = (((*f0).flags &(1U<<((NU)(((Ttypeflag_x2m5g1NpbmDig4wLT3Ylhw) 16))&31U)))!=0);
				if (!(LOC442)) goto LA443;
				LOC442 = !((((*a0).flags &(1U<<((NU)(((Ttypeflag_x2m5g1NpbmDig4wLT3Ylhw) 16))&31U)))!=0));
				LA443: ;
				if (!LOC442) goto LA444;
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 1);
			}
			goto LA440;
			LA444: ;
			{
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 10);
			}
			LA440: ;
		}
		break;
		case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 5):
		{
			result0 = allowsnil_59aII9aHhpaoZviau1LkOWWwsigmatch(f0);
		}
		break;
		case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 25):
		{
			{
				if (!!(((*a0).callconv == ((Tcallingconvention_yjAJ8w0h1PBaSwSGJ3P7IA) 8)))) goto LA451;
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 1);
			}
			LA451: ;
		}
		break;
		case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 21):
		{
			{
				NI LOC456;
				LOC456 = (NI)0;
				LOC456 = len_gG7hUAX9cA629ahMLVL3xN4w_2(a0);
				if (!(LOC456 == ((NI) 1))) goto LA457;
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 1);
			}
			LA457: ;
		}
		break;
		case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 29):
		{
			result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 1);
		}
		break;
		default:
		{
		}
		break;
		}
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 28):
	{
		switch ((*a0).kind) {
		case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 28):
		{
			{
				NIM_BOOL LOC465;
				LOC465 = (NIM_BOOL)0;
				LOC465 = (((*f0).flags &(1U<<((NU)(((Ttypeflag_x2m5g1NpbmDig4wLT3Ylhw) 16))&31U)))!=0);
				if (!(LOC465)) goto LA466;
				LOC465 = !((((*a0).flags &(1U<<((NU)(((Ttypeflag_x2m5g1NpbmDig4wLT3Ylhw) 16))&31U)))!=0));
				LA466: ;
				if (!LOC465) goto LA467;
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 1);
			}
			goto LA463;
			LA467: ;
			{
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 10);
			}
			LA463: ;
		}
		break;
		case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 5):
		{
			result0 = allowsnil_59aII9aHhpaoZviau1LkOWWwsigmatch(f0);
		}
		break;
		default:
		{
		}
		break;
		}
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 29):
	{
		switch ((*a0).kind) {
		case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 29):
		{
			{
				NIM_BOOL LOC476;
				LOC476 = (NIM_BOOL)0;
				LOC476 = (((*f0).flags &(1U<<((NU)(((Ttypeflag_x2m5g1NpbmDig4wLT3Ylhw) 16))&31U)))!=0);
				if (!(LOC476)) goto LA477;
				LOC476 = !((((*a0).flags &(1U<<((NU)(((Ttypeflag_x2m5g1NpbmDig4wLT3Ylhw) 16))&31U)))!=0));
				LA477: ;
				if (!LOC476) goto LA478;
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 1);
			}
			goto LA474;
			LA478: ;
			{
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 10);
			}
			LA474: ;
		}
		break;
		case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 5):
		{
			result0 = allowsnil_59aII9aHhpaoZviau1LkOWWwsigmatch(f0);
		}
		break;
		case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 28):
		{
			result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 1);
		}
		break;
		case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 21):
		{
			{
				NIM_BOOL LOC486;
				NI LOC487;
				LOC486 = (NIM_BOOL)0;
				LOC487 = (NI)0;
				LOC487 = len_gG7hUAX9cA629ahMLVL3xN4w_2(a0);
				LOC486 = (LOC487 == ((NI) 1));
				if (!(LOC486)) goto LA488;
				LOC486 = ((*(*a0).sons->data[((NI) 0)]).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 2));
				LA488: ;
				if (!LOC486) goto LA489;
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 1);
			}
			LA489: ;
		}
		break;
		case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 16):
		{
			{
				NIM_BOOL LOC494;
				NIM_BOOL LOC495;
				NI64 LOC496;
				Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC498;
				LOC494 = (NIM_BOOL)0;
				LOC495 = (NIM_BOOL)0;
				LOC496 = (NI64)0;
				LOC496 = firstord_HUiBYxvKiECXCv8BzQNheg((*a0).sons->data[((NI) 0)]);
				LOC495 = (LOC496 == IL64(0));
				if (!(LOC495)) goto LA497;
				LOC498 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
				LOC498 = skiptypes_pLCdCGDuirMe9cspwviV9aVA((*a0).sons->data[((NI) 0)], 1048576);
				LOC495 = ((IL64(66571993088) &((NU64)1<<((NU)((*LOC498).kind)&63U)))!=0);
				LA497: ;
				LOC494 = LOC495;
				if (!(LOC494)) goto LA499;
				LOC494 = ((*(*a0).sons->data[((NI) 1)]).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 2));
				LA499: ;
				if (!LOC494) goto LA500;
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 1);
			}
			LA500: ;
		}
		break;
		default:
		{
		}
		break;
		}
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 3):
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 62):
	{
		{
			if (!((*a0).kind == (*f0).kind)) goto LA506;
			result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 10);
		}
		LA506: ;
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 11):
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 4):
	{
		Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC509;
		LOC509 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
		LOC509 = lastson_E41DMKHtT9c6sAMyyvhmSIw(f0);
		result0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, LOC509, a0, NIM_TRUE);
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 10):
	{
		Ttype_LTUWCZolpovw9cWE3JBWSUw* prev_9cmtsLO1M9bHfbpGxdv3Hn2A;
		Tidobj_raN9cHVgzmvaXisezY9aGg9cg* LOC511;
		TNimObject* LOC512;
		LOC511 = (Tidobj_raN9cHVgzmvaXisezY9aGg9cg*)0;
		LOC511 = &f0->Sup;
		LOC512 = (TNimObject*)0;
		LOC512 = idtableget_D12lVDWWPrKae8szg3EYLw((*c0).bindings, LOC511);
		prev_9cmtsLO1M9bHfbpGxdv3Hn2A = ((Ttype_LTUWCZolpovw9cWE3JBWSUw*) (LOC512));
		{
			Ttype_LTUWCZolpovw9cWE3JBWSUw* ff0;
			if (!(prev_9cmtsLO1M9bHfbpGxdv3Hn2A == NIM_NIL)) goto LA515;
			{
				NIM_BOOL LOC519;
				LOC519 = (NIM_BOOL)0;
				LOC519 = ((*a0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 11));
				if (!(LOC519)) goto LA520;
				LOC519 = ((*a0).sons->data[((NI) 0)] == f0);
				LA520: ;
				if (!LOC519) goto LA521;
				{
					Ttype_LTUWCZolpovw9cWE3JBWSUw* bound_A32sWx8L9cNXV9acKMnDr45A;
					Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC527;
					if (!dobind0) goto LA525;
					LOC527 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
					LOC527 = skiptypes_pLCdCGDuirMe9cspwviV9aVA(aorig0, 1048576);
					bound_A32sWx8L9cNXV9acKMnDr45A = skipintlit_Wqqd75hh0NzCssCyCNzd9agmagicsys(LOC527);
					put_JoRvap9abGYCKt6dvPFvsFAsigmatch(c0, f0, bound_A32sWx8L9cNXV9acKMnDr45A);
				}
				LA525: ;
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8);
				goto BeforeRet;
			}
			LA521: ;
			ff0 = lastson_E41DMKHtT9c6sAMyyvhmSIw(f0);
			{
				if (!!((ff0 == NIM_NIL))) goto LA530;
				result0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, ff0, a0, NIM_TRUE);
			}
			LA530: ;
		}
		goto LA513;
		LA515: ;
		{
			result0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, prev_9cmtsLO1M9bHfbpGxdv3Hn2A, a0, NIM_TRUE);
			goto BeforeRet;
		}
		LA513: ;
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 9):
	{
		Ttype_LTUWCZolpovw9cWE3JBWSUw* x_9c3clcMgqM3UNwp39b4c5aUg;
		NI depth_jc0tBH3QEumwweg6RQFIhQ;
		x_9c3clcMgqM3UNwp39b4c5aUg = skipgenericalias_46gPaVDDGhiU69b2oKDJZuA_3(a0);
		depth_jc0tBH3QEumwweg6RQFIhQ = ((NI) 0);
		{
			NIM_BOOL LOC536;
			LOC536 = (NIM_BOOL)0;
			LOC536 = ((*x_9c3clcMgqM3UNwp39b4c5aUg).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 9));
			if (LOC536) goto LA537;
			LOC536 = !(((*(*f0).sons->data[((NI) 0)]).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 10)));
			LA537: ;
			if (!LOC536) goto LA538;
		}
		goto LA534;
		LA538: ;
		{
			NIM_BOOL LOC541;
			NIM_BOOL LOC542;
			NIM_BOOL LOC544;
			NI LOC547;
			NI LOC548;
			LOC541 = (NIM_BOOL)0;
			LOC542 = (NIM_BOOL)0;
			LOC542 = ((*x_9c3clcMgqM3UNwp39b4c5aUg).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 11));
			if (!(LOC542)) goto LA543;
			LOC544 = (NIM_BOOL)0;
			LOC544 = ((*f0).sons->data[((NI) 0)] == (*x_9c3clcMgqM3UNwp39b4c5aUg).sons->data[((NI) 0)]);
			if (LOC544) goto LA545;
			LOC544 = isgenericsubtype_iFYDgIHQFHAIUyeXIQKySg(x_9c3clcMgqM3UNwp39b4c5aUg, f0, (&depth_jc0tBH3QEumwweg6RQFIhQ));
			LA545: ;
			LOC542 = LOC544;
			LA543: ;
			LOC541 = LOC542;
			if (!(LOC541)) goto LA546;
			LOC547 = (NI)0;
			LOC547 = sonslen_gG7hUAX9cA629ahMLVL3xN4w(x_9c3clcMgqM3UNwp39b4c5aUg);
			LOC548 = (NI)0;
			LOC548 = sonslen_gG7hUAX9cA629ahMLVL3xN4w(f0);
			LOC541 = ((NI)(LOC547 - ((NI) 1)) == LOC548);
			LA546: ;
			if (!LOC541) goto LA549;
			{
				NI i_dnxDOYngS2xNLN57hKpsNg_5;
				NI HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ_4;
				NI LOC552;
				NI res_UVwF9ch9cOfZi4yH3XO9cfoGA_3;
				i_dnxDOYngS2xNLN57hKpsNg_5 = (NI)0;
				HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ_4 = (NI)0;
				LOC552 = (NI)0;
				LOC552 = sonslen_gG7hUAX9cA629ahMLVL3xN4w(f0);
				HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ_4 = (NI)(LOC552 - ((NI) 1));
				res_UVwF9ch9cOfZi4yH3XO9cfoGA_3 = ((NI) 1);
				{
					while (1) {
						if (!(res_UVwF9ch9cOfZi4yH3XO9cfoGA_3 <= HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ_4)) goto LA554;
						i_dnxDOYngS2xNLN57hKpsNg_5 = res_UVwF9ch9cOfZi4yH3XO9cfoGA_3;
						{
							if (!((*(*x_9c3clcMgqM3UNwp39b4c5aUg).sons->data[i_dnxDOYngS2xNLN57hKpsNg_5]).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 12))) goto LA557;
							internalerror_5XY9cUy7hZmUusM38U9cYYdw(((NimStringDesc*) &T_EV5hHJmjIY9cla9b9be7fSVJQ_16));
						}
						goto LA555;
						LA557: ;
						{
							Ttyperelation_1IMf5P083XuEtWGxYaIXyQ LOC560;
							LOC560 = (Ttyperelation_1IMf5P083XuEtWGxYaIXyQ)0;
							LOC560 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, (*f0).sons->data[i_dnxDOYngS2xNLN57hKpsNg_5], (*x_9c3clcMgqM3UNwp39b4c5aUg).sons->data[i_dnxDOYngS2xNLN57hKpsNg_5], NIM_TRUE);
							if (!(LOC560 <= ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 3))) goto LA561;
							{
								if (!!(((*(*f0).sons->data[i_dnxDOYngS2xNLN57hKpsNg_5]).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 8)))) goto LA565;
								goto BeforeRet;
							}
							LA565: ;
						}
						goto LA555;
						LA561: ;
						LA555: ;
						res_UVwF9ch9cOfZi4yH3XO9cfoGA_3 += ((NI) 1);
					} LA554: ;
				}
			}
			(*c0).inheritancepenalty += depth_jc0tBH3QEumwweg6RQFIhQ;
			result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8);
		}
		goto LA534;
		LA549: ;
		{
			Ttype_LTUWCZolpovw9cWE3JBWSUw* genericbody0;
			Skippedptr_WOSTpykTcTHo6Kb9bHoOUqQ askip0;
			Skippedptr_WOSTpykTcTHo6Kb9bHoOUqQ fskip0;
			Ttype_LTUWCZolpovw9cWE3JBWSUw* aobj0;
			Ttype_LTUWCZolpovw9cWE3JBWSUw* fobj0;
			Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC568;
			NI depth0;
			genericbody0 = (*f0).sons->data[((NI) 0)];
			askip0 = ((Skippedptr_WOSTpykTcTHo6Kb9bHoOUqQ) 0);
			fskip0 = ((Skippedptr_WOSTpykTcTHo6Kb9bHoOUqQ) 0);
			aobj0 = skiptoobject_2mzjvZ9aRUzu3xJQF0NC3eQ(x_9c3clcMgqM3UNwp39b4c5aUg, (&askip0));
			LOC568 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
			LOC568 = lastson_E41DMKHtT9c6sAMyyvhmSIw(genericbody0);
			fobj0 = skiptoobject_2mzjvZ9aRUzu3xJQF0NC3eQ(LOC568, (&fskip0));
			depth0 = ((NI) -1);
			{
				NIM_BOOL LOC571;
				NIM_BOOL LOC572;
				LOC571 = (NIM_BOOL)0;
				LOC572 = (NIM_BOOL)0;
				LOC572 = !((fobj0 == NIM_NIL));
				if (!(LOC572)) goto LA573;
				LOC572 = !((aobj0 == NIM_NIL));
				LA573: ;
				LOC571 = LOC572;
				if (!(LOC571)) goto LA574;
				LOC571 = (askip0 == fskip0);
				LA574: ;
				if (!LOC571) goto LA575;
				depth0 = isobjectsubtype_AAFgb9cf1jok4tDnzcxROEA(c0, aobj0, fobj0, f0);
			}
			LA575: ;
			result0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, genericbody0, x_9c3clcMgqM3UNwp39b4c5aUg, NIM_TRUE);
			{
				if (!!((result0 == ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0)))) goto LA579;
				{
					NI i_dnxDOYngS2xNLN57hKpsNg_6;
					NI HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ_5;
					NI LOC582;
					NI res_UVwF9ch9cOfZi4yH3XO9cfoGA_4;
					i_dnxDOYngS2xNLN57hKpsNg_6 = (NI)0;
					HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ_5 = (NI)0;
					LOC582 = (NI)0;
					LOC582 = sonslen_gG7hUAX9cA629ahMLVL3xN4w(f0);
					HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ_5 = (NI)(LOC582 - ((NI) 1));
					res_UVwF9ch9cOfZi4yH3XO9cfoGA_4 = ((NI) 1);
					{
						while (1) {
							Ttype_LTUWCZolpovw9cWE3JBWSUw* x0;
							Tidobj_raN9cHVgzmvaXisezY9aGg9cg* LOC585;
							TNimObject* LOC586;
							if (!(res_UVwF9ch9cOfZi4yH3XO9cfoGA_4 <= HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ_5)) goto LA584;
							i_dnxDOYngS2xNLN57hKpsNg_6 = res_UVwF9ch9cOfZi4yH3XO9cfoGA_4;
							LOC585 = (Tidobj_raN9cHVgzmvaXisezY9aGg9cg*)0;
							LOC585 = &(*genericbody0).sons->data[(NI)(i_dnxDOYngS2xNLN57hKpsNg_6 - ((NI) 1))]->Sup;
							LOC586 = (TNimObject*)0;
							LOC586 = idtableget_D12lVDWWPrKae8szg3EYLw((*c0).bindings, LOC585);
							x0 = ((Ttype_LTUWCZolpovw9cWE3JBWSUw*) (LOC586));
							{
								if (!(x0 == NIM_NIL)) goto LA589;
							}
							goto LA587;
							LA589: ;
							{
								if (!((4608 &((NU64)1<<((NU)((*x0).kind)&63U)))!=0)) goto LA592;
								internalerror_5XY9cUy7hZmUusM38U9cYYdw(((NimStringDesc*) &T_EV5hHJmjIY9cla9b9be7fSVJQ_16));
							}
							goto LA587;
							LA592: ;
							{
								put_JoRvap9abGYCKt6dvPFvsFAsigmatch(c0, (*f0).sons->data[i_dnxDOYngS2xNLN57hKpsNg_6], x0);
							}
							LA587: ;
							res_UVwF9ch9cOfZi4yH3XO9cfoGA_4 += ((NI) 1);
						} LA584: ;
					}
				}
			}
			LA579: ;
			{
				if (!(((NI) 0) <= depth0)) goto LA597;
				(*c0).inheritancepenalty += depth0;
				{
					if (!(depth0 == ((NI) 0))) goto LA601;
					result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8);
				}
				goto LA599;
				LA601: ;
				{
					result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 3);
				}
				LA599: ;
			}
			LA597: ;
		}
		LA534: ;
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 55):
	{
		Ttype_LTUWCZolpovw9cWE3JBWSUw* prev_9cmtsLO1M9bHfbpGxdv3Hn2A_2;
		Tidobj_raN9cHVgzmvaXisezY9aGg9cg* LOC605;
		TNimObject* LOC606;
		LOC605 = (Tidobj_raN9cHVgzmvaXisezY9aGg9cg*)0;
		LOC605 = &f0->Sup;
		LOC606 = (TNimObject*)0;
		LOC606 = idtableget_D12lVDWWPrKae8szg3EYLw((*c0).bindings, LOC605);
		prev_9cmtsLO1M9bHfbpGxdv3Hn2A_2 = ((Ttype_LTUWCZolpovw9cWE3JBWSUw*) (LOC606));
		{
			if (!(prev_9cmtsLO1M9bHfbpGxdv3Hn2A_2 == NIM_NIL)) goto LA609;
			result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 10);
			{
				Ttype_LTUWCZolpovw9cWE3JBWSUw* branch_iR6OUatgymHYrrJu9b4n2xA_3;
				TY_zuqP4Riz26Oi5fWgPYVEgA* HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ_6;
				NI i_dnxDOYngS2xNLN57hKpsNg_7;
				NI L_rjATi9b0T48QHWapYqbQUbg_3;
				branch_iR6OUatgymHYrrJu9b4n2xA_3 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
				HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ_6 = (TY_zuqP4Riz26Oi5fWgPYVEgA*)0;
				HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ_6 = (*f0).sons;
				i_dnxDOYngS2xNLN57hKpsNg_7 = ((NI) 0);
				L_rjATi9b0T48QHWapYqbQUbg_3 = (HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ_6 ? HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ_6->Sup.len : 0);
				{
					while (1) {
						Ttyperelation_1IMf5P083XuEtWGxYaIXyQ x0;
						if (!(i_dnxDOYngS2xNLN57hKpsNg_7 < L_rjATi9b0T48QHWapYqbQUbg_3)) goto LA613;
						branch_iR6OUatgymHYrrJu9b4n2xA_3 = HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ_6->data[i_dnxDOYngS2xNLN57hKpsNg_7];
						x0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, branch_iR6OUatgymHYrrJu9b4n2xA_3, aorig0, NIM_TRUE);
						{
							if (!(x0 < ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 3))) goto LA616;
							result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
							goto BeforeRet;
						}
						LA616: ;
						{
							if (!(x0 < result0)) goto LA620;
							result0 = x0;
						}
						LA620: ;
						i_dnxDOYngS2xNLN57hKpsNg_7 += ((NI) 1);
					} LA613: ;
				}
			}
			{
				if (!(((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8) < result0)) goto LA624;
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8);
			}
			LA624: ;
			{
				Ttype_LTUWCZolpovw9cWE3JBWSUw* bound_A32sWx8L9cNXV9acKMnDr45A_2;
				Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC630;
				if (!dobind0) goto LA628;
				LOC630 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
				LOC630 = skiptypes_pLCdCGDuirMe9cspwviV9aVA(aorig0, 1048576);
				bound_A32sWx8L9cNXV9acKMnDr45A_2 = skipintlit_Wqqd75hh0NzCssCyCNzd9agmagicsys(LOC630);
				put_JoRvap9abGYCKt6dvPFvsFAsigmatch(c0, f0, bound_A32sWx8L9cNXV9acKMnDr45A_2);
			}
			LA628: ;
			goto BeforeRet;
		}
		goto LA607;
		LA609: ;
		{
			result0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, prev_9cmtsLO1M9bHfbpGxdv3Hn2A_2, a0, NIM_TRUE);
			goto BeforeRet;
		}
		LA607: ;
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 56):
	{
		Ttype_LTUWCZolpovw9cWE3JBWSUw* prev_9cmtsLO1M9bHfbpGxdv3Hn2A_3;
		Tidobj_raN9cHVgzmvaXisezY9aGg9cg* LOC633;
		TNimObject* LOC634;
		LOC633 = (Tidobj_raN9cHVgzmvaXisezY9aGg9cg*)0;
		LOC633 = &f0->Sup;
		LOC634 = (TNimObject*)0;
		LOC634 = idtableget_D12lVDWWPrKae8szg3EYLw((*c0).bindings, LOC633);
		prev_9cmtsLO1M9bHfbpGxdv3Hn2A_3 = ((Ttype_LTUWCZolpovw9cWE3JBWSUw*) (LOC634));
		{
			if (!(prev_9cmtsLO1M9bHfbpGxdv3Hn2A_3 == NIM_NIL)) goto LA637;
			result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
			{
				Ttype_LTUWCZolpovw9cWE3JBWSUw* branch_iR6OUatgymHYrrJu9b4n2xA_4;
				TY_zuqP4Riz26Oi5fWgPYVEgA* HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ_7;
				NI i_dnxDOYngS2xNLN57hKpsNg_8;
				NI L_rjATi9b0T48QHWapYqbQUbg_4;
				branch_iR6OUatgymHYrrJu9b4n2xA_4 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
				HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ_7 = (TY_zuqP4Riz26Oi5fWgPYVEgA*)0;
				HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ_7 = (*f0).sons;
				i_dnxDOYngS2xNLN57hKpsNg_8 = ((NI) 0);
				L_rjATi9b0T48QHWapYqbQUbg_4 = (HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ_7 ? HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ_7->Sup.len : 0);
				{
					while (1) {
						Ttyperelation_1IMf5P083XuEtWGxYaIXyQ x0;
						if (!(i_dnxDOYngS2xNLN57hKpsNg_8 < L_rjATi9b0T48QHWapYqbQUbg_4)) goto LA641;
						branch_iR6OUatgymHYrrJu9b4n2xA_4 = HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ_7->data[i_dnxDOYngS2xNLN57hKpsNg_8];
						x0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, branch_iR6OUatgymHYrrJu9b4n2xA_4, aorig0, NIM_TRUE);
						{
							if (!(result0 < x0)) goto LA644;
							result0 = x0;
						}
						LA644: ;
						i_dnxDOYngS2xNLN57hKpsNg_8 += ((NI) 1);
					} LA641: ;
				}
			}
			{
				if (!(((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 3) <= result0)) goto LA648;
				{
					if (!(((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8) < result0)) goto LA652;
					result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8);
				}
				LA652: ;
				{
					Ttype_LTUWCZolpovw9cWE3JBWSUw* bound_A32sWx8L9cNXV9acKMnDr45A_3;
					Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC658;
					if (!dobind0) goto LA656;
					LOC658 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
					LOC658 = skiptypes_pLCdCGDuirMe9cspwviV9aVA(aorig0, 1048576);
					bound_A32sWx8L9cNXV9acKMnDr45A_3 = skipintlit_Wqqd75hh0NzCssCyCNzd9agmagicsys(LOC658);
					put_JoRvap9abGYCKt6dvPFvsFAsigmatch(c0, f0, bound_A32sWx8L9cNXV9acKMnDr45A_3);
				}
				LA656: ;
				goto BeforeRet;
			}
			goto LA646;
			LA648: ;
			{
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
			}
			LA646: ;
		}
		goto LA635;
		LA637: ;
		{
			result0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, prev_9cmtsLO1M9bHfbpGxdv3Hn2A_3, a0, NIM_TRUE);
			goto BeforeRet;
		}
		LA635: ;
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 57):
	{
		Ttype_LTUWCZolpovw9cWE3JBWSUw* prev_9cmtsLO1M9bHfbpGxdv3Hn2A_4;
		Tidobj_raN9cHVgzmvaXisezY9aGg9cg* LOC662;
		TNimObject* LOC663;
		LOC662 = (Tidobj_raN9cHVgzmvaXisezY9aGg9cg*)0;
		LOC662 = &f0->Sup;
		LOC663 = (TNimObject*)0;
		LOC663 = idtableget_D12lVDWWPrKae8szg3EYLw((*c0).bindings, LOC662);
		prev_9cmtsLO1M9bHfbpGxdv3Hn2A_4 = ((Ttype_LTUWCZolpovw9cWE3JBWSUw*) (LOC663));
		{
			if (!(prev_9cmtsLO1M9bHfbpGxdv3Hn2A_4 == NIM_NIL)) goto LA666;
			{
				Ttype_LTUWCZolpovw9cWE3JBWSUw* branch_iR6OUatgymHYrrJu9b4n2xA_5;
				TY_zuqP4Riz26Oi5fWgPYVEgA* HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ_8;
				NI i_dnxDOYngS2xNLN57hKpsNg_9;
				NI L_rjATi9b0T48QHWapYqbQUbg_5;
				branch_iR6OUatgymHYrrJu9b4n2xA_5 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
				HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ_8 = (TY_zuqP4Riz26Oi5fWgPYVEgA*)0;
				HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ_8 = (*f0).sons;
				i_dnxDOYngS2xNLN57hKpsNg_9 = ((NI) 0);
				L_rjATi9b0T48QHWapYqbQUbg_5 = (HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ_8 ? HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ_8->Sup.len : 0);
				{
					while (1) {
						if (!(i_dnxDOYngS2xNLN57hKpsNg_9 < L_rjATi9b0T48QHWapYqbQUbg_5)) goto LA670;
						branch_iR6OUatgymHYrrJu9b4n2xA_5 = HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ_8->data[i_dnxDOYngS2xNLN57hKpsNg_9];
						{
							Ttyperelation_1IMf5P083XuEtWGxYaIXyQ LOC673;
							LOC673 = (Ttyperelation_1IMf5P083XuEtWGxYaIXyQ)0;
							LOC673 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, branch_iR6OUatgymHYrrJu9b4n2xA_5, aorig0, NIM_TRUE);
							if (!!((LOC673 == ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0)))) goto LA674;
							result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
							goto BeforeRet;
						}
						LA674: ;
						i_dnxDOYngS2xNLN57hKpsNg_9 += ((NI) 1);
					} LA670: ;
				}
			}
			{
				Ttype_LTUWCZolpovw9cWE3JBWSUw* bound_A32sWx8L9cNXV9acKMnDr45A_4;
				Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC680;
				if (!dobind0) goto LA678;
				LOC680 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
				LOC680 = skiptypes_pLCdCGDuirMe9cspwviV9aVA(aorig0, 1048576);
				bound_A32sWx8L9cNXV9acKMnDr45A_4 = skipintlit_Wqqd75hh0NzCssCyCNzd9agmagicsys(LOC680);
				put_JoRvap9abGYCKt6dvPFvsFAsigmatch(c0, f0, bound_A32sWx8L9cNXV9acKMnDr45A_4);
			}
			LA678: ;
			result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8);
			goto BeforeRet;
		}
		goto LA664;
		LA666: ;
		{
			result0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, prev_9cmtsLO1M9bHfbpGxdv3Hn2A_4, a0, NIM_TRUE);
			goto BeforeRet;
		}
		LA664: ;
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 58):
	{
		Ttype_LTUWCZolpovw9cWE3JBWSUw* prev_9cmtsLO1M9bHfbpGxdv3Hn2A_5;
		Tidobj_raN9cHVgzmvaXisezY9aGg9cg* LOC683;
		TNimObject* LOC684;
		LOC683 = (Tidobj_raN9cHVgzmvaXisezY9aGg9cg*)0;
		LOC683 = &f0->Sup;
		LOC684 = (TNimObject*)0;
		LOC684 = idtableget_D12lVDWWPrKae8szg3EYLw((*c0).bindings, LOC683);
		prev_9cmtsLO1M9bHfbpGxdv3Hn2A_5 = ((Ttype_LTUWCZolpovw9cWE3JBWSUw*) (LOC684));
		{
			Ttype_LTUWCZolpovw9cWE3JBWSUw* concrete0;
			if (!(prev_9cmtsLO1M9bHfbpGxdv3Hn2A_5 == NIM_NIL)) goto LA687;
			concrete0 = concretetype_LygDqx9ccbKjtPzfFJFniJQ((&(*c0)), a0);
			{
				NIM_BOOL LOC691;
				LOC691 = (NIM_BOOL)0;
				LOC691 = !((concrete0 == NIM_NIL));
				if (!(LOC691)) goto LA692;
				LOC691 = dobind0;
				LA692: ;
				if (!LOC691) goto LA693;
				put_JoRvap9abGYCKt6dvPFvsFAsigmatch(c0, f0, concrete0);
			}
			LA693: ;
			result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8);
			goto BeforeRet;
		}
		goto LA685;
		LA687: ;
		{
			result0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, prev_9cmtsLO1M9bHfbpGxdv3Hn2A_5, a0, NIM_TRUE);
			goto BeforeRet;
		}
		LA685: ;
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 51):
	{
		Ttype_LTUWCZolpovw9cWE3JBWSUw* prev_9cmtsLO1M9bHfbpGxdv3Hn2A_6;
		Tidobj_raN9cHVgzmvaXisezY9aGg9cg* LOC697;
		TNimObject* LOC698;
		LOC697 = (Tidobj_raN9cHVgzmvaXisezY9aGg9cg*)0;
		LOC697 = &f0->Sup;
		LOC698 = (TNimObject*)0;
		LOC698 = idtableget_D12lVDWWPrKae8szg3EYLw((*c0).bindings, LOC697);
		prev_9cmtsLO1M9bHfbpGxdv3Hn2A_6 = ((Ttype_LTUWCZolpovw9cWE3JBWSUw*) (LOC698));
		{
			Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag targetkind0;
			if (!(prev_9cmtsLO1M9bHfbpGxdv3Hn2A_6 == NIM_NIL)) goto LA701;
			targetkind0 = (*(*f0).sons->data[((NI) 0)]).kind;
			{
				NIM_BOOL LOC705;
				Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC706;
				NIM_BOOL LOC708;
				LOC705 = (NIM_BOOL)0;
				LOC706 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
				LOC706 = skiptypes_pLCdCGDuirMe9cspwviV9aVA(a0, IL64(2251799814735888));
				LOC705 = (targetkind0 == (*LOC706).kind);
				if (LOC705) goto LA707;
				LOC708 = (NIM_BOOL)0;
				LOC708 = ((100663296 &((NU64)1<<((NU)(targetkind0)&63U)))!=0);
				if (!(LOC708)) goto LA709;
				LOC708 = ((*a0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 5));
				LA709: ;
				LOC705 = LOC708;
				LA707: ;
				if (!LOC705) goto LA710;
				put_JoRvap9abGYCKt6dvPFvsFAsigmatch(c0, f0, a0);
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8);
				goto BeforeRet;
			}
			goto LA703;
			LA710: ;
			{
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
				goto BeforeRet;
			}
			LA703: ;
		}
		goto LA699;
		LA701: ;
		{
			result0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, prev_9cmtsLO1M9bHfbpGxdv3Hn2A_6, a0, NIM_TRUE);
			goto BeforeRet;
		}
		LA699: ;
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 52):
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 53):
	{
		Ttype_LTUWCZolpovw9cWE3JBWSUw* prev_9cmtsLO1M9bHfbpGxdv3Hn2A_7;
		Tidobj_raN9cHVgzmvaXisezY9aGg9cg* LOC715;
		TNimObject* LOC716;
		LOC715 = (Tidobj_raN9cHVgzmvaXisezY9aGg9cg*)0;
		LOC715 = &f0->Sup;
		LOC716 = (TNimObject*)0;
		LOC716 = idtableget_D12lVDWWPrKae8szg3EYLw((*c0).bindings, LOC715);
		prev_9cmtsLO1M9bHfbpGxdv3Hn2A_7 = ((Ttype_LTUWCZolpovw9cWE3JBWSUw*) (LOC716));
		{
			if (!(prev_9cmtsLO1M9bHfbpGxdv3Hn2A_7 == NIM_NIL)) goto LA719;
			result0 = matchusertypeclass_NSmou3mZj0I2im7PS4zUIg((*c0).c, c0, f0, aorig0);
			{
				if (!(result0 == ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8))) goto LA723;
				put_JoRvap9abGYCKt6dvPFvsFAsigmatch(c0, f0, a0);
			}
			LA723: ;
		}
		goto LA717;
		LA719: ;
		{
			result0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, prev_9cmtsLO1M9bHfbpGxdv3Hn2A_7, a0, NIM_TRUE);
			goto BeforeRet;
		}
		LA717: ;
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 54):
	{
		Ttype_LTUWCZolpovw9cWE3JBWSUw* prev_9cmtsLO1M9bHfbpGxdv3Hn2A_8;
		Tidobj_raN9cHVgzmvaXisezY9aGg9cg* LOC727;
		TNimObject* LOC728;
		LOC727 = (Tidobj_raN9cHVgzmvaXisezY9aGg9cg*)0;
		LOC727 = &f0->Sup;
		LOC728 = (TNimObject*)0;
		LOC728 = idtableget_D12lVDWWPrKae8szg3EYLw((*c0).bindings, LOC727);
		prev_9cmtsLO1M9bHfbpGxdv3Hn2A_8 = ((Ttype_LTUWCZolpovw9cWE3JBWSUw*) (LOC728));
		{
			Ttype_LTUWCZolpovw9cWE3JBWSUw* roota0;
			Ttype_LTUWCZolpovw9cWE3JBWSUw* rootf0;
			Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC733;
			if (!(prev_9cmtsLO1M9bHfbpGxdv3Hn2A_8 == NIM_NIL)) goto LA731;
			roota0 = skipgenericalias_46gPaVDDGhiU69b2oKDJZuA_3(a0);
			LOC733 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
			LOC733 = lastson_E41DMKHtT9c6sAMyyvhmSIw(f0);
			rootf0 = skipgenericalias_46gPaVDDGhiU69b2oKDJZuA_3(LOC733);
			{
				NIM_BOOL LOC736;
				Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC738;
				Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC739;
				LOC736 = (NIM_BOOL)0;
				LOC736 = ((*a0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 11));
				if (!(LOC736)) goto LA737;
				LOC738 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
				LOC738 = base_46gPaVDDGhiU69b2oKDJZuA(roota0);
				LOC739 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
				LOC739 = base_46gPaVDDGhiU69b2oKDJZuA(rootf0);
				LOC736 = (LOC738 == LOC739);
				LA737: ;
				if (!LOC736) goto LA740;
				{
					NI i_dnxDOYngS2xNLN57hKpsNg_10;
					NI HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ_9;
					NI LOC743;
					NI res_UVwF9ch9cOfZi4yH3XO9cfoGA_5;
					i_dnxDOYngS2xNLN57hKpsNg_10 = (NI)0;
					HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ_9 = (NI)0;
					LOC743 = (NI)0;
					LOC743 = sonslen_gG7hUAX9cA629ahMLVL3xN4w(rootf0);
					HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ_9 = (NI)(LOC743 - ((NI) 2));
					res_UVwF9ch9cOfZi4yH3XO9cfoGA_5 = ((NI) 1);
					{
						while (1) {
							Ttype_LTUWCZolpovw9cWE3JBWSUw* ff0;
							Ttype_LTUWCZolpovw9cWE3JBWSUw* aa0;
							if (!(res_UVwF9ch9cOfZi4yH3XO9cfoGA_5 <= HEX3Atmp_FIiMOc07WWtBqxlF7TMMLQ_9)) goto LA745;
							i_dnxDOYngS2xNLN57hKpsNg_10 = res_UVwF9ch9cOfZi4yH3XO9cfoGA_5;
							ff0 = (*rootf0).sons->data[i_dnxDOYngS2xNLN57hKpsNg_10];
							aa0 = (*roota0).sons->data[i_dnxDOYngS2xNLN57hKpsNg_10];
							result0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, ff0, aa0, NIM_TRUE);
							{
								if (!(result0 == ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0))) goto LA748;
								goto BeforeRet;
							}
							LA748: ;
							{
								NIM_BOOL LOC752;
								LOC752 = (NIM_BOOL)0;
								LOC752 = ((*ff0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 20));
								if (!(LOC752)) goto LA753;
								LOC752 = !((result0 == ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 10)));
								LA753: ;
								if (!LOC752) goto LA754;
								result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
								goto BeforeRet;
							}
							LA754: ;
							res_UVwF9ch9cOfZi4yH3XO9cfoGA_5 += ((NI) 1);
						} LA745: ;
					}
				}
			}
			goto LA734;
			LA740: ;
			{
				Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC757;
				LOC757 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
				LOC757 = lastson_E41DMKHtT9c6sAMyyvhmSIw(rootf0);
				result0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, LOC757, a0, NIM_TRUE);
			}
			LA734: ;
			{
				if (!!((result0 == ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0)))) goto LA760;
				put_JoRvap9abGYCKt6dvPFvsFAsigmatch(c0, f0, a0);
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8);
			}
			LA760: ;
		}
		goto LA729;
		LA731: ;
		{
			result0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, prev_9cmtsLO1M9bHfbpGxdv3Hn2A_8, a0, NIM_TRUE);
			goto BeforeRet;
		}
		LA729: ;
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 12):
	{
		Ttype_LTUWCZolpovw9cWE3JBWSUw* x0;
		Tidobj_raN9cHVgzmvaXisezY9aGg9cg* LOC764;
		TNimObject* LOC765;
		LOC764 = (Tidobj_raN9cHVgzmvaXisezY9aGg9cg*)0;
		LOC764 = &f0->Sup;
		LOC765 = (TNimObject*)0;
		LOC765 = idtableget_D12lVDWWPrKae8szg3EYLw((*c0).bindings, LOC764);
		x0 = ((Ttype_LTUWCZolpovw9cWE3JBWSUw*) (LOC765));
		{
			if (!(x0 == NIM_NIL)) goto LA768;
			{
				NIM_BOOL LOC772;
				NIM_BOOL LOC773;
				LOC772 = (NIM_BOOL)0;
				LOC773 = (NIM_BOOL)0;
				LOC773 = ((*(*c0).callee).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 10));
				if (!(LOC773)) goto LA774;
				LOC773 = ((*f0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 12));
				LA774: ;
				LOC772 = LOC773;
				if (!(LOC772)) goto LA775;
				LOC772 = !((*c0).typedescmatched);
				LA775: ;
				if (!LOC772) goto LA776;
				{
					if (!(((*a0).flags &(1U<<((NU)(((Ttypeflag_x2m5g1NpbmDig4wLT3Ylhw) 25))&31U)))!=0)) goto LA780;
					result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8);
				}
				goto LA778;
				LA780: ;
				{
					if (!((*a0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 8))) goto LA783;
					{
						NI LOC787;
						LOC787 = (NI)0;
						LOC787 = sonslen_gG7hUAX9cA629ahMLVL3xN4w(f0);
						if (!(LOC787 == ((NI) 0))) goto LA788;
						result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8);
					}
					goto LA785;
					LA788: ;
					{
						Ttype_LTUWCZolpovw9cWE3JBWSUw* aa0;
						Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC804;
						{
							NIM_BOOL LOC793;
							NIM_BOOL LOC794;
							NimStringDesc* LOC798;
							LOC793 = (NIM_BOOL)0;
							LOC794 = (NIM_BOOL)0;
							LOC794 = HEX3DHEX3D_59b802owH8LncWkMg9cCE3ng((*a0).sons, NIM_NIL);
							LOC793 = !(LOC794);
							if (!(LOC793)) goto LA795;
							LOC793 = (((NI) 0) < ((*a0).sons ? (*a0).sons->Sup.len : 0));
							LA795: ;
							if (!!(LOC793)) goto LA796;
							LOC798 = (NimStringDesc*)0;
							LOC798 = HEX24_k53Ge4e9cDjc7y9c5uML7sPQ(T_EV5hHJmjIY9cla9b9be7fSVJQ_22);
							internalerror_5XY9cUy7hZmUusM38U9cYYdw(LOC798);
						}
						LA796: ;
						(*c0).typedescmatched = NIM_TRUE;
						aa0 = a0;
						{
							while (1) {
								NIM_BOOL LOC801;
								NI LOC803;
								LOC801 = (NIM_BOOL)0;
								LOC801 = ((4352 &((NU64)1<<((NU)((*aa0).kind)&63U)))!=0);
								if (!(LOC801)) goto LA802;
								LOC803 = (NI)0;
								LOC803 = len_gG7hUAX9cA629ahMLVL3xN4w_2(aa0);
								LOC801 = (((NI) 0) < LOC803);
								LA802: ;
								if (!LOC801) goto LA800;
								aa0 = lastson_E41DMKHtT9c6sAMyyvhmSIw(aa0);
							} LA800: ;
						}
						LOC804 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
						LOC804 = base_46gPaVDDGhiU69b2oKDJZuA(f0);
						result0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, LOC804, aa0, NIM_TRUE);
						{
							if (!(((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8) < result0)) goto LA807;
							result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8);
						}
						LA807: ;
					}
					LA785: ;
				}
				goto LA778;
				LA783: ;
				{
					result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
				}
				LA778: ;
			}
			goto LA770;
			LA776: ;
			{
				{
					NIM_BOOL LOC813;
					NI LOC814;
					Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC818;
					LOC813 = (NIM_BOOL)0;
					LOC814 = (NI)0;
					LOC814 = sonslen_gG7hUAX9cA629ahMLVL3xN4w(f0);
					LOC813 = (((NI) 0) < LOC814);
					if (!(LOC813)) goto LA815;
					LOC813 = !(((*(*f0).sons->data[((NI) 0)]).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 0)));
					LA815: ;
					if (!LOC813) goto LA816;
					LOC818 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
					LOC818 = lastson_E41DMKHtT9c6sAMyyvhmSIw(f0);
					result0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, LOC818, a0, NIM_TRUE);
					{
						NIM_BOOL LOC821;
						Ttype_LTUWCZolpovw9cWE3JBWSUw* concrete0;
						LOC821 = (NIM_BOOL)0;
						LOC821 = dobind0;
						if (!(LOC821)) goto LA822;
						LOC821 = !(((257 &(1U<<((NU)(result0)&15U)))!=0));
						LA822: ;
						if (!LOC821) goto LA823;
						concrete0 = concretetype_LygDqx9ccbKjtPzfFJFniJQ((&(*c0)), a0);
						{
							if (!(concrete0 == NIM_NIL)) goto LA827;
							result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
							goto BeforeRet;
						}
						LA827: ;
						put_JoRvap9abGYCKt6dvPFvsFAsigmatch(c0, f0, concrete0);
					}
					LA823: ;
				}
				goto LA811;
				LA816: ;
				{
					result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8);
				}
				LA811: ;
			}
			LA770: ;
			{
				Ttype_LTUWCZolpovw9cWE3JBWSUw* concrete0;
				if (!(result0 == ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8))) goto LA832;
				concrete0 = a0;
				{
					if (!(((*a0).flags &(1U<<((NU)(((Ttypeflag_x2m5g1NpbmDig4wLT3Ylhw) 25))&31U)))!=0)) goto LA836;
					(*(*a0).sym).kind = ((Tsymkind_cNCW9acsSznmEccl1fgQwkw) 7);
					(*a0).flags &= ~(((NU32)1) << ((((Ttypeflag_x2m5g1NpbmDig4wLT3Ylhw) 25)) % (sizeof(NU32)*8)));
				}
				goto LA834;
				LA836: ;
				{
					concrete0 = concretetype_LygDqx9ccbKjtPzfFJFniJQ((&(*c0)), a0);
					{
						if (!(concrete0 == NIM_NIL)) goto LA841;
						result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
						goto BeforeRet;
					}
					LA841: ;
				}
				LA834: ;
				{
					if (!dobind0) goto LA845;
					put_JoRvap9abGYCKt6dvPFvsFAsigmatch(c0, f0, concrete0);
				}
				LA845: ;
			}
			goto LA830;
			LA832: ;
			{
				if (!(((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8) < result0)) goto LA848;
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8);
			}
			goto LA830;
			LA848: ;
			LA830: ;
		}
		goto LA766;
		LA768: ;
		{
			if (!((*a0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 3))) goto LA851;
			result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8);
		}
		goto LA766;
		LA851: ;
		{
			if (!((*x0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 12))) goto LA854;
			result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8);
		}
		goto LA766;
		LA854: ;
		{
			result0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, x0, a0, NIM_TRUE);
			{
				if (!(((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8) < result0)) goto LA859;
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8);
			}
			LA859: ;
		}
		LA766: ;
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 59):
	{
		Ttype_LTUWCZolpovw9cWE3JBWSUw* prev0;
		Tidobj_raN9cHVgzmvaXisezY9aGg9cg* LOC862;
		TNimObject* LOC863;
		LOC862 = (Tidobj_raN9cHVgzmvaXisezY9aGg9cg*)0;
		LOC862 = &f0->Sup;
		LOC863 = (TNimObject*)0;
		LOC863 = idtableget_D12lVDWWPrKae8szg3EYLw((*c0).bindings, LOC862);
		prev0 = ((Ttype_LTUWCZolpovw9cWE3JBWSUw*) (LOC863));
		{
			if (!(prev0 == NIM_NIL)) goto LA866;
			{
				Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC872;
				if (!((*aorig0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 59))) goto LA870;
				LOC872 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
				LOC872 = lastson_E41DMKHtT9c6sAMyyvhmSIw(f0);
				result0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, LOC872, a0, NIM_TRUE);
				{
					NIM_BOOL LOC875;
					LOC875 = (NIM_BOOL)0;
					LOC875 = !((result0 == ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0)));
					if (!(LOC875)) goto LA876;
					LOC875 = !(((*f0).n == NIM_NIL));
					LA876: ;
					if (!LOC875) goto LA877;
					{
						NIM_BOOL LOC881;
						LOC881 = (NIM_BOOL)0;
						LOC881 = exprstructuralequivalent_XApnXRaD9btY9a4pkMO0ITTg((*f0).n, (*aorig0).n, NIM_FALSE);
						if (!!(LOC881)) goto LA882;
						result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
					}
					LA882: ;
				}
				LA877: ;
				{
					if (!!((result0 == ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0)))) goto LA886;
					put_JoRvap9abGYCKt6dvPFvsFAsigmatch(c0, f0, aorig0);
				}
				LA886: ;
			}
			goto LA868;
			LA870: ;
			{
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
			}
			LA868: ;
		}
		goto LA864;
		LA866: ;
		{
			if (!((*prev0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 59))) goto LA890;
			{
				Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC896;
				if (!((*aorig0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 59))) goto LA894;
				LOC896 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
				LOC896 = lastson_E41DMKHtT9c6sAMyyvhmSIw(prev0);
				result0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, LOC896, a0, NIM_TRUE);
				{
					NIM_BOOL LOC899;
					LOC899 = (NIM_BOOL)0;
					LOC899 = !((result0 == ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0)));
					if (!(LOC899)) goto LA900;
					LOC899 = !(((*prev0).n == NIM_NIL));
					LA900: ;
					if (!LOC899) goto LA901;
					{
						NIM_BOOL LOC905;
						LOC905 = (NIM_BOOL)0;
						LOC905 = exprstructuralequivalent_XApnXRaD9btY9a4pkMO0ITTg((*prev0).n, (*aorig0).n, NIM_FALSE);
						if (!!(LOC905)) goto LA906;
						result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
					}
					LA906: ;
				}
				LA901: ;
			}
			goto LA892;
			LA894: ;
			{
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
			}
			LA892: ;
		}
		goto LA864;
		LA890: ;
		{
			result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
		}
		LA864: ;
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 8):
	{
		Ttype_LTUWCZolpovw9cWE3JBWSUw* prev0;
		Tidobj_raN9cHVgzmvaXisezY9aGg9cg* LOC911;
		TNimObject* LOC912;
		LOC911 = (Tidobj_raN9cHVgzmvaXisezY9aGg9cg*)0;
		LOC911 = &f0->Sup;
		LOC912 = (TNimObject*)0;
		LOC912 = idtableget_D12lVDWWPrKae8szg3EYLw((*c0).bindings, LOC911);
		prev0 = ((Ttype_LTUWCZolpovw9cWE3JBWSUw*) (LOC912));
		{
			if (!(prev0 == NIM_NIL)) goto LA915;
			{
				if (!!(((*a0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 8)))) goto LA919;
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
				goto BeforeRet;
			}
			LA919: ;
			{
				Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC923;
				LOC923 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
				LOC923 = base_46gPaVDDGhiU69b2oKDJZuA(f0);
				if (!((*LOC923).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 0))) goto LA924;
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8);
			}
			goto LA921;
			LA924: ;
			{
				Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC927;
				Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC928;
				LOC927 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
				LOC927 = base_46gPaVDDGhiU69b2oKDJZuA(f0);
				LOC928 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
				LOC928 = base_46gPaVDDGhiU69b2oKDJZuA(a0);
				result0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, LOC927, LOC928, NIM_TRUE);
			}
			LA921: ;
			{
				if (!!((result0 == ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0)))) goto LA931;
				put_JoRvap9abGYCKt6dvPFvsFAsigmatch(c0, f0, a0);
			}
			LA931: ;
		}
		goto LA913;
		LA915: ;
		{
			{
				Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC938;
				if (!(((*f0).flags &(1U<<((NU)(((Ttypeflag_x2m5g1NpbmDig4wLT3Ylhw) 9))&31U)))!=0)) goto LA936;
				LOC938 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
				LOC938 = base_46gPaVDDGhiU69b2oKDJZuA(prev0);
				result0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, LOC938, a0, NIM_TRUE);
			}
			goto LA934;
			LA936: ;
			{
				Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC942;
				Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC943;
				if (!((*a0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 8))) goto LA940;
				LOC942 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
				LOC942 = base_46gPaVDDGhiU69b2oKDJZuA(prev0);
				LOC943 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
				LOC943 = base_46gPaVDDGhiU69b2oKDJZuA(a0);
				result0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, LOC942, LOC943, NIM_TRUE);
			}
			goto LA934;
			LA940: ;
			{
				result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
			}
			LA934: ;
		}
		LA913: ;
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 7):
	{
		{
			NIM_BOOL LOC948;
			LOC948 = (NIM_BOOL)0;
			LOC948 = !((aorig0 == NIM_NIL));
			if (!(LOC948)) goto LA949;
			LOC948 = !((((*f0).flags &(1U<<((NU)(((Ttypeflag_x2m5g1NpbmDig4wLT3Ylhw) 0))&31U)))!=0));
			LA949: ;
			if (!LOC948) goto LA950;
			put_JoRvap9abGYCKt6dvPFvsFAsigmatch(c0, f0, aorig0);
		}
		LA950: ;
		result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8);
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 50):
	{
		result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 10);
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 60):
	{
		Tnode_bROa11lyF5vxEN9aYNbHmhw* reevaluated0;
		{
			NIM_BOOL LOC956;
			LOC956 = (NIM_BOOL)0;
			LOC956 = ((*f0).n == NIM_NIL);
			if (LOC956) goto LA957;
			LOC956 = ((*(*f0).n).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 1));
			LA957: ;
			if (!LOC956) goto LA958;
			result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8);
			goto BeforeRet;
		}
		LA958: ;
		reevaluated0 = tryresolvingstaticexpr_9c6ZlcqOU7h9ajbZLjoxOM0w(c0, (*f0).n);
		switch ((*(*reevaluated0).typ).kind) {
		case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 8):
		{
			Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC961;
			LOC961 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
			LOC961 = base_46gPaVDDGhiU69b2oKDJZuA((*reevaluated0).typ);
			result0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, a0, LOC961, NIM_TRUE);
		}
		break;
		case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 59):
		{
			Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC963;
			LOC963 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
			LOC963 = base_46gPaVDDGhiU69b2oKDJZuA((*reevaluated0).typ);
			result0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(c0, a0, LOC963, NIM_TRUE);
			{
				NIM_BOOL LOC966;
				LOC966 = (NIM_BOOL)0;
				LOC966 = !((result0 == ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0)));
				if (!(LOC966)) goto LA967;
				LOC966 = !(((*(*reevaluated0).typ).n == NIM_NIL));
				LA967: ;
				if (!LOC966) goto LA968;
				{
					NIM_BOOL LOC972;
					LOC972 = (NIM_BOOL)0;
					LOC972 = exprstructuralequivalent_XApnXRaD9btY9a4pkMO0ITTg((*aorig0).n, (*(*reevaluated0).typ).n, NIM_FALSE);
					if (!!(LOC972)) goto LA973;
					result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
				}
				LA973: ;
			}
			LA968: ;
		}
		break;
		default:
		{
			localerror_VpilfPWbplGz6ny7O9cfr2g((*(*f0).n).info, ((Tmsgkind_IGAWgv9aR2KqPKJfPZPEWaw) 66), ((NimStringDesc*) &T_EV5hHJmjIY9cla9b9be7fSVJQ_11));
			result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0);
		}
		break;
		}
	}
	break;
	case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 0):
	{
		{
			if (!((*a0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 0))) goto LA979;
			result0 = ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 10);
		}
		LA979: ;
	}
	break;
	default:
	{
		NimStringDesc* LOC982;
		LOC982 = (NimStringDesc*)0;
		LOC982 = rawNewString(reprEnum((NI)(*f0).kind, (&NTI_9a3YiReNVD0IJHWFKgXRe9ag))->Sup.len + 19);
appendString(LOC982, ((NimStringDesc*) &T_EV5hHJmjIY9cla9b9be7fSVJQ_23));
appendString(LOC982, reprEnum((NI)(*f0).kind, (&NTI_9a3YiReNVD0IJHWFKgXRe9ag)));
		internalerror_5XY9cUy7hZmUusM38U9cYYdw(LOC982);
	}
	break;
	}
	}BeforeRet: ;
	return result0;
}

N_NIMCALL(void, incmatches_pC7j2mDtrjUpKOb1X8xk5A)(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* m0, Ttyperelation_1IMf5P083XuEtWGxYaIXyQ r0, NI convmatch0) {
	switch (r0) {
	case ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 1):
	case ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 2):
	{
		(*m0).convmatches += convmatch0;
	}
	break;
	case ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 3):
	case ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 4):
	{
		(*m0).subtypematches += ((NI) 1);
	}
	break;
	case ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8):
	case ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 6):
	case ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 5):
	{
		(*m0).genericmatches += ((NI) 1);
	}
	break;
	case ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 9):
	{
		(*m0).intconvmatches += ((NI) 256);
	}
	break;
	case ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 7):
	{
		(*m0).convmatches += ((NI) 1);
	}
	break;
	case ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 10):
	{
		(*m0).exactmatches += ((NI) 1);
	}
	break;
	case ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0):
	{
	}
	break;
	}
}

N_NIMCALL(Ttype_LTUWCZolpovw9cWE3JBWSUw*, getinstantiatedtype_4yLeA9cfYvM0ZfKPSGqCZCg)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tnode_bROa11lyF5vxEN9aYNbHmhw* arg0, Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* m0, Ttype_LTUWCZolpovw9cWE3JBWSUw* f0) {
	Ttype_LTUWCZolpovw9cWE3JBWSUw* result0;
	Tidobj_raN9cHVgzmvaXisezY9aGg9cg* LOC1;
	TNimObject* LOC2;
	result0 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
	LOC1 = (Tidobj_raN9cHVgzmvaXisezY9aGg9cg*)0;
	LOC1 = &f0->Sup;
	LOC2 = (TNimObject*)0;
	LOC2 = idtableget_D12lVDWWPrKae8szg3EYLw((*m0).bindings, LOC1);
	result0 = ((Ttype_LTUWCZolpovw9cWE3JBWSUw*) (LOC2));
	{
		if (!(result0 == NIM_NIL)) goto LA5;
		result0 = generatetypeinstance_J1KXEIMiOMsSsHjeCCCXbQ(c0, (*m0).bindings, (*arg0).info, f0);
	}
	LA5: ;
	{
		if (!(result0 == NIM_NIL)) goto LA9;
		internalerror_MXmtqrCmYwtOPkDCFgUWKQ((*arg0).info, ((NimStringDesc*) &T_EV5hHJmjIY9cla9b9be7fSVJQ_26));
		result0 = errortype_ShA6p2jJG1xQ4GbGPvr38g(c0);
	}
	LA9: ;
	return result0;
}

N_NIMCALL(Tnode_bROa11lyF5vxEN9aYNbHmhw*, implicitconv_ttBE689bA8zSgXJt6wtOZGA)(Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw kind0, Ttype_LTUWCZolpovw9cWE3JBWSUw* f0, Tnode_bROa11lyF5vxEN9aYNbHmhw* arg0, Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* m0, Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0) {
	Tnode_bROa11lyF5vxEN9aYNbHmhw* result0;
	result0 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
	result0 = newnodei_PIqgSH9b0m7nFpOyXf9cpz5w(kind0, (*arg0).info);
	{
		NIM_BOOL LOC3;
		LOC3 = (NIM_BOOL)0;
		LOC3 = containsgenerictype_Xhr5Lz1SR4KhD6lSHAyGDA(f0);
		if (!LOC3) goto LA4;
		{
			if (!!(!(((*m0).fauxmatch == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 0))))) goto LA8;
			asgnRefNoCycle((void**) (&(*result0).typ), getinstantiatedtype_4yLeA9cfYvM0ZfKPSGqCZCg(c0, arg0, m0, f0));
		}
		goto LA6;
		LA8: ;
		{
			asgnRefNoCycle((void**) (&(*result0).typ), errortype_ShA6p2jJG1xQ4GbGPvr38g(c0));
		}
		LA6: ;
	}
	goto LA1;
	LA4: ;
	{
		asgnRefNoCycle((void**) (&(*result0).typ), f0);
	}
	LA1: ;
	{
		if (!((*result0).typ == NIM_NIL)) goto LA14;
		internalerror_MXmtqrCmYwtOPkDCFgUWKQ((*arg0).info, ((NimStringDesc*) &T_EV5hHJmjIY9cla9b9be7fSVJQ_27));
	}
	LA14: ;
	addson_gCCf68XrWL79bKes6htzFjQ(result0, emptynode_69ccLGuQ2mITw7zylZYtWcA);
	addson_gCCf68XrWL79bKes6htzFjQ(result0, arg0);
	return result0;
}

N_NIMCALL(void, markused_Ue6rwV8sAT8uVT9cT5cip9aA)(Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw info0, Tsym_AXG7xcvKqaxY6koRX1xkCw* s0) {
	(*s0).flags |= ((NU32)1)<<((((Tsymflag_K9ay6LWMat9bUiT9bIbMxpDHw) 0))%(sizeof(NU32)*8));
	{
		NIM_BOOL LOC3;
		LOC3 = (NIM_BOOL)0;
		LOC3 = ((*s0).kind == ((Tsymkind_cNCW9acsSznmEccl1fgQwkw) 19));
		if (!(LOC3)) goto LA4;
		LOC3 = !(((*s0).owner == NIM_NIL));
		LA4: ;
		if (!LOC3) goto LA5;
		(*(*s0).owner).flags |= ((NU32)1)<<((((Tsymflag_K9ay6LWMat9bUiT9bIbMxpDHw) 0))%(sizeof(NU32)*8));
	}
	LA5: ;
	{
		if (!!(((1572864 & (*s0).flags) == 0))) goto LA9;
		{
			if (!(((*s0).flags &(1U<<((NU)(((Tsymflag_K9ay6LWMat9bUiT9bIbMxpDHw) 19))&31U)))!=0)) goto LA13;
			message_VpilfPWbplGz6ny7O9cfr2g_2(info0, ((Tmsgkind_IGAWgv9aR2KqPKJfPZPEWaw) 240), (*(*s0).name).s);
		}
		LA13: ;
		{
			if (!(((*s0).flags &(1U<<((NU)(((Tsymflag_K9ay6LWMat9bUiT9bIbMxpDHw) 20))&31U)))!=0)) goto LA17;
			localerror_VpilfPWbplGz6ny7O9cfr2g(info0, ((Tmsgkind_IGAWgv9aR2KqPKJfPZPEWaw) 225), (*(*s0).name).s);
		}
		LA17: ;
	}
	LA9: ;
}

N_NIMCALL(Tnode_bROa11lyF5vxEN9aYNbHmhw*, userconvmatch_fnGSh6c9cvB9b6ahDjUpd9aAA)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* m0, Ttype_LTUWCZolpovw9cWE3JBWSUw* f0, Ttype_LTUWCZolpovw9cWE3JBWSUw* a0, Tnode_bROa11lyF5vxEN9aYNbHmhw* arg0) {
	Tnode_bROa11lyF5vxEN9aYNbHmhw* result0;
{	result0 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
	result0 = NIM_NIL;
	{
		NI i_iHyWoy2zwgmVQl0tkqpbAg;
		NI HEX3Atmp_jvqUW9cUS0almkMUwKZjBRQ;
		NI res_duF1a3HvliYTU6en30LrHw;
		i_iHyWoy2zwgmVQl0tkqpbAg = (NI)0;
		HEX3Atmp_jvqUW9cUS0almkMUwKZjBRQ = (NI)0;
		HEX3Atmp_jvqUW9cUS0almkMUwKZjBRQ = (NI)(((*c0).converters ? (*c0).converters->Sup.len : 0) - ((NI) 1));
		res_duF1a3HvliYTU6en30LrHw = ((NI) 0);
		{
			while (1) {
				if (!(res_duF1a3HvliYTU6en30LrHw <= HEX3Atmp_jvqUW9cUS0almkMUwKZjBRQ)) goto LA3;
				i_iHyWoy2zwgmVQl0tkqpbAg = res_duF1a3HvliYTU6en30LrHw;
				{
					Ttype_LTUWCZolpovw9cWE3JBWSUw* src0;
					Ttype_LTUWCZolpovw9cWE3JBWSUw* dest0;
					Ttyperelation_1IMf5P083XuEtWGxYaIXyQ srca0;
					NIM_BOOL destisgeneric0;
					Ttyperelation_1IMf5P083XuEtWGxYaIXyQ fdest0;
					src0 = (*(*(*c0).converters->data[i_iHyWoy2zwgmVQl0tkqpbAg]).typ).sons->data[((NI) 1)];
					dest0 = (*(*(*c0).converters->data[i_iHyWoy2zwgmVQl0tkqpbAg]).typ).sons->data[((NI) 0)];
					srca0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(m0, src0, a0, NIM_TRUE);
					{
						if (!!(((1280 &(1U<<((NU)(srca0)&15U)))!=0))) goto LA7;
						goto LA4;
					}
					LA7: ;
					destisgeneric0 = containsgenerictype_Xhr5Lz1SR4KhD6lSHAyGDA(dest0);
					{
						if (!destisgeneric0) goto LA11;
						dest0 = generatetypeinstance_J1KXEIMiOMsSsHjeCCCXbQ(c0, (*m0).bindings, (*arg0).info, dest0);
					}
					LA11: ;
					fdest0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(m0, f0, dest0, NIM_TRUE);
					{
						Tnode_bROa11lyF5vxEN9aYNbHmhw* s0;
						Tnode_bROa11lyF5vxEN9aYNbHmhw* LOC17;
						NIM_BOOL LOC18;
						if (!((1280 &(1U<<((NU)(fdest0)&15U)))!=0)) goto LA15;
						markused_Ue6rwV8sAT8uVT9cT5cip9aA((*arg0).info, (*c0).converters->data[i_iHyWoy2zwgmVQl0tkqpbAg]);
						s0 = newsymnode_1ARBpggFQuvUDBVYjBelcw((*c0).converters->data[i_iHyWoy2zwgmVQl0tkqpbAg]);
						asgnRefNoCycle((void**) (&(*s0).typ), (*(*c0).converters->data[i_iHyWoy2zwgmVQl0tkqpbAg]).typ);
						(*s0).info = (*arg0).info;
						result0 = newnodeit_lbGnVdZM6n2HPza7jVIlww(((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 32), (*arg0).info, dest0);
						addson_gCCf68XrWL79bKes6htzFjQ(result0, s0);
						LOC17 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
						LOC17 = copytree_lz8T1F9c0YwEOpUnrAUYgjg_2(arg0);
						addson_gCCf68XrWL79bKes6htzFjQ(result0, LOC17);
						(*m0).convmatches += ((NI) 1);
						LOC18 = (NIM_BOOL)0;
						LOC18 = (srca0 == ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8));
						if (LOC18) goto LA19;
						LOC18 = destisgeneric0;
						LA19: ;
						(*m0).genericconverter = LOC18;
						goto BeforeRet;
					}
					LA15: ;
				} LA4: ;
				res_duF1a3HvliYTU6en30LrHw += ((NI) 1);
			} LA3: ;
		}
	}
	}BeforeRet: ;
	return result0;
}

N_NIMCALL(Tnode_bROa11lyF5vxEN9aYNbHmhw*, localconvmatch_fnGSh6c9cvB9b6ahDjUpd9aAA_2)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* m0, Ttype_LTUWCZolpovw9cWE3JBWSUw* f0, Ttype_LTUWCZolpovw9cWE3JBWSUw* a0, Tnode_bROa11lyF5vxEN9aYNbHmhw* arg0) {
	Tnode_bROa11lyF5vxEN9aYNbHmhw* result0;
	Tnode_bROa11lyF5vxEN9aYNbHmhw* call0;
	Tnode_bROa11lyF5vxEN9aYNbHmhw* LOC11;
	Tnode_bROa11lyF5vxEN9aYNbHmhw* LOC12;
{	result0 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
	{
		if (!((*arg0).typ == 0)) goto LA3;
		result0 = NIM_NIL;
		goto BeforeRet;
	}
	LA3: ;
	{
		NIM_BOOL LOC7;
		LOC7 = (NIM_BOOL)0;
		LOC7 = (f0 == (*arg0).typ);
		if (!(LOC7)) goto LA8;
		LOC7 = ((*arg0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 58));
		LA8: ;
		if (!LOC7) goto LA9;
		result0 = arg0;
		goto BeforeRet;
	}
	LA9: ;
	call0 = newnodei_PIqgSH9b0m7nFpOyXf9cpz5w(((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 27), (*arg0).info);
	LOC11 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
	LOC11 = copytree_lz8T1F9c0YwEOpUnrAUYgjg_2((*f0).n);
	add_gCCf68XrWL79bKes6htzFjQ_3(call0, LOC11);
	LOC12 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
	LOC12 = copytree_lz8T1F9c0YwEOpUnrAUYgjg_2(arg0);
	add_gCCf68XrWL79bKes6htzFjQ_3(call0, LOC12);
	result0 = (*c0).semexpr(c0, call0, 0);
	{
		Ttyperelation_1IMf5P083XuEtWGxYaIXyQ r0;
		if (!!((result0 == NIM_NIL))) goto LA15;
		{
			if (!((*result0).typ == NIM_NIL)) goto LA19;
			result0 = NIM_NIL;
			goto BeforeRet;
		}
		LA19: ;
		r0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(m0, (*f0).sons->data[((NI) 0)], (*result0).typ, NIM_TRUE);
		{
			if (!(r0 < ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8))) goto LA23;
			result0 = NIM_NIL;
			goto BeforeRet;
		}
		LA23: ;
		{
			if (!((*result0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 27))) goto LA27;
			(*result0).kind = ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 32);
		}
		LA27: ;
		(*m0).convmatches += ((NI) 1);
		{
			Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC33;
			if (!(r0 == ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8))) goto LA31;
			LOC33 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
			LOC33 = base_46gPaVDDGhiU69b2oKDJZuA(f0);
			asgnRefNoCycle((void**) (&(*result0).typ), getinstantiatedtype_4yLeA9cfYvM0ZfKPSGqCZCg(c0, arg0, (&(*m0)), LOC33));
		}
		LA31: ;
		(*m0).basetypematch = NIM_TRUE;
	}
	LA15: ;
	}BeforeRet: ;
	return result0;
}

N_NIMCALL(Tnode_bROa11lyF5vxEN9aYNbHmhw*, paramtypesmatchaux_VRvPGOe1y6zeZJmJzzQbsQ)(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* m0, Ttype_LTUWCZolpovw9cWE3JBWSUw* f0, Ttype_LTUWCZolpovw9cWE3JBWSUw* argtype_tI9cURCfcfMTZX8vYUIdGDg, Tnode_bROa11lyF5vxEN9aYNbHmhw* argsemantized0, Tnode_bROa11lyF5vxEN9aYNbHmhw* argorig0) {
	Tnode_bROa11lyF5vxEN9aYNbHmhw* result0;
	Ttype_LTUWCZolpovw9cWE3JBWSUw* fmaybestatic0;
	Tnode_bROa11lyF5vxEN9aYNbHmhw* arg0;
	Ttype_LTUWCZolpovw9cWE3JBWSUw* argtype0;
	Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0;
	Ttype_LTUWCZolpovw9cWE3JBWSUw* a0;
	Ttyperelation_1IMf5P083XuEtWGxYaIXyQ r0;
	NI bothmetacounter0;
	NI lastbindingslength0;
{	result0 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
	fmaybestatic0 = skiptypes_pLCdCGDuirMe9cspwviV9aVA(f0, 8192);
	arg0 = argsemantized0;
	argtype0 = argtype_tI9cURCfcfMTZX8vYUIdGDg;
	c0 = (*m0).c;
	{
		if (!(((*fmaybestatic0).flags &(1U<<((NU)(((Ttypeflag_x2m5g1NpbmDig4wLT3Ylhw) 22))&31U)))!=0)) goto LA3;
		{
			NIM_BOOL LOC7;
			LOC7 = (NIM_BOOL)0;
			LOC7 = ((*argtype0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 12));
			if (!(LOC7)) goto LA8;
			LOC7 = (((*argtype0).flags &(1U<<((NU)(((Ttypeflag_x2m5g1NpbmDig4wLT3Ylhw) 25))&31U)))!=0);
			LA8: ;
			if (!LOC7) goto LA9;
			assigntype_50w9aT349c89bOXl19bOrS5HnA(argtype0, f0);
			result0 = argsemantized0;
			goto BeforeRet;
		}
		LA9: ;
		{
			if (!((*argtype0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 59))) goto LA13;
			{
				NIM_BOOL LOC17;
				Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC21;
				LOC17 = (NIM_BOOL)0;
				LOC17 = ((*(*m0).callee).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 10));
				if (!(LOC17)) goto LA18;
				LOC17 = !((((*argtype0).flags &(1U<<((NU)(((Ttypeflag_x2m5g1NpbmDig4wLT3Ylhw) 23))&31U)))!=0));
				LA18: ;
				if (!LOC17) goto LA19;
				LOC21 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
				LOC21 = maketypefromexpr_i8yLSSLd36fdLF9a4Nc0aeg(c0, arg0);
				result0 = newnodeit_lbGnVdZM6n2HPza7jVIlww(((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 4), (*argorig0).info, LOC21);
				goto BeforeRet;
			}
			LA19: ;
		}
		goto LA11;
		LA13: ;
		{
			Tnode_bROa11lyF5vxEN9aYNbHmhw* evaluated0;
			evaluated0 = (*c0).semtryconstexpr(c0, arg0);
			{
				TY_BF9aKj6RAH9ccQDWaEKQ1HOw LOC27;
				if (!!((evaluated0 == NIM_NIL))) goto LA25;
				asgnRefNoCycle((void**) (&(*arg0).typ), newtypes_9cQrDprXawJ1DKOUTsPNMTg(((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 59), c0));
				if ((*(*arg0).typ).sons) nimGCunrefNoCycle((*(*arg0).typ).sons);
				(*(*arg0).typ).sons = (TY_zuqP4Riz26Oi5fWgPYVEgA*) newSeqRC1((&NTI_zuqP4Riz26Oi5fWgPYVEgA), 1);
				memset((void*)LOC27, 0, sizeof(LOC27));
				LOC27[0] = (*evaluated0).typ;
				asgnRefNoCycle((void**) (&(*(*arg0).typ).sons->data[0]), LOC27[0]);
				asgnRefNoCycle((void**) (&(*(*arg0).typ).n), evaluated0);
				argtype0 = (*arg0).typ;
			}
			LA25: ;
		}
		LA11: ;
	}
	LA3: ;
	a0 = argtype0;
	r0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(m0, f0, a0, NIM_TRUE);
	{
		NIM_BOOL LOC30;
		NIM_BOOL LOC31;
		LOC30 = (NIM_BOOL)0;
		LOC31 = (NIM_BOOL)0;
		LOC31 = !((r0 == ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0)));
		if (!(LOC31)) goto LA32;
		LOC31 = !(((*m0).calleesym == NIM_NIL));
		LA32: ;
		LOC30 = LOC31;
		if (!(LOC30)) goto LA33;
		LOC30 = ((196608 &(1U<<((NU)((*(*m0).calleesym).kind)&31U)))!=0);
		LA33: ;
		if (!LOC30) goto LA34;
		incmatches_pC7j2mDtrjUpKOb1X8xk5A(m0, r0, ((NI) 1));
		{
			if (!((*f0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 7))) goto LA38;
			result0 = arg0;
			goto BeforeRet;
		}
		goto LA36;
		LA38: ;
		{
			if (!((*f0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 8))) goto LA41;
			result0 = arg0;
			goto BeforeRet;
		}
		goto LA36;
		LA41: ;
		{
			if (!((*f0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 59))) goto LA44;
			result0 = (*(*arg0).typ).n;
			goto BeforeRet;
		}
		goto LA36;
		LA44: ;
		{
			result0 = argsemantized0;
			goto BeforeRet;
		}
		LA36: ;
	}
	LA34: ;
	bothmetacounter0 = ((NI) 0);
	lastbindingslength0 = ((NI) -1);
	{
		while (1) {
			NIM_BOOL LOC49;
			NIM_BOOL LOC50;
			LOC49 = (NIM_BOOL)0;
			LOC50 = (NIM_BOOL)0;
			LOC50 = (r0 == ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 5));
			if (!(LOC50)) goto LA51;
			LOC50 = !((lastbindingslength0 == (*m0).bindings.counter));
			LA51: ;
			LOC49 = LOC50;
			if (!(LOC49)) goto LA52;
			LOC49 = (bothmetacounter0 < ((NI) 100));
			LA52: ;
			if (!LOC49) goto LA48;
			lastbindingslength0 = (*m0).bindings.counter;
			bothmetacounter0 += ((NI) 1);
			{
				if (!((*arg0).kind >= ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 51) && (*arg0).kind <= ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 52) || (*arg0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 79) || (*arg0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 84))) goto LA55;
				result0 = (*c0).seminferredlambda.ClEnv? (*c0).seminferredlambda.ClPrc(c0, (*m0).bindings, arg0, (*c0).seminferredlambda.ClEnv):((T_EV5hHJmjIY9cla9b9be7fSVJQ_24)((*c0).seminferredlambda.ClPrc))(c0, (*m0).bindings, arg0);
			}
			goto LA53;
			LA55: ;
			{
				if (!!(((*arg0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 3)))) goto LA58;
				result0 = NIM_NIL;
				goto BeforeRet;
			}
			goto LA53;
			LA58: ;
			{
				Tsym_AXG7xcvKqaxY6koRX1xkCw* inferred0;
				inferred0 = (*c0).semgenerateinstance.ClEnv? (*c0).semgenerateinstance.ClPrc(c0, (*arg0).kindU.S4.sym, (*m0).bindings, (*arg0).info, (*c0).semgenerateinstance.ClEnv):((T_EV5hHJmjIY9cla9b9be7fSVJQ_25)((*c0).semgenerateinstance.ClPrc))(c0, (*arg0).kindU.S4.sym, (*m0).bindings, (*arg0).info);
				result0 = newsymnode_slQ2jWOFI1ND3N9c79b7b18g(inferred0, (*arg0).info);
			}
			LA53: ;
			(*m0).convmatches += ((NI) 1);
			arg0 = result0;
			r0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(m0, f0, (*arg0).typ, NIM_TRUE);
		} LA48: ;
	}
	switch (r0) {
	case ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 1):
	{
		(*m0).convmatches += ((NI) 1);
		result0 = implicitconv_ttBE689bA8zSgXJt6wtOZGA(((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 58), f0, arg0, (&(*m0)), c0);
	}
	break;
	case ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 2):
	{
		(*m0).intconvmatches += ((NI) 1);
		result0 = implicitconv_ttBE689bA8zSgXJt6wtOZGA(((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 58), f0, arg0, (&(*m0)), c0);
	}
	break;
	case ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 3):
	{
		(*m0).subtypematches += ((NI) 1);
		{
			if (!((*f0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 8))) goto LA66;
			result0 = arg0;
		}
		goto LA64;
		LA66: ;
		{
			result0 = implicitconv_ttBE689bA8zSgXJt6wtOZGA(((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 59), f0, arg0, (&(*m0)), c0);
		}
		LA64: ;
	}
	break;
	case ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 4):
	{
		(*m0).subtypematches += ((NI) 1);
		{
			if (!((*f0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 23))) goto LA72;
			result0 = arg0;
		}
		goto LA70;
		LA72: ;
		{
			result0 = implicitconv_ttBE689bA8zSgXJt6wtOZGA(((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 58), f0, arg0, (&(*m0)), c0);
		}
		LA70: ;
	}
	break;
	case ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 6):
	case ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 7):
	{
		{
			if (!((*arg0).kind >= ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 51) && (*arg0).kind <= ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 52) || (*arg0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 79) || (*arg0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 84))) goto LA78;
			result0 = (*c0).seminferredlambda.ClEnv? (*c0).seminferredlambda.ClPrc(c0, (*m0).bindings, arg0, (*c0).seminferredlambda.ClEnv):((T_EV5hHJmjIY9cla9b9be7fSVJQ_28)((*c0).seminferredlambda.ClPrc))(c0, (*m0).bindings, arg0);
		}
		goto LA76;
		LA78: ;
		{
			if (!!(((*arg0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 3)))) goto LA81;
			result0 = NIM_NIL;
			goto BeforeRet;
		}
		goto LA76;
		LA81: ;
		{
			Tsym_AXG7xcvKqaxY6koRX1xkCw* inferred0;
			inferred0 = (*c0).semgenerateinstance.ClEnv? (*c0).semgenerateinstance.ClPrc(c0, (*arg0).kindU.S4.sym, (*m0).bindings, (*arg0).info, (*c0).semgenerateinstance.ClEnv):((T_EV5hHJmjIY9cla9b9be7fSVJQ_29)((*c0).semgenerateinstance.ClPrc))(c0, (*arg0).kindU.S4.sym, (*m0).bindings, (*arg0).info);
			result0 = newsymnode_slQ2jWOFI1ND3N9c79b7b18g(inferred0, (*arg0).info);
		}
		LA76: ;
		{
			if (!(r0 == ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 7))) goto LA86;
			(*m0).convmatches += ((NI) 1);
			result0 = implicitconv_ttBE689bA8zSgXJt6wtOZGA(((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 58), f0, result0, (&(*m0)), c0);
		}
		goto LA84;
		LA86: ;
		{
			(*m0).genericmatches += ((NI) 1);
		}
		LA84: ;
	}
	break;
	case ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8):
	{
		(*m0).genericmatches += ((NI) 1);
		{
			if (!((*arg0).typ == NIM_NIL)) goto LA92;
			result0 = arg0;
		}
		goto LA90;
		LA92: ;
		{
			Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC95;
			LOC95 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
			LOC95 = skiptypes_pLCdCGDuirMe9cspwviV9aVA((*arg0).typ, 8431632);
			if (!((*LOC95).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 18))) goto LA96;
			result0 = implicitconv_ttBE689bA8zSgXJt6wtOZGA(((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 59), f0, arg0, (&(*m0)), c0);
		}
		goto LA90;
		LA96: ;
		{
			NIM_BOOL LOC99;
			LOC99 = (NIM_BOOL)0;
			LOC99 = isemptycontainer_XI7vH8jtAcp7rWqTmfZOSg_3((*arg0).typ);
			if (!LOC99) goto LA100;
			result0 = copytree_lz8T1F9c0YwEOpUnrAUYgjg_2(arg0);
			asgnRefNoCycle((void**) (&(*result0).typ), getinstantiatedtype_4yLeA9cfYvM0ZfKPSGqCZCg(c0, arg0, (&(*m0)), f0));
		}
		goto LA90;
		LA100: ;
		{
			result0 = arg0;
		}
		LA90: ;
	}
	break;
	case ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 5):
	{
		result0 = NIM_NIL;
	}
	break;
	case ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 9):
	{
		(*m0).intconvmatches += ((NI) 256);
		result0 = implicitconv_ttBE689bA8zSgXJt6wtOZGA(((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 58), f0, arg0, (&(*m0)), c0);
	}
	break;
	case ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 10):
	{
		(*m0).exactmatches += ((NI) 1);
		result0 = arg0;
		{
			Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC108;
			LOC108 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
			LOC108 = skiptypes_pLCdCGDuirMe9cspwviV9aVA(f0, 8431632);
			if (!((262144 &((NU64)1<<((NU)((*LOC108).kind)&63U)))!=0)) goto LA109;
			result0 = implicitconv_ttBE689bA8zSgXJt6wtOZGA(((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 59), f0, arg0, (&(*m0)), c0);
		}
		LA109: ;
	}
	break;
	case ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0):
	{
		{
			if (!((IL64(1154047404513689600) &((NU64)1<<((NU)((*a0).kind)&63U)))!=0)) goto LA114;
			(*m0).genericmatches += ((NI) 1);
			(*m0).fauxmatch = (*a0).kind;
			result0 = arg0;
			goto BeforeRet;
		}
		LA114: ;
		result0 = userconvmatch_fnGSh6c9cvB9b6ahDjUpd9aAA(c0, m0, f0, a0, arg0);
		{
			NIM_BOOL LOC118;
			LOC118 = (NIM_BOOL)0;
			LOC118 = (result0 == NIM_NIL);
			if (!(LOC118)) goto LA119;
			LOC118 = ((*f0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 48));
			LA119: ;
			if (!LOC118) goto LA120;
			{
				if (!!(((*f0).n == NIM_NIL))) goto LA124;
				result0 = localconvmatch_fnGSh6c9cvB9b6ahDjUpd9aAA_2(c0, m0, f0, a0, arg0);
			}
			goto LA122;
			LA124: ;
			{
				Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC127;
				LOC127 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
				LOC127 = base_46gPaVDDGhiU69b2oKDJZuA(f0);
				r0 = typerel_0fsYV9bVZA2eXpHTIQspjZA(m0, LOC127, a0, NIM_TRUE);
				{
					if (!(((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8) <= r0)) goto LA130;
					(*m0).convmatches += ((NI) 1);
					result0 = copytree_lz8T1F9c0YwEOpUnrAUYgjg_2(arg0);
					{
						Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC136;
						if (!(r0 == ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 8))) goto LA134;
						LOC136 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
						LOC136 = base_46gPaVDDGhiU69b2oKDJZuA(f0);
						asgnRefNoCycle((void**) (&(*result0).typ), getinstantiatedtype_4yLeA9cfYvM0ZfKPSGqCZCg(c0, arg0, (&(*m0)), LOC136));
					}
					LA134: ;
					(*m0).basetypematch = NIM_TRUE;
				}
				goto LA128;
				LA130: ;
				{
					Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC138;
					LOC138 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
					LOC138 = base_46gPaVDDGhiU69b2oKDJZuA(f0);
					result0 = userconvmatch_fnGSh6c9cvB9b6ahDjUpd9aAA(c0, m0, LOC138, a0, arg0);
					{
						if (!!((result0 == NIM_NIL))) goto LA141;
						(*m0).basetypematch = NIM_TRUE;
					}
					LA141: ;
				}
				LA128: ;
			}
			LA122: ;
		}
		LA120: ;
	}
	break;
	}
	}BeforeRet: ;
	return result0;
}

N_NIMCALL(void, copycandidate_pupnwSeNO1uiPChHifpilQ)(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* a0, Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* b0) {
	unsureAsgnRef((void**) (&(*a0).c), (*b0).c);
	(*a0).exactmatches = (*b0).exactmatches;
	(*a0).subtypematches = (*b0).subtypematches;
	(*a0).convmatches = (*b0).convmatches;
	(*a0).intconvmatches = (*b0).intconvmatches;
	(*a0).genericmatches = (*b0).genericmatches;
	(*a0).state = (*b0).state;
	unsureAsgnRef((void**) (&(*a0).callee), (*b0).callee);
	unsureAsgnRef((void**) (&(*a0).calleesym), (*b0).calleesym);
	unsureAsgnRef((void**) (&(*a0).call), copytree_lz8T1F9c0YwEOpUnrAUYgjg_2((*b0).call));
	(*a0).basetypematch = (*b0).basetypematch;
	copyidtable_PAWgxjpTWlqAOeehMcKZ0w((&(*a0).bindings), (*b0).bindings);
}
static N_NIMCALL(void, Marker_TY_xITzrU1RhJLKwBlRCAbn9bA)(void* p, NI op) {
	TY_xITzrU1RhJLKwBlRCAbn9bA* a;
	NI LOC1;
	a = (TY_xITzrU1RhJLKwBlRCAbn9bA*)p;
	LOC1 = (NI)0;
	for (LOC1 = 0; LOC1 < a->Sup.len; LOC1++) {
	nimGCvisit((void*)a->data[LOC1].Field0, op);
	}
}

N_NIMCALL(NI, sumgeneric_3yGddmiezmYo8RY02I0sJQ)(Ttype_LTUWCZolpovw9cWE3JBWSUw* t_D7m3YNJLIYTykWw0m4MtHQ) {
	NI result0;
	Ttype_LTUWCZolpovw9cWE3JBWSUw* t0;
	NI isvar0;
{	result0 = (NI)0;
	t0 = t_D7m3YNJLIYTykWw0m4MtHQ;
	isvar0 = ((NI) 1);
	{
		while (1) {
			switch ((*t0).kind) {
			case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 11):
			case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 16):
			case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 22):
			case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 21):
			case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 13):
			case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 27):
			case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 48):
			case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 19):
			case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 20):
			case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 24):
			case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 10):
			{
				t0 = lastson_E41DMKHtT9c6sAMyyvhmSIw(t0);
				result0 += ((NI) 1);
			}
			break;
			case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 23):
			{
				t0 = (*t0).sons->data[((NI) 0)];
				result0 += ((NI) 1);
				isvar0 += ((NI) 1);
			}
			break;
			case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 8):
			{
				t0 = lastson_E41DMKHtT9c6sAMyyvhmSIw(t0);
				{
					if (!((*t0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 3))) goto LA8;
					goto LA1;
				}
				LA8: ;
				result0 += ((NI) 1);
			}
			break;
			case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 9):
			case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 18):
			case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 25):
			{
				result0 += ((NI) (((*t0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 9))));
				{
					NI i_JRuQzEDcl9cBDGv18nQAfkg;
					NI HEX3Atmp_sJF9bVZkLS9cOOWlc8pxwgtQ;
					NI LOC12;
					NI res_vspXIWwFhtxIiCmZGdU4UQ;
					i_JRuQzEDcl9cBDGv18nQAfkg = (NI)0;
					HEX3Atmp_sJF9bVZkLS9cOOWlc8pxwgtQ = (NI)0;
					LOC12 = (NI)0;
					LOC12 = len_gG7hUAX9cA629ahMLVL3xN4w_2(t0);
					HEX3Atmp_sJF9bVZkLS9cOOWlc8pxwgtQ = (LOC12 - 1);
					res_vspXIWwFhtxIiCmZGdU4UQ = ((NI) 0);
					{
						while (1) {
							if (!(res_vspXIWwFhtxIiCmZGdU4UQ <= HEX3Atmp_sJF9bVZkLS9cOOWlc8pxwgtQ)) goto LA14;
							i_JRuQzEDcl9cBDGv18nQAfkg = res_vspXIWwFhtxIiCmZGdU4UQ;
							{
								NI LOC19;
								if (!!(((*t0).sons->data[i_JRuQzEDcl9cBDGv18nQAfkg] == NIM_NIL))) goto LA17;
								LOC19 = (NI)0;
								LOC19 = sumgeneric_3yGddmiezmYo8RY02I0sJQ((*t0).sons->data[i_JRuQzEDcl9cBDGv18nQAfkg]);
								result0 += LOC19;
							}
							LA17: ;
							res_vspXIWwFhtxIiCmZGdU4UQ += ((NI) 1);
						} LA14: ;
					}
				}
				goto LA1;
			}
			break;
			case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 12):
			case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 6):
			case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 59):
			case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 7):
			{
				goto LA1;
			}
			break;
			case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 4):
			{
				t0 = lastson_E41DMKHtT9c6sAMyyvhmSIw(t0);
			}
			break;
			case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 1):
			case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 2):
			case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 14):
			case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 17):
			case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 26):
			case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 28):
			case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 29):
			case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 31) ... ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 35):
			case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 36) ... ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 39):
			case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 40) ... ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 44):
			case ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 54):
			{
				result0 = isvar0;
				goto BeforeRet;
			}
			break;
			default:
			{
				result0 = ((NI) 0);
				goto BeforeRet;
			}
			break;
			}
		}
	} LA1: ;
	}BeforeRet: ;
	return result0;
}

N_NIMCALL(NI, complexdisambiguation_QYrRv9bDF6IEx6OHay7hPpg)(Ttype_LTUWCZolpovw9cWE3JBWSUw* a0, Ttype_LTUWCZolpovw9cWE3JBWSUw* b0) {
	NI result0;
	NI winner0;
{	result0 = (NI)0;
	winner0 = ((NI) 0);
	{
		NI i_mAd1hkSNkiD7429cuVI04GQ;
		NI HEX3Atmp_MzaYybhfqCyzRFRtnmdBuA;
		NI LOC2;
		NI LOC3;
		NI res_KRO9cHAC6eHOiinpsPfw6LA;
		i_mAd1hkSNkiD7429cuVI04GQ = (NI)0;
		HEX3Atmp_MzaYybhfqCyzRFRtnmdBuA = (NI)0;
		LOC2 = (NI)0;
		LOC2 = len_gG7hUAX9cA629ahMLVL3xN4w_2(a0);
		LOC3 = (NI)0;
		LOC3 = len_gG7hUAX9cA629ahMLVL3xN4w_2(b0);
		HEX3Atmp_MzaYybhfqCyzRFRtnmdBuA = (((LOC2 <= LOC3) ? LOC2 : LOC3) - 1);
		res_KRO9cHAC6eHOiinpsPfw6LA = ((NI) 1);
		{
			while (1) {
				NI x0;
				NI y0;
				if (!(res_KRO9cHAC6eHOiinpsPfw6LA <= HEX3Atmp_MzaYybhfqCyzRFRtnmdBuA)) goto LA5;
				i_mAd1hkSNkiD7429cuVI04GQ = res_KRO9cHAC6eHOiinpsPfw6LA;
				x0 = sumgeneric_3yGddmiezmYo8RY02I0sJQ((*a0).sons->data[i_mAd1hkSNkiD7429cuVI04GQ]);
				y0 = sumgeneric_3yGddmiezmYo8RY02I0sJQ((*b0).sons->data[i_mAd1hkSNkiD7429cuVI04GQ]);
				{
					if (!!((x0 == y0))) goto LA8;
					{
						if (!(winner0 == ((NI) 0))) goto LA12;
						{
							if (!(y0 < x0)) goto LA16;
							winner0 = ((NI) 1);
						}
						goto LA14;
						LA16: ;
						{
							winner0 = ((NI) -1);
						}
						LA14: ;
					}
					goto LA10;
					LA12: ;
					{
						if (!(y0 < x0)) goto LA20;
						{
							if (!!((winner0 == ((NI) 1)))) goto LA24;
							result0 = ((NI) 0);
							goto BeforeRet;
						}
						LA24: ;
					}
					goto LA10;
					LA20: ;
					{
						{
							if (!!((winner0 == ((NI) -1)))) goto LA29;
							result0 = ((NI) 0);
							goto BeforeRet;
						}
						LA29: ;
					}
					LA10: ;
				}
				LA8: ;
				res_KRO9cHAC6eHOiinpsPfw6LA += ((NI) 1);
			} LA5: ;
		}
	}
	result0 = winner0;
	}BeforeRet: ;
	return result0;
}

N_NIMCALL(NI, cmpcandidates_y6m9bhhlwHAuzsfu0xg0hDQ)(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* a0, Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* b0) {
	NI result0;
{	result0 = (NI)0;
	result0 = (NI)((*a0).exactmatches - (*b0).exactmatches);
	{
		if (!!((result0 == ((NI) 0)))) goto LA3;
		goto BeforeRet;
	}
	LA3: ;
	result0 = (NI)((*a0).genericmatches - (*b0).genericmatches);
	{
		if (!!((result0 == ((NI) 0)))) goto LA7;
		goto BeforeRet;
	}
	LA7: ;
	result0 = (NI)((*a0).subtypematches - (*b0).subtypematches);
	{
		if (!!((result0 == ((NI) 0)))) goto LA11;
		goto BeforeRet;
	}
	LA11: ;
	result0 = (NI)((*a0).intconvmatches - (*b0).intconvmatches);
	{
		if (!!((result0 == ((NI) 0)))) goto LA15;
		goto BeforeRet;
	}
	LA15: ;
	result0 = (NI)((*a0).convmatches - (*b0).convmatches);
	{
		if (!!((result0 == ((NI) 0)))) goto LA19;
		goto BeforeRet;
	}
	LA19: ;
	result0 = (NI)((*b0).inheritancepenalty - (*a0).inheritancepenalty);
	{
		if (!!((result0 == ((NI) 0)))) goto LA23;
		goto BeforeRet;
	}
	LA23: ;
	result0 = complexdisambiguation_QYrRv9bDF6IEx6OHay7hPpg((*a0).callee, (*b0).callee);
	{
		if (!!((result0 == ((NI) 0)))) goto LA27;
		goto BeforeRet;
	}
	LA27: ;
	result0 = (NI)((*a0).calleescope - (*b0).calleescope);
	}BeforeRet: ;
	return result0;
}

N_NIMCALL(Tnode_bROa11lyF5vxEN9aYNbHmhw*, paramtypesmatch_4oz468xMSO9cYY9cQWwg7YHg)(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* m0, Ttype_LTUWCZolpovw9cWE3JBWSUw* f0, Ttype_LTUWCZolpovw9cWE3JBWSUw* a0, Tnode_bROa11lyF5vxEN9aYNbHmhw* arg0, Tnode_bROa11lyF5vxEN9aYNbHmhw* argorig0) {
	Tnode_bROa11lyF5vxEN9aYNbHmhw* result0;
	result0 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
	{
		NIM_BOOL LOC3;
		LOC3 = (NIM_BOOL)0;
		LOC3 = (arg0 == NIM_NIL);
		if (LOC3) goto LA4;
		LOC3 = !(((*arg0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 56) || (*arg0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 57)));
		LA4: ;
		if (!LOC3) goto LA5;
		result0 = paramtypesmatchaux_VRvPGOe1y6zeZJmJzzQbsQ(m0, f0, a0, arg0, argorig0);
	}
	goto LA1;
	LA5: ;
	{
		Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0;
		Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA x0;
		Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA y0;
		Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA z0;
		NI best0;
		c0 = (*m0).c;
		memset((void*)(&x0), 0, sizeof(x0));
		memset((void*)(&y0), 0, sizeof(y0));
		memset((void*)(&z0), 0, sizeof(z0));
		initcandidate_R0iDmZjaDJEKlSDdgINtVg(c0, (&x0), (*m0).callee);
		initcandidate_R0iDmZjaDJEKlSDdgINtVg(c0, (&y0), (*m0).callee);
		initcandidate_R0iDmZjaDJEKlSDdgINtVg(c0, (&z0), (*m0).callee);
		x0.calleesym = (*m0).calleesym;
		y0.calleesym = (*m0).calleesym;
		z0.calleesym = (*m0).calleesym;
		best0 = ((NI) -1);
		{
			NI i_hsgRdTGnDsM1Y6BT9baco9aw;
			NI HEX3Atmp_V9cEKDdgJtZMgOC62G2YQgA;
			NI LOC9;
			NI res_Qwrw2gzFawOOAZbpSGmodw;
			i_hsgRdTGnDsM1Y6BT9baco9aw = (NI)0;
			HEX3Atmp_V9cEKDdgJtZMgOC62G2YQgA = (NI)0;
			LOC9 = (NI)0;
			LOC9 = sonslen_qPWPHw7WgJeEVYUdcaRIig(arg0);
			HEX3Atmp_V9cEKDdgJtZMgOC62G2YQgA = (NI)(LOC9 - ((NI) 1));
			res_Qwrw2gzFawOOAZbpSGmodw = ((NI) 0);
			{
				while (1) {
					if (!(res_Qwrw2gzFawOOAZbpSGmodw <= HEX3Atmp_V9cEKDdgJtZMgOC62G2YQgA)) goto LA11;
					i_hsgRdTGnDsM1Y6BT9baco9aw = res_Qwrw2gzFawOOAZbpSGmodw;
					{
						Ttyperelation_1IMf5P083XuEtWGxYaIXyQ r0;
						if (!((61440 &(1U<<((NU)((*(*(*arg0).kindU.S6.sons->data[i_hsgRdTGnDsM1Y6BT9baco9aw]).kindU.S4.sym).kind)&31U)))!=0)) goto LA14;
						copycandidate_pupnwSeNO1uiPChHifpilQ((&z0), (&(*m0)));
						z0.callee = (*(*arg0).kindU.S6.sons->data[i_hsgRdTGnDsM1Y6BT9baco9aw]).typ;
						z0.calleesym = (*(*arg0).kindU.S6.sons->data[i_hsgRdTGnDsM1Y6BT9baco9aw]).kindU.S4.sym;
						r0 = typerel_0fsYV9bVZA2eXpHTIQspjZA((&z0), f0, (*(*arg0).kindU.S6.sons->data[i_hsgRdTGnDsM1Y6BT9baco9aw]).typ, NIM_TRUE);
						incmatches_pC7j2mDtrjUpKOb1X8xk5A((&z0), r0, ((NI) 2));
						{
							if (!!((r0 == ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0)))) goto LA18;
							z0.state = ((Tcandidatestate_C8RXb59bvbxaTzDOqx49aVVg) 1);
							switch (x0.state) {
							case ((Tcandidatestate_C8RXb59bvbxaTzDOqx49aVVg) 0):
							case ((Tcandidatestate_C8RXb59bvbxaTzDOqx49aVVg) 2):
							{
								genericAssign((void*)(&x0), (void*)(&z0), (&NTI_B8Gf2sSWgQ79bLZ9bYWrLHaA));
								best0 = i_hsgRdTGnDsM1Y6BT9baco9aw;
							}
							break;
							case ((Tcandidatestate_C8RXb59bvbxaTzDOqx49aVVg) 1):
							{
								NI cmp0;
								cmp0 = cmpcandidates_y6m9bhhlwHAuzsfu0xg0hDQ((&x0), (&z0));
								{
									if (!(cmp0 < ((NI) 0))) goto LA24;
									best0 = i_hsgRdTGnDsM1Y6BT9baco9aw;
									genericAssign((void*)(&x0), (void*)(&z0), (&NTI_B8Gf2sSWgQ79bLZ9bYWrLHaA));
								}
								goto LA22;
								LA24: ;
								{
									if (!(cmp0 == ((NI) 0))) goto LA27;
									genericAssign((void*)(&y0), (void*)(&z0), (&NTI_B8Gf2sSWgQ79bLZ9bYWrLHaA));
								}
								goto LA22;
								LA27: ;
								LA22: ;
							}
							break;
							}
						}
						LA18: ;
					}
					LA14: ;
					res_Qwrw2gzFawOOAZbpSGmodw += ((NI) 1);
				} LA11: ;
			}
		}
		{
			if (!(x0.state == ((Tcandidatestate_C8RXb59bvbxaTzDOqx49aVVg) 0))) goto LA31;
			result0 = NIM_NIL;
		}
		goto LA29;
		LA31: ;
		{
			NIM_BOOL LOC34;
			NI LOC36;
			LOC34 = (NIM_BOOL)0;
			LOC34 = (y0.state == ((Tcandidatestate_C8RXb59bvbxaTzDOqx49aVVg) 1));
			if (!(LOC34)) goto LA35;
			LOC36 = (NI)0;
			LOC36 = cmpcandidates_y6m9bhhlwHAuzsfu0xg0hDQ((&x0), (&y0));
			LOC34 = (LOC36 == ((NI) 0));
			LA35: ;
			if (!LOC34) goto LA37;
			{
				if (!!((x0.state == ((Tcandidatestate_C8RXb59bvbxaTzDOqx49aVVg) 1)))) goto LA41;
				internalerror_MXmtqrCmYwtOPkDCFgUWKQ((*arg0).info, ((NimStringDesc*) &T_EV5hHJmjIY9cla9b9be7fSVJQ_35));
			}
			LA41: ;
			{
				if (!((*f0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 6))) goto LA45;
				result0 = arg0;
			}
			goto LA43;
			LA45: ;
			{
				result0 = NIM_NIL;
			}
			LA43: ;
		}
		goto LA29;
		LA37: ;
		{
			markused_Ue6rwV8sAT8uVT9cT5cip9aA((*arg0).info, (*(*arg0).kindU.S6.sons->data[best0]).kindU.S4.sym);
			result0 = paramtypesmatchaux_VRvPGOe1y6zeZJmJzzQbsQ(m0, f0, (*(*arg0).kindU.S6.sons->data[best0]).typ, (*arg0).kindU.S6.sons->data[best0], argorig0);
		}
		LA29: ;
	}
	LA1: ;
	return result0;
}

N_NIMCALL(NIM_BOOL, argtypematches_cr4dgVPGk0yjqqQJn4quJw)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Ttype_LTUWCZolpovw9cWE3JBWSUw* f0, Ttype_LTUWCZolpovw9cWE3JBWSUw* a0) {
	NIM_BOOL result0;
	Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA m0;
	Tnode_bROa11lyF5vxEN9aYNbHmhw* res0;
	result0 = (NIM_BOOL)0;
	memset((void*)(&m0), 0, sizeof(m0));
	initcandidate_R0iDmZjaDJEKlSDdgINtVg(c0, (&m0), f0);
	res0 = paramtypesmatch_4oz468xMSO9cYY9cQWwg7YHg((&m0), f0, a0, emptynode_69ccLGuQ2mITw7zylZYtWcA, NIM_NIL);
	result0 = !((res0 == NIM_NIL));
	return result0;
}

static N_INLINE(NIM_BOOL, typefits_q79cNzBIFiMxy9cSPq2r9cWPQsigmatch)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tsym_AXG7xcvKqaxY6koRX1xkCw* s0, Ttype_LTUWCZolpovw9cWE3JBWSUw* firstarg0) {
	NIM_BOOL result0;
{	result0 = (NIM_BOOL)0;
	{
		NIM_BOOL LOC3;
		NIM_BOOL LOC4;
		NI LOC6;
		Tsym_AXG7xcvKqaxY6koRX1xkCw* m0;
		LOC3 = (NIM_BOOL)0;
		LOC4 = (NIM_BOOL)0;
		LOC4 = !(((*s0).typ == NIM_NIL));
		if (!(LOC4)) goto LA5;
		LOC6 = (NI)0;
		LOC6 = sonslen_gG7hUAX9cA629ahMLVL3xN4w((*s0).typ);
		LOC4 = (((NI) 1) < LOC6);
		LA5: ;
		LOC3 = LOC4;
		if (!(LOC3)) goto LA7;
		LOC3 = !(((*(*s0).typ).sons->data[((NI) 1)] == NIM_NIL));
		LA7: ;
		if (!LOC3) goto LA8;
		m0 = getmodule_0lPlu1uOok1rRK50z1V70A(s0);
		{
			NIM_BOOL LOC12;
			Ttype_LTUWCZolpovw9cWE3JBWSUw* exp0;
			LOC12 = (NIM_BOOL)0;
			LOC12 = !((m0 == NIM_NIL));
			if (!(LOC12)) goto LA13;
			LOC12 = (((*m0).flags &(1U<<((NU)(((Tsymflag_K9ay6LWMat9bUiT9bIbMxpDHw) 13))&31U)))!=0);
			LA13: ;
			if (!LOC12) goto LA14;
			{
				if (!((*s0).kind == ((Tsymkind_cNCW9acsSznmEccl1fgQwkw) 7))) goto LA18;
				goto BeforeRet;
			}
			LA18: ;
			exp0 = skiptypes_pLCdCGDuirMe9cspwviV9aVA((*(*s0).typ).sons->data[((NI) 1)], 8390672);
			{
				if (!((*exp0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 48))) goto LA22;
				exp0 = elemtype_46gPaVDDGhiU69b2oKDJZuA_2(exp0);
			}
			LA22: ;
			{
				if (!((IL64(288230376151716032) &((NU64)1<<((NU)((*exp0).kind)&63U)))!=0)) goto LA26;
				goto BeforeRet;
			}
			LA26: ;
		}
		LA14: ;
		result0 = argtypematches_cr4dgVPGk0yjqqQJn4quJw(c0, (*(*s0).typ).sons->data[((NI) 1)], firstarg0);
	}
	LA8: ;
	}BeforeRet: ;
	return result0;
}

N_NIMCALL(void, suggestoperations_MTkYMSIXBRdtvHqoUHhK1Q)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tnode_bROa11lyF5vxEN9aYNbHmhw* n0, Ttype_LTUWCZolpovw9cWE3JBWSUw* typ0, NI* outputs0) {
	NIM_BOOL islocal_0ck1tZU1eLTReYNp3VIPaQ;
	islocal_0ck1tZU1eLTReYNp3VIPaQ = NIM_TRUE;
	{
		Tscope_1cQRXW6aAknk7ywAwjH3nw* scope_XMzBMpEmJ49axM9aaJ79aMfgQ;
		Tscope_1cQRXW6aAknk7ywAwjH3nw* HEX3Atmp_NZ56qdRmMrEukz9bO9bQpxQA;
		Tscope_1cQRXW6aAknk7ywAwjH3nw* current_SXmaYz1mm80xy7EOefOlSQ;
		scope_XMzBMpEmJ49axM9aaJ79aMfgQ = (Tscope_1cQRXW6aAknk7ywAwjH3nw*)0;
		HEX3Atmp_NZ56qdRmMrEukz9bO9bQpxQA = (Tscope_1cQRXW6aAknk7ywAwjH3nw*)0;
		HEX3Atmp_NZ56qdRmMrEukz9bO9bQpxQA = (*c0).currentscope;
		current_SXmaYz1mm80xy7EOefOlSQ = HEX3Atmp_NZ56qdRmMrEukz9bO9bQpxQA;
		{
			while (1) {
				TY_sksVpmPRIkNR9axiwtD1Guw* entries_0xbtTfb5nZYKzTBYKdDeWA;
				TY_sksVpmPRIkNR9axiwtD1Guw* result_H2HBJ9aXWPzI9c4gDrZTe1pg;
				TY_ebCc9bLaaaoeQAaNbPKMIRA LOC11;
				if (!!((current_SXmaYz1mm80xy7EOefOlSQ == NIM_NIL))) goto LA3;
				scope_XMzBMpEmJ49axM9aaJ79aMfgQ = current_SXmaYz1mm80xy7EOefOlSQ;
				{
					if (!(scope_XMzBMpEmJ49axM9aaJ79aMfgQ == (*c0).toplevelscope)) goto LA6;
					islocal_0ck1tZU1eLTReYNp3VIPaQ = NIM_FALSE;
				}
				LA6: ;
				result_H2HBJ9aXWPzI9c4gDrZTe1pg = (TY_sksVpmPRIkNR9axiwtD1Guw*) newSeq((&NTI_sksVpmPRIkNR9axiwtD1Guw), 0);
				{
					Tsym_AXG7xcvKqaxY6koRX1xkCw* x_CBsu9aCoGP0wF8xmR0eXsbw;
					Tstrtable_f07aOS3dr28kGa5wcE29aFA HEX3Atmp_NZ56qdRmMrEukz9bO9bQpxQA_2;
					Ttabiter_VYF5VQsIYEVaBL0fKZJkbg it_hKBI5ZzAp8EyP7BDm4EYCA;
					Tsym_AXG7xcvKqaxY6koRX1xkCw* s_RyazzTdpdUFgbW3nvkpEpw;
					x_CBsu9aCoGP0wF8xmR0eXsbw = (Tsym_AXG7xcvKqaxY6koRX1xkCw*)0;
					memset((void*)(&HEX3Atmp_NZ56qdRmMrEukz9bO9bQpxQA_2), 0, sizeof(HEX3Atmp_NZ56qdRmMrEukz9bO9bQpxQA_2));
					HEX3Atmp_NZ56qdRmMrEukz9bO9bQpxQA_2.counter = (*scope_XMzBMpEmJ49axM9aaJ79aMfgQ).symbols.counter;
					HEX3Atmp_NZ56qdRmMrEukz9bO9bQpxQA_2.data = (*scope_XMzBMpEmJ49axM9aaJ79aMfgQ).symbols.data;
					memset((void*)(&it_hKBI5ZzAp8EyP7BDm4EYCA), 0, sizeof(it_hKBI5ZzAp8EyP7BDm4EYCA));
					s_RyazzTdpdUFgbW3nvkpEpw = inittabiter_4ygtuv45J5xOJG1H4GUF9bA((&it_hKBI5ZzAp8EyP7BDm4EYCA), HEX3Atmp_NZ56qdRmMrEukz9bO9bQpxQA_2);
					{
						while (1) {
							if (!!((s_RyazzTdpdUFgbW3nvkpEpw == NIM_NIL))) goto LA10;
							x_CBsu9aCoGP0wF8xmR0eXsbw = s_RyazzTdpdUFgbW3nvkpEpw;
							result_H2HBJ9aXWPzI9c4gDrZTe1pg = (TY_sksVpmPRIkNR9axiwtD1Guw*) incrSeqV2(&(result_H2HBJ9aXWPzI9c4gDrZTe1pg)->Sup, sizeof(Tsym_AXG7xcvKqaxY6koRX1xkCw*));
							asgnRefNoCycle((void**) (&result_H2HBJ9aXWPzI9c4gDrZTe1pg->data[result_H2HBJ9aXWPzI9c4gDrZTe1pg->Sup.len]), x_CBsu9aCoGP0wF8xmR0eXsbw);
							++result_H2HBJ9aXWPzI9c4gDrZTe1pg->Sup.len;
							s_RyazzTdpdUFgbW3nvkpEpw = nextiter_MtRRPpsZix0WHVpZVShg0A((&it_hKBI5ZzAp8EyP7BDm4EYCA), HEX3Atmp_NZ56qdRmMrEukz9bO9bQpxQA_2);
						} LA10: ;
					}
				}
				genericSeqAssign((&entries_0xbtTfb5nZYKzTBYKdDeWA), result_H2HBJ9aXWPzI9c4gDrZTe1pg, (&NTI_sksVpmPRIkNR9axiwtD1Guw));
				memset((void*)(&LOC11), 0, sizeof(LOC11));
				LOC11.ClPrc = ((T_EV5hHJmjIY9cla9b9be7fSVJQ_13) (HEX3Aanonymous_JXbbRJfy9awFVSPUsLGBSEQ)); LOC11.ClEnv = NIM_NIL;
				sort_pFXw7jjw1D1y9ahnr6FqyYQ(entries_0xbtTfb5nZYKzTBYKdDeWA->data, entries_0xbtTfb5nZYKzTBYKdDeWA->Sup.len, LOC11, ((Sortorder_8iBc6wlNqBa9cju9cUAhUAxA) 1));
				{
					Tsym_AXG7xcvKqaxY6koRX1xkCw* item_9bCWTdUTuB4MeV7lWzXx6Iw;
					NI i_FbQp8GfhzQtOE7DFi9a0E3g;
					NI L_nXCzyQXZrdTrrbMEv6PB3g;
					item_9bCWTdUTuB4MeV7lWzXx6Iw = (Tsym_AXG7xcvKqaxY6koRX1xkCw*)0;
					i_FbQp8GfhzQtOE7DFi9a0E3g = ((NI) 0);
					L_nXCzyQXZrdTrrbMEv6PB3g = (entries_0xbtTfb5nZYKzTBYKdDeWA ? entries_0xbtTfb5nZYKzTBYKdDeWA->Sup.len : 0);
					{
						while (1) {
							Tsym_AXG7xcvKqaxY6koRX1xkCw* it0;
							if (!(i_FbQp8GfhzQtOE7DFi9a0E3g < L_nXCzyQXZrdTrrbMEv6PB3g)) goto LA14;
							item_9bCWTdUTuB4MeV7lWzXx6Iw = entries_0xbtTfb5nZYKzTBYKdDeWA->data[i_FbQp8GfhzQtOE7DFi9a0E3g];
							it0 = item_9bCWTdUTuB4MeV7lWzXx6Iw;
							{
								NIM_BOOL LOC17;
								NimStringDesc* LOC21;
								Suggest_tFc84OXhHlhBIifsMtOJew LOC22;
								LOC17 = (NIM_BOOL)0;
								LOC17 = filtersymnoopr_XtYBweJqs2OpFBFVtkucbQ_2sigmatch(it0);
								if (!(LOC17)) goto LA18;
								LOC17 = typefits_q79cNzBIFiMxy9cSPq2r9cWPQsigmatch(c0, it0, typ0);
								LA18: ;
								if (!LOC17) goto LA19;
								LOC21 = (NimStringDesc*)0;
								LOC21 = HEX24_9cJCKitIoTmipZ9bq1gB25Vw(((Idecmd_1Ced39bl5eePmZ1PKMPXigQ) 1));
								memset((void*)(&LOC22), 0, sizeof(LOC22));
								symtosuggest_FFMkcTntV5b53OSyNeVJPQ(it0, islocal_0ck1tZU1eLTReYNp3VIPaQ, LOC21, ((NI) 100), (&LOC22));
								suggestresult_XfzKoO09bw9cbOe5pnn9bxngg((&LOC22));
								(*outputs0) += ((NI) 1);
							}
							LA19: ;
							i_FbQp8GfhzQtOE7DFi9a0E3g += ((NI) 1);
						} LA14: ;
					}
				}
				current_SXmaYz1mm80xy7EOefOlSQ = (*current_SXmaYz1mm80xy7EOefOlSQ).parent;
			} LA3: ;
		}
	}
}

N_NIMCALL(void, suggestobject_sZLTug9chAc5gilY9bLWuoAw_3)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tnode_bROa11lyF5vxEN9aYNbHmhw* n0, NI* outputs0) {
	switch ((*n0).kind) {
	case ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 138):
	{
		{
			NI i_GLph4cvuqqpsU4F9bqvGQ9bg;
			NI HEX3Atmp_bpdqGx09bkXo5C7HPJDk0Zg;
			NI LOC3;
			NI res_f9aKLo9bFnhHB69bn6zjcDeug;
			i_GLph4cvuqqpsU4F9bqvGQ9bg = (NI)0;
			HEX3Atmp_bpdqGx09bkXo5C7HPJDk0Zg = (NI)0;
			LOC3 = (NI)0;
			LOC3 = sonslen_qPWPHw7WgJeEVYUdcaRIig(n0);
			HEX3Atmp_bpdqGx09bkXo5C7HPJDk0Zg = (NI)(LOC3 - ((NI) 1));
			res_f9aKLo9bFnhHB69bn6zjcDeug = ((NI) 0);
			{
				while (1) {
					if (!(res_f9aKLo9bFnhHB69bn6zjcDeug <= HEX3Atmp_bpdqGx09bkXo5C7HPJDk0Zg)) goto LA5;
					i_GLph4cvuqqpsU4F9bqvGQ9bg = res_f9aKLo9bFnhHB69bn6zjcDeug;
					suggestobject_sZLTug9chAc5gilY9bLWuoAw_3(c0, (*n0).kindU.S6.sons->data[i_GLph4cvuqqpsU4F9bqvGQ9bg], outputs0);
					res_f9aKLo9bFnhHB69bn6zjcDeug += ((NI) 1);
				} LA5: ;
			}
		}
	}
	break;
	case ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 139):
	{
		NI L0;
		L0 = sonslen_qPWPHw7WgJeEVYUdcaRIig(n0);
		{
			if (!(((NI) 0) < L0)) goto LA9;
			suggestobject_sZLTug9chAc5gilY9bLWuoAw_3(c0, (*n0).kindU.S6.sons->data[((NI) 0)], outputs0);
			{
				NI i_GLph4cvuqqpsU4F9bqvGQ9bg_2;
				NI HEX3Atmp_bpdqGx09bkXo5C7HPJDk0Zg_2;
				NI res_f9aKLo9bFnhHB69bn6zjcDeug_2;
				i_GLph4cvuqqpsU4F9bqvGQ9bg_2 = (NI)0;
				HEX3Atmp_bpdqGx09bkXo5C7HPJDk0Zg_2 = (NI)0;
				HEX3Atmp_bpdqGx09bkXo5C7HPJDk0Zg_2 = (NI)(L0 - ((NI) 1));
				res_f9aKLo9bFnhHB69bn6zjcDeug_2 = ((NI) 1);
				{
					while (1) {
						Tnode_bROa11lyF5vxEN9aYNbHmhw* LOC14;
						if (!(res_f9aKLo9bFnhHB69bn6zjcDeug_2 <= HEX3Atmp_bpdqGx09bkXo5C7HPJDk0Zg_2)) goto LA13;
						i_GLph4cvuqqpsU4F9bqvGQ9bg_2 = res_f9aKLo9bFnhHB69bn6zjcDeug_2;
						LOC14 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
						LOC14 = lastson_esDJA7239bJDiq4UrX9aHCjg((*n0).kindU.S6.sons->data[i_GLph4cvuqqpsU4F9bqvGQ9bg_2]);
						suggestobject_sZLTug9chAc5gilY9bLWuoAw_3(c0, LOC14, outputs0);
						res_f9aKLo9bFnhHB69bn6zjcDeug_2 += ((NI) 1);
					} LA13: ;
				}
			}
		}
		LA9: ;
	}
	break;
	case ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 3):
	{
		suggestfield_JoTXekhy9a4BpEitLZpiC8Q(c0, (*n0).kindU.S4.sym, outputs0);
	}
	break;
	default:
	{
	}
	break;
	}
}

N_NIMCALL(void, suggestfieldaccess_sZLTug9chAc5gilY9bLWuoAw)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tnode_bROa11lyF5vxEN9aYNbHmhw* n0, NI* outputs0) {
	Ttype_LTUWCZolpovw9cWE3JBWSUw* typ0;
	typ0 = (*n0).typ;
	{
		if (!(typ0 == NIM_NIL)) goto LA3;
		{
			NIM_BOOL LOC7;
			LOC7 = (NIM_BOOL)0;
			LOC7 = ((*n0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 3));
			if (!(LOC7)) goto LA8;
			LOC7 = ((*(*n0).kindU.S4.sym).kind == ((Tsymkind_cNCW9acsSznmEccl1fgQwkw) 6));
			LA8: ;
			if (!LOC7) goto LA9;
			{
				if (!((*n0).kindU.S4.sym == (*c0).module)) goto LA13;
				{
					Tsym_AXG7xcvKqaxY6koRX1xkCw* it_crwY0XqgE4d1ZvrvnAbYzw;
					Tstrtable_f07aOS3dr28kGa5wcE29aFA HEX3Atmp_XioO0koN4545sbUzu9bTLEQ;
					Ttabiter_VYF5VQsIYEVaBL0fKZJkbg it_crwY0XqgE4d1ZvrvnAbYzw_2;
					Tsym_AXG7xcvKqaxY6koRX1xkCw* s_TOYVeNUsGaVomRdjAhhJ5g;
					it_crwY0XqgE4d1ZvrvnAbYzw = (Tsym_AXG7xcvKqaxY6koRX1xkCw*)0;
					memset((void*)(&HEX3Atmp_XioO0koN4545sbUzu9bTLEQ), 0, sizeof(HEX3Atmp_XioO0koN4545sbUzu9bTLEQ));
					HEX3Atmp_XioO0koN4545sbUzu9bTLEQ.counter = (*(*c0).toplevelscope).symbols.counter;
					HEX3Atmp_XioO0koN4545sbUzu9bTLEQ.data = (*(*c0).toplevelscope).symbols.data;
					memset((void*)(&it_crwY0XqgE4d1ZvrvnAbYzw_2), 0, sizeof(it_crwY0XqgE4d1ZvrvnAbYzw_2));
					s_TOYVeNUsGaVomRdjAhhJ5g = inittabiter_4ygtuv45J5xOJG1H4GUF9bA((&it_crwY0XqgE4d1ZvrvnAbYzw_2), HEX3Atmp_XioO0koN4545sbUzu9bTLEQ);
					{
						while (1) {
							if (!!((s_TOYVeNUsGaVomRdjAhhJ5g == NIM_NIL))) goto LA17;
							it_crwY0XqgE4d1ZvrvnAbYzw = s_TOYVeNUsGaVomRdjAhhJ5g;
							{
								NIM_BOOL LOC20;
								NimStringDesc* LOC23;
								Suggest_tFc84OXhHlhBIifsMtOJew LOC24;
								LOC20 = (NIM_BOOL)0;
								LOC20 = filtersym_XtYBweJqs2OpFBFVtkucbQsigmatch(it_crwY0XqgE4d1ZvrvnAbYzw);
								if (!LOC20) goto LA21;
								LOC23 = (NimStringDesc*)0;
								LOC23 = HEX24_9cJCKitIoTmipZ9bq1gB25Vw(((Idecmd_1Ced39bl5eePmZ1PKMPXigQ) 1));
								memset((void*)(&LOC24), 0, sizeof(LOC24));
								symtosuggest_FFMkcTntV5b53OSyNeVJPQ(it_crwY0XqgE4d1ZvrvnAbYzw, NIM_FALSE, LOC23, ((NI) 100), (&LOC24));
								suggestresult_XfzKoO09bw9cbOe5pnn9bxngg((&LOC24));
								(*outputs0) += ((NI) 1);
							}
							LA21: ;
							s_TOYVeNUsGaVomRdjAhhJ5g = nextiter_MtRRPpsZix0WHVpZVShg0A((&it_crwY0XqgE4d1ZvrvnAbYzw_2), HEX3Atmp_XioO0koN4545sbUzu9bTLEQ);
						} LA17: ;
					}
				}
			}
			goto LA11;
			LA13: ;
			{
				{
					Tsym_AXG7xcvKqaxY6koRX1xkCw* it_crwY0XqgE4d1ZvrvnAbYzw_3;
					Tstrtable_f07aOS3dr28kGa5wcE29aFA HEX3Atmp_XioO0koN4545sbUzu9bTLEQ_2;
					Ttabiter_VYF5VQsIYEVaBL0fKZJkbg it_crwY0XqgE4d1ZvrvnAbYzw_4;
					Tsym_AXG7xcvKqaxY6koRX1xkCw* s_TOYVeNUsGaVomRdjAhhJ5g_2;
					it_crwY0XqgE4d1ZvrvnAbYzw_3 = (Tsym_AXG7xcvKqaxY6koRX1xkCw*)0;
					memset((void*)(&HEX3Atmp_XioO0koN4545sbUzu9bTLEQ_2), 0, sizeof(HEX3Atmp_XioO0koN4545sbUzu9bTLEQ_2));
					HEX3Atmp_XioO0koN4545sbUzu9bTLEQ_2.counter = (*(*n0).kindU.S4.sym).kindU.S3.tab.counter;
					HEX3Atmp_XioO0koN4545sbUzu9bTLEQ_2.data = (*(*n0).kindU.S4.sym).kindU.S3.tab.data;
					memset((void*)(&it_crwY0XqgE4d1ZvrvnAbYzw_4), 0, sizeof(it_crwY0XqgE4d1ZvrvnAbYzw_4));
					s_TOYVeNUsGaVomRdjAhhJ5g_2 = inittabiter_4ygtuv45J5xOJG1H4GUF9bA((&it_crwY0XqgE4d1ZvrvnAbYzw_4), HEX3Atmp_XioO0koN4545sbUzu9bTLEQ_2);
					{
						while (1) {
							if (!!((s_TOYVeNUsGaVomRdjAhhJ5g_2 == NIM_NIL))) goto LA28;
							it_crwY0XqgE4d1ZvrvnAbYzw_3 = s_TOYVeNUsGaVomRdjAhhJ5g_2;
							{
								NIM_BOOL LOC31;
								NimStringDesc* LOC34;
								Suggest_tFc84OXhHlhBIifsMtOJew LOC35;
								LOC31 = (NIM_BOOL)0;
								LOC31 = filtersym_XtYBweJqs2OpFBFVtkucbQsigmatch(it_crwY0XqgE4d1ZvrvnAbYzw_3);
								if (!LOC31) goto LA32;
								LOC34 = (NimStringDesc*)0;
								LOC34 = HEX24_9cJCKitIoTmipZ9bq1gB25Vw(((Idecmd_1Ced39bl5eePmZ1PKMPXigQ) 1));
								memset((void*)(&LOC35), 0, sizeof(LOC35));
								symtosuggest_FFMkcTntV5b53OSyNeVJPQ(it_crwY0XqgE4d1ZvrvnAbYzw_3, NIM_FALSE, LOC34, ((NI) 100), (&LOC35));
								suggestresult_XfzKoO09bw9cbOe5pnn9bxngg((&LOC35));
								(*outputs0) += ((NI) 1);
							}
							LA32: ;
							s_TOYVeNUsGaVomRdjAhhJ5g_2 = nextiter_MtRRPpsZix0WHVpZVShg0A((&it_crwY0XqgE4d1ZvrvnAbYzw_4), HEX3Atmp_XioO0koN4545sbUzu9bTLEQ_2);
						} LA28: ;
					}
				}
			}
			LA11: ;
		}
		goto LA5;
		LA9: ;
		{
			suggesteverything_sZLTug9chAc5gilY9bLWuoAw_2(c0, n0, outputs0);
		}
		LA5: ;
	}
	goto LA1;
	LA3: ;
	{
		NIM_BOOL LOC38;
		NIM_BOOL LOC39;
		Ttype_LTUWCZolpovw9cWE3JBWSUw* t0;
		LOC38 = (NIM_BOOL)0;
		LOC39 = (NIM_BOOL)0;
		LOC39 = ((*typ0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 14));
		if (!(LOC39)) goto LA40;
		LOC39 = ((*n0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 3));
		LA40: ;
		LOC38 = LOC39;
		if (!(LOC38)) goto LA41;
		LOC38 = ((*(*n0).kindU.S4.sym).kind == ((Tsymkind_cNCW9acsSznmEccl1fgQwkw) 7));
		LA41: ;
		if (!LOC38) goto LA42;
		t0 = typ0;
		{
			while (1) {
				if (!!((t0 == NIM_NIL))) goto LA45;
				suggestsymlist_xnuyYG9cU5DIguyZ0JEF9cqg(c0, (*t0).n, outputs0);
				t0 = (*t0).sons->data[((NI) 0)];
			} LA45: ;
		}
		suggestoperations_MTkYMSIXBRdtvHqoUHhK1Q(c0, n0, typ0, outputs0);
	}
	goto LA1;
	LA42: ;
	{
		typ0 = skiptypes_pLCdCGDuirMe9cspwviV9aVA(typ0, 14682128);
		{
			Ttype_LTUWCZolpovw9cWE3JBWSUw* t0;
			if (!((*typ0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 17))) goto LA49;
			t0 = typ0;
			{
				while (1) {
					suggestobject_sZLTug9chAc5gilY9bLWuoAw_3(c0, (*t0).n, outputs0);
					{
						if (!((*t0).sons->data[((NI) 0)] == NIM_NIL)) goto LA55;
						goto LA51;
					}
					LA55: ;
					t0 = skiptypes_pLCdCGDuirMe9cspwviV9aVA((*t0).sons->data[((NI) 0)], 14682384);
				}
			} LA51: ;
			suggestoperations_MTkYMSIXBRdtvHqoUHhK1Q(c0, n0, typ0, outputs0);
		}
		goto LA47;
		LA49: ;
		{
			NIM_BOOL LOC58;
			LOC58 = (NIM_BOOL)0;
			LOC58 = ((*typ0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 18));
			if (!(LOC58)) goto LA59;
			LOC58 = !(((*typ0).n == NIM_NIL));
			LA59: ;
			if (!LOC58) goto LA60;
			suggestsymlist_xnuyYG9cU5DIguyZ0JEF9cqg(c0, (*typ0).n, outputs0);
			suggestoperations_MTkYMSIXBRdtvHqoUHhK1Q(c0, n0, typ0, outputs0);
		}
		goto LA47;
		LA60: ;
		{
			suggestoperations_MTkYMSIXBRdtvHqoUHhK1Q(c0, n0, typ0, outputs0);
		}
		LA47: ;
	}
	LA1: ;
}

N_NIMCALL(Tnode_bROa11lyF5vxEN9aYNbHmhw*, findclosestcall_9aBm2OiqFaJoTlXkYMqFfYQ_2)(Tnode_bROa11lyF5vxEN9aYNbHmhw* n0) {
	Tnode_bROa11lyF5vxEN9aYNbHmhw* result0;
{	result0 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
	{
		NIM_BOOL LOC3;
		Tcheckpointresult_mp7otVupbkudrLwM0IFcHg LOC5;
		LOC3 = (NIM_BOOL)0;
		LOC3 = ((*n0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 27) || (*n0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 29) || (*n0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 30) || (*n0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 31) || (*n0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 26) || (*n0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 28) || (*n0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 32));
		if (!(LOC3)) goto LA4;
		LOC5 = (Tcheckpointresult_mp7otVupbkudrLwM0IFcHg)0;
		LOC5 = incheckpoint_GA4ibfeQx1uKQi9bIH2QX4w((*n0).info);
		LOC3 = (LOC5 == ((Tcheckpointresult_mp7otVupbkudrLwM0IFcHg) 2));
		LA4: ;
		if (!LOC3) goto LA6;
		result0 = n0;
	}
	goto LA1;
	LA6: ;
	{
		{
			NI i_F2xuR6Pu9clh9cCAcT8oC9aTw;
			NI HEX3Atmp_PDogAJqDs9a9cjj9b3IuPArSw;
			NI LOC10;
			NI res_9c44UooTEb9ccJQXz9cGClVJw;
			i_F2xuR6Pu9clh9cCAcT8oC9aTw = (NI)0;
			HEX3Atmp_PDogAJqDs9a9cjj9b3IuPArSw = (NI)0;
			LOC10 = (NI)0;
			LOC10 = safelen_CdME9baJhvveuPEDZE9bXoxAsigmatch(n0);
			HEX3Atmp_PDogAJqDs9a9cjj9b3IuPArSw = (LOC10 - 1);
			res_9c44UooTEb9ccJQXz9cGClVJw = ((NI) 0);
			{
				while (1) {
					if (!(res_9c44UooTEb9ccJQXz9cGClVJw <= HEX3Atmp_PDogAJqDs9a9cjj9b3IuPArSw)) goto LA12;
					i_F2xuR6Pu9clh9cCAcT8oC9aTw = res_9c44UooTEb9ccJQXz9cGClVJw;
					result0 = findclosestcall_9aBm2OiqFaJoTlXkYMqFfYQ_2((*n0).kindU.S6.sons->data[i_F2xuR6Pu9clh9cCAcT8oC9aTw]);
					{
						if (!!((result0 == NIM_NIL))) goto LA15;
						goto BeforeRet;
					}
					LA15: ;
					res_9c44UooTEb9ccJQXz9cGClVJw += ((NI) 1);
				} LA12: ;
			}
		}
	}
	LA1: ;
	}BeforeRet: ;
	return result0;
}

N_NIMCALL(NI, HEX3Aanonymous_JXbbRJfy9awFVSPUsLGBSEQ_2)(Tsym_AXG7xcvKqaxY6koRX1xkCw* a_yPPkY7dTxpeaTMk1k7YiRw, Tsym_AXG7xcvKqaxY6koRX1xkCw* b_rfNMfeaXpUQljDe6qQUHPw) {
	NI result0;
{	result0 = (NI)0;
	result0 = cmp_xEnKsp9cfvO7Do9cTYXo8eJw((*(*a_yPPkY7dTxpeaTMk1k7YiRw).name).s, (*(*b_rfNMfeaXpUQljDe6qQUHPw).name).s);
	goto BeforeRet;
	}BeforeRet: ;
	return result0;
}

N_NIMCALL(NIM_BOOL, namefits_aHOzXQ5KFmG6jnLobldVaw)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tsym_AXG7xcvKqaxY6koRX1xkCw* s0, Tnode_bROa11lyF5vxEN9aYNbHmhw* n0) {
	NIM_BOOL result0;
	Tnode_bROa11lyF5vxEN9aYNbHmhw* op0;
	Tident_4umxGerWTHGPwUms7Yqu3g* opr0;
{	result0 = (NIM_BOOL)0;
	op0 = (*n0).kindU.S6.sons->data[((NI) 0)];
	{
		if (!((*op0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 57) || (*op0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 56))) goto LA3;
		op0 = (*op0).kindU.S6.sons->data[((NI) 0)];
	}
	LA3: ;
	opr0 = (Tident_4umxGerWTHGPwUms7Yqu3g*)0;
	switch ((*op0).kind) {
	case ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 3):
	{
		opr0 = (*(*op0).kindU.S4.sym).name;
	}
	break;
	case ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 2):
	{
		opr0 = (*op0).kindU.S5.ident;
	}
	break;
	default:
	{
		result0 = NIM_FALSE;
		goto BeforeRet;
	}
	break;
	}
	result0 = ((*opr0).Sup.id == (*(*s0).name).Sup.id);
	}BeforeRet: ;
	return result0;
}

N_NIMCALL(void, initcandidate_k2gpOBVyx13JjcoIpvVYvQ)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* ctx0, Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* c0, Tsym_AXG7xcvKqaxY6koRX1xkCw* callee0, Tnode_bROa11lyF5vxEN9aYNbHmhw* binding0, NI calleescope0) {
	initcandidateaux_4N44pnzycRIQPHhvl7qG9cQsigmatch(ctx0, c0, (*callee0).typ);
	unsureAsgnRef((void**) (&(*c0).calleesym), callee0);
	{
		NIM_BOOL LOC3;
		LOC3 = (NIM_BOOL)0;
		LOC3 = ((258048 &(1U<<((NU)((*callee0).kind)&31U)))!=0);
		if (!(LOC3)) goto LA4;
		LOC3 = (calleescope0 == ((NI) -1));
		LA4: ;
		if (!LOC3) goto LA5;
		{
			Tsym_AXG7xcvKqaxY6koRX1xkCw* LOC9;
			Tsym_AXG7xcvKqaxY6koRX1xkCw* owner0;
			LOC9 = (Tsym_AXG7xcvKqaxY6koRX1xkCw*)0;
			LOC9 = originatingmodule_ugWPlZqqVshHUeOH4zw3vA_2(callee0);
			if (!(LOC9 == (*ctx0).module)) goto LA10;
			(*c0).calleescope = ((NI) 2);
			owner0 = callee0;
			{
				while (1) {
					owner0 = skipgenericowner_ugWPlZqqVshHUeOH4zw3vA(owner0);
					{
						if (!((*owner0).kind == ((Tsymkind_cNCW9acsSznmEccl1fgQwkw) 6))) goto LA16;
						goto LA12;
					}
					LA16: ;
					(*c0).calleescope += ((NI) 1);
				}
			} LA12: ;
		}
		goto LA7;
		LA10: ;
		{
			(*c0).calleescope = ((NI) 1);
		}
		LA7: ;
	}
	goto LA1;
	LA5: ;
	{
		(*c0).calleescope = calleescope0;
	}
	LA1: ;
	(*c0).magic = (*(*c0).calleesym).magic;
	initidtable_9cUS2oaKn1IFXKjLdglPZHQ((&(*c0).bindings));
	genericSeqAssign((&(*c0).errors), NIM_NIL, (&NTI_xITzrU1RhJLKwBlRCAbn9bA));
	{
		NIM_BOOL LOC22;
		Tnode_bROa11lyF5vxEN9aYNbHmhw* typeparams0;
		LOC22 = (NIM_BOOL)0;
		LOC22 = !((binding0 == NIM_NIL));
		if (!(LOC22)) goto LA23;
		LOC22 = ((258048 &(1U<<((NU)((*callee0).kind)&31U)))!=0);
		LA23: ;
		if (!LOC22) goto LA24;
		typeparams0 = HEX5BHEX5D_4mGh5VHoHoaSkXDYdG6pyAitersgen((*callee0).ast, ((NI) 2));
		{
			NI i_9aMe9bCR33Dab2i7xKzM7eMQ;
			NI HEX3Atmp_9bQLo69cGpuDb9c1UxMITr5rQ;
			NI LOC27;
			NI LOC28;
			NI res_2OIBti2isvvdN5AvWzyipg;
			i_9aMe9bCR33Dab2i7xKzM7eMQ = (NI)0;
			HEX3Atmp_9bQLo69cGpuDb9c1UxMITr5rQ = (NI)0;
			LOC27 = (NI)0;
			LOC27 = sonslen_qPWPHw7WgJeEVYUdcaRIig(typeparams0);
			LOC28 = (NI)0;
			LOC28 = sonslen_qPWPHw7WgJeEVYUdcaRIig(binding0);
			HEX3Atmp_9bQLo69cGpuDb9c1UxMITr5rQ = ((LOC27 <= (NI)(LOC28 - ((NI) 1))) ? LOC27 : (NI)(LOC28 - ((NI) 1)));
			res_2OIBti2isvvdN5AvWzyipg = ((NI) 1);
			{
				while (1) {
					Ttype_LTUWCZolpovw9cWE3JBWSUw* formaltypeparam0;
					Ttype_LTUWCZolpovw9cWE3JBWSUw* bound0;
					Tnode_bROa11lyF5vxEN9aYNbHmhw* LOC31;
					if (!(res_2OIBti2isvvdN5AvWzyipg <= HEX3Atmp_9bQLo69cGpuDb9c1UxMITr5rQ)) goto LA30;
					i_9aMe9bCR33Dab2i7xKzM7eMQ = res_2OIBti2isvvdN5AvWzyipg;
					formaltypeparam0 = (*(*typeparams0).kindU.S6.sons->data[(NI)(i_9aMe9bCR33Dab2i7xKzM7eMQ - ((NI) 1))]).typ;
					LOC31 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
					LOC31 = HEX5BHEX5D_4mGh5VHoHoaSkXDYdG6pyAitersgen(binding0, i_9aMe9bCR33Dab2i7xKzM7eMQ);
					bound0 = (*LOC31).typ;
					{
						NimStringDesc* LOC36;
						if (!!(!((bound0 == NIM_NIL)))) goto LA34;
						LOC36 = (NimStringDesc*)0;
						LOC36 = HEX24_k53Ge4e9cDjc7y9c5uML7sPQ(T_EV5hHJmjIY9cla9b9be7fSVJQ_37);
						internalerror_5XY9cUy7hZmUusM38U9cYYdw(LOC36);
					}
					LA34: ;
					{
						if (!((*formaltypeparam0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 8))) goto LA39;
						{
							if (!!(((*bound0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 8)))) goto LA43;
							bound0 = maketypedesc_CqYEBJKDkKTW89cDtM9aYg4g(ctx0, bound0);
						}
						LA43: ;
					}
					goto LA37;
					LA39: ;
					{
						bound0 = skiptypes_pLCdCGDuirMe9cspwviV9aVA(bound0, 256);
					}
					LA37: ;
					put_JoRvap9abGYCKt6dvPFvsFAsigmatch(c0, formaltypeparam0, bound0);
					res_2OIBti2isvvdN5AvWzyipg += ((NI) 1);
				} LA30: ;
			}
		}
	}
	LA24: ;
}

N_NIMCALL(Ttype_LTUWCZolpovw9cWE3JBWSUw*, arrayconstr_kYM3keGF9bgNpWhgQ6i4cvw)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw info0) {
	Ttype_LTUWCZolpovw9cWE3JBWSUw* result0;
	Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC1;
	Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC2;
	Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC3;
	result0 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
	result0 = newtypes_9cQrDprXawJ1DKOUTsPNMTg(((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 16), c0);
	LOC1 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
	LOC1 = getsystype_dewjtBqyEbcVGQRaQFtDAw(((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 31));
	LOC2 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
	LOC2 = makerangetype_dvifOZPMqHzaM6DkApBvxg(c0, IL64(0), IL64(-1), info0, LOC1);
	rawaddson_52UH8yKinsYmFX9bFij9c2Hw(result0, LOC2);
	LOC3 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
	LOC3 = newtypes_9cQrDprXawJ1DKOUTsPNMTg(((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 3), c0);
	rawaddson_52UH8yKinsYmFX9bFij9c2Hw(result0, LOC3);
	return result0;
}

N_NIMCALL(void, setson_FXgYDL7XFFjJ13GOQwso6g)(Tnode_bROa11lyF5vxEN9aYNbHmhw* father0, NI at0, Tnode_bROa11lyF5vxEN9aYNbHmhw* son0) {
	NI oldlen0;
	oldlen0 = len_CdME9baJhvveuPEDZE9bXoxAlambdalifting(father0);
	{
		if (!(oldlen0 <= at0)) goto LA3;
		(*father0).kindU.S6.sons = (TY_ehmV9bTklH2Gt9cXHV9c0HLeQ*) setLengthSeq(&((*father0).kindU.S6.sons)->Sup, sizeof(Tnode_bROa11lyF5vxEN9aYNbHmhw*), ((NI) ((NI)(at0 + ((NI) 1)))));
	}
	LA3: ;
	asgnRefNoCycle((void**) (&(*father0).kindU.S6.sons->data[at0]), son0);
}

N_NIMCALL(void, incrindextype_rBBnNicDfwmFIGT2L6rbPA)(Ttype_LTUWCZolpovw9cWE3JBWSUw* t0) {
	(*(*(*(*t0).sons->data[((NI) 0)]).n).kindU.S6.sons->data[((NI) 1)]).kindU.S1.intval += ((NI) 1);
}

N_NIMCALL(void, preparenamedparam_4aY53hSpWPSeKKJlRFg8JA)(Tnode_bROa11lyF5vxEN9aYNbHmhw* a0) {
	{
		Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw info0;
		Tident_4umxGerWTHGPwUms7Yqu3g* LOC5;
		if (!!(((*(*a0).kindU.S6.sons->data[((NI) 0)]).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 2)))) goto LA3;
		info0 = (*(*a0).kindU.S6.sons->data[((NI) 0)]).info;
		LOC5 = (Tident_4umxGerWTHGPwUms7Yqu3g*)0;
		LOC5 = considerquotedident_bi6H6x9cvavSxJocgYdA9bRw((*a0).kindU.S6.sons->data[((NI) 0)]);
		asgnRefNoCycle((void**) (&(*a0).kindU.S6.sons->data[((NI) 0)]), newidentnode_G82iaTfj9aP4Nw5aup9b62iQ(LOC5, info0));
	}
	LA3: ;
}

N_NIMCALL(Tnode_bROa11lyF5vxEN9aYNbHmhw*, prepareoperand_aaHsR8QX2N2PHWQRAidM9cQ)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Ttype_LTUWCZolpovw9cWE3JBWSUw* formal0, Tnode_bROa11lyF5vxEN9aYNbHmhw* a0) {
	Tnode_bROa11lyF5vxEN9aYNbHmhw* result0;
	result0 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
	{
		NIM_BOOL LOC3;
		NI LOC5;
		LOC3 = (NIM_BOOL)0;
		LOC3 = ((*formal0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 6));
		if (!(LOC3)) goto LA4;
		LOC5 = (NI)0;
		LOC5 = len_gG7hUAX9cA629ahMLVL3xN4w_2(formal0);
		LOC3 = !((LOC5 == ((NI) 1)));
		LA4: ;
		if (!LOC3) goto LA6;
		result0 = a0;
	}
	goto LA1;
	LA6: ;
	{
		Texprflag_0WWd9a4ssQWuY7Q6ZKepq9cQ_Set flags0;
		if (!((*a0).typ == 0)) goto LA9;
		flags0 = 48;
		result0 = (*c0).semoperand(c0, a0, flags0);
	}
	goto LA1;
	LA9: ;
	{
		result0 = a0;
	}
	LA1: ;
	return result0;
}

N_NIMCALL(Ttype_LTUWCZolpovw9cWE3JBWSUw*, arrayconstr_Y9chpkGw6fgFUgeuv6B8QoA)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tnode_bROa11lyF5vxEN9aYNbHmhw* n0) {
	Ttype_LTUWCZolpovw9cWE3JBWSUw* result0;
	Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC1;
	Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC2;
	Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC3;
	result0 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
	result0 = newtypes_9cQrDprXawJ1DKOUTsPNMTg(((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 16), c0);
	LOC1 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
	LOC1 = getsystype_dewjtBqyEbcVGQRaQFtDAw(((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 31));
	LOC2 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
	LOC2 = makerangetype_dvifOZPMqHzaM6DkApBvxg(c0, IL64(0), IL64(0), (*n0).info, LOC1);
	rawaddson_52UH8yKinsYmFX9bFij9c2Hw(result0, LOC2);
	LOC3 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
	LOC3 = skiptypes_pLCdCGDuirMe9cspwviV9aVA((*n0).typ, 8423424);
	addsonskipintlit_d0ho9bIGF3YeWTv0iA2z9awA(result0, LOC3);
	return result0;
}

N_NIMCALL(Tnode_bROa11lyF5vxEN9aYNbHmhw*, prepareoperand_KkKYwsOmKMXfkn3glfCbuA)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tnode_bROa11lyF5vxEN9aYNbHmhw* a0) {
	Tnode_bROa11lyF5vxEN9aYNbHmhw* result0;
	result0 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
	{
		if (!((*a0).typ == 0)) goto LA3;
		result0 = (*c0).semoperand(c0, a0, 32);
	}
	goto LA1;
	LA3: ;
	{
		result0 = a0;
	}
	LA1: ;
	return result0;
}

N_NIMCALL(void, matchesaux_5B328Lq3sbOWOpGv9bkDcTg)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tnode_bROa11lyF5vxEN9aYNbHmhw* n0, Tnode_bROa11lyF5vxEN9aYNbHmhw* norig0, Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* m0, Intset_PQrmFm4BXFkFSVOUl1ojSg* marker0) {
	NI f0;
	NI a0;
	NI formallen0;
	Tnode_bROa11lyF5vxEN9aYNbHmhw* LOC6;
	Tnode_bROa11lyF5vxEN9aYNbHmhw* container0;
	Tsym_AXG7xcvKqaxY6koRX1xkCw* formal0;
{	{
		if (!!(((*(*m0).callee).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 10)))) goto LA3;
		f0 = ((NI) 1);
	}
	goto LA1;
	LA3: ;
	{
		f0 = ((NI) 0);
	}
	LA1: ;
	a0 = ((NI) 1);
	(*m0).state = ((Tcandidatestate_C8RXb59bvbxaTzDOqx49aVVg) 1);
	unsureAsgnRef((void**) (&(*m0).call), newnodei_PIqgSH9b0m7nFpOyXf9cpz5w((*n0).kind, (*n0).info));
	asgnRefNoCycle((void**) (&(*(*m0).call).typ), base_46gPaVDDGhiU69b2oKDJZuA((*m0).callee));
	formallen0 = len_CdME9baJhvveuPEDZE9bXoxAlambdalifting((*(*m0).callee).n);
	LOC6 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
	LOC6 = copytree_lz8T1F9c0YwEOpUnrAUYgjg_2((*n0).kindU.S6.sons->data[((NI) 0)]);
	addson_gCCf68XrWL79bKes6htzFjQ((*m0).call, LOC6);
	container0 = NIM_NIL;
	{
		if (!(((NI) 1) < formallen0)) goto LA9;
		formal0 = (*(*(*(*m0).callee).n).kindU.S6.sons->data[((NI) 1)]).kindU.S4.sym;
	}
	goto LA7;
	LA9: ;
	{
		formal0 = NIM_NIL;
	}
	LA7: ;
	{
		while (1) {
			NI LOC14;
			LOC14 = (NI)0;
			LOC14 = len_CdME9baJhvveuPEDZE9bXoxAlambdalifting(n0);
			if (!(a0 < LOC14)) goto LA13;
			{
				NIM_BOOL LOC17;
				NIM_BOOL LOC18;
				NIM_BOOL LOC21;
				NIM_BOOL LOC22;
				LOC17 = (NIM_BOOL)0;
				LOC18 = (NIM_BOOL)0;
				LOC18 = ((NI)(formallen0 - ((NI) 1)) <= a0);
				if (!(LOC18)) goto LA19;
				LOC18 = !((formal0 == NIM_NIL));
				LA19: ;
				LOC17 = LOC18;
				if (!(LOC17)) goto LA20;
				LOC21 = (NIM_BOOL)0;
				LOC22 = (NIM_BOOL)0;
				LOC22 = ((*(*formal0).typ).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 48));
				if (!(LOC22)) goto LA23;
				LOC22 = ((*(*(*formal0).typ).sons->data[((NI) 0)]).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 6));
				LA23: ;
				LOC21 = LOC22;
				if (!(LOC21)) goto LA24;
				LOC21 = !((((*(*(*formal0).typ).sons->data[((NI) 0)]).flags &(1U<<((NU)(((Ttypeflag_x2m5g1NpbmDig4wLT3Ylhw) 0))&31U)))!=0));
				LA24: ;
				LOC17 = LOC21;
				LA20: ;
				if (!LOC17) goto LA25;
				incl_iUpE9bYmIR0fROyJskQwN8g(marker0, (*formal0).position);
				{
					Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC31;
					if (!(container0 == 0)) goto LA29;
					LOC31 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
					LOC31 = arrayconstr_kYM3keGF9bgNpWhgQ6i4cvw(c0, (*n0).info);
					container0 = newnodeit_lbGnVdZM6n2HPza7jVIlww(((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 41), (*(*n0).kindU.S6.sons->data[a0]).info, LOC31);
					setson_FXgYDL7XFFjJ13GOQwso6g((*m0).call, (NI)((*formal0).position + ((NI) 1)), container0);
				}
				goto LA27;
				LA29: ;
				{
					incrindextype_rBBnNicDfwmFIGT2L6rbPA((*container0).typ);
				}
				LA27: ;
				addson_gCCf68XrWL79bKes6htzFjQ(container0, (*n0).kindU.S6.sons->data[a0]);
			}
			goto LA15;
			LA25: ;
			{
				Tnode_bROa11lyF5vxEN9aYNbHmhw* arg0;
				if (!((*(*n0).kindU.S6.sons->data[a0]).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 33))) goto LA34;
				preparenamedparam_4aY53hSpWPSeKKJlRFg8JA((*n0).kindU.S6.sons->data[a0]);
				{
					if (!!(((*(*(*n0).kindU.S6.sons->data[a0]).kindU.S6.sons->data[((NI) 0)]).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 2)))) goto LA38;
					localerror_VpilfPWbplGz6ny7O9cfr2g((*(*n0).kindU.S6.sons->data[a0]).info, ((Tmsgkind_IGAWgv9aR2KqPKJfPZPEWaw) 162), ((NimStringDesc*) &T_EV5hHJmjIY9cla9b9be7fSVJQ_11));
					(*m0).state = ((Tcandidatestate_C8RXb59bvbxaTzDOqx49aVVg) 2);
					goto BeforeRet;
				}
				LA38: ;
				formal0 = getsymfromlist_9c9cLkZFlCQ8DEaDRcXgGe9bA((*(*m0).callee).n, (*(*(*n0).kindU.S6.sons->data[a0]).kindU.S6.sons->data[((NI) 0)]).kindU.S5.ident, ((NI) 1));
				{
					if (!(formal0 == NIM_NIL)) goto LA42;
					(*m0).state = ((Tcandidatestate_C8RXb59bvbxaTzDOqx49aVVg) 2);
					goto BeforeRet;
				}
				LA42: ;
				{
					NIM_BOOL LOC46;
					LOC46 = (NIM_BOOL)0;
					LOC46 = containsorincl_B0EhVMrh5BBBZOOtYjAvVg(marker0, (*formal0).position);
					if (!LOC46) goto LA47;
					(*m0).state = ((Tcandidatestate_C8RXb59bvbxaTzDOqx49aVVg) 2);
					goto BeforeRet;
				}
				LA47: ;
				(*m0).basetypematch = NIM_FALSE;
				asgnRefNoCycle((void**) (&(*(*n0).kindU.S6.sons->data[a0]).kindU.S6.sons->data[((NI) 1)]), prepareoperand_aaHsR8QX2N2PHWQRAidM9cQ(c0, (*formal0).typ, (*(*n0).kindU.S6.sons->data[a0]).kindU.S6.sons->data[((NI) 1)]));
				asgnRefNoCycle((void**) (&(*(*n0).kindU.S6.sons->data[a0]).typ), (*(*(*n0).kindU.S6.sons->data[a0]).kindU.S6.sons->data[((NI) 1)]).typ);
				arg0 = paramtypesmatch_4oz468xMSO9cYY9cQWwg7YHg(m0, (*formal0).typ, (*(*n0).kindU.S6.sons->data[a0]).typ, (*(*n0).kindU.S6.sons->data[a0]).kindU.S6.sons->data[((NI) 1)], (*(*n0).kindU.S6.sons->data[a0]).kindU.S6.sons->data[((NI) 1)]);
				{
					if (!(arg0 == NIM_NIL)) goto LA51;
					(*m0).state = ((Tcandidatestate_C8RXb59bvbxaTzDOqx49aVVg) 2);
					goto BeforeRet;
				}
				LA51: ;
				{
					if (!!(((*formal0).constraint == 0))) goto LA55;
					{
						NIM_BOOL LOC59;
						LOC59 = (NIM_BOOL)0;
						LOC59 = matchnodekinds_WRbpWXbxOP9c3ULW5bbDujw((*formal0).constraint, (*(*n0).kindU.S6.sons->data[a0]).kindU.S6.sons->data[((NI) 1)]);
						if (!LOC59) goto LA60;
						(*m0).genericmatches += ((NI) 100);
					}
					goto LA57;
					LA60: ;
					{
						(*m0).state = ((Tcandidatestate_C8RXb59bvbxaTzDOqx49aVVg) 2);
						goto BeforeRet;
					}
					LA57: ;
				}
				LA55: ;
				{
					if (!((*(*formal0).typ).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 23))) goto LA65;
					{
						NIM_BOOL LOC69;
						LOC69 = (NIM_BOOL)0;
						LOC69 = islvalue_kCP6QlI8uS4X0pOQUdr7tg((*(*n0).kindU.S6.sons->data[a0]).kindU.S6.sons->data[((NI) 1)]);
						if (!!(LOC69)) goto LA70;
						(*m0).state = ((Tcandidatestate_C8RXb59bvbxaTzDOqx49aVVg) 2);
						(*m0).mutabilityproblem = ((NU8) ((NI)(f0 - ((NI) 1))));
						goto BeforeRet;
					}
					LA70: ;
				}
				LA65: ;
				{
					Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC76;
					if (!(*m0).basetypematch) goto LA74;
					LOC76 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
					LOC76 = arrayconstr_Y9chpkGw6fgFUgeuv6B8QoA(c0, arg0);
					container0 = newnodeit_lbGnVdZM6n2HPza7jVIlww(((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 41), (*(*n0).kindU.S6.sons->data[a0]).info, LOC76);
					addson_gCCf68XrWL79bKes6htzFjQ(container0, arg0);
					setson_FXgYDL7XFFjJ13GOQwso6g((*m0).call, (NI)((*formal0).position + ((NI) 1)), container0);
					{
						if (!!((f0 == (NI)(formallen0 - ((NI) 1))))) goto LA79;
						container0 = NIM_NIL;
					}
					LA79: ;
				}
				goto LA72;
				LA74: ;
				{
					setson_FXgYDL7XFFjJ13GOQwso6g((*m0).call, (NI)((*formal0).position + ((NI) 1)), arg0);
				}
				LA72: ;
				f0 += ((NI) 1);
			}
			goto LA15;
			LA34: ;
			{
				{
					if (!(formallen0 <= f0)) goto LA85;
					{
						if (!(((*(*m0).callee).flags &(1U<<((NU)(((Ttypeflag_x2m5g1NpbmDig4wLT3Ylhw) 0))&31U)))!=0)) goto LA89;
						asgnRefNoCycle((void**) (&(*n0).kindU.S6.sons->data[a0]), prepareoperand_KkKYwsOmKMXfkn3glfCbuA(c0, (*n0).kindU.S6.sons->data[a0]));
						{
							Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC93;
							Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC96;
							Tnode_bROa11lyF5vxEN9aYNbHmhw* LOC97;
							Tnode_bROa11lyF5vxEN9aYNbHmhw* LOC98;
							LOC93 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
							LOC93 = skiptypes_pLCdCGDuirMe9cspwviV9aVA((*(*n0).kindU.S6.sons->data[a0]).typ, 8431632);
							if (!((*LOC93).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 28))) goto LA94;
							LOC96 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
							LOC96 = getsystype_dewjtBqyEbcVGQRaQFtDAw(((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 29));
							LOC97 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
							LOC97 = copytree_lz8T1F9c0YwEOpUnrAUYgjg_2((*n0).kindU.S6.sons->data[a0]);
							LOC98 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
							LOC98 = implicitconv_ttBE689bA8zSgXJt6wtOZGA(((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 58), LOC96, LOC97, (&(*m0)), c0);
							addson_gCCf68XrWL79bKes6htzFjQ((*m0).call, LOC98);
						}
						goto LA91;
						LA94: ;
						{
							Tnode_bROa11lyF5vxEN9aYNbHmhw* LOC100;
							LOC100 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
							LOC100 = copytree_lz8T1F9c0YwEOpUnrAUYgjg_2((*n0).kindU.S6.sons->data[a0]);
							addson_gCCf68XrWL79bKes6htzFjQ((*m0).call, LOC100);
						}
						LA91: ;
					}
					goto LA87;
					LA89: ;
					{
						NIM_BOOL LOC102;
						Tnode_bROa11lyF5vxEN9aYNbHmhw* arg0;
						LOC102 = (NIM_BOOL)0;
						LOC102 = !((formal0 == NIM_NIL));
						if (!(LOC102)) goto LA103;
						LOC102 = ((*(*formal0).typ).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 48));
						LA103: ;
						if (!LOC102) goto LA104;
						(*m0).basetypematch = NIM_FALSE;
						incl_iUpE9bYmIR0fROyJskQwN8g(marker0, (*formal0).position);
						asgnRefNoCycle((void**) (&(*n0).kindU.S6.sons->data[a0]), prepareoperand_aaHsR8QX2N2PHWQRAidM9cQ(c0, (*formal0).typ, (*n0).kindU.S6.sons->data[a0]));
						arg0 = paramtypesmatch_4oz468xMSO9cYY9cQWwg7YHg(m0, (*formal0).typ, (*(*n0).kindU.S6.sons->data[a0]).typ, (*n0).kindU.S6.sons->data[a0], (*norig0).kindU.S6.sons->data[a0]);
						{
							NIM_BOOL LOC108;
							NIM_BOOL LOC109;
							LOC108 = (NIM_BOOL)0;
							LOC109 = (NIM_BOOL)0;
							LOC109 = !((arg0 == NIM_NIL));
							if (!(LOC109)) goto LA110;
							LOC109 = (*m0).basetypematch;
							LA110: ;
							LOC108 = LOC109;
							if (!(LOC108)) goto LA111;
							LOC108 = !((container0 == NIM_NIL));
							LA111: ;
							if (!LOC108) goto LA112;
							addson_gCCf68XrWL79bKes6htzFjQ(container0, arg0);
							incrindextype_rBBnNicDfwmFIGT2L6rbPA((*container0).typ);
							{
								if (!!(((*formal0).constraint == 0))) goto LA116;
								{
									NIM_BOOL LOC120;
									LOC120 = (NIM_BOOL)0;
									LOC120 = matchnodekinds_WRbpWXbxOP9c3ULW5bbDujw((*formal0).constraint, (*n0).kindU.S6.sons->data[a0]);
									if (!LOC120) goto LA121;
									(*m0).genericmatches += ((NI) 100);
								}
								goto LA118;
								LA121: ;
								{
									(*m0).state = ((Tcandidatestate_C8RXb59bvbxaTzDOqx49aVVg) 2);
									goto BeforeRet;
								}
								LA118: ;
							}
							LA116: ;
							{
								if (!((*(*formal0).typ).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 23))) goto LA126;
								{
									NIM_BOOL LOC130;
									LOC130 = (NIM_BOOL)0;
									LOC130 = islvalue_kCP6QlI8uS4X0pOQUdr7tg((*n0).kindU.S6.sons->data[a0]);
									if (!!(LOC130)) goto LA131;
									(*m0).state = ((Tcandidatestate_C8RXb59bvbxaTzDOqx49aVVg) 2);
									(*m0).mutabilityproblem = ((NU8) ((NI)(f0 - ((NI) 1))));
									goto BeforeRet;
								}
								LA131: ;
							}
							LA126: ;
						}
						goto LA106;
						LA112: ;
						{
							(*m0).state = ((Tcandidatestate_C8RXb59bvbxaTzDOqx49aVVg) 2);
							goto BeforeRet;
						}
						LA106: ;
					}
					goto LA87;
					LA104: ;
					{
						(*m0).state = ((Tcandidatestate_C8RXb59bvbxaTzDOqx49aVVg) 2);
						goto BeforeRet;
					}
					LA87: ;
				}
				goto LA83;
				LA85: ;
				{
					{
						if (!!(((*(*(*(*m0).callee).n).kindU.S6.sons->data[f0]).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 3)))) goto LA138;
						internalerror_MXmtqrCmYwtOPkDCFgUWKQ((*(*n0).kindU.S6.sons->data[a0]).info, ((NimStringDesc*) &T_EV5hHJmjIY9cla9b9be7fSVJQ_38));
						goto BeforeRet;
					}
					LA138: ;
					formal0 = (*(*(*(*m0).callee).n).kindU.S6.sons->data[f0]).kindU.S4.sym;
					{
						NIM_BOOL LOC142;
						LOC142 = (NIM_BOOL)0;
						LOC142 = containsorincl_B0EhVMrh5BBBZOOtYjAvVg(marker0, (*formal0).position);
						if (!(LOC142)) goto LA143;
						LOC142 = (container0 == 0);
						LA143: ;
						if (!LOC142) goto LA144;
						(*m0).state = ((Tcandidatestate_C8RXb59bvbxaTzDOqx49aVVg) 2);
						goto BeforeRet;
					}
					LA144: ;
					{
						NIM_BOOL LOC148;
						NIM_BOOL LOC149;
						LOC148 = (NIM_BOOL)0;
						LOC149 = (NIM_BOOL)0;
						LOC149 = ((*(*formal0).typ).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 48));
						if (!(LOC149)) goto LA150;
						LOC149 = ((*(*(*formal0).typ).sons->data[((NI) 0)]).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 6));
						LA150: ;
						LOC148 = LOC149;
						if (!(LOC148)) goto LA151;
						LOC148 = !((((*(*(*formal0).typ).sons->data[((NI) 0)]).flags &(1U<<((NU)(((Ttypeflag_x2m5g1NpbmDig4wLT3Ylhw) 0))&31U)))!=0));
						LA151: ;
						if (!LOC148) goto LA152;
						{
							Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC158;
							if (!(container0 == 0)) goto LA156;
							LOC158 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
							LOC158 = arrayconstr_kYM3keGF9bgNpWhgQ6i4cvw(c0, (*n0).info);
							container0 = newnodeit_lbGnVdZM6n2HPza7jVIlww(((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 41), (*(*n0).kindU.S6.sons->data[a0]).info, LOC158);
							setson_FXgYDL7XFFjJ13GOQwso6g((*m0).call, (NI)((*formal0).position + ((NI) 1)), container0);
						}
						goto LA154;
						LA156: ;
						{
							incrindextype_rBBnNicDfwmFIGT2L6rbPA((*container0).typ);
						}
						LA154: ;
						addson_gCCf68XrWL79bKes6htzFjQ(container0, (*n0).kindU.S6.sons->data[a0]);
					}
					goto LA146;
					LA152: ;
					{
						Tnode_bROa11lyF5vxEN9aYNbHmhw* arg0;
						(*m0).basetypematch = NIM_FALSE;
						asgnRefNoCycle((void**) (&(*n0).kindU.S6.sons->data[a0]), prepareoperand_aaHsR8QX2N2PHWQRAidM9cQ(c0, (*formal0).typ, (*n0).kindU.S6.sons->data[a0]));
						arg0 = paramtypesmatch_4oz468xMSO9cYY9cQWwg7YHg(m0, (*formal0).typ, (*(*n0).kindU.S6.sons->data[a0]).typ, (*n0).kindU.S6.sons->data[a0], (*norig0).kindU.S6.sons->data[a0]);
						{
							if (!(arg0 == NIM_NIL)) goto LA163;
							(*m0).state = ((Tcandidatestate_C8RXb59bvbxaTzDOqx49aVVg) 2);
							goto BeforeRet;
						}
						LA163: ;
						{
							Tnode_bROa11lyF5vxEN9aYNbHmhw* LOC175;
							NI LOC176;
							if (!(*m0).basetypematch) goto LA167;
							{
								Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC173;
								if (!(container0 == 0)) goto LA171;
								LOC173 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
								LOC173 = arrayconstr_Y9chpkGw6fgFUgeuv6B8QoA(c0, arg0);
								container0 = newnodeit_lbGnVdZM6n2HPza7jVIlww(((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 41), (*(*n0).kindU.S6.sons->data[a0]).info, LOC173);
							}
							goto LA169;
							LA171: ;
							{
								incrindextype_rBBnNicDfwmFIGT2L6rbPA((*container0).typ);
							}
							LA169: ;
							addson_gCCf68XrWL79bKes6htzFjQ(container0, arg0);
							LOC175 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
							LOC175 = implicitconv_ttBE689bA8zSgXJt6wtOZGA(((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 58), (*formal0).typ, container0, (&(*m0)), c0);
							setson_FXgYDL7XFFjJ13GOQwso6g((*m0).call, (NI)((*formal0).position + ((NI) 1)), LOC175);
							LOC176 = (NI)0;
							LOC176 = len_CdME9baJhvveuPEDZE9bXoxAlambdalifting(n0);
							f0 = ((f0 >= (NI)((NI)((NI)(formallen0 - LOC176) + a0) + ((NI) 1))) ? f0 : (NI)((NI)((NI)(formallen0 - LOC176) + a0) + ((NI) 1)));
						}
						goto LA165;
						LA167: ;
						{
							setson_FXgYDL7XFFjJ13GOQwso6g((*m0).call, (NI)((*formal0).position + ((NI) 1)), arg0);
							f0 += ((NI) 1);
							container0 = NIM_NIL;
						}
						LA165: ;
					}
					LA146: ;
					{
						if (!!(((*formal0).constraint == 0))) goto LA180;
						{
							NIM_BOOL LOC184;
							LOC184 = (NIM_BOOL)0;
							LOC184 = matchnodekinds_WRbpWXbxOP9c3ULW5bbDujw((*formal0).constraint, (*n0).kindU.S6.sons->data[a0]);
							if (!LOC184) goto LA185;
							(*m0).genericmatches += ((NI) 100);
						}
						goto LA182;
						LA185: ;
						{
							(*m0).state = ((Tcandidatestate_C8RXb59bvbxaTzDOqx49aVVg) 2);
							goto BeforeRet;
						}
						LA182: ;
					}
					LA180: ;
					{
						if (!((*(*formal0).typ).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 23))) goto LA190;
						{
							NIM_BOOL LOC194;
							LOC194 = (NIM_BOOL)0;
							LOC194 = islvalue_kCP6QlI8uS4X0pOQUdr7tg((*n0).kindU.S6.sons->data[a0]);
							if (!!(LOC194)) goto LA195;
							(*m0).state = ((Tcandidatestate_C8RXb59bvbxaTzDOqx49aVVg) 2);
							(*m0).mutabilityproblem = ((NU8) ((NI)(f0 - ((NI) 1))));
							goto BeforeRet;
						}
						LA195: ;
					}
					LA190: ;
				}
				LA83: ;
			}
			LA15: ;
			a0 += ((NI) 1);
		} LA13: ;
	}
	}BeforeRet: ;
}

N_NIMCALL(void, partialmatch_x3U2uVO0diqi4Z4tOU2y9aw)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tnode_bROa11lyF5vxEN9aYNbHmhw* n0, Tnode_bROa11lyF5vxEN9aYNbHmhw* norig0, Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* m0) {
	Intset_PQrmFm4BXFkFSVOUl1ojSg marker0;
	memset((void*)(&marker0), 0, sizeof(marker0));
	chckNil((void*)(&marker0));
	memset((void*)(&marker0), 0, sizeof(marker0));
	initintset_a9a80eJplB17xrdZJ41Baww((&marker0));
	matchesaux_5B328Lq3sbOWOpGv9bkDcTg(c0, n0, norig0, m0, (&marker0));
}

N_NIMCALL(NIM_BOOL, argsfit_Qn09aGeFsj9bCZF8BCCdCa0Q)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tsym_AXG7xcvKqaxY6koRX1xkCw* candidate0, Tnode_bROa11lyF5vxEN9aYNbHmhw* n0, Tnode_bROa11lyF5vxEN9aYNbHmhw* norig0) {
	NIM_BOOL result0;
	result0 = (NIM_BOOL)0;
	switch ((*candidate0).kind) {
	case ((Tsymkind_cNCW9acsSznmEccl1fgQwkw) 12):
	case ((Tsymkind_cNCW9acsSznmEccl1fgQwkw) 13):
	case ((Tsymkind_cNCW9acsSznmEccl1fgQwkw) 14):
	case ((Tsymkind_cNCW9acsSznmEccl1fgQwkw) 15):
	case ((Tsymkind_cNCW9acsSznmEccl1fgQwkw) 6):
	case ((Tsymkind_cNCW9acsSznmEccl1fgQwkw) 17):
	case ((Tsymkind_cNCW9acsSznmEccl1fgQwkw) 16):
	{
		Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA m0;
		memset((void*)(&m0), 0, sizeof(m0));
		initcandidate_k2gpOBVyx13JjcoIpvVYvQ(c0, (&m0), candidate0, NIM_NIL, ((NI) -1));
		partialmatch_x3U2uVO0diqi4Z4tOU2y9aw(c0, n0, norig0, (&m0));
		result0 = !((m0.state == ((Tcandidatestate_C8RXb59bvbxaTzDOqx49aVVg) 2)));
	}
	break;
	default:
	{
		result0 = NIM_FALSE;
	}
	break;
	}
	return result0;
}

N_NIMCALL(void, suggestcall_u17D1X5DVdBh1NyIkw529aA)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tnode_bROa11lyF5vxEN9aYNbHmhw* n0, Tnode_bROa11lyF5vxEN9aYNbHmhw* norig0, NI* outputs0) {
	NIM_BOOL islocal_6jYoNN7J7kgwGkPN7cxLWA;
	islocal_6jYoNN7J7kgwGkPN7cxLWA = NIM_TRUE;
	{
		Tscope_1cQRXW6aAknk7ywAwjH3nw* scope_Ko9cRvKlVgy9cZZ6DGJbxavg;
		Tscope_1cQRXW6aAknk7ywAwjH3nw* HEX3Atmp_YWin1pZj8E78xjNI6YjQdA;
		Tscope_1cQRXW6aAknk7ywAwjH3nw* current_9cp19cWfvwtbDZOYPalYqU2A;
		scope_Ko9cRvKlVgy9cZZ6DGJbxavg = (Tscope_1cQRXW6aAknk7ywAwjH3nw*)0;
		HEX3Atmp_YWin1pZj8E78xjNI6YjQdA = (Tscope_1cQRXW6aAknk7ywAwjH3nw*)0;
		HEX3Atmp_YWin1pZj8E78xjNI6YjQdA = (*c0).currentscope;
		current_9cp19cWfvwtbDZOYPalYqU2A = HEX3Atmp_YWin1pZj8E78xjNI6YjQdA;
		{
			while (1) {
				TY_sksVpmPRIkNR9axiwtD1Guw* entries_9c5Ruz5HzHbgvGj6zxhhiEw;
				TY_sksVpmPRIkNR9axiwtD1Guw* result_TN2rdp1RsSYf6VcIh9aQ0kg;
				TY_ebCc9bLaaaoeQAaNbPKMIRA LOC11;
				if (!!((current_9cp19cWfvwtbDZOYPalYqU2A == NIM_NIL))) goto LA3;
				scope_Ko9cRvKlVgy9cZZ6DGJbxavg = current_9cp19cWfvwtbDZOYPalYqU2A;
				{
					if (!(scope_Ko9cRvKlVgy9cZZ6DGJbxavg == (*c0).toplevelscope)) goto LA6;
					islocal_6jYoNN7J7kgwGkPN7cxLWA = NIM_FALSE;
				}
				LA6: ;
				result_TN2rdp1RsSYf6VcIh9aQ0kg = (TY_sksVpmPRIkNR9axiwtD1Guw*) newSeq((&NTI_sksVpmPRIkNR9axiwtD1Guw), 0);
				{
					Tsym_AXG7xcvKqaxY6koRX1xkCw* x_jvj70xDwaa6QdSXLLoQUFQ;
					Tstrtable_f07aOS3dr28kGa5wcE29aFA HEX3Atmp_YWin1pZj8E78xjNI6YjQdA_2;
					Ttabiter_VYF5VQsIYEVaBL0fKZJkbg it_O9bkeLD1pP2C5QwB9cG4hWQg;
					Tsym_AXG7xcvKqaxY6koRX1xkCw* s_ooJrqWbRJaOHJJXZmVfxqA;
					x_jvj70xDwaa6QdSXLLoQUFQ = (Tsym_AXG7xcvKqaxY6koRX1xkCw*)0;
					memset((void*)(&HEX3Atmp_YWin1pZj8E78xjNI6YjQdA_2), 0, sizeof(HEX3Atmp_YWin1pZj8E78xjNI6YjQdA_2));
					HEX3Atmp_YWin1pZj8E78xjNI6YjQdA_2.counter = (*scope_Ko9cRvKlVgy9cZZ6DGJbxavg).symbols.counter;
					HEX3Atmp_YWin1pZj8E78xjNI6YjQdA_2.data = (*scope_Ko9cRvKlVgy9cZZ6DGJbxavg).symbols.data;
					memset((void*)(&it_O9bkeLD1pP2C5QwB9cG4hWQg), 0, sizeof(it_O9bkeLD1pP2C5QwB9cG4hWQg));
					s_ooJrqWbRJaOHJJXZmVfxqA = inittabiter_4ygtuv45J5xOJG1H4GUF9bA((&it_O9bkeLD1pP2C5QwB9cG4hWQg), HEX3Atmp_YWin1pZj8E78xjNI6YjQdA_2);
					{
						while (1) {
							if (!!((s_ooJrqWbRJaOHJJXZmVfxqA == NIM_NIL))) goto LA10;
							x_jvj70xDwaa6QdSXLLoQUFQ = s_ooJrqWbRJaOHJJXZmVfxqA;
							result_TN2rdp1RsSYf6VcIh9aQ0kg = (TY_sksVpmPRIkNR9axiwtD1Guw*) incrSeqV2(&(result_TN2rdp1RsSYf6VcIh9aQ0kg)->Sup, sizeof(Tsym_AXG7xcvKqaxY6koRX1xkCw*));
							asgnRefNoCycle((void**) (&result_TN2rdp1RsSYf6VcIh9aQ0kg->data[result_TN2rdp1RsSYf6VcIh9aQ0kg->Sup.len]), x_jvj70xDwaa6QdSXLLoQUFQ);
							++result_TN2rdp1RsSYf6VcIh9aQ0kg->Sup.len;
							s_ooJrqWbRJaOHJJXZmVfxqA = nextiter_MtRRPpsZix0WHVpZVShg0A((&it_O9bkeLD1pP2C5QwB9cG4hWQg), HEX3Atmp_YWin1pZj8E78xjNI6YjQdA_2);
						} LA10: ;
					}
				}
				genericSeqAssign((&entries_9c5Ruz5HzHbgvGj6zxhhiEw), result_TN2rdp1RsSYf6VcIh9aQ0kg, (&NTI_sksVpmPRIkNR9axiwtD1Guw));
				memset((void*)(&LOC11), 0, sizeof(LOC11));
				LOC11.ClPrc = ((T_EV5hHJmjIY9cla9b9be7fSVJQ_36) (HEX3Aanonymous_JXbbRJfy9awFVSPUsLGBSEQ_2)); LOC11.ClEnv = NIM_NIL;
				sort_pFXw7jjw1D1y9ahnr6FqyYQ(entries_9c5Ruz5HzHbgvGj6zxhhiEw->data, entries_9c5Ruz5HzHbgvGj6zxhhiEw->Sup.len, LOC11, ((Sortorder_8iBc6wlNqBa9cju9cUAhUAxA) 1));
				{
					Tsym_AXG7xcvKqaxY6koRX1xkCw* item_37Ea9aMnTLK9aLI3tcaAotIw;
					NI i_Z8bx3UkRmWFv2g9cak7H9bMw;
					NI L_VDx9avua7FlvL9bHgNhOFU5Q;
					item_37Ea9aMnTLK9aLI3tcaAotIw = (Tsym_AXG7xcvKqaxY6koRX1xkCw*)0;
					i_Z8bx3UkRmWFv2g9cak7H9bMw = ((NI) 0);
					L_VDx9avua7FlvL9bHgNhOFU5Q = (entries_9c5Ruz5HzHbgvGj6zxhhiEw ? entries_9c5Ruz5HzHbgvGj6zxhhiEw->Sup.len : 0);
					{
						while (1) {
							Tsym_AXG7xcvKqaxY6koRX1xkCw* it0;
							if (!(i_Z8bx3UkRmWFv2g9cak7H9bMw < L_VDx9avua7FlvL9bHgNhOFU5Q)) goto LA14;
							item_37Ea9aMnTLK9aLI3tcaAotIw = entries_9c5Ruz5HzHbgvGj6zxhhiEw->data[i_Z8bx3UkRmWFv2g9cak7H9bMw];
							it0 = item_37Ea9aMnTLK9aLI3tcaAotIw;
							{
								NIM_BOOL LOC17;
								NIM_BOOL LOC18;
								NimStringDesc* LOC23;
								Suggest_tFc84OXhHlhBIifsMtOJew LOC24;
								LOC17 = (NIM_BOOL)0;
								LOC18 = (NIM_BOOL)0;
								LOC18 = filtersym_XtYBweJqs2OpFBFVtkucbQsigmatch(it0);
								if (!(LOC18)) goto LA19;
								LOC18 = namefits_aHOzXQ5KFmG6jnLobldVaw(c0, it0, n0);
								LA19: ;
								LOC17 = LOC18;
								if (!(LOC17)) goto LA20;
								LOC17 = argsfit_Qn09aGeFsj9bCZF8BCCdCa0Q(c0, it0, n0, norig0);
								LA20: ;
								if (!LOC17) goto LA21;
								LOC23 = (NimStringDesc*)0;
								LOC23 = HEX24_9cJCKitIoTmipZ9bq1gB25Vw(((Idecmd_1Ced39bl5eePmZ1PKMPXigQ) 2));
								memset((void*)(&LOC24), 0, sizeof(LOC24));
								symtosuggest_FFMkcTntV5b53OSyNeVJPQ(it0, islocal_6jYoNN7J7kgwGkPN7cxLWA, LOC23, ((NI) 100), (&LOC24));
								suggestresult_XfzKoO09bw9cbOe5pnn9bxngg((&LOC24));
								(*outputs0) += ((NI) 1);
							}
							LA21: ;
							i_Z8bx3UkRmWFv2g9cak7H9bMw += ((NI) 1);
						} LA14: ;
					}
				}
				current_9cp19cWfvwtbDZOYPalYqU2A = (*current_9cp19cWfvwtbDZOYPalYqU2A).parent;
			} LA3: ;
		}
	}
}

N_NIMCALL(void, suggestexpr_GPATGlMDRN5VZ5q4eCQYag)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tnode_bROa11lyF5vxEN9aYNbHmhw* node0) {
	Tcheckpointresult_mp7otVupbkudrLwM0IFcHg cp0;
	NI outputs0;
{	{
		if (!(gtrackpos_MB8TS6WWQAxbT0Tu9b9cDHkg.line < ((NI16) 0))) goto LA3;
		goto BeforeRet;
	}
	LA3: ;
	cp0 = incheckpoint_GA4ibfeQx1uKQi9bIH2QX4w((*node0).info);
	{
		if (!(cp0 == ((Tcheckpointresult_mp7otVupbkudrLwM0IFcHg) 0))) goto LA7;
		goto BeforeRet;
	}
	LA7: ;
	outputs0 = ((NI) 0);
	{
		if (!(((NI) 0) < (*c0).compilescontextid)) goto LA11;
		goto BeforeRet;
	}
	LA11: ;
	(*c0).compilescontextid += ((NI) 1);
	{
		Tnode_bROa11lyF5vxEN9aYNbHmhw* n0;
		if (!(gidecmd_juq2yKSgC8DZC5pqLIaQmQ == ((Idecmd_1Ced39bl5eePmZ1PKMPXigQ) 1))) goto LA15;
		n0 = findclosestdot_9aBm2OiqFaJoTlXkYMqFfYQ(node0);
		{
			if (!(n0 == NIM_NIL)) goto LA19;
			n0 = node0;
		}
		LA19: ;
		{
			Tnode_bROa11lyF5vxEN9aYNbHmhw* obj0;
			if (!((*n0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 45))) goto LA23;
			obj0 = safesemexpr_74xCvYZL9b9cKsQyQ9a9aX3Oqw(c0, (*n0).kindU.S6.sons->data[((NI) 0)]);
			suggestfieldaccess_sZLTug9chAc5gilY9bLWuoAw(c0, obj0, (&outputs0));
		}
		goto LA21;
		LA23: ;
		{
			suggesteverything_sZLTug9chAc5gilY9bLWuoAw_2(c0, n0, (&outputs0));
		}
		LA21: ;
	}
	goto LA13;
	LA15: ;
	{
		Tnode_bROa11lyF5vxEN9aYNbHmhw* n0;
		if (!(gidecmd_juq2yKSgC8DZC5pqLIaQmQ == ((Idecmd_1Ced39bl5eePmZ1PKMPXigQ) 2))) goto LA27;
		n0 = findclosestcall_9aBm2OiqFaJoTlXkYMqFfYQ_2(node0);
		{
			if (!(n0 == NIM_NIL)) goto LA31;
			n0 = node0;
		}
		LA31: ;
		{
			Tnode_bROa11lyF5vxEN9aYNbHmhw* a0;
			Tnode_bROa11lyF5vxEN9aYNbHmhw* x_stUaJmpIFO3iYlUfxfUwEQ;
			if (!((*n0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 27) || (*n0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 29) || (*n0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 30) || (*n0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 31) || (*n0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 26) || (*n0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 28) || (*n0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 32))) goto LA35;
			a0 = copynode_lz8T1F9c0YwEOpUnrAUYgjg(n0);
			x_stUaJmpIFO3iYlUfxfUwEQ = safesemexpr_74xCvYZL9b9cKsQyQ9a9aX3Oqw(c0, (*n0).kindU.S6.sons->data[((NI) 0)]);
			{
				NIM_BOOL LOC39;
				LOC39 = (NIM_BOOL)0;
				LOC39 = ((*x_stUaJmpIFO3iYlUfxfUwEQ).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 1));
				if (LOC39) goto LA40;
				LOC39 = ((*x_stUaJmpIFO3iYlUfxfUwEQ).typ == NIM_NIL);
				LA40: ;
				if (!LOC39) goto LA41;
				x_stUaJmpIFO3iYlUfxfUwEQ = (*n0).kindU.S6.sons->data[((NI) 0)];
			}
			LA41: ;
			addson_gCCf68XrWL79bKes6htzFjQ(a0, x_stUaJmpIFO3iYlUfxfUwEQ);
			{
				NI i_bmTmbs6mbKreNory3tmIHw;
				NI HEX3Atmp_GhmOLs9b6DVCqlo7CrWpxpQ;
				NI LOC44;
				NI res_dRP9ci68RApHw2YE9czRM9c2w;
				i_bmTmbs6mbKreNory3tmIHw = (NI)0;
				HEX3Atmp_GhmOLs9b6DVCqlo7CrWpxpQ = (NI)0;
				LOC44 = (NI)0;
				LOC44 = sonslen_qPWPHw7WgJeEVYUdcaRIig(n0);
				HEX3Atmp_GhmOLs9b6DVCqlo7CrWpxpQ = (NI)(LOC44 - ((NI) 1));
				res_dRP9ci68RApHw2YE9czRM9c2w = ((NI) 1);
				{
					while (1) {
						Tnode_bROa11lyF5vxEN9aYNbHmhw* x0;
						if (!(res_dRP9ci68RApHw2YE9czRM9c2w <= HEX3Atmp_GhmOLs9b6DVCqlo7CrWpxpQ)) goto LA46;
						i_bmTmbs6mbKreNory3tmIHw = res_dRP9ci68RApHw2YE9czRM9c2w;
						x0 = safesemexpr_74xCvYZL9b9cKsQyQ9a9aX3Oqw(c0, (*n0).kindU.S6.sons->data[i_bmTmbs6mbKreNory3tmIHw]);
						{
							NIM_BOOL LOC49;
							LOC49 = (NIM_BOOL)0;
							LOC49 = ((*x0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 1));
							if (LOC49) goto LA50;
							LOC49 = ((*x0).typ == NIM_NIL);
							LA50: ;
							if (!LOC49) goto LA51;
							goto LA43;
						}
						LA51: ;
						addson_gCCf68XrWL79bKes6htzFjQ(a0, x0);
						res_dRP9ci68RApHw2YE9czRM9c2w += ((NI) 1);
					} LA46: ;
				}
			} LA43: ;
			suggestcall_u17D1X5DVdBh1NyIkw529aA(c0, a0, n0, (&outputs0));
		}
		LA35: ;
	}
	goto LA13;
	LA27: ;
	LA13: ;
	(*c0).compilescontextid -= ((NI) 1);
	{
		NIM_BOOL LOC55;
		LOC55 = (NIM_BOOL)0;
		LOC55 = (((NI) 0) < outputs0);
		if (!(LOC55)) goto LA56;
		LOC55 = ((14 &(1U<<((NU)(gidecmd_juq2yKSgC8DZC5pqLIaQmQ)&15U)))!=0);
		LA56: ;
		if (!LOC55) goto LA57;
		suggestquit_9b9cOrPjJhKLIT47OQsALB4Q();
	}
	LA57: ;
	}BeforeRet: ;
}

N_NIMCALL(void, newcandidate_Ursq24ddLTYMobCFHSyzbQ)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* ctx0, Ttype_LTUWCZolpovw9cWE3JBWSUw* callee0, Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* Result) {
	initcandidate_R0iDmZjaDJEKlSDdgINtVg(ctx0, Result, callee0);
}

N_NIMCALL(void, matches_x3U2uVO0diqi4Z4tOU2y9aw_2)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tnode_bROa11lyF5vxEN9aYNbHmhw* n0, Tnode_bROa11lyF5vxEN9aYNbHmhw* norig0, Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA* m0) {
	Intset_PQrmFm4BXFkFSVOUl1ojSg marker0;
	NI f0;
{	{
		if (!((*m0).magic == ((Tmagic_shZhZOdbVC5nnFvcXQAImg) 4) || (*m0).magic == ((Tmagic_shZhZOdbVC5nnFvcXQAImg) 5))) goto LA3;
		(*m0).state = ((Tcandidatestate_C8RXb59bvbxaTzDOqx49aVVg) 1);
		unsureAsgnRef((void**) (&(*m0).call), n0);
		goto BeforeRet;
	}
	LA3: ;
	memset((void*)(&marker0), 0, sizeof(marker0));
	chckNil((void*)(&marker0));
	memset((void*)(&marker0), 0, sizeof(marker0));
	initintset_a9a80eJplB17xrdZJ41Baww((&marker0));
	matchesaux_5B328Lq3sbOWOpGv9bkDcTg(c0, n0, norig0, m0, (&marker0));
	{
		if (!((*m0).state == ((Tcandidatestate_C8RXb59bvbxaTzDOqx49aVVg) 2))) goto LA7;
		goto BeforeRet;
	}
	LA7: ;
	f0 = ((NI) 1);
	{
		while (1) {
			NI LOC11;
			Tsym_AXG7xcvKqaxY6koRX1xkCw* formal0;
			LOC11 = (NI)0;
			LOC11 = sonslen_qPWPHw7WgJeEVYUdcaRIig((*(*m0).callee).n);
			if (!(f0 < LOC11)) goto LA10;
			formal0 = (*(*(*(*m0).callee).n).kindU.S6.sons->data[f0]).kindU.S4.sym;
			{
				NIM_BOOL LOC14;
				LOC14 = (NIM_BOOL)0;
				LOC14 = containsorincl_B0EhVMrh5BBBZOOtYjAvVg((&marker0), (*formal0).position);
				if (!!(LOC14)) goto LA15;
				{
					if (!((*formal0).ast == NIM_NIL)) goto LA19;
					{
						Tnode_bROa11lyF5vxEN9aYNbHmhw* container0;
						Ttype_LTUWCZolpovw9cWE3JBWSUw* LOC25;
						Tnode_bROa11lyF5vxEN9aYNbHmhw* LOC26;
						if (!((*(*formal0).typ).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 48))) goto LA23;
						LOC25 = (Ttype_LTUWCZolpovw9cWE3JBWSUw*)0;
						LOC25 = arrayconstr_kYM3keGF9bgNpWhgQ6i4cvw(c0, (*n0).info);
						container0 = newnodeit_lbGnVdZM6n2HPza7jVIlww(((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 41), (*n0).info, LOC25);
						LOC26 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
						LOC26 = implicitconv_ttBE689bA8zSgXJt6wtOZGA(((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 58), (*formal0).typ, container0, (&(*m0)), c0);
						setson_FXgYDL7XFFjJ13GOQwso6g((*m0).call, (NI)((*formal0).position + ((NI) 1)), LOC26);
					}
					goto LA21;
					LA23: ;
					{
						(*m0).state = ((Tcandidatestate_C8RXb59bvbxaTzDOqx49aVVg) 2);
						goto LA9;
					}
					LA21: ;
				}
				goto LA17;
				LA19: ;
				{
					Tnode_bROa11lyF5vxEN9aYNbHmhw* def0;
					def0 = copytree_lz8T1F9c0YwEOpUnrAUYgjg_2((*formal0).ast);
					{
						if (!((*def0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 23))) goto LA31;
						def0 = implicitconv_ttBE689bA8zSgXJt6wtOZGA(((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 58), (*formal0).typ, def0, (&(*m0)), c0);
					}
					LA31: ;
					setson_FXgYDL7XFFjJ13GOQwso6g((*m0).call, (NI)((*formal0).position + ((NI) 1)), def0);
				}
				LA17: ;
			}
			LA15: ;
			f0 += ((NI) 1);
		} LA10: ;
	} LA9: ;
	}BeforeRet: ;
}

N_NIMCALL(NimStringDesc*, argtypetostring_4EtZe89aZdrkU6I6iZJr4Yg)(Tnode_bROa11lyF5vxEN9aYNbHmhw* arg0, Tprefereddesc_tnd4qt9c4xddV8oKV5zyusw prefer0) {
	NimStringDesc* result0;
	result0 = (NimStringDesc*)0;
	{
		Tnode_bROa11lyF5vxEN9aYNbHmhw* LOC5;
		if (!((*arg0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 56) || (*arg0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 57))) goto LA3;
		LOC5 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
		LOC5 = HEX5BHEX5D_4mGh5VHoHoaSkXDYdG6pyAitersgen(arg0, ((NI) 0));
		result0 = typetostring_iUZlBdvGqNPVN17wd9aVBNw((*LOC5).typ, prefer0);
		{
			NI i_VB76Q9bNaeACmtcaCkvLNEA;
			NI HEX3Atmp_LkM1ytqqQxFwzBiaT9bNAYw;
			NI LOC7;
			NI res_XKk6kg4zNKiDkRKgYXSoPg;
			i_VB76Q9bNaeACmtcaCkvLNEA = (NI)0;
			HEX3Atmp_LkM1ytqqQxFwzBiaT9bNAYw = (NI)0;
			LOC7 = (NI)0;
			LOC7 = len_CdME9baJhvveuPEDZE9bXoxAlambdalifting(arg0);
			HEX3Atmp_LkM1ytqqQxFwzBiaT9bNAYw = (LOC7 - 1);
			res_XKk6kg4zNKiDkRKgYXSoPg = ((NI) 1);
			{
				while (1) {
					Tnode_bROa11lyF5vxEN9aYNbHmhw* LOC10;
					NimStringDesc* LOC11;
					if (!(res_XKk6kg4zNKiDkRKgYXSoPg <= HEX3Atmp_LkM1ytqqQxFwzBiaT9bNAYw)) goto LA9;
					i_VB76Q9bNaeACmtcaCkvLNEA = res_XKk6kg4zNKiDkRKgYXSoPg;
					result0 = resizeString(result0, 3);
appendString(result0, ((NimStringDesc*) &T_EV5hHJmjIY9cla9b9be7fSVJQ_40));
					LOC10 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
					LOC10 = HEX5BHEX5D_4mGh5VHoHoaSkXDYdG6pyAitersgen(arg0, i_VB76Q9bNaeACmtcaCkvLNEA);
					LOC11 = (NimStringDesc*)0;
					LOC11 = typetostring_iUZlBdvGqNPVN17wd9aVBNw((*LOC10).typ, prefer0);
					result0 = resizeString(result0, LOC11->Sup.len + 0);
appendString(result0, LOC11);
					res_XKk6kg4zNKiDkRKgYXSoPg += ((NI) 1);
				} LA9: ;
			}
		}
	}
	goto LA1;
	LA3: ;
	{
		if (!((*arg0).typ == NIM_NIL)) goto LA13;
		result0 = copyString(((NimStringDesc*) &T_EV5hHJmjIY9cla9b9be7fSVJQ_41));
	}
	goto LA1;
	LA13: ;
	{
		result0 = typetostring_iUZlBdvGqNPVN17wd9aVBNw((*arg0).typ, prefer0);
	}
	LA1: ;
	return result0;
}

N_NIMCALL(NimStringDesc*, describeargs_m1uDwnBbJWJYjfhFqPUzpw)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tnode_bROa11lyF5vxEN9aYNbHmhw* n0, NI startidx0, Tprefereddesc_tnd4qt9c4xddV8oKV5zyusw prefer0) {
	NimStringDesc* result0;
{	result0 = (NimStringDesc*)0;
	result0 = copyString(((NimStringDesc*) &T_EV5hHJmjIY9cla9b9be7fSVJQ_11));
	{
		NI i_67sr9bgXymGrxSvWDXz9cqQg;
		NI HEX3Atmp_RkMNJZApiXgH0B8eBsoLPw;
		NI LOC2;
		NI res_oEBnW8NvJ8DVMDonYEWwEg;
		i_67sr9bgXymGrxSvWDXz9cqQg = (NI)0;
		HEX3Atmp_RkMNJZApiXgH0B8eBsoLPw = (NI)0;
		LOC2 = (NI)0;
		LOC2 = len_CdME9baJhvveuPEDZE9bXoxAlambdalifting(n0);
		HEX3Atmp_RkMNJZApiXgH0B8eBsoLPw = (NI)(LOC2 - ((NI) 1));
		res_oEBnW8NvJ8DVMDonYEWwEg = startidx0;
		{
			while (1) {
				Tnode_bROa11lyF5vxEN9aYNbHmhw* arg0;
				NimStringDesc* LOC29;
				if (!(res_oEBnW8NvJ8DVMDonYEWwEg <= HEX3Atmp_RkMNJZApiXgH0B8eBsoLPw)) goto LA4;
				i_67sr9bgXymGrxSvWDXz9cqQg = res_oEBnW8NvJ8DVMDonYEWwEg;
				arg0 = (*n0).kindU.S6.sons->data[i_67sr9bgXymGrxSvWDXz9cqQg];
				{
					NimStringDesc* LOC9;
					if (!((*(*n0).kindU.S6.sons->data[i_67sr9bgXymGrxSvWDXz9cqQg]).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 33))) goto LA7;
					LOC9 = (NimStringDesc*)0;
					LOC9 = rendertree_ppjdh9aQ5L0SGPF8yz1gZ9cA((*(*n0).kindU.S6.sons->data[i_67sr9bgXymGrxSvWDXz9cqQg]).kindU.S6.sons->data[((NI) 0)], 0);
					result0 = resizeString(result0, LOC9->Sup.len + 0);
appendString(result0, LOC9);
					result0 = resizeString(result0, 2);
appendString(result0, ((NimStringDesc*) &T_EV5hHJmjIY9cla9b9be7fSVJQ_39));
					{
						NIM_BOOL LOC12;
						LOC12 = (NIM_BOOL)0;
						LOC12 = ((*arg0).typ == 0);
						if (!(LOC12)) goto LA13;
						LOC12 = !(((*arg0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 115) || (*arg0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 52)));
						LA13: ;
						if (!LOC12) goto LA14;
						arg0 = (*c0).semoperand(c0, (*(*n0).kindU.S6.sons->data[i_67sr9bgXymGrxSvWDXz9cqQg]).kindU.S6.sons->data[((NI) 1)], 0);
						asgnRefNoCycle((void**) (&(*(*n0).kindU.S6.sons->data[i_67sr9bgXymGrxSvWDXz9cqQg]).typ), (*arg0).typ);
						asgnRefNoCycle((void**) (&(*(*n0).kindU.S6.sons->data[i_67sr9bgXymGrxSvWDXz9cqQg]).kindU.S6.sons->data[((NI) 1)]), arg0);
					}
					LA14: ;
				}
				goto LA5;
				LA7: ;
				{
					{
						NIM_BOOL LOC19;
						LOC19 = (NIM_BOOL)0;
						LOC19 = ((*arg0).typ == 0);
						if (!(LOC19)) goto LA20;
						LOC19 = !(((*arg0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 115) || (*arg0).kind == ((Tnodekind_G4E4Gxe7oI2Cm03rkiOzQw) 52)));
						LA20: ;
						if (!LOC19) goto LA21;
						arg0 = (*c0).semoperand(c0, (*n0).kindU.S6.sons->data[i_67sr9bgXymGrxSvWDXz9cqQg], 0);
						asgnRefNoCycle((void**) (&(*n0).kindU.S6.sons->data[i_67sr9bgXymGrxSvWDXz9cqQg]), arg0);
					}
					LA21: ;
				}
				LA5: ;
				{
					NIM_BOOL LOC25;
					LOC25 = (NIM_BOOL)0;
					LOC25 = !(((*arg0).typ == NIM_NIL));
					if (!(LOC25)) goto LA26;
					LOC25 = ((*(*arg0).typ).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 50));
					LA26: ;
					if (!LOC25) goto LA27;
					goto BeforeRet;
				}
				LA27: ;
				LOC29 = (NimStringDesc*)0;
				LOC29 = argtypetostring_4EtZe89aZdrkU6I6iZJr4Yg(arg0, prefer0);
				result0 = resizeString(result0, LOC29->Sup.len + 0);
appendString(result0, LOC29);
				{
					NI LOC32;
					LOC32 = (NI)0;
					LOC32 = sonslen_qPWPHw7WgJeEVYUdcaRIig(n0);
					if (!!((i_67sr9bgXymGrxSvWDXz9cqQg == (NI)(LOC32 - ((NI) 1))))) goto LA33;
					result0 = resizeString(result0, 2);
appendString(result0, ((NimStringDesc*) &T_EV5hHJmjIY9cla9b9be7fSVJQ_42));
				}
				LA33: ;
				res_oEBnW8NvJ8DVMDonYEWwEg += ((NI) 1);
			} LA4: ;
		}
	}
	}BeforeRet: ;
	return result0;
}

N_NIMCALL(Tnode_bROa11lyF5vxEN9aYNbHmhw*, usesym_UVnZ9bVxxoYaQEF6x9bJQxyQ)(Tsym_AXG7xcvKqaxY6koRX1xkCw* sym0) {
	Tnode_bROa11lyF5vxEN9aYNbHmhw* result0;
	result0 = (Tnode_bROa11lyF5vxEN9aYNbHmhw*)0;
	result0 = newsymnode_1ARBpggFQuvUDBVYjBelcw(sym0);
	markused_Ue6rwV8sAT8uVT9cT5cip9aA((*result0).info, sym0);
	return result0;
}

N_NIMCALL(void, semfinishoperands_2Z5wP9b7ccKTpEqqJS9aAdvA)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tnode_bROa11lyF5vxEN9aYNbHmhw* n0) {
	{
		NI i_O44HWoDH6rV3BTXnY5h9aDg;
		NI HEX3Atmp_6zBMZLU9cn5BZeBlOUGc7Lg;
		NI LOC2;
		NI res_Uqf0lRfMsxWoF2JATlcxig;
		i_O44HWoDH6rV3BTXnY5h9aDg = (NI)0;
		HEX3Atmp_6zBMZLU9cn5BZeBlOUGc7Lg = (NI)0;
		LOC2 = (NI)0;
		LOC2 = len_CdME9baJhvveuPEDZE9bXoxAlambdalifting(n0);
		HEX3Atmp_6zBMZLU9cn5BZeBlOUGc7Lg = (LOC2 - 1);
		res_Uqf0lRfMsxWoF2JATlcxig = ((NI) 1);
		{
			while (1) {
				if (!(res_Uqf0lRfMsxWoF2JATlcxig <= HEX3Atmp_6zBMZLU9cn5BZeBlOUGc7Lg)) goto LA4;
				i_O44HWoDH6rV3BTXnY5h9aDg = res_Uqf0lRfMsxWoF2JATlcxig;
				asgnRefNoCycle((void**) (&(*n0).kindU.S6.sons->data[i_O44HWoDH6rV3BTXnY5h9aDg]), prepareoperand_KkKYwsOmKMXfkn3glfCbuA(c0, (*n0).kindU.S6.sons->data[i_O44HWoDH6rV3BTXnY5h9aDg]));
				res_Uqf0lRfMsxWoF2JATlcxig += ((NI) 1);
			} LA4: ;
		}
	}
}

N_NIMCALL(Ttyperelation_1IMf5P083XuEtWGxYaIXyQ, cmptypes_FaOaPySakBuGGYvKQQE5NQ)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Ttype_LTUWCZolpovw9cWE3JBWSUw* f0, Ttype_LTUWCZolpovw9cWE3JBWSUw* a0) {
	Ttyperelation_1IMf5P083XuEtWGxYaIXyQ result0;
	Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA m0;
	result0 = (Ttyperelation_1IMf5P083XuEtWGxYaIXyQ)0;
	memset((void*)(&m0), 0, sizeof(m0));
	initcandidate_R0iDmZjaDJEKlSDdgINtVg(c0, (&m0), f0);
	result0 = typerel_0fsYV9bVZA2eXpHTIQspjZA((&m0), f0, a0, NIM_TRUE);
	return result0;
}

N_NIMCALL(void, suggeststmt_Ph9cBAfASttahD6s5CLnVLQ)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tnode_bROa11lyF5vxEN9aYNbHmhw* n0) {
	suggestexpr_GPATGlMDRN5VZ5q4eCQYag(c0, n0);
}

N_NIMCALL(Tsym_AXG7xcvKqaxY6koRX1xkCw*, insttypeboundop_z7CQkFe9cVhDFxoWtJhu5Aw)(Tcontext_5TfOJKwTttj3W1t1tMzWUQ* c0, Tsym_AXG7xcvKqaxY6koRX1xkCw* dc0, Ttype_LTUWCZolpovw9cWE3JBWSUw* t0, Tlineinfo_T9c3PM9bs7WZ4LIQfEici9cZw info0, Ttypeattachedop_jZY2AMF49b43fezf9aDwN9c9cQ op0, NI col0) {
	Tsym_AXG7xcvKqaxY6koRX1xkCw* result0;
	Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA m0;
	Ttype_LTUWCZolpovw9cWE3JBWSUw* f0;
{	result0 = (Tsym_AXG7xcvKqaxY6koRX1xkCw*)0;
	memset((void*)(&m0), 0, sizeof(m0));
	initcandidate_R0iDmZjaDJEKlSDdgINtVg(c0, (&m0), (*dc0).typ);
	{
		NI LOC3;
		NimStringDesc* LOC6;
		LOC3 = (NI)0;
		LOC3 = len_gG7hUAX9cA629ahMLVL3xN4w_2((*dc0).typ);
		if (!(LOC3 <= col0)) goto LA4;
		LOC6 = (NimStringDesc*)0;
		LOC6 = rawNewString((*(*dc0).name).s->Sup.len + 21);
appendString(LOC6, ((NimStringDesc*) &T_EV5hHJmjIY9cla9b9be7fSVJQ_43));
appendString(LOC6, (*(*dc0).name).s);
appendString(LOC6, ((NimStringDesc*) &T_EV5hHJmjIY9cla9b9be7fSVJQ_44));
		localerror_VpilfPWbplGz6ny7O9cfr2g(info0, ((Tmsgkind_IGAWgv9aR2KqPKJfPZPEWaw) 4), LOC6);
		result0 = NIM_NIL;
		goto BeforeRet;
	}
	LA4: ;
	f0 = (*(*dc0).typ).sons->data[col0];
	{
		if (!(op0 == ((Ttypeattachedop_jZY2AMF49b43fezf9aDwN9c9cQ) 1))) goto LA9;
		{
			if (!((6291456 &((NU64)1<<((NU)((*f0).kind)&63U)))!=0)) goto LA13;
			f0 = lastson_E41DMKHtT9c6sAMyyvhmSIw(f0);
		}
		LA13: ;
	}
	goto LA7;
	LA9: ;
	{
		{
			if (!((*f0).kind == ((Ttypekind_9a3YiReNVD0IJHWFKgXRe9ag) 23))) goto LA18;
			f0 = lastson_E41DMKHtT9c6sAMyyvhmSIw(f0);
		}
		LA18: ;
	}
	LA7: ;
	{
		Ttyperelation_1IMf5P083XuEtWGxYaIXyQ LOC22;
		NimStringDesc* LOC25;
		LOC22 = (Ttyperelation_1IMf5P083XuEtWGxYaIXyQ)0;
		LOC22 = typerel_0fsYV9bVZA2eXpHTIQspjZA((&m0), f0, t0, NIM_TRUE);
		if (!(LOC22 == ((Ttyperelation_1IMf5P083XuEtWGxYaIXyQ) 0))) goto LA23;
		LOC25 = (NimStringDesc*)0;
		LOC25 = rawNewString((*(*dc0).name).s->Sup.len + 21);
appendString(LOC25, ((NimStringDesc*) &T_EV5hHJmjIY9cla9b9be7fSVJQ_43));
appendString(LOC25, (*(*dc0).name).s);
appendString(LOC25, ((NimStringDesc*) &T_EV5hHJmjIY9cla9b9be7fSVJQ_44));
		localerror_VpilfPWbplGz6ny7O9cfr2g(info0, ((Tmsgkind_IGAWgv9aR2KqPKJfPZPEWaw) 4), LOC25);
	}
	goto LA20;
	LA23: ;
	{
		result0 = (*c0).semgenerateinstance.ClEnv? (*c0).semgenerateinstance.ClPrc(c0, dc0, m0.bindings, info0, (*c0).semgenerateinstance.ClEnv):((T_EV5hHJmjIY9cla9b9be7fSVJQ_45)((*c0).semgenerateinstance.ClPrc))(c0, dc0, m0.bindings, info0);
	}
	LA20: ;
	}BeforeRet: ;
	return result0;
}
NIM_EXTERNC N_NOINLINE(void, compiler_sigmatchInit000)(void) {
nimRegisterGlobalMarker(T_EV5hHJmjIY9cla9b9be7fSVJQ_3);
nimRegisterGlobalMarker(T_EV5hHJmjIY9cla9b9be7fSVJQ_4);
}

NIM_EXTERNC N_NOINLINE(void, compiler_sigmatchDatInit000)(void) {
static TNimNode* T_EV5hHJmjIY9cla9b9be7fSVJQ_2[2];
static TNimNode* T_EV5hHJmjIY9cla9b9be7fSVJQ_12[11];
static TNimNode* T_EV5hHJmjIY9cla9b9be7fSVJQ_30[22];
static TNimNode* T_EV5hHJmjIY9cla9b9be7fSVJQ_31[3];
NI T_EV5hHJmjIY9cla9b9be7fSVJQ_33;
static char* NIM_CONST T_EV5hHJmjIY9cla9b9be7fSVJQ_32[3] = {
"csEmpty", 
"csMatch", 
"csNoMatch"};
static TNimNode* T_EV5hHJmjIY9cla9b9be7fSVJQ_34[2];
static TNimNode T_EV5hHJmjIY9cla9b9be7fSVJQ_0[45];
NTI_S1iHa9bJe79be19aRwtH7KMRg.size = sizeof(TY_sdDP1TTkc2gaTu5fV53Zqg);
NTI_S1iHa9bJe79be19aRwtH7KMRg.kind = 18;
NTI_S1iHa9bJe79be19aRwtH7KMRg.base = 0;
NTI_S1iHa9bJe79be19aRwtH7KMRg.flags = 2;
T_EV5hHJmjIY9cla9b9be7fSVJQ_2[0] = &T_EV5hHJmjIY9cla9b9be7fSVJQ_0[1];
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[1].kind = 1;
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[1].offset = offsetof(TY_sdDP1TTkc2gaTu5fV53Zqg, Field0);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[1].typ = (&NTI_vr5DoT1jILTGdRlYv1OYpw);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[1].name = "Field0";
T_EV5hHJmjIY9cla9b9be7fSVJQ_2[1] = &T_EV5hHJmjIY9cla9b9be7fSVJQ_0[2];
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[2].kind = 1;
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[2].offset = offsetof(TY_sdDP1TTkc2gaTu5fV53Zqg, Field1);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[2].typ = (&NTI_j4IZVEbOYTm9aXKJeVb8ILQ);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[2].name = "Field1";
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[0].len = 2; T_EV5hHJmjIY9cla9b9be7fSVJQ_0[0].kind = 2; T_EV5hHJmjIY9cla9b9be7fSVJQ_0[0].sons = &T_EV5hHJmjIY9cla9b9be7fSVJQ_2[0];
NTI_S1iHa9bJe79be19aRwtH7KMRg.node = &T_EV5hHJmjIY9cla9b9be7fSVJQ_0[0];
NTI_tFc84OXhHlhBIifsMtOJew.size = sizeof(Suggest_tFc84OXhHlhBIifsMtOJew);
NTI_tFc84OXhHlhBIifsMtOJew.kind = 18;
NTI_tFc84OXhHlhBIifsMtOJew.base = 0;
NTI_tFc84OXhHlhBIifsMtOJew.flags = 2;
T_EV5hHJmjIY9cla9b9be7fSVJQ_12[0] = &T_EV5hHJmjIY9cla9b9be7fSVJQ_0[4];
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[4].kind = 1;
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[4].offset = offsetof(Suggest_tFc84OXhHlhBIifsMtOJew, section);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[4].typ = (&NTI_1Ced39bl5eePmZ1PKMPXigQ);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[4].name = "section";
T_EV5hHJmjIY9cla9b9be7fSVJQ_12[1] = &T_EV5hHJmjIY9cla9b9be7fSVJQ_0[5];
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[5].kind = 1;
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[5].offset = offsetof(Suggest_tFc84OXhHlhBIifsMtOJew, qualifiedpath);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[5].typ = (&NTI_sM4lkSb7zS6F7OVMvW9cffQ);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[5].name = "qualifiedPath";
T_EV5hHJmjIY9cla9b9be7fSVJQ_12[2] = &T_EV5hHJmjIY9cla9b9be7fSVJQ_0[6];
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[6].kind = 1;
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[6].offset = offsetof(Suggest_tFc84OXhHlhBIifsMtOJew, filepath);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[6].typ = (&NTI_77mFvmsOLKik79ci2hXkHEg);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[6].name = "filePath";
T_EV5hHJmjIY9cla9b9be7fSVJQ_12[3] = &T_EV5hHJmjIY9cla9b9be7fSVJQ_0[7];
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[7].kind = 1;
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[7].offset = offsetof(Suggest_tFc84OXhHlhBIifsMtOJew, line);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[7].typ = (&NTI_rR5Bzr1D5krxoo1NcNyeMA);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[7].name = "line";
T_EV5hHJmjIY9cla9b9be7fSVJQ_12[4] = &T_EV5hHJmjIY9cla9b9be7fSVJQ_0[8];
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[8].kind = 1;
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[8].offset = offsetof(Suggest_tFc84OXhHlhBIifsMtOJew, column);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[8].typ = (&NTI_rR5Bzr1D5krxoo1NcNyeMA);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[8].name = "column";
T_EV5hHJmjIY9cla9b9be7fSVJQ_12[5] = &T_EV5hHJmjIY9cla9b9be7fSVJQ_0[9];
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[9].kind = 1;
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[9].offset = offsetof(Suggest_tFc84OXhHlhBIifsMtOJew, doc);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[9].typ = (&NTI_77mFvmsOLKik79ci2hXkHEg);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[9].name = "doc";
T_EV5hHJmjIY9cla9b9be7fSVJQ_12[6] = &T_EV5hHJmjIY9cla9b9be7fSVJQ_0[10];
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[10].kind = 1;
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[10].offset = offsetof(Suggest_tFc84OXhHlhBIifsMtOJew, symkind);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[10].typ = (&NTI_cNCW9acsSznmEccl1fgQwkw);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[10].name = "symkind";
T_EV5hHJmjIY9cla9b9be7fSVJQ_12[7] = &T_EV5hHJmjIY9cla9b9be7fSVJQ_0[11];
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[11].kind = 1;
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[11].offset = offsetof(Suggest_tFc84OXhHlhBIifsMtOJew, forth);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[11].typ = (&NTI_77mFvmsOLKik79ci2hXkHEg);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[11].name = "forth";
T_EV5hHJmjIY9cla9b9be7fSVJQ_12[8] = &T_EV5hHJmjIY9cla9b9be7fSVJQ_0[12];
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[12].kind = 1;
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[12].offset = offsetof(Suggest_tFc84OXhHlhBIifsMtOJew, quality);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[12].typ = (&NTI_13aFwjKaWlqhwUBjDHvkIw);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[12].name = "quality";
T_EV5hHJmjIY9cla9b9be7fSVJQ_12[9] = &T_EV5hHJmjIY9cla9b9be7fSVJQ_0[13];
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[13].kind = 1;
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[13].offset = offsetof(Suggest_tFc84OXhHlhBIifsMtOJew, isglobal);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[13].typ = (&NTI_VaVACK0bpYmqIQ0mKcHfQQ);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[13].name = "isGlobal";
T_EV5hHJmjIY9cla9b9be7fSVJQ_12[10] = &T_EV5hHJmjIY9cla9b9be7fSVJQ_0[14];
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[14].kind = 1;
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[14].offset = offsetof(Suggest_tFc84OXhHlhBIifsMtOJew, tokenlen);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[14].typ = (&NTI_rR5Bzr1D5krxoo1NcNyeMA);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[14].name = "tokenLen";
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[3].len = 11; T_EV5hHJmjIY9cla9b9be7fSVJQ_0[3].kind = 2; T_EV5hHJmjIY9cla9b9be7fSVJQ_0[3].sons = &T_EV5hHJmjIY9cla9b9be7fSVJQ_12[0];
NTI_tFc84OXhHlhBIifsMtOJew.node = &T_EV5hHJmjIY9cla9b9be7fSVJQ_0[3];
NTI_B8Gf2sSWgQ79bLZ9bYWrLHaA.size = sizeof(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA);
NTI_B8Gf2sSWgQ79bLZ9bYWrLHaA.kind = 18;
NTI_B8Gf2sSWgQ79bLZ9bYWrLHaA.base = 0;
T_EV5hHJmjIY9cla9b9be7fSVJQ_30[0] = &T_EV5hHJmjIY9cla9b9be7fSVJQ_0[16];
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[16].kind = 1;
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[16].offset = offsetof(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA, c);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[16].typ = (&NTI_QxKU6hUjq23Dy0KTbUHAjg);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[16].name = "c";
T_EV5hHJmjIY9cla9b9be7fSVJQ_30[1] = &T_EV5hHJmjIY9cla9b9be7fSVJQ_0[17];
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[17].kind = 1;
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[17].offset = offsetof(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA, exactmatches);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[17].typ = (&NTI_rR5Bzr1D5krxoo1NcNyeMA);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[17].name = "exactMatches";
T_EV5hHJmjIY9cla9b9be7fSVJQ_30[2] = &T_EV5hHJmjIY9cla9b9be7fSVJQ_0[18];
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[18].kind = 1;
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[18].offset = offsetof(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA, genericmatches);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[18].typ = (&NTI_rR5Bzr1D5krxoo1NcNyeMA);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[18].name = "genericMatches";
T_EV5hHJmjIY9cla9b9be7fSVJQ_30[3] = &T_EV5hHJmjIY9cla9b9be7fSVJQ_0[19];
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[19].kind = 1;
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[19].offset = offsetof(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA, subtypematches);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[19].typ = (&NTI_rR5Bzr1D5krxoo1NcNyeMA);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[19].name = "subtypeMatches";
T_EV5hHJmjIY9cla9b9be7fSVJQ_30[4] = &T_EV5hHJmjIY9cla9b9be7fSVJQ_0[20];
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[20].kind = 1;
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[20].offset = offsetof(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA, intconvmatches);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[20].typ = (&NTI_rR5Bzr1D5krxoo1NcNyeMA);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[20].name = "intConvMatches";
T_EV5hHJmjIY9cla9b9be7fSVJQ_30[5] = &T_EV5hHJmjIY9cla9b9be7fSVJQ_0[21];
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[21].kind = 1;
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[21].offset = offsetof(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA, convmatches);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[21].typ = (&NTI_rR5Bzr1D5krxoo1NcNyeMA);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[21].name = "convMatches";
T_EV5hHJmjIY9cla9b9be7fSVJQ_30[6] = &T_EV5hHJmjIY9cla9b9be7fSVJQ_0[22];
NTI_C8RXb59bvbxaTzDOqx49aVVg.size = sizeof(Tcandidatestate_C8RXb59bvbxaTzDOqx49aVVg);
NTI_C8RXb59bvbxaTzDOqx49aVVg.kind = 14;
NTI_C8RXb59bvbxaTzDOqx49aVVg.base = 0;
NTI_C8RXb59bvbxaTzDOqx49aVVg.flags = 3;
for (T_EV5hHJmjIY9cla9b9be7fSVJQ_33 = 0; T_EV5hHJmjIY9cla9b9be7fSVJQ_33 < 3; T_EV5hHJmjIY9cla9b9be7fSVJQ_33++) {
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[T_EV5hHJmjIY9cla9b9be7fSVJQ_33+23].kind = 1;
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[T_EV5hHJmjIY9cla9b9be7fSVJQ_33+23].offset = T_EV5hHJmjIY9cla9b9be7fSVJQ_33;
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[T_EV5hHJmjIY9cla9b9be7fSVJQ_33+23].name = T_EV5hHJmjIY9cla9b9be7fSVJQ_32[T_EV5hHJmjIY9cla9b9be7fSVJQ_33];
T_EV5hHJmjIY9cla9b9be7fSVJQ_31[T_EV5hHJmjIY9cla9b9be7fSVJQ_33] = &T_EV5hHJmjIY9cla9b9be7fSVJQ_0[T_EV5hHJmjIY9cla9b9be7fSVJQ_33+23];
}
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[26].len = 3; T_EV5hHJmjIY9cla9b9be7fSVJQ_0[26].kind = 2; T_EV5hHJmjIY9cla9b9be7fSVJQ_0[26].sons = &T_EV5hHJmjIY9cla9b9be7fSVJQ_31[0];
NTI_C8RXb59bvbxaTzDOqx49aVVg.node = &T_EV5hHJmjIY9cla9b9be7fSVJQ_0[26];
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[22].kind = 1;
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[22].offset = offsetof(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA, state);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[22].typ = (&NTI_C8RXb59bvbxaTzDOqx49aVVg);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[22].name = "state";
T_EV5hHJmjIY9cla9b9be7fSVJQ_30[7] = &T_EV5hHJmjIY9cla9b9be7fSVJQ_0[27];
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[27].kind = 1;
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[27].offset = offsetof(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA, callee);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[27].typ = (&NTI_1EooIlSGbJRPSt3SfQJd7Q);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[27].name = "callee";
T_EV5hHJmjIY9cla9b9be7fSVJQ_30[8] = &T_EV5hHJmjIY9cla9b9be7fSVJQ_0[28];
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[28].kind = 1;
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[28].offset = offsetof(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA, calleesym);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[28].typ = (&NTI_83n62yi1b9bgUtRR9axFWW9ag);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[28].name = "calleeSym";
T_EV5hHJmjIY9cla9b9be7fSVJQ_30[9] = &T_EV5hHJmjIY9cla9b9be7fSVJQ_0[29];
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[29].kind = 1;
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[29].offset = offsetof(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA, calleescope);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[29].typ = (&NTI_rR5Bzr1D5krxoo1NcNyeMA);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[29].name = "calleeScope";
T_EV5hHJmjIY9cla9b9be7fSVJQ_30[10] = &T_EV5hHJmjIY9cla9b9be7fSVJQ_0[30];
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[30].kind = 1;
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[30].offset = offsetof(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA, call);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[30].typ = (&NTI_fKfcLzXYiz5jNu3NH3Tv8Q);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[30].name = "call";
T_EV5hHJmjIY9cla9b9be7fSVJQ_30[11] = &T_EV5hHJmjIY9cla9b9be7fSVJQ_0[31];
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[31].kind = 1;
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[31].offset = offsetof(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA, bindings);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[31].typ = (&NTI_9aiv9bp2t5icFNINcg9c4xi1Q);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[31].name = "bindings";
T_EV5hHJmjIY9cla9b9be7fSVJQ_30[12] = &T_EV5hHJmjIY9cla9b9be7fSVJQ_0[32];
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[32].kind = 1;
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[32].offset = offsetof(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA, magic);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[32].typ = (&NTI_shZhZOdbVC5nnFvcXQAImg);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[32].name = "magic";
T_EV5hHJmjIY9cla9b9be7fSVJQ_30[13] = &T_EV5hHJmjIY9cla9b9be7fSVJQ_0[33];
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[33].kind = 1;
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[33].offset = offsetof(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA, basetypematch);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[33].typ = (&NTI_VaVACK0bpYmqIQ0mKcHfQQ);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[33].name = "baseTypeMatch";
T_EV5hHJmjIY9cla9b9be7fSVJQ_30[14] = &T_EV5hHJmjIY9cla9b9be7fSVJQ_0[34];
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[34].kind = 1;
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[34].offset = offsetof(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA, fauxmatch);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[34].typ = (&NTI_9a3YiReNVD0IJHWFKgXRe9ag);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[34].name = "fauxMatch";
T_EV5hHJmjIY9cla9b9be7fSVJQ_30[15] = &T_EV5hHJmjIY9cla9b9be7fSVJQ_0[35];
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[35].kind = 1;
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[35].offset = offsetof(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA, genericconverter);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[35].typ = (&NTI_VaVACK0bpYmqIQ0mKcHfQQ);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[35].name = "genericConverter";
T_EV5hHJmjIY9cla9b9be7fSVJQ_30[16] = &T_EV5hHJmjIY9cla9b9be7fSVJQ_0[36];
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[36].kind = 1;
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[36].offset = offsetof(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA, coercedistincts);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[36].typ = (&NTI_VaVACK0bpYmqIQ0mKcHfQQ);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[36].name = "coerceDistincts";
T_EV5hHJmjIY9cla9b9be7fSVJQ_30[17] = &T_EV5hHJmjIY9cla9b9be7fSVJQ_0[37];
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[37].kind = 1;
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[37].offset = offsetof(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA, typedescmatched);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[37].typ = (&NTI_VaVACK0bpYmqIQ0mKcHfQQ);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[37].name = "typedescMatched";
T_EV5hHJmjIY9cla9b9be7fSVJQ_30[18] = &T_EV5hHJmjIY9cla9b9be7fSVJQ_0[38];
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[38].kind = 1;
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[38].offset = offsetof(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA, isnocall);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[38].typ = (&NTI_VaVACK0bpYmqIQ0mKcHfQQ);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[38].name = "isNoCall";
T_EV5hHJmjIY9cla9b9be7fSVJQ_30[19] = &T_EV5hHJmjIY9cla9b9be7fSVJQ_0[39];
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[39].kind = 1;
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[39].offset = offsetof(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA, mutabilityproblem);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[39].typ = (&NTI_k3HXouOuhqAKq0dx450lXQ);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[39].name = "mutabilityProblem";
T_EV5hHJmjIY9cla9b9be7fSVJQ_30[20] = &T_EV5hHJmjIY9cla9b9be7fSVJQ_0[40];
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[40].kind = 1;
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[40].offset = offsetof(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA, inheritancepenalty);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[40].typ = (&NTI_rR5Bzr1D5krxoo1NcNyeMA);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[40].name = "inheritancePenalty";
T_EV5hHJmjIY9cla9b9be7fSVJQ_30[21] = &T_EV5hHJmjIY9cla9b9be7fSVJQ_0[41];
NTI_uZlRb8w5pa9b16Yfjq9cGRXQ.size = sizeof(TY_uZlRb8w5pa9b16Yfjq9cGRXQ);
NTI_uZlRb8w5pa9b16Yfjq9cGRXQ.kind = 18;
NTI_uZlRb8w5pa9b16Yfjq9cGRXQ.base = 0;
NTI_uZlRb8w5pa9b16Yfjq9cGRXQ.flags = 2;
T_EV5hHJmjIY9cla9b9be7fSVJQ_34[0] = &T_EV5hHJmjIY9cla9b9be7fSVJQ_0[43];
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[43].kind = 1;
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[43].offset = offsetof(TY_uZlRb8w5pa9b16Yfjq9cGRXQ, Field0);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[43].typ = (&NTI_83n62yi1b9bgUtRR9axFWW9ag);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[43].name = "Field0";
T_EV5hHJmjIY9cla9b9be7fSVJQ_34[1] = &T_EV5hHJmjIY9cla9b9be7fSVJQ_0[44];
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[44].kind = 1;
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[44].offset = offsetof(TY_uZlRb8w5pa9b16Yfjq9cGRXQ, Field1);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[44].typ = (&NTI_rR5Bzr1D5krxoo1NcNyeMA);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[44].name = "Field1";
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[42].len = 2; T_EV5hHJmjIY9cla9b9be7fSVJQ_0[42].kind = 2; T_EV5hHJmjIY9cla9b9be7fSVJQ_0[42].sons = &T_EV5hHJmjIY9cla9b9be7fSVJQ_34[0];
NTI_uZlRb8w5pa9b16Yfjq9cGRXQ.node = &T_EV5hHJmjIY9cla9b9be7fSVJQ_0[42];
NTI_xITzrU1RhJLKwBlRCAbn9bA.size = sizeof(TY_xITzrU1RhJLKwBlRCAbn9bA*);
NTI_xITzrU1RhJLKwBlRCAbn9bA.kind = 24;
NTI_xITzrU1RhJLKwBlRCAbn9bA.base = (&NTI_uZlRb8w5pa9b16Yfjq9cGRXQ);
NTI_xITzrU1RhJLKwBlRCAbn9bA.flags = 2;
NTI_xITzrU1RhJLKwBlRCAbn9bA.marker = Marker_TY_xITzrU1RhJLKwBlRCAbn9bA;
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[41].kind = 1;
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[41].offset = offsetof(Tcandidate_B8Gf2sSWgQ79bLZ9bYWrLHaA, errors);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[41].typ = (&NTI_xITzrU1RhJLKwBlRCAbn9bA);
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[41].name = "errors";
T_EV5hHJmjIY9cla9b9be7fSVJQ_0[15].len = 22; T_EV5hHJmjIY9cla9b9be7fSVJQ_0[15].kind = 2; T_EV5hHJmjIY9cla9b9be7fSVJQ_0[15].sons = &T_EV5hHJmjIY9cla9b9be7fSVJQ_30[0];
NTI_B8Gf2sSWgQ79bLZ9bYWrLHaA.node = &T_EV5hHJmjIY9cla9b9be7fSVJQ_0[15];
}

