<mxfile host="app.diagrams.net" agent="Claude Code">
  <diagram id="free-flow" name="free流程">
    <mxGraphModel dx="2271" dy="1178" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1060" pageHeight="5050" background="light-dark(#ffffff, #121212)" math="0" shadow="0">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />
        <mxCell id="TITLE" parent="1" style="text;html=1;align=center;verticalAlign=middle;fontStyle=1;fontSize=17;" value="free 源码执行流程总览（__libc_free 入口 + _int_free 核心 + systrim 收缩）" vertex="1">
          <mxGeometry height="30" width="960" x="20" as="geometry" />
        </mxCell>
        <mxCell id="NOTET" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontStyle=2;fontColor=#666666;" value="注：free 的核心在 _int_free：fastbin 头插（不合并）、非 fastbin 时校验 + 前后合并 + 入 unsorted / 并 top、大块再 consolidate / 收缩。mmap 块直接 munmap。" vertex="1">
          <mxGeometry height="24" width="1030" x="20" y="30" as="geometry" />
        </mxCell>
        <mxCell id="LF0" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="进入 __libc_free(mem)" vertex="1">
          <mxGeometry height="40" width="300" x="40" y="70" as="geometry" />
        </mxCell>
        <mxCell id="LF1" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="读 __free_hook" vertex="1">
          <mxGeometry height="50" width="300" x="40" y="140" as="geometry" />
        </mxCell>
        <mxCell id="LF2" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="__free_hook != NULL ?" vertex="1">
          <mxGeometry height="70" width="300" x="40" y="230" as="geometry" />
        </mxCell>
        <mxCell id="LF3" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="(*hook)(mem, RETURN_ADDRESS(0))&lt;br&gt;return" vertex="1">
          <mxGeometry height="50" width="300" x="420" y="230" as="geometry" />
        </mxCell>
        <mxCell id="LF4" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="mem == 0 ?&lt;br&gt;（free(0) 无效果）" vertex="1">
          <mxGeometry height="70" width="300" x="40" y="330" as="geometry" />
        </mxCell>
        <mxCell id="LF5" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="return" vertex="1">
          <mxGeometry height="40" width="300" x="420" y="330" as="geometry" />
        </mxCell>
        <mxCell id="LF6" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="p = mem2chunk(mem)" vertex="1">
          <mxGeometry height="50" width="300" x="40" y="430" as="geometry" />
        </mxCell>
        <mxCell id="LF7" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="chunk_is_mmapped(p) ?&lt;br&gt;（mmap 内存单独处理）" vertex="1">
          <mxGeometry height="70" width="300" x="40" y="520" as="geometry" />
        </mxCell>
        <mxCell id="LF8" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="!mp_.no_dyn_threshold 且 p-&gt;size &gt; mmap_threshold&lt;br&gt;且 p-&gt;size &lt;= DEFAULT_MMAP_THRESHOLD_MAX ?&lt;br&gt;（动态调整 mmap / trim 阈值）" vertex="1">
          <mxGeometry height="90" width="300" x="420" y="520" as="geometry" />
        </mxCell>
        <mxCell id="LF9" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="mp_.mmap_threshold = chunksize(p)&lt;br&gt;mp_.trim_threshold = 2 * mmap_threshold" vertex="1">
          <mxGeometry height="60" width="300" x="420" y="660" as="geometry" />
        </mxCell>
        <mxCell id="LF10" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="munmap_chunk(p)&lt;br&gt;return" vertex="1">
          <mxGeometry height="50" width="300" x="420" y="770" as="geometry" />
        </mxCell>
        <mxCell id="LF11" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="ar_ptr = arena_for_chunk(p)" vertex="1">
          <mxGeometry height="50" width="300" x="40" y="640" as="geometry" />
        </mxCell>
        <mxCell id="LF12" parent="1" style="shape=parallelogram;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" value="_int_free(ar_ptr, p, 0)&lt;br&gt;（实际释放，见区块二）" vertex="1">
          <mxGeometry height="60" width="320" x="40" y="740" as="geometry" />
        </mxCell>
        <mxCell id="SEC2" parent="1" style="text;html=1;align=center;verticalAlign=middle;fontStyle=1;fontSize=13;" value="———— 区块二：_int_free（free 核心：fastbin 头插 / 合并 / unsorted）————" vertex="1">
          <mxGeometry height="26" width="1000" x="20" y="850" as="geometry" />
        </mxCell>
        <mxCell id="IF0" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="进入 _int_free(av, p, have_lock=0)" vertex="1">
          <mxGeometry height="40" width="300" x="40" y="890" as="geometry" />
        </mxCell>
        <mxCell id="IF1" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="size = chunksize(p)" vertex="1">
          <mxGeometry height="50" width="300" x="40" y="960" as="geometry" />
        </mxCell>
        <mxCell id="IF2" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="(uintptr_t) p &gt; -size 或 misaligned_chunk(p) ?&lt;br&gt;（指针溢出 / 未对齐）" vertex="1">
          <mxGeometry height="90" width="300" x="40" y="1050" as="geometry" />
        </mxCell>
        <mxCell id="IF3" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" value="errstr = &quot;free(): invalid pointer&quot;&lt;br&gt;goto errout" vertex="1">
          <mxGeometry height="60" width="300" x="420" y="1060" as="geometry" />
        </mxCell>
        <mxCell id="IF4" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="size &lt; MINSIZE 或 !aligned_OK(size) ?" vertex="1">
          <mxGeometry height="80" width="300" x="40" y="1190" as="geometry" />
        </mxCell>
        <mxCell id="IF5" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" value="errstr = &quot;free(): invalid size&quot;&lt;br&gt;goto errout" vertex="1">
          <mxGeometry height="60" width="300" x="420" y="1200" as="geometry" />
        </mxCell>
        <mxCell id="IF6" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="check_inuse_chunk(av, p)" vertex="1">
          <mxGeometry height="50" width="300" x="40" y="1320" as="geometry" />
        </mxCell>
        <mxCell id="IF7" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="size &lt;= get_max_fast() ?&lt;br&gt;（属于 fastbin 范围）" vertex="1">
          <mxGeometry height="80" width="300" x="40" y="1420" as="geometry" />
        </mxCell>
        <mxCell id="IF8" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="nextchunk 的 size 非法 ?&lt;br&gt;（&lt;= 2*SIZE_SZ 或 &gt;= system_mem，&lt;br&gt;检查 system_mem 需加锁）" vertex="1">
          <mxGeometry height="100" width="300" x="420" y="1420" as="geometry" />
        </mxCell>
        <mxCell id="IF9" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" value="errstr = &quot;free(): invalid next size (fast)&quot;&lt;br&gt;goto errout" vertex="1">
          <mxGeometry height="70" width="280" x="740" y="1440" as="geometry" />
        </mxCell>
        <mxCell id="IF10" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="free_perturb(chunk2mem(p), size - 2*SIZE_SZ)&lt;br&gt;set_fastchunks(av)" vertex="1">
          <mxGeometry height="60" width="300" x="420" y="1570" as="geometry" />
        </mxCell>
        <mxCell id="IF11" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="idx = fastbin_index(size)&lt;br&gt;fb = &amp;fastbin(av, idx)&lt;br&gt;old = *fb; old2" vertex="1">
          <mxGeometry height="60" width="300" x="420" y="1670" as="geometry" />
        </mxCell>
        <mxCell id="IF12" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="old == p ?&lt;br&gt;（fastbin double free 检测）" vertex="1">
          <mxGeometry height="70" width="300" x="420" y="1780" as="geometry" />
        </mxCell>
        <mxCell id="IF13" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" value="errstr = &quot;double free or corruption (fasttop)&quot;&lt;br&gt;goto errout" vertex="1">
          <mxGeometry height="70" width="280" x="800" y="1780" as="geometry" />
        </mxCell>
        <mxCell id="IF14" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="p-&gt;fd = old2 = old&lt;br&gt;catomic CAS 头插到 fastbin&lt;br&gt;（失败则回到 double free 检测）" vertex="1">
          <mxGeometry height="70" width="300" x="420" y="1900" as="geometry" />
        </mxCell>
        <mxCell id="IF15" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="have_lock 且 old != NULL 且&lt;br&gt;old_idx != idx ?&lt;br&gt;（fastbin 中块大小不匹配）" vertex="1">
          <mxGeometry height="90" width="300" x="420" y="2030" as="geometry" />
        </mxCell>
        <mxCell id="IF16" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" value="errstr = &quot;invalid fastbin entry (free)&quot;&lt;br&gt;goto errout" vertex="1">
          <mxGeometry height="70" width="280" x="740" y="2040" as="geometry" />
        </mxCell>
        <mxCell id="IF17" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="fastbin 释放完成（头插成功）&lt;br&gt;函数返回" vertex="1">
          <mxGeometry height="60" width="300" x="420" y="2170" as="geometry" />
        </mxCell>
        <mxCell id="IF18" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="非 fastbin：!have_lock 时&lt;br&gt;mutex_lock(&amp;av-&gt;mutex); locked = 1" vertex="1">
          <mxGeometry height="60" width="300" x="40" y="1560" as="geometry" />
        </mxCell>
        <mxCell id="IF19" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="p == av-&gt;top ?&lt;br&gt;（释放 top chunk）" vertex="1">
          <mxGeometry height="80" width="300" x="40" y="1680" as="geometry" />
        </mxCell>
        <mxCell id="IF20" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" value="errstr = &quot;double free or corruption (top)&quot;&lt;br&gt;goto errout" vertex="1">
          <mxGeometry height="70" width="300" x="420" y="1680" as="geometry" />
        </mxCell>
        <mxCell id="IF21" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="contiguous(av) 且 nextchunk &gt;= &lt;br&gt;av-&gt;top + chunksize(av-&gt;top) ?&lt;br&gt;（next 超出 arena 边界）" vertex="1">
          <mxGeometry height="100" width="300" x="40" y="1820" as="geometry" />
        </mxCell>
        <mxCell id="IF22" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" value="errstr = &quot;double free or corruption (out)&quot;&lt;br&gt;goto errout" vertex="1">
          <mxGeometry height="27.5" width="230" x="360" y="1856.25" as="geometry" />
        </mxCell>
        <mxCell id="IF23" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="!prev_inuse(nextchunk) ?&lt;br&gt;（next 也标记空闲，可能 double free）" vertex="1">
          <mxGeometry height="90" width="300" x="40" y="1990" as="geometry" />
        </mxCell>
        <mxCell id="IF24" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" value="errstr = &quot;double free or corruption (!prev)&quot;&lt;br&gt;goto errout" vertex="1">
          <mxGeometry height="70" width="300" x="420" y="2010" as="geometry" />
        </mxCell>
        <mxCell id="IF25" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="nextchunk-&gt;size &lt;= 2*SIZE_SZ 或&lt;br&gt;nextsize &gt;= av-&gt;system_mem ?&lt;br&gt;（next size 非法）" vertex="1">
          <mxGeometry height="100" width="300" x="40" y="2150" as="geometry" />
        </mxCell>
        <mxCell id="IF26" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" value="errstr = &quot;free(): invalid next size (normal)&quot;&lt;br&gt;goto errout" vertex="1">
          <mxGeometry height="70" width="300" x="420" y="2170" as="geometry" />
        </mxCell>
        <mxCell id="IF27" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="free_perturb(chunk2mem(p), size - 2*SIZE_SZ)" vertex="1">
          <mxGeometry height="50" width="300" x="40" y="2320" as="geometry" />
        </mxCell>
        <mxCell id="IF28" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="!prev_inuse(p) ?&lt;br&gt;（前一个 chunk 空闲，向后合并）" vertex="1">
          <mxGeometry height="80" width="300" x="40" y="2420" as="geometry" />
        </mxCell>
        <mxCell id="IF29" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="prevsize = p-&gt;prev_size; size += prevsize&lt;br&gt;p = chunk_at_offset(p, -prevsize)&lt;br&gt;unlink(av, p, bck, fwd)" vertex="1">
          <mxGeometry height="70" width="300" x="420" y="2430" as="geometry" />
        </mxCell>
        <mxCell id="IF30" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="nextchunk != av-&gt;top ?&lt;br&gt;（next 不是 top chunk）" vertex="1">
          <mxGeometry height="80" width="300" x="40" y="2560" as="geometry" />
        </mxCell>
        <mxCell id="IF31" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="!inuse(nextchunk) ?&lt;br&gt;（next 空闲，向前合并）" vertex="1">
          <mxGeometry height="80" width="300" x="420" y="2560" as="geometry" />
        </mxCell>
        <mxCell id="IF32" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="unlink(av, nextchunk, bck, fwd)&lt;br&gt;size += nextsize" vertex="1">
          <mxGeometry height="60" width="300" x="420" y="2710" as="geometry" />
        </mxCell>
        <mxCell id="IF33" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="clear_inuse_bit_at_offset&lt;br&gt;(nextchunk, 0)" vertex="1">
          <mxGeometry height="60" width="280" x="740" y="2710" as="geometry" />
        </mxCell>
        <mxCell id="IF34" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="并入 top chunk：&lt;br&gt;size += nextsize&lt;br&gt;set_head(p, size | PREV_INUSE)&lt;br&gt;av-&gt;top = p; check_chunk(av, p)" vertex="1">
          <mxGeometry height="100" width="280" x="740" y="2700" as="geometry" />
        </mxCell>
        <mxCell id="IF35" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="插入 unsorted bin：&lt;br&gt;bck = unsorted_chunks(av); fwd = bck-&gt;fd" vertex="1">
          <mxGeometry height="60" width="300" x="40" y="2830" as="geometry" />
        </mxCell>
        <mxCell id="IF36" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="fwd-&gt;bk != bck ?&lt;br&gt;（unsorted bin 链表损坏）" vertex="1">
          <mxGeometry height="80" width="300" x="40" y="2940" as="geometry" />
        </mxCell>
        <mxCell id="IF37" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" value="errstr = &quot;free(): corrupted unsorted chunks&quot;&lt;br&gt;goto errout" vertex="1">
          <mxGeometry height="70" width="300" x="420" y="2950" as="geometry" />
        </mxCell>
        <mxCell id="IF38" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="p-&gt;fd = fwd; p-&gt;bk = bck&lt;br&gt;bck-&gt;fd = p; fwd-&gt;bk = p&lt;br&gt;set_head / set_foot; check_free_chunk" vertex="1">
          <mxGeometry height="80" width="300" x="40" y="3070" as="geometry" />
        </mxCell>
        <mxCell id="IF39" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="size &gt;= FASTBIN_CONSOLIDATION_THRESHOLD ?&lt;br&gt;（合并后 &gt; 64KB）" vertex="1">
          <mxGeometry height="80" width="300" x="40" y="3210" as="geometry" />
        </mxCell>
        <mxCell id="IF40" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="have_fastchunks(av) ?&lt;br&gt;（还有 fastbin 空闲块）" vertex="1">
          <mxGeometry height="80" width="300" x="420" y="3210" as="geometry" />
        </mxCell>
        <mxCell id="IF41" parent="1" style="shape=parallelogram;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" value="malloc_consolidate(av)&lt;br&gt;（把 fastbin 合并进 bins/top）" vertex="1">
          <mxGeometry height="26" width="210" x="590" y="3300" as="geometry" />
        </mxCell>
        <mxCell id="IF42" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="av == &amp;main_arena ?&lt;br&gt;（主分配区）" vertex="1">
          <mxGeometry height="80" width="300" x="40" y="3360" as="geometry" />
        </mxCell>
        <mxCell id="IF43" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="chunksize(av-&gt;top) &gt;= mp_.trim_threshold ?&lt;br&gt;（top 超过收缩阈值）" vertex="1">
          <mxGeometry height="90" width="300" x="420" y="3360" as="geometry" />
        </mxCell>
        <mxCell id="IF44" parent="1" style="shape=parallelogram;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" value="systrim(mp_.top_pad, av)&lt;br&gt;（收缩 main_arena 的 heap，见区块三）" vertex="1">
          <mxGeometry height="60" width="300" x="420" y="3520" as="geometry" />
        </mxCell>
        <mxCell id="IF45" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="heap_info *heap = heap_for_ptr(top(av))&lt;br&gt;assert(heap-&gt;ar_ptr == av)&lt;br&gt;heap_trim(heap, mp_.top_pad)&lt;br&gt;（收缩非主分配区 sub_heap）" vertex="1">
          <mxGeometry height="100" width="280" x="820" y="3320" as="geometry" />
        </mxCell>
        <mxCell id="IF46" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="解锁：!have_lock 时&lt;br&gt;assert(locked); mutex_unlock(&amp;av-&gt;mutex)" vertex="1">
          <mxGeometry height="60" width="300" x="40" y="3520" as="geometry" />
        </mxCell>
        <mxCell id="IF_END" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="结束（内存已成功释放）" vertex="1">
          <mxGeometry height="50" width="300" x="40" y="3630" as="geometry" />
        </mxCell>
        <mxCell id="G_ERR" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" value="errout：&lt;br&gt;if (!have_lock &amp;&amp; locked)&lt;br&gt;&amp;nbsp;&amp;nbsp;mutex_unlock(&amp;av-&gt;mutex)&lt;br&gt;malloc_printerr(check_action, errstr, chunk2mem(p), av)&lt;br&gt;return" vertex="1">
          <mxGeometry height="110" width="280" x="740" y="2350" as="geometry" />
        </mxCell>
        <mxCell id="SEC3" parent="1" style="text;html=1;align=center;verticalAlign=middle;fontStyle=1;fontSize=13;" value="———— 区块三：systrim（合并成大块后，收缩 main_arena 的 heap）————" vertex="1">
          <mxGeometry height="26" width="1000" x="20" y="3760" as="geometry" />
        </mxCell>
        <mxCell id="ST0" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="进入 systrim(pad, av)" vertex="1">
          <mxGeometry height="40" width="300" x="40" y="3800" as="geometry" />
        </mxCell>
        <mxCell id="ST1" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="pagesize = dl_pagesize&lt;br&gt;top_size = chunksize(av-&gt;top)&lt;br&gt;top_area = top_size - MINSIZE - 1" vertex="1">
          <mxGeometry height="70" width="300" x="40" y="3870" as="geometry" />
        </mxCell>
        <mxCell id="ST2" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="top_area &lt;= pad ?" vertex="1">
          <mxGeometry height="70" width="300" x="40" y="3990" as="geometry" />
        </mxCell>
        <mxCell id="ST3" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="return 0" vertex="1">
          <mxGeometry height="40" width="300" x="420" y="3990" as="geometry" />
        </mxCell>
        <mxCell id="ST4" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="extra = ALIGN_DOWN(top_area - pad, pagesize)&lt;br&gt;（可释放的最大整数页）" vertex="1">
          <mxGeometry height="60" width="300" x="40" y="4110" as="geometry" />
        </mxCell>
        <mxCell id="ST5" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="extra == 0 ?" vertex="1">
          <mxGeometry height="70" width="300" x="40" y="4220" as="geometry" />
        </mxCell>
        <mxCell id="ST6" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="return 0" vertex="1">
          <mxGeometry height="40" width="300" x="420" y="4220" as="geometry" />
        </mxCell>
        <mxCell id="ST7" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="current_brk = MORECORE(0)&lt;br&gt;（探测当前 brk 位置）" vertex="1">
          <mxGeometry height="60" width="300" x="40" y="4340" as="geometry" />
        </mxCell>
        <mxCell id="ST8" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="current_brk == av-&gt;top + top_size ?&lt;br&gt;（top 末尾与 brk 重合才可收缩）" vertex="1">
          <mxGeometry height="90" width="300" x="40" y="4450" as="geometry" />
        </mxCell>
        <mxCell id="ST9" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="return 0" vertex="1">
          <mxGeometry height="40" width="300" x="420" y="4450" as="geometry" />
        </mxCell>
        <mxCell id="ST10" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="MORECORE(-extra)&lt;br&gt;（sbrk 收缩释放 extra 字节）&lt;br&gt;__after_morecore_hook; LIBC_PROBE&lt;br&gt;new_brk = MORECORE(0)" vertex="1">
          <mxGeometry height="90" width="300" x="40" y="4600" as="geometry" />
        </mxCell>
        <mxCell id="ST11" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="new_brk != MORECORE_FAILURE ?" vertex="1">
          <mxGeometry height="70" width="300" x="40" y="4740" as="geometry" />
        </mxCell>
        <mxCell id="ST12" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="return 0" vertex="1">
          <mxGeometry height="40" width="300" x="420" y="4740" as="geometry" />
        </mxCell>
        <mxCell id="ST13" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="released = current_brk - new_brk" vertex="1">
          <mxGeometry height="50" width="300" x="40" y="4860" as="geometry" />
        </mxCell>
        <mxCell id="ST14" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="released != 0 ?" vertex="1">
          <mxGeometry height="60" width="300" x="40" y="4960" as="geometry" />
        </mxCell>
        <mxCell id="ST15" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="return 0" vertex="1">
          <mxGeometry height="40" width="300" x="420" y="4960" as="geometry" />
        </mxCell>
        <mxCell id="ST16" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="av-&gt;system_mem -= released&lt;br&gt;set_head(av-&gt;top, (top_size - released) | PREV_INUSE)&lt;br&gt;check_malloc_state(av)&lt;br&gt;return 1" vertex="1">
          <mxGeometry height="90" width="320" x="40" y="5080" as="geometry" />
        </mxCell>
        <mxCell id="le1" edge="1" parent="1" source="LF0" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="LF1">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="le2" edge="1" parent="1" source="LF1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="LF2">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="le3" edge="1" parent="1" source="LF2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="LF3" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="le4" edge="1" parent="1" source="LF2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="LF4" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="le5" edge="1" parent="1" source="LF4" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="LF5" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="le6" edge="1" parent="1" source="LF4" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="LF6" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="le7" edge="1" parent="1" source="LF6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="LF7">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="le8" edge="1" parent="1" source="LF7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="LF8" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="le9" edge="1" parent="1" source="LF8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="LF9" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="le10" edge="1" parent="1" source="LF9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="LF10">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="le11" edge="1" parent="1" source="LF8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="LF10" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="le12" edge="1" parent="1" source="LF7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="LF11" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="le13" edge="1" parent="1" source="LF11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="LF12">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie1" edge="1" parent="1" source="IF0" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="IF1">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie2" edge="1" parent="1" source="IF1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="IF2">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie3" edge="1" parent="1" source="IF2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="IF3" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie4" edge="1" parent="1" source="IF2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="IF4" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie5" edge="1" parent="1" source="IF4" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="IF5" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie6" edge="1" parent="1" source="IF4" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="IF6" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie7" edge="1" parent="1" source="IF6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="IF7">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie8" edge="1" parent="1" source="IF7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="IF8" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie9" edge="1" parent="1" source="IF7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="IF18" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie10" edge="1" parent="1" source="IF8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="IF9" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie11" edge="1" parent="1" source="IF8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="IF10" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie12" edge="1" parent="1" source="IF10" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="IF11">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie13" edge="1" parent="1" source="IF11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="IF12">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie14" edge="1" parent="1" source="IF12" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="IF13" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie15" edge="1" parent="1" source="IF12" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="IF14" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie16" edge="1" parent="1" source="IF14" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;dashed=1;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="IF12" value="CAS 失败重试">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="570.07" y="1980.07" />
              <mxPoint x="410.07" y="1980.07" />
              <mxPoint x="410.07" y="1875" />
              <mxPoint x="730.07" y="1875" />
              <mxPoint x="730.07" y="1770.07" />
              <mxPoint x="570.07" y="1770.07" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="ie17" edge="1" parent="1" source="IF14" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="IF15">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie18" edge="1" parent="1" source="IF15" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="IF16" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie19" edge="1" parent="1" source="IF15" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="IF17" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie20" edge="1" parent="1" source="IF18" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="IF19">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie21" edge="1" parent="1" source="IF19" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="IF20" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie22" edge="1" parent="1" source="IF19" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="IF21" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie23" edge="1" parent="1" source="IF21" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="IF22" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie24" edge="1" parent="1" source="IF21" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="IF23" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie25" edge="1" parent="1" source="IF23" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="IF24" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie26" edge="1" parent="1" source="IF23" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="IF25" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie27" edge="1" parent="1" source="IF25" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="IF26" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie28" edge="1" parent="1" source="IF25" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="IF27" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie29" edge="1" parent="1" source="IF27" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="IF28">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie30" edge="1" parent="1" source="IF28" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="IF29" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie31" edge="1" parent="1" source="IF29" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="IF30">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie32" edge="1" parent="1" source="IF28" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="IF30" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie33" edge="1" parent="1" source="IF30" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="IF34" value="是（并入 top）">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie34" edge="1" parent="1" source="IF30" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="IF31" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie35" edge="1" parent="1" source="IF31" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="IF32" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie36" edge="1" parent="1" source="IF31" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="IF33" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie37" edge="1" parent="1" source="IF32" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="IF35">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie38" edge="1" parent="1" source="IF33" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=1;entryY=0.5;" target="IF35">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie39" edge="1" parent="1" source="IF34" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="IF39">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie40" edge="1" parent="1" source="IF35" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="IF36">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie41" edge="1" parent="1" source="IF36" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="IF37" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie42" edge="1" parent="1" source="IF36" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="IF38" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie43" edge="1" parent="1" source="IF38" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="IF39">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie44" edge="1" parent="1" source="IF39" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="IF40" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie45" edge="1" parent="1" source="IF39" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="IF42" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie46" edge="1" parent="1" source="IF40" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=1;entryY=0;fontSize=10;entryDx=0;entryDy=0;" target="IF41" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie47" edge="1" parent="1" source="IF40" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="IF42" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie48" edge="1" parent="1" source="IF41" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="IF42">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie49" edge="1" parent="1" source="IF42" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="IF43" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie50" edge="1" parent="1" source="IF42" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0;fontSize=10;exitDx=0;exitDy=0;" target="IF45" value="否">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="265" y="3370" />
            </Array>
            <mxPoint x="290" y="3385.0000000000005" as="sourcePoint" />
            <mxPoint x="770" y="3355.0000000000005" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="ie51" edge="1" parent="1" source="IF43" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;fontSize=10;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" target="IF44" value="是">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="730" y="3405" />
              <mxPoint x="730" y="3500" />
              <mxPoint x="570" y="3500" />
            </Array>
            <mxPoint x="420" y="3550" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="ie52" edge="1" parent="1" source="IF43" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="IF46" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie53" edge="1" parent="1" source="IF44" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="IF46">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie54" edge="1" parent="1" source="IF45" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="IF46">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie55" edge="1" parent="1" source="IF46" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="IF_END">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie56" edge="1" parent="1" source="IF3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;dashed=1;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="G_ERR" value="goto errout">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie57" edge="1" parent="1" source="IF5" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;dashed=1;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="G_ERR" value="goto errout">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie58" edge="1" parent="1" source="IF9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;dashed=1;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="G_ERR" value="goto errout">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie59" edge="1" parent="1" source="IF13" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;dashed=1;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="G_ERR" value="goto errout">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie60" edge="1" parent="1" source="IF16" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;dashed=1;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="G_ERR" value="goto errout">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie61" edge="1" parent="1" source="IF20" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;dashed=1;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="G_ERR" value="goto errout">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie62" edge="1" parent="1" source="IF22" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;dashed=1;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="G_ERR" value="goto errout">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie63" edge="1" parent="1" source="IF24" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;dashed=1;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="G_ERR" value="goto errout">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie64" edge="1" parent="1" source="IF26" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;dashed=1;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="G_ERR" value="goto errout">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie65" edge="1" parent="1" source="IF37" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;dashed=1;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="G_ERR" value="goto errout">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="se1" edge="1" parent="1" source="ST0" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="ST1">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="se2" edge="1" parent="1" source="ST1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="ST2">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="se3" edge="1" parent="1" source="ST2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="ST3" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="se4" edge="1" parent="1" source="ST2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="ST4" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="se5" edge="1" parent="1" source="ST4" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="ST5">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="se6" edge="1" parent="1" source="ST5" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="ST6" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="se7" edge="1" parent="1" source="ST5" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="ST7" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="se8" edge="1" parent="1" source="ST7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="ST8">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="se9" edge="1" parent="1" source="ST8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="ST10" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="se10" edge="1" parent="1" source="ST8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="ST9" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="se11" edge="1" parent="1" source="ST10" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="ST11">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="se12" edge="1" parent="1" source="ST11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="ST13" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="se13" edge="1" parent="1" source="ST11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="ST12" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="se14" edge="1" parent="1" source="ST13" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="ST14">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="se15" edge="1" parent="1" source="ST14" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="ST16" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="se16" edge="1" parent="1" source="ST14" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="ST15" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>
