// File: /workspace/github_c_makefile_star2_O0/6851-2021[P]euler_tour_tree/splay_tree.c
// Function: augment_node
void augment_node(Node* node) {
    Node* left = node->left;
    Node* right = node-> right;

    #ifdef SUBTREE_MIN
    node->augments.min = INF;
    #endif
    #ifdef SUBTREE_MAX
    node->augments.max = -INF;
    #endif
    #ifdef SUBTREE_SUM
    node->augments.sum = 0;
    #endif
    #ifdef SUBTREE_SIZE
    node->augments.size = 0;
    #endif
#
    if (node->is_start) {
        #ifdef SUBTREE_MIN
        node->augments.min = node->value;
        #endif
        #ifdef SUBTREE_MAX
        node->augments.max = node->value;
        #endif
        #ifdef SUBTREE_SUM
        node->augments.sum = node->value;
        #endif
        #ifdef SUBTREE_SIZE
        node->augments.size = 1;
        #endif
    }

    if (left != NULL) {
        #ifdef SUBTREE_MIN
        node->augments.min = MIN(left->augments.min, node->augments.min);
        #endif
        #ifdef SUBTREE_MAX
        node->augments.max = MAX(left->augments.max, node->augments.max);
        #endif
        #ifdef SUBTREE_SUM
        node->augments.sum += left->augments.sum;
        #endif
        #ifdef SUBTREE_SIZE
        node->augments.size += left->augments.size;
        #endif
    }
    if (right != NULL) {
        #ifdef SUBTREE_MIN
        node->augments.min = MIN(right->augments.min, node->augments.min);
        #endif
        #ifdef SUBTREE_MAX
        node->augments.max = MAX(right->augments.max, node->augments.max);
        #endif
        #ifdef SUBTREE_SUM
        node->augments.sum += right->augments.sum;
        #endif
        #ifdef SUBTREE_SIZE
        node->augments.size += right->augments.size;
        #endif
    }
}

// Assembly:
movq %rdi, -0x8(%rsp)
movq -0x8(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x10(%rsp)
movq -0x8(%rsp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x18(%rsp)
movq -0x8(%rsp), %rax
movabsq $0x3782dace9d900000, %rcx # imm = 0x3782DACE9D900000
movq %rcx, 0x30(%rax)
movq -0x8(%rsp), %rax
movabsq $-0x3782dace9d900000, %rcx # imm = 0xC87D253162700000
movq %rcx, 0x38(%rax)
movq -0x8(%rsp), %rax
movq $0x0, 0x40(%rax)
movq -0x8(%rsp), %rax
movq $0x0, 0x48(%rax)
movq -0x8(%rsp), %rax
cmpl $0x0, 0x28(%rax)
je 0x125f
movq -0x8(%rsp), %rax
movq 0x20(%rax), %rcx
movq -0x8(%rsp), %rax
movq %rcx, 0x30(%rax)
movq -0x8(%rsp), %rax
movq 0x20(%rax), %rcx
movq -0x8(%rsp), %rax
movq %rcx, 0x38(%rax)
movq -0x8(%rsp), %rax
movq 0x20(%rax), %rcx
movq -0x8(%rsp), %rax
movq %rcx, 0x40(%rax)
movq -0x8(%rsp), %rax
movq $0x1, 0x48(%rax)
cmpq $0x0, -0x10(%rsp)
je 0x1317
movq -0x10(%rsp), %rax
movq 0x30(%rax), %rax
movq -0x8(%rsp), %rcx
cmpq 0x30(%rcx), %rax
jge 0x128f
movq -0x10(%rsp), %rax
movq 0x30(%rax), %rax
movq %rax, -0x20(%rsp)
jmp 0x129d
movq -0x8(%rsp), %rax
movq 0x30(%rax), %rax
movq %rax, -0x20(%rsp)
movq -0x20(%rsp), %rcx
movq -0x8(%rsp), %rax
movq %rcx, 0x30(%rax)
movq -0x10(%rsp), %rax
movq 0x38(%rax), %rax
movq -0x8(%rsp), %rcx
cmpq 0x38(%rcx), %rax
jle 0x12cf
movq -0x10(%rsp), %rax
movq 0x38(%rax), %rax
movq %rax, -0x28(%rsp)
jmp 0x12dd
movq -0x8(%rsp), %rax
movq 0x38(%rax), %rax
movq %rax, -0x28(%rsp)
movq -0x28(%rsp), %rcx
movq -0x8(%rsp), %rax
movq %rcx, 0x38(%rax)
movq -0x10(%rsp), %rax
movq 0x40(%rax), %rcx
movq -0x8(%rsp), %rax
addq 0x40(%rax), %rcx
movq %rcx, 0x40(%rax)
movq -0x10(%rsp), %rax
movq 0x48(%rax), %rcx
movq -0x8(%rsp), %rax
addq 0x48(%rax), %rcx
movq %rcx, 0x48(%rax)
cmpq $0x0, -0x18(%rsp)
je 0x13cf
movq -0x18(%rsp), %rax
movq 0x30(%rax), %rax
movq -0x8(%rsp), %rcx
cmpq 0x30(%rcx), %rax
jge 0x1347
movq -0x18(%rsp), %rax
movq 0x30(%rax), %rax
movq %rax, -0x30(%rsp)
jmp 0x1355
movq -0x8(%rsp), %rax
movq 0x30(%rax), %rax
movq %rax, -0x30(%rsp)
movq -0x30(%rsp), %rcx
movq -0x8(%rsp), %rax
movq %rcx, 0x30(%rax)
movq -0x18(%rsp), %rax
movq 0x38(%rax), %rax
movq -0x8(%rsp), %rcx
cmpq 0x38(%rcx), %rax
jle 0x1387
movq -0x18(%rsp), %rax
movq 0x38(%rax), %rax
movq %rax, -0x38(%rsp)
jmp 0x1395
movq -0x8(%rsp), %rax
movq 0x38(%rax), %rax
movq %rax, -0x38(%rsp)
movq -0x38(%rsp), %rcx
movq -0x8(%rsp), %rax
movq %rcx, 0x38(%rax)
movq -0x18(%rsp), %rax
movq 0x40(%rax), %rcx
movq -0x8(%rsp), %rax
addq 0x40(%rax), %rcx
movq %rcx, 0x40(%rax)
movq -0x18(%rsp), %rax
movq 0x48(%rax), %rcx
movq -0x8(%rsp), %rax
addq 0x48(%rax), %rcx
movq %rcx, 0x48(%rax)
retq