diff --git a/arch/linux/main.c b/arch/linux/main.c index 06c04c3..9906b1b 100644 --- a/arch/linux/main.c +++ b/arch/linux/main.c @@ -42,6 +42,11 @@ print_help() #define MEM_SIZE (1 << 18) +typedef enum { + UXN, + RER +} EmitterType; + int main(int argc, char **argv) { @@ -55,11 +60,14 @@ main(int argc, char **argv) return EXIT_FAILURE; } + u8 et; Emitter e; if(seq(argv[1], "-emit=rer")) { e = rer_emitter(); + et = RER; } else if(seq(argv[1], "-emit=uxn")) { e = uxn_emitter(); + et = UXN; } else { printf("unknown emitter type\n"); return EXIT_FAILURE; @@ -81,6 +89,13 @@ main(int argc, char **argv) curr = curr->next; } + switch(et) { + case UXN:{ + printf("\n@mem_length_ #%04x\n@mem_ ", memory->count); + } + default:{} + } + curr = memory->head; while(curr) { char *tmp_str = node_value(curr); diff --git a/arch/web/main.c b/arch/web/main.c index 3d091dc..84befcb 100644 --- a/arch/web/main.c +++ b/arch/web/main.c @@ -1,5 +1,6 @@ #include "../../libc.h" #include "../../compiler.h" +#include #include #include #include @@ -34,35 +35,57 @@ EMSCRIPTEN_KEEPALIVE char * undar_compile(int emitter_type, char *source) { + typedef enum { UXN, RER } EmitterType; + + char uxn_temp_strbuf[32]; u8 tape[MEM_SIZE]; Arena a = {tape, 0, MEM_SIZE}; + u8 et; Emitter e; switch(emitter_type) { case 0: e = rer_emitter(); + et = RER; break; case 1: e = uxn_emitter(); + et = UXN; break; default: return NULL; } List *code = List_init(&a); + List *msize = List_init(&a); List *memory = List_init(&a); compile(&a, code, memory, &e, source); + switch(et) { + case UXN: { + sprintf(uxn_temp_strbuf, "@mem_length_ #%04x\n @mem_ ", memory->count); + StrBuf_append(&a, msize, uxn_temp_strbuf); + break; + } + default: { + sprintf(uxn_temp_strbuf, "@mem_length_ #%04x\n @mem_ ", memory->count); + StrBuf_append(&a, msize, uxn_temp_strbuf); + break; + } + } + size_t code_size = List_size(code); + size_t m_size = List_size(msize); size_t mem_size = List_size(memory); - size_t total_size = code_size + mem_size + 1; + size_t total_size = code_size + m_size + mem_size + 1; char *result = (char *)malloc(total_size); if(result == NULL) return NULL; size_t offset = 0; list2buffer(code, result, &offset); + list2buffer(msize, result, &offset); list2buffer(memory, result, &offset); result[offset] = '\0'; diff --git a/compiler.c b/compiler.c index caa8e43..a4305e5 100644 --- a/compiler.c +++ b/compiler.c @@ -120,6 +120,14 @@ is_type(void) parser->previous.type <= TOKEN_TYPE_PTR; } +bool +is_current_type(void) +{ + return parser->current.type >= TOKEN_TYPE_I8 && + parser->current.type <= TOKEN_TYPE_PTR; +} + + SymbolType token_type_to_sym_type(TokenType t) { @@ -238,18 +246,20 @@ define_function(void) scope_new(); expect(TOKEN_LPAREN); - advance(); /* parse the args */ - while(!match(TOKEN_RPAREN)) { + while(!check(TOKEN_RPAREN)) { + advance(); size += variable_declaration(fn); - if(match(TOKEN_RPAREN)) break; + if(check(TOKEN_RPAREN)) break; + expect(TOKEN_COMMA); } + advance(); - if(is_type()) { + if(is_current_type()) { /* get return slot */ - fn->secondary_type = token_type_to_sym_type(parser->previous.type); - /* now parse the fn body */ + fn->secondary_type = token_type_to_sym_type(parser->current.type); + advance(); } expect(TOKEN_LBRACE); @@ -574,9 +584,9 @@ variable(void) Symbol *sym = scope_get_symbol(parser->current_scope, parser->previous.start, parser->previous.length); if(sym == nil) { - return; emitter->error(parser->previous.start, parser->previous.length, parser->previous.line); + return; } if(sym->type == SYMBOL_FUNCTION) { @@ -833,7 +843,9 @@ while_statement(void) void block(void) { - while(!check(TOKEN_RBRACE) && !check(TOKEN_EOF)) declaration(); + while(!check(TOKEN_RBRACE) && !check(TOKEN_EOF)) { + declaration(); + } consume(TOKEN_RBRACE); } @@ -847,7 +859,8 @@ function(void) scope_push(); while(!check(TOKEN_RPAREN)) advance(); consume(TOKEN_RPAREN); - consume(TOKEN_LBRACE); + if (is_current_type()) advance(); + expect(TOKEN_LBRACE); block(); emitter->emit_arena_fn_return(arena, code); } diff --git a/emit/uxn/emit.c b/emit/uxn/emit.c index c7b62d7..3e48b8f 100644 --- a/emit/uxn/emit.c +++ b/emit/uxn/emit.c @@ -46,526 +46,136 @@ enum uxn_opcode { JMI = 0x40, JSI = 0x60, }; + char emit_uxn_lib_undar_tal[] = { - 0x40, 0x73, 0x65, 0x78, 0x74, 0x0a, 0x20, 0x20, 0x23, 0x38, 0x30, 0x20, - 0x41, 0x4e, 0x44, 0x6b, 0x20, 0x45, 0x51, 0x55, 0x20, 0x23, 0x66, 0x66, - 0x20, 0x4d, 0x55, 0x4c, 0x20, 0x53, 0x57, 0x50, 0x20, 0x4a, 0x4d, 0x50, - 0x32, 0x72, 0x0a, 0x40, 0x73, 0x64, 0x69, 0x76, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x4f, 0x56, 0x52, 0x20, 0x23, 0x38, 0x30, 0x20, 0x41, 0x4e, 0x44, - 0x20, 0x3f, 0x26, 0x62, 0x5f, 0x6e, 0x65, 0x67, 0x20, 0x20, 0x26, 0x62, - 0x5f, 0x70, 0x6f, 0x73, 0x20, 0x20, 0x20, 0x20, 0x4f, 0x56, 0x52, 0x32, - 0x20, 0x50, 0x4f, 0x50, 0x20, 0x23, 0x38, 0x30, 0x20, 0x41, 0x4e, 0x44, - 0x20, 0x3f, 0x26, 0x61, 0x5f, 0x6e, 0x65, 0x67, 0x5f, 0x62, 0x5f, 0x70, - 0x6f, 0x73, 0x20, 0x20, 0x20, 0x20, 0x44, 0x49, 0x56, 0x32, 0x20, 0x4a, - 0x4d, 0x50, 0x32, 0x72, 0x20, 0x20, 0x26, 0x61, 0x5f, 0x6e, 0x65, 0x67, - 0x5f, 0x62, 0x5f, 0x70, 0x6f, 0x73, 0x20, 0x20, 0x20, 0x20, 0x53, 0x57, - 0x50, 0x32, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x20, 0x53, 0x57, 0x50, - 0x32, 0x20, 0x53, 0x55, 0x42, 0x32, 0x20, 0x53, 0x57, 0x50, 0x32, 0x20, - 0x44, 0x49, 0x56, 0x32, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x20, 0x53, - 0x57, 0x50, 0x32, 0x20, 0x53, 0x55, 0x42, 0x32, 0x20, 0x4a, 0x4d, 0x50, - 0x32, 0x72, 0x0a, 0x20, 0x20, 0x26, 0x62, 0x5f, 0x6e, 0x65, 0x67, 0x20, - 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x20, 0x53, 0x57, 0x50, - 0x32, 0x20, 0x53, 0x55, 0x42, 0x32, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x20, - 0x50, 0x4f, 0x50, 0x20, 0x23, 0x38, 0x30, 0x20, 0x41, 0x4e, 0x44, 0x20, - 0x3f, 0x26, 0x61, 0x5f, 0x6e, 0x65, 0x67, 0x5f, 0x62, 0x5f, 0x6e, 0x65, - 0x67, 0x20, 0x20, 0x20, 0x20, 0x44, 0x49, 0x56, 0x32, 0x20, 0x23, 0x30, - 0x30, 0x30, 0x30, 0x20, 0x53, 0x57, 0x50, 0x32, 0x20, 0x53, 0x55, 0x42, - 0x32, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x20, 0x20, 0x26, 0x61, - 0x5f, 0x6e, 0x65, 0x67, 0x5f, 0x62, 0x5f, 0x6e, 0x65, 0x67, 0x20, 0x20, - 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x20, 0x52, 0x4f, 0x54, 0x32, - 0x20, 0x53, 0x55, 0x42, 0x32, 0x20, 0x53, 0x57, 0x50, 0x32, 0x20, 0x44, - 0x49, 0x56, 0x32, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40, - 0x61, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x5f, 0x20, 0x28, 0x20, 0x73, 0x69, - 0x7a, 0x65, 0x2a, 0x20, 0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f, 0x56, 0x52, - 0x32, 0x72, 0x20, 0x4c, 0x49, 0x54, 0x32, 0x72, 0x20, 0x30, 0x30, 0x30, - 0x34, 0x20, 0x53, 0x55, 0x42, 0x32, 0x72, 0x20, 0x53, 0x54, 0x48, 0x32, - 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, - 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3b, 0x6d, - 0x65, 0x6d, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5f, 0x20, 0x4c, - 0x44, 0x41, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x53, - 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3b, 0x6d, 0x65, 0x6d, - 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5f, 0x20, 0x4c, 0x44, 0x41, - 0x32, 0x6b, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, - 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, - 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53, 0x57, 0x50, 0x32, 0x20, 0x53, - 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3b, 0x6d, 0x65, 0x6d, - 0x5f, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, - 0x32, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x21, 0x26, 0x72, 0x65, 0x74, - 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, - 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32, 0x72, 0x20, 0x4a, - 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40, 0x61, 0x72, 0x65, 0x74, 0x75, - 0x72, 0x6e, 0x5f, 0x20, 0x28, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x2a, 0x20, - 0x73, 0x72, 0x63, 0x2a, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x2a, 0x20, 0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f, 0x56, - 0x52, 0x32, 0x72, 0x20, 0x4c, 0x49, 0x54, 0x32, 0x72, 0x20, 0x30, 0x30, - 0x30, 0x61, 0x20, 0x53, 0x55, 0x42, 0x32, 0x72, 0x20, 0x53, 0x54, 0x48, - 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x38, 0x20, 0x41, 0x44, - 0x44, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x36, - 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, - 0x30, 0x30, 0x34, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53, 0x54, 0x41, - 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3b, 0x6d, 0x65, 0x6d, 0x5f, 0x20, - 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x38, - 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x41, - 0x44, 0x44, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, - 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x53, 0x54, 0x41, - 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, - 0x20, 0x23, 0x30, 0x30, 0x30, 0x36, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, - 0x4c, 0x44, 0x41, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, - 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, - 0x41, 0x32, 0x20, 0x4e, 0x45, 0x51, 0x32, 0x20, 0x3f, 0x26, 0x65, 0x6e, - 0x64, 0x2e, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, - 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x36, 0x20, 0x41, 0x44, 0x44, - 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x21, 0x26, 0x72, 0x65, 0x74, - 0x75, 0x72, 0x6e, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x65, 0x6e, 0x64, 0x2e, - 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x20, - 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, - 0x0a, 0x20, 0x20, 0x26, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x2e, 0x32, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, - 0x44, 0x41, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, - 0x30, 0x30, 0x30, 0x34, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x4c, 0x44, - 0x41, 0x32, 0x20, 0x4c, 0x54, 0x48, 0x32, 0x20, 0x23, 0x30, 0x30, 0x20, - 0x45, 0x51, 0x55, 0x20, 0x3f, 0x26, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x2e, - 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, - 0x20, 0x23, 0x30, 0x30, 0x30, 0x36, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, - 0x4c, 0x44, 0x41, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, - 0x4c, 0x44, 0x41, 0x32, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x4c, 0x44, - 0x41, 0x20, 0x73, 0x65, 0x78, 0x74, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, - 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, - 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x53, 0x54, 0x48, - 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x41, 0x44, 0x44, - 0x32, 0x20, 0x53, 0x54, 0x41, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, - 0x50, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, - 0x75, 0x65, 0x2e, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, - 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x6b, 0x20, 0x49, 0x4e, - 0x43, 0x32, 0x6b, 0x20, 0x52, 0x4f, 0x54, 0x32, 0x20, 0x53, 0x54, 0x41, - 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32, 0x20, 0x21, - 0x26, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x2e, 0x32, 0x0a, 0x0a, 0x20, 0x20, - 0x26, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x2e, 0x32, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, - 0x38, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, - 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x34, - 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x41, - 0x44, 0x44, 0x32, 0x20, 0x3b, 0x6d, 0x65, 0x6d, 0x5f, 0x6c, 0x65, 0x6e, - 0x67, 0x74, 0x68, 0x5f, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x20, 0x3b, 0x6d, 0x65, 0x6d, - 0x5f, 0x20, 0x3b, 0x6d, 0x65, 0x6d, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, - 0x68, 0x5f, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x41, 0x44, 0x44, 0x32, - 0x20, 0x53, 0x54, 0x41, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, - 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, - 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x21, - 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x23, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, 0x65, - 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, - 0x32, 0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40, 0x61, - 0x66, 0x72, 0x65, 0x65, 0x5f, 0x20, 0x28, 0x20, 0x2d, 0x2d, 0x20, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x4f, 0x56, 0x52, 0x32, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, - 0x20, 0x3b, 0x6d, 0x65, 0x6d, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, - 0x5f, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, - 0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, 0x65, 0x74, - 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32, - 0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40, 0x61, 0x6d, - 0x63, 0x70, 0x79, 0x5f, 0x20, 0x28, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, - 0x68, 0x2a, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x2a, 0x20, 0x2d, 0x2d, 0x20, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x72, 0x20, 0x4c, 0x49, 0x54, 0x32, - 0x72, 0x20, 0x30, 0x30, 0x30, 0x38, 0x20, 0x53, 0x55, 0x42, 0x32, 0x72, - 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, - 0x36, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, - 0x30, 0x30, 0x30, 0x34, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53, 0x54, - 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, - 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x34, 0x20, 0x41, 0x44, 0x44, 0x32, - 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x61, 0x61, 0x6c, 0x6c, 0x6f, 0x63, - 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, - 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x53, - 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, - 0x30, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x53, 0x54, 0x41, - 0x32, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x2e, - 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, - 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, - 0x20, 0x23, 0x30, 0x30, 0x30, 0x34, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, - 0x4c, 0x44, 0x41, 0x32, 0x20, 0x4c, 0x54, 0x48, 0x32, 0x20, 0x23, 0x30, - 0x30, 0x20, 0x45, 0x51, 0x55, 0x20, 0x3f, 0x26, 0x62, 0x72, 0x65, 0x61, - 0x6b, 0x2e, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, - 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x36, 0x20, 0x41, 0x44, 0x44, - 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, - 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, - 0x4c, 0x44, 0x41, 0x20, 0x73, 0x65, 0x78, 0x74, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, - 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x53, - 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x41, - 0x44, 0x44, 0x32, 0x20, 0x53, 0x54, 0x41, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x50, 0x4f, 0x50, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x63, 0x6f, 0x6e, 0x74, - 0x69, 0x6e, 0x75, 0x65, 0x2e, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, - 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x6b, 0x20, - 0x49, 0x4e, 0x43, 0x32, 0x6b, 0x20, 0x52, 0x4f, 0x54, 0x32, 0x20, 0x53, - 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32, - 0x20, 0x21, 0x26, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x2e, 0x31, 0x0a, 0x0a, - 0x20, 0x20, 0x26, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x2e, 0x31, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, - 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, - 0x20, 0x21, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, - 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, - 0x4f, 0x50, 0x32, 0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, - 0x40, 0x6e, 0x61, 0x74, 0x5f, 0x74, 0x6f, 0x5f, 0x73, 0x74, 0x72, 0x5f, - 0x20, 0x28, 0x20, 0x6e, 0x2a, 0x20, 0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f, - 0x56, 0x52, 0x32, 0x72, 0x20, 0x4c, 0x49, 0x54, 0x32, 0x72, 0x20, 0x30, - 0x30, 0x30, 0x61, 0x20, 0x53, 0x55, 0x42, 0x32, 0x72, 0x20, 0x53, 0x54, - 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x38, 0x20, 0x41, - 0x44, 0x44, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x23, 0x30, 0x30, 0x30, 0x35, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, - 0x72, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x62, - 0x65, 0x67, 0x69, 0x6e, 0x2e, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, - 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x38, 0x20, - 0x41, 0x44, 0x44, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x23, 0x30, - 0x30, 0x30, 0x61, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x20, 0x4f, 0x56, 0x52, - 0x32, 0x20, 0x44, 0x49, 0x56, 0x32, 0x20, 0x4d, 0x55, 0x4c, 0x32, 0x20, - 0x53, 0x55, 0x42, 0x32, 0x20, 0x23, 0x30, 0x30, 0x33, 0x30, 0x20, 0x41, - 0x44, 0x44, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, - 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x53, 0x54, 0x48, - 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x6b, 0x20, 0x23, 0x30, - 0x30, 0x30, 0x31, 0x20, 0x53, 0x55, 0x42, 0x32, 0x20, 0x53, 0x57, 0x50, - 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x6b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x50, 0x4f, 0x50, 0x32, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53, 0x54, - 0x41, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x20, 0x53, 0x54, - 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x38, 0x20, 0x41, - 0x44, 0x44, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x6b, 0x20, 0x23, 0x30, - 0x30, 0x30, 0x61, 0x20, 0x44, 0x49, 0x56, 0x32, 0x20, 0x53, 0x57, 0x50, - 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x63, - 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x2e, 0x31, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x20, 0x53, 0x54, 0x48, 0x32, - 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x38, 0x20, 0x41, 0x44, 0x44, - 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x4c, 0x54, 0x48, 0x32, 0x20, - 0x3f, 0x26, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x2e, 0x31, 0x0a, 0x0a, 0x20, - 0x20, 0x26, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x2e, 0x31, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x35, 0x20, 0x53, 0x54, 0x48, 0x32, - 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x53, 0x55, 0x42, 0x32, - 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, - 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, - 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x61, - 0x6d, 0x63, 0x70, 0x79, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x21, 0x26, - 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, - 0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, 0x65, 0x74, - 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32, - 0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40, 0x69, 0x6e, - 0x74, 0x5f, 0x74, 0x6f, 0x5f, 0x73, 0x74, 0x72, 0x5f, 0x20, 0x28, 0x20, - 0x6e, 0x2a, 0x20, 0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f, 0x56, 0x52, 0x32, - 0x72, 0x20, 0x4c, 0x49, 0x54, 0x32, 0x72, 0x20, 0x30, 0x30, 0x30, 0x63, - 0x20, 0x53, 0x55, 0x42, 0x32, 0x72, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, - 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x61, 0x20, 0x41, 0x44, 0x44, 0x32, - 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, - 0x30, 0x30, 0x36, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, - 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x53, 0x54, 0x41, - 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, - 0x20, 0x23, 0x30, 0x30, 0x30, 0x61, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, - 0x4c, 0x44, 0x41, 0x32, 0x20, 0x23, 0x38, 0x30, 0x30, 0x30, 0x20, 0x45, - 0x4f, 0x52, 0x32, 0x20, 0x23, 0x38, 0x30, 0x30, 0x30, 0x20, 0x4c, 0x54, - 0x48, 0x32, 0x20, 0x23, 0x30, 0x30, 0x20, 0x53, 0x57, 0x50, 0x20, 0x23, - 0x30, 0x30, 0x30, 0x30, 0x20, 0x4e, 0x45, 0x51, 0x32, 0x20, 0x23, 0x30, - 0x30, 0x20, 0x53, 0x57, 0x50, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, - 0x20, 0x53, 0x54, 0x41, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, - 0x20, 0x4c, 0x44, 0x41, 0x6b, 0x72, 0x20, 0x53, 0x54, 0x48, 0x72, 0x20, - 0x73, 0x65, 0x78, 0x74, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, - 0x30, 0x30, 0x20, 0x45, 0x51, 0x55, 0x32, 0x20, 0x3f, 0x26, 0x65, 0x6e, - 0x64, 0x2e, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, - 0x30, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, - 0x30, 0x61, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, - 0x20, 0x53, 0x55, 0x42, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, - 0x20, 0x23, 0x30, 0x30, 0x30, 0x61, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, - 0x53, 0x54, 0x41, 0x32, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x65, 0x6e, 0x64, - 0x2e, 0x31, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x62, 0x65, 0x67, 0x69, 0x6e, - 0x2e, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, - 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x61, 0x20, 0x41, 0x44, 0x44, 0x32, - 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x23, 0x30, 0x30, 0x30, 0x61, 0x20, - 0x4f, 0x56, 0x52, 0x32, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x20, 0x73, 0x64, - 0x69, 0x76, 0x2f, 0x62, 0x5f, 0x70, 0x6f, 0x73, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x4d, 0x55, 0x4c, 0x32, 0x20, 0x53, 0x55, 0x42, 0x32, 0x20, 0x23, - 0x30, 0x30, 0x33, 0x30, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53, 0x54, - 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x34, 0x20, 0x41, - 0x44, 0x44, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, - 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, - 0x32, 0x6b, 0x20, 0x23, 0x30, 0x30, 0x30, 0x31, 0x20, 0x53, 0x55, 0x42, - 0x32, 0x20, 0x53, 0x57, 0x50, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x6b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32, 0x20, 0x41, 0x44, - 0x44, 0x32, 0x20, 0x53, 0x54, 0x41, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, - 0x4f, 0x50, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, - 0x30, 0x30, 0x61, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x4c, 0x44, 0x41, - 0x32, 0x6b, 0x20, 0x23, 0x30, 0x30, 0x30, 0x61, 0x20, 0x73, 0x64, 0x69, - 0x76, 0x2f, 0x62, 0x5f, 0x70, 0x6f, 0x73, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x53, 0x57, 0x50, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x0a, 0x20, - 0x20, 0x26, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x2e, 0x32, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x38, 0x30, 0x30, 0x30, 0x20, 0x53, - 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x61, 0x20, - 0x41, 0x44, 0x44, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x23, 0x38, - 0x30, 0x30, 0x30, 0x20, 0x45, 0x4f, 0x52, 0x32, 0x20, 0x4c, 0x54, 0x48, - 0x32, 0x20, 0x3f, 0x26, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x2e, 0x32, 0x0a, - 0x0a, 0x20, 0x20, 0x26, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x2e, 0x32, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x4c, 0x44, 0x41, 0x6b, 0x72, 0x20, 0x53, 0x54, - 0x48, 0x72, 0x20, 0x73, 0x65, 0x78, 0x74, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x23, 0x30, 0x30, 0x30, 0x30, 0x20, 0x45, 0x51, 0x55, 0x32, 0x20, 0x3f, - 0x26, 0x65, 0x6e, 0x64, 0x2e, 0x33, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, - 0x30, 0x30, 0x32, 0x64, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, - 0x23, 0x30, 0x30, 0x30, 0x34, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53, - 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, - 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x6b, 0x20, 0x23, 0x30, - 0x30, 0x30, 0x31, 0x20, 0x53, 0x55, 0x42, 0x32, 0x20, 0x53, 0x57, 0x50, - 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x6b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x50, 0x4f, 0x50, 0x32, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53, 0x54, - 0x41, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x0a, 0x0a, 0x20, - 0x20, 0x26, 0x65, 0x6e, 0x64, 0x2e, 0x33, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x23, 0x30, 0x30, 0x30, 0x36, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, - 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, - 0x44, 0x41, 0x32, 0x20, 0x53, 0x55, 0x42, 0x32, 0x20, 0x53, 0x54, 0x48, - 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x34, 0x20, 0x41, 0x44, - 0x44, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, - 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, - 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x61, 0x6d, 0x63, 0x70, 0x79, 0x5f, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x21, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, - 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x0a, - 0x0a, 0x20, 0x20, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32, 0x72, 0x20, 0x4a, 0x4d, 0x50, - 0x32, 0x72, 0x0a, 0x0a, 0x40, 0x69, 0x6e, 0x74, 0x5f, 0x74, 0x6f, 0x5f, - 0x6e, 0x61, 0x74, 0x5f, 0x20, 0x28, 0x20, 0x6e, 0x2a, 0x20, 0x2d, 0x2d, - 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x72, 0x20, 0x4c, 0x49, 0x54, - 0x32, 0x72, 0x20, 0x30, 0x30, 0x30, 0x32, 0x20, 0x53, 0x55, 0x42, 0x32, - 0x72, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x53, 0x54, 0x41, - 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, - 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x21, 0x26, 0x72, 0x65, 0x74, 0x75, - 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, - 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32, 0x72, 0x20, 0x4a, 0x4d, - 0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40, 0x6e, 0x61, 0x74, 0x5f, 0x74, 0x6f, - 0x5f, 0x69, 0x6e, 0x74, 0x5f, 0x20, 0x28, 0x20, 0x6e, 0x2a, 0x20, 0x2d, - 0x2d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x72, 0x20, 0x4c, 0x49, - 0x54, 0x32, 0x72, 0x20, 0x30, 0x30, 0x30, 0x32, 0x20, 0x53, 0x55, 0x42, - 0x32, 0x72, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x53, 0x54, - 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, - 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x21, 0x26, 0x72, 0x65, 0x74, - 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, - 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32, 0x72, 0x20, 0x4a, - 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40, 0x69, 0x6e, 0x74, 0x5f, 0x61, - 0x64, 0x64, 0x5f, 0x20, 0x28, 0x20, 0x62, 0x2a, 0x20, 0x61, 0x2a, 0x20, - 0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x72, 0x20, 0x4c, - 0x49, 0x54, 0x32, 0x72, 0x20, 0x30, 0x30, 0x30, 0x34, 0x20, 0x53, 0x55, - 0x42, 0x32, 0x72, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, - 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x53, 0x54, 0x41, - 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, - 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, - 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, - 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, - 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x41, 0x44, 0x44, 0x32, - 0x20, 0x21, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, - 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, - 0x4f, 0x50, 0x32, 0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, - 0x40, 0x69, 0x6e, 0x74, 0x5f, 0x73, 0x75, 0x62, 0x5f, 0x20, 0x28, 0x20, - 0x62, 0x2a, 0x20, 0x61, 0x2a, 0x20, 0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f, - 0x56, 0x52, 0x32, 0x72, 0x20, 0x4c, 0x49, 0x54, 0x32, 0x72, 0x20, 0x30, - 0x30, 0x30, 0x34, 0x20, 0x53, 0x55, 0x42, 0x32, 0x72, 0x20, 0x53, 0x54, - 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, - 0x43, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, - 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, - 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, - 0x32, 0x20, 0x53, 0x55, 0x42, 0x32, 0x20, 0x21, 0x26, 0x72, 0x65, 0x74, - 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, - 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32, 0x72, 0x20, 0x4a, - 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40, 0x69, 0x6e, 0x74, 0x5f, 0x6d, - 0x75, 0x6c, 0x5f, 0x20, 0x28, 0x20, 0x62, 0x2a, 0x20, 0x61, 0x2a, 0x20, - 0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x72, 0x20, 0x4c, - 0x49, 0x54, 0x32, 0x72, 0x20, 0x30, 0x30, 0x30, 0x34, 0x20, 0x53, 0x55, - 0x42, 0x32, 0x72, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, - 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x53, 0x54, 0x41, - 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, - 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, - 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, - 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, - 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x4d, 0x55, 0x4c, 0x32, - 0x20, 0x21, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, - 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, - 0x4f, 0x50, 0x32, 0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, - 0x40, 0x69, 0x6e, 0x74, 0x5f, 0x64, 0x69, 0x76, 0x5f, 0x20, 0x28, 0x20, - 0x62, 0x2a, 0x20, 0x61, 0x2a, 0x20, 0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f, - 0x56, 0x52, 0x32, 0x72, 0x20, 0x4c, 0x49, 0x54, 0x32, 0x72, 0x20, 0x30, - 0x30, 0x30, 0x34, 0x20, 0x53, 0x55, 0x42, 0x32, 0x72, 0x20, 0x53, 0x54, - 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, - 0x43, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, - 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, - 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, - 0x32, 0x20, 0x73, 0x64, 0x69, 0x76, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x21, - 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x23, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, 0x65, - 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, - 0x32, 0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40, 0x69, - 0x6e, 0x74, 0x5f, 0x65, 0x71, 0x5f, 0x20, 0x28, 0x20, 0x62, 0x2a, 0x20, - 0x61, 0x2a, 0x20, 0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f, 0x56, 0x52, 0x32, - 0x72, 0x20, 0x4c, 0x49, 0x54, 0x32, 0x72, 0x20, 0x30, 0x30, 0x30, 0x34, - 0x20, 0x53, 0x55, 0x42, 0x32, 0x72, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, - 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, - 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, - 0x32, 0x6b, 0x72, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, - 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x53, - 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x45, - 0x51, 0x55, 0x32, 0x20, 0x23, 0x30, 0x30, 0x20, 0x53, 0x57, 0x50, 0x20, - 0x21, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, - 0x50, 0x32, 0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40, - 0x69, 0x6e, 0x74, 0x5f, 0x6e, 0x65, 0x5f, 0x20, 0x28, 0x20, 0x62, 0x2a, - 0x20, 0x61, 0x2a, 0x20, 0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f, 0x56, 0x52, - 0x32, 0x72, 0x20, 0x4c, 0x49, 0x54, 0x32, 0x72, 0x20, 0x30, 0x30, 0x30, - 0x34, 0x20, 0x53, 0x55, 0x42, 0x32, 0x72, 0x20, 0x53, 0x54, 0x48, 0x32, - 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, - 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, - 0x48, 0x32, 0x6b, 0x72, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, - 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, - 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, - 0x4e, 0x45, 0x51, 0x32, 0x20, 0x23, 0x30, 0x30, 0x20, 0x53, 0x57, 0x50, - 0x20, 0x21, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, - 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, - 0x4f, 0x50, 0x32, 0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, - 0x40, 0x69, 0x6e, 0x74, 0x5f, 0x6c, 0x74, 0x5f, 0x20, 0x28, 0x20, 0x62, - 0x2a, 0x20, 0x61, 0x2a, 0x20, 0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f, 0x56, - 0x52, 0x32, 0x72, 0x20, 0x4c, 0x49, 0x54, 0x32, 0x72, 0x20, 0x30, 0x30, - 0x30, 0x34, 0x20, 0x53, 0x55, 0x42, 0x32, 0x72, 0x20, 0x53, 0x54, 0x48, - 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, - 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, - 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, - 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, - 0x20, 0x23, 0x38, 0x30, 0x30, 0x30, 0x20, 0x45, 0x4f, 0x52, 0x32, 0x20, - 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, - 0x23, 0x38, 0x30, 0x30, 0x30, 0x20, 0x45, 0x4f, 0x52, 0x32, 0x20, 0x4c, - 0x54, 0x48, 0x32, 0x20, 0x23, 0x30, 0x30, 0x20, 0x53, 0x57, 0x50, 0x20, - 0x21, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, - 0x50, 0x32, 0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40, - 0x69, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x5f, 0x20, 0x28, 0x20, 0x62, 0x2a, - 0x20, 0x61, 0x2a, 0x20, 0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f, 0x56, 0x52, - 0x32, 0x72, 0x20, 0x4c, 0x49, 0x54, 0x32, 0x72, 0x20, 0x30, 0x30, 0x30, - 0x34, 0x20, 0x53, 0x55, 0x42, 0x32, 0x72, 0x20, 0x53, 0x54, 0x48, 0x32, - 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, - 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, - 0x48, 0x32, 0x6b, 0x72, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, - 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, - 0x23, 0x38, 0x30, 0x30, 0x30, 0x20, 0x45, 0x4f, 0x52, 0x32, 0x20, 0x53, - 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x23, - 0x38, 0x30, 0x30, 0x30, 0x20, 0x45, 0x4f, 0x52, 0x32, 0x20, 0x47, 0x54, - 0x48, 0x32, 0x20, 0x23, 0x30, 0x30, 0x20, 0x53, 0x57, 0x50, 0x20, 0x23, - 0x30, 0x31, 0x20, 0x45, 0x4f, 0x52, 0x20, 0x21, 0x26, 0x72, 0x65, 0x74, - 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, - 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32, 0x72, 0x20, 0x4a, - 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40, 0x69, 0x6e, 0x74, 0x5f, 0x67, - 0x74, 0x5f, 0x20, 0x28, 0x20, 0x62, 0x2a, 0x20, 0x61, 0x2a, 0x20, 0x2d, - 0x2d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x72, 0x20, 0x4c, 0x49, - 0x54, 0x32, 0x72, 0x20, 0x30, 0x30, 0x30, 0x34, 0x20, 0x53, 0x55, 0x42, - 0x32, 0x72, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, - 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, - 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, - 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x23, 0x38, 0x30, - 0x30, 0x30, 0x20, 0x45, 0x4f, 0x52, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, - 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, - 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x23, 0x38, 0x30, 0x30, 0x30, 0x20, - 0x45, 0x4f, 0x52, 0x32, 0x20, 0x4c, 0x54, 0x48, 0x32, 0x20, 0x23, 0x30, - 0x30, 0x20, 0x53, 0x57, 0x50, 0x20, 0x21, 0x26, 0x72, 0x65, 0x74, 0x75, - 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, - 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32, 0x72, 0x20, 0x4a, 0x4d, - 0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40, 0x69, 0x6e, 0x74, 0x5f, 0x67, 0x65, - 0x5f, 0x20, 0x28, 0x20, 0x62, 0x2a, 0x20, 0x61, 0x2a, 0x20, 0x2d, 0x2d, - 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x72, 0x20, 0x4c, 0x49, 0x54, - 0x32, 0x72, 0x20, 0x30, 0x30, 0x30, 0x34, 0x20, 0x53, 0x55, 0x42, 0x32, - 0x72, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, - 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x53, - 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, - 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x23, 0x38, 0x30, 0x30, - 0x30, 0x20, 0x45, 0x4f, 0x52, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, - 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, - 0x4c, 0x44, 0x41, 0x32, 0x20, 0x23, 0x38, 0x30, 0x30, 0x30, 0x20, 0x45, - 0x4f, 0x52, 0x32, 0x20, 0x47, 0x54, 0x48, 0x32, 0x20, 0x23, 0x30, 0x30, - 0x20, 0x53, 0x57, 0x50, 0x20, 0x23, 0x30, 0x31, 0x20, 0x45, 0x4f, 0x52, - 0x20, 0x21, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, - 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, - 0x4f, 0x50, 0x32, 0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, - 0x40, 0x69, 0x6e, 0x74, 0x5f, 0x6e, 0x65, 0x67, 0x5f, 0x20, 0x28, 0x20, - 0x66, 0x2a, 0x20, 0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f, 0x56, 0x52, 0x32, - 0x72, 0x20, 0x4c, 0x49, 0x54, 0x32, 0x72, 0x20, 0x30, 0x30, 0x30, 0x32, - 0x20, 0x53, 0x55, 0x42, 0x32, 0x72, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, - 0x72, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, - 0x30, 0x30, 0x30, 0x30, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, - 0x4c, 0x44, 0x41, 0x32, 0x20, 0x53, 0x55, 0x42, 0x32, 0x20, 0x21, 0x26, - 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, - 0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, 0x65, 0x74, - 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32, - 0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40, 0x69, 0x6e, - 0x74, 0x5f, 0x61, 0x62, 0x73, 0x5f, 0x20, 0x28, 0x20, 0x66, 0x2a, 0x20, - 0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x72, 0x20, 0x4c, - 0x49, 0x54, 0x32, 0x72, 0x20, 0x30, 0x30, 0x30, 0x32, 0x20, 0x53, 0x55, - 0x42, 0x32, 0x72, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x53, - 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, - 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x23, 0x38, 0x30, 0x30, - 0x30, 0x20, 0x45, 0x4f, 0x52, 0x32, 0x20, 0x23, 0x38, 0x30, 0x30, 0x30, - 0x20, 0x4c, 0x54, 0x48, 0x32, 0x20, 0x3f, 0x26, 0x74, 0x68, 0x65, 0x6e, - 0x2e, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, - 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x21, 0x26, 0x65, 0x6e, 0x64, - 0x2e, 0x31, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x74, 0x68, 0x65, 0x6e, 0x2e, - 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x20, - 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, - 0x53, 0x55, 0x42, 0x32, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x65, 0x6e, 0x64, - 0x2e, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x21, 0x26, 0x72, 0x65, 0x74, - 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, - 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32, 0x72, 0x20, 0x4a, - 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x40, 0x73, - 0x74, 0x72, 0x2f, 0x3c, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x3e, 0x20, 0x28, - 0x20, 0x73, 0x74, 0x72, 0x2a, 0x20, 0x2d, 0x2d, 0x20, 0x29, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x4c, 0x44, 0x41, 0x6b, 0x20, 0x44, 0x55, 0x50, 0x20, - 0x3f, 0x7b, 0x20, 0x50, 0x4f, 0x50, 0x20, 0x50, 0x4f, 0x50, 0x32, 0x20, - 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x23, 0x31, 0x38, 0x20, 0x44, 0x45, 0x4f, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x49, 0x4e, 0x43, 0x32, 0x20, 0x21, 0x2f, 0x3c, 0x70, 0x72, 0x69, 0x6e, - 0x74, 0x3e, 0x0a, 0x0a, 0x40, 0x6d, 0x65, 0x6d, 0x5f, 0x6c, 0x65, 0x6e, - 0x67, 0x74, 0x68, 0x5f, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x40, - 0x6d, 0x65, 0x6d, 0x5f, 0x20, 0x20, 0x20, 0x20}; -unsigned int emit_uxn_lib_undar_tal_len = 6212; + 0x40, 0x73, 0x65, 0x78, 0x74, 0x0a, 0x20, 0x20, 0x23, 0x38, 0x30, 0x20, + 0x41, 0x4e, 0x44, 0x6b, 0x20, 0x45, 0x51, 0x55, 0x20, 0x23, 0x66, 0x66, + 0x20, 0x4d, 0x55, 0x4c, 0x20, 0x53, 0x57, 0x50, 0x20, 0x4a, 0x4d, 0x50, + 0x32, 0x72, 0x0a, 0x0a, 0x40, 0x61, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x5f, + 0x20, 0x28, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x2a, 0x20, 0x2d, 0x2d, 0x20, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x72, 0x20, 0x4c, 0x49, 0x54, 0x32, + 0x72, 0x20, 0x30, 0x30, 0x30, 0x34, 0x20, 0x53, 0x55, 0x42, 0x32, 0x72, + 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, + 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x3b, 0x6d, 0x65, 0x6d, 0x5f, 0x6c, 0x65, 0x6e, 0x67, + 0x74, 0x68, 0x5f, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x53, 0x54, 0x48, + 0x32, 0x6b, 0x72, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x3b, 0x6d, 0x65, 0x6d, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x5f, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x6b, 0x20, 0x53, 0x54, 0x48, 0x32, + 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, + 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53, + 0x57, 0x50, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x3b, 0x6d, 0x65, 0x6d, 0x5f, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, + 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, + 0x21, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, + 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, + 0x50, 0x32, 0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40, + 0x61, 0x66, 0x72, 0x65, 0x65, 0x5f, 0x20, 0x28, 0x20, 0x2d, 0x2d, 0x20, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, + 0x30, 0x20, 0x3b, 0x6d, 0x65, 0x6d, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, + 0x68, 0x5f, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x23, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, 0x65, + 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, + 0x32, 0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40, 0x61, + 0x6d, 0x63, 0x70, 0x79, 0x5f, 0x20, 0x28, 0x20, 0x6c, 0x65, 0x6e, 0x67, + 0x74, 0x68, 0x2a, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x2a, 0x20, 0x2d, 0x2d, + 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x72, 0x20, 0x4c, 0x49, 0x54, + 0x32, 0x72, 0x20, 0x30, 0x30, 0x30, 0x38, 0x20, 0x53, 0x55, 0x42, 0x32, + 0x72, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, + 0x30, 0x36, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, + 0x23, 0x30, 0x30, 0x30, 0x34, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53, + 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, + 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x34, 0x20, 0x41, 0x44, 0x44, + 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x61, 0x61, 0x6c, 0x6c, 0x6f, + 0x63, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, + 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, + 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, + 0x30, 0x30, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x53, 0x54, + 0x41, 0x32, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x62, 0x65, 0x67, 0x69, 0x6e, + 0x2e, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, + 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, + 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x34, 0x20, 0x41, 0x44, 0x44, 0x32, + 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x4c, 0x54, 0x48, 0x32, 0x20, 0x23, + 0x30, 0x30, 0x20, 0x45, 0x51, 0x55, 0x20, 0x3f, 0x26, 0x62, 0x72, 0x65, + 0x61, 0x6b, 0x2e, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, + 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x36, 0x20, 0x41, 0x44, + 0x44, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, + 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x41, 0x44, 0x44, 0x32, + 0x20, 0x4c, 0x44, 0x41, 0x20, 0x73, 0x65, 0x78, 0x74, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, + 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, + 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, + 0x41, 0x44, 0x44, 0x32, 0x20, 0x53, 0x54, 0x41, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x50, 0x4f, 0x50, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x63, 0x6f, 0x6e, + 0x74, 0x69, 0x6e, 0x75, 0x65, 0x2e, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x6b, + 0x20, 0x49, 0x4e, 0x43, 0x32, 0x6b, 0x20, 0x52, 0x4f, 0x54, 0x32, 0x20, + 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, + 0x32, 0x20, 0x21, 0x26, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x2e, 0x31, 0x0a, + 0x0a, 0x20, 0x20, 0x26, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x2e, 0x31, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, + 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, + 0x32, 0x20, 0x21, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, + 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x50, 0x4f, 0x50, 0x32, 0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, + 0x0a, 0x40, 0x6e, 0x61, 0x74, 0x5f, 0x74, 0x6f, 0x5f, 0x73, 0x74, 0x72, + 0x5f, 0x20, 0x28, 0x20, 0x6e, 0x2a, 0x20, 0x2d, 0x2d, 0x20, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x4f, 0x56, 0x52, 0x32, 0x72, 0x20, 0x4c, 0x49, 0x54, 0x32, 0x72, 0x20, + 0x30, 0x30, 0x30, 0x61, 0x20, 0x53, 0x55, 0x42, 0x32, 0x72, 0x20, 0x53, + 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x38, 0x20, + 0x41, 0x44, 0x44, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x35, 0x20, 0x53, 0x54, 0x48, 0x32, + 0x6b, 0x72, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x0a, 0x20, 0x20, 0x26, + 0x62, 0x65, 0x67, 0x69, 0x6e, 0x2e, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x38, + 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x23, + 0x30, 0x30, 0x30, 0x61, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x20, 0x4f, 0x56, + 0x52, 0x32, 0x20, 0x44, 0x49, 0x56, 0x32, 0x20, 0x4d, 0x55, 0x4c, 0x32, + 0x20, 0x53, 0x55, 0x42, 0x32, 0x20, 0x23, 0x30, 0x30, 0x33, 0x30, 0x20, + 0x41, 0x44, 0x44, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, + 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x53, 0x54, + 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x6b, 0x20, 0x23, + 0x30, 0x30, 0x30, 0x31, 0x20, 0x53, 0x55, 0x42, 0x32, 0x20, 0x53, 0x57, + 0x50, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x6b, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x50, 0x4f, 0x50, 0x32, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53, + 0x54, 0x41, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x20, 0x53, + 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x38, 0x20, + 0x41, 0x44, 0x44, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x6b, 0x20, 0x23, + 0x30, 0x30, 0x30, 0x61, 0x20, 0x44, 0x49, 0x56, 0x32, 0x20, 0x53, 0x57, + 0x50, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x0a, 0x20, 0x20, 0x26, + 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x2e, 0x31, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x20, 0x53, 0x54, 0x48, + 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x38, 0x20, 0x41, 0x44, + 0x44, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x4c, 0x54, 0x48, 0x32, + 0x20, 0x3f, 0x26, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x2e, 0x31, 0x0a, 0x0a, + 0x20, 0x20, 0x26, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x2e, 0x31, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x35, 0x20, 0x53, 0x54, 0x48, + 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x53, 0x55, 0x42, + 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, + 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, + 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, + 0x61, 0x6d, 0x63, 0x70, 0x79, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x21, + 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x23, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, 0x65, + 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, + 0x32, 0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x0a, 0x40, 0x73, 0x74, 0x72, 0x2f, 0x3c, 0x70, 0x72, 0x69, 0x6e, + 0x74, 0x3e, 0x20, 0x28, 0x20, 0x73, 0x74, 0x72, 0x2a, 0x20, 0x2d, 0x2d, + 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x44, 0x41, 0x6b, 0x20, + 0x44, 0x55, 0x50, 0x20, 0x3f, 0x7b, 0x20, 0x50, 0x4f, 0x50, 0x20, 0x50, + 0x4f, 0x50, 0x32, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x20, 0x7d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x23, 0x31, 0x38, 0x20, 0x44, 0x45, 0x4f, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x21, 0x2f, 0x3c, + 0x70, 0x72, 0x69, 0x6e, 0x74, 0x3e, 0x0a +}; +unsigned int emit_uxn_lib_undar_tal_len = 1507; void uxn_emit_error(const char *str, i32 length, i32 line) diff --git a/emit/uxn/lib/undar.c b/emit/uxn/lib/undar.c index e9bddb8..2570ebe 100644 --- a/emit/uxn/lib/undar.c +++ b/emit/uxn/lib/undar.c @@ -11,22 +11,6 @@ aalloc(unsigned size) return (char *)&mem[pos]; } -char * -areturn(unsigned checkpoint, char *src, unsigned size) -{ - char *dest = (char *)&mem[checkpoint]; - if(src == dest) return src; - - for (unsigned i = 0; i < size; i++) { - dest[i] = src[i]; - } - - mem_length = checkpoint + size; - /* zero out the end of the memory copy (for strings mostly) */ - mem[mem_length] = 0; - return dest; -} - void afree() { @@ -53,93 +37,4 @@ char* nat_to_str(unsigned n) { } while(n > 0); return amcpy(buffer + i, 5 - i); -} - -char* int_to_str(int n) { - char buffer[6]; - unsigned i = 6; - _Bool neg = n < 0; - - if (neg) n = -n; - - do { - buffer[--i] = '0' + n % 10; - n /= 10; - } while(n > 0); - if(neg) buffer[--i] = '-'; - - return amcpy(buffer + i, 6 - i); -} - -unsigned -int_to_nat(int n) -{ - return (unsigned)n; -} - -int -nat_to_int(unsigned n) -{ - return (int)n; -} - -int -int_add(int a, int b) -{ - return a + b; -} -int -int_sub(int a, int b) -{ - return a - b; -} -int -int_mul(int a, int b) -{ - return a * b; -} -int -int_div(int a, int b) -{ - return a / b; -} -int -int_eq(int a, int b) -{ - return a == b; -} -int -int_ne(int a, int b) -{ - return a != b; -} -int -int_lt(int a, int b) -{ - return a < b; -} -int -int_le(int a, int b) -{ - return a <= b; -} -int -int_gt(int a, int b) -{ - return a > b; -} -int -int_ge(int a, int b) -{ - return a >= b; -} -int -int_neg(int f) -{ - return -f; -} -int -int_abs(int f) -{ - return (f < 0) ? -f : f; } \ No newline at end of file diff --git a/emit/uxn/lib/undar.tal b/emit/uxn/lib/undar.tal index 2d85a48..2f21faf 100644 --- a/emit/uxn/lib/undar.tal +++ b/emit/uxn/lib/undar.tal @@ -1,9 +1,5 @@ @sext #80 ANDk EQU #ff MUL SWP JMP2r -@sdiv - OVR #80 AND ?&b_neg &b_pos OVR2 POP #80 AND ?&a_neg_b_pos DIV2 JMP2r &a_neg_b_pos SWP2 #0000 SWP2 SUB2 SWP2 DIV2 #0000 SWP2 SUB2 JMP2r - &b_neg #0000 SWP2 SUB2 OVR2 POP #80 AND ?&a_neg_b_neg DIV2 #0000 SWP2 SUB2 JMP2r - &a_neg_b_neg #0000 ROT2 SUB2 SWP2 DIV2 JMP2r @aalloc_ ( size* -- result* ) OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2 @@ -15,36 +11,6 @@ &return POP2r JMP2r -@areturn_ ( size* src* checkpoint* -- result* ) - OVR2r LIT2r 000a SUB2r STH2kr #0008 ADD2 STA2 - STH2kr #0006 ADD2 STA2 - STH2kr #0004 ADD2 STA2 - ;mem_ STH2kr #0008 ADD2 LDA2 ADD2 STH2kr INC2 INC2 STA2 - STH2kr #0006 ADD2 LDA2 STH2kr INC2 INC2 LDA2 NEQ2 ?&end.1 - STH2kr #0006 ADD2 LDA2 !&return - - &end.1 - #0000 STH2kr STA2 - - &begin.2 - STH2kr LDA2 STH2kr #0004 ADD2 LDA2 LTH2 #00 EQU ?&break.2 - STH2kr #0006 ADD2 LDA2 STH2kr LDA2 ADD2 LDA sext - STH2kr INC2 INC2 LDA2 STH2kr LDA2 ADD2 STA - POP - - &continue.2 - STH2kr LDA2k INC2k ROT2 STA2 - POP2 !&begin.2 - - &break.2 - STH2kr #0008 ADD2 LDA2 STH2kr #0004 ADD2 LDA2 ADD2 ;mem_length_ STA2 - #0000 ;mem_ ;mem_length_ LDA2 ADD2 STA - POP STH2kr INC2 INC2 LDA2 !&return - #0000 - - &return - POP2r JMP2r - @afree_ ( -- result* ) OVR2r #0000 ;mem_length_ STA2 #0000 @@ -95,176 +61,8 @@ &return POP2r JMP2r - -@int_to_str_ ( n* -- result* ) - OVR2r LIT2r 000c SUB2r STH2kr #000a ADD2 STA2 - #0006 STH2kr INC2 INC2 STA2 - STH2kr #000a ADD2 LDA2 #8000 EOR2 #8000 LTH2 #00 SWP #0000 NEQ2 #00 SWP STH2kr STA - POP LDAkr STHr sext - #0000 EQU2 ?&end.1 - #0000 STH2kr #000a ADD2 LDA2 SUB2 STH2kr #000a ADD2 STA2 - - &end.1 - - &begin.2 - STH2kr #000a ADD2 LDA2 #000a OVR2 OVR2 sdiv/b_pos - MUL2 SUB2 #0030 ADD2 STH2kr #0004 ADD2 STH2kr INC2 INC2 LDA2k #0001 SUB2 SWP2 STA2k - POP2 ADD2 STA - POP STH2kr #000a ADD2 LDA2k #000a sdiv/b_pos - SWP2 STA2 - - &continue.2 - #8000 STH2kr #000a ADD2 LDA2 #8000 EOR2 LTH2 ?&begin.2 - - &break.2 - LDAkr STHr sext - #0000 EQU2 ?&end.3 - #002d STH2kr #0004 ADD2 STH2kr INC2 INC2 LDA2k #0001 SUB2 SWP2 STA2k - POP2 ADD2 STA - POP - - &end.3 - #0006 STH2kr INC2 INC2 LDA2 SUB2 STH2kr #0004 ADD2 STH2kr INC2 INC2 LDA2 ADD2 amcpy_ - !&return - #0000 - - &return - POP2r JMP2r - -@int_to_nat_ ( n* -- result* ) - OVR2r LIT2r 0002 SUB2r STH2kr STA2 - STH2kr LDA2 !&return - #0000 - - &return - POP2r JMP2r - -@nat_to_int_ ( n* -- result* ) - OVR2r LIT2r 0002 SUB2r STH2kr STA2 - STH2kr LDA2 !&return - #0000 - - &return - POP2r JMP2r - -@int_add_ ( b* a* -- result* ) - OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2 - STH2kr STA2 - STH2kr INC2 INC2 LDA2 STH2kr LDA2 ADD2 !&return - #0000 - - &return - POP2r JMP2r - -@int_sub_ ( b* a* -- result* ) - OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2 - STH2kr STA2 - STH2kr INC2 INC2 LDA2 STH2kr LDA2 SUB2 !&return - #0000 - - &return - POP2r JMP2r - -@int_mul_ ( b* a* -- result* ) - OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2 - STH2kr STA2 - STH2kr INC2 INC2 LDA2 STH2kr LDA2 MUL2 !&return - #0000 - - &return - POP2r JMP2r - -@int_div_ ( b* a* -- result* ) - OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2 - STH2kr STA2 - STH2kr INC2 INC2 LDA2 STH2kr LDA2 sdiv - !&return - #0000 - - &return - POP2r JMP2r - -@int_eq_ ( b* a* -- result* ) - OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2 - STH2kr STA2 - STH2kr INC2 INC2 LDA2 STH2kr LDA2 EQU2 #00 SWP !&return - #0000 - - &return - POP2r JMP2r - -@int_ne_ ( b* a* -- result* ) - OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2 - STH2kr STA2 - STH2kr INC2 INC2 LDA2 STH2kr LDA2 NEQ2 #00 SWP !&return - #0000 - - &return - POP2r JMP2r - -@int_lt_ ( b* a* -- result* ) - OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2 - STH2kr STA2 - STH2kr INC2 INC2 LDA2 #8000 EOR2 STH2kr LDA2 #8000 EOR2 LTH2 #00 SWP !&return - #0000 - - &return - POP2r JMP2r - -@int_le_ ( b* a* -- result* ) - OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2 - STH2kr STA2 - STH2kr INC2 INC2 LDA2 #8000 EOR2 STH2kr LDA2 #8000 EOR2 GTH2 #00 SWP #01 EOR !&return - #0000 - - &return - POP2r JMP2r - -@int_gt_ ( b* a* -- result* ) - OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2 - STH2kr STA2 - STH2kr LDA2 #8000 EOR2 STH2kr INC2 INC2 LDA2 #8000 EOR2 LTH2 #00 SWP !&return - #0000 - - &return - POP2r JMP2r - -@int_ge_ ( b* a* -- result* ) - OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2 - STH2kr STA2 - STH2kr LDA2 #8000 EOR2 STH2kr INC2 INC2 LDA2 #8000 EOR2 GTH2 #00 SWP #01 EOR !&return - #0000 - - &return - POP2r JMP2r - -@int_neg_ ( f* -- result* ) - OVR2r LIT2r 0002 SUB2r STH2kr STA2 - #0000 STH2kr LDA2 SUB2 !&return - #0000 - - &return - POP2r JMP2r - -@int_abs_ ( f* -- result* ) - OVR2r LIT2r 0002 SUB2r STH2kr STA2 - STH2kr LDA2 #8000 EOR2 #8000 LTH2 ?&then.1 - STH2kr LDA2 !&end.1 - - &then.1 - #0000 STH2kr LDA2 SUB2 - - &end.1 - !&return - #0000 - - &return - POP2r JMP2r @str/ ( str* -- ) LDAk DUP ?{ POP POP2 JMP2r } #18 DEO INC2 !/ - -@mem_length_ #0000 -@mem_ \ No newline at end of file diff --git a/test/bf.ul b/test/bf.ul index 789e21e..ef0ad0d 100644 --- a/test/bf.ul +++ b/test/bf.ul @@ -14,57 +14,53 @@ // //Console console = devmap(0x10, Console); -byte[10000] memory; str code = "++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++."; -bf(code); -halt; +byte[10000] memory; -function bf(str code) -{ - nat mp; // memory pointer - nat ip = 0; // instruction pointer - while (ip < code.length) { - if (ip > code.length) { return; } - if (mp > memory.length) { return; } - if (code[ip] == '>') { - mp = mp + 1; - } else if (code[ip] == '<') { - mp = mp - 1; - } else if (code[ip] == '+') { - memory[mp] = memory[mp] + 1; - } else if (code[ip] == '-') { - memory[mp] = memory[mp] - 1; - } else if (code[ip] == '.') { - // console.write = memory[mp]; - write = memory[mp]; - } else if (code[ip] == ',') { - // memory[mp] = console.read; - memory[mp] = read; - } else if (code[ip] == '[') { - if(!memory[mp]) { - nat nc = 1; - while (nc > 0) { - ip = ip + 1; - if (code[ip] == '[') { - nc = nc + 1; - } else if (code[ip] == ']') { - nc = nc - 1; - } - } - } - } else if (code[ip] == ']') { - if (memory[mp]) { - nat nc = 1; - while (nc > 0) { - ip = ip - 1; - if (code[ip] == ']') { - nc = nc + 1; - } else if (code[ip] == '[') { - nc = nc - 1; - } - } - } - } - ip = ip + 1; - } +nat mp = 0; // memory pointer +nat ip = 0; // instruction pointer + +while (ip < code.length) { + if (code[ip] == '>') { + mp = mp + 1; + } else if (code[ip] == '<') { + mp = mp - 1; + } else if (code[ip] == '+') { + memory[mp] = memory[mp] + 1; + } else if (code[ip] == '-') { + memory[mp] = memory[mp] - 1; + } else if (code[ip] == '.') { + // console.write = memory[mp]; + write = memory[mp]; + } else if (code[ip] == ',') { + // memory[mp] = console.read; + memory[mp] = read; + } else if (code[ip] == '[') { + if(!memory[mp]) { + nat nc = 1; + while (nc > 0) { + ip = ip + 1; + if (code[ip] == '[') { + nc = nc + 1; + } else if (code[ip] == ']') { + nc = nc - 1; + } + } + } + } else if (code[ip] == ']') { + if (memory[mp]) { + nat nc = 1; + while (nc > 0) { + ip = ip - 1; + if (code[ip] == ']') { + nc = nc + 1; + } else if (code[ip] == '[') { + nc = nc - 1; + } + } + } + } + ip = ip + 1; } + +halt;