TSTP Solution File: GRP102-1 by E-SAT---3.1
View Problem
- Process Solution
%------------------------------------------------------------------------------
% File : E-SAT---3.1
% Problem : GRP102-1 : TPTP v8.1.2. Bugfixed v2.7.0.
% Transfm : none
% Format : tptp:raw
% Command : run_E %s %d THM
% 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 : 2400s
% WCLimit : 300s
% DateTime : Tue Oct 10 17:45:20 EDT 2023
% Result : Unsatisfiable 0.19s 0.51s
% Output : CNFRefutation 0.19s
% Verified :
% SZS Type : Refutation
% Derivation depth : 28
% Number of leaves : 5
% Syntax : Number of clauses : 52 ( 45 unt; 0 nHn; 12 RR)
% Number of literals : 66 ( 65 equ; 22 neg)
% Maximal clause size : 4 ( 1 avg)
% Maximal term depth : 6 ( 2 avg)
% Number of predicates : 2 ( 0 usr; 1 prp; 0-2 aty)
% Number of functors : 11 ( 11 usr; 8 con; 0-2 aty)
% Number of variables : 81 ( 0 sgn)
% Comments :
%------------------------------------------------------------------------------
cnf(identity,axiom,
identity = double_divide(X1,inverse(X1)),
file('/export/starexec/sandbox/tmp/tmp.4XtZ8IMCrj/E---3.1_2988.p',identity) ).
cnf(inverse,axiom,
inverse(X1) = double_divide(X1,identity),
file('/export/starexec/sandbox/tmp/tmp.4XtZ8IMCrj/E---3.1_2988.p',inverse) ).
cnf(single_axiom,axiom,
double_divide(double_divide(X1,double_divide(double_divide(double_divide(X2,X1),X3),double_divide(X2,identity))),double_divide(identity,identity)) = X3,
file('/export/starexec/sandbox/tmp/tmp.4XtZ8IMCrj/E---3.1_2988.p',single_axiom) ).
cnf(prove_these_axioms,negated_conjecture,
( multiply(inverse(a1),a1) != identity
| multiply(identity,a2) != a2
| multiply(multiply(a3,b3),c3) != multiply(a3,multiply(b3,c3))
| multiply(a4,b4) != multiply(b4,a4) ),
file('/export/starexec/sandbox/tmp/tmp.4XtZ8IMCrj/E---3.1_2988.p',prove_these_axioms) ).
cnf(multiply,axiom,
multiply(X1,X2) = double_divide(double_divide(X2,X1),identity),
file('/export/starexec/sandbox/tmp/tmp.4XtZ8IMCrj/E---3.1_2988.p',multiply) ).
cnf(c_0_5,axiom,
identity = double_divide(X1,inverse(X1)),
identity ).
cnf(c_0_6,axiom,
inverse(X1) = double_divide(X1,identity),
inverse ).
cnf(c_0_7,axiom,
double_divide(double_divide(X1,double_divide(double_divide(double_divide(X2,X1),X3),double_divide(X2,identity))),double_divide(identity,identity)) = X3,
single_axiom ).
cnf(c_0_8,plain,
double_divide(X1,double_divide(X1,identity)) = identity,
inference(rw,[status(thm)],[c_0_5,c_0_6]) ).
cnf(c_0_9,plain,
double_divide(double_divide(double_divide(X1,identity),double_divide(double_divide(identity,X2),double_divide(X1,identity))),double_divide(identity,identity)) = X2,
inference(spm,[status(thm)],[c_0_7,c_0_8]) ).
cnf(c_0_10,plain,
double_divide(double_divide(double_divide(double_divide(identity,X1),identity),identity),double_divide(identity,identity)) = X1,
inference(spm,[status(thm)],[c_0_9,c_0_8]) ).
cnf(c_0_11,plain,
double_divide(double_divide(double_divide(identity,identity),identity),double_divide(identity,identity)) = double_divide(identity,identity),
inference(spm,[status(thm)],[c_0_10,c_0_8]) ).
cnf(c_0_12,plain,
double_divide(double_divide(identity,identity),double_divide(identity,identity)) = double_divide(identity,identity),
inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_7,c_0_11]),c_0_8]) ).
cnf(c_0_13,plain,
double_divide(identity,identity) = identity,
inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_7,c_0_12]),c_0_12]),c_0_8]),c_0_8]) ).
cnf(c_0_14,plain,
double_divide(double_divide(X1,double_divide(double_divide(double_divide(X2,X1),X3),double_divide(X2,identity))),identity) = X3,
inference(rw,[status(thm)],[c_0_7,c_0_13]) ).
cnf(c_0_15,plain,
double_divide(double_divide(identity,double_divide(double_divide(X1,X2),X1)),identity) = X2,
inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_14,c_0_14]),c_0_14]) ).
cnf(c_0_16,plain,
double_divide(double_divide(identity,double_divide(identity,X1)),identity) = double_divide(X1,identity),
inference(spm,[status(thm)],[c_0_15,c_0_8]) ).
cnf(c_0_17,plain,
double_divide(double_divide(double_divide(double_divide(identity,X1),identity),identity),identity) = X1,
inference(rw,[status(thm)],[c_0_10,c_0_13]) ).
cnf(c_0_18,plain,
double_divide(double_divide(identity,double_divide(X1,identity)),identity) = double_divide(identity,X1),
inference(spm,[status(thm)],[c_0_15,c_0_16]) ).
cnf(c_0_19,plain,
double_divide(double_divide(double_divide(identity,X1),identity),identity) = double_divide(X1,identity),
inference(spm,[status(thm)],[c_0_17,c_0_18]) ).
cnf(c_0_20,plain,
double_divide(double_divide(X1,identity),identity) = X1,
inference(rw,[status(thm)],[c_0_17,c_0_19]) ).
cnf(c_0_21,plain,
double_divide(double_divide(double_divide(X1,double_divide(identity,X2)),X3),double_divide(X1,identity)) = double_divide(double_divide(X2,X3),double_divide(identity,identity)),
inference(spm,[status(thm)],[c_0_7,c_0_7]) ).
cnf(c_0_22,plain,
double_divide(identity,X1) = double_divide(X1,identity),
inference(rw,[status(thm)],[c_0_19,c_0_20]) ).
cnf(c_0_23,plain,
double_divide(identity,double_divide(identity,X1)) = X1,
inference(spm,[status(thm)],[c_0_15,c_0_18]) ).
cnf(c_0_24,plain,
double_divide(double_divide(double_divide(X1,double_divide(identity,X2)),X3),double_divide(X1,identity)) = double_divide(identity,double_divide(X2,X3)),
inference(rw,[status(thm)],[inference(rw,[status(thm)],[c_0_21,c_0_13]),c_0_22]) ).
cnf(c_0_25,plain,
double_divide(double_divide(X1,X2),X1) = X2,
inference(rw,[status(thm)],[inference(rw,[status(thm)],[c_0_15,c_0_22]),c_0_23]) ).
cnf(c_0_26,plain,
double_divide(double_divide(identity,X1),double_divide(X2,identity)) = double_divide(identity,double_divide(X1,X2)),
inference(spm,[status(thm)],[c_0_24,c_0_25]) ).
cnf(c_0_27,plain,
double_divide(double_divide(identity,X1),X2) = double_divide(identity,double_divide(X1,double_divide(identity,X2))),
inference(spm,[status(thm)],[c_0_26,c_0_25]) ).
cnf(c_0_28,plain,
double_divide(X1,double_divide(X2,X1)) = X2,
inference(spm,[status(thm)],[c_0_25,c_0_25]) ).
cnf(c_0_29,plain,
double_divide(double_divide(X1,identity),X2) = double_divide(identity,double_divide(X1,double_divide(identity,X2))),
inference(spm,[status(thm)],[c_0_27,c_0_22]) ).
cnf(c_0_30,plain,
double_divide(double_divide(double_divide(X1,X2),X3),double_divide(X1,identity)) = double_divide(X2,double_divide(identity,X3)),
inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_24,c_0_28]),c_0_29]),c_0_23]) ).
cnf(c_0_31,plain,
double_divide(identity,double_divide(X1,double_divide(X1,double_divide(identity,X2)))) = X2,
inference(rw,[status(thm)],[inference(rw,[status(thm)],[c_0_14,c_0_22]),c_0_30]) ).
cnf(c_0_32,negated_conjecture,
( multiply(inverse(a1),a1) != identity
| multiply(identity,a2) != a2
| multiply(multiply(a3,b3),c3) != multiply(a3,multiply(b3,c3))
| multiply(a4,b4) != multiply(b4,a4) ),
prove_these_axioms ).
cnf(c_0_33,axiom,
multiply(X1,X2) = double_divide(double_divide(X2,X1),identity),
multiply ).
cnf(c_0_34,plain,
double_divide(X1,double_divide(X1,X2)) = X2,
inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_31,c_0_27]),c_0_23]),c_0_27]),c_0_23]),c_0_23]) ).
cnf(c_0_35,negated_conjecture,
( double_divide(double_divide(double_divide(double_divide(c3,b3),identity),a3),identity) != double_divide(double_divide(c3,double_divide(double_divide(b3,a3),identity)),identity)
| double_divide(double_divide(a4,b4),identity) != double_divide(double_divide(b4,a4),identity)
| double_divide(double_divide(a2,identity),identity) != a2
| double_divide(identity,identity) != identity ),
inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[c_0_32,c_0_6]),c_0_33]),c_0_33]),c_0_33]),c_0_33]),c_0_33]),c_0_33]),c_0_33]),c_0_8]),c_0_33]) ).
cnf(c_0_36,plain,
double_divide(X1,X2) = double_divide(X2,X1),
inference(spm,[status(thm)],[c_0_25,c_0_34]) ).
cnf(c_0_37,negated_conjecture,
( double_divide(double_divide(double_divide(double_divide(c3,b3),identity),a3),identity) != double_divide(double_divide(c3,double_divide(double_divide(b3,a3),identity)),identity)
| double_divide(double_divide(a4,b4),identity) != double_divide(double_divide(b4,a4),identity)
| double_divide(double_divide(a2,identity),identity) != a2 ),
inference(cn,[status(thm)],[inference(rw,[status(thm)],[c_0_35,c_0_13])]) ).
cnf(c_0_38,plain,
double_divide(identity,double_divide(X1,double_divide(identity,double_divide(double_divide(X1,X2),X3)))) = double_divide(X2,double_divide(identity,X3)),
inference(rw,[status(thm)],[inference(rw,[status(thm)],[c_0_30,c_0_36]),c_0_29]) ).
cnf(c_0_39,negated_conjecture,
( double_divide(double_divide(double_divide(double_divide(c3,b3),identity),a3),identity) != double_divide(double_divide(c3,double_divide(double_divide(b3,a3),identity)),identity)
| double_divide(double_divide(a4,b4),identity) != double_divide(double_divide(b4,a4),identity) ),
inference(cn,[status(thm)],[inference(rw,[status(thm)],[c_0_37,c_0_20])]) ).
cnf(c_0_40,plain,
double_divide(X1,double_divide(identity,double_divide(X2,double_divide(identity,X1)))) = double_divide(identity,X2),
inference(spm,[status(thm)],[c_0_28,c_0_27]) ).
cnf(c_0_41,plain,
double_divide(X1,double_divide(identity,double_divide(double_divide(X1,X2),X3))) = double_divide(identity,double_divide(X2,double_divide(identity,X3))),
inference(spm,[status(thm)],[c_0_34,c_0_38]) ).
cnf(c_0_42,negated_conjecture,
( double_divide(identity,double_divide(double_divide(identity,double_divide(c3,b3)),a3)) != double_divide(identity,double_divide(c3,double_divide(identity,double_divide(b3,a3))))
| double_divide(identity,double_divide(a4,b4)) != double_divide(identity,double_divide(b4,a4)) ),
inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[c_0_39,c_0_22]),c_0_22]),c_0_22]),c_0_22]),c_0_22]),c_0_22]) ).
cnf(c_0_43,plain,
double_divide(X1,double_divide(identity,X2)) = double_divide(identity,double_divide(X2,double_divide(identity,X1))),
inference(spm,[status(thm)],[c_0_34,c_0_40]) ).
cnf(c_0_44,plain,
double_divide(double_divide(X1,double_divide(identity,X2)),X3) = double_divide(X2,double_divide(X1,double_divide(identity,X3))),
inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_41,c_0_40]),c_0_27]),c_0_23]),c_0_27]),c_0_23]),c_0_34]) ).
cnf(c_0_45,plain,
double_divide(identity,double_divide(double_divide(X1,X2),X3)) = double_divide(X1,double_divide(identity,double_divide(X2,double_divide(identity,X3)))),
inference(spm,[status(thm)],[c_0_34,c_0_41]) ).
cnf(c_0_46,negated_conjecture,
( double_divide(double_divide(c3,b3),double_divide(a3,identity)) != double_divide(identity,double_divide(c3,double_divide(identity,double_divide(b3,a3))))
| double_divide(identity,double_divide(a4,b4)) != double_divide(identity,double_divide(b4,a4)) ),
inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[c_0_42,c_0_27]),c_0_22]),c_0_23]) ).
cnf(c_0_47,plain,
double_divide(X1,double_divide(X2,X3)) = double_divide(identity,double_divide(X3,double_divide(X1,double_divide(identity,X2)))),
inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_43,c_0_43]),c_0_44]),c_0_23]) ).
cnf(c_0_48,plain,
double_divide(double_divide(X1,X2),X3) = double_divide(identity,double_divide(X1,double_divide(identity,double_divide(X2,double_divide(identity,X3))))),
inference(spm,[status(thm)],[c_0_34,c_0_45]) ).
cnf(c_0_49,negated_conjecture,
double_divide(identity,double_divide(a3,double_divide(identity,double_divide(b3,c3)))) != double_divide(identity,double_divide(c3,double_divide(identity,double_divide(a3,b3)))),
inference(cn,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[c_0_46,c_0_36]),c_0_36]),c_0_29]),c_0_36]),c_0_36])]) ).
cnf(c_0_50,plain,
double_divide(X1,double_divide(X2,double_divide(X3,X4))) = double_divide(X4,double_divide(X2,double_divide(X3,X1))),
inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_47,c_0_47]),c_0_13]),c_0_48]),c_0_28]),c_0_48]),c_0_48]),c_0_34]),c_0_34]),c_0_34]),c_0_34]),c_0_34]) ).
cnf(c_0_51,negated_conjecture,
$false,
inference(cn,[status(thm)],[inference(rw,[status(thm)],[inference(rw,[status(thm)],[c_0_49,c_0_50]),c_0_36])]),
[proof] ).
%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.11/0.12 % Problem : GRP102-1 : TPTP v8.1.2. Bugfixed v2.7.0.
% 0.11/0.13 % Command : run_E %s %d THM
% 0.13/0.34 % Computer : n009.cluster.edu
% 0.13/0.34 % Model : x86_64 x86_64
% 0.13/0.34 % CPU : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
% 0.13/0.34 % Memory : 8042.1875MB
% 0.13/0.34 % OS : Linux 3.10.0-693.el7.x86_64
% 0.13/0.34 % CPULimit : 2400
% 0.13/0.34 % WCLimit : 300
% 0.13/0.34 % DateTime : Tue Oct 3 02:47:14 EDT 2023
% 0.13/0.35 % CPUTime :
% 0.19/0.48 Running first-order model finding
% 0.19/0.48 Running: /export/starexec/sandbox/solver/bin/eprover --delete-bad-limit=2000000000 --definitional-cnf=24 -s --print-statistics -R --print-version --proof-object --satauto-schedule=8 --cpu-limit=300 /export/starexec/sandbox/tmp/tmp.4XtZ8IMCrj/E---3.1_2988.p
% 0.19/0.51 # Version: 3.1pre001
% 0.19/0.51 # Preprocessing class: FSSSSMSMSSSNFFN.
% 0.19/0.51 # Scheduled 4 strats onto 8 cores with 300 seconds (2400 total)
% 0.19/0.51 # Starting G----_0031_C18_F1_SE_CS_SP_S0Y with 1500s (5) cores
% 0.19/0.51 # Starting new_bool_3 with 300s (1) cores
% 0.19/0.51 # Starting new_bool_1 with 300s (1) cores
% 0.19/0.51 # Starting sh5l with 300s (1) cores
% 0.19/0.51 # new_bool_1 with pid 3067 completed with status 0
% 0.19/0.51 # Result found by new_bool_1
% 0.19/0.51 # Preprocessing class: FSSSSMSMSSSNFFN.
% 0.19/0.51 # Scheduled 4 strats onto 8 cores with 300 seconds (2400 total)
% 0.19/0.51 # Starting G----_0031_C18_F1_SE_CS_SP_S0Y with 1500s (5) cores
% 0.19/0.51 # Starting new_bool_3 with 300s (1) cores
% 0.19/0.51 # Starting new_bool_1 with 300s (1) cores
% 0.19/0.51 # SinE strategy is GSinE(CountFormulas,hypos,1.5,,3,20000,1.0)
% 0.19/0.51 # Search class: FUHPM-FFSF21-MFFFFFNN
% 0.19/0.51 # Scheduled 5 strats onto 1 cores with 300 seconds (300 total)
% 0.19/0.51 # Starting H----_047_B31_F1_PI_AE_R4_CS_SP_S2S with 181s (1) cores
% 0.19/0.51 # H----_047_B31_F1_PI_AE_R4_CS_SP_S2S with pid 3069 completed with status 0
% 0.19/0.51 # Result found by H----_047_B31_F1_PI_AE_R4_CS_SP_S2S
% 0.19/0.51 # Preprocessing class: FSSSSMSMSSSNFFN.
% 0.19/0.51 # Scheduled 4 strats onto 8 cores with 300 seconds (2400 total)
% 0.19/0.51 # Starting G----_0031_C18_F1_SE_CS_SP_S0Y with 1500s (5) cores
% 0.19/0.51 # Starting new_bool_3 with 300s (1) cores
% 0.19/0.51 # Starting new_bool_1 with 300s (1) cores
% 0.19/0.51 # SinE strategy is GSinE(CountFormulas,hypos,1.5,,3,20000,1.0)
% 0.19/0.51 # Search class: FUHPM-FFSF21-MFFFFFNN
% 0.19/0.51 # Scheduled 5 strats onto 1 cores with 300 seconds (300 total)
% 0.19/0.51 # Starting H----_047_B31_F1_PI_AE_R4_CS_SP_S2S with 181s (1) cores
% 0.19/0.51 # Preprocessing time : 0.001 s
% 0.19/0.51
% 0.19/0.51 # Proof found!
% 0.19/0.51 # SZS status Unsatisfiable
% 0.19/0.51 # SZS output start CNFRefutation
% See solution above
% 0.19/0.51 # Parsed axioms : 5
% 0.19/0.51 # Removed by relevancy pruning/SinE : 0
% 0.19/0.51 # Initial clauses : 5
% 0.19/0.51 # Removed in clause preprocessing : 0
% 0.19/0.51 # Initial clauses in saturation : 5
% 0.19/0.51 # Processed clauses : 324
% 0.19/0.51 # ...of these trivial : 87
% 0.19/0.51 # ...subsumed : 165
% 0.19/0.51 # ...remaining for further processing : 72
% 0.19/0.51 # Other redundant clauses eliminated : 0
% 0.19/0.51 # Clauses deleted for lack of memory : 0
% 0.19/0.51 # Backward-subsumed : 1
% 0.19/0.51 # Backward-rewritten : 52
% 0.19/0.51 # Generated clauses : 2381
% 0.19/0.51 # ...of the previous two non-redundant : 1368
% 0.19/0.51 # ...aggressively subsumed : 0
% 0.19/0.51 # Contextual simplify-reflections : 0
% 0.19/0.51 # Paramodulations : 2381
% 0.19/0.51 # Factorizations : 0
% 0.19/0.51 # NegExts : 0
% 0.19/0.51 # Equation resolutions : 0
% 0.19/0.51 # Total rewrite steps : 5816
% 0.19/0.51 # Propositional unsat checks : 0
% 0.19/0.51 # Propositional check models : 0
% 0.19/0.51 # Propositional check unsatisfiable : 0
% 0.19/0.51 # Propositional clauses : 0
% 0.19/0.51 # Propositional clauses after purity: 0
% 0.19/0.51 # Propositional unsat core size : 0
% 0.19/0.51 # Propositional preprocessing time : 0.000
% 0.19/0.51 # Propositional encoding time : 0.000
% 0.19/0.51 # Propositional solver time : 0.000
% 0.19/0.51 # Success case prop preproc time : 0.000
% 0.19/0.51 # Success case prop encoding time : 0.000
% 0.19/0.51 # Success case prop solver time : 0.000
% 0.19/0.51 # Current number of processed clauses : 19
% 0.19/0.51 # Positive orientable unit clauses : 11
% 0.19/0.51 # Positive unorientable unit clauses: 8
% 0.19/0.51 # Negative unit clauses : 0
% 0.19/0.51 # Non-unit-clauses : 0
% 0.19/0.51 # Current number of unprocessed clauses: 707
% 0.19/0.51 # ...number of literals in the above : 707
% 0.19/0.51 # Current number of archived formulas : 0
% 0.19/0.51 # Current number of archived clauses : 53
% 0.19/0.51 # Clause-clause subsumption calls (NU) : 0
% 0.19/0.51 # Rec. Clause-clause subsumption calls : 0
% 0.19/0.51 # Non-unit clause-clause subsumptions : 0
% 0.19/0.51 # Unit Clause-clause subsumption calls : 49
% 0.19/0.51 # Rewrite failures with RHS unbound : 0
% 0.19/0.51 # BW rewrite match attempts : 391
% 0.19/0.51 # BW rewrite match successes : 221
% 0.19/0.51 # Condensation attempts : 0
% 0.19/0.51 # Condensation successes : 0
% 0.19/0.51 # Termbank termtop insertions : 35375
% 0.19/0.51
% 0.19/0.51 # -------------------------------------------------
% 0.19/0.51 # User time : 0.021 s
% 0.19/0.51 # System time : 0.005 s
% 0.19/0.51 # Total time : 0.026 s
% 0.19/0.51 # Maximum resident set size: 1652 pages
% 0.19/0.51
% 0.19/0.51 # -------------------------------------------------
% 0.19/0.51 # User time : 0.022 s
% 0.19/0.51 # System time : 0.007 s
% 0.19/0.51 # Total time : 0.030 s
% 0.19/0.51 # Maximum resident set size: 1672 pages
% 0.19/0.51 % E---3.1 exiting
%------------------------------------------------------------------------------