Commit 5c02d18f authored by Martin Clochard's avatar Martin Clochard
Browse files
parents 28dc54e9 f4153150
......@@ -166,6 +166,34 @@ module InPlaceRev
assert { list_seg l2 !next l2M null };
l1
let in_place_reverse (l:loc) (ghost lM:list loc) : loc
requires { list_seg l !next lM null }
ensures { list_seg result !next (reverse lM) null }
= 'Init:
let p = ref l in
let ghost pM = ref lM in
let r = ref null in
let ghost rM = ref (Nil : list loc) in
while !p <> null do
invariant { list_seg !p !next !pM null }
invariant { list_seg !r !next !rM null }
invariant { disjoint !pM !rM }
invariant { (reverse !pM) ++ !rM = reverse lM }
variant { !pM }
let n = get !next !p in
next := set !next !p !r;
assert { list_seg !r !next !rM null };
r := !p;
p := n;
match !pM with
| Nil -> absurd
| Cons h t -> rM := Cons h !rM; pM := t
end
done;
!r
end
(** Using sequences instead of lists *)
......@@ -175,6 +203,7 @@ module InPlaceRevSeq
use import int.Int
use map.Map
use import seq.Seq
use import seq.Reverse
use import ref.Ref
predicate mem (x: 'a) (s: seq 'a) =
......@@ -192,7 +221,8 @@ module InPlaceRevSeq
variant { length s - i }
returns { (s1,s2) -> s == s1 ++ cons x s2 }
=
if s[i] = x then (s[0 .. i], s[i+1 ..]) else mem_decomp x s (i+1)
if s[i] = x then (s[0 .. i], s[i+1 ..])
else begin (* assert { mem x s[i+1 .. ] }; *) mem_decomp x s (i+1) end
type loc
......@@ -335,6 +365,30 @@ module InPlaceRevSeq
assert { list_seg !next l2 l2M null };
l1
let in_place_reverse (l:loc) (ghost lM: seq loc) : loc
requires { list_seg !next l lM null }
ensures { list_seg !next result (reverse lM) null }
= 'Init:
let p = ref l in
let ghost pM = ref lM in
let r = ref null in
let ghost rM = ref (empty: seq loc) in
while !p <> null do
invariant { list_seg !next !p !pM null }
invariant { list_seg !next !r !rM null }
invariant { disjoint !pM !rM }
invariant { (reverse !pM) ++ !rM == reverse lM }
variant { length !pM }
let n = acc next !p in
upd next !p !r;
assert { list_seg !next !r !rM null };
r := !p;
p := n;
rM := cons !pM[0] !rM;
pM := !pM[ 1 .. ]
done;
!r
end
(*
......
......@@ -2,601 +2,154 @@
<!DOCTYPE why3session PUBLIC "-//Why3//proof session v5//EN"
"http://why3.lri.fr/why3session.dtd">
<why3session shape_version="4">
<prover id="0" name="CVC4" version="1.4" timelimit="5" memlimit="1000"/>
<prover id="1" name="Z3" version="4.3.1" timelimit="5" memlimit="1000"/>
<prover id="2" name="Alt-Ergo" version="0.95.2" timelimit="5" memlimit="1000"/>
<prover id="3" name="Alt-Ergo" version="0.99.1" timelimit="10" memlimit="1000"/>
<prover id="5" name="Z3" version="4.3.2" timelimit="10" memlimit="1000"/>
<prover id="6" name="Z3" version="4.4.0" timelimit="5" memlimit="1000"/>
<file name="../linked_list_rev.mlw" expanded="true">
<prover id="0" name="CVC4" version="1.4" timelimit="5" steplimit="1" memlimit="1000"/>
<prover id="3" name="Alt-Ergo" version="0.99.1" timelimit="6" steplimit="1" memlimit="1000"/>
<prover id="5" name="Z3" version="4.3.2" timelimit="10" steplimit="1" memlimit="1000"/>
<prover id="6" name="Z3" version="4.4.0" timelimit="16" steplimit="-1" memlimit="1000"/>
<file name="../linked_list_rev.mlw">
<theory name="Disjoint" sum="d9538770c8f60c61e92f6baffbf62d5d">
<goal name="WP_parameter mem_decomp" expl="VC for mem_decomp">
<proof prover="2"><result status="valid" time="0.02" steps="54"/></proof>
<proof prover="3" timelimit="5"><result status="valid" time="0.02" steps="48"/></proof>
</goal>
</theory>
<theory name="InPlaceRev" sum="b22837339323e806694c7579e14400db" expanded="true">
<theory name="InPlaceRev" sum="79182a5e3856c7f8aff3c51d7a23476f">
<goal name="WP_parameter list_seg_frame_ext" expl="VC for list_seg_frame_ext">
<proof prover="2"><result status="valid" time="0.16" steps="276"/></proof>
<proof prover="3" timelimit="5"><result status="valid" time="0.16" steps="236"/></proof>
</goal>
<goal name="WP_parameter list_seg_functional" expl="VC for list_seg_functional">
<proof prover="2"><result status="valid" time="0.10" steps="373"/></proof>
<proof prover="3" timelimit="5"><result status="valid" time="0.10" steps="278"/></proof>
</goal>
<goal name="WP_parameter list_seg_sublistl" expl="VC for list_seg_sublistl">
<proof prover="0"><result status="valid" time="0.16"/></proof>
<proof prover="0"><result status="valid" time="0.28"/></proof>
</goal>
<goal name="WP_parameter list_seg_no_repet" expl="VC for list_seg_no_repet">
<proof prover="2"><result status="valid" time="0.36" steps="282"/></proof>
<proof prover="3" timelimit="5"><result status="valid" time="0.05" steps="179"/></proof>
</goal>
<goal name="WP_parameter list_seg_append" expl="VC for list_seg_append">
<proof prover="2"><result status="valid" time="0.23" steps="711"/></proof>
<proof prover="3" timelimit="5"><result status="valid" time="0.23" steps="615"/></proof>
</goal>
<goal name="WP_parameter app" expl="VC for app">
<transf name="split_goal_wp">
<goal name="WP_parameter app.1" expl="1. postcondition">
<proof prover="2"><result status="valid" time="0.03" steps="60"/></proof>
<proof prover="3" timelimit="5"><result status="valid" time="0.03" steps="24"/></proof>
</goal>
<goal name="WP_parameter app.2" expl="2. loop invariant init">
<proof prover="2"><result status="valid" time="0.01" steps="4"/></proof>
<proof prover="3" timelimit="5"><result status="valid" time="0.01" steps="4"/></proof>
</goal>
<goal name="WP_parameter app.3" expl="3. loop invariant init">
<proof prover="2"><result status="valid" time="0.02" steps="5"/></proof>
<proof prover="3" timelimit="5"><result status="valid" time="0.02" steps="9"/></proof>
</goal>
<goal name="WP_parameter app.4" expl="4. loop invariant init">
<proof prover="2"><result status="valid" time="0.01" steps="4"/></proof>
<proof prover="3" timelimit="5"><result status="valid" time="0.01" steps="4"/></proof>
</goal>
<goal name="WP_parameter app.5" expl="5. loop invariant init">
<proof prover="2"><result status="valid" time="0.01" steps="9"/></proof>
<proof prover="3" timelimit="5"><result status="valid" time="0.01" steps="10"/></proof>
</goal>
<goal name="WP_parameter app.6" expl="6. loop invariant init">
<proof prover="2"><result status="valid" time="0.00" steps="10"/></proof>
<proof prover="3" timelimit="5"><result status="valid" time="0.00" steps="11"/></proof>
</goal>
<goal name="WP_parameter app.7" expl="7. precondition">
<proof prover="2"><result status="valid" time="0.01" steps="9"/></proof>
<proof prover="3" timelimit="5"><result status="valid" time="0.01" steps="9"/></proof>
</goal>
<goal name="WP_parameter app.8" expl="8. unreachable point">
<proof prover="2"><result status="valid" time="0.06" steps="98"/></proof>
<proof prover="3" timelimit="5"><result status="valid" time="0.06" steps="76"/></proof>
</goal>
<goal name="WP_parameter app.9" expl="9. precondition">
<proof prover="2"><result status="valid" time="0.01" steps="13"/></proof>
<proof prover="3" timelimit="5"><result status="valid" time="0.01" steps="13"/></proof>
</goal>
<goal name="WP_parameter app.10" expl="10. loop invariant preservation">
<proof prover="2"><result status="valid" time="0.01" steps="14"/></proof>
<proof prover="3" timelimit="5"><result status="valid" time="0.01" steps="14"/></proof>
</goal>
<goal name="WP_parameter app.11" expl="11. loop invariant preservation">
<proof prover="1"><result status="valid" time="0.02"/></proof>
<proof prover="5" timelimit="5"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="WP_parameter app.12" expl="12. loop invariant preservation">
<proof prover="2"><result status="valid" time="0.08" steps="120"/></proof>
<proof prover="3" timelimit="5"><result status="valid" time="0.08" steps="137"/></proof>
</goal>
<goal name="WP_parameter app.13" expl="13. loop invariant preservation">
<proof prover="2"><result status="valid" time="0.22" steps="358"/></proof>
<proof prover="3" timelimit="5"><result status="valid" time="0.06" steps="180"/></proof>
</goal>
<goal name="WP_parameter app.14" expl="14. loop invariant preservation">
<proof prover="2"><result status="valid" time="1.23" steps="621"/></proof>
<proof prover="3" timelimit="5"><result status="valid" time="0.32" steps="670"/></proof>
</goal>
<goal name="WP_parameter app.15" expl="15. loop variant decrease">
<proof prover="2"><result status="valid" time="0.03" steps="44"/></proof>
<proof prover="3" timelimit="5"><result status="valid" time="0.03" steps="46"/></proof>
</goal>
<goal name="WP_parameter app.16" expl="16. precondition">
<proof prover="2"><result status="valid" time="0.02" steps="10"/></proof>
<proof prover="3" timelimit="5"><result status="valid" time="0.02" steps="10"/></proof>
</goal>
<goal name="WP_parameter app.17" expl="17. assertion">
<proof prover="2"><result status="valid" time="0.16" steps="101"/></proof>
<proof prover="3" timelimit="5"><result status="valid" time="0.01" steps="31"/></proof>
</goal>
<goal name="WP_parameter app.18" expl="18. assertion">
<proof prover="2"><result status="valid" time="0.02" steps="23"/></proof>
<proof prover="3" timelimit="5"><result status="valid" time="0.02" steps="23"/></proof>
</goal>
<goal name="WP_parameter app.19" expl="19. assertion">
<proof prover="2"><result status="valid" time="0.32" steps="301"/></proof>
<proof prover="3" timelimit="5"><result status="valid" time="0.32" steps="283"/></proof>
</goal>
<goal name="WP_parameter app.20" expl="20. postcondition">
<proof prover="0"><result status="valid" time="0.23"/></proof>
</goal>
</transf>
</goal>
<goal name="WP_parameter in_place_reverse" expl="VC for in_place_reverse">
<transf name="split_goal_wp">
<goal name="WP_parameter in_place_reverse.1" expl="1. loop invariant init">
<proof prover="3" timelimit="5"><result status="valid" time="0.01" steps="1"/></proof>
</goal>
<goal name="WP_parameter in_place_reverse.2" expl="2. loop invariant init">
<proof prover="3" timelimit="5"><result status="valid" time="0.02" steps="6"/></proof>
</goal>
<goal name="WP_parameter in_place_reverse.3" expl="3. loop invariant init">
<proof prover="3" timelimit="5"><result status="valid" time="0.01" steps="8"/></proof>
</goal>
<goal name="WP_parameter in_place_reverse.4" expl="4. loop invariant init">
<proof prover="3" timelimit="5"><result status="valid" time="0.01" steps="9"/></proof>
</goal>
<goal name="WP_parameter in_place_reverse.5" expl="5. assertion">
<proof prover="3" timelimit="5"><result status="valid" time="0.09" steps="46"/></proof>
</goal>
<goal name="WP_parameter in_place_reverse.6" expl="6. unreachable point">
<proof prover="3" timelimit="5"><result status="valid" time="0.05" steps="140"/></proof>
</goal>
<goal name="WP_parameter in_place_reverse.7" expl="7. loop invariant preservation">
<proof prover="3" timelimit="5"><result status="valid" time="0.30" steps="526"/></proof>
</goal>
<goal name="WP_parameter in_place_reverse.8" expl="8. loop invariant preservation">
<proof prover="3" timelimit="5"><result status="valid" time="0.11" steps="215"/></proof>
</goal>
<goal name="WP_parameter in_place_reverse.9" expl="9. loop invariant preservation">
<proof prover="3" timelimit="5"><result status="valid" time="0.56" steps="405"/></proof>
</goal>
<goal name="WP_parameter in_place_reverse.10" expl="10. loop invariant preservation">
<proof prover="3" timelimit="5"><result status="valid" time="0.01" steps="16"/></proof>
</goal>
<goal name="WP_parameter in_place_reverse.11" expl="11. loop variant decrease">
<proof prover="3" timelimit="5"><result status="valid" time="0.02" steps="58"/></proof>
</goal>
<goal name="WP_parameter in_place_reverse.12" expl="12. postcondition">
<proof prover="3" timelimit="5"><result status="valid" time="0.06" steps="139"/></proof>
</goal>
</transf>
</goal>
</theory>
<theory name="InPlaceRevSeq" sum="38c0bab239afbeb1f1b0cc0a7d5c1f81" expanded="true">
<theory name="InPlaceRevSeq" sum="103490a816b50361aa8269515016ce5f">
<goal name="WP_parameter mem_decomp" expl="VC for mem_decomp">
<transf name="split_goal_wp">
<goal name="WP_parameter mem_decomp.1" expl="1. postcondition">
<proof prover="3" timelimit="60"><result status="valid" time="0.02" steps="61"/></proof>
<proof prover="3"><result status="valid" time="0.02" steps="61"/></proof>
</goal>
<goal name="WP_parameter mem_decomp.2" expl="2. variant decrease">
<proof prover="3" timelimit="60"><result status="valid" time="0.01" steps="4"/></proof>
<proof prover="3"><result status="valid" time="0.01" steps="4"/></proof>
</goal>
<goal name="WP_parameter mem_decomp.3" expl="3. precondition">
<proof prover="3" timelimit="60"><result status="valid" time="0.04" steps="15"/></proof>
<proof prover="3"><result status="valid" time="0.04" steps="15"/></proof>
</goal>
<goal name="WP_parameter mem_decomp.4" expl="4. precondition">
<metas>
<ts_pos name="real" arity="0" id="2"
ip_theory="BuiltIn">
<ip_library name="why3"/>
<ip_library name="BuiltIn"/>
<ip_qualid name="real"/>
</ts_pos>
<ts_pos name="pred" arity="1" id="8"
ip_theory="HighOrd">
<ip_library name="why3"/>
<ip_library name="HighOrd"/>
<ip_qualid name="pred"/>
</ts_pos>
<ts_pos name="&apos;mark" arity="0" id="68"
ip_theory="Mark">
<ip_library name="why3"/>
<ip_library name="Mark"/>
<ip_qualid name="&apos;mark"/>
</ts_pos>
<ts_pos name="ref" arity="1" id="4572"
ip_theory="Ref">
<ip_library name="ref"/>
<ip_qualid name="ref"/>
</ts_pos>
<ls_pos name="infix =" id="10"
ip_theory="BuiltIn">
<ip_library name="why3"/>
<ip_library name="BuiltIn"/>
<ip_qualid name="infix ="/>
</ls_pos>
<ls_pos name="infix @" id="15"
ip_theory="HighOrd">
<ip_library name="why3"/>
<ip_library name="HighOrd"/>
<ip_qualid name="infix @"/>
</ls_pos>
<ls_pos name="one" id="272"
ip_theory="Int">
<ip_library name="int"/>
<ip_qualid name="one"/>
</ls_pos>
<ls_pos name="infix &lt;" id="273"
ip_theory="Int">
<ip_library name="int"/>
<ip_qualid name="infix &lt;"/>
</ls_pos>
<ls_pos name="infix &gt;" id="276"
ip_theory="Int">
<ip_library name="int"/>
<ip_qualid name="infix &gt;"/>
</ls_pos>
<ls_pos name="infix +" id="1442"
ip_theory="Int">
<ip_library name="int"/>
<ip_qualid name="infix +"/>
</ls_pos>
<ls_pos name="prefix -" id="1443"
ip_theory="Int">
<ip_library name="int"/>
<ip_qualid name="prefix -"/>
</ls_pos>
<ls_pos name="infix *" id="1444"
ip_theory="Int">
<ip_library name="int"/>
<ip_qualid name="infix *"/>
</ls_pos>
<ls_pos name="infix &gt;=" id="1512"
ip_theory="Int">
<ip_library name="int"/>
<ip_qualid name="infix &gt;="/>
</ls_pos>
<ls_pos name="get" id="2971"
ip_theory="Map">
<ip_library name="map"/>
<ip_qualid name="get"/>
</ls_pos>
<ls_pos name="set" id="2974"
ip_theory="Map">
<ip_library name="map"/>
<ip_qualid name="set"/>
</ls_pos>
<ls_pos name="mixfix [&lt;-]" id="2994"
ip_theory="Map">
<ip_library name="map"/>
<ip_qualid name="mixfix [&lt;-]"/>
</ls_pos>
<ls_pos name="prefix !" id="4578"
ip_theory="Ref">
<ip_library name="ref"/>
<ip_qualid name="prefix !"/>
</ls_pos>
<ls_pos name="length" id="6392"
ip_theory="Seq">
<ip_library name="seq"/>
<ip_qualid name="length"/>
</ls_pos>
<ls_pos name="empty" id="6397"
ip_theory="Seq">
<ip_library name="seq"/>
<ip_qualid name="empty"/>
</ls_pos>
<ls_pos name="get" id="6399"
ip_theory="Seq">
<ip_library name="seq"/>
<ip_qualid name="get"/>
</ls_pos>
<ls_pos name="set" id="6411"
ip_theory="Seq">
<ip_library name="seq"/>
<ip_qualid name="set"/>
</ls_pos>
<ls_pos name="mixfix [&lt;-]" id="6438"
ip_theory="Seq">
<ip_library name="seq"/>
<ip_qualid name="mixfix [&lt;-]"/>
</ls_pos>
<ls_pos name="infix ==" id="6451"
ip_theory="Seq">
<ip_library name="seq"/>
<ip_qualid name="infix =="/>
</ls_pos>
<ls_pos name="cons" id="6468"
ip_theory="Seq">
<ip_library name="seq"/>
<ip_qualid name="cons"/>
</ls_pos>
<ls_pos name="snoc" id="6483"
ip_theory="Seq">
<ip_library name="seq"/>
<ip_qualid name="snoc"/>
</ls_pos>
<ls_pos name="create" id="6563"
ip_theory="Seq">
<ip_library name="seq"/>
<ip_qualid name="create"/>
</ls_pos>
<ls_pos name="disjoint" id="7003"
ip_theory="InPlaceRevSeq">
<ip_qualid name="disjoint"/>
</ls_pos>
<pr_pos name="Assoc" id="1445"
ip_theory="Int">
<ip_library name="int"/>
<ip_qualid name="CommutativeGroup"/>
<ip_qualid name="Assoc"/>
</pr_pos>
<pr_pos name="Unit_def_l" id="1452"
ip_theory="Int">
<ip_library name="int"/>
<ip_qualid name="CommutativeGroup"/>
<ip_qualid name="Unit_def_l"/>
</pr_pos>
<pr_pos name="Unit_def_r" id="1455"
ip_theory="Int">
<ip_library name="int"/>
<ip_qualid name="CommutativeGroup"/>
<ip_qualid name="Unit_def_r"/>
</pr_pos>
<pr_pos name="Inv_def_l" id="1458"
ip_theory="Int">
<ip_library name="int"/>
<ip_qualid name="CommutativeGroup"/>
<ip_qualid name="Inv_def_l"/>
</pr_pos>
<pr_pos name="Inv_def_r" id="1461"
ip_theory="Int">
<ip_library name="int"/>
<ip_qualid name="CommutativeGroup"/>
<ip_qualid name="Inv_def_r"/>
</pr_pos>
<pr_pos name="Comm" id="1464"
ip_theory="Int">
<ip_library name="int"/>
<ip_qualid name="CommutativeGroup"/>
<ip_qualid name="Comm"/>
<ip_qualid name="Comm"/>
</pr_pos>
<pr_pos name="Assoc" id="1469"
ip_theory="Int">
<ip_library name="int"/>
<ip_qualid name="Assoc"/>
<ip_qualid name="Assoc"/>
</pr_pos>
<pr_pos name="Mul_distr_l" id="1476"
ip_theory="Int">
<ip_library name="int"/>
<ip_qualid name="Mul_distr_l"/>
</pr_pos>
<pr_pos name="Mul_distr_r" id="1483"
ip_theory="Int">
<ip_library name="int"/>
<ip_qualid name="Mul_distr_r"/>
</pr_pos>
<pr_pos name="Comm" id="1501"
ip_theory="Int">
<ip_library name="int"/>
<ip_qualid name="Comm"/>
<ip_qualid name="Comm"/>
</pr_pos>
<pr_pos name="Unitary" id="1506"
ip_theory="Int">
<ip_library name="int"/>
<ip_qualid name="Unitary"/>
</pr_pos>
<pr_pos name="NonTrivialRing" id="1509"
ip_theory="Int">
<ip_library name="int"/>
<ip_qualid name="NonTrivialRing"/>
</pr_pos>
<pr_pos name="Refl" id="1521"
ip_theory="Int">
<ip_library name="int"/>
<ip_qualid name="Refl"/>
</pr_pos>
<pr_pos name="Trans" id="1524"
ip_theory="Int">
<ip_library name="int"/>
<ip_qualid name="Trans"/>
</pr_pos>
<pr_pos name="Antisymm" id="1531"
ip_theory="Int">
<ip_library name="int"/>
<ip_qualid name="Antisymm"/>
</pr_pos>
<pr_pos name="Total" id="1536"
ip_theory="Int">
<ip_library name="int"/>
<ip_qualid name="Total"/>
</pr_pos>
<pr_pos name="ZeroLessOne" id="1541"
ip_theory="Int">
<ip_library name="int"/>
<ip_qualid name="ZeroLessOne"/>
</pr_pos>
<pr_pos name="CompatOrderAdd" id="1542"
ip_theory="Int">
<ip_library name="int"/>
<ip_qualid name="CompatOrderAdd"/>
</pr_pos>
<pr_pos name="Select_eq" id="3007"
ip_theory="Map">
<ip_library name="map"/>
<ip_qualid name="Select_eq"/>
</pr_pos>
<pr_pos name="Select_neq" id="3016"
ip_theory="Map">
<ip_library name="map"/>
<ip_qualid name="Select_neq"/>
</pr_pos>
<pr_pos name="length_nonnegative" id="6394"
ip_theory="Seq">
<ip_library name="seq"/>
<ip_qualid name="length_nonnegative"/>
</pr_pos>
<pr_pos name="empty_length" id="6398"
ip_theory="Seq">
<ip_library name="seq"/>
<ip_qualid name="empty_length"/>
</pr_pos>
<pr_pos name="set_def1" id="6415"
ip_theory="Seq">
<ip_library name="seq"/>
<ip_qualid name="set_def1"/>
</pr_pos>
<pr_pos name="set_def2" id="6422"
ip_theory="Seq">
<ip_library name="seq"/>
<ip_qualid name="set_def2"/>
</pr_pos>
<pr_pos name="set_def3" id="6429"
ip_theory="Seq">
<ip_library name="seq"/>
<ip_qualid name="set_def3"/>
</pr_pos>
<pr_pos name="extensionality" id="6463"
ip_theory="Seq">
<ip_library name="seq"/>
<ip_qualid name="extensionality"/>
</pr_pos>
<pr_pos name="cons_length" id="6471"
ip_theory="Seq">
<ip_library name="seq"/>
<ip_qualid name="cons_length"/>
</pr_pos>
<pr_pos name="cons_get" id="6476"
ip_theory="Seq">
<ip_library name="seq"/>
<ip_qualid name="cons_get"/>
</pr_pos>
<pr_pos name="snoc_length" id="6486"
ip_theory="Seq">
<ip_library name="seq"/>
<ip_qualid name="snoc_length"/>
</pr_pos>
<pr_pos name="create_length" id="6566"
ip_theory="Seq">
<ip_library name="seq"/>
<ip_qualid name="create_length"/>
</pr_pos>
<pr_pos name="create_get" id="6571"
ip_theory="Seq">
<ip_library name="seq"/>
<ip_qualid name="create_get"/>
</pr_pos>
<meta name="remove_logic">
<meta_arg_ls id="10"/>
</meta>
<meta name="remove_logic">
<meta_arg_ls id="15"/>
</meta>
<meta name="remove_logic">
<meta_arg_ls id="272"/>
</meta>
<meta name="remove_logic">
<meta_arg_ls id="273"/>
</meta>
<meta name="remove_logic">
<meta_arg_ls id="276"/>
</meta>
<meta name="remove_logic">
<meta_arg_ls id="1442"/>
</meta>
<meta name="remove_logic">
<meta_arg_ls id="1443"/>
</meta>
<meta name="remove_logic">
<meta_arg_ls id="1444"/>
</meta>
<meta name="remove_logic">
<meta_arg_ls id="1512"/>
</meta>
<meta name="remove_logic">
<meta_arg_ls id="2971"/>