// File: myudelson[P]hmm-scalable/HMMProblemSt.cpp
// Function: HMMProblemSt::toFileGroup(char const*)
void HMMProblemSt::toFileGroup(const char *filename) {
    NPAR nS = this->task->nS, nO = this->task->nO;
    NCAT nG = this->task->nG;
	FILE *fid = fopen(filename,"w");
	if(fid == NULL) {
		fprintf(stderr,"Can't write output model file %s\n",filename);
		exit(1);
	}
    
    // write solved id
    writeSolverInfo(fid, this->task);
    
	fprintf(fid,"Null skill ratios\t");
	for(NPAR m=0; m<nO; m++)
		fprintf(fid," %10.7f%s",this->null_obs_ratios[m],(m==(nO-1))?"\n":"\t");
	NCAT g;
	std::map<NCAT,std::string>::iterator it;
	for(g=0;g<nG;g++) {
		it = this->task->map_group_bwd->find(g);
		fprintf(fid,"%d\t%s\n",g,it->second.c_str());
		NPAR i,j,m;
        fprintf(fid,"PI\t");
        for(i=0; i<=nS; i++)
            fprintf(fid,"%12.10f%s",this->param_skill[PI(g,i)],(i==(nS-1))?"\n":"\t");
        fprintf(fid,"A\t");
        for(i=0; i<=nS; i++)
            for(j=0; j<=nS; j++)
                fprintf(fid,"%12.10f%s",this->param_skill[A(g,i,j)],(i==(nS-1) && j==(nS-1))?"\n":"\t");
        fprintf(fid,"B\t");
        for(i=0; i<=nS; i++)
            for(m=0; m<=nO; m++)
                fprintf(fid,"%12.10f%s",this->param_skill[B(g,i,m)],(i==(nS-1) && m==(nO-1))?"\n":"\t");
	}
	fclose(fid);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xd0, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x48(%rbp)
movq 0x68(%rax), %rcx
movb 0x900(%rcx), %cl
movb %cl, -0x11(%rbp)
movq 0x68(%rax), %rcx
movb 0x901(%rcx), %cl
movb %cl, -0x12(%rbp)
movq 0x68(%rax), %rax
movl 0x904(%rax), %eax
movl %eax, -0x18(%rbp)
movq -0x10(%rbp), %rdi
leaq 0x7955(%rip), %rsi      # 0x1c332
callq 0x3310
movq %rax, -0x20(%rbp)
cmpq $0x0, -0x20(%rbp)
jne 0x14a13
movq 0xd5e4(%rip), %rax      # 0x21fd8
movq (%rax), %rdi
movq -0x10(%rbp), %rdx
leaq 0x7932(%rip), %rsi      # 0x1c334
movb $0x0, %al
callq 0x33c0
movl $0x1, %edi
callq 0x3330
movq -0x48(%rbp), %rax
movq -0x20(%rbp), %rdi
movq 0x68(%rax), %rsi
callq 0x9790
movq -0x20(%rbp), %rdi
leaq 0x7927(%rip), %rsi      # 0x1c356
movb $0x0, %al
callq 0x33c0
movb $0x0, -0x21(%rbp)
movsbl -0x21(%rbp), %eax
movsbl -0x12(%rbp), %ecx
cmpl %ecx, %eax
jge 0x14ab3
movq -0x48(%rbp), %rax
movq -0x20(%rbp), %rcx
movq %rcx, -0x58(%rbp)
movq 0x10(%rax), %rax
movsbq -0x21(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movsd %xmm0, -0x50(%rbp)
movsbl -0x21(%rbp), %eax
movsbl -0x12(%rbp), %ecx
subl $0x1, %ecx
cmpl %ecx, %eax
jne 0x14a81
leaq 0x6f1f(%rip), %rax      # 0x1b99a
movq %rax, -0x60(%rbp)
jmp 0x14a8e
leaq 0x7901(%rip), %rax      # 0x1c389
movq %rax, -0x60(%rbp)
jmp 0x14a8e
movsd -0x50(%rbp), %xmm0
movq -0x58(%rbp), %rdi
movq -0x60(%rbp), %rdx
leaq 0x78c7(%rip), %rsi      # 0x1c369
movb $0x1, %al
callq 0x33c0
movb -0x21(%rbp), %al
addb $0x1, %al
movb %al, -0x21(%rbp)
jmp 0x14a3a
leaq -0x30(%rbp), %rdi
callq 0xf7b0
movl $0x0, -0x28(%rbp)
movl -0x28(%rbp), %eax
cmpl -0x18(%rbp), %eax
jge 0x14df1
movq -0x48(%rbp), %rax
movq 0x68(%rax), %rax
movq 0x930(%rax), %rdi
leaq -0x28(%rbp), %rsi
callq 0x195e0
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x70(%rbp)
movl -0x28(%rbp), %eax
movl %eax, -0x64(%rbp)
leaq -0x30(%rbp), %rdi
callq 0xf860
movq %rax, %rdi
addq $0x8, %rdi
callq 0x3100
movq -0x70(%rbp), %rdi
movl -0x64(%rbp), %edx
movq %rax, %rcx
leaq 0x784c(%rip), %rsi      # 0x1c373
movb $0x0, %al
callq 0x33c0
movq -0x20(%rbp), %rdi
leaq 0x7841(%rip), %rsi      # 0x1c37a
movb $0x0, %al
callq 0x33c0
movb $0x0, -0x39(%rbp)
movsbl -0x39(%rbp), %eax
movsbl -0x11(%rbp), %ecx
cmpl %ecx, %eax
jg 0x14be7
movq -0x48(%rbp), %rdi
movq -0x20(%rbp), %rax
movq %rax, -0x88(%rbp)
movq 0x28(%rdi), %rax
movq %rax, -0x80(%rbp)
movl -0x28(%rbp), %esi
movsbl -0x39(%rbp), %edx
callq 0x11e40
movl %eax, %ecx
movq -0x80(%rbp), %rax
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm0
movsd %xmm0, -0x78(%rbp)
movsbl -0x39(%rbp), %eax
movsbl -0x11(%rbp), %ecx
subl $0x1, %ecx
cmpl %ecx, %eax
jne 0x14ba9
leaq 0x6dfa(%rip), %rax      # 0x1b99a
movq %rax, -0x90(%rbp)
jmp 0x14bb9
leaq 0x77d9(%rip), %rax      # 0x1c389
movq %rax, -0x90(%rbp)
jmp 0x14bb9
movsd -0x78(%rbp), %xmm0
movq -0x88(%rbp), %rdi
movq -0x90(%rbp), %rdx
leaq 0x77ab(%rip), %rsi      # 0x1c37e
movb $0x1, %al
callq 0x33c0
movb -0x39(%rbp), %al
addb $0x1, %al
movb %al, -0x39(%rbp)
jmp 0x14b44
movq -0x20(%rbp), %rdi
leaq 0x7796(%rip), %rsi      # 0x1c388
movb $0x0, %al
callq 0x33c0
movb $0x0, -0x39(%rbp)
movsbl -0x39(%rbp), %eax
movsbl -0x11(%rbp), %ecx
cmpl %ecx, %eax
jg 0x14ce4
movb $0x0, -0x3a(%rbp)
movsbl -0x3a(%rbp), %eax
movsbl -0x11(%rbp), %ecx
cmpl %ecx, %eax
jg 0x14cd5
movq -0x48(%rbp), %rdi
movq -0x20(%rbp), %rax
movq %rax, -0xa8(%rbp)
movq 0x28(%rdi), %rax
movq %rax, -0xa0(%rbp)
movl -0x28(%rbp), %esi
movb -0x39(%rbp), %al
movsbl %al, %edx
movsbl -0x3a(%rbp), %ecx
callq 0x11e70
movl %eax, %ecx
movq -0xa0(%rbp), %rax
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm0
movsd %xmm0, -0x98(%rbp)
movsbl -0x39(%rbp), %eax
movsbl -0x11(%rbp), %ecx
subl $0x1, %ecx
cmpl %ecx, %eax
jne 0x14c94
movsbl -0x3a(%rbp), %eax
movsbl -0x11(%rbp), %ecx
subl $0x1, %ecx
cmpl %ecx, %eax
jne 0x14c94
leaq 0x6d0f(%rip), %rax      # 0x1b99a
movq %rax, -0xb0(%rbp)
jmp 0x14ca4
leaq 0x76ee(%rip), %rax      # 0x1c389
movq %rax, -0xb0(%rbp)
jmp 0x14ca4
movsd -0x98(%rbp), %xmm0
movq -0xa8(%rbp), %rdi
movq -0xb0(%rbp), %rdx
leaq 0x76bd(%rip), %rsi      # 0x1c37e
movb $0x1, %al
callq 0x33c0
movb -0x3a(%rbp), %al
addb $0x1, %al
movb %al, -0x3a(%rbp)
jmp 0x14c11
jmp 0x14cd7
movb -0x39(%rbp), %al
addb $0x1, %al
movb %al, -0x39(%rbp)
jmp 0x14bfd
movq -0x20(%rbp), %rdi
leaq 0x769c(%rip), %rsi      # 0x1c38b
movb $0x0, %al
callq 0x33c0
movb $0x0, -0x39(%rbp)
movsbl -0x39(%rbp), %eax
movsbl -0x11(%rbp), %ecx
cmpl %ecx, %eax
jg 0x14de1
movb $0x0, -0x3b(%rbp)
movsbl -0x3b(%rbp), %eax
movsbl -0x12(%rbp), %ecx
cmpl %ecx, %eax
jg 0x14dd2
movq -0x48(%rbp), %rdi
movq -0x20(%rbp), %rax
movq %rax, -0xc8(%rbp)
movq 0x28(%rdi), %rax
movq %rax, -0xc0(%rbp)
movl -0x28(%rbp), %esi
movb -0x39(%rbp), %al
movsbl %al, %edx
movsbl -0x3b(%rbp), %ecx
callq 0x11ec0
movl %eax, %ecx
movq -0xc0(%rbp), %rax
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm0
movsd %xmm0, -0xb8(%rbp)
movsbl -0x39(%rbp), %eax
movsbl -0x11(%rbp), %ecx
subl $0x1, %ecx
cmpl %ecx, %eax
jne 0x14d91
movsbl -0x3b(%rbp), %eax
movsbl -0x12(%rbp), %ecx
subl $0x1, %ecx
cmpl %ecx, %eax
jne 0x14d91
leaq 0x6c12(%rip), %rax      # 0x1b99a
movq %rax, -0xd0(%rbp)
jmp 0x14da1
leaq 0x75f1(%rip), %rax      # 0x1c389
movq %rax, -0xd0(%rbp)
jmp 0x14da1
movsd -0xb8(%rbp), %xmm0
movq -0xc8(%rbp), %rdi
movq -0xd0(%rbp), %rdx
leaq 0x75c0(%rip), %rsi      # 0x1c37e
movb $0x1, %al
callq 0x33c0
movb -0x3b(%rbp), %al
addb $0x1, %al
movb %al, -0x3b(%rbp)
jmp 0x14d0e
jmp 0x14dd4
movb -0x39(%rbp), %al
addb $0x1, %al
movb %al, -0x39(%rbp)
jmp 0x14cfa
jmp 0x14de3
movl -0x28(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x28(%rbp)
jmp 0x14ac3
movq -0x20(%rbp), %rdi
callq 0x3260
addq $0xd0, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)