Profiling results ----------------- Total cpu time observed: 6716ms (out of 6936ms) Number of samples taken: 32 (once every 210ms) ======================================================================== Caller Idx Total Self Name+src Local% ms(pct) ms(pct) Callee ======================================================================== [1] 6716(100.0%) 0(0.0%) ??? ...lects/racket/private/more-scheme.rkt:261:28 profile-thunk16 [10] 100.0% ------------------------------------------------------------------------ ??? [72] 100.0% [2] 1652(24.6%) 0(0.0%) approximate9 ...ie/master/src/core/taylor.rkt:11:0 loop [11] 78.7% taylor [13] 21.3% ------------------------------------------------------------------------ hash-ref! [79] 100.0% [3] 1068(15.9%) 0(0.0%) ??? ...ies/herbie/master/src/core/taylor.rkt:44:15 hash-ref! [79] 81.3% ??? [14] 18.7% ------------------------------------------------------------------------ hash-ref! [79] 100.0% [4] 868(12.9%) 0(0.0%) ??? ...es/herbie/master/src/core/taylor.rkt:300:23 for-loop [12] 100.0% ------------------------------------------------------------------------ hash-ref! [79] 100.0% [5] 230(3.4%) 0(0.0%) f61 (unknown source) eval-const-expr [29] 100.0% ------------------------------------------------------------------------ matcher [86] 100.0% [6] 200(3.0%) 0(0.0%) ??? ...s/herbie/master/src/core/matcher.rkt:127:11 for-loop [15] 100.0% ------------------------------------------------------------------------ for-loop [108] 100.0% [7] 200(3.0%) 0(0.0%) dispatch-transformer41 (unknown source) apply-transformer52 [16] 100.0% ------------------------------------------------------------------------ for-loop [108] 100.0% [8] 200(3.0%) 0(0.0%) expand-implicit (unknown source) resolve+shift28 [17] 100.0% ------------------------------------------------------------------------ for-loop [108] 100.0% [9] 200(3.0%) 0(0.0%) syntax-e (unknown source) syntax-e/no-taint [18] 100.0% ------------------------------------------------------------------------ ??? [1] 100.0% [10] 6716(100.0%) 0(0.0%) profile-thunk16 ...e/pkgs/profile-lib/main.rkt:9:0 run [19] 100.0% ------------------------------------------------------------------------ approximate9 [2] 100.0% [11] 1300(19.4%) 0(0.0%) loop ...ies/herbie/master/src/core/taylor.rkt:86:4 ??? [72] 82.2% hash-ref! [79] 17.8% ------------------------------------------------------------------------ ??? [4] 100.0% [12] 868(12.9%) 0(0.0%) for-loop ...rbie/master/src/core/taylor.rkt:303:27 hash-ref! [79] 100.0% ------------------------------------------------------------------------ approximate9 [2] 20.1% hash-ref! [79] 39.7% taylor [13] 40.2% [13] 584(8.7%) 0(0.0%) taylor .../herbie/master/src/core/taylor.rkt:169:0 taylor [13] 40.2% taylor-invert [21] 39.7% debug-print [20] 20.1% ------------------------------------------------------------------------ ??? [3] 100.0% [14] 200(3.0%) 0(0.0%) ??? ...es/herbie/master/src/core/taylor.rkt:293:19 hash-ref! [79] 100.0% ------------------------------------------------------------------------ ??? [6] 100.0% [15] 200(3.0%) 0(0.0%) for-loop ...bie/master/src/core/matcher.rkt:129:15 matcher [86] 100.0% ------------------------------------------------------------------------ dispatch-transformer41 [7] 100.0% [16] 200(3.0%) 0(0.0%) apply-transformer52 (unknown source) apply-transformer-in-context [22]100.0% ------------------------------------------------------------------------ expand-implicit [8] 100.0% [17] 200(3.0%) 0(0.0%) resolve+shift28 (unknown source) fallback-loop [23] 100.0% ------------------------------------------------------------------------ syntax-e [9] 100.0% [18] 200(3.0%) 0(0.0%) syntax-e/no-taint (unknown source) loop [80] 100.0% ------------------------------------------------------------------------ profile-thunk16 [10] 100.0% [19] 6716(100.0%) 0(0.0%) run ...et-7.5/share/pkgs/profile-lib/main.rkt:39:2 .../more-scheme.rkt:261:28 [24] 100.0% ------------------------------------------------------------------------ taylor [13] 100.0% [20] 352(5.2%) 352(5.2%) debug-print ...s/herbie/master/src/debug.rkt:110:0 ------------------------------------------------------------------------ taylor [13] 100.0% [21] 232(3.5%) 0(0.0%) taylor-invert .../master/src/core/taylor.rkt:317:0 parse-loop74 [25] 100.0% ------------------------------------------------------------------------ apply-transformer52 [16] 100.0% [22] 200(3.0%) 0(0.0%) apply-transformer-in-context (unknown source) datum->syntax6 [26] 100.0% ------------------------------------------------------------------------ resolve+shift28 [17] 100.0% [23] 200(3.0%) 0(0.0%) fallback-loop (unknown source) for-loop [108] 100.0% ------------------------------------------------------------------------ for-loop [82] 8.4% run [19] 91.6% [24] 6716(100.0%) 182(2.7%) .../more-scheme.rkt:261:28 (unknown source) run-improve47 [27] 63.9% prepare-points-intervals [28] 17.7% oracle-error [31] 5.8% ??? [30] 4.2% get-final-combination [33] 2.8% errors [73] 1.4% ??? [32] 1.4% ??? [72] 1.4% ------------------------------------------------------------------------ taylor-invert [21] 21.7% hash-ref! [79] 78.3% [25] 1070(15.9%) 200(3.0%) parse-loop74 (unknown source) eval-const-expr [29] 81.3% ------------------------------------------------------------------------ apply-transformer-in-context [22]100.0% [26] 200(3.0%) 0(0.0%) datum->syntax6 (unknown source) loop [80] 100.0% ------------------------------------------------------------------------ .../more-scheme.rkt:261:28 [24] 100.0% [27] 4758(70.8%) 0(0.0%) run-improve47 ...bie/master/src/mainloop.rkt:346:0 for-loop [34] 100.0% ------------------------------------------------------------------------ .../more-scheme.rkt:261:28 [24] 100.0% [28] 1190(17.7%) 0(0.0%) prepare-points-intervals ...r/src/points.rkt:120:0 loop [35] 100.0% ------------------------------------------------------------------------ f61 [5] 20.9% parse-loop74 [25] 79.1% [29] 1100(16.4%) 0(0.0%) eval-const-expr ...e/master/src/programs.rkt:120:0 temp85_0 [83] 36.4% eval [37] 21.6% eval-prog [38] 21.1% eval-one-top12 [39] 20.9% ------------------------------------------------------------------------ .../more-scheme.rkt:261:28 [24] 100.0% [30] 570(8.5%) 378(5.6%) ??? .../herbie/master/src/syntax/syntax.rkt:214:17 ??? [107] 33.7% ------------------------------------------------------------------------ .../more-scheme.rkt:261:28 [24] 100.0% [31] 388(5.8%) 0(0.0%) oracle-error ...herbie/master/src/points.rkt:177:0 for-loop [36] 100.0% ------------------------------------------------------------------------ .../more-scheme.rkt:261:28 [24] 100.0% [32] 192(2.9%) 192(2.9%) ??? ...cket-7.5/collects/racket/function.rkt:93:12 ------------------------------------------------------------------------ .../more-scheme.rkt:261:28 [24] 100.0% [33] 188(2.8%) 0(0.0%) get-final-combination ...er/src/mainloop.rkt:371:0 infer-splitpoints [40] 100.0% ------------------------------------------------------------------------ run-improve47 [27] 100.0% [34] 4758(70.8%) 0(0.0%) for-loop ...s/herbie/master/src/mainloop.rkt:365:4 run-iter! [41] 100.0% ------------------------------------------------------------------------ prepare-points-intervals [28] 100.0% [35] 1190(17.7%) 0(0.0%) loop ...ghtlies/herbie/master/src/points.rkt:132:4 loop [42] 65.9% ??? [43] 34.1% ------------------------------------------------------------------------ oracle-error [31] 100.0% [36] 388(5.8%) 0(0.0%) for-loop ...ies/herbie/master/src/points.rkt:178:2 loop [80] 100.0% ------------------------------------------------------------------------ eval-const-expr [29] 100.0% [37] 238(3.5%) 0(0.0%) eval (unknown source) add-ns-scopes [44] 100.0% ------------------------------------------------------------------------ eval-const-expr [29] 100.0% [38] 232(3.5%) 232(3.5%) eval-prog ...s/herbie/master/src/programs.rkt:82:0 ------------------------------------------------------------------------ eval-const-expr [29] 100.0% [39] 230(3.4%) 0(0.0%) eval-one-top12 (unknown source) for-loop [108] 100.0% ------------------------------------------------------------------------ get-final-combination [33] 100.0% [40] 188(2.8%) 0(0.0%) infer-splitpoints ...ter/src/core/regimes.rkt:33:0 for-loop [45] 100.0% ------------------------------------------------------------------------ for-loop [34] 100.0% [41] 4758(70.8%) 0(0.0%) run-iter! .../herbie/master/src/mainloop.rkt:327:0 gen-series! [46] 34.7% finalize-iter! [47] 31.9% simplify! [48] 25.3% gen-rewrites! [49] 8.1% ------------------------------------------------------------------------ loop [35] 100.0% [42] 784(11.7%) 200(3.0%) loop ...ightlies/herbie/master/src/points.rkt:79:2 real->precision [51] 25.5% ??? [52] 25.0% ??? [54] 24.0% ------------------------------------------------------------------------ loop [35] 100.0% [43] 406(6.0%) 200(3.0%) ??? ...ightlies/herbie/master/src/points.rkt:113:6 sample-multi-bounded [50] 50.7% ------------------------------------------------------------------------ eval [37] 100.0% [44] 238(3.5%) 0(0.0%) add-ns-scopes (unknown source) gf [91] 100.0% ------------------------------------------------------------------------ infer-splitpoints [40] 100.0% [45] 188(2.8%) 0(0.0%) for-loop ...erbie/master/src/core/regimes.rkt:45:6 option-on-expr [53] 100.0% ------------------------------------------------------------------------ run-iter! [41] 100.0% [46] 1652(24.6%) 0(0.0%) gen-series! ...erbie/master/src/mainloop.rkt:160:0 for-loop [55] 100.0% ------------------------------------------------------------------------ run-iter! [41] 100.0% [47] 1518(22.6%) 0(0.0%) finalize-iter! ...ie/master/src/mainloop.rkt:278:0 ??? [54] 100.0% ------------------------------------------------------------------------ run-iter! [41] 100.0% [48] 1202(17.9%) 0(0.0%) simplify! .../herbie/master/src/mainloop.rkt:224:0 ??? [56] 100.0% ------------------------------------------------------------------------ run-iter! [41] 100.0% [49] 386(5.7%) 0(0.0%) gen-rewrites! ...bie/master/src/mainloop.rkt:183:0 for-loop [58] 51.8% for-loop [61] 48.2% ------------------------------------------------------------------------ ??? [43] 100.0% [50] 206(3.1%) 0(0.0%) sample-multi-bounded ...master/src/points.rkt:14:0 for-loop [57] 100.0% ------------------------------------------------------------------------ loop [42] 100.0% [51] 200(3.0%) 0(0.0%) real->precision ...e/master/src/programs.rkt:94:11 ??? [72] 100.0% ------------------------------------------------------------------------ loop [42] 100.0% [52] 196(2.9%) 0(0.0%) ??? ...tract/private/arrow-higher-order.rkt:379:33 ival-div [59] 100.0% ------------------------------------------------------------------------ for-loop [45] 100.0% [53] 188(2.8%) 0(0.0%) option-on-expr ...aster/src/core/regimes.rkt:124:0 for-loop [60] 100.0% ------------------------------------------------------------------------ loop [42] 11.0% finalize-iter! [47] 89.0% [54] 1706(25.4%) 188(2.8%) ??? ...contract/private/arrow-val-first.rkt:486:18 for-loop [63] 89.0% ------------------------------------------------------------------------ gen-series! [46] 100.0% [55] 1652(24.6%) 0(0.0%) for-loop ...s/herbie/master/src/mainloop.rkt:167:7 taylor-alt [62] 100.0% ------------------------------------------------------------------------ simplify! [48] 100.0% [56] 1202(17.9%) 0(0.0%) ??? ...es/herbie/master/src/core/simplify.rkt:42:0 egraph-run [64] 100.0% ------------------------------------------------------------------------ sample-multi-bounded [50] 100.0% [57] 206(3.1%) 206(3.1%) for-loop ...lies/herbie/master/src/points.rkt:20:4 ------------------------------------------------------------------------ gen-rewrites! [49] 100.0% [58] 200(3.0%) 0(0.0%) for-loop .../herbie/master/src/mainloop.rkt:191:11 rewrite-expression-head24 [65] 100.0% ------------------------------------------------------------------------ ??? [52] 100.0% [59] 196(2.9%) 196(2.9%) ival-div ...erbie/master/src/biginterval.rkt:156:0 ------------------------------------------------------------------------ option-on-expr [53] 100.0% [60] 188(2.8%) 0(0.0%) for-loop ...rbie/master/src/core/regimes.rkt:135:4 errors [73] 100.0% ------------------------------------------------------------------------ gen-rewrites! [49] 100.0% [61] 186(2.8%) 0(0.0%) for-loop ...s/herbie/master/src/mainloop.rkt:208:4 for-loop [66] 100.0% ------------------------------------------------------------------------ for-loop [55] 100.0% [62] 1652(24.6%) 0(0.0%) taylor-alt ...herbie/master/src/mainloop.rkt:146:0 for-loop [67] 100.0% ------------------------------------------------------------------------ ??? [54] 100.0% [63] 1518(22.6%) 0(0.0%) for-loop ...bie/master/src/core/alt-table.rkt:46:2 atab-add-altn [69] 75.2% errors [73] 24.8% ------------------------------------------------------------------------ ??? [56] 100.0% [64] 1202(17.9%) 0(0.0%) egraph-run .../pkgs/egg-herbie-linux/main.rkt:49:0 egraph-add-exprs [68] 100.0% ------------------------------------------------------------------------ for-loop [58] 100.0% [65] 200(3.0%) 0(0.0%) rewrite-expression-head24 ...core/matcher.rkt:85:0 rewriter [70] 100.0% ------------------------------------------------------------------------ for-loop [61] 100.0% [66] 186(2.8%) 0(0.0%) for-loop ...s/herbie/master/src/mainloop.rkt:209:6 change-apply [71] 100.0% ------------------------------------------------------------------------ taylor-alt [62] 100.0% [67] 1652(24.6%) 0(0.0%) for-loop ...s/herbie/master/src/mainloop.rkt:152:6 ??? [72] 100.0% ------------------------------------------------------------------------ egraph-run [64] 100.0% [68] 1202(17.9%) 0(0.0%) egraph-add-exprs ...gg-herbie-linux/main.rkt:111:0 ??? [74] 100.0% ------------------------------------------------------------------------ for-loop [63] 100.0% [69] 1142(17.0%) 0(0.0%) atab-add-altn ...ster/src/core/alt-table.rkt:194:0 errors [73] 83.7% override-at-pnts [76] 16.3% ------------------------------------------------------------------------ rewrite-expression-head24 [65] 33.3% matcher [86] 66.7% [70] 200(3.0%) 0(0.0%) rewriter ...erbie/master/src/core/matcher.rkt:87:2 for-loop [75] 100.0% ------------------------------------------------------------------------ for-loop [66] 100.0% [71] 186(2.8%) 0(0.0%) change-apply ...e/master/src/core/matcher.rkt:69:0 pattern-substitute [77] 100.0% ------------------------------------------------------------------------ ??? [92] 3.8% .../more-scheme.rkt:261:28 [24] 9.0% real->precision [51] 9.8% loop [11] 17.5% location-do [78] 29.9% for-loop [67] 29.9% [72] 2036(30.3%) 184(2.7%) ??? ...tract/private/arrow-higher-order.rkt:375:33 location-do [78] 29.9% approximate9 [2] 29.9% hash-ref! [79] 21.3% bf [84] 9.8% ------------------------------------------------------------------------ for-loop [60] 11.0% .../more-scheme.rkt:261:28 [24] 11.2% for-loop [63] 22.0% atab-add-altn [69] 55.8% [73] 1712(25.5%) 0(0.0%) errors ...tlies/herbie/master/src/points.rkt:190:0 for-loop [82] 65.9% temp85_0 [83] 22.7% loop [80] 11.4% ------------------------------------------------------------------------ egraph-add-exprs [68] 100.0% [74] 1202(17.9%) 0(0.0%) ??? ...s/herbie/master/src/core/simplify.rkt:102:6 for-loop [81] 100.0% ------------------------------------------------------------------------ rewriter [70] 100.0% [75] 200(3.0%) 0(0.0%) for-loop ...erbie/master/src/core/matcher.rkt:89:4 matcher [86] 66.7% for-loop [85] 33.3% ------------------------------------------------------------------------ atab-add-altn [69] 100.0% [76] 186(2.8%) 0(0.0%) override-at-pnts ...r/src/core/alt-table.rkt:129:0 for-loop [87] 100.0% ------------------------------------------------------------------------ change-apply [71] 33.3% pattern-substitute [77] 66.7% [77] 186(2.8%) 0(0.0%) pattern-substitute ...er/src/core/matcher.rkt:45:0 pattern-substitute [77] 66.7% return/no-unsupplied [88] 33.3% ------------------------------------------------------------------------ location-do [78] 22.6% ??? [72] 77.4% [78] 1652(24.6%) 0(0.0%) location-do ...herbie/master/src/programs.rkt:63:0 ??? [72] 77.4% location-do [78] 22.6% ------------------------------------------------------------------------ ??? [14] 7.7% loop [11] 8.9% ??? [90] 10.7% ??? [3] 16.6% for-loop [12] 22.8% ??? [72] 33.2% [79] 1300(19.4%) 0(0.0%) hash-ref! .../racket/private/more-scheme.rkt:376:2 ??? [3] 24.3% ??? [4] 22.8% parse-loop74 [25] 18.4% ??? [90] 10.7% ??? [92] 8.9% taylor [13] 8.9% f61 [5] 5.9% ------------------------------------------------------------------------ loop [80] 6.5% gf [91] 13.0% errors [73] 16.0% syntax-e/no-taint [18] 16.4% datum->syntax6 [26] 16.4% for-loop [36] 31.8% [80] 1222(18.2%) 632(9.4%) loop (unknown source) gf [91] 27.2% expand-capturing-lifts [102] 16.0% ordinary-value? [95] 15.9% loop [80] 6.5% ------------------------------------------------------------------------ ??? [74] 100.0% [81] 1202(17.9%) 1202(17.9%) for-loop ...bie/master/src/core/simplify.rkt:121:2 ------------------------------------------------------------------------ errors [73] 100.0% [82] 1128(16.8%) 0(0.0%) for-loop ...ies/herbie/master/src/points.rkt:192:2 .../more-scheme.rkt:261:28 [24] 100.0% ------------------------------------------------------------------------ errors [73] 49.2% eval-const-expr [29] 50.8% [83] 788(11.7%) 0(0.0%) temp85_0 (unknown source) compile15 [89] 100.0% ------------------------------------------------------------------------ ??? [72] 100.0% [84] 200(3.0%) 0(0.0%) bf ...ath-lib/math/private/bigfloat/mpfr.rkt:615:2 new-mpfr [93] 100.0% ------------------------------------------------------------------------ for-loop [75] 100.0% [85] 200(3.0%) 0(0.0%) for-loop ...erbie/master/src/core/matcher.rkt:96:8 fix-up-variables [94] 100.0% ------------------------------------------------------------------------ for-loop [15] 50.0% for-loop [75] 50.0% [86] 200(3.0%) 0(0.0%) matcher ...erbie/master/src/core/matcher.rkt:115:2 ??? [6] 50.0% rewriter [70] 50.0% ------------------------------------------------------------------------ override-at-pnts [76] 100.0% [87] 186(2.8%) 186(2.8%) for-loop ...e/master/src/core/alt-table.rkt:130:22 ------------------------------------------------------------------------ pattern-substitute [77] 100.0% [88] 186(2.8%) 186(2.8%) return/no-unsupplied ...ct/private/arr-i.rkt:566:0 ------------------------------------------------------------------------ temp85_0 [83] 100.0% [89] 788(11.7%) 0(0.0%) compile15 (unknown source) temp91_0 [96] 100.0% ------------------------------------------------------------------------ hash-ref! [79] 100.0% [90] 638(9.5%) 0(0.0%) ??? ...es/herbie/master/src/core/taylor.rkt:327:33 hash-ref! [79] 100.0% ------------------------------------------------------------------------ add-ns-scopes [44] 9.1% loop [80] 90.9% [91] 438(6.5%) 0(0.0%) gf (unknown source) loop [80] 54.3% propagation-apply [97] 45.7% ------------------------------------------------------------------------ hash-ref! [79] 100.0% [92] 232(3.5%) 0(0.0%) ??? ...ies/herbie/master/src/core/taylor.rkt:67:15 ??? [72] 100.0% ------------------------------------------------------------------------ bf [84] 100.0% [93] 200(3.0%) 200(3.0%) new-mpfr ...b/math/private/bigfloat/mpfr.rkt:348:0 ------------------------------------------------------------------------ for-loop [85] 100.0% [94] 200(3.0%) 0(0.0%) fix-up-variables ...ter/src/core/matcher.rkt:108:2 for-loop [98] 100.0% ------------------------------------------------------------------------ loop [80] 100.0% [95] 194(2.9%) 0(0.0%) ordinary-value? ...erbie/master/src/float.rkt:51:0 list-member? [99] 100.0% ------------------------------------------------------------------------ compile15 [89] 100.0% [96] 788(11.7%) 0(0.0%) temp91_0 (unknown source) temp118_0 [100] 100.0% ------------------------------------------------------------------------ gf [91] 100.0% [97] 200(3.0%) 200(3.0%) propagation-apply (unknown source) ------------------------------------------------------------------------ fix-up-variables [94] 100.0% [98] 200(3.0%) 0(0.0%) for-loop ...erbie/master/src/core/matcher.rkt:41:9 for-loop [101] 100.0% ------------------------------------------------------------------------ ordinary-value? [95] 100.0% [99] 194(2.9%) 194(2.9%) list-member? ...llects/racket/private/set.rkt:24:0 ------------------------------------------------------------------------ temp91_0 [96] 100.0% [100] 788(11.7%) 0(0.0%) temp118_0 (unknown source) expand-capturing-lifts [102] 100.0% ------------------------------------------------------------------------ for-loop [98] 100.0% [101] 200(3.0%) 0(0.0%) for-loop ...erbie/master/src/core/matcher.rkt:26:9 core457 [103] 100.0% ------------------------------------------------------------------------ loop [80] 19.9% temp118_0 [100] 80.1% [102] 984(14.7%) 196(2.9%) expand-capturing-lifts (unknown source) lambda-clause-expander [104] 80.1% ------------------------------------------------------------------------ for-loop [101] 100.0% [103] 200(3.0%) 0(0.0%) core457 ...acket/contract/private/arr-i.rkt:976:19 un-dep/maybe-chaperone [105] 100.0% ------------------------------------------------------------------------ expand-capturing-lifts [102] 100.0% [104] 788(11.7%) 0(0.0%) lambda-clause-expander (unknown source) finish-bodys [106] 100.0% ------------------------------------------------------------------------ core457 [103] 100.0% [105] 200(3.0%) 0(0.0%) un-dep/maybe-chaperone ...private/arr-i.rkt:1137:2 ??? [107] 100.0% ------------------------------------------------------------------------ lambda-clause-expander [104] 21.1% for-loop [108] 78.9% [106] 788(11.7%) 0(0.0%) finish-bodys (unknown source) for-loop [108] 100.0% ------------------------------------------------------------------------ ??? [30] 49.0% un-dep/maybe-chaperone [105] 51.0% [107] 392(5.8%) 392(5.8%) ??? ...ects/racket/contract/private/prop.rkt:301:4 ------------------------------------------------------------------------ fallback-loop [23] 1.8% for-loop [108] 18.0% eval-one-top12 [39] 22.6% finish-bodys [106] 57.6% [108] 1018(15.2%) 430(6.4%) for-loop (unknown source) finish-bodys [106] 46.1% for-loop [108] 18.0% dispatch-transformer41 [7] 6.5% expand-implicit [8] 1.8% syntax-e [9] 1.6% add-local-binding!39 [109] 1.5% ------------------------------------------------------------------------ for-loop [108] 100.0% [109] 188(2.8%) 0(0.0%) add-local-binding!39 (unknown source) binding-table-add [110] 100.0% ------------------------------------------------------------------------ add-local-binding!39 [109] 100.0% [110] 188(2.8%) 188(2.8%) binding-table-add (unknown source) ------------------------------------------------------------------------