Profiling results ----------------- Total cpu time observed: 3974ms (out of 4200ms) Number of samples taken: 23 (once every 173ms) ======================================================================== Caller Idx Total Self Name+src Local% ms(pct) ms(pct) Callee ======================================================================== [1] 3974(100.0%) 0(0.0%) ??? ...lects/racket/private/more-scheme.rkt:261:28 profile-thunk16 [11] 100.0% ------------------------------------------------------------------------ matcher [66] 100.0% [2] 480(12.1%) 0(0.0%) ??? ...s/herbie/master/src/core/matcher.rkt:129:11 for-loop [13] 100.0% ------------------------------------------------------------------------ hash-ref! [92] 100.0% [3] 478(12.0%) 0(0.0%) ??? ...ies/herbie/master/src/core/taylor.rkt:44:15 hash-ref! [92] 65.3% ??? [15] 34.7% ------------------------------------------------------------------------ map [91] 31.8% hash-ref! [92] 68.2% [4] 478(12.0%) 0(0.0%) parse-loop75 (unknown source) eval-const-expr [12] 100.0% ------------------------------------------------------------------------ for-loop [111] 100.0% [5] 316(8.0%) 0(0.0%) dispatch-transformer41 (unknown source) apply-transformer52 [14] 100.0% ------------------------------------------------------------------------ rewriter [58] 100.0% [6] 164(4.1%) 0(0.0%) *rules* ...erbie/master/src/syntax/rules.rkt:666:0 for-loop [111] 100.0% ------------------------------------------------------------------------ for-loop [111] 100.0% [7] 164(4.1%) 0(0.0%) expand-implicit (unknown source) resolve+shift28 [106] 100.0% ------------------------------------------------------------------------ hash-ref! [92] 100.0% [8] 160(4.0%) 0(0.0%) ??? ...es/herbie/master/src/core/taylor.rkt:300:23 for-loop [16] 100.0% ------------------------------------------------------------------------ for-loop [111] 100.0% [9] 152(3.8%) 0(0.0%) expand-identifier (unknown source) resolve+shift28 [106] 100.0% ------------------------------------------------------------------------ loop [25] 100.0% [10] 150(3.8%) 0(0.0%) syntax-e (unknown source) syntax-e/no-taint [17] 100.0% ------------------------------------------------------------------------ ??? [1] 100.0% [11] 3974(100.0%) 0(0.0%) profile-thunk16 ...e/pkgs/profile-lib/main.rkt:9:0 run [18] 100.0% ------------------------------------------------------------------------ f62 [107] 38.9% parse-loop75 [4] 61.1% [12] 782(19.7%) 0(0.0%) eval-const-expr ...e/master/src/programs.rkt:117:0 temp85_0 [70] 40.7% eval [19] 40.2% loop [25] 19.2% ------------------------------------------------------------------------ ??? [2] 100.0% [13] 480(12.1%) 0(0.0%) for-loop ...bie/master/src/core/matcher.rkt:131:15 matcher [66] 100.0% ------------------------------------------------------------------------ dispatch-transformer41 [5] 100.0% [14] 316(8.0%) 0(0.0%) apply-transformer52 (unknown source) loop [25] 100.0% ------------------------------------------------------------------------ ??? [3] 100.0% [15] 166(4.2%) 0(0.0%) ??? ...es/herbie/master/src/core/taylor.rkt:293:19 hash-ref! [92] 100.0% ------------------------------------------------------------------------ ??? [8] 100.0% [16] 160(4.0%) 0(0.0%) for-loop ...rbie/master/src/core/taylor.rkt:303:27 hash-ref! [92] 100.0% ------------------------------------------------------------------------ syntax-e [10] 100.0% [17] 150(3.8%) 0(0.0%) syntax-e/no-taint (unknown source) loop [25] 100.0% ------------------------------------------------------------------------ profile-thunk16 [11] 100.0% [18] 3974(100.0%) 0(0.0%) run ...et-7.5/share/pkgs/profile-lib/main.rkt:39:2 .../more-scheme.rkt:261:28 [20] 100.0% ------------------------------------------------------------------------ eval-const-expr [12] 100.0% [19] 314(7.9%) 0(0.0%) eval (unknown source) namespace-syntax-introduce3 [21] 51.0% datum->syntax6 [22] 49.0% ------------------------------------------------------------------------ run [18] 100.0% [20] 3974(100.0%) 0(0.0%) .../more-scheme.rkt:261:28 (unknown source) run-improve47 [23] 63.4% prepare-points-intervals [24] 27.3% oracle-error [26] 5.1% get-final-combination [27] 4.2% ------------------------------------------------------------------------ eval [19] 100.0% [21] 160(4.0%) 0(0.0%) namespace-syntax-introduce3 (unknown source) add-ns-scopes [28] 100.0% ------------------------------------------------------------------------ eval [19] 100.0% [22] 154(3.9%) 0(0.0%) datum->syntax6 (unknown source) loop [25] 100.0% ------------------------------------------------------------------------ .../more-scheme.rkt:261:28 [20] 100.0% [23] 2518(63.4%) 0(0.0%) run-improve47 ...bie/master/src/mainloop.rkt:347:0 for-loop [29] 100.0% ------------------------------------------------------------------------ .../more-scheme.rkt:261:28 [20] 100.0% [24] 1084(27.3%) 0(0.0%) prepare-points-intervals ...r/src/points.rkt:109:0 loop [30] 100.0% ------------------------------------------------------------------------ datum->syntax6 [22] 4.1% syntax-e/no-taint [17] 12.1% loop [25] 20.7% eval-const-expr [12] 24.2% apply-transformer52 [14] 38.9% [25] 620(15.6%) 154(3.9%) loop (unknown source) core-form-sym [33] 26.8% expand-capturing-lifts [90] 24.2% loop [25] 20.7% syntax-e [10] 12.1% gf [34] 12.1% ------------------------------------------------------------------------ .../more-scheme.rkt:261:28 [20] 100.0% [26] 204(5.1%) 0(0.0%) oracle-error ...herbie/master/src/points.rkt:187:0 for-loop [31] 100.0% ------------------------------------------------------------------------ .../more-scheme.rkt:261:28 [20] 100.0% [27] 168(4.2%) 0(0.0%) get-final-combination ...er/src/mainloop.rkt:372:0 infer-splitpoints [32] 100.0% ------------------------------------------------------------------------ namespace-syntax-introduce3 [21] 100.0% [28] 160(4.0%) 160(4.0%) add-ns-scopes (unknown source) ------------------------------------------------------------------------ run-improve47 [23] 100.0% [29] 2518(63.4%) 0(0.0%) for-loop ...s/herbie/master/src/mainloop.rkt:366:4 run-iter! [35] 100.0% ------------------------------------------------------------------------ prepare-points-intervals [24] 100.0% [30] 1084(27.3%) 0(0.0%) loop ...ghtlies/herbie/master/src/points.rkt:122:4 loop [36] 47.8% ??? [37] 33.8% do-curry [38] 18.5% ------------------------------------------------------------------------ oracle-error [26] 100.0% [31] 204(5.1%) 0(0.0%) for-loop ...ies/herbie/master/src/points.rkt:188:2 map [91] 100.0% ------------------------------------------------------------------------ get-final-combination [27] 100.0% [32] 168(4.2%) 0(0.0%) infer-splitpoints ...ter/src/core/regimes.rkt:33:0 for-loop [39] 100.0% ------------------------------------------------------------------------ loop [25] 100.0% [33] 166(4.2%) 0(0.0%) core-form-sym (unknown source) resolve+shift28 [106] 100.0% ------------------------------------------------------------------------ loop [25] 100.0% [34] 150(3.8%) 0(0.0%) gf (unknown source) cache-or-reuse-set [40] 100.0% ------------------------------------------------------------------------ for-loop [29] 100.0% [35] 2518(63.4%) 0(0.0%) run-iter! .../herbie/master/src/mainloop.rkt:328:0 gen-series! [41] 37.0% simplify! [42] 31.5% gen-rewrites! [43] 19.1% finalize-iter! [44] 12.5% ------------------------------------------------------------------------ loop [30] 100.0% [36] 518(13.0%) 196(4.9%) loop ...ightlies/herbie/master/src/points.rkt:80:2 ??? [71] 62.2% ------------------------------------------------------------------------ loop [30] 100.0% [37] 366(9.2%) 0(0.0%) ??? ...ightlies/herbie/master/src/points.rkt:105:2 ??? [73] 100.0% ------------------------------------------------------------------------ loop [30] 100.0% [38] 200(5.0%) 200(5.0%) do-curry ...-7.5/collects/racket/function.rkt:71:2 ------------------------------------------------------------------------ infer-splitpoints [32] 100.0% [39] 168(4.2%) 0(0.0%) for-loop ...erbie/master/src/core/regimes.rkt:46:6 option-on-expr [45] 100.0% ------------------------------------------------------------------------ gf [34] 100.0% [40] 150(3.8%) 150(3.8%) cache-or-reuse-set (unknown source) ------------------------------------------------------------------------ run-iter! [35] 100.0% [41] 932(23.5%) 0(0.0%) gen-series! ...erbie/master/src/mainloop.rkt:161:0 for-loop [46] 100.0% ------------------------------------------------------------------------ run-iter! [35] 100.0% [42] 792(19.9%) 0(0.0%) simplify! .../herbie/master/src/mainloop.rkt:225:0 ??? [47] 100.0% ------------------------------------------------------------------------ run-iter! [35] 100.0% [43] 480(12.1%) 0(0.0%) gen-rewrites! ...bie/master/src/mainloop.rkt:184:0 for-loop [48] 100.0% ------------------------------------------------------------------------ run-iter! [35] 100.0% [44] 314(7.9%) 0(0.0%) finalize-iter! ...ie/master/src/mainloop.rkt:279:0 ??? [49] 100.0% ------------------------------------------------------------------------ for-loop [39] 100.0% [45] 168(4.2%) 0(0.0%) option-on-expr ...aster/src/core/regimes.rkt:125:0 sort-context-on-expr [50] 100.0% ------------------------------------------------------------------------ gen-series! [41] 100.0% [46] 932(23.5%) 0(0.0%) for-loop ...s/herbie/master/src/mainloop.rkt:168:7 taylor-alt [51] 100.0% ------------------------------------------------------------------------ simplify! [42] 100.0% [47] 792(19.9%) 0(0.0%) ??? ...es/herbie/master/src/core/simplify.rkt:43:0 egraph-run [52] 100.0% ------------------------------------------------------------------------ gen-rewrites! [43] 100.0% [48] 480(12.1%) 0(0.0%) for-loop .../herbie/master/src/mainloop.rkt:192:11 rewrite-expression-head20 [53] 100.0% ------------------------------------------------------------------------ finalize-iter! [44] 100.0% [49] 314(7.9%) 0(0.0%) ??? ...contract/private/arrow-val-first.rkt:486:18 for-loop [54] 100.0% ------------------------------------------------------------------------ option-on-expr [45] 100.0% [50] 168(4.2%) 0(0.0%) sort-context-on-expr ...src/core/regimes.rkt:118:0 ??? [55] 100.0% ------------------------------------------------------------------------ for-loop [46] 100.0% [51] 932(23.5%) 0(0.0%) taylor-alt ...herbie/master/src/mainloop.rkt:147:0 for-loop [56] 100.0% ------------------------------------------------------------------------ ??? [47] 100.0% [52] 792(19.9%) 0(0.0%) egraph-run .../pkgs/egg-herbie-linux/main.rkt:49:0 egraph-add-exprs [57] 100.0% ------------------------------------------------------------------------ for-loop [48] 100.0% [53] 480(12.1%) 0(0.0%) rewrite-expression-head20 ...core/matcher.rkt:86:0 rewriter [58] 100.0% ------------------------------------------------------------------------ ??? [49] 100.0% [54] 314(7.9%) 0(0.0%) for-loop ...bie/master/src/core/alt-table.rkt:55:2 atab-add-altn [59] 100.0% ------------------------------------------------------------------------ sort-context-on-expr [50] 100.0% [55] 168(4.2%) 0(0.0%) ??? ...-7.5/collects/racket/private/sort.rkt:369:3 generic-sort/key [60] 100.0% ------------------------------------------------------------------------ taylor-alt [51] 100.0% [56] 932(23.5%) 0(0.0%) for-loop ...s/herbie/master/src/mainloop.rkt:153:6 ??? [73] 100.0% ------------------------------------------------------------------------ egraph-run [52] 100.0% [57] 792(19.9%) 0(0.0%) egraph-add-exprs ...gg-herbie-linux/main.rkt:111:0 ??? [61] 100.0% ------------------------------------------------------------------------ rewrite-expression-head20 [53] 36.2% matcher [66] 63.8% [58] 480(12.1%) 0(0.0%) rewriter ...erbie/master/src/core/matcher.rkt:89:2 for-loop [62] 91.5% *rules* [6] 8.5% ------------------------------------------------------------------------ for-loop [54] 100.0% [59] 314(7.9%) 0(0.0%) atab-add-altn ...ster/src/core/alt-table.rkt:203:0 errors [63] 100.0% ------------------------------------------------------------------------ ??? [55] 100.0% [60] 168(4.2%) 0(0.0%) generic-sort/key .../racket/private/sort.rkt:156:2 copying-mergesort [64] 100.0% ------------------------------------------------------------------------ egraph-add-exprs [57] 100.0% [61] 792(19.9%) 0(0.0%) ??? ...s/herbie/master/src/core/simplify.rkt:103:6 for-loop [65] 100.0% ------------------------------------------------------------------------ rewriter [58] 100.0% [62] 480(12.1%) 0(0.0%) for-loop ...erbie/master/src/core/matcher.rkt:91:4 matcher [66] 72.3% for-loop [67] 27.7% ------------------------------------------------------------------------ atab-add-altn [59] 100.0% [63] 314(7.9%) 0(0.0%) errors ...tlies/herbie/master/src/points.rkt:200:0 eval-prog [68] 100.0% ------------------------------------------------------------------------ generic-sort/key [60] 33.3% copying-mergesort [64] 66.7% [64] 168(4.2%) 0(0.0%) copying-mergesort ...racket/private/sort.rkt:129:8 copying-mergesort [64] 66.7% loop [69] 33.3% ------------------------------------------------------------------------ ??? [61] 100.0% [65] 792(19.9%) 792(19.9%) for-loop ...bie/master/src/core/simplify.rkt:122:2 ------------------------------------------------------------------------ for-loop [13] 50.0% for-loop [62] 50.0% [66] 480(12.1%) 0(0.0%) matcher ...erbie/master/src/core/matcher.rkt:117:2 ??? [2] 50.0% rewriter [58] 50.0% ------------------------------------------------------------------------ for-loop [62] 100.0% [67] 316(8.0%) 0(0.0%) for-loop ...erbie/master/src/core/matcher.rkt:98:8 fix-up-variables [72] 100.0% ------------------------------------------------------------------------ errors [63] 100.0% [68] 314(7.9%) 0(0.0%) eval-prog ...s/herbie/master/src/programs.rkt:82:0 temp85_0 [70] 100.0% ------------------------------------------------------------------------ copying-mergesort [64] 100.0% [69] 168(4.2%) 0(0.0%) loop ...7.5/collects/racket/private/sort.rkt:96:12 ??? [71] 100.0% ------------------------------------------------------------------------ eval-prog [68] 49.7% eval-const-expr [12] 50.3% [70] 632(15.9%) 0(0.0%) temp85_0 (unknown source) compile15 [74] 100.0% ------------------------------------------------------------------------ loop [69] 34.3% loop [36] 65.7% [71] 490(12.3%) 0(0.0%) ??? ...htlies/herbie/master/src/programs.rkt:114:2 ??? [73] 100.0% ------------------------------------------------------------------------ for-loop [67] 100.0% [72] 316(8.0%) 0(0.0%) fix-up-variables ...ter/src/core/matcher.rkt:110:2 pattern-match [75] 100.0% ------------------------------------------------------------------------ loop [83] 3.1% ??? [98] 5.8% ??? [37] 20.5% location-do [76] 21.6% for-loop [56] 21.6% ??? [71] 27.4% [73] 1788(45.0%) 334(8.4%) ??? ...tract/private/arrow-higher-order.rkt:375:33 location-do [76] 21.6% approximate9 [77] 21.6% sample-multi-bounded [79] 20.5% hash-ref! [92] 8.9% mk-ival [81] 8.7% ------------------------------------------------------------------------ temp85_0 [70] 100.0% [74] 632(15.9%) 0(0.0%) compile15 (unknown source) temp91_0 [78] 100.0% ------------------------------------------------------------------------ fix-up-variables [72] 100.0% [75] 316(8.0%) 0(0.0%) pattern-match .../master/src/core/matcher.rkt:29:0 for-loop [80] 100.0% ------------------------------------------------------------------------ location-do [76] 17.2% ??? [73] 82.8% [76] 932(23.5%) 0(0.0%) location-do ...herbie/master/src/programs.rkt:63:0 ??? [73] 82.8% location-do [76] 17.2% ------------------------------------------------------------------------ ??? [73] 100.0% [77] 932(23.5%) 0(0.0%) approximate9 ...ie/master/src/core/taylor.rkt:11:0 loop [83] 51.3% taylor [93] 16.5% for-loop [89] 16.1% f41 [85] 16.1% ------------------------------------------------------------------------ compile15 [74] 100.0% [78] 632(15.9%) 0(0.0%) temp91_0 (unknown source) temp118_0 [82] 100.0% ------------------------------------------------------------------------ ??? [73] 100.0% [79] 366(9.2%) 0(0.0%) sample-multi-bounded ...master/src/points.rkt:14:0 random-ranges [84] 100.0% ------------------------------------------------------------------------ pattern-match [75] 100.0% [80] 316(8.0%) 0(0.0%) for-loop ...erbie/master/src/core/matcher.rkt:26:9 ??? [86] 52.5% core457 [88] 47.5% ------------------------------------------------------------------------ ??? [73] 100.0% [81] 156(3.9%) 0(0.0%) mk-ival .../herbie/master/src/biginterval.rkt:65:0 bf [87] 100.0% ------------------------------------------------------------------------ temp91_0 [78] 100.0% [82] 632(15.9%) 0(0.0%) temp118_0 (unknown source) expand-capturing-lifts [90] 100.0% ------------------------------------------------------------------------ approximate9 [77] 100.0% [83] 478(12.0%) 0(0.0%) loop ...ies/herbie/master/src/core/taylor.rkt:86:4 hash-ref! [92] 65.3% ??? [73] 34.7% ------------------------------------------------------------------------ sample-multi-bounded [79] 100.0% [84] 366(9.2%) 188(4.7%) random-ranges ...erbie/master/src/common.rkt:164:0 cons/c [94] 48.6% ------------------------------------------------------------------------ approximate9 [77] 24.8% hash-ref! [92] 25.2% map [91] 50.0% [85] 302(7.6%) 0(0.0%) f41 (unknown source) map [91] 100.0% ------------------------------------------------------------------------ for-loop [80] 100.0% [86] 166(4.2%) 166(4.2%) ??? ...ects/racket/contract/private/guts.rkt:770:8 ------------------------------------------------------------------------ mk-ival [81] 100.0% [87] 156(3.9%) 0(0.0%) bf ...ath-lib/math/private/bigfloat/mpfr.rkt:615:2 ??? [95] 100.0% ------------------------------------------------------------------------ for-loop [80] 100.0% [88] 150(3.8%) 0(0.0%) core457 ...acket/contract/private/arr-i.rkt:976:19 build-unary-very-simple--> [96] 100.0% ------------------------------------------------------------------------ approximate9 [77] 100.0% [89] 150(3.8%) 0(0.0%) for-loop ...erbie/master/src/core/taylor.rkt:29:18 taylor [93] 100.0% ------------------------------------------------------------------------ loop [25] 19.2% temp118_0 [82] 80.8% [90] 782(19.7%) 0(0.0%) expand-capturing-lifts (unknown source) lambda-clause-expander [97] 80.8% expand-id-application-form17 [104] 19.2% ------------------------------------------------------------------------ for-loop [31] 40.3% f41 [85] 59.7% [91] 506(12.7%) 0(0.0%) map ...t-7.5/collects/racket/private/map.rkt:35:13 ??? [99] 40.3% f41 [85] 29.8% parse-loop75 [4] 15.0% f62 [107] 14.8% ------------------------------------------------------------------------ for-loop [16] 8.4% ??? [101] 11.6% ??? [15] 11.6% ??? [3] 19.0% loop [83] 19.0% ??? [73] 30.5% [92] 478(12.0%) 0(0.0%) hash-ref! .../racket/private/more-scheme.rkt:376:2 ??? [3] 30.5% parse-loop75 [4] 19.9% ??? [98] 19.0% ??? [101] 11.6% f41 [85] 10.6% ??? [8] 8.4% ------------------------------------------------------------------------ for-loop [89] 16.4% taylor [93] 32.9% approximate9 [77] 50.7% [93] 304(7.6%) 0(0.0%) taylor .../herbie/master/src/core/taylor.rkt:169:0 taylor-sqrt [102] 50.7% taylor [93] 32.9% debug5 [103] 16.4% ------------------------------------------------------------------------ random-ranges [84] 100.0% [94] 178(4.5%) 0(0.0%) cons/c .../racket/contract/private/guts.rkt:500:15 coerce-contract [100] 100.0% ------------------------------------------------------------------------ bf [87] 100.0% [95] 156(3.9%) 156(3.9%) ??? /opt/racket-7.5/collects/ffi/unsafe.rkt:938:4 ------------------------------------------------------------------------ core457 [88] 100.0% [96] 150(3.8%) 150(3.8%) build-unary-very-simple--> ...val-first.rkt:1150:0 ------------------------------------------------------------------------ expand-capturing-lifts [90] 100.0% [97] 632(15.9%) 0(0.0%) lambda-clause-expander (unknown source) finish-bodys [105] 100.0% ------------------------------------------------------------------------ hash-ref! [92] 100.0% [98] 312(7.9%) 0(0.0%) ??? ...ies/herbie/master/src/core/taylor.rkt:67:15 ??? [73] 100.0% ------------------------------------------------------------------------ map [91] 100.0% [99] 204(5.1%) 204(5.1%) ??? ...ghtlies/herbie/master/src/points.rkt:189:26 ------------------------------------------------------------------------ cons/c [94] 100.0% [100] 178(4.5%) 0(0.0%) coerce-contract ...contract/private/guts.rkt:307:0 coerce-contract/f [108] 100.0% ------------------------------------------------------------------------ hash-ref! [92] 100.0% [101] 166(4.2%) 0(0.0%) ??? ...es/herbie/master/src/core/taylor.rkt:343:33 hash-ref! [92] 100.0% ------------------------------------------------------------------------ taylor [93] 100.0% [102] 154(3.9%) 0(0.0%) taylor-sqrt ...ie/master/src/core/taylor.rkt:351:0 f62 [107] 100.0% ------------------------------------------------------------------------ taylor [93] 100.0% [103] 150(3.8%) 150(3.8%) debug5 ...htlies/herbie/master/src/debug.rkt:102:0 ------------------------------------------------------------------------ expand-capturing-lifts [90] 100.0% [104] 150(3.8%) 0(0.0%) expand-id-application-form17 (unknown source) resolve+shift28 [106] 100.0% ------------------------------------------------------------------------ lambda-clause-expander [97] 20.4% for-loop [111] 79.6% [105] 632(15.9%) 0(0.0%) finish-bodys (unknown source) for-loop [111] 100.0% ------------------------------------------------------------------------ expand-id-application-form17 [104] 23.7% expand-identifier [9] 24.1% expand-implicit [7] 25.9% core-form-sym [33] 26.3% [106] 632(15.9%) 150(3.8%) resolve+shift28 (unknown source) fallback-loop [109] 76.3% ------------------------------------------------------------------------ map [91] 49.3% taylor-sqrt [102] 50.7% [107] 304(7.6%) 0(0.0%) f62 (unknown source) eval-const-expr [12] 100.0% ------------------------------------------------------------------------ coerce-contract [100] 100.0% [108] 178(4.5%) 0(0.0%) coerce-contract/f ...ntract/private/guts.rkt:372:0 coerce-simple-value [110] 100.0% ------------------------------------------------------------------------ resolve+shift28 [106] 100.0% [109] 482(12.1%) 0(0.0%) fallback-loop (unknown source) for-loop [111] 100.0% ------------------------------------------------------------------------ coerce-contract/f [108] 100.0% [110] 178(4.5%) 178(4.5%) coerce-simple-value ...ract/private/guts.rkt:385:0 ------------------------------------------------------------------------ fallback-loop [109] 7.3% for-loop [111] 18.4% *rules* [6] 20.6% finish-bodys [105] 53.7% [111] 796(20.0%) 646(16.3%) for-loop (unknown source) finish-bodys [105] 42.6% for-loop [111] 18.4% dispatch-transformer41 [5] 6.4% expand-implicit [7] 2.6% expand-identifier [9] 2.1% ------------------------------------------------------------------------