void IO_Memory__ChannelDesc_Fingerprint(IO_Memory__Channel ch, OOC_CHAR8 key[], OOC_LEN key_0d, OOC_INT32 start, OOC_INT32 end) { register OOC_INT32 i0,i1,i2,i3,i4,i5,i6; OOC_INT16 i; OOC_INT16 j; OOC_INT32 pos; OOC_CHAR8 byte; OOC_INT16 old; OOC_INT16 _new; i0=0; l1_loop: *(OOC_UINT8*)((OOC_INT32)key+(_check_index(i0, key_0d, OOC_UINT16, 3993))) = 0; i0 = i0+1; i1 = i0<=3; if (i1) goto l1_loop; l5: i = 0; j = 0; i0 = start; pos = i0; i1 = end; i2 = i0<i1; if (!i2) goto l17; i2 = (OOC_INT32)ch; i3=0;i4=0; l8_loop: i5 = (OOC_INT32)*(OOC_INT32*)((_check_pointer(i2, 4121))+16); i5 = _check_pointer(i5, 4127); i6 = OOC_ARRAY_LENGTH(i5, 0); i5 = *(OOC_UINT8*)(i5+(_check_index(i0, i6, OOC_UINT32, 4127))); i5 = _type_cast_fast(OOC_UINT8, OOC_UINT8, i5); byte = i5; i6 = *(OOC_UINT8*)((OOC_INT32)key+(_check_index(i3, key_0d, OOC_UINT16, 4174))); i6 = _type_cast_fast(OOC_UINT8, OOC_UINT8, i6); old = i6; i5 = _type_cast_fast(OOC_UINT8, OOC_UINT8, (_rot(OOC_UINT8, OOC_UINT8, i5, i4))); _new = i5; *(OOC_UINT8*)((OOC_INT32)key+(_check_index(i3, key_0d, OOC_UINT16, 4250))) = (_mod((i6+i5),256)); i3 = i3+1; i = i3; i5 = i3==4; if (!i5) goto l12; i3 = _mod((i4+1),8); j = i3; i = 0; i4=i3;i3=0; l12: i0 = i0+1; pos = i0; i5 = i0<i1; if (i5) goto l8_loop; l17: return; ; }
static Value * eval(const Ast *expr) { switch(expr->class) { case N_CALL: return call(expr); case N_ASSIGNMENT: return assignment(expr); case N_IDENTIFIER: return identifier(expr); case N_NEG: return _neg(expr); case N_NOT: return _not(expr); case N_EQ: return _eq(expr); case N_NEQ: return _neq(expr); case N_AND: return _and(expr); case N_IOR: return _ior(expr); case N_XOR: return _neq(expr); // alias case N_LT: return _lt(expr); case N_LE: return _le(expr); case N_GE: return _ge(expr); case N_GT: return _gt(expr); case N_ADD: return _add(expr); case N_SUB: return _sub(expr); case N_MUL: return _mul(expr); case N_DIV: return _div(expr); case N_POW: return _pow(expr); case N_MOD: return _mod(expr); case N_BOOLEAN: return _bool(expr); case N_INTEGER: return _int(expr); case N_FLOAT: return _float(expr); case N_STRING: return _string(expr); case N_SET: return _set(expr); case N_R: return _relation(expr); } printf("EVALFAIL %d ", expr->class); pn(expr); assert(false && "should not be reached"); }
/* * TKGetNextToken returns the next token from the token stream as a * character string. Space for the returned token should be dynamically * allocated. The caller is responsible for freeing the space once it is * no longer needed. * * If the function succeeds, it returns a C string (delimited by '\0') * containing the token. Else it returns 0. * * You need to fill in this function as part of your implementation. */ TokenT *TKGetNextToken(TokenizerT *tk) { clearBuffer(tk); char curr = tk->inputIter[0]; // skip all whitespace before next token while(isspace(curr)) { nextChar(tk); clearBuffer(tk); curr = tk->inputIter[0]; } if(curr == '\0') { return NULL; } else if(isalpha(curr) || curr == '_') { return _word(tk); } else if(curr == '0') { return _zero(tk); } else if(isdigit(curr)) { return _decimal(tk); } else if(curr == '!') { // neq return _neq(tk); } else if(curr == '"') { // double_quote return _double_quote(tk); } else if(curr == '#') { return _pound(tk); } else if(curr == '$') { // INVALID return _invalid(tk); } else if(curr == '%') { // mod, mod_eq return _mod(tk); } else if(curr == '&') { // bit_and, log_and, address (?) return _bit_and(tk); } else if(curr == '\'') { // single_quote return _single_quote(tk); } else if(curr == '(') { // open_paren return _open_paren(tk); } else if(curr == ')') { // close_paren return _close_paren(tk); } else if(curr == '*') { // mult, mult_eq, pointer (?) return _mult(tk); } else if(curr == '+') { // plus, plus_eq, inc return _plus(tk); } else if(curr == ',') { // comma return _comma(tk); } else if(curr == '-') { // minus, minus_eq, dec, struct_pointer return _minus(tk); } else if(curr == '.') { // dot return _dot(tk); } else if(curr == '/') { // div, div_eq return _div(tk); } else if(curr == ':') { // ternary_colon return _ternary_colon(tk); } else if(curr == ';') { // semicolon return _semicolon(tk); } else if(curr == '<') { // lt, lshift, lt_eq return _lt(tk); } else if(curr == '=') { // eq, assign return _eq(tk); } else if(curr == '>') { // gt, rshift, gt_eq return _gt(tk); } else if(curr == '?') { // ternary_qmark return _ternary_qmark(tk); } else if(curr == '@') { // INVALID return _invalid(tk); } else if(curr == '[') { // open_bracket return _open_bracket(tk); } else if(curr == '\\') { // backslash (?) return _invalid(tk); } else if(curr == ']') { // close_bracket return _close_bracket(tk); } else if(curr == '^') { // bit_xor return _bit_xor(tk); } else if(curr == '`') { // INVALID return _invalid(tk); } else if(curr == '{') { // open_brace return _open_brace(tk); } else if(curr == '|') { // bit_or, log_or return _bit_or(tk); } else if(curr == '}') { // close_brace return _close_brace(tk); } else if(curr == '~') { // bit_not return _bit_not(tk); } else { return _invalid(tk); } }
inline int divmod(T &num, const T &den) { T ret = _div(num,den); num = _mod(num,den); return ret; }
OOC_Scanner_InputBuffer__CharArray OOC_Doc_Decoration__Remove(OOC_Scanner_SymList__Symbol sym, OOC_Doc_Decoration__Decoration *deco) { register OOC_INT32 i0,i1,i2,i3,i4,i5,i6; OOC_Scanner_InputBuffer__CharArray str; OOC_INT32 i; OOC_INT32 delta; OOC_INT32 len; auto OOC_INT32 OOC_Doc_Decoration__Remove_GetIndent(OOC_CHAR8 str[], OOC_LEN str_0d, OOC_INT32 startOfLine, OOC_INT32 indent); auto OOC_Doc_Decoration__PlainIndent OOC_Doc_Decoration__Remove_GetPlainIndent(OOC_Scanner_InputBuffer__CharArray str); auto OOC_CHAR8 OOC_Doc_Decoration__Remove_IsDotLine(OOC_Scanner_InputBuffer__CharArray str); auto OOC_Doc_Decoration__Decoration OOC_Doc_Decoration__Remove_GetDotLineIndent(OOC_Scanner_InputBuffer__CharArray str); OOC_INT32 OOC_Doc_Decoration__Remove_GetIndent(OOC_CHAR8 str[], OOC_LEN str_0d, OOC_INT32 startOfLine, OOC_INT32 indent) { register OOC_INT32 i0,i1; i0 = startOfLine; i1 = *(OOC_UINT8*)((OOC_INT32)str+(_check_index(i0, str_0d, OOC_UINT32, 2443))); i1 = i1!=0u; if (!i1) goto l20; l3_loop: i1 = *(OOC_UINT8*)((OOC_INT32)str+(_check_index(i0, str_0d, OOC_UINT32, 2471))); i1 = i1==32u; if (i1) goto l14; i1 = *(OOC_UINT8*)((OOC_INT32)str+(_check_index(i0, str_0d, OOC_UINT32, 2528))); i1 = i1==9u; if (i1) goto l12; i1 = *(OOC_UINT8*)((OOC_INT32)str+(_check_index(i0, str_0d, OOC_UINT32, 2638))); i1 = i1==10u; if (i1) goto l10; i1 = indent; return i1; goto l15; l10: return 2147483647; goto l15; l12: i1 = indent; indent = (i1+(8-(_mod(i1,8)))); goto l15; l14: i1 = indent; indent = (i1+1); l15: i0 = i0+1; i1 = *(OOC_UINT8*)((OOC_INT32)str+(_check_index(i0, str_0d, OOC_UINT32, 2443))); i1 = i1!=0u; if (i1) goto l3_loop; l20: return 2147483647; ; } OOC_Doc_Decoration__PlainIndent OOC_Doc_Decoration__Remove_GetPlainIndent(OOC_Scanner_InputBuffer__CharArray str) { register OOC_INT32 i0,i1,i2,i3,i4,i5,i6; OOC_INT32 len; OOC_INT32 i; OOC_Doc_Decoration__PlainIndent plainIndent; OOC_INT32 indent; OOC_INT32 max; i0 = (OOC_INT32)str; i1 = _check_pointer(i0, 3174); i2 = OOC_ARRAY_LENGTH(i1, 0); i1 = *(OOC_UINT8*)(i1+(_check_index(0, i2, OOC_UINT8, 3174))); _assert((i1==40u), 127, 3163); i1 = _check_pointer(i0, 3195); i2 = OOC_ARRAY_LENGTH(i1, 0); *(OOC_UINT8*)(i1+(_check_index(0, i2, OOC_UINT8, 3195))) = 32u; i1 = _check_pointer(i0, 3224); i2 = OOC_ARRAY_LENGTH(i1, 0); i1 = *(OOC_UINT8*)(i1+(_check_index(1, i2, OOC_UINT8, 3224))); _assert((i1==42u), 127, 3213); i1 = OOC_ARRAY_LENGTH((_check_pointer(i0, 3268)), 0); i1 = Strings__Length((void*)(_check_pointer(i0, 3268)), i1); len = i1; i = 1; i2 = _check_pointer(i0, 3302); i3 = OOC_ARRAY_LENGTH(i2, 0); i4 = i1-2; i2 = *(OOC_UINT8*)(i2+(_check_index(1, i3, OOC_UINT32, 3302))); i2 = i2==42u; if (i2) goto l3; i2=0u; goto l5; l3: i2 = 1!=i4; l5: if (!i2) goto l16; i2=1; l7_loop: i3 = _check_pointer(i0, 3341); i5 = OOC_ARRAY_LENGTH(i3, 0); *(OOC_UINT8*)(i3+(_check_index(i2, i5, OOC_UINT32, 3341))) = 32u; i2 = i2+1; i = i2; i3 = _check_pointer(i0, 3302); i5 = OOC_ARRAY_LENGTH(i3, 0); i3 = *(OOC_UINT8*)(i3+(_check_index(i2, i5, OOC_UINT32, 3302))); i3 = i3==42u; if (i3) goto l10; i3=0u; goto l12; l10: i3 = i2!=i4; l12: if (i3) goto l7_loop; l16: i2 = _check_pointer(i0, 3404); i3 = OOC_ARRAY_LENGTH(i2, 0); i5 = i1-1; i2 = *(OOC_UINT8*)(i2+(_check_index(i5, i3, OOC_UINT32, 3404))); _assert((i2==41u), 127, 3393); i2 = _check_pointer(i0, 3429); i3 = OOC_ARRAY_LENGTH(i2, 0); *(OOC_UINT8*)(i2+(_check_index(i5, i3, OOC_UINT32, 3429))) = 32u; i2 = _check_pointer(i0, 3462); i3 = OOC_ARRAY_LENGTH(i2, 0); i2 = *(OOC_UINT8*)(i2+(_check_index(i4, i3, OOC_UINT32, 3462))); _assert((i2==42u), 127, 3451); i = i4; i2 = _check_pointer(i0, 3527); i3 = OOC_ARRAY_LENGTH(i2, 0); i2 = *(OOC_UINT8*)(i2+(_check_index(i4, i3, OOC_UINT32, 3527))); i2 = i2==42u; if (!i2) goto l24; i2=i4; l19_loop: i3 = _check_pointer(i0, 3552); i4 = OOC_ARRAY_LENGTH(i3, 0); *(OOC_UINT8*)(i3+(_check_index(i2, i4, OOC_UINT32, 3552))) = 32u; i2 = i2-1; i = i2; i3 = _check_pointer(i0, 3527); i4 = OOC_ARRAY_LENGTH(i3, 0); i3 = *(OOC_UINT8*)(i3+(_check_index(i2, i4, OOC_UINT32, 3527))); i3 = i3==42u; if (i3) goto l19_loop; l24: i2 = (OOC_INT32)RT0__NewObject(_td_OOC_Doc_Decoration__PlainIndent.baseTypes[0]); plainIndent = (OOC_Doc_Decoration__PlainIndent)i2; i3 = (OOC_INT32)sym; i4 = *(OOC_INT32*)((_check_pointer(i3, 3729))+24); *(OOC_INT32*)((_check_pointer(i2, 3709))+8) = i4; i3 = *(OOC_INT32*)((_check_pointer(i3, 3791))+24); i4 = OOC_ARRAY_LENGTH((_check_pointer(i0, 3782)), 0); i3 = OOC_Doc_Decoration__Remove_GetIndent((void*)(_check_pointer(i0, 3782)), i4, 0, i3); *(OOC_INT32*)(_check_pointer(i2, 3756)) = i3; *(OOC_INT32*)((_check_pointer(i2, 3819))+4) = 79; i = 0; i3 = 0<i1; if (!i3) goto l38; i4=0; l27_loop: i5 = _check_pointer(i0, 3883); i6 = OOC_ARRAY_LENGTH(i5, 0); i5 = *(OOC_UINT8*)(i5+(_check_index(i4, i6, OOC_UINT32, 3883))); i4 = i4+1; i5 = i5==10u; if (!i5) goto l33; i5 = OOC_ARRAY_LENGTH((_check_pointer(i0, 3943)), 0); i5 = OOC_Doc_Decoration__Remove_GetIndent((void*)(_check_pointer(i0, 3943)), i5, i4, 0); indent = i5; i6 = *(OOC_INT32*)(_check_pointer(i2, 3989)); i6 = i5<i6; if (!i6) goto l33; *(OOC_INT32*)(_check_pointer(i2, 4027)) = i5; l33: i = i4; i5 = i4<i1; if (i5) goto l27_loop; l38: i4 = *(OOC_INT32*)(_check_pointer(i2, 4104)); i4 = i4==2147483647; if (!i4) goto l41; *(OOC_INT32*)(_check_pointer(i2, 4149)) = 0; l41: i4 = *(OOC_INT32*)(_check_pointer(i2, 4202)); i4 = i4>0; if (!i4) goto l83; i = 0; if (!i3) goto l83; i3=0; l46_loop: i4 = i3==0; if (i4) goto l49; i4 = _check_pointer(i0, 4471); i5 = OOC_ARRAY_LENGTH(i4, 0); i4 = *(OOC_UINT8*)(i4+(_check_index(i3, i5, OOC_UINT32, 4471))); i4 = i4==10u; goto l51; l49: i4=1u; l51: if (i4) goto l53; i3 = i3+1; i = i3; goto l77; l53: i4 = i3!=0; if (!i4) goto l57; i3 = i3+1; i = i3; l57: i4 = *(OOC_INT32*)(_check_pointer(i2, 4609)); i4 = i3+i4; max = i4; l58_loop: i5 = i3==i4; if (i5) goto l61; i5 = i3>=i1; goto l63; l61: i5=1u; l63: if (i5) goto l65; i5 = _check_pointer(i0, 4684); i6 = OOC_ARRAY_LENGTH(i5, 0); i5 = *(OOC_UINT8*)(i5+(_check_index(i3, i6, OOC_UINT32, 4684))); i5 = i5==10u; goto l67; l65: i5=1u; l67: if (i5) goto l77; i5 = _check_pointer(i0, 4774); i6 = OOC_ARRAY_LENGTH(i5, 0); i5 = *(OOC_UINT8*)(i5+(_check_index(i3, i6, OOC_UINT32, 4774))); switch (i5) { case 32u: i5 = _check_pointer(i0, 4812); i6 = OOC_ARRAY_LENGTH(i5, 0); *(OOC_UINT8*)(i5+(_check_index(i3, i6, OOC_UINT32, 4812))) = 2u; goto l74; case 9u: i5 = _check_pointer(i0, 4863); i6 = OOC_ARRAY_LENGTH(i5, 0); *(OOC_UINT8*)(i5+(_check_index(i3, i6, OOC_UINT32, 4863))) = 3u; goto l74; default: goto l74; } l74: i3 = i3+1; i = i3; goto l58_loop; l77: i4 = i3<i1; if (i4) goto l46_loop; l83: return (OOC_Doc_Decoration__PlainIndent)i2; ; } OOC_CHAR8 OOC_Doc_Decoration__Remove_IsDotLine(OOC_Scanner_InputBuffer__CharArray str) { register OOC_INT32 i0,i1,i2,i3,i4; OOC_CHAR8 dot; OOC_INT32 i; dot = 1u; i = 0; i0 = (OOC_INT32)str; i1 = _check_pointer(i0, 5401); i2 = OOC_ARRAY_LENGTH(i1, 0); i1 = *(OOC_UINT8*)(i1+(_check_index(0, i2, OOC_UINT32, 5401))); i1 = i1!=0u; if (i1) goto l3; i0=1u; goto l42; l3: i1=0;i2=1u; l4_loop: i3 = _check_pointer(i0, 5429); i4 = OOC_ARRAY_LENGTH(i3, 0); i3 = *(OOC_UINT8*)(i3+(_check_index(i1, i4, OOC_UINT32, 5429))); i3 = i3==10u; if (i3) goto l7; i1 = i1+1; i = i1; goto l37; l7: i1 = i1+1; i = i1; i3 = _check_pointer(i0, 5494); i4 = OOC_ARRAY_LENGTH(i3, 0); i3 = *(OOC_UINT8*)(i3+(_check_index(i1, i4, OOC_UINT32, 5494))); i3 = i3!=0u; if (i3) goto l10; i3=0u; goto l12; l10: i3 = _check_pointer(i0, 5510); i4 = OOC_ARRAY_LENGTH(i3, 0); i3 = *(OOC_UINT8*)(i3+(_check_index(i1, i4, OOC_UINT32, 5510))); i3 = i3!=10u; l12: if (i3) goto l14; i3=0u; goto l16; l14: i3 = _check_pointer(i0, 5537); i4 = OOC_ARRAY_LENGTH(i3, 0); i3 = *(OOC_UINT8*)(i3+(_check_index(i1, i4, OOC_UINT32, 5537))); i3 = (OOC_UINT8)i3<=(OOC_UINT8)32u; l16: if (!i3) goto l33; l19_loop: i1 = i1+1; i = i1; i3 = _check_pointer(i0, 5494); i4 = OOC_ARRAY_LENGTH(i3, 0); i3 = *(OOC_UINT8*)(i3+(_check_index(i1, i4, OOC_UINT32, 5494))); i3 = i3!=0u; if (i3) goto l22; i3=0u; goto l24; l22: i3 = _check_pointer(i0, 5510); i4 = OOC_ARRAY_LENGTH(i3, 0); i3 = *(OOC_UINT8*)(i3+(_check_index(i1, i4, OOC_UINT32, 5510))); i3 = i3!=10u; l24: if (i3) goto l26; i3=0u; goto l28; l26: i3 = _check_pointer(i0, 5537); i4 = OOC_ARRAY_LENGTH(i3, 0); i3 = *(OOC_UINT8*)(i3+(_check_index(i1, i4, OOC_UINT32, 5537))); i3 = (OOC_UINT8)i3<=(OOC_UINT8)32u; l28: if (i3) goto l19_loop; l33: if (i2) goto l35; i2=0u; goto l36; l35: i2 = _check_pointer(i0, 5614); i3 = OOC_ARRAY_LENGTH(i2, 0); i2 = *(OOC_UINT8*)(i2+(_check_index(i1, i3, OOC_UINT32, 5614))); i2 = i2==42u; l36: dot = i2; l37: i3 = _check_pointer(i0, 5401); i4 = OOC_ARRAY_LENGTH(i3, 0); i3 = *(OOC_UINT8*)(i3+(_check_index(i1, i4, OOC_UINT32, 5401))); i3 = i3!=0u; if (i3) goto l4_loop; l41: i0=i2; l42: return i0; ; } OOC_Doc_Decoration__Decoration OOC_Doc_Decoration__Remove_GetDotLineIndent(OOC_Scanner_InputBuffer__CharArray str) { register OOC_INT32 i0,i1,i2,i3,i4; OOC_Doc_Decoration__PlainIndent plainIndent; OOC_INT32 i; OOC_Doc_Decoration__DotLineIndent dotLineIndent; i0 = (OOC_INT32)str; i1 = (OOC_INT32)OOC_Doc_Decoration__Remove_GetPlainIndent((OOC_Scanner_InputBuffer__CharArray)i0); plainIndent = (OOC_Doc_Decoration__PlainIndent)i1; i = 0; i2 = _check_pointer(i0, 5958); i3 = OOC_ARRAY_LENGTH(i2, 0); i2 = *(OOC_UINT8*)(i2+(_check_index(0, i3, OOC_UINT32, 5958))); i2 = i2!=0u; if (!i2) goto l38; i2=0; l3_loop: i3 = _check_pointer(i0, 5986); i4 = OOC_ARRAY_LENGTH(i3, 0); i3 = *(OOC_UINT8*)(i3+(_check_index(i2, i4, OOC_UINT32, 5986))); i3 = i3==10u; if (i3) goto l6; i2 = i2+1; i = i2; goto l33; l6: i2 = i2+1; i = i2; i3 = _check_pointer(i0, 6051); i4 = OOC_ARRAY_LENGTH(i3, 0); i3 = *(OOC_UINT8*)(i3+(_check_index(i2, i4, OOC_UINT32, 6051))); i3 = i3!=0u; if (i3) goto l9; i3=0u; goto l11; l9: i3 = _check_pointer(i0, 6067); i4 = OOC_ARRAY_LENGTH(i3, 0); i3 = *(OOC_UINT8*)(i3+(_check_index(i2, i4, OOC_UINT32, 6067))); i3 = (OOC_UINT8)i3<=(OOC_UINT8)32u; l11: if (!i3) goto l23; l14_loop: i2 = i2+1; i = i2; i3 = _check_pointer(i0, 6051); i4 = OOC_ARRAY_LENGTH(i3, 0); i3 = *(OOC_UINT8*)(i3+(_check_index(i2, i4, OOC_UINT32, 6051))); i3 = i3!=0u; if (i3) goto l17; i3=0u; goto l19; l17: i3 = _check_pointer(i0, 6067); i4 = OOC_ARRAY_LENGTH(i3, 0); i3 = *(OOC_UINT8*)(i3+(_check_index(i2, i4, OOC_UINT32, 6067))); i3 = (OOC_UINT8)i3<=(OOC_UINT8)32u; l19: if (i3) goto l14_loop; l23: i3 = _check_pointer(i0, 6137); i4 = OOC_ARRAY_LENGTH(i3, 0); i3 = *(OOC_UINT8*)(i3+(_check_index(i2, i4, OOC_UINT32, 6137))); i3 = i3==42u; if (!i3) goto l33; l27_loop: i3 = _check_pointer(i0, 6166); i4 = OOC_ARRAY_LENGTH(i3, 0); *(OOC_UINT8*)(i3+(_check_index(i2, i4, OOC_UINT32, 6166))) = 32u; i2 = i2+1; i = i2; i3 = _check_pointer(i0, 6137); i4 = OOC_ARRAY_LENGTH(i3, 0); i3 = *(OOC_UINT8*)(i3+(_check_index(i2, i4, OOC_UINT32, 6137))); i3 = i3==42u; if (i3) goto l27_loop; l33: i3 = _check_pointer(i0, 5958); i4 = OOC_ARRAY_LENGTH(i3, 0); i3 = *(OOC_UINT8*)(i3+(_check_index(i2, i4, OOC_UINT32, 5958))); i3 = i3!=0u; if (i3) goto l3_loop; l38: i0 = (OOC_INT32)RT0__NewObject(_td_OOC_Doc_Decoration__DotLineIndent.baseTypes[0]); dotLineIndent = (OOC_Doc_Decoration__DotLineIndent)i0; i2 = *(OOC_INT32*)(_check_pointer(i1, 6342)); *(OOC_INT32*)(_check_pointer(i0, 6319)) = i2; i2 = *(OOC_INT32*)((_check_pointer(i1, 6396))+4); *(OOC_INT32*)((_check_pointer(i0, 6371))+4) = i2; i1 = *(OOC_INT32*)((_check_pointer(i1, 6455))+8); *(OOC_INT32*)((_check_pointer(i0, 6427))+8) = i1; return (OOC_Doc_Decoration__Decoration)i0; ; } i0 = (OOC_INT32)sym; i1 = (OOC_INT32)*(OOC_INT32*)((_check_pointer(i0, 6567))+8); i2 = (OOC_INT32)*(OOC_INT32*)((_check_pointer(i0, 6567))+8); i1 = OOC_ARRAY_LENGTH((_check_pointer(i1, 6572)), 0); i1 = Strings__Length((void*)(_check_pointer(i2, 6572)), i1); i1 = (OOC_INT32)RT0__NewObject(_td_OOC_Scanner_InputBuffer__CharArray.baseTypes[0], (i1+1)); str = (OOC_Scanner_InputBuffer__CharArray)i1; i0 = (OOC_INT32)*(OOC_INT32*)((_check_pointer(i0, 6592))+8); i2 = OOC_ARRAY_LENGTH((_check_pointer(i1, 6603)), 0); _copy_8((const void*)(_check_pointer(i0, 6597)),(void*)(_check_pointer(i1, 6603)),i2); i = 0; delta = 0; i0 = _check_pointer(i1, 6722); i2 = OOC_ARRAY_LENGTH(i0, 0); i0 = *(OOC_UINT8*)(i0+(_check_index(0, i2, OOC_UINT32, 6722))); i0 = i0!=0u; if (i0) goto l3; i0=0;i2=0; goto l21; l3: i0=0;i2=0; l4_loop: i3 = _check_pointer(i1, 6748); i4 = OOC_ARRAY_LENGTH(i3, 0); i3 = *(OOC_UINT8*)(i3+(_check_index(i0, i4, OOC_UINT32, 6748))); i3 = i3==13u; if (i3) goto l11; i3 = _check_pointer(i1, 6905); i4 = OOC_ARRAY_LENGTH(i3, 0); i3 = *(OOC_UINT8*)(i3+(_check_index(i0, i4, OOC_UINT32, 6905))); i3 = i3==10u; if (i3) goto l9; i3 = _check_pointer(i1, 6986); i4 = OOC_ARRAY_LENGTH(i3, 0); i5 = _check_pointer(i1, 7002); i6 = OOC_ARRAY_LENGTH(i5, 0); i5 = *(OOC_UINT8*)(i5+(_check_index(i0, i6, OOC_UINT32, 7002))); *(OOC_UINT8*)(i3+(_check_index((i0-i2), i4, OOC_UINT32, 6986))) = i5; goto l10; l9: i3 = _check_pointer(i1, 6937); i4 = OOC_ARRAY_LENGTH(i3, 0); *(OOC_UINT8*)(i3+(_check_index((i0-i2), i4, OOC_UINT32, 6937))) = 10u; l10: {register OOC_INT32 h0=i0;i0=i2;i2=h0;} goto l16; l11: i3 = _check_pointer(i1, 6780); i4 = OOC_ARRAY_LENGTH(i3, 0); *(OOC_UINT8*)(i3+(_check_index((i0-i2), i4, OOC_UINT32, 6780))) = 10u; i3 = _check_pointer(i1, 6823); i4 = OOC_ARRAY_LENGTH(i3, 0); i5 = i0+1; i3 = *(OOC_UINT8*)(i3+(_check_index(i5, i4, OOC_UINT32, 6823))); i3 = i3==10u; if (i3) goto l14; {register OOC_INT32 h0=i0;i0=i2;i2=h0;} goto l16; l14: i0 = i2+1; delta = i0; i2=i5; l16: i2 = i2+1; i = i2; i3 = _check_pointer(i1, 6722); i4 = OOC_ARRAY_LENGTH(i3, 0); i3 = *(OOC_UINT8*)(i3+(_check_index(i2, i4, OOC_UINT32, 6722))); i3 = i3!=0u; if (!i3) goto l20; {register OOC_INT32 h0=i0;i0=i2;i2=h0;} goto l4_loop; l20: {register OOC_INT32 h0=i0;i0=i2;i2=h0;} l21: i0 = i0-i2; len = i0; i2 = _check_pointer(i1, 7067); i3 = OOC_ARRAY_LENGTH(i2, 0); *(OOC_UINT8*)(i2+(_check_index(i0, i3, OOC_UINT32, 7067))) = 0u; *deco = (OOC_Doc_Decoration__Decoration)(OOC_INT32)0; i0 = OOC_Doc_Decoration__Remove_IsDotLine((OOC_Scanner_InputBuffer__CharArray)i1); if (i0) goto l24; i0=(OOC_INT32)0; goto l25; l24: i0 = (OOC_INT32)OOC_Doc_Decoration__Remove_GetDotLineIndent((OOC_Scanner_InputBuffer__CharArray)i1); *deco = (OOC_Doc_Decoration__Decoration)i0; l25: i0 = i0==(OOC_INT32)0; if (!i0) goto l28; i0 = (OOC_INT32)str; i0 = (OOC_INT32)OOC_Doc_Decoration__Remove_GetPlainIndent((OOC_Scanner_InputBuffer__CharArray)i0); *deco = (OOC_Doc_Decoration__Decoration)i0; l28: i0 = (OOC_INT32)str; return (OOC_Scanner_InputBuffer__CharArray)i0; ; }
// Updates and checks key presses uint8_t vrtkey_update() { if (delayInput) { delayInput = false; return VRTKEY_NO_ACTION; } if (state == STATE_CLOSED && percentOpened > 0) percentOpened -= OPEN_CLOSE_SPEED; if (state == STATE_OPENED && percentOpened < 100) percentOpened += OPEN_CLOSE_SPEED; if (state == STATE_CLOSED) return VRTKEY_NO_ACTION; if (control_just_pressed(CONTROL_DPAD_UP)) selectedY = _mod(selectedY - 1, NMBR_KEYS_H); if (control_just_pressed(CONTROL_DPAD_DOWN)) selectedY = _mod(selectedY + 1, NMBR_KEYS_H); if (control_just_pressed(CONTROL_DPAD_LEFT)) selectedX = _mod(selectedX - 1, NMBR_KEYS_W + 1); if (control_just_pressed(CONTROL_DPAD_RIGHT)) selectedX = _mod(selectedX + 1, NMBR_KEYS_W + 1); if (control_just_pressed(CONTROL_BUTTON_A)) { bool charInput = false; if (selectedX == NMBR_KEYS_W) { switch (selectedY) { case 0: return VRTKEY_ACCEPT; case 1: if (enableCancelButton) return VRTKEY_CANCEL; else break; case 2: caps = !caps; break; case 3: charInput = true; break; } } else { charInput = true; } if (charInput) { // Insert key to string char c; // Check space button if (selectedX == NMBR_KEYS_W && selectedY == 3) c = ' '; else c = _getChar(selectedX, selectedY); // Make sure we have space int curLength = strlen(inputStr); if (curLength + 1 == inputLength) { return VRTKEY_NO_ACTION; } int i; for (i = curLength; i >= 0; i--) { inputStr[i + 1] = inputStr[i]; if (i == cursorPosition) break; } inputStr[cursorPosition] = c; cursorPosition++; } } if (control_just_pressed(CONTROL_BUTTON_B) && enableCancelButton) { return VRTKEY_CANCEL; } if (control_just_pressed(CONTROL_BUTTON_X)) { if (cursorPosition > 0) { int curLength = strlen(inputStr); int i; for (i = cursorPosition - 1; i <= curLength; i++) { inputStr[i] = inputStr[i + 1]; } cursorPosition--; } } if (showTextfield) { if (control_just_pressed(CONTROL_TRIGGER_RIGHT)) { if (cursorPosition < strlen(inputStr)) cursorPosition++; } if (control_just_pressed(CONTROL_TRIGGER_LEFT)) { if (cursorPosition > 0) cursorPosition--; } } return VRTKEY_NO_ACTION; }
int main(){ SysTick_Config(SystemCoreClock / 2000); // 0.5ms // NEED OF KEY AND LED RCC_ClockSecuritySystemCmd(ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOB, &GPIO_InitStructure); // Init LCD LCD_Cmd_InitFSMC(); LCD_Cmd_Init(); LCD_Cmd_InitBacklight(); // Put some background // LCD_FillRectangle_RGB565(0, 0, 240, 320, C_RGB565(0x80, 0x80, 0x80)); Painter_PutImage(res_img_res_lp_jpg,0,0,0xff); // Painter_SetupContextBitmask(240, 320, 0); // benchmark(2); // A circle to overlay long shadow LCD_FillCircle_RGB4444(120, 120, 100+18, 0x88fa); // now you can see it long_shadow(); // an alternative shadow // LCD_FillCircle(120+1, 120+1, 100+2, 0x8886, 0); // LCD_FillCircle(120, 120, 100+2, 0x8886, 0); // LCD_FillCircle(120, 120, 100+1, 0x8886, 0); // Put my clock panel on screen LCD_FillCircle_RGB565(120, 120, 100, C_RGB565(0, 0, 0)); LCD_FillCircle_RGB565(120, 120, 90, C_RGB565(0xff, 0xff, 0xff)); // Clock frame need some shadow! Painter_SetupContextBitmask(210, 210, 0); u16 x, y, i; u32 t; for (x=0;x<200;x++) for (y=0;y<200;y++){ t = (x-100)*(x-100)+(y-100)*(y-100); if ((t>=91*91)&&(t<100*100)) LCD_SetBitMask(_d_dl_ctx.bm, x, y, 210); } // Draw ticks and numbers const s8 TICK_XI[] = { 0, 42, 73, 85, 73, 42, 0, -42, -73, -85, -73, -42}; const s8 TICK_YI[] = {-85, -73, -42, 0, 42, 73, 85, 73, 42, 0, -42, -73}; const s8 TICK_XO[] = { 0, 44, 77, 90, 77, 45, 0, -44, -77, -90, -77, -45}; const s8 TICK_YO[] = {-90, -77, -45, 0, 44, 77, 90, 77, 45, 0, -44, -77}; const u16 *text[] = {res_string_0/*_FSTR_0*/, res_string_1/*_FSTR_1*/, res_string_2/*_FSTR_2*/, res_string_3/*_FSTR_3*/, res_string_4/*_FSTR_4*/, res_string_5/*_FSTR_5*/, res_string_6/*_FSTR_6*/, res_string_7/*_FSTR_7*/, res_string_8/*_FSTR_8*/, res_string_9/*_FSTR_9*/, res_string_11/*_FSTR_10*/, res_string_12/*_FSTR_11*/, res_string_13/*_FSTR_12*/ }; const u16 *col = res_string_14/*_FSTR_:*/; const u16 *space = res_string_15/*_FSTR_ */; u16 time[20]; for (i=0;i<12;i++){ Painter_LocateContextBitmask(100+TICK_XO[i], 100+TICK_YO[i]); Painter_DrawLine(120+TICK_XO[i], 120+TICK_YO[i], 120+TICK_XI[i], 120+TICK_YI[i], 0x000f, 5, PAINTER_DRAW_BM_HOLD); Painter_PutString(text[i?i:12], 14, 0x000f, 0 , 120+TICK_XI[i]-(TICK_XO[i]-TICK_XI[i])*2-5, 120+TICK_YI[i]-(TICK_YO[i]-TICK_YI[i])*2-8 , 20, 20, PAINTER_STR_SHADOW*2); } // Bravo! Painter_Fill_BitMaskShadow(30, 30, 230, 230, 0L, 10, 10, 210, 0x0008, 4, 4, 15); // LET IT RUN! u8 m, s; // so-called second and minute bitmask bm; _UNUSED(bm); s = 0; m = 0; Painter_SetupContextBitmask(200, 200, 0); // new context for new shadow Painter_LocateContextBitmask(100, 100); // start from center u8 shadow_on; u16 bg[200*60]; // grab screen region, saving for later repaint LCD_SetWindow(20, 240, 200, 60); LCD_GetImage_RGB565(bg, 200*60); while (1){ // PUSH BUTTON TO RUN REALLY FAST, WITHOUT SHADOW! shadow_on = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_15)?PAINTER_STR_SHADOW*2:0; LCD_FillCircle_RGB565(120, 120, 65, 0xffff); // Clear clock hands, sucks aha~ // Dont forget bitmasks for (x=30;x<170;x++) for (y=30;y<170;y++){ LCD_ResetBitMask(_d_dl_ctx.bm, x, y, 200); } // second hand u16 sh_x[] = {120, 120+(TICK_XI[_mod(s+11,12)]+3)/5, 120+TICK_XI[s]-(TICK_XO[s]-TICK_XI[s])*6, 120+(TICK_XI[_mod(s+1,12)]+3)/5 }; u16 sh_y[] = {120, 120+(TICK_YI[_mod(s+11,12)]+3)/5, 120+TICK_YI[s]-(TICK_YO[s]-TICK_YI[s])*6, 120+(TICK_YI[_mod(s+1,12)]+3)/5 }; // Center circle makes it cute~ Painter_DrawCircle(120, 120, 4, 0x6a2f, 12, PAINTER_DRAW_BM_HOLD); Painter_DrawPoly(sh_x, sh_y, 4, 0x6a2f, 3, PAINTER_DRAW_BM_HOLD | PAINTER_DRAW_POLY_CLOSE); // Painter_DrawLine(120, 120 // , 120+TICK_XI[s]-(TICK_XO[s]-TICK_XI[s])*6 // , 120+TICK_YI[s]-(TICK_YO[s]-TICK_YI[s])*6, // 0x6a2f, 5, PAINTER_DRAW_BM_HOLD); // Painter_DrawLine(120, 120 // , 120-(TICK_XI[s]+4)/8 // , 120-(TICK_YI[s]+4)/8, // 0x6a2f, 5, PAINTER_DRAW_BM_HOLD); // GET MY SHADOW! if (shadow_on) Painter_Fill_BitMaskShadow(50, 50, 190, 190, 0L, 30, 30, 200, 0x0008, 4, 4, 12); for (x=30;x<170;x++) for (y=30;y<170;y++){ LCD_ResetBitMask(_d_dl_ctx.bm, x, y, 200); } u32 mm = m % 12; // minute hand Painter_DrawLine(120, 120 , 120+TICK_XI[mm]-(TICK_XO[mm]-TICK_XI[mm])*10 , 120+TICK_YI[mm]-(TICK_YO[mm]-TICK_YI[mm])*10, 0xa22f, 5, PAINTER_DRAW_BM_HOLD); Painter_DrawLine(120, 120 , 120-(TICK_XI[mm]+4)/8 , 120-(TICK_YI[mm]+4)/8, 0xa22f, 5, PAINTER_DRAW_BM_HOLD); // Center circle makes it cute~ Painter_DrawCircle(120, 120, 3, 0xa22f, 5, PAINTER_DRAW_BM_HOLD); // GET MY SHADOW! if (shadow_on) Painter_Fill_BitMaskShadow(50, 50, 190, 190, 0L, 30, 30, 200, 0x0008, 4, 4, 12); // show time in text u16 *p = time, *q; // need some space *p++ = space[0]; mm = m?m:1; while (mm<10000) { *p++ = space[0]; mm *= 10; } //put minute digits p = itoa(m, p); *p++ = col[0]; //put second text directly q = (u16 *)(text)[s]; while (*q) *p++ = *q++; *p++ = 0; // repaint the background LCD_SetWindow(20, 240, 200, 60); LCD_PutImage_RGB565(bg, 200*60); // GET MY TIME! Painter_PutString((const u16*)time, 48, 0xffff, 0xf5b9 , 20, 240, 200, 60, shadow_on | PAINTER_STR_SFLUSH); put_fps(1); // PUSH A TO DASH! if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_15)) DUMMY; // TICK TOCK~ s++; if (s == 12) { m++; s = 0; } } return 0; }
void XML_UnicodeCodec_UTF16__CodecDesc_Encode(XML_UnicodeCodec_UTF16__Codec codec, OOC_CHAR16 source[], OOC_LEN source_0d, OOC_INT32 sourceStart, OOC_INT32 sourceEnd, OOC_CHAR8 dest[], OOC_LEN dest_0d, OOC_INT32 destStart, OOC_INT32 destEnd, OOC_INT32 *sourceDone, OOC_INT32 *destDone) { register OOC_INT32 i0,i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13; OOC_INT32 low; OOC_INT32 high; OOC_INT32 testSourceEnd; OOC_INT32 testDestEnd; OOC_INT32 i; OOC_INT32 j; auto OOC_INT32 XML_UnicodeCodec_UTF16__CodecDesc_Encode_WordsPerEncoding(OOC_CHAR16 ch); OOC_INT32 XML_UnicodeCodec_UTF16__CodecDesc_Encode_WordsPerEncoding(OOC_CHAR16 ch) { register OOC_INT32 i0,i1; i0 = ch; i1 = (OOC_UINT16)55296u<=(OOC_UINT16)i0; if (i1) goto l3; i0=0u; goto l5; l3: i0 = (OOC_UINT16)i0<(OOC_UINT16)56320u; l5: if (i0) goto l7; return 1; goto l8; l7: return 2; l8: _failed_function(5105); return 0; ; } i0 = (OOC_INT32)codec; i1 = *(OOC_UINT8*)((_check_pointer(i0, 5306))+8); if (i1) goto l3; low = 0; high = 1; i1=1;i2=0; goto l4; l3: low = 1; high = 0; i1=0;i2=1; l4: i3 = sourceEnd; i4 = i3-1; i5 = destEnd; testSourceEnd = i4; i6 = i5-5; testDestEnd = i6; i7 = sourceStart; i = i7; i8 = destStart; j = i8; i9 = i7<i4; if (i9) goto l7; i9=0u; goto l9; l7: i9 = i8<i6; l9: if (i9) goto l11; i4=i7;i6=i8; goto l45; l11: i9=i8;i10=i7; l12_loop: i11 = i9+i1; i12 = *(OOC_UINT16*)((OOC_INT32)source+(_check_index(i10, source_0d, OOC_UINT32, 5779))*2); *(OOC_UINT8*)((OOC_INT32)dest+(_check_index(i11, dest_0d, OOC_UINT32, 5751))) = (i12>>8); i12 = i9+i2; i13 = *(OOC_UINT16*)((OOC_INT32)source+(_check_index(i10, source_0d, OOC_UINT32, 5831))*2); *(OOC_UINT8*)((OOC_INT32)dest+(_check_index(i12, dest_0d, OOC_UINT32, 5804))) = (_mod(i13,256)); i13 = *(OOC_UINT16*)((OOC_INT32)source+(_check_index(i10, source_0d, OOC_UINT32, 5862))*2); i13 = (OOC_UINT16)i13<(OOC_UINT16)55296u; if (i13) goto l19; i13 = *(OOC_UINT16*)((OOC_INT32)source+(_check_index(i10, source_0d, OOC_UINT32, 5895))*2); i13 = (OOC_UINT16)i13>=(OOC_UINT16)57344u; if (i13) goto l17; i13=0u; goto l21; l17: i13 = *(OOC_UINT16*)((OOC_INT32)source+(_check_index(i10, source_0d, OOC_UINT32, 5919))*2); i13 = (OOC_UINT16)i13<(OOC_UINT16)65534u; goto l21; l19: i13=1u; l21: if (i13) goto l35; i13 = *(OOC_UINT16*)((OOC_INT32)source+(_check_index(i10, source_0d, OOC_UINT32, 5985))*2); i13 = (OOC_UINT16)i13<(OOC_UINT16)56320u; if (i13) goto l25; i13=0u; goto l27; l25: i13 = *(OOC_UINT16*)((OOC_INT32)source+(_check_index((i10+1), source_0d, OOC_UINT32, 6030))*2); i13 = (OOC_UINT16)56320u<=(OOC_UINT16)i13; l27: if (i13) goto l29; i13=0u; goto l31; l29: i13 = *(OOC_UINT16*)((OOC_INT32)source+(_check_index((i10+1), source_0d, OOC_UINT32, 6046))*2); i13 = (OOC_UINT16)i13<(OOC_UINT16)57344u; l31: if (i13) goto l33; i13 = *(OOC_INT32*)(_check_pointer(i0, 6244)); *(OOC_INT32*)(_check_pointer(i0, 6244)) = (i13+1); *(OOC_UINT8*)((OOC_INT32)dest+(_check_index(i11, dest_0d, OOC_UINT32, 6273))) = 0u; *(OOC_UINT8*)((OOC_INT32)dest+(_check_index(i12, dest_0d, OOC_UINT32, 6333))) = 63u; i10 = i10+1; i = i10; i9 = i9+2; j = i9; goto l36; l33: i11 = i9+2; i12 = i10+1; i13 = *(OOC_UINT16*)((OOC_INT32)source+(_check_index(i12, source_0d, OOC_UINT32, 6109))*2); *(OOC_UINT8*)((OOC_INT32)dest+(_check_index((i11+i1), dest_0d, OOC_UINT32, 6079))) = (i13>>8); i12 = *(OOC_UINT16*)((OOC_INT32)source+(_check_index(i12, source_0d, OOC_UINT32, 6167))*2); *(OOC_UINT8*)((OOC_INT32)dest+(_check_index((i11+i2), dest_0d, OOC_UINT32, 6138))) = (_mod(i12,256)); i10 = i10+2; i = i10; i9 = i9+4; j = i9; goto l36; l35: i10 = i10+1; i = i10; i9 = i9+2; j = i9; l36: i11 = i10<i4; if (i11) goto l39; i11=0u; goto l41; l39: i11 = i9<i6; l41: if (i11) goto l12_loop; l44: i4=i10;i6=i9; l45: i9 = i4==i7; if (i9) goto l48; *sourceDone = i4; *destDone = i6; goto l81; l48: i6 = i4!=i3; if (i6) goto l51; i6=0u; goto l53; l51: i6 = *(OOC_UINT16*)((OOC_INT32)source+(_check_index(i4, source_0d, OOC_UINT32, 6771))*2); i6 = XML_UnicodeCodec_UTF16__CodecDesc_Encode_WordsPerEncoding(i6); i6 = (i4+i6)<=i3; l53: if (!i6) goto l65; l56_loop: i6 = *(OOC_UINT16*)((OOC_INT32)source+(_check_index(i4, source_0d, OOC_UINT32, 6833))*2); i6 = XML_UnicodeCodec_UTF16__CodecDesc_Encode_WordsPerEncoding(i6); i4 = i4+i6; i = i4; i6 = i4!=i3; if (i6) goto l59; i6=0u; goto l61; l59: i6 = *(OOC_UINT16*)((OOC_INT32)source+(_check_index(i4, source_0d, OOC_UINT32, 6771))*2); i6 = XML_UnicodeCodec_UTF16__CodecDesc_Encode_WordsPerEncoding(i6); i6 = (i4+i6)<=i3; l61: if (i6) goto l56_loop; l65: i6 = i4!=i7; if (i6) goto l68; *sourceDone = i4; *destDone = i8; goto l69; l68: XML_UnicodeCodec_UTF16__CodecDesc_Encode((XML_UnicodeCodec_UTF16__Codec)i0, (void*)(OOC_INT32)source, source_0d, i7, (i4+1), (void*)(OOC_INT32)dest, dest_0d, i8, (i5+5), (void*)(OOC_INT32)sourceDone, (void*)(OOC_INT32)destDone); l69: i6 = *sourceDone; i4 = i6==i4; if (i4) goto l72; i4=0u; goto l74; l72: i4 = i6!=i3; l74: if (i4) goto l76; i4=0u; goto l78; l76: i4 = *destDone; i4 = i4!=i5; l78: if (!i4) goto l81; i4 = *(OOC_INT32*)(_check_pointer(i0, 7412)); i5 = *destDone; *(OOC_INT32*)(_check_pointer(i0, 7412)) = (i4+1); *(OOC_UINT8*)((OOC_INT32)dest+(_check_index((i5+i1), dest_0d, OOC_UINT32, 7441))) = 0u; *(OOC_UINT8*)((OOC_INT32)dest+(_check_index((i5+i2), dest_0d, OOC_UINT32, 7508))) = 63u; *destDone = (i5+2); *sourceDone = i3; l81: return; ; }