Profiling results ----------------- Total cpu time observed: 7950ms (out of 7948ms) Number of samples taken: 36 (once every 221ms) ========================================================================= Caller Idx Total Self Name+src Local% ms(pct) ms(pct) Callee ========================================================================= [1] 7950(100.0%) 0(0.0%) ??? ...lects/racket/private/more-scheme.rkt:261:28 profile-thunk16 [10] 100.0% ------------------------------------------------------------------------- ??? [63] 100.0% [2] 2556(32.2%) 0(0.0%) approximate9 ...pler-alts/src/core/taylor.rkt:11:0 loop [11] 100.0% ------------------------------------------------------------------------- hash-ref! [69] 100.0% [3] 2556(32.2%) 0(0.0%) parse-loop74 (unknown source) eval-const-expr [20] 92.2% f61 [17] 7.8% ------------------------------------------------------------------------- hash-ref! [69] 100.0% [4] 1312(16.5%) 0(0.0%) ??? ...bie/simpler-alts/src/core/taylor.rkt:290:26 for-loop [12] 100.0% ------------------------------------------------------------------------- hash-ref! [69] 100.0% [5] 1076(13.5%) 0(0.0%) ??? ...bie/simpler-alts/src/core/taylor.rkt:300:23 for-loop [13] 100.0% ------------------------------------------------------------------------- for-loop [99] 100.0% [6] 408(5.1%) 0(0.0%) expand-implicit (unknown source) binding-lookup52 [16] 51.0% datum->syntax6 [18] 49.0% ------------------------------------------------------------------------- matcher [82] 100.0% [7] 406(5.1%) 0(0.0%) ??? ...ie/simpler-alts/src/core/matcher.rkt:129:11 for-loop [15] 100.0% ------------------------------------------------------------------------- loop [23] 100.0% [8] 216(2.7%) 0(0.0%) expand-id-application-form17 (unknown source) syntax-e/no-taint [14] 100.0% ------------------------------------------------------------------------- for-loop [99] 100.0% [9] 206(2.6%) 0(0.0%) syntax-e (unknown source) syntax-e/no-taint [14] 100.0% ------------------------------------------------------------------------- ??? [1] 100.0% [10] 7950(100.0%) 0(0.0%) profile-thunk16 ...e/pkgs/profile-lib/main.rkt:9:0 run [19] 100.0% ------------------------------------------------------------------------- approximate9 [2] 100.0% [11] 2556(32.2%) 0(0.0%) loop ...rbie/simpler-alts/src/core/taylor.rkt:86:4 ??? [63] 100.0% ------------------------------------------------------------------------- ??? [4] 100.0% [12] 1312(16.5%) 0(0.0%) for-loop ...impler-alts/src/core/taylor.rkt:290:52 ??? [21] 65.1% hash-ref! [69] 34.9% ------------------------------------------------------------------------- ??? [5] 100.0% [13] 1076(13.5%) 0(0.0%) for-loop ...impler-alts/src/core/taylor.rkt:303:27 hash-ref! [69] 100.0% ------------------------------------------------------------------------- syntax-e [9] 48.8% expand-id-application-form17 [8] 51.2% [14] 422(5.3%) 0(0.0%) syntax-e/no-taint (unknown source) loop [23] 100.0% ------------------------------------------------------------------------- ??? [7] 100.0% [15] 406(5.1%) 0(0.0%) for-loop ...mpler-alts/src/core/matcher.rkt:131:15 hash-ref! [69] 100.0% ------------------------------------------------------------------------- expand-implicit [6] 100.0% [16] 208(2.6%) 208(2.6%) binding-lookup52 (unknown source) ------------------------------------------------------------------------- parse-loop74 [3] 100.0% [17] 200(2.5%) 0(0.0%) f61 (unknown source) eval-const-expr [20] 100.0% ------------------------------------------------------------------------- expand-implicit [6] 100.0% [18] 200(2.5%) 0(0.0%) datum->syntax6 (unknown source) loop [23] 100.0% ------------------------------------------------------------------------- profile-thunk16 [10] 100.0% [19] 7950(100.0%) 0(0.0%) run ...et-7.5/share/pkgs/profile-lib/main.rkt:39:2 .../more-scheme.rkt:261:28 [22] 100.0% ------------------------------------------------------------------------- f61 [17] 7.8% parse-loop74 [3] 92.2% [20] 2556(32.2%) 0(0.0%) eval-const-expr ...ler-alts/src/programs.rkt:144:0 temp85_0 [78] 74.6% loop [23] 17.5% eval-one-top12 [24] 7.8% ------------------------------------------------------------------------- for-loop [12] 100.0% [21] 854(10.7%) 0(0.0%) ??? ...bie/simpler-alts/src/core/taylor.rkt:293:19 hash-ref! [69] 100.0% ------------------------------------------------------------------------- for-loop [79] 3.8% run [19] 96.2% [22] 7950(100.0%) 198(2.5%) .../more-scheme.rkt:261:28 (unknown source) run-improve47 [25] 68.4% prepare-points-intervals [26] 20.2% oracle-error [29] 2.5% eval-errors [28] 2.5% errors [71] 2.5% ??? [63] 1.3% ??? [27] 1.3% ------------------------------------------------------------------------- loop [23] 6.4% for-loop [99] 10.1% gf [102] 12.9% datum->syntax6 [18] 18.7% eval-const-expr [20] 22.5% syntax-e/no-taint [14] 29.3% [23] 1070(13.5%) 424(5.3%) loop (unknown source) gf [102] 40.6% expand-capturing-lifts [92] 22.5% expand-id-application-form17 [8] 10.1% loop [23] 6.4% ------------------------------------------------------------------------- eval-const-expr [20] 100.0% [24] 200(2.5%) 0(0.0%) eval-one-top12 (unknown source) for-loop [99] 100.0% ------------------------------------------------------------------------- .../more-scheme.rkt:261:28 [22] 100.0% [25] 5746(72.3%) 0(0.0%) run-improve47 ...mpler-alts/src/mainloop.rkt:365:0 for-loop [30] 84.5% simplify! [39] 15.5% ------------------------------------------------------------------------- .../more-scheme.rkt:261:28 [22] 100.0% [26] 1608(20.2%) 0(0.0%) prepare-points-intervals ...s/src/points.rkt:122:0 loop [31] 100.0% ------------------------------------------------------------------------- .../more-scheme.rkt:261:28 [22] 100.0% [27] 206(2.6%) 206(2.6%) ??? ...e/simpler-alts/src/syntax/syntax.rkt:214:17 ------------------------------------------------------------------------- .../more-scheme.rkt:261:28 [22] 100.0% [28] 200(2.5%) 0(0.0%) eval-errors ...e/simpler-alts/src/points.rkt:170:0 for-loop [32] 100.0% ------------------------------------------------------------------------- .../more-scheme.rkt:261:28 [22] 100.0% [29] 200(2.5%) 0(0.0%) oracle-error .../simpler-alts/src/points.rkt:179:0 for-loop [33] 100.0% ------------------------------------------------------------------------- run-improve47 [25] 100.0% [30] 4856(61.1%) 0(0.0%) for-loop ...ie/simpler-alts/src/mainloop.rkt:384:4 run-iter! [34] 100.0% ------------------------------------------------------------------------- prepare-points-intervals [26] 100.0% [31] 1608(20.2%) 200(2.5%) loop ...s/herbie/simpler-alts/src/points.rkt:134:4 loop [35] 62.7% ??? [36] 24.9% ------------------------------------------------------------------------- eval-errors [28] 100.0% [32] 200(2.5%) 200(2.5%) for-loop ...rbie/simpler-alts/src/points.rkt:172:2 ------------------------------------------------------------------------- oracle-error [29] 100.0% [33] 200(2.5%) 0(0.0%) for-loop ...rbie/simpler-alts/src/points.rkt:180:2 map [37] 100.0% ------------------------------------------------------------------------- for-loop [30] 100.0% [34] 4856(61.1%) 0(0.0%) run-iter! ...e/simpler-alts/src/mainloop.rkt:346:0 gen-series! [38] 52.6% finalize-iter! [40] 25.8% simplify! [39] 9.1% gen-rewrites! [41] 8.4% choose-best-alt! [44] 4.1% ------------------------------------------------------------------------- loop [31] 100.0% [35] 1008(12.7%) 200(2.5%) loop ...es/herbie/simpler-alts/src/points.rkt:79:2 ??? [63] 60.3% ??? [43] 19.8% ------------------------------------------------------------------------- loop [31] 100.0% [36] 400(5.0%) 0(0.0%) ??? ...es/herbie/simpler-alts/src/points.rkt:115:6 sample-multi-bounded [42] 100.0% ------------------------------------------------------------------------- for-loop [33] 100.0% [37] 200(2.5%) 200(2.5%) map ...t-7.5/collects/racket/private/map.rkt:35:13 ------------------------------------------------------------------------- run-iter! [34] 100.0% [38] 2556(32.2%) 0(0.0%) gen-series! ...simpler-alts/src/mainloop.rkt:160:0 for-loop [45] 100.0% ------------------------------------------------------------------------- run-iter! [34] 33.3% run-improve47 [25] 66.7% [39] 1334(16.8%) 0(0.0%) simplify! ...e/simpler-alts/src/mainloop.rkt:224:0 ??? [46] 100.0% ------------------------------------------------------------------------- run-iter! [34] 100.0% [40] 1252(15.7%) 0(0.0%) finalize-iter! ...pler-alts/src/mainloop.rkt:278:0 ??? [47] 100.0% ------------------------------------------------------------------------- run-iter! [34] 100.0% [41] 406(5.1%) 0(0.0%) gen-rewrites! ...mpler-alts/src/mainloop.rkt:183:0 for-loop [48] 100.0% ------------------------------------------------------------------------- ??? [36] 100.0% [42] 400(5.0%) 0(0.0%) sample-multi-bounded ...r-alts/src/points.rkt:14:0 random-ranges [49] 100.0% ------------------------------------------------------------------------- loop [35] 100.0% [43] 200(2.5%) 200(2.5%) ??? /opt/racket-7.5/collects/ffi/unsafe.rkt:938:4 ------------------------------------------------------------------------- run-iter! [34] 100.0% [44] 198(2.5%) 0(0.0%) choose-best-alt! ...er-alts/src/mainloop.rkt:117:0 ...ow-val-first.rkt:486:18 [50] 100.0% ------------------------------------------------------------------------- gen-series! [38] 100.0% [45] 2556(32.2%) 0(0.0%) for-loop ...ie/simpler-alts/src/mainloop.rkt:167:7 taylor-alt [51] 100.0% ------------------------------------------------------------------------- simplify! [39] 100.0% [46] 1334(16.8%) 0(0.0%) ??? ...bie/simpler-alts/src/core/simplify.rkt:42:0 egraph-run [52] 100.0% ------------------------------------------------------------------------- finalize-iter! [40] 100.0% [47] 1252(15.7%) 0(0.0%) ??? ...contract/private/arrow-val-first.rkt:486:18 for-loop [53] 100.0% ------------------------------------------------------------------------- gen-rewrites! [41] 100.0% [48] 406(5.1%) 0(0.0%) for-loop ...e/simpler-alts/src/mainloop.rkt:191:11 rewrite-expression-head23 [54] 100.0% ------------------------------------------------------------------------- sample-multi-bounded [42] 100.0% [49] 400(5.0%) 200(2.5%) random-ranges ...simpler-alts/src/common.rkt:164:0 build--> [55] 50.0% ------------------------------------------------------------------------- choose-best-alt! [44] 100.0% [50] 198(2.5%) 0(0.0%) ...ow-val-first.rkt:486:18 (unknown source) ??? [56] 100.0% ------------------------------------------------------------------------- for-loop [45] 100.0% [51] 2556(32.2%) 0(0.0%) taylor-alt .../simpler-alts/src/mainloop.rkt:146:0 for-loop [57] 100.0% ------------------------------------------------------------------------- ??? [46] 100.0% [52] 1334(16.8%) 0(0.0%) egraph-run .../pkgs/egg-herbie-linux/main.rkt:49:0 egraph-add-exprs [58] 100.0% ------------------------------------------------------------------------- ??? [47] 100.0% [53] 1252(15.7%) 0(0.0%) for-loop ...pler-alts/src/core/alt-table.rkt:201:2 atab-add-altn [59] 100.0% ------------------------------------------------------------------------- for-loop [48] 100.0% [54] 406(5.1%) 0(0.0%) rewrite-expression-head23 ...core/matcher.rkt:83:0 rewriter [60] 100.0% ------------------------------------------------------------------------- random-ranges [49] 100.0% [55] 200(2.5%) 0(0.0%) build--> ...act/private/arrow-val-first.rkt:1214:0 coerce-contract [61] 100.0% ------------------------------------------------------------------------- ...ow-val-first.rkt:486:18 [50] 100.0% [56] 198(2.5%) 0(0.0%) ??? ...ie/simpler-alts/src/core/alt-table.rkt:41:0 argmin [62] 100.0% ------------------------------------------------------------------------- taylor-alt [51] 100.0% [57] 2556(32.2%) 0(0.0%) for-loop ...ie/simpler-alts/src/mainloop.rkt:152:6 ??? [63] 100.0% ------------------------------------------------------------------------- egraph-run [52] 100.0% [58] 1334(16.8%) 0(0.0%) egraph-add-exprs ...gg-herbie-linux/main.rkt:111:0 ??? [64] 100.0% ------------------------------------------------------------------------- for-loop [53] 100.0% [59] 1252(15.7%) 0(0.0%) atab-add-altn ...alts/src/core/alt-table.rkt:204:0 errors [71] 84.0% best-and-tied-at-points [67] 16.0% ------------------------------------------------------------------------- rewrite-expression-head23 [54] 41.7% matcher [82] 58.3% [60] 406(5.1%) 0(0.0%) rewriter ...simpler-alts/src/core/matcher.rkt:85:2 for-loop [65] 100.0% ------------------------------------------------------------------------- build--> [55] 100.0% [61] 200(2.5%) 0(0.0%) coerce-contract ...contract/private/guts.rkt:307:0 coerce-contract/f [66] 100.0% ------------------------------------------------------------------------- ??? [56] 100.0% [62] 198(2.5%) 0(0.0%) argmin ...acket-7.5/collects/racket/list.rkt:765:0 ??? [68] 100.0% ------------------------------------------------------------------------- .../more-scheme.rkt:261:28 [22] 6.2% loop [35] 18.0% loop [11] 25.3% location-do [70] 25.3% for-loop [57] 25.3% [63] 3372(42.4%) 208(2.6%) ??? ...tract/private/arrow-higher-order.rkt:375:33 location-do [70] 25.3% approximate9 [2] 25.3% hash-ref! [69] 25.3% ival-mult [73] 18.0% ------------------------------------------------------------------------- egraph-add-exprs [58] 100.0% [64] 1334(16.8%) 0(0.0%) ??? ...ie/simpler-alts/src/core/simplify.rkt:103:6 for-loop [72] 100.0% ------------------------------------------------------------------------- rewriter [60] 100.0% [65] 406(5.1%) 0(0.0%) for-loop ...simpler-alts/src/core/matcher.rkt:87:4 hash-ref! [69] 83.4% for-loop [74] 16.6% ------------------------------------------------------------------------- coerce-contract [61] 100.0% [66] 200(2.5%) 0(0.0%) coerce-contract/f ...ntract/private/guts.rkt:372:0 coerce-simple-value [75] 100.0% ------------------------------------------------------------------------- atab-add-altn [59] 100.0% [67] 200(2.5%) 0(0.0%) best-and-tied-at-points ...core/alt-table.rkt:91:0 for-loop [76] 100.0% ------------------------------------------------------------------------- argmin [62] 100.0% [68] 198(2.5%) 0(0.0%) ??? ...herbie/simpler-alts/src/mainloop.rkt:114:10 errors [71] 100.0% ------------------------------------------------------------------------- for-loop [12] 3.1% ??? [81] 4.3% for-loop [15] 5.7% ??? [21] 7.9% for-loop [65] 8.0% ??? [80] 8.0% for-loop [13] 9.5% ??? [77] 26.8% ??? [63] 26.8% [69] 2962(37.3%) 204(2.6%) hash-ref! .../racket/private/more-scheme.rkt:376:2 ??? [77] 26.8% parse-loop74 [3] 26.8% matcher [82] 11.4% ??? [4] 11.0% ??? [5] 9.5% ??? [80] 8.0% ??? [81] 4.3% ------------------------------------------------------------------------- location-do [70] 20.4% ??? [63] 79.6% [70] 2556(32.2%) 0(0.0%) location-do .../simpler-alts/src/programs.rkt:87:0 ??? [63] 79.6% location-do [70] 20.4% ------------------------------------------------------------------------- .../more-scheme.rkt:261:28 [22] 13.6% ??? [68] 13.7% atab-add-altn [59] 72.8% [71] 1446(18.2%) 0(0.0%) errors ...herbie/simpler-alts/src/points.rkt:192:0 for-loop [79] 69.7% temp85_0 [78] 30.3% ------------------------------------------------------------------------- ??? [64] 100.0% [72] 1334(16.8%) 1334(16.8%) for-loop ...mpler-alts/src/core/simplify.rkt:121:2 ------------------------------------------------------------------------- ??? [63] 100.0% [73] 608(7.6%) 406(5.1%) ival-mult ...impler-alts/src/biginterval.rkt:129:0 bfmul [83] 33.2% ------------------------------------------------------------------------- for-loop [65] 100.0% [74] 202(2.5%) 0(0.0%) for-loop ...simpler-alts/src/core/matcher.rkt:94:8 fix-up-variables [84] 100.0% ------------------------------------------------------------------------- coerce-contract/f [66] 100.0% [75] 200(2.5%) 200(2.5%) coerce-simple-value ...ract/private/guts.rkt:385:0 ------------------------------------------------------------------------- best-and-tied-at-points [67] 100.0% [76] 200(2.5%) 200(2.5%) for-loop ...mpler-alts/src/core/alt-table.rkt:94:4 ------------------------------------------------------------------------- hash-ref! [69] 100.0% [77] 2556(32.2%) 0(0.0%) ??? ...rbie/simpler-alts/src/core/taylor.rkt:44:15 hash-ref! [69] 100.0% ------------------------------------------------------------------------- errors [71] 18.7% eval-const-expr [20] 81.3% [78] 2346(29.5%) 0(0.0%) temp85_0 (unknown source) compile15 [85] 100.0% ------------------------------------------------------------------------- errors [71] 100.0% [79] 1008(12.7%) 396(5.0%) for-loop ...rbie/simpler-alts/src/points.rkt:194:2 .../more-scheme.rkt:261:28 [22] 60.7% ------------------------------------------------------------------------- hash-ref! [69] 100.0% [80] 816(10.3%) 0(0.0%) ??? ...bie/simpler-alts/src/core/taylor.rkt:343:33 hash-ref! [69] 100.0% ------------------------------------------------------------------------- hash-ref! [69] 100.0% [81] 666(8.4%) 0(0.0%) ??? ...bie/simpler-alts/src/core/taylor.rkt:327:33 hash-ref! [69] 100.0% ------------------------------------------------------------------------- hash-ref! [69] 100.0% [82] 406(5.1%) 0(0.0%) matcher ...simpler-alts/src/core/matcher.rkt:117:2 ??? [7] 50.0% rewriter [60] 50.0% ------------------------------------------------------------------------- ival-mult [73] 100.0% [83] 202(2.5%) 0(0.0%) bfmul ...-lib/math/private/bigfloat/mpfr.rkt:835:4 new-mpfr [86] 100.0% ------------------------------------------------------------------------- for-loop [74] 100.0% [84] 202(2.5%) 0(0.0%) fix-up-variables ...lts/src/core/matcher.rkt:106:2 pattern-match [87] 100.0% ------------------------------------------------------------------------- temp85_0 [78] 100.0% [85] 2346(29.5%) 0(0.0%) compile15 (unknown source) temp91_0 [88] 100.0% ------------------------------------------------------------------------- bfmul [83] 100.0% [86] 202(2.5%) 202(2.5%) new-mpfr ...b/math/private/bigfloat/mpfr.rkt:348:0 ------------------------------------------------------------------------- fix-up-variables [84] 100.0% [87] 202(2.5%) 0(0.0%) pattern-match ...er-alts/src/core/matcher.rkt:29:0 for-loop [89] 100.0% ------------------------------------------------------------------------- compile15 [85] 100.0% [88] 2346(29.5%) 0(0.0%) temp91_0 (unknown source) temp118_0 [90] 100.0% ------------------------------------------------------------------------- pattern-match [87] 100.0% [89] 202(2.5%) 0(0.0%) for-loop ...simpler-alts/src/core/matcher.rkt:26:9 core457 [91] 100.0% ------------------------------------------------------------------------- temp91_0 [88] 100.0% [90] 2346(29.5%) 0(0.0%) temp118_0 (unknown source) expand-capturing-lifts [92] 100.0% ------------------------------------------------------------------------- for-loop [89] 100.0% [91] 202(2.5%) 0(0.0%) core457 ...acket/contract/private/arr-i.rkt:976:19 arrow-higher-order:lnp [93] 100.0% ------------------------------------------------------------------------- loop [23] 16.0% temp118_0 [90] 84.0% [92] 2794(35.1%) 224(2.8%) expand-capturing-lifts (unknown source) lambda-clause-expander [94] 84.0% dispatch-transformer41 [95] 8.0% ------------------------------------------------------------------------- core457 [91] 100.0% [93] 202(2.5%) 0(0.0%) arrow-higher-order:lnp ...w-higher-order.rkt:673:7 ??? [96] 100.0% ------------------------------------------------------------------------- expand-capturing-lifts [92] 100.0% [94] 2346(29.5%) 0(0.0%) lambda-clause-expander (unknown source) finish-bodys [97] 100.0% ------------------------------------------------------------------------- expand-capturing-lifts [92] 48.9% for-loop [99] 51.1% [95] 458(5.8%) 0(0.0%) dispatch-transformer41 (unknown source) apply-transformer52 [98] 100.0% ------------------------------------------------------------------------- arrow-higher-order:lnp [93] 100.0% [96] 202(2.5%) 202(2.5%) ??? ...et/contract/private/arity-checking.rkt:19:2 ------------------------------------------------------------------------- lambda-clause-expander [94] 24.5% for-loop [99] 75.5% [97] 2346(29.5%) 0(0.0%) finish-bodys (unknown source) for-loop [99] 100.0% ------------------------------------------------------------------------- dispatch-transformer41 [95] 100.0% [98] 458(5.8%) 0(0.0%) apply-transformer52 (unknown source) apply-transformer-in-context [100] 51.1% apply-post-expansion [101] 48.9% ------------------------------------------------------------------------- eval-one-top12 [24] 7.9% for-loop [99] 17.9% finish-bodys [97] 74.2% [99] 2546(32.0%) 1052(13.2%) for-loop (unknown source) finish-bodys [97] 55.2% for-loop [99] 17.9% dispatch-transformer41 [95] 3.1% expand-implicit [6] 1.9% add-local-binding!39 [104] 1.0% loop [23] 0.8% syntax-e [9] 0.6% dispatch-variable [105] 0.5% ------------------------------------------------------------------------- apply-transformer52 [98] 100.0% [100] 234(2.9%) 0(0.0%) apply-transformer-in-context (unknown source) go [103] 100.0% ------------------------------------------------------------------------- apply-transformer52 [98] 100.0% [101] 224(2.8%) 0(0.0%) apply-post-expansion (unknown source) gf [102] 100.0% ------------------------------------------------------------------------- apply-post-expansion [101] 4.3% loop [23] 95.7% [102] 646(8.1%) 206(2.6%) gf (unknown source) loop [23] 34.7% propagation-apply [107] 33.4% ------------------------------------------------------------------------- apply-transformer-in-context [100]100.0% [103] 234(2.9%) 0(0.0%) go .../collects/racket/private/qq-and-or.rkt:50:20 loop [106] 100.0% ------------------------------------------------------------------------- for-loop [99] 100.0% [104] 222(2.8%) 222(2.8%) add-local-binding!39 (unknown source) ------------------------------------------------------------------------- for-loop [99] 100.0% [105] 208(2.6%) 0(0.0%) dispatch-variable (unknown source) substitute-variable6 [108] 100.0% ------------------------------------------------------------------------- loop [106] 50.0% go [103] 50.0% [106] 234(2.9%) 0(0.0%) loop ...llects/racket/private/qq-and-or.rkt:101:61 loop [106] 50.0% stx-pair? [109] 50.0% ------------------------------------------------------------------------- gf [102] 100.0% [107] 216(2.7%) 216(2.7%) propagation-apply (unknown source) ------------------------------------------------------------------------- dispatch-variable [105] 100.0% [108] 208(2.6%) 208(2.6%) substitute-variable6 (unknown source) ------------------------------------------------------------------------- loop [106] 100.0% [109] 234(2.9%) 234(2.9%) stx-pair? .../collects/racket/private/stx.rkt:40:4 -------------------------------------------------------------------------