TSTP Solution File: SWV302-2 by Otter---3.3
View Problem
- Process Solution
%------------------------------------------------------------------------------
% File : Otter---3.3
% Problem : SWV302-2 : TPTP v8.1.0. Released v3.2.0.
% Transfm : none
% Format : tptp:raw
% Command : otter-tptp-script %s
% Computer : n009.cluster.edu
% Model : x86_64 x86_64
% CPU : Intel(R) Xeon(R) CPU E5-2620 v4 2.10GHz
% Memory : 8042.1875MB
% OS : Linux 3.10.0-693.el7.x86_64
% CPULimit : 300s
% WCLimit : 300s
% DateTime : Wed Jul 27 13:20:26 EDT 2022
% Result : Unsatisfiable 2.12s 1.90s
% Output : Refutation 2.12s
% Verified :
% SZS Type : Refutation
% Derivation depth : 6
% Number of leaves : 8
% Syntax : Number of clauses : 15 ( 9 unt; 2 nHn; 15 RR)
% Number of literals : 22 ( 2 equ; 7 neg)
% Maximal clause size : 3 ( 1 avg)
% Maximal term depth : 11 ( 2 avg)
% Number of predicates : 3 ( 1 usr; 1 prp; 0-3 aty)
% Number of functors : 23 ( 23 usr; 12 con; 0-3 aty)
% Number of variables : 9 ( 3 sgn)
% Comments :
%------------------------------------------------------------------------------
cnf(1,axiom,
( c_in(c_Event_Oevent_OSays(c_Message_Oagent_OServer,v_B,c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(c_Message_Omsg_OCrypt(c_Public_OshrK(v_A),c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OKey(v_K))),c_Message_Omsg_OCrypt(c_Public_OshrK(v_B),c_Message_Omsg_OMPair(v_NB,c_Message_Omsg_OKey(v_K)))))),c_List_Oset(v_evs2,tc_Event_Oevent),tc_Event_Oevent)
| ~ c_in(c_Event_Oevent_OSays(v_B,c_Message_Oagent_OServer,c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(v_A),c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(v_B),c_Message_Omsg_OMPair(A,c_Message_Omsg_OCrypt(c_Public_OshrK(v_B),c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(v_NB,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(v_A),c_Message_Omsg_OAgent(v_B)))))))))),c_List_Oset(v_evs2,tc_Event_Oevent),tc_Event_Oevent)
| ~ c_in(c_Message_Omsg_OCrypt(c_Public_OshrK(v_B),c_Message_Omsg_OMPair(v_NB,c_Message_Omsg_OKey(v_K))),c_Message_Oparts(c_Event_Oknows(c_Message_Oagent_OSpy,v_evs2)),tc_Message_Omsg) ),
file('SWV302-2.p',unknown),
[] ).
cnf(2,axiom,
~ c_in(c_Message_Omsg_ONonce(v_NBa),c_Event_Oused(v_evs2),tc_Message_Omsg),
file('SWV302-2.p',unknown),
[] ).
cnf(3,axiom,
~ c_in(c_Event_Oevent_OSays(c_Message_Oagent_OServer,v_B,c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(c_Message_Omsg_OCrypt(c_Public_OshrK(v_A),c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OKey(v_K))),c_Message_Omsg_OCrypt(c_Public_OshrK(v_B),c_Message_Omsg_OMPair(v_NB,c_Message_Omsg_OKey(v_K)))))),c_List_Oset(v_evs2,tc_Event_Oevent),tc_Event_Oevent),
file('SWV302-2.p',unknown),
[] ).
cnf(4,axiom,
( ~ c_in(A,c_Message_Oparts(c_Event_Oknows(c_Message_Oagent_OSpy,B)),tc_Message_Omsg)
| c_in(A,c_Event_Oused(B),tc_Message_Omsg) ),
file('SWV302-2.p',unknown),
[] ).
cnf(5,axiom,
( ~ c_in(c_Message_Omsg_OMPair(A,B),c_Message_Oparts(C),tc_Message_Omsg)
| c_in(A,c_Message_Oparts(C),tc_Message_Omsg) ),
file('SWV302-2.p',unknown),
[] ).
cnf(6,axiom,
( ~ c_in(c_Message_Omsg_OCrypt(A,B),c_Message_Oparts(C),tc_Message_Omsg)
| c_in(B,c_Message_Oparts(C),tc_Message_Omsg) ),
file('SWV302-2.p',unknown),
[] ).
cnf(8,axiom,
( c_in(c_Event_Oevent_OSays(v_B,c_Message_Oagent_OServer,c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(v_A),c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(v_B),c_Message_Omsg_OMPair(v_x,c_Message_Omsg_OCrypt(c_Public_OshrK(v_B),c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(v_NB,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(v_A),c_Message_Omsg_OAgent(v_B)))))))))),c_List_Oset(v_evs2,tc_Event_Oevent),tc_Event_Oevent)
| v_NB = c_Message_Omsg_ONonce(v_NBa) ),
file('SWV302-2.p',unknown),
[] ).
cnf(9,plain,
( c_in(c_Event_Oevent_OSays(v_B,c_Message_Oagent_OServer,c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(v_A),c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(v_B),c_Message_Omsg_OMPair(v_x,c_Message_Omsg_OCrypt(c_Public_OshrK(v_B),c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(v_NB,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(v_A),c_Message_Omsg_OAgent(v_B)))))))))),c_List_Oset(v_evs2,tc_Event_Oevent),tc_Event_Oevent)
| c_Message_Omsg_ONonce(v_NBa) = v_NB ),
inference(flip,[status(thm),theory(equality)],[inference(copy,[status(thm)],[8])]),
[iquote('copy,8,flip.2')] ).
cnf(10,axiom,
c_in(c_Message_Omsg_OCrypt(c_Public_OshrK(v_B),c_Message_Omsg_OMPair(v_NB,c_Message_Omsg_OKey(v_K))),c_Message_Oparts(c_Event_Oknows(c_Message_Oagent_OSpy,v_evs2)),tc_Message_Omsg),
file('SWV302-2.p',unknown),
[] ).
cnf(11,plain,
c_in(c_Message_Omsg_OMPair(v_NB,c_Message_Omsg_OKey(v_K)),c_Message_Oparts(c_Event_Oknows(c_Message_Oagent_OSpy,v_evs2)),tc_Message_Omsg),
inference(hyper,[status(thm)],[10,6]),
[iquote('hyper,10,6')] ).
cnf(13,plain,
c_in(v_NB,c_Message_Oparts(c_Event_Oknows(c_Message_Oagent_OSpy,v_evs2)),tc_Message_Omsg),
inference(hyper,[status(thm)],[11,5]),
[iquote('hyper,11,5')] ).
cnf(15,plain,
c_in(v_NB,c_Event_Oused(v_evs2),tc_Message_Omsg),
inference(hyper,[status(thm)],[13,4]),
[iquote('hyper,13,4')] ).
cnf(16,plain,
c_in(c_Event_Oevent_OSays(v_B,c_Message_Oagent_OServer,c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(v_A),c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(v_B),c_Message_Omsg_OMPair(v_x,c_Message_Omsg_OCrypt(c_Public_OshrK(v_B),c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(v_NB,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(v_A),c_Message_Omsg_OAgent(v_B)))))))))),c_List_Oset(v_evs2,tc_Event_Oevent),tc_Event_Oevent),
inference(unit_del,[status(thm)],[inference(para_from,[status(thm),theory(equality)],[9,2]),15]),
[iquote('para_from,9.2.1,2.1.1,unit_del,15')] ).
cnf(17,plain,
c_in(c_Event_Oevent_OSays(c_Message_Oagent_OServer,v_B,c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(c_Message_Omsg_OCrypt(c_Public_OshrK(v_A),c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OKey(v_K))),c_Message_Omsg_OCrypt(c_Public_OshrK(v_B),c_Message_Omsg_OMPair(v_NB,c_Message_Omsg_OKey(v_K)))))),c_List_Oset(v_evs2,tc_Event_Oevent),tc_Event_Oevent),
inference(hyper,[status(thm)],[16,1,10]),
[iquote('hyper,16,1,10')] ).
cnf(18,plain,
$false,
inference(binary,[status(thm)],[17,3]),
[iquote('binary,17.1,3.1')] ).
%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.07/0.12 % Problem : SWV302-2 : TPTP v8.1.0. Released v3.2.0.
% 0.07/0.13 % Command : otter-tptp-script %s
% 0.13/0.33 % Computer : n009.cluster.edu
% 0.13/0.33 % Model : x86_64 x86_64
% 0.13/0.33 % CPU : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
% 0.13/0.33 % Memory : 8042.1875MB
% 0.13/0.33 % OS : Linux 3.10.0-693.el7.x86_64
% 0.13/0.33 % CPULimit : 300
% 0.13/0.33 % WCLimit : 300
% 0.13/0.33 % DateTime : Wed Jul 27 05:36:06 EDT 2022
% 0.13/0.34 % CPUTime :
% 2.12/1.90 ----- Otter 3.3f, August 2004 -----
% 2.12/1.90 The process was started by sandbox on n009.cluster.edu,
% 2.12/1.90 Wed Jul 27 05:36:06 2022
% 2.12/1.90 The command was "./otter". The process ID is 2439.
% 2.12/1.90
% 2.12/1.90 set(prolog_style_variables).
% 2.12/1.90 set(auto).
% 2.12/1.90 dependent: set(auto1).
% 2.12/1.90 dependent: set(process_input).
% 2.12/1.90 dependent: clear(print_kept).
% 2.12/1.90 dependent: clear(print_new_demod).
% 2.12/1.90 dependent: clear(print_back_demod).
% 2.12/1.90 dependent: clear(print_back_sub).
% 2.12/1.90 dependent: set(control_memory).
% 2.12/1.90 dependent: assign(max_mem, 12000).
% 2.12/1.90 dependent: assign(pick_given_ratio, 4).
% 2.12/1.90 dependent: assign(stats_level, 1).
% 2.12/1.90 dependent: assign(max_seconds, 10800).
% 2.12/1.90 clear(print_given).
% 2.12/1.90
% 2.12/1.90 list(usable).
% 2.12/1.90 0 [] A=A.
% 2.12/1.90 0 [] c_in(c_Event_Oevent_OSays(v_B,c_Message_Oagent_OServer,c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(v_A),c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(v_B),c_Message_Omsg_OMPair(v_x,c_Message_Omsg_OCrypt(c_Public_OshrK(v_B),c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(v_NB,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(v_A),c_Message_Omsg_OAgent(v_B)))))))))),c_List_Oset(v_evs2,tc_Event_Oevent),tc_Event_Oevent)|v_NB=c_Message_Omsg_ONonce(v_NBa).
% 2.12/1.90 0 [] c_in(c_Event_Oevent_OSays(c_Message_Oagent_OServer,v_B,c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(c_Message_Omsg_OCrypt(c_Public_OshrK(v_A),c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OKey(v_K))),c_Message_Omsg_OCrypt(c_Public_OshrK(v_B),c_Message_Omsg_OMPair(v_NB,c_Message_Omsg_OKey(v_K)))))),c_List_Oset(v_evs2,tc_Event_Oevent),tc_Event_Oevent)| -c_in(c_Event_Oevent_OSays(v_B,c_Message_Oagent_OServer,c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(v_A),c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(v_B),c_Message_Omsg_OMPair(V_U,c_Message_Omsg_OCrypt(c_Public_OshrK(v_B),c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(v_NB,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(v_A),c_Message_Omsg_OAgent(v_B)))))))))),c_List_Oset(v_evs2,tc_Event_Oevent),tc_Event_Oevent)| -c_in(c_Message_Omsg_OCrypt(c_Public_OshrK(v_B),c_Message_Omsg_OMPair(v_NB,c_Message_Omsg_OKey(v_K))),c_Message_Oparts(c_Event_Oknows(c_Message_Oagent_OSpy,v_evs2)),tc_Message_Omsg).
% 2.12/1.90 0 [] -c_in(c_Message_Omsg_ONonce(v_NBa),c_Event_Oused(v_evs2),tc_Message_Omsg).
% 2.12/1.90 0 [] c_in(c_Message_Omsg_OCrypt(c_Public_OshrK(v_B),c_Message_Omsg_OMPair(v_NB,c_Message_Omsg_OKey(v_K))),c_Message_Oparts(c_Event_Oknows(c_Message_Oagent_OSpy,v_evs2)),tc_Message_Omsg).
% 2.12/1.90 0 [] -c_in(c_Event_Oevent_OSays(c_Message_Oagent_OServer,v_B,c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(c_Message_Omsg_OCrypt(c_Public_OshrK(v_A),c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OKey(v_K))),c_Message_Omsg_OCrypt(c_Public_OshrK(v_B),c_Message_Omsg_OMPair(v_NB,c_Message_Omsg_OKey(v_K)))))),c_List_Oset(v_evs2,tc_Event_Oevent),tc_Event_Oevent).
% 2.12/1.90 0 [] -c_in(V_c,c_Message_Oparts(c_Event_Oknows(c_Message_Oagent_OSpy,V_evs)),tc_Message_Omsg)|c_in(V_c,c_Event_Oused(V_evs),tc_Message_Omsg).
% 2.12/1.90 0 [] -c_in(c_Message_Omsg_OMPair(V_X,V_Y),c_Message_Oparts(V_H),tc_Message_Omsg)|c_in(V_X,c_Message_Oparts(V_H),tc_Message_Omsg).
% 2.12/1.90 0 [] -c_in(c_Message_Omsg_OCrypt(V_K,V_X),c_Message_Oparts(V_H),tc_Message_Omsg)|c_in(V_X,c_Message_Oparts(V_H),tc_Message_Omsg).
% 2.12/1.90 end_of_list.
% 2.12/1.90
% 2.12/1.90 SCAN INPUT: prop=0, horn=0, equality=1, symmetry=0, max_lits=3.
% 2.12/1.90
% 2.12/1.90 This ia a non-Horn set with equality. The strategy will be
% 2.12/1.90 Knuth-Bendix, ordered hyper_res, factoring, and unit
% 2.12/1.90 deletion, with positive clauses in sos and nonpositive
% 2.12/1.90 clauses in usable.
% 2.12/1.90
% 2.12/1.90 dependent: set(knuth_bendix).
% 2.12/1.90 dependent: set(anl_eq).
% 2.12/1.90 dependent: set(para_from).
% 2.12/1.90 dependent: set(para_into).
% 2.12/1.90 dependent: clear(para_from_right).
% 2.12/1.90 dependent: clear(para_into_right).
% 2.12/1.90 dependent: set(para_from_vars).
% 2.12/1.90 dependent: set(eq_units_both_ways).
% 2.12/1.90 dependent: set(dynamic_demod_all).
% 2.12/1.90 dependent: set(dynamic_demod).
% 2.12/1.90 dependent: set(order_eq).
% 2.12/1.90 dependent: set(back_demod).
% 2.12/1.90 dependent: set(lrpo).
% 2.12/1.90 dependent: set(hyper_res).
% 2.12/1.90 dependent: set(unit_deletion).
% 2.12/1.90 dependent: set(factor).
% 2.12/1.90
% 2.12/1.90 ------------> process usable:
% 2.12/1.90 ** KEPT (pick-wt=68): 1 [] c_in(c_Event_Oevent_OSays(c_Message_Oagent_OServer,v_B,c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(c_Message_Omsg_OCrypt(c_Public_OshrK(v_A),c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OKey(v_K))),c_Message_Omsg_OCrypt(c_Public_OshrK(v_B),c_Message_Omsg_OMPair(v_NB,c_Message_Omsg_OKey(v_K)))))),c_List_Oset(v_evs2,tc_Event_Oevent),tc_Event_Oevent)| -c_in(c_Event_Oevent_OSays(v_B,c_Message_Oagent_OServer,c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(v_A),c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(v_B),c_Message_Omsg_OMPair(A,c_Message_Omsg_OCrypt(c_Public_OshrK(v_B),c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(v_NB,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(v_A),c_Message_Omsg_OAgent(v_B)))))))))),c_List_Oset(v_evs2,tc_Event_Oevent),tc_Event_Oevent)| -c_in(c_Message_Omsg_OCrypt(c_Public_OshrK(v_B),c_Message_Omsg_OMPair(v_NB,c_Message_Omsg_OKey(v_K))),c_Message_Oparts(c_Event_Oknows(c_Message_Oagent_OSpy,v_evs2)),tc_Message_Omsg).
% 2.12/1.90 ** KEPT (pick-wt=6): 2 [] -c_in(c_Message_Omsg_ONonce(v_NBa),c_Event_Oused(v_evs2),tc_Message_Omsg).
% 2.12/1.90 ** KEPT (pick-wt=25): 3 [] -c_in(c_Event_Oevent_OSays(c_Message_Oagent_OServer,v_B,c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(c_Message_Omsg_OCrypt(c_Public_OshrK(v_A),c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OKey(v_K))),c_Message_Omsg_OCrypt(c_Public_OshrK(v_B),c_Message_Omsg_OMPair(v_NB,c_Message_Omsg_OKey(v_K)))))),c_List_Oset(v_evs2,tc_Event_Oevent),tc_Event_Oevent).
% 2.12/1.90 ** KEPT (pick-wt=12): 4 [] -c_in(A,c_Message_Oparts(c_Event_Oknows(c_Message_Oagent_OSpy,B)),tc_Message_Omsg)|c_in(A,c_Event_Oused(B),tc_Message_Omsg).
% 2.12/1.90 ** KEPT (pick-wt=12): 5 [] -c_in(c_Message_Omsg_OMPair(A,B),c_Message_Oparts(C),tc_Message_Omsg)|c_in(A,c_Message_Oparts(C),tc_Message_Omsg).
% 2.12/1.90 ** KEPT (pick-wt=12): 6 [] -c_in(c_Message_Omsg_OCrypt(A,B),c_Message_Oparts(C),tc_Message_Omsg)|c_in(B,c_Message_Oparts(C),tc_Message_Omsg).
% 2.12/1.90
% 2.12/1.90 ------------> process sos:
% 2.12/1.90 ** KEPT (pick-wt=3): 7 [] A=A.
% 2.12/1.90 ** KEPT (pick-wt=34): 9 [copy,8,flip.2] c_in(c_Event_Oevent_OSays(v_B,c_Message_Oagent_OServer,c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(v_A),c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(v_B),c_Message_Omsg_OMPair(v_x,c_Message_Omsg_OCrypt(c_Public_OshrK(v_B),c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(v_NB,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(v_A),c_Message_Omsg_OAgent(v_B)))))))))),c_List_Oset(v_evs2,tc_Event_Oevent),tc_Event_Oevent)|c_Message_Omsg_ONonce(v_NBa)=v_NB.
% 2.12/1.90 ** KEPT (pick-wt=13): 10 [] c_in(c_Message_Omsg_OCrypt(c_Public_OshrK(v_B),c_Message_Omsg_OMPair(v_NB,c_Message_Omsg_OKey(v_K))),c_Message_Oparts(c_Event_Oknows(c_Message_Oagent_OSpy,v_evs2)),tc_Message_Omsg).
% 2.12/1.90 Following clause subsumed by 7 during input processing: 0 [copy,7,flip.1] A=A.
% 2.12/1.90
% 2.12/1.90 ======= end of input processing =======
% 2.12/1.90
% 2.12/1.90 =========== start of search ===========
% 2.12/1.90
% 2.12/1.90 -------- PROOF --------
% 2.12/1.90
% 2.12/1.90 ----> UNIT CONFLICT at 0.00 sec ----> 18 [binary,17.1,3.1] $F.
% 2.12/1.90
% 2.12/1.90 Length of proof is 6. Level of proof is 5.
% 2.12/1.90
% 2.12/1.90 ---------------- PROOF ----------------
% 2.12/1.90 % SZS status Unsatisfiable
% 2.12/1.90 % SZS output start Refutation
% See solution above
% 2.12/1.90 ------------ end of proof -------------
% 2.12/1.90
% 2.12/1.90
% 2.12/1.90 Search stopped by max_proofs option.
% 2.12/1.90
% 2.12/1.90
% 2.12/1.90 Search stopped by max_proofs option.
% 2.12/1.90
% 2.12/1.90 ============ end of search ============
% 2.12/1.90
% 2.12/1.90 -------------- statistics -------------
% 2.12/1.90 clauses given 9
% 2.12/1.90 clauses generated 9
% 2.12/1.90 clauses kept 16
% 2.12/1.90 clauses forward subsumed 3
% 2.12/1.90 clauses back subsumed 1
% 2.12/1.90 Kbytes malloced 1953
% 2.12/1.90
% 2.12/1.90 ----------- times (seconds) -----------
% 2.12/1.90 user CPU time 0.00 (0 hr, 0 min, 0 sec)
% 2.12/1.90 system CPU time 0.00 (0 hr, 0 min, 0 sec)
% 2.12/1.90 wall-clock time 1 (0 hr, 0 min, 1 sec)
% 2.12/1.90
% 2.12/1.90 That finishes the proof of the theorem.
% 2.12/1.90
% 2.12/1.90 Process 2439 finished Wed Jul 27 05:36:07 2022
% 2.12/1.90 Otter interrupted
% 2.12/1.90 PROOF FOUND
%------------------------------------------------------------------------------