<mxfile host="app.diagrams.net" agent="Claude Code">
  <diagram id="sysmalloc-flow" name="sysmalloc流程">
    <mxGraphModel dx="1136" dy="589" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1800" pageHeight="3700" 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="sysmalloc 源码执行流程总览（系统层面获取内存，扩展 / 替换 top chunk）" vertex="1">
          <mxGeometry height="30" width="900" x="20" as="geometry" />
        </mxCell>
        <mxCell id="NOTET" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontStyle=2;fontColor=#666666;" value="注：sysmalloc 由 _int_malloc 调用，前提是 av-&gt;top 已无足够空间满足 nb 请求。" vertex="1">
          <mxGeometry height="24" width="700" x="20" y="30" as="geometry" />
        </mxCell>
        <mxCell id="S0" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="进入 sysmalloc(nb, av)" vertex="1">
          <mxGeometry height="40" width="180" x="40" y="70" as="geometry" />
        </mxCell>
        <mxCell id="S1" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="av==NULL 或&lt;br&gt;（nb &gt;= mp_.mmap_threshold&lt;br&gt;且 mp_.n_mmaps &lt; mp_.n_mmaps_max）?" vertex="1">
          <mxGeometry height="80" width="200" x="30" y="150" as="geometry" />
        </mxCell>
        <mxCell id="S3" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="av == NULL ?&lt;br&gt;（无可用 arena，且 mmap 也失败）" vertex="1">
          <mxGeometry height="70" width="200" x="30" y="300" as="geometry" />
        </mxCell>
        <mxCell id="S5" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="记录旧 top 配置&lt;br&gt;old_size / old_end&lt;br&gt;brk = snd_brk = FAILURE" vertex="1">
          <mxGeometry height="60" width="200" x="30" y="430" as="geometry" />
        </mxCell>
        <mxCell id="S6" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="校验 old_top（assert）&lt;br&gt;首次 dummy top：size==0&lt;br&gt;或 size&gt;=MINSIZE 且 prev_inuse&lt;br&gt;且堆结束地址页对齐（低 12 位为 0）" vertex="1">
          <mxGeometry height="80" width="200" x="30" y="550" as="geometry" />
        </mxCell>
        <mxCell id="S7" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="av != &amp;main_arena ?&lt;br&gt;（非主分配区）" vertex="1">
          <mxGeometry height="70" width="200" x="30" y="700" as="geometry" />
        </mxCell>
        <mxCell id="S8" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="（两分支汇合）更新 av-&gt;max_system_mem；check_malloc_state" vertex="1">
          <mxGeometry height="60" width="1500" x="30" y="2920" as="geometry" />
        </mxCell>
        <mxCell id="S9" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="p = av-&gt;top&lt;br&gt;size = chunksize(p)" vertex="1">
          <mxGeometry height="50" width="200" x="30" y="3030" as="geometry" />
        </mxCell>
        <mxCell id="S10" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="size &gt;= nb + MINSIZE ?" vertex="1">
          <mxGeometry height="70" width="200" x="30" y="3140" as="geometry" />
        </mxCell>
        <mxCell id="S11" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="从新 top 切分出 nb&lt;br&gt;remainder 成为新 top&lt;br&gt;返回 chunk2mem(p)" vertex="1">
          <mxGeometry height="80" width="200" x="30" y="3270" as="geometry" />
        </mxCell>
        <mxCell id="S12" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" value="__set_errno(ENOMEM)&lt;br&gt;return NULL" vertex="1">
          <mxGeometry height="60" width="200" x="30" y="3430" as="geometry" />
        </mxCell>
        <mxCell id="mm1" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="try_mmap：&lt;br&gt;size = ALIGN_UP(nb+SIZE_SZ, pagesize)&lt;br&gt;（对齐要求更高时加 MALLOC_ALIGN_MASK）&lt;br&gt;tried_mmap = true" vertex="1">
          <mxGeometry height="80" width="210" x="340" y="150" as="geometry" />
        </mxCell>
        <mxCell id="mm2" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="size &gt; nb ?" vertex="1">
          <mxGeometry height="60" width="210" x="340" y="280" as="geometry" />
        </mxCell>
        <mxCell id="mm3" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="mm = MMAP(0, size,&lt;br&gt;PROT_READ|PROT_WRITE, 0)" vertex="1">
          <mxGeometry height="50" width="210" x="340" y="390" as="geometry" />
        </mxCell>
        <mxCell id="mm4" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="mm != MAP_FAILED ?" vertex="1">
          <mxGeometry height="60" width="210" x="340" y="490" as="geometry" />
        </mxCell>
        <mxCell id="mm5" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="前端需要对齐 ?&lt;br&gt;（非 glibc 默认对齐&lt;br&gt;且 front_misalign &gt; 0）" vertex="1">
          <mxGeometry height="70" width="210" x="340" y="600" as="geometry" />
        </mxCell>
        <mxCell id="mm6" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="correction = ALIGNMENT - front_misalign&lt;br&gt;p = mm + correction&lt;br&gt;p-&gt;prev_size = correction（记录偏移）&lt;br&gt;set_head(p, (size-correction)|IS_MMAPPED)" vertex="1">
          <mxGeometry height="90" width="210" x="620" y="610" as="geometry" />
        </mxCell>
        <mxCell id="mm7" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="p = mm&lt;br&gt;set_head(p, size|IS_MMAPPED)" vertex="1">
          <mxGeometry height="50" width="210" x="620" y="750" as="geometry" />
        </mxCell>
        <mxCell id="mm8" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="更新统计&lt;br&gt;n_mmaps / max_n_mmaps&lt;br&gt;mmapped_mem / max_mmapped_mem" vertex="1">
          <mxGeometry height="70" width="210" x="620" y="850" as="geometry" />
        </mxCell>
        <mxCell id="mm9" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="返回 chunk2mem(p)" vertex="1">
          <mxGeometry height="50" width="210" x="620" y="970" as="geometry" />
        </mxCell>
        <mxCell id="NOTE_MM" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontStyle=2;fontColor=#666666;" value="注：mmap 区域的起始偏移存入 p-&gt;prev_size 字段，free()/realloc() 据此计算 munmap 的地址。" vertex="1">
          <mxGeometry height="34" width="480" x="580" y="1070" as="geometry" />
        </mxCell>
        <mxCell id="c1" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="old_heap = heap_for_ptr(old_top)&lt;br&gt;old_heap_size = old_heap-&gt;size" vertex="1">
          <mxGeometry height="60" width="210" x="340" y="1000" as="geometry" />
        </mxCell>
        <mxCell id="c2" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="MINSIZE + nb - old_size &gt; 0&lt;br&gt;且 grow_heap() 成功 ?&lt;br&gt;（先尝试扩展当前堆）" vertex="1">
          <mxGeometry height="70" width="210" x="340" y="1120" as="geometry" />
        </mxCell>
        <mxCell id="c3" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="更新 system_mem / arena_mem&lt;br&gt;set_head(old_top,&lt;br&gt;新大小 | PREV_INUSE)" vertex="1">
          <mxGeometry height="70" width="210" x="620" y="1130" as="geometry" />
        </mxCell>
        <mxCell id="c4" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="new_heap(nb + MINSIZE&lt;br&gt;+ sizeof(heap), top_pad)&lt;br&gt;成功 ?" vertex="1">
          <mxGeometry height="70" width="210" x="340" y="1250" as="geometry" />
        </mxCell>
        <mxCell id="c5" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="设置 heap-&gt;ar_ptr = av&lt;br&gt;heap-&gt;prev = old_heap&lt;br&gt;更新 system_mem / arena_mem" vertex="1">
          <mxGeometry height="60" width="210" x="340" y="1380" as="geometry" />
        </mxCell>
        <mxCell id="c6" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="设置新 top：&lt;br&gt;top(av) = chunk_at_offset(heap,&lt;br&gt;sizeof(heap))&lt;br&gt;set_head(top(av), ... | PREV_INUSE)" vertex="1">
          <mxGeometry height="70" width="210" x="340" y="1490" as="geometry" />
        </mxCell>
        <mxCell id="c7" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="释放旧 top：缩小 old_size&lt;br&gt;尾部切 2 个 0x10 fencepost&lt;br&gt;若剩余 old_size &gt;= MINSIZE&lt;br&gt;则 _int_free(av, old_top, 1)" vertex="1">
          <mxGeometry height="100" width="210" x="340" y="1610" as="geometry" />
        </mxCell>
        <mxCell id="c8" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="!tried_mmap ?&lt;br&gt;（此前未尝试 mmap）" vertex="1">
          <mxGeometry height="60" width="210" x="340" y="1780" as="geometry" />
        </mxCell>
        <mxCell id="c9" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" value="goto try_mmap" vertex="1">
          <mxGeometry height="50" width="210" x="620" y="1790" as="geometry" />
        </mxCell>
        <mxCell id="m1" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="size = nb + mp_.top_pad&lt;br&gt;+ MINSIZE&lt;br&gt;（top_pad 默认 0x20000）" vertex="1">
          <mxGeometry height="70" width="210" x="900" y="1000" as="geometry" />
        </mxCell>
        <mxCell id="m2" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="contiguous(av) ?&lt;br&gt;（堆空间连续）" vertex="1">
          <mxGeometry height="70" width="210" x="900" y="1120" as="geometry" />
        </mxCell>
        <mxCell id="m3" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="size -= old_size&lt;br&gt;（可合并旧空间）" vertex="1">
          <mxGeometry height="50" width="210" x="1200" y="1130" as="geometry" />
        </mxCell>
        <mxCell id="m4" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="size = ALIGN_UP(size, pagesize)&lt;br&gt;（页对齐）" vertex="1">
          <mxGeometry height="60" width="210" x="900" y="1250" as="geometry" />
        </mxCell>
        <mxCell id="m5" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="size &gt; 0 ?" vertex="1">
          <mxGeometry height="60" width="210" x="900" y="1360" as="geometry" />
        </mxCell>
        <mxCell id="m6" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="brk = MORECORE(size)&lt;br&gt;（第一次 sbrk）" vertex="1">
          <mxGeometry height="60" width="210" x="900" y="1470" as="geometry" />
        </mxCell>
        <mxCell id="m7" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="brk != MORECORE_FAILURE ?" vertex="1">
          <mxGeometry height="70" width="210" x="900" y="1580" as="geometry" />
        </mxCell>
        <mxCell id="m8" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="调用 __after_morecore_hook&lt;br&gt;（若存在）" vertex="1">
          <mxGeometry height="60" width="210" x="1200" y="1590" as="geometry" />
        </mxCell>
        <mxCell id="m9" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" value="mmap 后备：&lt;br&gt;contiguous 则 size += old_size&lt;br&gt;再页对齐&lt;br&gt;size &lt; MMAP_AS_MORECORE_SIZE&lt;br&gt;→ 取该值" vertex="1">
          <mxGeometry height="100" width="210" x="1500" y="1670" as="geometry" />
        </mxCell>
        <mxCell id="m10" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" value="mbrk = MMAP(0, size, ...)" vertex="1">
          <mxGeometry height="50" width="210" x="1500" y="1830" as="geometry" />
        </mxCell>
        <mxCell id="m11" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="mbrk != MAP_FAILED ?" vertex="1">
          <mxGeometry height="60" width="210" x="1500" y="1930" as="geometry" />
        </mxCell>
        <mxCell id="m12" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" value="brk = mbrk&lt;br&gt;snd_brk = brk + size&lt;br&gt;set_noncontiguous(av)" vertex="1">
          <mxGeometry height="70" width="210" x="1500" y="2060" as="geometry" />
        </mxCell>
        <mxCell id="m14" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="brk != MORECORE_FAILURE ?&lt;br&gt;（sbrk 或 mmap 后备成功）" vertex="1">
          <mxGeometry height="70" width="210" x="900" y="1710" as="geometry" />
        </mxCell>
        <mxCell id="m15" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="首次则记录 mp_.sbrk_base&lt;br&gt;av-&gt;system_mem += size" vertex="1">
          <mxGeometry height="60" width="210" x="900" y="1830" as="geometry" />
        </mxCell>
        <mxCell id="m16" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="brk == old_end 且&lt;br&gt;snd_brk == FAILURE ?&lt;br&gt;（MORECORE 直接扩展了原空间）" vertex="1">
          <mxGeometry height="80" width="210" x="900" y="1950" as="geometry" />
        </mxCell>
        <mxCell id="m17" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="set_head(old_top,&lt;br&gt;(size + old_size) | PREV_INUSE)" vertex="1">
          <mxGeometry height="60" width="210" x="1200" y="1960" as="geometry" />
        </mxCell>
        <mxCell id="m18" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="contiguous 且 old_size 且&lt;br&gt;brk &lt; old_end ?&lt;br&gt;（外部 sbrk 侵占空间）" vertex="1">
          <mxGeometry height="80" width="210" x="900" y="2090" as="geometry" />
        </mxCell>
        <mxCell id="m19" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" value="malloc_printerr&lt;br&gt;（break adjusted to free space）" vertex="1">
          <mxGeometry height="60" width="210" x="1200" y="2100" as="geometry" />
        </mxCell>
        <mxCell id="m20" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="初始化对齐参数&lt;br&gt;front_misalign / end_misalign&lt;br&gt;correction / aligned_brk = brk" vertex="1">
          <mxGeometry height="70" width="210" x="900" y="2230" as="geometry" />
        </mxCell>
        <mxCell id="m21" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="contiguous(av) ?" vertex="1">
          <mxGeometry height="70" width="210" x="900" y="2350" as="geometry" />
        </mxCell>
        <mxCell id="m22" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="连续情况：&lt;br&gt;front_misalign = chunk2mem(brk) &amp; MASK&lt;br&gt;correction 累加（对齐 + old_size&lt;br&gt;+ 页边界补齐）&lt;br&gt;snd_brk = MORECORE(correction)&lt;br&gt;（第二次 sbrk 修正对齐）" vertex="1">
          <mxGeometry height="120" width="210" x="1200" y="2360" as="geometry" />
        </mxCell>
        <mxCell id="m23" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="非连续情况：&lt;br&gt;对齐检查 / 调整 aligned_brk&lt;br&gt;snd_brk = MORECORE(0)&lt;br&gt;（探测当前 brk 位置）" vertex="1">
          <mxGeometry height="90" width="210" x="1200" y="2530" as="geometry" />
        </mxCell>
        <mxCell id="m24" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="snd_brk != FAILURE ?&lt;br&gt;（第二次 sbrk 成功）" vertex="1">
          <mxGeometry height="70" width="210" x="900" y="2480" as="geometry" />
        </mxCell>
        <mxCell id="m25" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="av-&gt;top = aligned_brk&lt;br&gt;set_head(top, snd_brk - aligned_brk&lt;br&gt;+ correction | PREV_INUSE)&lt;br&gt;av-&gt;system_mem += correction" vertex="1">
          <mxGeometry height="90" width="210" x="900" y="2600" as="geometry" />
        </mxCell>
        <mxCell id="m26" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="old_size != 0 ?&lt;br&gt;（原 top 非首次）" vertex="1">
          <mxGeometry height="70" width="210" x="900" y="2740" as="geometry" />
        </mxCell>
        <mxCell id="m27" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="缩小 old_top 插入双重栅栏&lt;br&gt;（2 个 0x10 fencepost）&lt;br&gt;若剩余 old_size &gt;= MINSIZE&lt;br&gt;则 _int_free(av, old_top, 1)" vertex="1">
          <mxGeometry height="90" width="210" x="1200" y="2750" as="geometry" />
        </mxCell>
        <mxCell id="NOTE_FENCE" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontStyle=2;fontColor=#666666;" value="注：双重栅栏（double fencepost）= 2 个 0x10 的已占用 chunk，防止新 top 与不归我们管的外部空间合并。" vertex="1">
          <mxGeometry height="34" width="560" x="900" y="2880" as="geometry" />
        </mxCell>
        <mxCell id="LEG1" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="处理 / 操作" vertex="1">
          <mxGeometry height="30" width="130" x="40" y="3560" as="geometry" />
        </mxCell>
        <mxCell id="LEG2" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="条件判断" vertex="1">
          <mxGeometry height="30" width="130" x="220" y="3560" as="geometry" />
        </mxCell>
        <mxCell id="LEG3" parent="1" style="shape=parallelogram;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" value="系统调用 / 跳转" vertex="1">
          <mxGeometry height="30" width="150" x="400" y="3560" as="geometry" />
        </mxCell>
        <mxCell id="LEG4" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" value="错误 / 失败" vertex="1">
          <mxGeometry height="30" width="130" x="600" y="3560" as="geometry" />
        </mxCell>
        <mxCell id="LEG5" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="返回 / 结束" vertex="1">
          <mxGeometry height="30" width="130" x="780" y="3560" as="geometry" />
        </mxCell>
        <mxCell id="eS0S1" edge="1" parent="1" source="S0" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="S1">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="eS1mm1" edge="1" parent="1" source="S1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;labelBackgroundColor=#ffffff;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" target="mm1" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="eS1S3" edge="1" parent="1" source="S1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;labelBackgroundColor=#ffffff;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="S3" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="eS3S4" edge="1" parent="1" source="S3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;labelBackgroundColor=#ffffff;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" target="S4" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="eS3S5" edge="1" parent="1" source="S3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;labelBackgroundColor=#ffffff;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="S5" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="eS5S6" edge="1" parent="1" source="S5" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="S6">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="eS6S7" edge="1" parent="1" source="S6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="S7">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="eS7c1" edge="1" parent="1" source="S7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;labelBackgroundColor=#ffffff;exitX=0.5;exitY=1;entryX=0;entryY=0.5;" target="c1" value="是（非主 arena）">
          <mxGeometry relative="1" x="0.0213" as="geometry">
            <mxPoint as="offset" />
            <Array as="points">
              <mxPoint x="130" y="1010" />
              <mxPoint x="340" y="1010" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="eS7m1" edge="1" parent="1" source="S7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;labelBackgroundColor=#ffffff;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="m1" value="否（main arena）">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="130.05" y="950.05" />
              <mxPoint x="1005" y="950.05" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="eS8S9" edge="1" parent="1" source="S8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="S9">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="eS9S10" edge="1" parent="1" source="S9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="S10">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="eS10S11" edge="1" parent="1" source="S10" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;labelBackgroundColor=#ffffff;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="S11" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="eS10S12" edge="1" parent="1" source="S10" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;labelBackgroundColor=#ffffff;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="S12" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="emm1mm2" edge="1" parent="1" source="mm1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="mm2">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="emm2mm3" edge="1" parent="1" source="mm2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;labelBackgroundColor=#ffffff;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="mm3" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="emm2S3" edge="1" parent="1" source="mm2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;labelBackgroundColor=#ffffff;exitX=0.5;exitY=1;entryX=1;entryY=0.5;" target="S3" value="否">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="445" y="420" />
              <mxPoint x="230" y="420" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="emm3mm4" edge="1" parent="1" source="mm3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="mm4">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="emm4mm5" edge="1" parent="1" source="mm4" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;labelBackgroundColor=#ffffff;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="mm5" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="emm4S3" edge="1" parent="1" source="mm4" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;labelBackgroundColor=#ffffff;exitX=0.5;exitY=1;entryX=1;entryY=0.5;" target="S3" value="否（mmap 失败）">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="445" y="570" />
              <mxPoint x="230" y="570" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="emm5mm6" edge="1" parent="1" source="mm5" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;labelBackgroundColor=#ffffff;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" target="mm6" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="emm5mm7" edge="1" parent="1" source="mm5" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;labelBackgroundColor=#ffffff;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" target="mm7" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="emm6mm8" edge="1" parent="1" source="mm6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="mm8">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="emm7mm8" edge="1" parent="1" source="mm7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="mm8">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="emm8mm9" edge="1" parent="1" source="mm8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="mm9">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ec1c2" edge="1" parent="1" source="c1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="c2">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ec2c3" edge="1" parent="1" source="c2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;labelBackgroundColor=#ffffff;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" target="c3" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ec3S8" edge="1" parent="1" source="c3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.42;entryY=0;" target="S8">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ec2c4" edge="1" parent="1" source="c2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;labelBackgroundColor=#ffffff;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="c4" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ec4c5" edge="1" parent="1" source="c4" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;labelBackgroundColor=#ffffff;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="c5" value="是（新 heap 成功）">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ec5c6" edge="1" parent="1" source="c5" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="c6">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ec6c7" edge="1" parent="1" source="c6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="c7">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ec7S8" edge="1" parent="1" source="c7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.28;entryY=0;" target="S8">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ec4c8" edge="1" parent="1" source="c4" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;labelBackgroundColor=#ffffff;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="c8" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ec8c9" edge="1" parent="1" source="c8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;labelBackgroundColor=#ffffff;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" target="c9" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ec9mm1" edge="1" parent="1" source="S4" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;dashed=1;strokeColor=#d79b00;labelBackgroundColor=#ffffff;exitX=0.5;exitY=1;entryX=0;entryY=0.5;" target="mm1" value="回退到 mmap 分支">
          <mxGeometry relative="1" as="geometry">
            <Array as="points" />
          </mxGeometry>
        </mxCell>
        <mxCell id="ec8S8" edge="1" parent="1" source="c8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;labelBackgroundColor=#ffffff;exitX=0.5;exitY=1;entryX=0.28;entryY=0;" target="S8" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="em1m2" edge="1" parent="1" source="m1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="m2">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="em2m3" edge="1" parent="1" source="m2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;labelBackgroundColor=#ffffff;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" target="m3" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="em2m4" edge="1" parent="1" source="m2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;labelBackgroundColor=#ffffff;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="m4" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="em3m4" edge="1" parent="1" source="m3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="m4">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="em4m5" edge="1" parent="1" source="m4" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="m5">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="em5m6" edge="1" parent="1" source="m5" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;labelBackgroundColor=#ffffff;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="m6" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="em5m7" edge="1" parent="1" source="m5" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;labelBackgroundColor=#ffffff;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="m7" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="em6m7" edge="1" parent="1" source="m6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="m7">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="em7m8" edge="1" parent="1" source="m7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;labelBackgroundColor=#ffffff;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" target="m8" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="em7m9" edge="1" parent="1" source="m7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;labelBackgroundColor=#ffffff;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" target="m9" value="否（mmap 后备）">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="em8m14" edge="1" parent="1" source="m8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="m14">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="em9m10" edge="1" parent="1" source="m9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="m10">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="em10m11" edge="1" parent="1" source="m10" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="m11">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="em11m12" edge="1" parent="1" source="m11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;labelBackgroundColor=#ffffff;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="m12" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="em11m14" edge="1" parent="1" source="m11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;labelBackgroundColor=#ffffff;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="m14" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="em12m14" edge="1" parent="1" source="m12" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0;exitY=0.5;entryX=0.5;entryY=0;" target="m14">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="1000" y="2190" />
              <mxPoint x="1000" y="1745" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="em14S8" edge="1" parent="1" source="m14" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;labelBackgroundColor=#ffffff;exitX=0.5;exitY=1;entryX=0.65;entryY=0;" target="S8" value="否（失败）">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="em14m15" edge="1" parent="1" source="m14" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;labelBackgroundColor=#ffffff;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="m15" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="em15m16" edge="1" parent="1" source="m15" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="m16">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="em16m17" edge="1" parent="1" source="m16" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;labelBackgroundColor=#ffffff;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" target="m17" value="是（直接扩展原 top）">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="em16m18" edge="1" parent="1" source="m16" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;labelBackgroundColor=#ffffff;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="m18" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="em17S8" edge="1" parent="1" source="m17" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.85;entryY=0;" target="S8">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="em18m19" edge="1" parent="1" source="m18" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;labelBackgroundColor=#ffffff;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" target="m19" value="是（报错）">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="em18m20" edge="1" parent="1" source="m18" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;labelBackgroundColor=#ffffff;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="m20" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="em19S8" edge="1" parent="1" source="m19" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.85;entryY=0;" target="S8">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="em20m21" edge="1" parent="1" source="m20" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="m21">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="em21m22" edge="1" parent="1" source="m21" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;labelBackgroundColor=#ffffff;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" target="m22" value="是（连续）">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="em21m23" edge="1" parent="1" source="m21" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;labelBackgroundColor=#ffffff;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" target="m23" value="否（不连续）">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="em22m24" edge="1" parent="1" source="m22" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="m24">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="em23m24" edge="1" parent="1" source="m23" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="m24">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="em24S8" edge="1" parent="1" source="m24" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;labelBackgroundColor=#ffffff;exitX=0.5;exitY=1;entryX=0.65;entryY=0;" target="S8" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="em24m25" edge="1" parent="1" source="m24" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;labelBackgroundColor=#ffffff;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="m25" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="em25m26" edge="1" parent="1" source="m25" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="m26">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="em26m27" edge="1" parent="1" source="m26" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;labelBackgroundColor=#ffffff;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" target="m27" value="是（插栅栏并释放）">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="em26S8" edge="1" parent="1" source="m26" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;labelBackgroundColor=#ffffff;exitX=0.5;exitY=1;entryX=0.65;entryY=0;" target="S8" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="em27S8" edge="1" parent="1" source="m27" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.85;entryY=0;" target="S8">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="-uqJdy4ejbKFnJAJteza-1" edge="1" parent="1" source="c9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;dashed=1;strokeColor=#d79b00;labelBackgroundColor=#ffffff;exitX=0.5;exitY=1;entryX=0;entryY=0.5;" target="S4" value="">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="250" y="1960" />
              <mxPoint x="250" y="190" />
            </Array>
            <mxPoint x="725" y="1840" as="sourcePoint" />
            <mxPoint x="340" y="190" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="S4" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" value="return NULL" vertex="1">
          <mxGeometry height="24" width="90" x="270" y="323" as="geometry" />
        </mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>
