#ifndef _SQLPARSE_FINGERPRINTS_H #define _SQLPARSE_FINGERPRINTS_H static const char* patmap[] = { "&1o1U", "&1osU", "&1ovU", "&f()o", "&f(1)", "&f(1o", "&f(s)", "&f(v)", "&so1U", "&sovU", "&vo1U", "&vosU", "&vovU", "1&((f", "1&((k", "1&(1)", "1&(1,", "1&(1o", "1&(f(", "1&(k(", "1&(k1", "1&(kf", "1&(kk", "1&(kn", "1&(ko", "1&(ks", "1&(kv", "1&(s)", "1&(s,", "1&(so", "1&(v)", "1&(v,", "1&(vo", "1&1", "1&1Bf", "1&1Uk", "1&1c", "1&1f(", "1&1o(", "1&1o1", "1&1of", "1&1ok", "1&1on", "1&1oo", "1&1os", "1&1ov", "1&f((", "1&f()", "1&f(1", "1&f(f", "1&f(k", "1&f(n", "1&f(s", "1&f(v", "1&k(1", "1&k(f", "1&k(s", "1&k(v", "1&k1k", "1&kUk", "1&kk1", "1&kks", "1&kkv", "1&ksk", "1&kvk", "1&n()", "1&no1", "1&nos", "1&nov", "1&o(1", "1&o(s", "1&o(v", "1&o1o", "1&oso", "1&ovo", "1&sBf", "1&sU(", "1&sUk", "1&sf(", "1&so(", "1&so1", "1&sof", "1&sok", "1&son", "1&soo", "1&sos", "1&sov", "1&vBf", "1&vU(", "1&vUk", "1&vf(", "1&vo(", "1&vo1", "1&vof", "1&vok", "1&von", "1&voo", "1&vos", "1&vov", "1)&(1", "1)&(f", "1)&(k", "1)&(n", "1)&(s", "1)&(v", "1)&1B", "1)&1U", "1)&1f", "1)&1o", "1)&f(", "1)&o(", "1)&sB", "1)&sU", "1)&sf", "1)&so", "1)&vB", "1)&vU", "1)&vf", "1)&vo", "1)()s", "1)()v", "1))&(", "1))&1", "1))&f", "1))&o", "1))&s", "1))&v", "1)))&", "1))))", "1)));", "1)))B", "1)))U", "1)))k", "1)))o", "1));k", "1))B1", "1))Bs", "1))Bv", "1))Uk", "1))Un", "1))k1", "1))kk", "1))ks", "1))kv", "1))o(", "1))o1", "1))of", "1))ok", "1))on", "1))os", "1))ov", "1),(1", "1),(s", "1),(v", "1);k&", "1);k(", "1);kf", "1);kk", "1);kn", "1);ko", "1)B1", "1)B1&", "1)B1c", "1)B1o", "1)Bs", "1)Bs&", "1)Bsc", "1)Bso", "1)Bv", "1)Bv&", "1)Bvc", "1)Bvo", "1)U(k", "1)Uk(", "1)Uk1", "1)Ukf", "1)Ukk", "1)Ukn", "1)Uko", "1)Uks", "1)Ukv", "1)Unk", "1)k1", "1)k1c", "1)k1o", "1)kks", "1)kkv", "1)knk", "1)ks", "1)ksc", "1)kso", "1)kv", "1)kvc", "1)kvo", "1)o(1", "1)o(k", "1)o(n", "1)o(s", "1)o(v", "1)o1)", "1)o1B", "1)o1U", "1)o1f", "1)o1k", "1)o1o", "1)of(", "1)ok(", "1)ok1", "1)oks", "1)okv", "1)on&", "1)ono", "1)os)", "1)osB", "1)osU", "1)osf", "1)osk", "1)oso", "1)ov)", "1)ovB", "1)ovU", "1)ovf", "1)ovk", "1)ovo", "1,(f(", "1,(k(", "1,(k1", "1,(kf", "1,(ks", "1,(kv", "1,1),", "1,1)o", "1,1B1", "1,1Bs", "1,1Bv", "1,1Uk", "1,f(1", "1,f(s", "1,f(v", "1,s),", "1,s)o", "1,sB1", "1,sBv", "1,sUk", "1,v),", "1,v)o", "1,vB1", "1,vBs", "1,vBv", "1,vUk", "1;k&k", "1;k((", "1;k(1", "1;k(o", "1;k(s", "1;k(v", "1;k1,", "1;kf(", "1;kks", "1;kkv", "1;kn(", "1;kn,", "1;knc", "1;ko(", "1;kok", "1;ks,", "1;kv,", "1B1", "1B1,1", "1B1,n", "1B1,s", "1B1,v", "1B1Uk", "1B1c", "1B1k1", "1B1ks", "1B1kv", "1Bf(1", "1Bf(f", "1Bf(s", "1Bf(v", "1Bk(1", "1Bk(s", "1Bk(v", "1Bn,n", "1Bnk1", "1Bnks", "1Bnkv", "1Bs", "1Bs,1", "1Bs,n", "1Bs,v", "1BsUk", "1Bsc", "1Bsk1", "1Bsks", "1Bskv", "1Bv", "1Bv,1", "1Bv,n", "1Bv,s", "1Bv,v", "1BvUk", "1Bvc", "1Bvk1", "1Bvks", "1Bvkv", "1U", "1U((k", "1U(k1", "1U(kf", "1U(kn", "1U(ks", "1U(kv", "1U1,1", "1U1,s", "1U1,v", "1Uc", "1Uk", "1Uk(1", "1Uk(k", "1Uk(n", "1Uk(s", "1Uk(v", "1Uk1", "1Uk1,", "1Uk1c", "1Uk1f", "1Uk1k", "1Uk1n", "1Uk1o", "1Ukf", "1Ukf(", "1Ukf,", "1Ukk(", "1Ukk,", "1Ukk1", "1Ukkk", "1Ukkn", "1Ukks", "1Ukkv", "1Ukn&", "1Ukn(", "1Ukn,", "1Ukn1", "1Uknc", "1Uknk", "1Ukno", "1Ukns", "1Uknv", "1Uko1", "1Ukok", "1Ukos", "1Ukov", "1Uks", "1Uks,", "1Uksc", "1Uksf", "1Uksk", "1Uksn", "1Ukso", "1Ukv", "1Ukv,", "1Ukvc", "1Ukvf", "1Ukvk", "1Ukvn", "1Ukvo", "1Un,1", "1Un,s", "1Un,v", "1Un1,", "1Unk(", "1Unk1", "1Unkf", "1Unks", "1Unkv", "1Uns,", "1Unv,", "1Uon1", "1Uons", "1Uonv", "1Us,1", "1Us,v", "1Uv,1", "1Uv,s", "1Uv,v", "1c", "1f()k", "1k1U(", "1k1Uk", "1k1c", "1kU1,", "1kUs,", "1kUv,", "1kf(1", "1kf(s", "1kf(v", "1kk(1", "1kk(s", "1kk(v", "1kksc", "1kkvc", "1knkn", "1kno1", "1kokn", "1ksU(", "1ksUk", "1ksc", "1kvU(", "1kvUk", "1kvc", "1n&f(", "1n)Uk", "1nUk1", "1nUkn", "1nUks", "1nUkv", "1nk1c", "1nkf(", "1nksc", "1nkvc", "1o(((", "1o((1", "1o((f", "1o((s", "1o((v", "1o(1)", "1o(1o", "1o(f(", "1o(k(", "1o(k1", "1o(kf", "1o(kn", "1o(ks", "1o(kv", "1o(n)", "1o(o1", "1o(os", "1o(s)", "1o(so", "1o(v)", "1o(vo", "1o1)&", "1o1)o", "1o1Bf", "1o1Uk", "1o1f(", "1o1kf", "1o1o(", "1o1o1", "1o1of", "1o1oo", "1o1os", "1o1ov", "1of()", "1of(1", "1of(f", "1of(n", "1of(s", "1of(v", "1ok(1", "1ok(k", "1ok(s", "1ok(v", "1ok)U", "1ok)o", "1ok1", "1ok1,", "1ok1c", "1ok1k", "1okUk", "1okf(", "1oks", "1oks,", "1oksc", "1oksk", "1okv", "1okv,", "1okvc", "1okvk", "1onov", "1os)&", "1os)U", "1os)o", "1osBf", "1osUk", "1osf(", "1oskf", "1oso(", "1oso1", "1osof", "1osoo", "1osos", "1osov", "1ov)&", "1ov)U", "1ov)o", "1ovBf", "1ovUk", "1ovf(", "1ovkf", "1ovo(", "1ovo1", "1ovof", "1ovoo", "1ovos", "1ovov", ";kknc", "Uk1,1", "Uk1,f", "Uk1,n", "Uk1,s", "Uk1,v", "Ukkkn", "Uks,1", "Uks,f", "Uks,n", "Uks,v", "Ukv,1", "Ukv,f", "Ukv,n", "Ukv,s", "Ukv,v", "f((k(", "f((kf", "f()&f", "f()of", "f(1)&", "f(1)U", "f(1)o", "f(1,1", "f(1,f", "f(1,s", "f(1,v", "f(1o1", "f(1os", "f(1ov", "f(f()", "f(f(1", "f(f(f", "f(f(s", "f(f(v", "f(k()", "f(k,(", "f(k,n", "f(n()", "f(s)&", "f(s)U", "f(s)o", "f(s,1", "f(s,f", "f(s,v", "f(so1", "f(sov", "f(v)&", "f(v)U", "f(v)o", "f(v,1", "f(v,f", "f(v,s", "f(v,v", "f(vo1", "f(vos", "f(vov", "k()ok", "k(1)U", "k(ok(", "k(s)U", "k(sv)", "k(v)U", "k(vs)", "k(vv)", "k1,1,", "k1,1c", "k1,1k", "k1,f(", "k1,n,", "k1,s,", "k1,sc", "k1,sk", "k1,v,", "k1,vc", "k1,vk", "k1k(k", "k1o(s", "k1o(v", "k;non", "kf(1)", "kf(1,", "kf(f(", "kf(n,", "kf(o)", "kf(s)", "kf(s,", "kf(s:", "kf(v)", "kf(v,", "kf(v:", "kk(f(", "kk1f(", "kk1fn", "kk1kk", "kk1nk", "kk1sk", "kk1sn", "kk1vk", "kk1vn", "kksf(", "kksfn", "kkskk", "kksnk", "kksvk", "kksvn", "kkvf(", "kkvfn", "kkvkk", "kkvnk", "kkvsk", "kkvsn", "kkvvk", "kkvvn", "kn1kk", "kn1sk", "kn1sn", "kn1vk", "kn1vn", "knk(k", "knskk", "knsvk", "knsvn", "knvkk", "knvsk", "knvsn", "knvvk", "knvvn", "ko(k(", "ko(kf", "kok(k", "ks)", "ks,1,", "ks,1c", "ks,1k", "ks,f(", "ks,v,", "ks,vc", "ks,vk", "ksf(1", "ksf(v", "ksk(1", "ksk(k", "ksk(v", "kso(s", "kso(v", "kv)", "kv,1,", "kv,1c", "kv,1k", "kv,f(", "kv,s,", "kv,sc", "kv,sk", "kv,v,", "kv,vc", "kv,vk", "kvf(1", "kvf(s", "kvf(v", "kvk(1", "kvk(k", "kvk(s", "kvk(v", "kvo(s", "kvo(v", "n&(1)", "n&(1,", "n&(k1", "n&(ks", "n&(kv", "n&(o1", "n&(os", "n&(ov", "n&(s)", "n&(s,", "n&(v)", "n&(v,", "n&1Bf", "n&1f(", "n&1o(", "n&1o1", "n&1of", "n&1oo", "n&1os", "n&1ov", "n&f(1", "n&f(f", "n&f(s", "n&f(v", "n&k(1", "n&k(s", "n&k(v", "n&o1o", "n&oso", "n&ovo", "n&sf(", "n&so(", "n&so1", "n&sof", "n&soo", "n&sov", "n&vf(", "n&vo(", "n&vo1", "n&vof", "n&voo", "n&vos", "n&vov", "n)&(k", "n)&1f", "n)&1o", "n)&f(", "n)&sf", "n)&so", "n)&vf", "n)&vo", "n))&(", "n))&1", "n))&f", "n))&s", "n))&v", "n)))&", "n)));", "n)))k", "n)))o", "n));k", "n))kk", "n))o(", "n))o1", "n))of", "n))ok", "n))os", "n))ov", "n);k&", "n);k(", "n);kf", "n);kk", "n);kn", "n);ko", "n)k1o", "n)kks", "n)kkv", "n)kso", "n)kvo", "n)o(k", "n)o1&", "n)o1f", "n)o1o", "n)of(", "n)ok(", "n)os&", "n)osf", "n)oso", "n)ov&", "n)ovf", "n)ovo", "n,(f(", "n,(k(", "n,(k1", "n,(kf", "n,(ks", "n,(kv", "n,f(1", "n,f(s", "n,f(v", "n:o1U", "n:osU", "n:ovU", "n;k&k", "n;k((", "n;k(1", "n;k(s", "n;k(v", "n;kf(", "n;kks", "n;kkv", "n;kn(", "n;ko(", "n;kok", "nUk(k", "nUk1,", "nUkf(", "nUkn,", "nUks,", "nUkv,", "nUnk(", "nk1Uk", "nk1o1", "nkf(1", "nkf(s", "nkf(v", "nkksc", "nkkvc", "nksUk", "nkvUk", "nnn)U", "nno1U", "nnosU", "nnovU", "no(k1", "no(ks", "no(kv", "no(o1", "no(os", "no(ov", "no1&1", "no1&s", "no1&v", "no1Uk", "no1f(", "no1o(", "no1of", "no1oo", "no1os", "no1ov", "nof(1", "nof(s", "nof(v", "nok(f", "nok(k", "nok(s", "nok(v", "nono1", "nos&1", "nos&v", "nosUk", "nosf(", "noso(", "noso1", "nosof", "nosoo", "nosov", "nov&1", "nov&s", "nov&v", "novUk", "novf(", "novo(", "novo1", "novof", "novoo", "novos", "novov", "o1kf(", "oUk1,", "oUks,", "oUkv,", "of()o", "of(1)", "of(s)", "of(v)", "ok1o1", "ok1os", "ok1ov", "okkkn", "okso1", "oksov", "okvo1", "okvos", "okvov", "ook1,", "ooks,", "ookv,", "oskf(", "ovkf(", "s&((f", "s&((k", "s&(1)", "s&(1,", "s&(1o", "s&(f(", "s&(k(", "s&(k)", "s&(k1", "s&(kf", "s&(kk", "s&(kn", "s&(ko", "s&(ks", "s&(kv", "s&(s)", "s&(s,", "s&(so", "s&(v)", "s&(v,", "s&(vo", "s&1", "s&1Bf", "s&1Uk", "s&1c", "s&1f(", "s&1o(", "s&1o1", "s&1of", "s&1ok", "s&1on", "s&1oo", "s&1os", "s&1ov", "s&f((", "s&f()", "s&f(1", "s&f(f", "s&f(k", "s&f(n", "s&f(s", "s&f(v", "s&k&s", "s&k&v", "s&k(1", "s&k(f", "s&k(o", "s&k(s", "s&k(v", "s&k1k", "s&k1o", "s&kUk", "s&kc", "s&kk1", "s&kkv", "s&knk", "s&ko(", "s&ko1", "s&kok", "s&kos", "s&kov", "s&kso", "s&kvk", "s&kvo", "s&n&s", "s&n&v", "s&n()", "s&no1", "s&nos", "s&nov", "s&o(1", "s&o(k", "s&o(s", "s&o(v", "s&o1o", "s&okc", "s&oko", "s&os", "s&oso", "s&ov", "s&ovo", "s&s", "s&s:o", "s&sBf", "s&sU(", "s&sUk", "s&sc", "s&sf(", "s&so(", "s&so1", "s&sof", "s&son", "s&soo", "s&sos", "s&sov", "s&sso", "s&svo", "s&v:o", "s&vBf", "s&vU(", "s&vUk", "s&vc", "s&vf(", "s&vo(", "s&vo1", "s&vof", "s&vok", "s&von", "s&voo", "s&vos", "s&vov", "s&vso", "s&vvo", "s)&(1", "s)&(f", "s)&(k", "s)&(n", "s)&(s", "s)&(v", "s)&1B", "s)&1U", "s)&1f", "s)&1o", "s)&f(", "s)&o(", "s)&sB", "s)&sf", "s)&so", "s)&vB", "s)&vU", "s)&vf", "s)&vo", "s)()s", "s)()v", "s))&(", "s))&1", "s))&f", "s))&n", "s))&o", "s))&s", "s))&v", "s)))&", "s))))", "s)));", "s)))B", "s)))U", "s)))k", "s)))o", "s));k", "s))B1", "s))Bs", "s))Bv", "s))Uk", "s))Un", "s))k1", "s))kk", "s))ks", "s))kv", "s))o(", "s))o1", "s))of", "s))ok", "s))on", "s))os", "s))ov", "s),(1", "s),(s", "s),(v", "s);k&", "s);k(", "s);kf", "s);kk", "s);kn", "s);ko", "s)B1", "s)B1&", "s)B1c", "s)B1o", "s)Bs", "s)Bs&", "s)Bsc", "s)Bso", "s)Bv", "s)Bv&", "s)Bvc", "s)Bvo", "s)U(k", "s)Uk(", "s)Uk1", "s)Ukf", "s)Ukk", "s)Ukn", "s)Uko", "s)Uks", "s)Ukv", "s)Unk", "s)k1", "s)k1c", "s)k1o", "s)kks", "s)kkv", "s)ks", "s)ksc", "s)kso", "s)kv", "s)kvc", "s)kvo", "s)o(1", "s)o(k", "s)o(n", "s)o(s", "s)o(v", "s)o1B", "s)o1f", "s)o1k", "s)o1o", "s)of(", "s)ok(", "s)ok1", "s)oks", "s)okv", "s)on&", "s)os)", "s)osB", "s)osU", "s)osf", "s)osk", "s)oso", "s)ov)", "s)ovB", "s)ovf", "s)ovk", "s)ovo", "s,(f(", "s,(k(", "s,(k1", "s,(kf", "s,(kv", "s,1),", "s,1)o", "s,1B1", "s,1Bv", "s,1Uk", "s,f(1", "s,f(v", "s,s),", "s,v),", "s,v)o", "s,vB1", "s,vBv", "s,vUk", "s:o1)", "s:ov)", "s;k&k", "s;k((", "s;k(1", "s;k(o", "s;k(s", "s;k(v", "s;k1,", "s;k1o", "s;k;", "s;k[k", "s;k[n", "s;kf(", "s;kkn", "s;kks", "s;kkv", "s;kn(", "s;kn,", "s;knc", "s;knk", "s;knn", "s;ko(", "s;kok", "s;ks,", "s;ksc", "s;ksk", "s;kso", "s;kv,", "s;kvc", "s;kvk", "s;kvo", "s;n:k", "sB1", "sB1&s", "sB1&v", "sB1,1", "sB1,n", "sB1,v", "sB1Uk", "sB1c", "sB1k1", "sB1ks", "sB1kv", "sB1os", "sB1ov", "sBf(1", "sBf(f", "sBf(v", "sBk(1", "sBk(v", "sBn,n", "sBnk1", "sBnkv", "sBs", "sBs&s", "sBs&v", "sBsUk", "sBsc", "sBsos", "sBsov", "sBv", "sBv&s", "sBv&v", "sBv,1", "sBv,n", "sBv,v", "sBvUk", "sBvc", "sBvk1", "sBvks", "sBvkv", "sBvos", "sBvov", "sU((k", "sU(k(", "sU(k1", "sU(kf", "sU(kk", "sU(kn", "sU(ks", "sU(kv", "sU1,1", "sU1,v", "sUc", "sUk", "sUk(1", "sUk(k", "sUk(n", "sUk(v", "sUk1", "sUk1&", "sUk1,", "sUk1c", "sUk1f", "sUk1k", "sUk1n", "sUk1o", "sUkf", "sUkf(", "sUkf,", "sUkk(", "sUkk,", "sUkk1", "sUkkk", "sUkkn", "sUkks", "sUkkv", "sUkn&", "sUkn(", "sUkn,", "sUkn1", "sUknc", "sUknk", "sUkno", "sUkns", "sUknv", "sUko1", "sUkok", "sUkov", "sUks", "sUks&", "sUks,", "sUksc", "sUksk", "sUkso", "sUkv", "sUkv&", "sUkv,", "sUkvc", "sUkvf", "sUkvk", "sUkvn", "sUkvo", "sUn(k", "sUn,1", "sUn,v", "sUn1,", "sUnk(", "sUnk1", "sUnkf", "sUnks", "sUnkv", "sUno1", "sUnos", "sUnov", "sUnv,", "sUon1", "sUonv", "sUv,1", "sUv,v", "sc", "sf()k", "sf(1)", "sf(n,", "sf(s)", "sf(v)", "sk)&(", "sk)&1", "sk)&f", "sk)&s", "sk)&v", "sk);k", "sk)B1", "sk)Bs", "sk)Bv", "sk)Uk", "sk)Un", "sk)k1", "sk)kk", "sk)ks", "sk)kv", "sk)o(", "sk)o1", "sk)of", "sk)ok", "sk)os", "sk)ov", "sk1&1", "sk1&s", "sk1&v", "sk1U(", "sk1Uk", "sk1c", "sk1o1", "sk1os", "sk1ov", "skU1,", "skUs,", "skUv,", "skf(1", "skf(v", "skk(1", "skk(v", "skks", "skksc", "skkv", "skkvc", "sknkn", "sks&1", "sks&v", "sksUk", "sksc", "skso1", "sksos", "sksov", "skv&1", "skv&s", "skv&v", "skvU(", "skvUk", "skvc", "skvo1", "skvos", "skvov", "sn&f(", "sn,f(", "snUk1", "snUkn", "snUkv", "snk1c", "snkf(", "snkvc", "sno(s", "sno1U", "snosU", "snovU", "so(((", "so((1", "so((f", "so((k", "so((s", "so((v", "so(1)", "so(1o", "so(f(", "so(k(", "so(k)", "so(k1", "so(kf", "so(kk", "so(kn", "so(ko", "so(ks", "so(kv", "so(n)", "so(o1", "so(os", "so(ov", "so(s)", "so(so", "so(v)", "so(vo", "so1&1", "so1&o", "so1&s", "so1&v", "so1)&", "so1)o", "so1Bf", "so1Uk", "so1c", "so1f(", "so1kf", "so1o(", "so1o1", "so1of", "so1ok", "so1oo", "so1os", "so1ov", "sof()", "sof(1", "sof(f", "sof(k", "sof(n", "sof(s", "sof(v", "sok&s", "sok&v", "sok(1", "sok(k", "sok(o", "sok(s", "sok(v", "sok1", "sok1,", "sok1c", "sok1k", "sok1o", "sokUk", "sokc", "sokf(", "sokn,", "soknk", "soko(", "soko1", "sokok", "sokos", "sokov", "soks", "soks,", "soksc", "sokso", "sokv", "sokv,", "sokvc", "sokvk", "sokvo", "sonk1", "sonks", "sonkv", "sonos", "sonov", "sos", "sos&(", "sos&1", "sos&o", "sos&s", "sos&v", "sos:o", "sosBf", "sosUk", "sosc", "sosf(", "soskf", "soso(", "soso1", "sosof", "sosok", "sosoo", "sosos", "sosov", "sosso", "sosvo", "sov", "sov&(", "sov&1", "sov&o", "sov&s", "sov&v", "sov)&", "sov)o", "sov:o", "sovBf", "sovUk", "sovc", "sovf(", "sovkf", "sovo(", "sovo1", "sovof", "sovok", "sovoo", "sovos", "sovov", "sovso", "sovvo", "v&((f", "v&((k", "v&(1)", "v&(1,", "v&(1o", "v&(f(", "v&(k(", "v&(k)", "v&(k1", "v&(kf", "v&(kk", "v&(kn", "v&(ko", "v&(ks", "v&(kv", "v&(s)", "v&(s,", "v&(so", "v&(v)", "v&(v,", "v&(vo", "v&1Bf", "v&1Uk", "v&1c", "v&1f(", "v&1o(", "v&1o1", "v&1of", "v&1ok", "v&1on", "v&1oo", "v&1os", "v&1ov", "v&f((", "v&f()", "v&f(1", "v&f(f", "v&f(k", "v&f(n", "v&f(s", "v&f(v", "v&k&s", "v&k&v", "v&k(1", "v&k(f", "v&k(o", "v&k(s", "v&k(v", "v&k1k", "v&k1o", "v&kUk", "v&kc", "v&kk1", "v&kks", "v&kkv", "v&knk", "v&ko(", "v&ko1", "v&kok", "v&kos", "v&kov", "v&ksk", "v&kso", "v&kvk", "v&kvo", "v&n&s", "v&n&v", "v&n()", "v&no1", "v&nos", "v&nov", "v&o(1", "v&o(k", "v&o(s", "v&o(v", "v&o1o", "v&okc", "v&oko", "v&os", "v&oso", "v&ov", "v&ovo", "v&s:o", "v&sBf", "v&sU(", "v&sUk", "v&sc", "v&sf(", "v&so(", "v&so1", "v&sof", "v&sok", "v&son", "v&soo", "v&sos", "v&sov", "v&sso", "v&svo", "v&v:o", "v&vBf", "v&vU(", "v&vUk", "v&vc", "v&vf(", "v&vo(", "v&vo1", "v&vof", "v&vok", "v&von", "v&voo", "v&vos", "v&vov", "v&vso", "v&vvo", "v)&(1", "v)&(f", "v)&(k", "v)&(n", "v)&(s", "v)&(v", "v)&1B", "v)&1U", "v)&1f", "v)&1o", "v)&f(", "v)&o(", "v)&sB", "v)&sU", "v)&sf", "v)&so", "v)&vB", "v)&vU", "v)&vf", "v)&vo", "v)()s", "v)()v", "v))&(", "v))&1", "v))&f", "v))&n", "v))&o", "v))&s", "v))&v", "v)))&", "v))))", "v)));", "v)))B", "v)))U", "v)))k", "v)))o", "v));k", "v))B1", "v))Bs", "v))Bv", "v))Uk", "v))Un", "v))k1", "v))kk", "v))ks", "v))kv", "v))o(", "v))o1", "v))of", "v))ok", "v))on", "v))os", "v))ov", "v),(1", "v),(s", "v),(v", "v);k&", "v);k(", "v);kf", "v);kk", "v);kn", "v);ko", "v)B1", "v)B1&", "v)B1c", "v)B1o", "v)Bs", "v)Bs&", "v)Bsc", "v)Bso", "v)Bv", "v)Bv&", "v)Bvc", "v)Bvo", "v)U(k", "v)Uk(", "v)Uk1", "v)Ukf", "v)Ukk", "v)Ukn", "v)Uko", "v)Uks", "v)Ukv", "v)Unk", "v)k1", "v)k1c", "v)k1o", "v)kks", "v)kkv", "v)ks", "v)ksc", "v)kso", "v)kv", "v)kvc", "v)kvo", "v)o(1", "v)o(k", "v)o(n", "v)o(s", "v)o(v", "v)o1B", "v)o1U", "v)o1f", "v)o1k", "v)o1o", "v)of(", "v)ok(", "v)ok1", "v)oks", "v)okv", "v)on&", "v)ono", "v)os)", "v)osB", "v)osU", "v)osf", "v)osk", "v)oso", "v)ovB", "v)ovU", "v)ovf", "v)ovk", "v)ovo", "v,(f(", "v,(k(", "v,(k1", "v,(kf", "v,(ks", "v,(kv", "v,1),", "v,1)o", "v,1B1", "v,1Bs", "v,1Bv", "v,1Uk", "v,f(1", "v,f(s", "v,f(v", "v,s),", "v,s)o", "v,sB1", "v,sBv", "v,sUk", "v,v),", "v,v)o", "v,vB1", "v,vBs", "v,vBv", "v,vUk", "v:o1)", "v:os)", "v:ov)", "v;k&k", "v;k((", "v;k(1", "v;k(o", "v;k(s", "v;k(v", "v;k1,", "v;k1o", "v;k;", "v;k[k", "v;k[n", "v;kf(", "v;kkn", "v;kks", "v;kkv", "v;kn(", "v;kn,", "v;knc", "v;knk", "v;knn", "v;ko(", "v;kok", "v;ks,", "v;ksc", "v;ksk", "v;kso", "v;kv,", "v;kvc", "v;kvk", "v;kvo", "v;n:k", "vB1", "vB1&s", "vB1&v", "vB1,1", "vB1,n", "vB1,s", "vB1,v", "vB1Uk", "vB1c", "vB1k1", "vB1ks", "vB1kv", "vB1os", "vB1ov", "vBf(1", "vBf(f", "vBf(s", "vBf(v", "vBk(1", "vBk(s", "vBk(v", "vBn,n", "vBnk1", "vBnks", "vBnkv", "vBs", "vBs&s", "vBs&v", "vBs,1", "vBs,n", "vBs,v", "vBsUk", "vBsc", "vBsk1", "vBsks", "vBskv", "vBsos", "vBsov", "vBv", "vBv&s", "vBv&v", "vBv,1", "vBv,n", "vBv,s", "vBv,v", "vBvUk", "vBvc", "vBvk1", "vBvks", "vBvkv", "vBvos", "vBvov", "vU((k", "vU(k(", "vU(k1", "vU(kf", "vU(kk", "vU(kn", "vU(ks", "vU(kv", "vU1,1", "vU1,s", "vU1,v", "vUc", "vUk", "vUk(1", "vUk(k", "vUk(n", "vUk(s", "vUk(v", "vUk1", "vUk1&", "vUk1,", "vUk1c", "vUk1f", "vUk1k", "vUk1n", "vUk1o", "vUkf", "vUkf(", "vUkf,", "vUkk(", "vUkk,", "vUkk1", "vUkkk", "vUkkn", "vUkks", "vUkkv", "vUkn&", "vUkn(", "vUkn,", "vUkn1", "vUknc", "vUknk", "vUkno", "vUkns", "vUknv", "vUko1", "vUkok", "vUkos", "vUkov", "vUks", "vUks&", "vUks,", "vUksc", "vUksf", "vUksk", "vUksn", "vUkso", "vUkv", "vUkv&", "vUkv,", "vUkvc", "vUkvf", "vUkvk", "vUkvn", "vUkvo", "vUn(k", "vUn,1", "vUn,s", "vUn,v", "vUn1,", "vUnk(", "vUnk1", "vUnkf", "vUnks", "vUnkv", "vUno1", "vUnos", "vUnov", "vUns,", "vUnv,", "vUon1", "vUons", "vUonv", "vUs,1", "vUs,v", "vUv,1", "vUv,s", "vUv,v", "vc", "vf()k", "vf(1)", "vf(n,", "vf(s)", "vf(v)", "vk)&(", "vk)&1", "vk)&f", "vk)&s", "vk)&v", "vk);k", "vk)B1", "vk)Bs", "vk)Bv", "vk)Uk", "vk)Un", "vk)k1", "vk)kk", "vk)ks", "vk)kv", "vk)o(", "vk)o1", "vk)of", "vk)ok", "vk)os", "vk)ov", "vk1&1", "vk1&s", "vk1&v", "vk1U(", "vk1Uk", "vk1c", "vk1o1", "vk1os", "vk1ov", "vkU1,", "vkUs,", "vkUv,", "vkf(1", "vkf(s", "vkf(v", "vkk(1", "vkk(s", "vkk(v", "vkks", "vkksc", "vkkv", "vkkvc", "vknkn", "vks&1", "vks&v", "vksU(", "vksUk", "vksc", "vkso1", "vksos", "vksov", "vkv&1", "vkv&s", "vkv&v", "vkvU(", "vkvUk", "vkvc", "vkvo1", "vkvos", "vkvov", "vn&f(", "vn,f(", "vnUk1", "vnUkn", "vnUks", "vnUkv", "vnk1c", "vnkf(", "vnksc", "vnkvc", "vno1U", "vnosU", "vnovU", "vo(((", "vo((1", "vo((f", "vo((k", "vo((s", "vo((v", "vo(1)", "vo(1o", "vo(f(", "vo(k(", "vo(k)", "vo(k1", "vo(kf", "vo(kk", "vo(kn", "vo(ko", "vo(ks", "vo(kv", "vo(n)", "vo(o1", "vo(os", "vo(ov", "vo(s)", "vo(so", "vo(v)", "vo(vo", "vo1&1", "vo1&o", "vo1&s", "vo1&v", "vo1)&", "vo1)o", "vo1Bf", "vo1Uk", "vo1c", "vo1f(", "vo1kf", "vo1o(", "vo1o1", "vo1of", "vo1ok", "vo1oo", "vo1os", "vo1ov", "vof()", "vof(1", "vof(f", "vof(k", "vof(n", "vof(s", "vof(v", "vok&s", "vok&v", "vok(1", "vok(k", "vok(o", "vok(s", "vok(v", "vok1", "vok1,", "vok1c", "vok1k", "vok1o", "vokUk", "vokc", "vokf(", "vokn,", "voknk", "voko(", "voko1", "vokok", "vokos", "vokov", "voks", "voks,", "voksc", "voksk", "vokso", "vokv", "vokv,", "vokvc", "vokvk", "vokvo", "vonk1", "vonks", "vonkv", "vono1", "vonos", "vonov", "vos", "vos&(", "vos&1", "vos&o", "vos&s", "vos&v", "vos)&", "vos)o", "vos:o", "vosBf", "vosUk", "vosc", "vosf(", "voskf", "voso(", "voso1", "vosof", "vosok", "vosoo", "vosos", "vosov", "vosso", "vosvo", "vov", "vov&(", "vov&1", "vov&o", "vov&s", "vov&v", "vov)&", "vov)o", "vov:o", "vovBf", "vovUk", "vovc", "vovf(", "vovkf", "vovo(", "vovo1", "vovof", "vovok", "vovoo", "vovos", "vovov", "vovso", "vovvo", }; static const size_t patmap_sz = 2135; /* Simple binary search */ int is_sqli_pattern(const char *key) { int left = 0; int right = (int)patmap_sz - 1; while (left <= right) { int pos = (left + right) / 2; int cmp = strcmp(patmap[pos], key); if (cmp == 0) { return 1; /* TRUE */ } else if (cmp < 0) { left = pos + 1; } else { right = pos - 1; } } return 0; /* FALSE */ } #endif