Profiling results ----------------- Total cpu time observed: 8260ms (out of 8324ms) Number of samples taken: 38 (once every 217ms) ======================================================================= Caller Idx Total Self Name+src Local% ms(pct) ms(pct) Callee ======================================================================= [1] 8260(100.0%) 0(0.0%) ??? ...lects/racket/private/more-scheme.rkt:261:28 profile-thunk16 [10] 100.0% ----------------------------------------------------------------------- ??? [89] 100.0% [2] 1386(16.8%) 0(0.0%) approximate9 ...ie/master/src/core/taylor.rkt:11:0 loop [11] 86.6% parse-loop49 [44] 13.4% ----------------------------------------------------------------------- hash-ref! [96] 100.0% [3] 1200(14.5%) 0(0.0%) ??? ...ies/herbie/master/src/core/taylor.rkt:67:15 ??? [89] 68.5% hash-ref! [96] 31.5% ----------------------------------------------------------------------- hash-ref! [96] 100.0% [4] 634(7.7%) 0(0.0%) ??? ...es/herbie/master/src/core/taylor.rkt:290:26 for-loop [12] 100.0% ----------------------------------------------------------------------- hash-ref! [96] 100.0% [5] 622(7.5%) 0(0.0%) ??? ...es/herbie/master/src/core/taylor.rkt:300:23 for-loop [13] 100.0% ----------------------------------------------------------------------- map [33] 27.0% hash-ref! [96] 73.0% [6] 568(6.9%) 0(0.0%) f40 (unknown source) map [33] 100.0% ----------------------------------------------------------------------- hash-ref! [96] 100.0% [7] 432(5.2%) 0(0.0%) ??? ...es/herbie/master/src/core/taylor.rkt:406:23 for-loop [14] 100.0% ----------------------------------------------------------------------- hash-ref! [96] 100.0% [8] 240(2.9%) 0(0.0%) ??? ...es/herbie/master/src/core/taylor.rkt:509:23 for-loop [15] 100.0% ----------------------------------------------------------------------- matcher [106] 100.0% [9] 184(2.2%) 0(0.0%) ??? ...s/herbie/master/src/core/matcher.rkt:129:11 for-loop [16] 100.0% ----------------------------------------------------------------------- ??? [1] 100.0% [10] 8260(100.0%) 0(0.0%) profile-thunk16 ...e/pkgs/profile-lib/main.rkt:9:0 run [17] 100.0% ----------------------------------------------------------------------- approximate9 [2] 100.0% [11] 1200(14.5%) 0(0.0%) loop ...ies/herbie/master/src/core/taylor.rkt:86:4 hash-ref! [96] 100.0% ----------------------------------------------------------------------- ??? [4] 100.0% [12] 634(7.7%) 0(0.0%) for-loop ...rbie/master/src/core/taylor.rkt:290:52 hash-ref! [96] 100.0% ----------------------------------------------------------------------- ??? [5] 100.0% [13] 622(7.5%) 0(0.0%) for-loop ...rbie/master/src/core/taylor.rkt:303:27 hash-ref! [96] 100.0% ----------------------------------------------------------------------- ??? [7] 100.0% [14] 432(5.2%) 0(0.0%) for-loop ...rbie/master/src/core/taylor.rkt:412:39 hash-ref! [96] 100.0% ----------------------------------------------------------------------- ??? [8] 100.0% [15] 240(2.9%) 0(0.0%) for-loop ...rbie/master/src/core/taylor.rkt:513:35 parse-loop402 [18] 100.0% ----------------------------------------------------------------------- ??? [9] 100.0% [16] 184(2.2%) 0(0.0%) for-loop ...bie/master/src/core/matcher.rkt:131:15 hash-ref! [96] 100.0% ----------------------------------------------------------------------- profile-thunk16 [10] 100.0% [17] 8260(100.0%) 0(0.0%) run ...et-7.5/share/pkgs/profile-lib/main.rkt:39:2 .../more-scheme.rkt:261:28 [19] 100.0% ----------------------------------------------------------------------- for-loop [15] 100.0% [18] 240(2.9%) 0(0.0%) parse-loop402 (unknown source) for-loop [20] 100.0% ----------------------------------------------------------------------- for-loop [90] 9.9% run [17] 90.1% [19] 8260(100.0%) 844(10.2%) .../more-scheme.rkt:261:28 (unknown source) run-improve47 [21] 52.9% prepare-points-intervals [22] 19.2% get-final-combination [23] 6.7% oracle-error [25] 4.8% errors [79] 3.8% for-loop [26] 2.7% ??? [91] 2.2% ??? [89] 1.3% ordinary-value? [37] 1.2% ----------------------------------------------------------------------- parse-loop402 [18] 100.0% [20] 240(2.9%) 0(0.0%) for-loop ...rbie/master/src/core/taylor.rkt:516:59 f61 [24] 100.0% ----------------------------------------------------------------------- .../more-scheme.rkt:261:28 [19] 100.0% [21] 4870(59.0%) 0(0.0%) run-improve47 ...bie/master/src/mainloop.rkt:365:0 for-loop [27] 95.7% simplify! [39] 4.3% ----------------------------------------------------------------------- .../more-scheme.rkt:261:28 [19] 100.0% [22] 1588(19.2%) 0(0.0%) prepare-points-intervals ...r/src/points.rkt:122:0 loop [28] 100.0% ----------------------------------------------------------------------- .../more-scheme.rkt:261:28 [19] 100.0% [23] 554(6.7%) 0(0.0%) get-final-combination ...er/src/mainloop.rkt:390:0 infer-splitpoints [29] 100.0% ----------------------------------------------------------------------- hash-ref! [96] 45.9% for-loop [20] 54.1% [24] 444(5.4%) 0(0.0%) f61 (unknown source) eval-const-expr [64] 100.0% ----------------------------------------------------------------------- .../more-scheme.rkt:261:28 [19] 100.0% [25] 400(4.8%) 0(0.0%) oracle-error ...herbie/master/src/points.rkt:179:0 for-loop [30] 100.0% ----------------------------------------------------------------------- .../more-scheme.rkt:261:28 [19] 100.0% [26] 222(2.7%) 0(0.0%) for-loop ...ies/herbie/master/src/sandbox.rkt:69:8 errors-score [31] 100.0% ----------------------------------------------------------------------- run-improve47 [21] 100.0% [27] 4662(56.4%) 0(0.0%) for-loop ...s/herbie/master/src/mainloop.rkt:384:4 run-iter! [32] 100.0% ----------------------------------------------------------------------- prepare-points-intervals [22] 100.0% [28] 1588(19.2%) 0(0.0%) loop ...ghtlies/herbie/master/src/points.rkt:134:4 ??? [34] 37.9% loop [35] 37.4% ordinary-value? [37] 12.8% do-curry [38] 11.8% ----------------------------------------------------------------------- get-final-combination [23] 100.0% [29] 554(6.7%) 0(0.0%) infer-splitpoints ...ter/src/core/regimes.rkt:33:0 for-loop [36] 100.0% ----------------------------------------------------------------------- oracle-error [25] 100.0% [30] 400(4.8%) 0(0.0%) for-loop ...ies/herbie/master/src/points.rkt:180:2 map [33] 50.0% loop [72] 50.0% ----------------------------------------------------------------------- for-loop [26] 100.0% [31] 222(2.7%) 0(0.0%) errors-score ...herbie/master/src/points.rkt:187:0 loop [72] 100.0% ----------------------------------------------------------------------- for-loop [27] 100.0% [32] 4662(56.4%) 0(0.0%) run-iter! .../herbie/master/src/mainloop.rkt:346:0 simplify! [39] 40.8% gen-series! [40] 29.7% finalize-iter! [41] 25.6% gen-rewrites! [49] 3.9% ----------------------------------------------------------------------- for-loop [30] 26.0% f40 [6] 74.0% [33] 768(9.3%) 0(0.0%) map ...t-7.5/collects/racket/private/map.rkt:35:13 ??? [81] 26.0% parse-loop49 [44] 24.7% simplify-node [48] 24.2% f40 [6] 20.0% ??? [46] 5.0% ----------------------------------------------------------------------- loop [28] 100.0% [34] 602(7.3%) 0(0.0%) ??? ...ightlies/herbie/master/src/points.rkt:115:6 sample-multi-bounded [42] 100.0% ----------------------------------------------------------------------- loop [28] 100.0% [35] 594(7.2%) 200(2.4%) loop ...ightlies/herbie/master/src/points.rkt:79:2 ??? [45] 34.0% real->precision [47] 32.3% ----------------------------------------------------------------------- infer-splitpoints [29] 100.0% [36] 554(6.7%) 0(0.0%) for-loop ...erbie/master/src/core/regimes.rkt:45:6 option-on-expr [43] 100.0% ----------------------------------------------------------------------- .../more-scheme.rkt:261:28 [19] 49.5% loop [28] 50.5% [37] 404(4.9%) 404(4.9%) ordinary-value? ...erbie/master/src/float.rkt:51:0 ----------------------------------------------------------------------- loop [28] 100.0% [38] 188(2.3%) 188(2.3%) do-curry ...-7.5/collects/racket/function.rkt:71:2 ----------------------------------------------------------------------- run-improve47 [21] 9.9% run-iter! [32] 90.1% [39] 2108(25.5%) 0(0.0%) simplify! .../herbie/master/src/mainloop.rkt:224:0 ??? [50] 100.0% ----------------------------------------------------------------------- run-iter! [32] 100.0% [40] 1386(16.8%) 0(0.0%) gen-series! ...erbie/master/src/mainloop.rkt:160:0 for-loop [51] 100.0% ----------------------------------------------------------------------- run-iter! [32] 100.0% [41] 1192(14.4%) 0(0.0%) finalize-iter! ...ie/master/src/mainloop.rkt:278:0 ??? [52] 100.0% ----------------------------------------------------------------------- ??? [34] 100.0% [42] 602(7.3%) 0(0.0%) sample-multi-bounded ...master/src/points.rkt:14:0 random-ranges [53] 100.0% ----------------------------------------------------------------------- for-loop [36] 100.0% [43] 554(6.7%) 0(0.0%) option-on-expr ...aster/src/core/regimes.rkt:124:0 err-lsts->split-indices [54] 66.4% for-loop [58] 33.6% ----------------------------------------------------------------------- approximate9 [2] 49.5% map [33] 50.5% [44] 376(4.6%) 0(0.0%) parse-loop49 (unknown source) parse-loop74 [56] 50.5% simplify* [59] 49.5% ----------------------------------------------------------------------- loop [35] 100.0% [45] 202(2.4%) 202(2.4%) ??? ...tract/private/arrow-higher-order.rkt:379:33 ----------------------------------------------------------------------- map [33] 100.0% [46] 192(2.3%) 0(0.0%) ??? ...lies/herbie/master/src/core/reduce.rkt:56:5 for-loop [55] 100.0% ----------------------------------------------------------------------- loop [35] 100.0% [47] 192(2.3%) 0(0.0%) real->precision .../master/src/programs.rkt:118:11 ??? [89] 100.0% ----------------------------------------------------------------------- map [33] 100.0% [48] 186(2.3%) 0(0.0%) simplify-node ...e/master/src/core/reduce.rkt:45:0 gather-multiplicative-terms [57]100.0% ----------------------------------------------------------------------- run-iter! [32] 100.0% [49] 184(2.2%) 0(0.0%) gen-rewrites! ...bie/master/src/mainloop.rkt:183:0 for-loop [60] 100.0% ----------------------------------------------------------------------- simplify! [39] 100.0% [50] 2108(25.5%) 0(0.0%) ??? ...es/herbie/master/src/core/simplify.rkt:42:0 egraph-run [61] 100.0% ----------------------------------------------------------------------- gen-series! [40] 100.0% [51] 1386(16.8%) 0(0.0%) for-loop ...s/herbie/master/src/mainloop.rkt:167:7 taylor-alt [62] 100.0% ----------------------------------------------------------------------- finalize-iter! [41] 100.0% [52] 1192(14.4%) 0(0.0%) ??? ...contract/private/arrow-val-first.rkt:486:18 for-loop [63] 100.0% ----------------------------------------------------------------------- sample-multi-bounded [42] 100.0% [53] 602(7.3%) 0(0.0%) random-ranges ...erbie/master/src/common.rkt:164:0 build--> [65] 100.0% ----------------------------------------------------------------------- option-on-expr [43] 100.0% [54] 368(4.5%) 0(0.0%) err-lsts->split-indices .../core/regimes.rkt:263:0 loop [66] 100.0% ----------------------------------------------------------------------- ??? [46] 100.0% [55] 192(2.3%) 0(0.0%) for-loop ...herbie/master/src/core/reduce.rkt:57:7 pattern-match [67] 100.0% ----------------------------------------------------------------------- parse-loop49 [44] 100.0% [56] 190(2.3%) 0(0.0%) parse-loop74 (unknown source) eval-const-expr [64] 100.0% ----------------------------------------------------------------------- simplify-node [48] 100.0% [57] 186(2.3%) 186(2.3%) gather-multiplicative-terms ...re/reduce.rkt:109:0 ----------------------------------------------------------------------- option-on-expr [43] 100.0% [58] 186(2.3%) 0(0.0%) for-loop ...rbie/master/src/core/regimes.rkt:135:4 errors [79] 100.0% ----------------------------------------------------------------------- parse-loop49 [44] 100.0% [59] 186(2.3%) 0(0.0%) simplify* ...erbie/master/src/core/reduce.rkt:28:0 hash-ref! [96] 100.0% ----------------------------------------------------------------------- gen-rewrites! [49] 100.0% [60] 184(2.2%) 0(0.0%) for-loop .../herbie/master/src/mainloop.rkt:191:11 rewrite-expression-head23 [68] 100.0% ----------------------------------------------------------------------- ??? [50] 100.0% [61] 2108(25.5%) 0(0.0%) egraph-run .../pkgs/egg-herbie-linux/main.rkt:49:0 egraph-add-exprs [69] 100.0% ----------------------------------------------------------------------- for-loop [51] 100.0% [62] 1386(16.8%) 0(0.0%) taylor-alt ...herbie/master/src/mainloop.rkt:146:0 for-loop [70] 100.0% ----------------------------------------------------------------------- ??? [52] 100.0% [63] 1192(14.4%) 0(0.0%) for-loop ...ie/master/src/core/alt-table.rkt:201:2 atab-add-altn [71] 100.0% ----------------------------------------------------------------------- parse-loop74 [56] 30.0% f61 [24] 70.0% [64] 634(7.7%) 0(0.0%) eval-const-expr ...e/master/src/programs.rkt:144:0 temp85_0 [92] 37.9% eval [75] 32.2% loop [72] 30.0% ----------------------------------------------------------------------- random-ranges [53] 100.0% [65] 602(7.3%) 202(2.4%) build--> ...act/private/arrow-val-first.rkt:1214:0 coerce-contract [73] 66.4% ----------------------------------------------------------------------- err-lsts->split-indices [54] 100.0% [66] 368(4.5%) 0(0.0%) loop ...s/herbie/master/src/core/regimes.rkt:314:4 for-loop [74] 100.0% ----------------------------------------------------------------------- for-loop [55] 100.0% [67] 192(2.3%) 0(0.0%) pattern-match .../master/src/core/matcher.rkt:29:0 constant? [76] 100.0% ----------------------------------------------------------------------- for-loop [60] 100.0% [68] 184(2.2%) 0(0.0%) rewrite-expression-head23 ...core/matcher.rkt:83:0 rewriter [77] 100.0% ----------------------------------------------------------------------- egraph-run [61] 100.0% [69] 2108(25.5%) 0(0.0%) egraph-add-exprs ...gg-herbie-linux/main.rkt:111:0 ??? [78] 100.0% ----------------------------------------------------------------------- taylor-alt [62] 100.0% [70] 1386(16.8%) 0(0.0%) for-loop ...s/herbie/master/src/mainloop.rkt:152:6 ??? [89] 100.0% ----------------------------------------------------------------------- for-loop [63] 100.0% [71] 1192(14.4%) 0(0.0%) atab-add-altn ...ster/src/core/alt-table.rkt:204:0 errors [79] 100.0% ----------------------------------------------------------------------- errors-score [31] 0.0% apply-transformer52 [101] 15.5% eval-const-expr [64] 15.5% for-loop [30] 32.7% loop [72] 36.2% [72] 612(7.4%) 222(2.7%) loop (unknown source) loop [72] 36.2% ??? [81] 32.7% expand-capturing-lifts [85] 15.5% core-form-sym [84] 15.5% ----------------------------------------------------------------------- build--> [65] 100.0% [73] 400(4.8%) 0(0.0%) coerce-contract ...contract/private/guts.rkt:307:0 coerce-contract/f [80] 100.0% ----------------------------------------------------------------------- loop [66] 100.0% [74] 368(4.5%) 184(2.2%) for-loop ...rbie/master/src/core/regimes.rkt:279:4 for-loop [86] 50.0% ----------------------------------------------------------------------- eval-const-expr [64] 100.0% [75] 204(2.5%) 0(0.0%) eval (unknown source) namespace-syntax-introduce3 [82]100.0% ----------------------------------------------------------------------- pattern-match [67] 100.0% [76] 192(2.3%) 0(0.0%) constant? ...ie/master/src/syntax/syntax.rkt:726:0 value? [83] 100.0% ----------------------------------------------------------------------- rewrite-expression-head23 [68] 25.0% matcher [106] 75.0% [77] 184(2.2%) 0(0.0%) rewriter ...erbie/master/src/core/matcher.rkt:85:2 for-loop [87] 100.0% ----------------------------------------------------------------------- egraph-add-exprs [69] 100.0% [78] 2108(25.5%) 0(0.0%) ??? ...s/herbie/master/src/core/simplify.rkt:103:6 for-loop [88] 100.0% ----------------------------------------------------------------------- for-loop [58] 9.3% .../more-scheme.rkt:261:28 [19] 31.2% atab-add-altn [71] 59.5% [79] 2004(24.3%) 0(0.0%) errors ...tlies/herbie/master/src/points.rkt:192:0 for-loop [90] 90.7% temp85_0 [92] 9.3% ----------------------------------------------------------------------- coerce-contract [73] 100.0% [80] 400(4.8%) 0(0.0%) coerce-contract/f ...ntract/private/guts.rkt:372:0 coerce-simple-value [93] 100.0% ----------------------------------------------------------------------- loop [72] 50.0% map [33] 50.0% [81] 400(4.8%) 0(0.0%) ??? ...ghtlies/herbie/master/src/points.rkt:181:26 ??? [91] 50.0% ??? [89] 50.0% ----------------------------------------------------------------------- eval [75] 100.0% [82] 204(2.5%) 204(2.5%) namespace-syntax-introduce3 (unknown source) ----------------------------------------------------------------------- constant? [76] 100.0% [83] 192(2.3%) 192(2.3%) value? .../herbie/master/src/syntax/types.rkt:18:0 ----------------------------------------------------------------------- loop [72] 100.0% [84] 190(2.3%) 0(0.0%) core-form-sym (unknown source) resolve+shift28 [94] 100.0% ----------------------------------------------------------------------- loop [72] 100.0% [85] 190(2.3%) 0(0.0%) expand-capturing-lifts (unknown source) dispatch-transformer41 [95] 100.0% ----------------------------------------------------------------------- for-loop [74] 100.0% [86] 184(2.2%) 184(2.2%) for-loop ...rbie/master/src/core/regimes.rkt:283:8 ----------------------------------------------------------------------- rewriter [77] 100.0% [87] 184(2.2%) 184(2.2%) for-loop ...erbie/master/src/core/matcher.rkt:87:4 hash-ref! [96] 75.0% ----------------------------------------------------------------------- ??? [78] 100.0% [88] 2108(25.5%) 2108(25.5%) for-loop ...bie/master/src/core/simplify.rkt:121:2 ----------------------------------------------------------------------- real->precision [47] 9.6% ??? [81] 10.0% .../more-scheme.rkt:261:28 [19] 11.1% ??? [3] 20.0% location-do [97] 24.6% for-loop [70] 24.6% [89] 2000(24.2%) 422(5.1%) ??? ...tract/private/arrow-higher-order.rkt:375:33 location-do [97] 24.6% approximate9 [2] 24.6% hash-ref! [96] 20.0% bf [99] 9.6% ----------------------------------------------------------------------- errors [79] 100.0% [90] 1818(22.0%) 184(2.2%) for-loop ...ies/herbie/master/src/points.rkt:194:2 .../more-scheme.rkt:261:28 [19] 89.9% ----------------------------------------------------------------------- ??? [81] 35.2% .../more-scheme.rkt:261:28 [19] 64.8% [91] 568(6.9%) 568(6.9%) ??? .../herbie/master/src/syntax/syntax.rkt:214:17 ----------------------------------------------------------------------- errors [79] 43.7% eval-const-expr [64] 56.3% [92] 426(5.2%) 0(0.0%) temp85_0 (unknown source) compile15 [98] 100.0% ----------------------------------------------------------------------- coerce-contract/f [80] 100.0% [93] 400(4.8%) 400(4.8%) coerce-simple-value ...ract/private/guts.rkt:385:0 ----------------------------------------------------------------------- core-form-sym [84] 100.0% [94] 190(2.3%) 0(0.0%) resolve+shift28 (unknown source) fallback-loop [100] 100.0% ----------------------------------------------------------------------- expand-capturing-lifts [85] 100.0% [95] 190(2.3%) 0(0.0%) dispatch-transformer41 (unknown source) apply-transformer52 [101] 100.0% ----------------------------------------------------------------------- for-loop [14] 4.6% for-loop [16] 5.9% for-loop [87] 5.9% for-loop [13] 6.6% for-loop [12] 7.8% ??? [3] 11.0% simplify* [59] 11.8% ??? [102] 12.8% ??? [89] 16.8% loop [11] 16.8% [96] 1570(19.0%) 186(2.3%) hash-ref! .../racket/private/more-scheme.rkt:376:2 ??? [3] 27.8% ??? [102] 12.8% matcher [106] 11.7% ??? [4] 7.8% f40 [6] 7.0% ??? [5] 6.6% ??? [7] 4.6% taylor [105] 4.0% f61 [24] 3.2% ??? [8] 2.5% ----------------------------------------------------------------------- ??? [89] 35.8% location-do [97] 64.2% [97] 1386(16.8%) 0(0.0%) location-do ...herbie/master/src/programs.rkt:87:0 location-do [97] 64.2% ??? [89] 35.8% ----------------------------------------------------------------------- temp85_0 [92] 100.0% [98] 426(5.2%) 0(0.0%) compile15 (unknown source) temp91_0 [103] 100.0% ----------------------------------------------------------------------- ??? [89] 100.0% [99] 192(2.3%) 0(0.0%) bf ...ath-lib/math/private/bigfloat/mpfr.rkt:615:2 new-mpfr [104] 100.0% ----------------------------------------------------------------------- resolve+shift28 [94] 100.0% [100] 190(2.3%) 0(0.0%) fallback-loop (unknown source) for-loop [109] 100.0% ----------------------------------------------------------------------- dispatch-transformer41 [95] 100.0% [101] 190(2.3%) 0(0.0%) apply-transformer52 (unknown source) loop [72] 100.0% ----------------------------------------------------------------------- hash-ref! [96] 100.0% [102] 1012(12.3%) 0(0.0%) ??? ...ies/herbie/master/src/core/taylor.rkt:44:15 hash-ref! [96] 100.0% ----------------------------------------------------------------------- compile15 [98] 100.0% [103] 426(5.2%) 0(0.0%) temp91_0 (unknown source) compile-top9 [107] 100.0% ----------------------------------------------------------------------- bf [99] 100.0% [104] 192(2.3%) 192(2.3%) new-mpfr ...b/math/private/bigfloat/mpfr.rkt:348:0 ----------------------------------------------------------------------- hash-ref! [96] 100.0% [105] 188(2.3%) 188(2.3%) taylor .../herbie/master/src/core/taylor.rkt:169:0 ----------------------------------------------------------------------- hash-ref! [96] 100.0% [106] 184(2.2%) 0(0.0%) matcher ...erbie/master/src/core/matcher.rkt:117:2 ??? [9] 50.0% rewriter [77] 50.0% ----------------------------------------------------------------------- temp91_0 [103] 100.0% [107] 426(5.2%) 0(0.0%) compile-top9 (unknown source) compile-forms33 [108] 100.0% ----------------------------------------------------------------------- compile-top9 [107] 100.0% [108] 426(5.2%) 0(0.0%) compile-forms33 (unknown source) for-loop [109] 100.0% ----------------------------------------------------------------------- for-loop [109] 15.4% fallback-loop [100] 15.4% compile-forms33 [108] 69.2% [109] 616(7.5%) 190(2.3%) for-loop (unknown source) compile-module-linklet57 [110] 69.2% for-loop [109] 15.4% ----------------------------------------------------------------------- for-loop [109] 100.0% [110] 426(5.2%) 426(5.2%) compile-module-linklet57 (unknown source) -----------------------------------------------------------------------