about summary refs log tree commit diff
path: root/sourcecodes/bnt-master/docs
diff options
context:
space:
mode:
Diffstat (limited to 'sourcecodes/bnt-master/docs')
-rw-r--r--sourcecodes/bnt-master/docs/ChangeLog.Sourceforge.txt4436
-rw-r--r--sourcecodes/bnt-master/docs/Eqns/lin_reg_eqn.gifbin0 -> 747 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/CPTgrass.gifbin0 -> 1144 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/HMEforMatlab.jpgbin0 -> 43717 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/ar1.fig13
-rw-r--r--sourcecodes/bnt-master/docs/Figures/ar1.gifbin0 -> 651 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/batnet.fig318
-rw-r--r--sourcecodes/bnt-master/docs/Figures/batnet.gifbin0 -> 223092 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/batnet_numbered.fig345
-rw-r--r--sourcecodes/bnt-master/docs/Figures/bic.pngbin0 -> 2614 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/cg1.fig60
-rw-r--r--sourcecodes/bnt-master/docs/Figures/cg1.gifbin0 -> 3155 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/chmm5.T5.fig323
-rw-r--r--sourcecodes/bnt-master/docs/Figures/chmm5.fig187
-rw-r--r--sourcecodes/bnt-master/docs/Figures/chmm5.gifbin0 -> 1725 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/chmm5.influence.fig200
-rw-r--r--sourcecodes/bnt-master/docs/Figures/chmm5.jpgbin0 -> 112167 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/chmm5.named.fig192
-rw-r--r--sourcecodes/bnt-master/docs/Figures/chmm5.small.fig181
-rw-r--r--sourcecodes/bnt-master/docs/Figures/chmm5_circle.fig162
-rw-r--r--sourcecodes/bnt-master/docs/Figures/chmm5_nobold.fig187
-rw-r--r--sourcecodes/bnt-master/docs/Figures/fa.eps356
-rw-r--r--sourcecodes/bnt-master/docs/Figures/fa.fig16
-rw-r--r--sourcecodes/bnt-master/docs/Figures/fa.gifbin0 -> 669 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/fa_caption.fig13
-rw-r--r--sourcecodes/bnt-master/docs/Figures/fa_discrete.fig43
-rw-r--r--sourcecodes/bnt-master/docs/Figures/fa_discrete.gifbin0 -> 1362 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/fa_discrete_single.fig18
-rw-r--r--sourcecodes/bnt-master/docs/Figures/fa_regular.fig36
-rw-r--r--sourcecodes/bnt-master/docs/Figures/fa_regular.gifbin0 -> 2089 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/fa_scalar.eps414
-rw-r--r--sourcecodes/bnt-master/docs/Figures/fa_scalar.fig41
-rw-r--r--sourcecodes/bnt-master/docs/Figures/fa_scalar.gifbin0 -> 1374 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/fa_scalar_caption.fig38
-rw-r--r--sourcecodes/bnt-master/docs/Figures/factorial_hmm3.fig81
-rw-r--r--sourcecodes/bnt-master/docs/Figures/filter.eps9861
-rw-r--r--sourcecodes/bnt-master/docs/Figures/filter.fig74
-rw-r--r--sourcecodes/bnt-master/docs/Figures/filter.gifbin0 -> 5185 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/filter.tex51
-rw-r--r--sourcecodes/bnt-master/docs/Figures/gaussplot.pngbin0 -> 1602 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/hme.fig35
-rw-r--r--sourcecodes/bnt-master/docs/Figures/hme.gifbin0 -> 1566 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/hme_dec_boundary.gifbin0 -> 99625 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/hme_dec_boundary.pngbin0 -> 13636 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/hmm3.fig39
-rw-r--r--sourcecodes/bnt-master/docs/Figures/hmm3.gifbin0 -> 680 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/hmm3letter.fig39
-rw-r--r--sourcecodes/bnt-master/docs/Figures/hmm3letter.gifbin0 -> 735 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/hmm3letter.jpgbin0 -> 3684 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/hmm4.fig55
-rw-r--r--sourcecodes/bnt-master/docs/Figures/hmm4.gifbin0 -> 994 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/hmm4_params.fig81
-rw-r--r--sourcecodes/bnt-master/docs/Figures/hmm4_params.gifbin0 -> 1579 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/hmm4_paramsX.fig81
-rw-r--r--sourcecodes/bnt-master/docs/Figures/hmm4_square.fig55
-rw-r--r--sourcecodes/bnt-master/docs/Figures/hmm_ar.fig30
-rw-r--r--sourcecodes/bnt-master/docs/Figures/hmm_ar.gifbin0 -> 915 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/hmm_coupled.fig65
-rw-r--r--sourcecodes/bnt-master/docs/Figures/hmm_coupled.gifbin0 -> 1573 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/hmm_factorial.fig50
-rw-r--r--sourcecodes/bnt-master/docs/Figures/hmm_factorial.gifbin0 -> 1354 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/hmm_gauss.fig27
-rw-r--r--sourcecodes/bnt-master/docs/Figures/hmm_gauss.gifbin0 -> 959 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/hmm_io.fig44
-rw-r--r--sourcecodes/bnt-master/docs/Figures/hmm_io.gifbin0 -> 1497 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/hmm_mixgauss.fig52
-rw-r--r--sourcecodes/bnt-master/docs/Figures/hmm_mixgauss.gifbin0 -> 1501 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/hmm_zoo.fig162
-rw-r--r--sourcecodes/bnt-master/docs/Figures/hmm_zoo.gifbin0 -> 6013 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/hmm_zoo_names.fig169
-rw-r--r--sourcecodes/bnt-master/docs/Figures/hmm_zoo_small.fig104
-rw-r--r--sourcecodes/bnt-master/docs/Figures/ifa.eps470
-rw-r--r--sourcecodes/bnt-master/docs/Figures/ifa.fig59
-rw-r--r--sourcecodes/bnt-master/docs/Figures/ifa.gifbin0 -> 1918 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/kf.fig27
-rw-r--r--sourcecodes/bnt-master/docs/Figures/kf.gifbin0 -> 927 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/kf_input.fig40
-rw-r--r--sourcecodes/bnt-master/docs/Figures/kf_input.gifbin0 -> 1590 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/kf_notime.fig26
-rw-r--r--sourcecodes/bnt-master/docs/Figures/kf_obs_track.fig43
-rw-r--r--sourcecodes/bnt-master/docs/Figures/kf_scalar_track.fig59
-rw-r--r--sourcecodes/bnt-master/docs/Figures/kfhead.jpgbin0 -> 53607 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/mathbymatlab.gifbin0 -> 3737 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/mcmc_accept.jpgbin0 -> 44464 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/mcmc_post.jpgbin0 -> 46888 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/mfa.eps347
-rw-r--r--sourcecodes/bnt-master/docs/Figures/mfa.fig24
-rw-r--r--sourcecodes/bnt-master/docs/Figures/mfa.gifbin0 -> 736 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/mixexp.fig23
-rw-r--r--sourcecodes/bnt-master/docs/Figures/mixexp.gifbin0 -> 929 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/mixexp_after.gifbin0 -> 260378 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/mixexp_before.gifbin0 -> 256987 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/mixexp_data.gifbin0 -> 252431 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/model_select.pngbin0 -> 1808 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/qmr.fig50
-rw-r--r--sourcecodes/bnt-master/docs/Figures/qmr.gifbin0 -> 2562 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/qmr.jpgbin0 -> 48177 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/qmr.rnd.jpgbin0 -> 15703 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/rainer_dbn.jpgbin0 -> 118061 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/rainer_tied.fig88
-rw-r--r--sourcecodes/bnt-master/docs/Figures/rainer_tied.gifbin0 -> 3158 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/sar.fig37
-rw-r--r--sourcecodes/bnt-master/docs/Figures/sar.gifbin0 -> 1018 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/skf.fig48
-rw-r--r--sourcecodes/bnt-master/docs/Figures/skf.gifbin0 -> 1620 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/skf3.fig71
-rw-r--r--sourcecodes/bnt-master/docs/Figures/skf3_nobold.fig66
-rw-r--r--sourcecodes/bnt-master/docs/Figures/skf3_nosolid.fig66
-rw-r--r--sourcecodes/bnt-master/docs/Figures/skf3_polytree.fig60
-rw-r--r--sourcecodes/bnt-master/docs/Figures/sprinkler.fig73
-rw-r--r--sourcecodes/bnt-master/docs/Figures/sprinkler.gifbin0 -> 3001 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/sprinkler.jpgbin0 -> 10547 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/sprinkler.noparams.fig31
-rw-r--r--sourcecodes/bnt-master/docs/Figures/sprinkler_bar.gifbin0 -> 3313 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/sprinkler_bar.jpgbin0 -> 34926 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/sprinkler_bar.pngbin0 -> 2217 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/water3.cts.fig266
-rw-r--r--sourcecodes/bnt-master/docs/Figures/water3.fig279
-rw-r--r--sourcecodes/bnt-master/docs/Figures/water3.gifbin0 -> 9658 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/water3_75.gifbin0 -> 6642 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Figures/water3_circle.fig231
-rw-r--r--sourcecodes/bnt-master/docs/Figures/water3_named_nodes.fig279
-rw-r--r--sourcecodes/bnt-master/docs/Figures/water3_nolabels.fig243
-rw-r--r--sourcecodes/bnt-master/docs/GR03~1.PDFbin0 -> 311327 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Talks/BNT_mathworks.pptbin0 -> 1189376 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Talks/gR03.pptbin0 -> 6582272 bytes
-rw-r--r--sourcecodes/bnt-master/docs/Talks/stair_BNT_mathworks.pptbin0 -> 2010624 bytes
-rw-r--r--sourcecodes/bnt-master/docs/adj2pajek2.m86
-rw-r--r--sourcecodes/bnt-master/docs/bnsoftOld.html1078
-rw-r--r--sourcecodes/bnt-master/docs/bnt.html359
-rw-r--r--sourcecodes/bnt-master/docs/bnt_download.html16
-rw-r--r--sourcecodes/bnt-master/docs/bnt_pre_sf.html350
-rw-r--r--sourcecodes/bnt-master/docs/cellarray.html59
-rw-r--r--sourcecodes/bnt-master/docs/changelog.html1617
-rw-r--r--sourcecodes/bnt-master/docs/dbn_hmm_demo.m37
-rw-r--r--sourcecodes/bnt-master/docs/gr03.pdfbin0 -> 311327 bytes
-rw-r--r--sourcecodes/bnt-master/docs/graph_to_dot.m86
-rw-r--r--sourcecodes/bnt-master/docs/graphviz.html66
-rw-r--r--sourcecodes/bnt-master/docs/install.html32
-rw-r--r--sourcecodes/bnt-master/docs/join.gifbin0 -> 1443 bytes
-rw-r--r--sourcecodes/bnt-master/docs/license.gpl450
-rw-r--r--sourcecodes/bnt-master/docs/majorFeatures.html113
-rw-r--r--sourcecodes/bnt-master/docs/mathbymatlab.gifbin0 -> 3737 bytes
-rw-r--r--sourcecodes/bnt-master/docs/matlab_comparison.html62
-rw-r--r--sourcecodes/bnt-master/docs/numDAGsEqn.pngbin0 -> 2375 bytes
-rw-r--r--sourcecodes/bnt-master/docs/numDAGsEqn2.pngbin0 -> 2139 bytes
-rw-r--r--sourcecodes/bnt-master/docs/param_tieing.html47
-rw-r--r--sourcecodes/bnt-master/docs/supportedModels.html32
-rw-r--r--sourcecodes/bnt-master/docs/usage.html3072
-rw-r--r--sourcecodes/bnt-master/docs/usage_02nov13.html3215
-rw-r--r--sourcecodes/bnt-master/docs/usage_cropped.html3232
-rw-r--r--sourcecodes/bnt-master/docs/usage_dbn.html719
-rw-r--r--sourcecodes/bnt-master/docs/usage_dbn_02nov13.html715
-rw-r--r--sourcecodes/bnt-master/docs/usage_sf.html3242
-rw-r--r--sourcecodes/bnt-master/docs/whyNotSourceforge.html17
155 files changed, 40442 insertions, 0 deletions
diff --git a/sourcecodes/bnt-master/docs/ChangeLog.Sourceforge.txt b/sourcecodes/bnt-master/docs/ChangeLog.Sourceforge.txt
new file mode 100644
index 00000000..17ec3df1
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/ChangeLog.Sourceforge.txt
@@ -0,0 +1,4436 @@
+
+
+2007-02-11 17:12  nsaunier
+
+	* BNT/learning/learn_struct_pdag_pc.m: Bug submitted by Imme Ebert-Uphoff (ebert@tree.com) (see Thu Feb 8, 2007 email on the BNT mailing list).
+
+2005-11-26 12:12  yozhik
+
+	* BNT/inference/dynamic/@hmm_inf_engine/fwdback_twoslice.m: merged
+	  fwdback_twoslice.m to release branch
+
+2005-11-25 17:24  nsaunier
+
+	* BNT/inference/dynamic/@hmm_inf_engine/fwdback_twoslice.m: adding
+	  old missing fwdback_twoslice.m
+
+2005-11-25 17:24  yozhik
+
+	* BNT/inference/dynamic/@hmm_inf_engine/fwdback_twoslice.m: file
+	  fwdback_twoslice.m was added on branch release-1_0 on 2005-11-26
+	  20:12:05 +0000
+
+2005-09-25 15:54  yozhik
+
+	* BNT/add_BNT_to_path.m: fix paths
+
+2005-09-25 15:30  yozhik
+
+	* BNT/add_BNT_to_path.m: Restored directories to path.
+
+2005-09-25 15:29  yozhik
+
+	* HMM/fwdback_twoslice.m: added missing fwdback_twoslice
+
+2005-09-17 11:14  yozhik
+
+	* ChangeLog, BNT/add_BNT_to_path.m, BNT/test_BNT.m,
+	  BNT/examples/static/cmp_inference_static.m,
+	  BNT/inference/dynamic/@hmm_inf_engine/enter_evidence.m: Merged
+	  bug fixes from HEAD.
+
+2005-09-17 11:11  yozhik
+
+	* ChangeLog: added change log
+
+2005-09-17 11:11  yozhik
+
+	* ChangeLog: file ChangeLog was added on branch release-1_0 on
+	  2005-09-17 18:14:47 +0000
+
+2005-09-17 10:00  yozhik
+
+	* BNT/inference/dynamic/@hmm_inf_engine/enter_evidence.m: Temporary
+	  rollback to fix error, per Kevin.
+
+2005-09-17 09:59  yozhik
+
+	* BNT/examples/static/cmp_inference_static.m: Commented out
+	  erroneous line, per Kevin.
+
+2005-09-17 09:58  yozhik
+
+	* BNT/add_BNT_to_path.m: Changed to require BNT_HOME to be
+	  predefined.
+
+2005-09-17 09:56  yozhik
+
+	* BNT/test_BNT.m: Commented out problematic tests.
+
+2005-09-17 09:38  yozhik
+
+	* BNT/test_BNT.m: renable tests
+
+2005-09-12 22:18  yozhik
+
+	* KPMtools/pca_kpm.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-09-12 22:18  yozhik
+
+	* KPMtools/pca_kpm.m: Initial revision
+
+2005-08-29 10:44  yozhik
+
+	* graph/: README.txt, Old/best_first_elim_order.m,
+	  Old/dag_to_jtree.m, Old/dfs.m, Old/dsep_test.m,
+	  Old/mk_2D_lattice_slow.m, acyclic.m, assignEdgeNums.m,
+	  best_first_elim_order.m, check_jtree_property.m,
+	  check_triangulated.m, children.m, cliques_to_jtree.m,
+	  cliques_to_strong_jtree.m, connected_graph.m,
+	  dag_to_essential_graph.m, dfs.m, dfs_test.m, dijkstra.m,
+	  family.m, graph_separated.m, graph_to_jtree.m,
+	  min_subtree_con_nodes.m, minimum_spanning_tree.m, minspan.m,
+	  mk_2D_lattice.m, mk_2D_lattice_slow.m, mk_adj_mat.m,
+	  mk_adjmat_chain.m, mk_all_dags.m, mk_nbrs_of_dag.m,
+	  mk_nbrs_of_digraph.m, mk_nbrs_of_digraph_broken.m,
+	  mk_nbrs_of_digraph_not_vectorized.m, mk_rnd_dag.m,
+	  mk_rnd_dag_given_edge_prob.m, mk_rooted_tree.m, mk_undirected.m,
+	  moralize.m, neighbors.m, parents.m, pred2path.m,
+	  reachability_graph.m, scc.m, strong_elim_order.m, test.m,
+	  test_strong_root.m, topological_sort.m, trees.txt, triangulate.c,
+	  triangulate.m, triangulate_2Dlattice_demo.m, triangulate_test.m:
+	  Initial import of code base from Kevin Murphy.
+
+2005-08-29 10:44  yozhik
+
+	* graph/: README.txt, Old/best_first_elim_order.m,
+	  Old/dag_to_jtree.m, Old/dfs.m, Old/dsep_test.m,
+	  Old/mk_2D_lattice_slow.m, acyclic.m, assignEdgeNums.m,
+	  best_first_elim_order.m, check_jtree_property.m,
+	  check_triangulated.m, children.m, cliques_to_jtree.m,
+	  cliques_to_strong_jtree.m, connected_graph.m,
+	  dag_to_essential_graph.m, dfs.m, dfs_test.m, dijkstra.m,
+	  family.m, graph_separated.m, graph_to_jtree.m,
+	  min_subtree_con_nodes.m, minimum_spanning_tree.m, minspan.m,
+	  mk_2D_lattice.m, mk_2D_lattice_slow.m, mk_adj_mat.m,
+	  mk_adjmat_chain.m, mk_all_dags.m, mk_nbrs_of_dag.m,
+	  mk_nbrs_of_digraph.m, mk_nbrs_of_digraph_broken.m,
+	  mk_nbrs_of_digraph_not_vectorized.m, mk_rnd_dag.m,
+	  mk_rnd_dag_given_edge_prob.m, mk_rooted_tree.m, mk_undirected.m,
+	  moralize.m, neighbors.m, parents.m, pred2path.m,
+	  reachability_graph.m, scc.m, strong_elim_order.m, test.m,
+	  test_strong_root.m, topological_sort.m, trees.txt, triangulate.c,
+	  triangulate.m, triangulate_2Dlattice_demo.m, triangulate_test.m:
+	  Initial revision
+
+2005-08-26 18:08  yozhik
+
+	* KPMtools/fullfileKPM.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-08-26 18:08  yozhik
+
+	* KPMtools/fullfileKPM.m: Initial revision
+
+2005-08-21 13:00  yozhik
+
+	*
+	  BNT/inference/static/@pearl_inf_engine/private/parallel_protocol.m:
+	  Initial import of code base from Kevin Murphy.
+
+2005-08-21 13:00  yozhik
+
+	*
+	  BNT/inference/static/@pearl_inf_engine/private/parallel_protocol.m:
+	  Initial revision
+
+2005-07-11 12:07  yozhik
+
+	* KPMtools/plotcov2New.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-07-11 12:07  yozhik
+
+	* KPMtools/plotcov2New.m: Initial revision
+
+2005-07-06 12:32  yozhik
+
+	* KPMtools/montageKPM2.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-07-06 12:32  yozhik
+
+	* KPMtools/montageKPM2.m: Initial revision
+
+2005-06-27 18:35  yozhik
+
+	* KPMtools/montageKPM3.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-06-27 18:35  yozhik
+
+	* KPMtools/montageKPM3.m: Initial revision
+
+2005-06-27 18:30  yozhik
+
+	* KPMtools/cell2matPad.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-06-27 18:30  yozhik
+
+	* KPMtools/cell2matPad.m: Initial revision
+
+2005-06-15 14:13  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/gaussian_CPD.m: Initial import of code
+	  base from Kevin Murphy.
+
+2005-06-15 14:13  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/gaussian_CPD.m: Initial revision
+
+2005-06-08 18:56  yozhik
+
+	* Kalman/testKalman.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-06-08 18:56  yozhik
+
+	* Kalman/testKalman.m: Initial revision
+
+2005-06-08 18:25  yozhik
+
+	* HMM/: testHMM.m, fixed_lag_smoother_demo.m: Initial import of
+	  code base from Kevin Murphy.
+
+2005-06-08 18:25  yozhik
+
+	* HMM/: testHMM.m, fixed_lag_smoother_demo.m: Initial revision
+
+2005-06-08 18:22  yozhik
+
+	* HMM/: README.txt, dhmm_em.m: Initial import of code base from
+	  Kevin Murphy.
+
+2005-06-08 18:22  yozhik
+
+	* HMM/: README.txt, dhmm_em.m: Initial revision
+
+2005-06-08 18:17  yozhik
+
+	* HMM/fwdback.m: Initial import of code base from Kevin Murphy.
+
+2005-06-08 18:17  yozhik
+
+	* HMM/fwdback.m: Initial revision
+
+2005-06-05 11:46  yozhik
+
+	* KPMtools/: rectintLoopC.c, rectintLoopC.dll: Initial import of
+	  code base from Kevin Murphy.
+
+2005-06-05 11:46  yozhik
+
+	* KPMtools/: rectintLoopC.c, rectintLoopC.dll: Initial revision
+
+2005-06-01 12:39  yozhik
+
+	* KPMtools/montageKPM.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-06-01 12:39  yozhik
+
+	* KPMtools/montageKPM.m: Initial revision
+
+2005-05-31 21:49  yozhik
+
+	* KPMtools/initFigures.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-31 21:49  yozhik
+
+	* KPMtools/initFigures.m: Initial revision
+
+2005-05-31 11:19  yozhik
+
+	* KPMstats/unidrndKPM.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-31 11:19  yozhik
+
+	* KPMstats/unidrndKPM.m: Initial revision
+
+2005-05-30 15:08  yozhik
+
+	* KPMtools/filepartsLast.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-30 15:08  yozhik
+
+	* KPMtools/filepartsLast.m: Initial revision
+
+2005-05-29 23:01  yozhik
+
+	* KPMtools/plotBox.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-29 23:01  yozhik
+
+	* KPMtools/plotBox.m: Initial revision
+
+2005-05-25 18:31  yozhik
+
+	* KPMtools/plotColors.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-25 18:31  yozhik
+
+	* KPMtools/plotColors.m: Initial revision
+
+2005-05-25 12:11  yozhik
+
+	* KPMtools/genpathKPM.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-25 12:11  yozhik
+
+	* KPMtools/genpathKPM.m: Initial revision
+
+2005-05-23 17:03  yozhik
+
+	* netlab3.3/demhmc1.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-23 17:03  yozhik
+
+	* netlab3.3/demhmc1.m: Initial revision
+
+2005-05-23 16:44  yozhik
+
+	* netlab3.3/gmminit.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-23 16:44  yozhik
+
+	* netlab3.3/gmminit.m: Initial revision
+
+2005-05-23 16:07  yozhik
+
+	* netlab3.3/metrop.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-23 16:07  yozhik
+
+	* netlab3.3/metrop.m: Initial revision
+
+2005-05-22 23:23  yozhik
+
+	* netlab3.3/demmet1.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-22 23:23  yozhik
+
+	* netlab3.3/demmet1.m: Initial revision
+
+2005-05-22 16:32  yozhik
+
+	* KPMstats/: dirichletrnd.m, dirichletpdf.m, test_dir.m,
+	  multirnd.m, multipdf.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-22 16:32  yozhik
+
+	* KPMstats/: dirichletrnd.m, dirichletpdf.m, test_dir.m,
+	  multirnd.m, multipdf.m: Initial revision
+
+2005-05-13 13:52  yozhik
+
+	* KPMtools/: asort.m, dirKPM.m: Initial import of code base from
+	  Kevin Murphy.
+
+2005-05-13 13:52  yozhik
+
+	* KPMtools/: asort.m, dirKPM.m: Initial revision
+
+2005-05-09 18:32  yozhik
+
+	* netlab3.3/dem2ddat.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-09 18:32  yozhik
+
+	* netlab3.3/dem2ddat.m: Initial revision
+
+2005-05-09 15:20  yozhik
+
+	* KPMtools/: mkdirKPM.m, optimalMatching.m, optimalMatchingTest.m,
+	  subsets1.m: Initial import of code base from Kevin Murphy.
+
+2005-05-09 15:20  yozhik
+
+	* KPMtools/: mkdirKPM.m, optimalMatching.m, optimalMatchingTest.m,
+	  subsets1.m: Initial revision
+
+2005-05-09 09:47  yozhik
+
+	* KPMtools/bipartiteMatchingDemo.m: Initial import of code base
+	  from Kevin Murphy.
+
+2005-05-09 09:47  yozhik
+
+	* KPMtools/bipartiteMatchingDemo.m: Initial revision
+
+2005-05-08 22:25  yozhik
+
+	* KPMtools/bipartiteMatchingIntProg.m: Initial import of code base
+	  from Kevin Murphy.
+
+2005-05-08 22:25  yozhik
+
+	* KPMtools/bipartiteMatchingIntProg.m: Initial revision
+
+2005-05-08 21:45  yozhik
+
+	* KPMtools/bipartiteMatchingDemoPlot.m: Initial import of code base
+	  from Kevin Murphy.
+
+2005-05-08 21:45  yozhik
+
+	* KPMtools/bipartiteMatchingDemoPlot.m: Initial revision
+
+2005-05-08 19:55  yozhik
+
+	* KPMtools/subsetsFixedSize.m: Initial import of code base from
+	  Kevin Murphy.
+
+2005-05-08 19:55  yozhik
+
+	* KPMtools/subsetsFixedSize.m: Initial revision
+
+2005-05-08 15:48  yozhik
+
+	* KPMtools/centeringMatrix.m: Initial import of code base from
+	  Kevin Murphy.
+
+2005-05-08 15:48  yozhik
+
+	* KPMtools/centeringMatrix.m: Initial revision
+
+2005-05-08 10:51  yozhik
+
+	* netlab3.3/demgmm1.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-08 10:51  yozhik
+
+	* netlab3.3/demgmm1.m: Initial revision
+
+2005-05-06 18:09  yozhik
+
+	* BNT/add_BNT_to_path.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-06 18:09  yozhik
+
+	* BNT/add_BNT_to_path.m: Initial revision
+
+2005-05-03 21:35  yozhik
+
+	* KPMstats/standardize.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-03 21:35  yozhik
+
+	* KPMstats/standardize.m: Initial revision
+
+2005-05-03 13:18  yozhik
+
+	* KPMstats/histCmpChi2.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-03 13:18  yozhik
+
+	* KPMstats/histCmpChi2.m: Initial revision
+
+2005-05-03 12:01  yozhik
+
+	* KPMtools/strsplit.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-03 12:01  yozhik
+
+	* KPMtools/strsplit.m: Initial revision
+
+2005-05-02 13:19  yozhik
+
+	* KPMtools/hsvKPM.m: Initial import of code base from Kevin Murphy.
+
+2005-05-02 13:19  yozhik
+
+	* KPMtools/hsvKPM.m: Initial revision
+
+2005-04-27 11:34  yozhik
+
+	* BNT/potentials/@dpot/: subsasgn.m, subsref.m: Initial import of
+	  code base from Kevin Murphy.
+
+2005-04-27 11:34  yozhik
+
+	* BNT/potentials/@dpot/: subsasgn.m, subsref.m: Initial revision
+
+2005-04-27 10:58  yozhik
+
+	* KPMtools/mahal2conf.m, nethelp3.3/conffig.htm,
+	  nethelp3.3/confmat.htm, nethelp3.3/conjgrad.htm,
+	  nethelp3.3/consist.htm, nethelp3.3/convertoldnet.htm,
+	  nethelp3.3/datread.htm, nethelp3.3/datwrite.htm,
+	  nethelp3.3/dem2ddat.htm, nethelp3.3/demard.htm,
+	  nethelp3.3/demev1.htm, nethelp3.3/demev2.htm,
+	  nethelp3.3/demev3.htm, nethelp3.3/demgauss.htm,
+	  nethelp3.3/demglm1.htm, nethelp3.3/demglm2.htm,
+	  nethelp3.3/demgmm1.htm, nethelp3.3/demgmm2.htm,
+	  nethelp3.3/demgmm3.htm, nethelp3.3/demgmm4.htm,
+	  nethelp3.3/demgmm5.htm, nethelp3.3/demgp.htm,
+	  nethelp3.3/demgpard.htm, nethelp3.3/demgpot.htm,
+	  nethelp3.3/demgtm1.htm, nethelp3.3/demgtm2.htm,
+	  nethelp3.3/demhint.htm, nethelp3.3/demhmc1.htm,
+	  nethelp3.3/demhmc2.htm, nethelp3.3/demhmc3.htm,
+	  nethelp3.3/demkmn1.htm, nethelp3.3/demknn1.htm,
+	  nethelp3.3/demmdn1.htm, nethelp3.3/demmet1.htm,
+	  nethelp3.3/demmlp1.htm, nethelp3.3/demmlp2.htm,
+	  nethelp3.3/demnlab.htm, nethelp3.3/demns1.htm,
+	  nethelp3.3/demolgd1.htm, nethelp3.3/demopt1.htm,
+	  nethelp3.3/dempot.htm, nethelp3.3/demprgp.htm,
+	  nethelp3.3/demprior.htm, nethelp3.3/demrbf1.htm,
+	  nethelp3.3/demsom1.htm, nethelp3.3/demtrain.htm,
+	  nethelp3.3/dist2.htm, nethelp3.3/eigdec.htm,
+	  nethelp3.3/errbayes.htm, nethelp3.3/evidence.htm,
+	  nethelp3.3/fevbayes.htm, nethelp3.3/gauss.htm,
+	  nethelp3.3/gbayes.htm, nethelp3.3/glm.htm,
+	  nethelp3.3/glmderiv.htm, nethelp3.3/glmerr.htm,
+	  nethelp3.3/glmevfwd.htm, nethelp3.3/glmfwd.htm,
+	  nethelp3.3/glmgrad.htm, nethelp3.3/glmhess.htm,
+	  nethelp3.3/glminit.htm, nethelp3.3/glmpak.htm,
+	  nethelp3.3/glmtrain.htm, nethelp3.3/glmunpak.htm,
+	  nethelp3.3/gmm.htm, nethelp3.3/gmmactiv.htm,
+	  nethelp3.3/gmmem.htm, nethelp3.3/gmminit.htm,
+	  nethelp3.3/gmmpak.htm, nethelp3.3/gmmpost.htm,
+	  nethelp3.3/gmmprob.htm, nethelp3.3/gmmsamp.htm,
+	  nethelp3.3/gmmunpak.htm, nethelp3.3/gp.htm,
+	  nethelp3.3/gpcovar.htm, nethelp3.3/gpcovarf.htm,
+	  nethelp3.3/gpcovarp.htm, nethelp3.3/gperr.htm,
+	  nethelp3.3/gpfwd.htm, nethelp3.3/gpgrad.htm,
+	  nethelp3.3/gpinit.htm, nethelp3.3/gppak.htm,
+	  nethelp3.3/gpunpak.htm, nethelp3.3/gradchek.htm,
+	  nethelp3.3/graddesc.htm, nethelp3.3/gsamp.htm,
+	  nethelp3.3/gtm.htm, nethelp3.3/gtmem.htm, nethelp3.3/gtmfwd.htm,
+	  nethelp3.3/gtminit.htm, nethelp3.3/gtmlmean.htm,
+	  nethelp3.3/gtmlmode.htm, nethelp3.3/gtmmag.htm,
+	  nethelp3.3/gtmpost.htm, nethelp3.3/gtmprob.htm,
+	  nethelp3.3/hbayes.htm, nethelp3.3/hesschek.htm,
+	  nethelp3.3/hintmat.htm, nethelp3.3/hinton.htm,
+	  nethelp3.3/histp.htm, nethelp3.3/hmc.htm, nethelp3.3/index.htm,
+	  nethelp3.3/kmeans.htm, nethelp3.3/knn.htm, nethelp3.3/knnfwd.htm,
+	  nethelp3.3/linef.htm, nethelp3.3/linemin.htm,
+	  nethelp3.3/maxitmess.htm, nethelp3.3/mdn.htm,
+	  nethelp3.3/mdn2gmm.htm, nethelp3.3/mdndist2.htm,
+	  nethelp3.3/mdnerr.htm, nethelp3.3/mdnfwd.htm,
+	  nethelp3.3/mdngrad.htm, nethelp3.3/mdninit.htm,
+	  nethelp3.3/mdnpak.htm, nethelp3.3/mdnpost.htm,
+	  nethelp3.3/mdnprob.htm, nethelp3.3/mdnunpak.htm,
+	  nethelp3.3/metrop.htm, nethelp3.3/minbrack.htm,
+	  nethelp3.3/mlp.htm, nethelp3.3/mlpbkp.htm,
+	  nethelp3.3/mlpderiv.htm, nethelp3.3/mlperr.htm,
+	  nethelp3.3/mlpevfwd.htm, nethelp3.3/mlpfwd.htm,
+	  nethelp3.3/mlpgrad.htm, nethelp3.3/mlphdotv.htm,
+	  nethelp3.3/mlphess.htm, nethelp3.3/mlphint.htm,
+	  nethelp3.3/mlpinit.htm, nethelp3.3/mlppak.htm,
+	  nethelp3.3/mlpprior.htm, nethelp3.3/mlptrain.htm,
+	  nethelp3.3/mlpunpak.htm, nethelp3.3/netderiv.htm,
+	  nethelp3.3/neterr.htm, nethelp3.3/netevfwd.htm,
+	  nethelp3.3/netgrad.htm, nethelp3.3/nethelp3.3.zip,
+	  nethelp3.3/nethess.htm, nethelp3.3/netinit.htm,
+	  nethelp3.3/netopt.htm, nethelp3.3/netpak.htm,
+	  nethelp3.3/netunpak.htm, nethelp3.3/olgd.htm, nethelp3.3/pca.htm,
+	  nethelp3.3/plotmat.htm, nethelp3.3/ppca.htm,
+	  nethelp3.3/quasinew.htm, nethelp3.3/rbf.htm,
+	  nethelp3.3/rbfbkp.htm, nethelp3.3/rbfderiv.htm,
+	  nethelp3.3/rbferr.htm, nethelp3.3/rbfevfwd.htm,
+	  nethelp3.3/rbffwd.htm, nethelp3.3/rbfgrad.htm,
+	  nethelp3.3/rbfhess.htm, nethelp3.3/rbfjacob.htm,
+	  nethelp3.3/rbfpak.htm, nethelp3.3/rbfprior.htm,
+	  nethelp3.3/rbfsetbf.htm, nethelp3.3/rbfsetfw.htm,
+	  nethelp3.3/rbftrain.htm, nethelp3.3/rbfunpak.htm,
+	  nethelp3.3/rosegrad.htm, nethelp3.3/rosen.htm,
+	  nethelp3.3/scg.htm, nethelp3.3/som.htm, nethelp3.3/somfwd.htm,
+	  nethelp3.3/sompak.htm, nethelp3.3/somtrain.htm,
+	  nethelp3.3/somunpak.htm, netlab3.3/Contents.m, netlab3.3/LICENSE,
+	  netlab3.3/conffig.m, netlab3.3/confmat.m, netlab3.3/conjgrad.m,
+	  netlab3.3/consist.m, netlab3.3/convertoldnet.m,
+	  netlab3.3/datread.m, netlab3.3/datwrite.m, netlab3.3/demard.m,
+	  netlab3.3/demev1.m, netlab3.3/demev2.m, netlab3.3/demev3.m,
+	  netlab3.3/demgauss.m, netlab3.3/demglm1.m, netlab3.3/demglm2.m,
+	  netlab3.3/demgmm2.m, netlab3.3/demgmm3.m, netlab3.3/demgmm4.m,
+	  netlab3.3/demgmm5.m, netlab3.3/demgp.m, netlab3.3/demgpard.m,
+	  netlab3.3/demgpot.m, netlab3.3/demgtm1.m, netlab3.3/demgtm2.m,
+	  netlab3.3/demhint.m, netlab3.3/demhmc2.m, netlab3.3/demhmc3.m,
+	  netlab3.3/demkmn1.m, netlab3.3/demknn1.m, netlab3.3/demmdn1.m,
+	  netlab3.3/demmlp1.m, netlab3.3/demmlp2.m, netlab3.3/demnlab.m,
+	  netlab3.3/demns1.m, netlab3.3/demolgd1.m, netlab3.3/demopt1.m,
+	  netlab3.3/dempot.m, netlab3.3/demprgp.m, netlab3.3/demprior.m,
+	  netlab3.3/demrbf1.m, netlab3.3/demsom1.m, netlab3.3/demtrain.m,
+	  netlab3.3/dist2.m, netlab3.3/eigdec.m, netlab3.3/errbayes.m,
+	  netlab3.3/evidence.m, netlab3.3/fevbayes.m, netlab3.3/gauss.m,
+	  netlab3.3/gbayes.m, netlab3.3/glm.m, netlab3.3/glmderiv.m,
+	  netlab3.3/glmerr.m, netlab3.3/glmevfwd.m, netlab3.3/glmfwd.m,
+	  netlab3.3/glmgrad.m, netlab3.3/glmhess.m, netlab3.3/glminit.m,
+	  netlab3.3/glmpak.m, netlab3.3/glmtrain.m, netlab3.3/glmunpak.m,
+	  netlab3.3/gmm.m, netlab3.3/gmmactiv.m, netlab3.3/gmmem.m,
+	  netlab3.3/gmmpak.m, netlab3.3/gmmpost.m, netlab3.3/gmmprob.m,
+	  netlab3.3/gmmsamp.m, netlab3.3/gmmunpak.m, netlab3.3/gp.m,
+	  netlab3.3/gpcovar.m, netlab3.3/gpcovarf.m, netlab3.3/gpcovarp.m,
+	  netlab3.3/gperr.m, netlab3.3/gpfwd.m, netlab3.3/gpgrad.m,
+	  netlab3.3/gpinit.m, netlab3.3/gppak.m, netlab3.3/gpunpak.m,
+	  netlab3.3/gradchek.m, netlab3.3/graddesc.m, netlab3.3/gsamp.m,
+	  netlab3.3/gtm.m, netlab3.3/gtmem.m, netlab3.3/gtmfwd.m,
+	  netlab3.3/gtminit.m, netlab3.3/gtmlmean.m, netlab3.3/gtmlmode.m,
+	  netlab3.3/gtmmag.m, netlab3.3/gtmpost.m, netlab3.3/gtmprob.m,
+	  netlab3.3/hbayes.m, netlab3.3/hesschek.m, netlab3.3/hintmat.m,
+	  netlab3.3/hinton.m, netlab3.3/histp.m, netlab3.3/hmc.m,
+	  netlab3.3/kmeansNetlab.m, netlab3.3/knn.m, netlab3.3/knnfwd.m,
+	  netlab3.3/linef.m, netlab3.3/linemin.m, netlab3.3/maxitmess.m,
+	  netlab3.3/mdn.m, netlab3.3/mdn2gmm.m, netlab3.3/mdndist2.m,
+	  netlab3.3/mdnerr.m, netlab3.3/mdnfwd.m, netlab3.3/mdngrad.m,
+	  netlab3.3/mdninit.m, netlab3.3/mdnnet.mat, netlab3.3/mdnpak.m,
+	  netlab3.3/mdnpost.m, netlab3.3/mdnprob.m, netlab3.3/mdnunpak.m,
+	  netlab3.3/minbrack.m, netlab3.3/mlp.m, netlab3.3/mlpbkp.m,
+	  netlab3.3/mlpderiv.m, netlab3.3/mlperr.m, netlab3.3/mlpevfwd.m,
+	  netlab3.3/mlpfwd.m, netlab3.3/mlpgrad.m, netlab3.3/mlphdotv.m,
+	  netlab3.3/mlphess.m, netlab3.3/mlphint.m, netlab3.3/mlpinit.m,
+	  netlab3.3/mlppak.m, netlab3.3/mlpprior.m, netlab3.3/mlptrain.m,
+	  netlab3.3/mlpunpak.m, netlab3.3/netderiv.m, netlab3.3/neterr.m,
+	  netlab3.3/netevfwd.m, netlab3.3/netgrad.m, netlab3.3/nethess.m,
+	  netlab3.3/netinit.m, netlab3.3/netlab3.3.zip,
+	  netlab3.3/netlogo.mat, netlab3.3/netopt.m, netlab3.3/netpak.m,
+	  netlab3.3/netunpak.m, netlab3.3/oilTrn.dat, netlab3.3/oilTst.dat,
+	  netlab3.3/olgd.m, netlab3.3/pca.m, netlab3.3/plotmat.m,
+	  netlab3.3/ppca.m, netlab3.3/quasinew.m, netlab3.3/rbf.m,
+	  netlab3.3/rbfbkp.m, netlab3.3/rbfderiv.m, netlab3.3/rbferr.m,
+	  netlab3.3/rbfevfwd.m, netlab3.3/rbffwd.m, netlab3.3/rbfgrad.m,
+	  netlab3.3/rbfhess.m, netlab3.3/rbfjacob.m, netlab3.3/rbfpak.m,
+	  netlab3.3/rbfprior.m, netlab3.3/rbfsetbf.m, netlab3.3/rbfsetfw.m,
+	  netlab3.3/rbftrain.m, netlab3.3/rbfunpak.m, netlab3.3/rosegrad.m,
+	  netlab3.3/rosen.m, netlab3.3/scg.m, netlab3.3/som.m,
+	  netlab3.3/somfwd.m, netlab3.3/sompak.m, netlab3.3/somtrain.m,
+	  netlab3.3/somunpak.m, netlab3.3/xor.dat, netlabKPM/README.txt,
+	  netlabKPM/demgmm1_movie.m, netlabKPM/evidence_weighted.m,
+	  netlabKPM/glmerr_weighted.m, netlabKPM/glmgrad_weighted.m,
+	  netlabKPM/glmhess_weighted.m, netlabKPM/glmtrain_weighted.m,
+	  netlabKPM/gmm1.avi, netlabKPM/gmmem2.m,
+	  netlabKPM/gmmem_multi_restart.m, netlabKPM/kmeans_demo.m,
+	  netlabKPM/mlperr_weighted.m, netlabKPM/mlpgrad_weighted.m,
+	  netlabKPM/mlphdotv_weighted.m, netlabKPM/mlphess_weighted.m,
+	  netlabKPM/neterr_weighted.m, netlabKPM/netgrad_weighted.m,
+	  netlabKPM/nethess_weighted.m, netlabKPM/netopt_weighted.m,
+	  netlabKPM/process_options.m: Initial import of code base from
+	  Kevin Murphy.
+
+2005-04-27 10:58  yozhik
+
+	* KPMtools/mahal2conf.m, nethelp3.3/conffig.htm,
+	  nethelp3.3/confmat.htm, nethelp3.3/conjgrad.htm,
+	  nethelp3.3/consist.htm, nethelp3.3/convertoldnet.htm,
+	  nethelp3.3/datread.htm, nethelp3.3/datwrite.htm,
+	  nethelp3.3/dem2ddat.htm, nethelp3.3/demard.htm,
+	  nethelp3.3/demev1.htm, nethelp3.3/demev2.htm,
+	  nethelp3.3/demev3.htm, nethelp3.3/demgauss.htm,
+	  nethelp3.3/demglm1.htm, nethelp3.3/demglm2.htm,
+	  nethelp3.3/demgmm1.htm, nethelp3.3/demgmm2.htm,
+	  nethelp3.3/demgmm3.htm, nethelp3.3/demgmm4.htm,
+	  nethelp3.3/demgmm5.htm, nethelp3.3/demgp.htm,
+	  nethelp3.3/demgpard.htm, nethelp3.3/demgpot.htm,
+	  nethelp3.3/demgtm1.htm, nethelp3.3/demgtm2.htm,
+	  nethelp3.3/demhint.htm, nethelp3.3/demhmc1.htm,
+	  nethelp3.3/demhmc2.htm, nethelp3.3/demhmc3.htm,
+	  nethelp3.3/demkmn1.htm, nethelp3.3/demknn1.htm,
+	  nethelp3.3/demmdn1.htm, nethelp3.3/demmet1.htm,
+	  nethelp3.3/demmlp1.htm, nethelp3.3/demmlp2.htm,
+	  nethelp3.3/demnlab.htm, nethelp3.3/demns1.htm,
+	  nethelp3.3/demolgd1.htm, nethelp3.3/demopt1.htm,
+	  nethelp3.3/dempot.htm, nethelp3.3/demprgp.htm,
+	  nethelp3.3/demprior.htm, nethelp3.3/demrbf1.htm,
+	  nethelp3.3/demsom1.htm, nethelp3.3/demtrain.htm,
+	  nethelp3.3/dist2.htm, nethelp3.3/eigdec.htm,
+	  nethelp3.3/errbayes.htm, nethelp3.3/evidence.htm,
+	  nethelp3.3/fevbayes.htm, nethelp3.3/gauss.htm,
+	  nethelp3.3/gbayes.htm, nethelp3.3/glm.htm,
+	  nethelp3.3/glmderiv.htm, nethelp3.3/glmerr.htm,
+	  nethelp3.3/glmevfwd.htm, nethelp3.3/glmfwd.htm,
+	  nethelp3.3/glmgrad.htm, nethelp3.3/glmhess.htm,
+	  nethelp3.3/glminit.htm, nethelp3.3/glmpak.htm,
+	  nethelp3.3/glmtrain.htm, nethelp3.3/glmunpak.htm,
+	  nethelp3.3/gmm.htm, nethelp3.3/gmmactiv.htm,
+	  nethelp3.3/gmmem.htm, nethelp3.3/gmminit.htm,
+	  nethelp3.3/gmmpak.htm, nethelp3.3/gmmpost.htm,
+	  nethelp3.3/gmmprob.htm, nethelp3.3/gmmsamp.htm,
+	  nethelp3.3/gmmunpak.htm, nethelp3.3/gp.htm,
+	  nethelp3.3/gpcovar.htm, nethelp3.3/gpcovarf.htm,
+	  nethelp3.3/gpcovarp.htm, nethelp3.3/gperr.htm,
+	  nethelp3.3/gpfwd.htm, nethelp3.3/gpgrad.htm,
+	  nethelp3.3/gpinit.htm, nethelp3.3/gppak.htm,
+	  nethelp3.3/gpunpak.htm, nethelp3.3/gradchek.htm,
+	  nethelp3.3/graddesc.htm, nethelp3.3/gsamp.htm,
+	  nethelp3.3/gtm.htm, nethelp3.3/gtmem.htm, nethelp3.3/gtmfwd.htm,
+	  nethelp3.3/gtminit.htm, nethelp3.3/gtmlmean.htm,
+	  nethelp3.3/gtmlmode.htm, nethelp3.3/gtmmag.htm,
+	  nethelp3.3/gtmpost.htm, nethelp3.3/gtmprob.htm,
+	  nethelp3.3/hbayes.htm, nethelp3.3/hesschek.htm,
+	  nethelp3.3/hintmat.htm, nethelp3.3/hinton.htm,
+	  nethelp3.3/histp.htm, nethelp3.3/hmc.htm, nethelp3.3/index.htm,
+	  nethelp3.3/kmeans.htm, nethelp3.3/knn.htm, nethelp3.3/knnfwd.htm,
+	  nethelp3.3/linef.htm, nethelp3.3/linemin.htm,
+	  nethelp3.3/maxitmess.htm, nethelp3.3/mdn.htm,
+	  nethelp3.3/mdn2gmm.htm, nethelp3.3/mdndist2.htm,
+	  nethelp3.3/mdnerr.htm, nethelp3.3/mdnfwd.htm,
+	  nethelp3.3/mdngrad.htm, nethelp3.3/mdninit.htm,
+	  nethelp3.3/mdnpak.htm, nethelp3.3/mdnpost.htm,
+	  nethelp3.3/mdnprob.htm, nethelp3.3/mdnunpak.htm,
+	  nethelp3.3/metrop.htm, nethelp3.3/minbrack.htm,
+	  nethelp3.3/mlp.htm, nethelp3.3/mlpbkp.htm,
+	  nethelp3.3/mlpderiv.htm, nethelp3.3/mlperr.htm,
+	  nethelp3.3/mlpevfwd.htm, nethelp3.3/mlpfwd.htm,
+	  nethelp3.3/mlpgrad.htm, nethelp3.3/mlphdotv.htm,
+	  nethelp3.3/mlphess.htm, nethelp3.3/mlphint.htm,
+	  nethelp3.3/mlpinit.htm, nethelp3.3/mlppak.htm,
+	  nethelp3.3/mlpprior.htm, nethelp3.3/mlptrain.htm,
+	  nethelp3.3/mlpunpak.htm, nethelp3.3/netderiv.htm,
+	  nethelp3.3/neterr.htm, nethelp3.3/netevfwd.htm,
+	  nethelp3.3/netgrad.htm, nethelp3.3/nethelp3.3.zip,
+	  nethelp3.3/nethess.htm, nethelp3.3/netinit.htm,
+	  nethelp3.3/netopt.htm, nethelp3.3/netpak.htm,
+	  nethelp3.3/netunpak.htm, nethelp3.3/olgd.htm, nethelp3.3/pca.htm,
+	  nethelp3.3/plotmat.htm, nethelp3.3/ppca.htm,
+	  nethelp3.3/quasinew.htm, nethelp3.3/rbf.htm,
+	  nethelp3.3/rbfbkp.htm, nethelp3.3/rbfderiv.htm,
+	  nethelp3.3/rbferr.htm, nethelp3.3/rbfevfwd.htm,
+	  nethelp3.3/rbffwd.htm, nethelp3.3/rbfgrad.htm,
+	  nethelp3.3/rbfhess.htm, nethelp3.3/rbfjacob.htm,
+	  nethelp3.3/rbfpak.htm, nethelp3.3/rbfprior.htm,
+	  nethelp3.3/rbfsetbf.htm, nethelp3.3/rbfsetfw.htm,
+	  nethelp3.3/rbftrain.htm, nethelp3.3/rbfunpak.htm,
+	  nethelp3.3/rosegrad.htm, nethelp3.3/rosen.htm,
+	  nethelp3.3/scg.htm, nethelp3.3/som.htm, nethelp3.3/somfwd.htm,
+	  nethelp3.3/sompak.htm, nethelp3.3/somtrain.htm,
+	  nethelp3.3/somunpak.htm, netlab3.3/Contents.m, netlab3.3/LICENSE,
+	  netlab3.3/conffig.m, netlab3.3/confmat.m, netlab3.3/conjgrad.m,
+	  netlab3.3/consist.m, netlab3.3/convertoldnet.m,
+	  netlab3.3/datread.m, netlab3.3/datwrite.m, netlab3.3/demard.m,
+	  netlab3.3/demev1.m, netlab3.3/demev2.m, netlab3.3/demev3.m,
+	  netlab3.3/demgauss.m, netlab3.3/demglm1.m, netlab3.3/demglm2.m,
+	  netlab3.3/demgmm2.m, netlab3.3/demgmm3.m, netlab3.3/demgmm4.m,
+	  netlab3.3/demgmm5.m, netlab3.3/demgp.m, netlab3.3/demgpard.m,
+	  netlab3.3/demgpot.m, netlab3.3/demgtm1.m, netlab3.3/demgtm2.m,
+	  netlab3.3/demhint.m, netlab3.3/demhmc2.m, netlab3.3/demhmc3.m,
+	  netlab3.3/demkmn1.m, netlab3.3/demknn1.m, netlab3.3/demmdn1.m,
+	  netlab3.3/demmlp1.m, netlab3.3/demmlp2.m, netlab3.3/demnlab.m,
+	  netlab3.3/demns1.m, netlab3.3/demolgd1.m, netlab3.3/demopt1.m,
+	  netlab3.3/dempot.m, netlab3.3/demprgp.m, netlab3.3/demprior.m,
+	  netlab3.3/demrbf1.m, netlab3.3/demsom1.m, netlab3.3/demtrain.m,
+	  netlab3.3/dist2.m, netlab3.3/eigdec.m, netlab3.3/errbayes.m,
+	  netlab3.3/evidence.m, netlab3.3/fevbayes.m, netlab3.3/gauss.m,
+	  netlab3.3/gbayes.m, netlab3.3/glm.m, netlab3.3/glmderiv.m,
+	  netlab3.3/glmerr.m, netlab3.3/glmevfwd.m, netlab3.3/glmfwd.m,
+	  netlab3.3/glmgrad.m, netlab3.3/glmhess.m, netlab3.3/glminit.m,
+	  netlab3.3/glmpak.m, netlab3.3/glmtrain.m, netlab3.3/glmunpak.m,
+	  netlab3.3/gmm.m, netlab3.3/gmmactiv.m, netlab3.3/gmmem.m,
+	  netlab3.3/gmmpak.m, netlab3.3/gmmpost.m, netlab3.3/gmmprob.m,
+	  netlab3.3/gmmsamp.m, netlab3.3/gmmunpak.m, netlab3.3/gp.m,
+	  netlab3.3/gpcovar.m, netlab3.3/gpcovarf.m, netlab3.3/gpcovarp.m,
+	  netlab3.3/gperr.m, netlab3.3/gpfwd.m, netlab3.3/gpgrad.m,
+	  netlab3.3/gpinit.m, netlab3.3/gppak.m, netlab3.3/gpunpak.m,
+	  netlab3.3/gradchek.m, netlab3.3/graddesc.m, netlab3.3/gsamp.m,
+	  netlab3.3/gtm.m, netlab3.3/gtmem.m, netlab3.3/gtmfwd.m,
+	  netlab3.3/gtminit.m, netlab3.3/gtmlmean.m, netlab3.3/gtmlmode.m,
+	  netlab3.3/gtmmag.m, netlab3.3/gtmpost.m, netlab3.3/gtmprob.m,
+	  netlab3.3/hbayes.m, netlab3.3/hesschek.m, netlab3.3/hintmat.m,
+	  netlab3.3/hinton.m, netlab3.3/histp.m, netlab3.3/hmc.m,
+	  netlab3.3/kmeansNetlab.m, netlab3.3/knn.m, netlab3.3/knnfwd.m,
+	  netlab3.3/linef.m, netlab3.3/linemin.m, netlab3.3/maxitmess.m,
+	  netlab3.3/mdn.m, netlab3.3/mdn2gmm.m, netlab3.3/mdndist2.m,
+	  netlab3.3/mdnerr.m, netlab3.3/mdnfwd.m, netlab3.3/mdngrad.m,
+	  netlab3.3/mdninit.m, netlab3.3/mdnnet.mat, netlab3.3/mdnpak.m,
+	  netlab3.3/mdnpost.m, netlab3.3/mdnprob.m, netlab3.3/mdnunpak.m,
+	  netlab3.3/minbrack.m, netlab3.3/mlp.m, netlab3.3/mlpbkp.m,
+	  netlab3.3/mlpderiv.m, netlab3.3/mlperr.m, netlab3.3/mlpevfwd.m,
+	  netlab3.3/mlpfwd.m, netlab3.3/mlpgrad.m, netlab3.3/mlphdotv.m,
+	  netlab3.3/mlphess.m, netlab3.3/mlphint.m, netlab3.3/mlpinit.m,
+	  netlab3.3/mlppak.m, netlab3.3/mlpprior.m, netlab3.3/mlptrain.m,
+	  netlab3.3/mlpunpak.m, netlab3.3/netderiv.m, netlab3.3/neterr.m,
+	  netlab3.3/netevfwd.m, netlab3.3/netgrad.m, netlab3.3/nethess.m,
+	  netlab3.3/netinit.m, netlab3.3/netlab3.3.zip,
+	  netlab3.3/netlogo.mat, netlab3.3/netopt.m, netlab3.3/netpak.m,
+	  netlab3.3/netunpak.m, netlab3.3/oilTrn.dat, netlab3.3/oilTst.dat,
+	  netlab3.3/olgd.m, netlab3.3/pca.m, netlab3.3/plotmat.m,
+	  netlab3.3/ppca.m, netlab3.3/quasinew.m, netlab3.3/rbf.m,
+	  netlab3.3/rbfbkp.m, netlab3.3/rbfderiv.m, netlab3.3/rbferr.m,
+	  netlab3.3/rbfevfwd.m, netlab3.3/rbffwd.m, netlab3.3/rbfgrad.m,
+	  netlab3.3/rbfhess.m, netlab3.3/rbfjacob.m, netlab3.3/rbfpak.m,
+	  netlab3.3/rbfprior.m, netlab3.3/rbfsetbf.m, netlab3.3/rbfsetfw.m,
+	  netlab3.3/rbftrain.m, netlab3.3/rbfunpak.m, netlab3.3/rosegrad.m,
+	  netlab3.3/rosen.m, netlab3.3/scg.m, netlab3.3/som.m,
+	  netlab3.3/somfwd.m, netlab3.3/sompak.m, netlab3.3/somtrain.m,
+	  netlab3.3/somunpak.m, netlab3.3/xor.dat, netlabKPM/README.txt,
+	  netlabKPM/demgmm1_movie.m, netlabKPM/evidence_weighted.m,
+	  netlabKPM/glmerr_weighted.m, netlabKPM/glmgrad_weighted.m,
+	  netlabKPM/glmhess_weighted.m, netlabKPM/glmtrain_weighted.m,
+	  netlabKPM/gmm1.avi, netlabKPM/gmmem2.m,
+	  netlabKPM/gmmem_multi_restart.m, netlabKPM/kmeans_demo.m,
+	  netlabKPM/mlperr_weighted.m, netlabKPM/mlpgrad_weighted.m,
+	  netlabKPM/mlphdotv_weighted.m, netlabKPM/mlphess_weighted.m,
+	  netlabKPM/neterr_weighted.m, netlabKPM/netgrad_weighted.m,
+	  netlabKPM/nethess_weighted.m, netlabKPM/netopt_weighted.m,
+	  netlabKPM/process_options.m: Initial revision
+
+2005-04-25 19:29  yozhik
+
+	* KPMstats/KLgauss.m, KPMstats/README.txt, KPMstats/beta_sample.m,
+	  KPMstats/chisquared_histo.m, KPMstats/chisquared_prob.m,
+	  KPMstats/chisquared_readme.txt, KPMstats/chisquared_table.m,
+	  KPMstats/clg_Mstep.m, KPMstats/clg_Mstep_simple.m,
+	  KPMstats/clg_prob.m, KPMstats/condGaussToJoint.m,
+	  KPMstats/cond_indep_fisher_z.m,
+	  KPMstats/condgaussTrainObserved.m, KPMstats/condgauss_sample.m,
+	  KPMstats/convertBinaryLabels.m, KPMstats/cwr_demo.m,
+	  KPMstats/cwr_em.m, KPMstats/cwr_predict.m, KPMstats/cwr_prob.m,
+	  KPMstats/cwr_readme.txt, KPMstats/cwr_test.m,
+	  KPMstats/dirichlet_sample.m, KPMstats/distchck.m,
+	  KPMstats/eigdec.m, KPMstats/est_transmat.m,
+	  KPMstats/fit_paritioned_model_testfn.m,
+	  KPMstats/fit_partitioned_model.m, KPMstats/gamma_sample.m,
+	  KPMstats/gaussian_prob.m, KPMstats/gaussian_sample.m,
+	  KPMstats/linear_regression.m, KPMstats/logist2.m,
+	  KPMstats/logist2Apply.m, KPMstats/logist2ApplyRegularized.m,
+	  KPMstats/logist2Fit.m, KPMstats/logist2FitRegularized.m,
+	  KPMstats/logistK.m, KPMstats/logistK_eval.m,
+	  KPMstats/marginalize_gaussian.m, KPMstats/matrix_T_pdf.m,
+	  KPMstats/matrix_normal_pdf.m, KPMstats/mc_stat_distrib.m,
+	  KPMstats/mixgauss_Mstep.m, KPMstats/mixgauss_classifier_apply.m,
+	  KPMstats/mixgauss_classifier_train.m, KPMstats/mixgauss_em.m,
+	  KPMstats/mixgauss_init.m, KPMstats/mixgauss_prob.m,
+	  KPMstats/mixgauss_prob_test.m, KPMstats/mixgauss_sample.m,
+	  KPMstats/mkPolyFvec.m, KPMstats/mk_unit_norm.m,
+	  KPMstats/multinomial_prob.m, KPMstats/multinomial_sample.m,
+	  KPMstats/normal_coef.m, KPMstats/partial_corr_coef.m,
+	  KPMstats/parzen.m, KPMstats/parzenC.c, KPMstats/parzenC.dll,
+	  KPMstats/parzenC.mexglx, KPMstats/parzenC_test.m,
+	  KPMstats/parzen_fit_select_unif.m, KPMstats/pca.m,
+	  KPMstats/rndcheck.m, KPMstats/sample.m,
+	  KPMstats/sample_discrete.m, KPMstats/sample_gaussian.m,
+	  KPMstats/student_t_logprob.m, KPMstats/student_t_prob.m,
+	  KPMstats/unif_discrete_sample.m, KPMstats/weightedRegression.m,
+	  KPMtools/README.txt, KPMtools/approx_unique.m,
+	  KPMtools/approxeq.m, KPMtools/argmax.m, KPMtools/argmin.m,
+	  KPMtools/assert.m, KPMtools/assignEdgeNums.m,
+	  KPMtools/assign_cols.m, KPMtools/axis_pct.m, KPMtools/block.m,
+	  KPMtools/cell2num.m, KPMtools/chi2inv.m, KPMtools/choose.m,
+	  KPMtools/collapse_mog.m, KPMtools/colmult.c,
+	  KPMtools/colmult.mexglx, KPMtools/computeROC.m,
+	  KPMtools/compute_counts.m, KPMtools/conf2mahal.m,
+	  KPMtools/cross_entropy.m, KPMtools/div.m, KPMtools/draw_circle.m,
+	  KPMtools/draw_ellipse.m, KPMtools/draw_ellipse_axes.m,
+	  KPMtools/em_converged.m, KPMtools/entropy.m,
+	  KPMtools/exportfig.m, KPMtools/extend_domain_table.m,
+	  KPMtools/factorial.m, KPMtools/find_equiv_posns.m,
+	  KPMtools/hash_add.m, KPMtools/hash_del.m, KPMtools/hash_lookup.m,
+	  KPMtools/hungarian.m, KPMtools/image_rgb.m,
+	  KPMtools/imresizeAspect.m, KPMtools/ind2subv.c,
+	  KPMtools/ind2subv.m, KPMtools/installC_KPMtools.m,
+	  KPMtools/is_psd.m, KPMtools/is_stochastic.m,
+	  KPMtools/isemptycell.m, KPMtools/isposdef.m, KPMtools/isscalar.m,
+	  KPMtools/isvector.m, KPMtools/junk.c, KPMtools/loadcell.m,
+	  KPMtools/logb.m, KPMtools/logdet.m, KPMtools/logsum.m,
+	  KPMtools/logsum_simple.m, KPMtools/logsum_test.m,
+	  KPMtools/logsumexp.m, KPMtools/logsumexpv.m,
+	  KPMtools/marg_table.m, KPMtools/marginalize_table.m,
+	  KPMtools/matprint.m, KPMtools/max_mult.c, KPMtools/max_mult.m,
+	  KPMtools/mexutil.c, KPMtools/mexutil.h,
+	  KPMtools/mk_multi_index.m, KPMtools/mk_stochastic.m,
+	  KPMtools/mult_by_table.m, KPMtools/myintersect.m,
+	  KPMtools/myismember.m, KPMtools/myones.m, KPMtools/myplot.m,
+	  KPMtools/myrand.m, KPMtools/myrepmat.m, KPMtools/myreshape.m,
+	  KPMtools/mysetdiff.m, KPMtools/mysize.m, KPMtools/mysubset.m,
+	  KPMtools/mysymsetdiff.m, KPMtools/bipartiteMatchingHungarian.m,
+	  KPMtools/myunion.m, KPMtools/nchoose2.m, KPMtools/ncols.m,
+	  KPMtools/nonmaxsup.m, KPMtools/normalise.m,
+	  KPMtools/normaliseC.c, KPMtools/normaliseC.dll,
+	  KPMtools/normalize.m, KPMtools/nrows.m, KPMtools/num2strcell.m,
+	  KPMtools/partitionData.m, KPMtools/partition_matrix_vec.m,
+	  KPMtools/pca_netlab.m, KPMtools/pick.m, KPMtools/plotROC.m,
+	  KPMtools/plotROCkpm.m, KPMtools/plot_axis_thru_origin.m,
+	  KPMtools/plot_ellipse.m, KPMtools/plot_matrix.m,
+	  KPMtools/plot_polygon.m, KPMtools/plotcov2.m,
+	  KPMtools/plotcov3.m, KPMtools/plotgauss1d.m,
+	  KPMtools/plotgauss2d.m, KPMtools/plotgauss2d_old.m,
+	  KPMtools/polygon_area.m, KPMtools/polygon_centroid.m,
+	  KPMtools/polygon_intersect.m, KPMtools/previewfig.m,
+	  KPMtools/process_options.m, KPMtools/rand_psd.m,
+	  KPMtools/rectintC.m, KPMtools/rectintLoopC.mexglx,
+	  KPMtools/rectintSparse.m, KPMtools/rectintSparseC.m,
+	  KPMtools/rectintSparseLoopC.c, KPMtools/rectintSparseLoopC.dll,
+	  KPMtools/repmatC.c, KPMtools/repmatC.dll,
+	  KPMtools/repmatC.mexglx, KPMtools/rgb2grayKPM.m,
+	  KPMtools/rnd_partition.m, KPMtools/rotate_xlabel.m,
+	  KPMtools/safeStr.m, KPMtools/sampleUniformInts.m,
+	  KPMtools/sample_discrete.m, KPMtools/set_xtick_label.m,
+	  KPMtools/set_xtick_label_demo.m, KPMtools/setdiag.m,
+	  KPMtools/softeye.m, KPMtools/sort_evec.m,
+	  KPMtools/splitLongSeqIntoManyShort.m, KPMtools/sprintf_intvec.m,
+	  KPMtools/sqdist.m, KPMtools/strmatch_multi.m,
+	  KPMtools/strmatch_substr.m, KPMtools/subplot2.m,
+	  KPMtools/subplot3.m, KPMtools/subsets.m, KPMtools/subv2ind.c,
+	  KPMtools/subv2ind.m, KPMtools/sumv.m, KPMtools/suptitle.m,
+	  KPMtools/unaryEncoding.m, KPMtools/wrap.m,
+	  KPMtools/xticklabel_rotate90.m, KPMtools/zipload.m,
+	  KPMtools/zipsave.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-04-25 19:29  yozhik
+
+	* KPMstats/KLgauss.m, KPMstats/README.txt, KPMstats/beta_sample.m,
+	  KPMstats/chisquared_histo.m, KPMstats/chisquared_prob.m,
+	  KPMstats/chisquared_readme.txt, KPMstats/chisquared_table.m,
+	  KPMstats/clg_Mstep.m, KPMstats/clg_Mstep_simple.m,
+	  KPMstats/clg_prob.m, KPMstats/condGaussToJoint.m,
+	  KPMstats/cond_indep_fisher_z.m,
+	  KPMstats/condgaussTrainObserved.m, KPMstats/condgauss_sample.m,
+	  KPMstats/convertBinaryLabels.m, KPMstats/cwr_demo.m,
+	  KPMstats/cwr_em.m, KPMstats/cwr_predict.m, KPMstats/cwr_prob.m,
+	  KPMstats/cwr_readme.txt, KPMstats/cwr_test.m,
+	  KPMstats/dirichlet_sample.m, KPMstats/distchck.m,
+	  KPMstats/eigdec.m, KPMstats/est_transmat.m,
+	  KPMstats/fit_paritioned_model_testfn.m,
+	  KPMstats/fit_partitioned_model.m, KPMstats/gamma_sample.m,
+	  KPMstats/gaussian_prob.m, KPMstats/gaussian_sample.m,
+	  KPMstats/linear_regression.m, KPMstats/logist2.m,
+	  KPMstats/logist2Apply.m, KPMstats/logist2ApplyRegularized.m,
+	  KPMstats/logist2Fit.m, KPMstats/logist2FitRegularized.m,
+	  KPMstats/logistK.m, KPMstats/logistK_eval.m,
+	  KPMstats/marginalize_gaussian.m, KPMstats/matrix_T_pdf.m,
+	  KPMstats/matrix_normal_pdf.m, KPMstats/mc_stat_distrib.m,
+	  KPMstats/mixgauss_Mstep.m, KPMstats/mixgauss_classifier_apply.m,
+	  KPMstats/mixgauss_classifier_train.m, KPMstats/mixgauss_em.m,
+	  KPMstats/mixgauss_init.m, KPMstats/mixgauss_prob.m,
+	  KPMstats/mixgauss_prob_test.m, KPMstats/mixgauss_sample.m,
+	  KPMstats/mkPolyFvec.m, KPMstats/mk_unit_norm.m,
+	  KPMstats/multinomial_prob.m, KPMstats/multinomial_sample.m,
+	  KPMstats/normal_coef.m, KPMstats/partial_corr_coef.m,
+	  KPMstats/parzen.m, KPMstats/parzenC.c, KPMstats/parzenC.dll,
+	  KPMstats/parzenC.mexglx, KPMstats/parzenC_test.m,
+	  KPMstats/parzen_fit_select_unif.m, KPMstats/pca.m,
+	  KPMstats/rndcheck.m, KPMstats/sample.m,
+	  KPMstats/sample_discrete.m, KPMstats/sample_gaussian.m,
+	  KPMstats/student_t_logprob.m, KPMstats/student_t_prob.m,
+	  KPMstats/unif_discrete_sample.m, KPMstats/weightedRegression.m,
+	  KPMtools/README.txt, KPMtools/approx_unique.m,
+	  KPMtools/approxeq.m, KPMtools/argmax.m, KPMtools/argmin.m,
+	  KPMtools/assert.m, KPMtools/assignEdgeNums.m,
+	  KPMtools/assign_cols.m, KPMtools/axis_pct.m, KPMtools/block.m,
+	  KPMtools/cell2num.m, KPMtools/chi2inv.m, KPMtools/choose.m,
+	  KPMtools/collapse_mog.m, KPMtools/colmult.c,
+	  KPMtools/colmult.mexglx, KPMtools/computeROC.m,
+	  KPMtools/compute_counts.m, KPMtools/conf2mahal.m,
+	  KPMtools/cross_entropy.m, KPMtools/div.m, KPMtools/draw_circle.m,
+	  KPMtools/draw_ellipse.m, KPMtools/draw_ellipse_axes.m,
+	  KPMtools/em_converged.m, KPMtools/entropy.m,
+	  KPMtools/exportfig.m, KPMtools/extend_domain_table.m,
+	  KPMtools/factorial.m, KPMtools/find_equiv_posns.m,
+	  KPMtools/hash_add.m, KPMtools/hash_del.m, KPMtools/hash_lookup.m,
+	  KPMtools/hungarian.m, KPMtools/image_rgb.m,
+	  KPMtools/imresizeAspect.m, KPMtools/ind2subv.c,
+	  KPMtools/ind2subv.m, KPMtools/installC_KPMtools.m,
+	  KPMtools/is_psd.m, KPMtools/is_stochastic.m,
+	  KPMtools/isemptycell.m, KPMtools/isposdef.m, KPMtools/isscalar.m,
+	  KPMtools/isvector.m, KPMtools/junk.c, KPMtools/loadcell.m,
+	  KPMtools/logb.m, KPMtools/logdet.m, KPMtools/logsum.m,
+	  KPMtools/logsum_simple.m, KPMtools/logsum_test.m,
+	  KPMtools/logsumexp.m, KPMtools/logsumexpv.m,
+	  KPMtools/marg_table.m, KPMtools/marginalize_table.m,
+	  KPMtools/matprint.m, KPMtools/max_mult.c, KPMtools/max_mult.m,
+	  KPMtools/mexutil.c, KPMtools/mexutil.h,
+	  KPMtools/mk_multi_index.m, KPMtools/mk_stochastic.m,
+	  KPMtools/mult_by_table.m, KPMtools/myintersect.m,
+	  KPMtools/myismember.m, KPMtools/myones.m, KPMtools/myplot.m,
+	  KPMtools/myrand.m, KPMtools/myrepmat.m, KPMtools/myreshape.m,
+	  KPMtools/mysetdiff.m, KPMtools/mysize.m, KPMtools/mysubset.m,
+	  KPMtools/mysymsetdiff.m, KPMtools/bipartiteMatchingHungarian.m,
+	  KPMtools/myunion.m, KPMtools/nchoose2.m, KPMtools/ncols.m,
+	  KPMtools/nonmaxsup.m, KPMtools/normalise.m,
+	  KPMtools/normaliseC.c, KPMtools/normaliseC.dll,
+	  KPMtools/normalize.m, KPMtools/nrows.m, KPMtools/num2strcell.m,
+	  KPMtools/partitionData.m, KPMtools/partition_matrix_vec.m,
+	  KPMtools/pca_netlab.m, KPMtools/pick.m, KPMtools/plotROC.m,
+	  KPMtools/plotROCkpm.m, KPMtools/plot_axis_thru_origin.m,
+	  KPMtools/plot_ellipse.m, KPMtools/plot_matrix.m,
+	  KPMtools/plot_polygon.m, KPMtools/plotcov2.m,
+	  KPMtools/plotcov3.m, KPMtools/plotgauss1d.m,
+	  KPMtools/plotgauss2d.m, KPMtools/plotgauss2d_old.m,
+	  KPMtools/polygon_area.m, KPMtools/polygon_centroid.m,
+	  KPMtools/polygon_intersect.m, KPMtools/previewfig.m,
+	  KPMtools/process_options.m, KPMtools/rand_psd.m,
+	  KPMtools/rectintC.m, KPMtools/rectintLoopC.mexglx,
+	  KPMtools/rectintSparse.m, KPMtools/rectintSparseC.m,
+	  KPMtools/rectintSparseLoopC.c, KPMtools/rectintSparseLoopC.dll,
+	  KPMtools/repmatC.c, KPMtools/repmatC.dll,
+	  KPMtools/repmatC.mexglx, KPMtools/rgb2grayKPM.m,
+	  KPMtools/rnd_partition.m, KPMtools/rotate_xlabel.m,
+	  KPMtools/safeStr.m, KPMtools/sampleUniformInts.m,
+	  KPMtools/sample_discrete.m, KPMtools/set_xtick_label.m,
+	  KPMtools/set_xtick_label_demo.m, KPMtools/setdiag.m,
+	  KPMtools/softeye.m, KPMtools/sort_evec.m,
+	  KPMtools/splitLongSeqIntoManyShort.m, KPMtools/sprintf_intvec.m,
+	  KPMtools/sqdist.m, KPMtools/strmatch_multi.m,
+	  KPMtools/strmatch_substr.m, KPMtools/subplot2.m,
+	  KPMtools/subplot3.m, KPMtools/subsets.m, KPMtools/subv2ind.c,
+	  KPMtools/subv2ind.m, KPMtools/sumv.m, KPMtools/suptitle.m,
+	  KPMtools/unaryEncoding.m, KPMtools/wrap.m,
+	  KPMtools/xticklabel_rotate90.m, KPMtools/zipload.m,
+	  KPMtools/zipsave.m: Initial revision
+
+2005-04-03 18:39  yozhik
+
+	* BNT/learning/score_dags.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-04-03 18:39  yozhik
+
+	* BNT/learning/score_dags.m: Initial revision
+
+2005-03-31 11:20  yozhik
+
+	* BNT/installC_BNT.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-03-31 11:20  yozhik
+
+	* BNT/installC_BNT.m: Initial revision
+
+2005-03-30 11:59  yozhik
+
+	* KPMtools/asdemo.html: Initial import of code base from Kevin
+	  Murphy.
+
+2005-03-30 11:59  yozhik
+
+	* KPMtools/asdemo.html: Initial revision
+
+2005-03-26 18:51  yozhik
+
+	* KPMtools/asdemo.m: Initial import of code base from Kevin Murphy.
+
+2005-03-26 18:51  yozhik
+
+	* KPMtools/asdemo.m: Initial revision
+
+2005-01-15 18:27  yozhik
+
+	* BNT/CPDs/@tabular_CPD/: get_field.m, set_fields.m, tabular_CPD.m:
+	  Initial import of code base from Kevin Murphy.
+
+2005-01-15 18:27  yozhik
+
+	* BNT/CPDs/@tabular_CPD/: get_field.m, set_fields.m, tabular_CPD.m:
+	  Initial revision
+
+2004-11-24 12:12  yozhik
+
+	* BNT/inference/dynamic/@cbk_inf_engine/junk: Initial import of
+	  code base from Kevin Murphy.
+
+2004-11-24 12:12  yozhik
+
+	* BNT/inference/dynamic/@cbk_inf_engine/junk: Initial revision
+
+2004-11-22 14:41  yozhik
+
+	* BNT/examples/dynamic/orig_water1.m: Initial import of code base
+	  from Kevin Murphy.
+
+2004-11-22 14:41  yozhik
+
+	* BNT/examples/dynamic/orig_water1.m: Initial revision
+
+2004-11-22 14:15  yozhik
+
+	* BNT/inference/dynamic/@cbk_inf_engine/cbk_inf_engine.m: Initial
+	  import of code base from Kevin Murphy.
+
+2004-11-22 14:15  yozhik
+
+	* BNT/inference/dynamic/@cbk_inf_engine/cbk_inf_engine.m: Initial
+	  revision
+
+2004-11-06 13:52  yozhik
+
+	* BNT/examples/static/StructLearn/model_select2.m: Initial import
+	  of code base from Kevin Murphy.
+
+2004-11-06 13:52  yozhik
+
+	* BNT/examples/static/StructLearn/model_select2.m: Initial revision
+
+2004-11-06 12:55  yozhik
+
+	* BNT/examples/static/StructLearn/model_select1.m: Initial import
+	  of code base from Kevin Murphy.
+
+2004-11-06 12:55  yozhik
+
+	* BNT/examples/static/StructLearn/model_select1.m: Initial revision
+
+2004-10-22 18:18  yozhik
+
+	* HMM/viterbi_path.m: Initial import of code base from Kevin
+	  Murphy.
+
+2004-10-22 18:18  yozhik
+
+	* HMM/viterbi_path.m: Initial revision
+
+2004-09-29 20:09  yozhik
+
+	* BNT/inference/static/@var_elim_inf_engine/marginal_nodes.m:
+	  Initial import of code base from Kevin Murphy.
+
+2004-09-29 20:09  yozhik
+
+	* BNT/inference/static/@var_elim_inf_engine/marginal_nodes.m:
+	  Initial revision
+
+2004-09-12 20:21  yozhik
+
+	* BNT/examples/limids/amnio.m: Initial import of code base from
+	  Kevin Murphy.
+
+2004-09-12 20:21  yozhik
+
+	* BNT/examples/limids/amnio.m: Initial revision
+
+2004-09-12 19:27  yozhik
+
+	* BNT/examples/limids/oil1.m: Initial import of code base from
+	  Kevin Murphy.
+
+2004-09-12 19:27  yozhik
+
+	* BNT/examples/limids/oil1.m: Initial revision
+
+2004-09-12 14:01  yozhik
+
+	* BNT/examples/static/sprinkler1.m: Initial import of code base
+	  from Kevin Murphy.
+
+2004-09-12 14:01  yozhik
+
+	* BNT/examples/static/sprinkler1.m: Initial revision
+
+2004-08-29 05:41  yozhik
+
+	* HMM/transmat_train_observed.m: Initial import of code base from
+	  Kevin Murphy.
+
+2004-08-29 05:41  yozhik
+
+	* HMM/transmat_train_observed.m: Initial revision
+
+2004-08-05 08:25  yozhik
+
+	* BNT/potentials/: @dpot/divide_by_pot.m, Tables/divide_by_table.m:
+	  Initial import of code base from Kevin Murphy.
+
+2004-08-05 08:25  yozhik
+
+	* BNT/potentials/: @dpot/divide_by_pot.m, Tables/divide_by_table.m:
+	  Initial revision
+
+2004-08-04 12:59  yozhik
+
+	* BNT/potentials/@dpot/: marginalize_pot.m, multiply_by_pot.m:
+	  Initial import of code base from Kevin Murphy.
+
+2004-08-04 12:59  yozhik
+
+	* BNT/potentials/@dpot/: marginalize_pot.m, multiply_by_pot.m:
+	  Initial revision
+
+2004-08-04 12:36  yozhik
+
+	* BNT/@assocarray/subsref.m: Initial import of code base from Kevin
+	  Murphy.
+
+2004-08-04 12:36  yozhik
+
+	* BNT/@assocarray/subsref.m: Initial revision
+
+2004-08-04 08:54  yozhik
+
+	* BNT/potentials/@dpot/normalize_pot.m: Initial import of code base
+	  from Kevin Murphy.
+
+2004-08-04 08:54  yozhik
+
+	* BNT/potentials/@dpot/normalize_pot.m: Initial revision
+
+2004-08-04 08:51  yozhik
+
+	* BNT/potentials/Tables/: marg_table.m, mult_by_table.m,
+	  extend_domain_table.m: Initial import of code base from Kevin
+	  Murphy.
+
+2004-08-04 08:51  yozhik
+
+	* BNT/potentials/Tables/: marg_table.m, mult_by_table.m,
+	  extend_domain_table.m: Initial revision
+
+2004-08-02 15:23  yozhik
+
+	* BNT/CPDs/@noisyor_CPD/CPD_to_CPT.m: Initial import of code base
+	  from Kevin Murphy.
+
+2004-08-02 15:23  yozhik
+
+	* BNT/CPDs/@noisyor_CPD/CPD_to_CPT.m: Initial revision
+
+2004-08-02 15:05  yozhik
+
+	* BNT/general/noisyORtoTable.m: Initial import of code base from
+	  Kevin Murphy.
+
+2004-08-02 15:05  yozhik
+
+	* BNT/general/noisyORtoTable.m: Initial revision
+
+2004-06-29 10:46  yozhik
+
+	* BNT/learning/learn_struct_pdag_pc.m: Initial import of code base
+	  from Kevin Murphy.
+
+2004-06-29 10:46  yozhik
+
+	* BNT/learning/learn_struct_pdag_pc.m: Initial revision
+
+2004-06-15 10:50  yozhik
+
+	* GraphViz/graph_to_dot.m: Initial import of code base from Kevin
+	  Murphy.
+
+2004-06-15 10:50  yozhik
+
+	* GraphViz/graph_to_dot.m: Initial revision
+
+2004-06-11 14:16  yozhik
+
+	* BNT/CPDs/@tabular_CPD/log_marg_prob_node.m: Initial import of
+	  code base from Kevin Murphy.
+
+2004-06-11 14:16  yozhik
+
+	* BNT/CPDs/@tabular_CPD/log_marg_prob_node.m: Initial revision
+
+2004-06-09 18:56  yozhik
+
+	* BNT/README.txt: Initial import of code base from Kevin Murphy.
+
+2004-06-09 18:56  yozhik
+
+	* BNT/README.txt: Initial revision
+
+2004-06-09 18:53  yozhik
+
+	* BNT/CPDs/@generic_CPD/learn_params.m: Initial import of code base
+	  from Kevin Murphy.
+
+2004-06-09 18:53  yozhik
+
+	* BNT/CPDs/@generic_CPD/learn_params.m: Initial revision
+
+2004-06-09 18:42  yozhik
+
+	* BNT/examples/static/nodeorderExample.m: Initial import of code
+	  base from Kevin Murphy.
+
+2004-06-09 18:42  yozhik
+
+	* BNT/examples/static/nodeorderExample.m: Initial revision
+
+2004-06-09 18:33  yozhik
+
+	* BNT/: learning/score_family.m, test_BNT.m: Initial import of code
+	  base from Kevin Murphy.
+
+2004-06-09 18:33  yozhik
+
+	* BNT/: learning/score_family.m, test_BNT.m: Initial revision
+
+2004-06-09 18:28  yozhik
+
+	* BNT/: learning/learn_params.m, CPDs/@gaussian_CPD/learn_params.m,
+	  examples/static/gaussian2.m: Initial import of code base from
+	  Kevin Murphy.
+
+2004-06-09 18:28  yozhik
+
+	* BNT/: learning/learn_params.m, CPDs/@gaussian_CPD/learn_params.m,
+	  examples/static/gaussian2.m: Initial revision
+
+2004-06-09 18:25  yozhik
+
+	* BNT/CPDs/@tabular_CPD/learn_params.m: Initial import of code base
+	  from Kevin Murphy.
+
+2004-06-09 18:25  yozhik
+
+	* BNT/CPDs/@tabular_CPD/learn_params.m: Initial revision
+
+2004-06-09 18:17  yozhik
+
+	* BNT/general/sample_bnet.m: Initial import of code base from Kevin
+	  Murphy.
+
+2004-06-09 18:17  yozhik
+
+	* BNT/general/sample_bnet.m: Initial revision
+
+2004-06-07 12:45  yozhik
+
+	* BNT/examples/static/discrete1.m: Initial import of code base from
+	  Kevin Murphy.
+
+2004-06-07 12:45  yozhik
+
+	* BNT/examples/static/discrete1.m: Initial revision
+
+2004-06-07 12:04  yozhik
+
+	* BNT/: inference/static/@global_joint_inf_engine/marginal_nodes.m,
+	  inference/static/@global_joint_inf_engine/enter_evidence.m,
+	  examples/dynamic/mk_bat_dbn.m: Initial import of code base from
+	  Kevin Murphy.
+
+2004-06-07 12:04  yozhik
+
+	* BNT/: inference/static/@global_joint_inf_engine/marginal_nodes.m,
+	  inference/static/@global_joint_inf_engine/enter_evidence.m,
+	  examples/dynamic/mk_bat_dbn.m: Initial revision
+
+2004-06-07 08:53  yozhik
+
+	* BNT/examples/limids/asia_dt1.m: Initial import of code base from
+	  Kevin Murphy.
+
+2004-06-07 08:53  yozhik
+
+	* BNT/examples/limids/asia_dt1.m: Initial revision
+
+2004-06-07 08:48  yozhik
+
+	* BNT/general/: solve_limid.m, compute_joint_pot.m: Initial import
+	  of code base from Kevin Murphy.
+
+2004-06-07 08:48  yozhik
+
+	* BNT/general/: solve_limid.m, compute_joint_pot.m: Initial
+	  revision
+
+2004-06-07 07:39  yozhik
+
+	* Kalman/README.txt: Initial import of code base from Kevin Murphy.
+
+2004-06-07 07:39  yozhik
+
+	* Kalman/README.txt: Initial revision
+
+2004-06-07 07:33  yozhik
+
+	* GraphViz/README.txt: Initial import of code base from Kevin
+	  Murphy.
+
+2004-06-07 07:33  yozhik
+
+	* GraphViz/README.txt: Initial revision
+
+2004-05-31 15:19  yozhik
+
+	* HMM/dhmm_sample.m: Initial import of code base from Kevin Murphy.
+
+2004-05-31 15:19  yozhik
+
+	* HMM/dhmm_sample.m: Initial revision
+
+2004-05-25 17:32  yozhik
+
+	* HMM/mhmm_sample.m: Initial import of code base from Kevin Murphy.
+
+2004-05-25 17:32  yozhik
+
+	* HMM/mhmm_sample.m: Initial revision
+
+2004-05-24 15:26  yozhik
+
+	* HMM/mc_sample.m: Initial import of code base from Kevin Murphy.
+
+2004-05-24 15:26  yozhik
+
+	* HMM/mc_sample.m: Initial revision
+
+2004-05-18 07:50  yozhik
+
+	* BNT/installC_graph.m: Initial import of code base from Kevin
+	  Murphy.
+
+2004-05-18 07:50  yozhik
+
+	* BNT/installC_graph.m: Initial revision
+
+2004-05-13 18:13  yozhik
+
+	* BNT/inference/static/@gaussian_inf_engine/gaussian_inf_engine.m:
+	  Initial import of code base from Kevin Murphy.
+
+2004-05-13 18:13  yozhik
+
+	* BNT/inference/static/@gaussian_inf_engine/gaussian_inf_engine.m:
+	  Initial revision
+
+2004-05-11 12:23  yozhik
+
+	* BNT/examples/dynamic/mk_chmm.m: Initial import of code base from
+	  Kevin Murphy.
+
+2004-05-11 12:23  yozhik
+
+	* BNT/examples/dynamic/mk_chmm.m: Initial revision
+
+2004-05-11 11:45  yozhik
+
+	* BNT/examples/dynamic/mk_water_dbn.m: Initial import of code base
+	  from Kevin Murphy.
+
+2004-05-11 11:45  yozhik
+
+	* BNT/examples/dynamic/mk_water_dbn.m: Initial revision
+
+2004-05-05 06:32  yozhik
+
+	* GraphViz/draw_dot.m: Initial import of code base from Kevin
+	  Murphy.
+
+2004-05-05 06:32  yozhik
+
+	* GraphViz/draw_dot.m: Initial revision
+
+2004-03-30 09:18  yozhik
+
+	* BNT/: general/mk_named_CPT.m,
+	  CPDs/@softmax_CPD/convert_to_table.m: Initial import of code base
+	  from Kevin Murphy.
+
+2004-03-30 09:18  yozhik
+
+	* BNT/: general/mk_named_CPT.m,
+	  CPDs/@softmax_CPD/convert_to_table.m: Initial revision
+
+2004-03-22 14:32  yozhik
+
+	* GraphViz/draw_graph.m: Initial import of code base from Kevin
+	  Murphy.
+
+2004-03-22 14:32  yozhik
+
+	* GraphViz/draw_graph.m: Initial revision
+
+2004-03-12 15:21  yozhik
+
+	* GraphViz/dot_to_graph.m: Initial import of code base from Kevin
+	  Murphy.
+
+2004-03-12 15:21  yozhik
+
+	* GraphViz/dot_to_graph.m: Initial revision
+
+2004-03-04 14:34  yozhik
+
+	* BNT/examples/static/burglary.m: Initial import of code base from
+	  Kevin Murphy.
+
+2004-03-04 14:34  yozhik
+
+	* BNT/examples/static/burglary.m: Initial revision
+
+2004-03-04 14:27  yozhik
+
+	* BNT/examples/static/burglar-alarm-net.lisp.txt: Initial import of
+	  code base from Kevin Murphy.
+
+2004-03-04 14:27  yozhik
+
+	* BNT/examples/static/burglar-alarm-net.lisp.txt: Initial revision
+
+2004-02-28 09:25  yozhik
+
+	* BNT/examples/static/learn1.m: Initial import of code base from
+	  Kevin Murphy.
+
+2004-02-28 09:25  yozhik
+
+	* BNT/examples/static/learn1.m: Initial revision
+
+2004-02-22 11:43  yozhik
+
+	* BNT/examples/static/brainy.m: Initial import of code base from
+	  Kevin Murphy.
+
+2004-02-22 11:43  yozhik
+
+	* BNT/examples/static/brainy.m: Initial revision
+
+2004-02-20 14:00  yozhik
+
+	* BNT/CPDs/@discrete_CPD/convert_to_pot.m: Initial import of code
+	  base from Kevin Murphy.
+
+2004-02-20 14:00  yozhik
+
+	* BNT/CPDs/@discrete_CPD/convert_to_pot.m: Initial revision
+
+2004-02-18 17:12  yozhik
+
+	*
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/enter_soft_evidence.m:
+	  Initial import of code base from Kevin Murphy.
+
+2004-02-18 17:12  yozhik
+
+	*
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/enter_soft_evidence.m:
+	  Initial revision
+
+2004-02-13 18:06  yozhik
+
+	* HMM/mhmmParzen_train_observed.m: Initial import of code base from
+	  Kevin Murphy.
+
+2004-02-13 18:06  yozhik
+
+	* HMM/mhmmParzen_train_observed.m: Initial revision
+
+2004-02-12 15:08  yozhik
+
+	* HMM/gausshmm_train_observed.m: Initial import of code base from
+	  Kevin Murphy.
+
+2004-02-12 15:08  yozhik
+
+	* HMM/gausshmm_train_observed.m: Initial revision
+
+2004-02-12 04:57  yozhik
+
+	* BNT/examples/static/HME/hmemenu.m: Initial import of code base
+	  from Kevin Murphy.
+
+2004-02-12 04:57  yozhik
+
+	* BNT/examples/static/HME/hmemenu.m: Initial revision
+
+2004-02-07 20:52  yozhik
+
+	* HMM/mhmm_em.m: Initial import of code base from Kevin Murphy.
+
+2004-02-07 20:52  yozhik
+
+	* HMM/mhmm_em.m: Initial revision
+
+2004-02-04 15:53  yozhik
+
+	* BNT/examples/dynamic/mk_orig_bat_dbn.m: Initial import of code
+	  base from Kevin Murphy.
+
+2004-02-04 15:53  yozhik
+
+	* BNT/examples/dynamic/mk_orig_bat_dbn.m: Initial revision
+
+2004-02-03 23:42  yozhik
+
+	* BNT/inference/dynamic/@cbk_inf_engine/enter_soft_evidence.m:
+	  Initial import of code base from Kevin Murphy.
+
+2004-02-03 23:42  yozhik
+
+	* BNT/inference/dynamic/@cbk_inf_engine/enter_soft_evidence.m:
+	  Initial revision
+
+2004-02-03 09:15  yozhik
+
+	* GraphViz/Old/graphToDot.m: Initial import of code base from Kevin
+	  Murphy.
+
+2004-02-03 09:15  yozhik
+
+	* GraphViz/Old/graphToDot.m: Initial revision
+
+2004-01-30 18:57  yozhik
+
+	* BNT/examples/dynamic/mk_orig_water_dbn.m: Initial import of code
+	  base from Kevin Murphy.
+
+2004-01-30 18:57  yozhik
+
+	* BNT/examples/dynamic/mk_orig_water_dbn.m: Initial revision
+
+2004-01-27 13:08  yozhik
+
+	* GraphViz/: my_call.m, editGraphGUI.m: Initial import of code base
+	  from Kevin Murphy.
+
+2004-01-27 13:08  yozhik
+
+	* GraphViz/: my_call.m, editGraphGUI.m: Initial revision
+
+2004-01-27 13:01  yozhik
+
+	* GraphViz/Old/: dot_to_graph.m, draw_graph.m: Initial import of
+	  code base from Kevin Murphy.
+
+2004-01-27 13:01  yozhik
+
+	* GraphViz/Old/: dot_to_graph.m, draw_graph.m: Initial revision
+
+2004-01-27 12:47  yozhik
+
+	* GraphViz/Old/pre_pesha_graph_to_dot.m: Initial import of code
+	  base from Kevin Murphy.
+
+2004-01-27 12:47  yozhik
+
+	* GraphViz/Old/pre_pesha_graph_to_dot.m: Initial revision
+
+2004-01-27 12:42  yozhik
+
+	* GraphViz/Old/draw_dot.m: Initial import of code base from Kevin
+	  Murphy.
+
+2004-01-27 12:42  yozhik
+
+	* GraphViz/Old/draw_dot.m: Initial revision
+
+2004-01-14 17:06  yozhik
+
+	* BNT/examples/static/Models/mk_hmm_bnet.m: Initial import of code
+	  base from Kevin Murphy.
+
+2004-01-14 17:06  yozhik
+
+	* BNT/examples/static/Models/mk_hmm_bnet.m: Initial revision
+
+2004-01-12 12:53  yozhik
+
+	* BNT/inference/dynamic/@cbk_inf_engine/enter_evidence.m: Initial
+	  import of code base from Kevin Murphy.
+
+2004-01-12 12:53  yozhik
+
+	* BNT/inference/dynamic/@cbk_inf_engine/enter_evidence.m: Initial
+	  revision
+
+2004-01-04 17:23  yozhik
+
+	* BNT/inference/static/@belprop_mrf2_inf_engine/bp_mrf2.m: Initial
+	  import of code base from Kevin Murphy.
+
+2004-01-04 17:23  yozhik
+
+	* BNT/inference/static/@belprop_mrf2_inf_engine/bp_mrf2.m: Initial
+	  revision
+
+2003-12-15 22:17  yozhik
+
+	* BNT/inference/dynamic/@cbk_inf_engine/marginal_nodes.m: Initial
+	  import of code base from Kevin Murphy.
+
+2003-12-15 22:17  yozhik
+
+	* BNT/inference/dynamic/@cbk_inf_engine/marginal_nodes.m: Initial
+	  revision
+
+2003-10-31 14:37  yozhik
+
+	* BNT/inference/static/@jtree_inf_engine/jtree_inf_engine.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-10-31 14:37  yozhik
+
+	* BNT/inference/static/@jtree_inf_engine/jtree_inf_engine.m:
+	  Initial revision
+
+2003-09-05 07:06  yozhik
+
+	* BNT/learning/learn_struct_mcmc.m: Initial import of code base
+	  from Kevin Murphy.
+
+2003-09-05 07:06  yozhik
+
+	* BNT/learning/learn_struct_mcmc.m: Initial revision
+
+2003-08-18 14:50  yozhik
+
+	* BNT/learning/learn_params_dbn_em.m: Initial import of code base
+	  from Kevin Murphy.
+
+2003-08-18 14:50  yozhik
+
+	* BNT/learning/learn_params_dbn_em.m: Initial revision
+
+2003-07-30 06:37  yozhik
+
+	* BNT/potentials/: @mpot/set_domain_pot.m,
+	  @cgpot/Old/set_domain_pot.m, @cgpot/set_domain_pot.m: Initial
+	  import of code base from Kevin Murphy.
+
+2003-07-30 06:37  yozhik
+
+	* BNT/potentials/: @mpot/set_domain_pot.m,
+	  @cgpot/Old/set_domain_pot.m, @cgpot/set_domain_pot.m: Initial
+	  revision
+
+2003-07-28 19:44  yozhik
+
+	* BNT/inference/dynamic/@cbk_inf_engine/: dbn_init_bel.m,
+	  dbn_marginal_from_bel.m, dbn_update_bel.m, dbn_update_bel1.m,
+	  marginal_family.m, update_engine.m: Initial import of code base
+	  from Kevin Murphy.
+
+2003-07-28 19:44  yozhik
+
+	* BNT/inference/dynamic/@cbk_inf_engine/: dbn_init_bel.m,
+	  dbn_marginal_from_bel.m, dbn_update_bel.m, dbn_update_bel1.m,
+	  marginal_family.m, update_engine.m: Initial revision
+
+2003-07-28 15:44  yozhik
+
+	* GraphViz/: approxeq.m, process_options.m: Initial import of code
+	  base from Kevin Murphy.
+
+2003-07-28 15:44  yozhik
+
+	* GraphViz/: approxeq.m, process_options.m: Initial revision
+
+2003-07-24 06:41  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/update_ess.m: Initial import of code base
+	  from Kevin Murphy.
+
+2003-07-24 06:41  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/update_ess.m: Initial revision
+
+2003-07-22 15:55  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/update_ess.m: Initial import of code base
+	  from Kevin Murphy.
+
+2003-07-22 15:55  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/update_ess.m: Initial revision
+
+2003-07-06 13:57  yozhik
+
+	* BNT/inference/static/@pearl_inf_engine/bethe_free_energy.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-07-06 13:57  yozhik
+
+	* BNT/inference/static/@pearl_inf_engine/bethe_free_energy.m:
+	  Initial revision
+
+2003-05-21 06:49  yozhik
+
+	* BNT/potentials/@scgpot/: complement_pot.m, normalize_pot.m,
+	  recursive_combine_pots.m: Initial import of code base from Kevin
+	  Murphy.
+
+2003-05-21 06:49  yozhik
+
+	* BNT/potentials/@scgpot/: complement_pot.m, normalize_pot.m,
+	  recursive_combine_pots.m: Initial revision
+
+2003-05-20 07:10  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/maximize_params.m: Initial import of code
+	  base from Kevin Murphy.
+
+2003-05-20 07:10  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/maximize_params.m: Initial revision
+
+2003-05-13 09:11  yozhik
+
+	* HMM/mhmm_em_demo.m: Initial import of code base from Kevin
+	  Murphy.
+
+2003-05-13 09:11  yozhik
+
+	* HMM/mhmm_em_demo.m: Initial revision
+
+2003-05-13 07:35  yozhik
+
+	* BNT/examples/dynamic/viterbi1.m: Initial import of code base from
+	  Kevin Murphy.
+
+2003-05-13 07:35  yozhik
+
+	* BNT/examples/dynamic/viterbi1.m: Initial revision
+
+2003-05-11 16:31  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/convert_to_table.m: Initial import of code
+	  base from Kevin Murphy.
+
+2003-05-11 16:31  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/convert_to_table.m: Initial revision
+
+2003-05-11 16:13  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/gaussian_CPD_params_given_dps.m: Initial
+	  import of code base from Kevin Murphy.
+
+2003-05-11 16:13  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/gaussian_CPD_params_given_dps.m: Initial
+	  revision
+
+2003-05-11 08:39  yozhik
+
+	* BNT/inference/static/@stab_cond_gauss_inf_engine/README: Initial
+	  import of code base from Kevin Murphy.
+
+2003-05-11 08:39  yozhik
+
+	* BNT/inference/static/@stab_cond_gauss_inf_engine/README: Initial
+	  revision
+
+2003-05-04 15:31  yozhik
+
+	* BNT/uninstallC_BNT.m: Initial import of code base from Kevin
+	  Murphy.
+
+2003-05-04 15:31  yozhik
+
+	* BNT/uninstallC_BNT.m: Initial revision
+
+2003-05-04 15:23  yozhik
+
+	* BNT/examples/dynamic/: dhmm1.m, ghmm1.m, mhmm1.m: Initial import
+	  of code base from Kevin Murphy.
+
+2003-05-04 15:23  yozhik
+
+	* BNT/examples/dynamic/: dhmm1.m, ghmm1.m, mhmm1.m: Initial
+	  revision
+
+2003-05-04 15:11  yozhik
+
+	* HMM/mhmm_logprob.m: Initial import of code base from Kevin
+	  Murphy.
+
+2003-05-04 15:11  yozhik
+
+	* HMM/mhmm_logprob.m: Initial revision
+
+2003-05-04 15:01  yozhik
+
+	* HMM/: dhmm_logprob.m, dhmm_em_online.m, dhmm_em_online_demo.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-05-04 15:01  yozhik
+
+	* HMM/: dhmm_logprob.m, dhmm_em_online.m, dhmm_em_online_demo.m:
+	  Initial revision
+
+2003-05-04 14:58  yozhik
+
+	* HMM/: pomdp_sample.m, dhmm_sample_endstate.m, dhmm_em_demo.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-05-04 14:58  yozhik
+
+	* HMM/: pomdp_sample.m, dhmm_sample_endstate.m, dhmm_em_demo.m:
+	  Initial revision
+
+2003-05-04 14:47  yozhik
+
+	*
+	  BNT/inference/online/@hmm_2TBN_inf_engine/private/mk_hmm_obs_lik_vec.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-05-04 14:47  yozhik
+
+	*
+	  BNT/inference/online/@hmm_2TBN_inf_engine/private/mk_hmm_obs_lik_vec.m:
+	  Initial revision
+
+2003-05-04 14:42  yozhik
+
+	*
+	  BNT/inference/dynamic/@hmm_inf_engine/private/mk_hmm_obs_lik_matrix.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-05-04 14:42  yozhik
+
+	*
+	  BNT/inference/dynamic/@hmm_inf_engine/private/mk_hmm_obs_lik_matrix.m:
+	  Initial revision
+
+2003-04-22 14:00  yozhik
+
+	* BNT/CPDs/@tabular_CPD/display.m: Initial import of code base from
+	  Kevin Murphy.
+
+2003-04-22 14:00  yozhik
+
+	* BNT/CPDs/@tabular_CPD/display.m: Initial revision
+
+2003-03-28 09:22  yozhik
+
+	* BNT/examples/dynamic/ho1.m: Initial import of code base from
+	  Kevin Murphy.
+
+2003-03-28 09:22  yozhik
+
+	* BNT/examples/dynamic/ho1.m: Initial revision
+
+2003-03-28 09:12  yozhik
+
+	*
+	  BNT/inference/static/@stab_cond_gauss_inf_engine/stab_cond_gauss_inf_engine.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-03-28 09:12  yozhik
+
+	*
+	  BNT/inference/static/@stab_cond_gauss_inf_engine/stab_cond_gauss_inf_engine.m:
+	  Initial revision
+
+2003-03-28 08:35  yozhik
+
+	* GraphViz/arrow.m: Initial import of code base from Kevin Murphy.
+
+2003-03-28 08:35  yozhik
+
+	* GraphViz/arrow.m: Initial revision
+
+2003-03-25 16:06  yozhik
+
+	* BNT/examples/static/Models/mk_asia_bnet.m: Initial import of code
+	  base from Kevin Murphy.
+
+2003-03-25 16:06  yozhik
+
+	* BNT/examples/static/Models/mk_asia_bnet.m: Initial revision
+
+2003-03-20 07:07  yozhik
+
+	* BNT/potentials/@scgpot/README: Initial import of code base from
+	  Kevin Murphy.
+
+2003-03-20 07:07  yozhik
+
+	* BNT/potentials/@scgpot/README: Initial revision
+
+2003-03-14 01:45  yozhik
+
+	*
+	  BNT/inference/dynamic/@stable_ho_inf_engine/stable_ho_inf_engine.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-03-14 01:45  yozhik
+
+	*
+	  BNT/inference/dynamic/@stable_ho_inf_engine/stable_ho_inf_engine.m:
+	  Initial revision
+
+2003-03-12 02:38  yozhik
+
+	*
+	  BNT/inference/static/@stab_cond_gauss_inf_engine/enter_evidence.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-03-12 02:38  yozhik
+
+	*
+	  BNT/inference/static/@stab_cond_gauss_inf_engine/enter_evidence.m:
+	  Initial revision
+
+2003-03-11 10:07  yozhik
+
+	* BNT/potentials/@scgpot/reduce_pot.m: Initial import of code base
+	  from Kevin Murphy.
+
+2003-03-11 10:07  yozhik
+
+	* BNT/potentials/@scgpot/reduce_pot.m: Initial revision
+
+2003-03-11 09:49  yozhik
+
+	* BNT/potentials/@scgpot/combine_pots.m: Initial import of code
+	  base from Kevin Murphy.
+
+2003-03-11 09:49  yozhik
+
+	* BNT/potentials/@scgpot/combine_pots.m: Initial revision
+
+2003-03-11 09:37  yozhik
+
+	* BNT/potentials/@scgcpot/reduce_pot.m: Initial import of code base
+	  from Kevin Murphy.
+
+2003-03-11 09:37  yozhik
+
+	* BNT/potentials/@scgcpot/reduce_pot.m: Initial revision
+
+2003-03-11 09:06  yozhik
+
+	* BNT/potentials/@scgpot/marginalize_pot.m: Initial import of code
+	  base from Kevin Murphy.
+
+2003-03-11 09:06  yozhik
+
+	* BNT/potentials/@scgpot/marginalize_pot.m: Initial revision
+
+2003-03-11 06:04  yozhik
+
+	* BNT/potentials/@scgpot/scgpot.m: Initial import of code base from
+	  Kevin Murphy.
+
+2003-03-11 06:04  yozhik
+
+	* BNT/potentials/@scgpot/scgpot.m: Initial revision
+
+2003-03-09 15:03  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/convert_to_pot.m: Initial import of code
+	  base from Kevin Murphy.
+
+2003-03-09 15:03  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/convert_to_pot.m: Initial revision
+
+2003-03-09 14:44  yozhik
+
+	* BNT/CPDs/@tabular_CPD/maximize_params.m: Initial import of code
+	  base from Kevin Murphy.
+
+2003-03-09 14:44  yozhik
+
+	* BNT/CPDs/@tabular_CPD/maximize_params.m: Initial revision
+
+2003-02-21 03:20  yozhik
+
+	*
+	  BNT/inference/static/@stab_cond_gauss_inf_engine/marginal_difclq_nodes.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-02-21 03:20  yozhik
+
+	*
+	  BNT/inference/static/@stab_cond_gauss_inf_engine/marginal_difclq_nodes.m:
+	  Initial revision
+
+2003-02-21 03:13  yozhik
+
+	*
+	  BNT/inference/static/@stab_cond_gauss_inf_engine/marginal_nodes.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-02-21 03:13  yozhik
+
+	*
+	  BNT/inference/static/@stab_cond_gauss_inf_engine/marginal_nodes.m:
+	  Initial revision
+
+2003-02-19 01:52  yozhik
+
+	* BNT/inference/dynamic/@stable_ho_inf_engine/: enter_evidence.m,
+	  marginal_family.m, marginal_nodes.m, test_ho_inf_enginge.m,
+	  update_engine.m: Initial import of code base from Kevin Murphy.
+
+2003-02-19 01:52  yozhik
+
+	* BNT/inference/dynamic/@stable_ho_inf_engine/: enter_evidence.m,
+	  marginal_family.m, marginal_nodes.m, test_ho_inf_enginge.m,
+	  update_engine.m: Initial revision
+
+2003-02-10 07:38  yozhik
+
+	* BNT/inference/static/@stab_cond_gauss_inf_engine/push.m: Initial
+	  import of code base from Kevin Murphy.
+
+2003-02-10 07:38  yozhik
+
+	* BNT/inference/static/@stab_cond_gauss_inf_engine/push.m: Initial
+	  revision
+
+2003-02-06 18:25  yozhik
+
+	* KPMtools/checkpsd.m: Initial import of code base from Kevin
+	  Murphy.
+
+2003-02-06 18:25  yozhik
+
+	* KPMtools/checkpsd.m: Initial revision
+
+2003-02-05 19:16  yozhik
+
+	* GraphViz/draw_hmm.m: Initial import of code base from Kevin
+	  Murphy.
+
+2003-02-05 19:16  yozhik
+
+	* GraphViz/draw_hmm.m: Initial revision
+
+2003-02-01 16:23  yozhik
+
+	* BNT/: general/dbn_to_hmm.m, learning/learn_params_dbn.m: Initial
+	  import of code base from Kevin Murphy.
+
+2003-02-01 16:23  yozhik
+
+	* BNT/: general/dbn_to_hmm.m, learning/learn_params_dbn.m: Initial
+	  revision
+
+2003-02-01 11:42  yozhik
+
+	* BNT/general/mk_dbn.m: Initial import of code base from Kevin
+	  Murphy.
+
+2003-02-01 11:42  yozhik
+
+	* BNT/general/mk_dbn.m: Initial revision
+
+2003-01-30 16:13  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/maximize_params_debug.m: Initial import of
+	  code base from Kevin Murphy.
+
+2003-01-30 16:13  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/maximize_params_debug.m: Initial revision
+
+2003-01-30 14:38  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/Old/maximize_params.m: Initial import of
+	  code base from Kevin Murphy.
+
+2003-01-30 14:38  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/Old/maximize_params.m: Initial revision
+
+2003-01-29 03:23  yozhik
+
+	*
+	  BNT/inference/static/@stab_cond_gauss_inf_engine/marginal_singleclq_nodes.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-01-29 03:23  yozhik
+
+	*
+	  BNT/inference/static/@stab_cond_gauss_inf_engine/marginal_singleclq_nodes.m:
+	  Initial revision
+
+2003-01-24 11:36  yozhik
+
+	* Kalman/sample_lds.m: Initial import of code base from Kevin
+	  Murphy.
+
+2003-01-24 11:36  yozhik
+
+	* Kalman/sample_lds.m: Initial revision
+
+2003-01-24 04:52  yozhik
+
+	* BNT/potentials/@scgpot/extension_pot.m: Initial import of code
+	  base from Kevin Murphy.
+
+2003-01-24 04:52  yozhik
+
+	* BNT/potentials/@scgpot/extension_pot.m: Initial revision
+
+2003-01-23 10:49  yozhik
+
+	* BNT/: general/convert_dbn_CPDs_to_tables1.m,
+	  inference/dynamic/@hmm_inf_engine/private/mk_hmm_obs_lik_vec.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-01-23 10:49  yozhik
+
+	* BNT/: general/convert_dbn_CPDs_to_tables1.m,
+	  inference/dynamic/@hmm_inf_engine/private/mk_hmm_obs_lik_vec.m:
+	  Initial revision
+
+2003-01-23 10:44  yozhik
+
+	* BNT/general/convert_dbn_CPDs_to_tables.m: Initial import of code
+	  base from Kevin Murphy.
+
+2003-01-23 10:44  yozhik
+
+	* BNT/general/convert_dbn_CPDs_to_tables.m: Initial revision
+
+2003-01-22 13:38  yozhik
+
+	* BNT/inference/dynamic/@hmm_inf_engine/enter_evidence.m: Initial
+	  import of code base from Kevin Murphy.
+
+2003-01-22 13:38  yozhik
+
+	* BNT/inference/dynamic/@hmm_inf_engine/enter_evidence.m: Initial
+	  revision
+
+2003-01-22 12:32  yozhik
+
+	* HMM/mc_sample_endstate.m: Initial import of code base from Kevin
+	  Murphy.
+
+2003-01-22 12:32  yozhik
+
+	* HMM/mc_sample_endstate.m: Initial revision
+
+2003-01-22 09:56  yozhik
+
+	* HMM/fixed_lag_smoother.m: Initial import of code base from Kevin
+	  Murphy.
+
+2003-01-22 09:56  yozhik
+
+	* HMM/fixed_lag_smoother.m: Initial revision
+
+2003-01-20 08:56  yozhik
+
+	* GraphViz/draw_graph_test.m: Initial import of code base from
+	  Kevin Murphy.
+
+2003-01-20 08:56  yozhik
+
+	* GraphViz/draw_graph_test.m: Initial revision
+
+2003-01-18 15:10  yozhik
+
+	* BNT/general/dsep_test.m: Initial import of code base from Kevin
+	  Murphy.
+
+2003-01-18 15:10  yozhik
+
+	* BNT/general/dsep_test.m: Initial revision
+
+2003-01-18 15:00  yozhik
+
+	* BNT/copyright.txt: Initial import of code base from Kevin Murphy.
+
+2003-01-18 15:00  yozhik
+
+	* BNT/copyright.txt: Initial revision
+
+2003-01-18 14:49  yozhik
+
+	* Kalman/tracking_demo.m: Initial import of code base from Kevin
+	  Murphy.
+
+2003-01-18 14:49  yozhik
+
+	* Kalman/tracking_demo.m: Initial revision
+
+2003-01-18 14:22  yozhik
+
+	* BNT/: examples/dummy, inference/dummy, inference/dynamic/dummy,
+	  inference/online/dummy, inference/static/dummy: Initial import of
+	  code base from Kevin Murphy.
+
+2003-01-18 14:22  yozhik
+
+	* BNT/: examples/dummy, inference/dummy, inference/dynamic/dummy,
+	  inference/online/dummy, inference/static/dummy: Initial revision
+
+2003-01-18 14:16  yozhik
+
+	* BNT/examples/dynamic/: ehmm1.m, jtree_clq_test.m: Initial import
+	  of code base from Kevin Murphy.
+
+2003-01-18 14:16  yozhik
+
+	* BNT/examples/dynamic/: ehmm1.m, jtree_clq_test.m: Initial
+	  revision
+
+2003-01-18 14:11  yozhik
+
+	* BNT/inference/static/:
+	  @jtree_sparse_inf_engine/jtree_sparse_inf_engine.m,
+	  @jtree_mnet_inf_engine/jtree_mnet_inf_engine.m: Initial import of
+	  code base from Kevin Murphy.
+
+2003-01-18 14:11  yozhik
+
+	* BNT/inference/static/:
+	  @jtree_sparse_inf_engine/jtree_sparse_inf_engine.m,
+	  @jtree_mnet_inf_engine/jtree_mnet_inf_engine.m: Initial revision
+
+2003-01-18 13:17  yozhik
+
+	* GraphViz/draw_dbn_test.m: Initial import of code base from Kevin
+	  Murphy.
+
+2003-01-18 13:17  yozhik
+
+	* GraphViz/draw_dbn_test.m: Initial revision
+
+2003-01-11 10:53  yozhik
+
+	* BNT/inference/static/@pearl_inf_engine/pearl_inf_engine.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-01-11 10:53  yozhik
+
+	* BNT/inference/static/@pearl_inf_engine/pearl_inf_engine.m:
+	  Initial revision
+
+2003-01-11 10:48  yozhik
+
+	* BNT/examples/dynamic/HHMM/Map/learn_map.m: Initial import of code
+	  base from Kevin Murphy.
+
+2003-01-11 10:48  yozhik
+
+	* BNT/examples/dynamic/HHMM/Map/learn_map.m: Initial revision
+
+2003-01-11 10:41  yozhik
+
+	* BNT/inference/dynamic/@jtree_dbn_inf_engine/enter_evidence.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-01-11 10:41  yozhik
+
+	* BNT/inference/dynamic/@jtree_dbn_inf_engine/enter_evidence.m:
+	  Initial revision
+
+2003-01-11 10:13  yozhik
+
+	* BNT/inference/dynamic/@bk_inf_engine/enter_soft_evidence.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-01-11 10:13  yozhik
+
+	* BNT/inference/dynamic/@bk_inf_engine/enter_soft_evidence.m:
+	  Initial revision
+
+2003-01-07 08:25  yozhik
+
+	* BNT/CPDs/@softmax_CPD/softmax_CPD.m: Initial import of code base
+	  from Kevin Murphy.
+
+2003-01-07 08:25  yozhik
+
+	* BNT/CPDs/@softmax_CPD/softmax_CPD.m: Initial revision
+
+2003-01-03 14:01  yozhik
+
+	*
+	  BNT/inference/static/@belprop_mrf2_inf_engine/belprop_mrf2_inf_engine.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-01-03 14:01  yozhik
+
+	*
+	  BNT/inference/static/@belprop_mrf2_inf_engine/belprop_mrf2_inf_engine.m:
+	  Initial revision
+
+2003-01-02 09:49  yozhik
+
+	* BNT/inference/static/@belprop_mrf2_inf_engine/find_mpe.m: Initial
+	  import of code base from Kevin Murphy.
+
+2003-01-02 09:49  yozhik
+
+	* BNT/inference/static/@belprop_mrf2_inf_engine/find_mpe.m: Initial
+	  revision
+
+2003-01-02 09:28  yozhik
+
+	* BNT/inference/static/@belprop_mrf2_inf_engine/: set_params.m,
+	  enter_soft_evidence.m: Initial import of code base from Kevin
+	  Murphy.
+
+2003-01-02 09:28  yozhik
+
+	* BNT/inference/static/@belprop_mrf2_inf_engine/: set_params.m,
+	  enter_soft_evidence.m: Initial revision
+
+2002-12-31 14:06  yozhik
+
+	* BNT/general/mk_mrf2.m: Initial import of code base from Kevin
+	  Murphy.
+
+2002-12-31 14:06  yozhik
+
+	* BNT/general/mk_mrf2.m: Initial revision
+
+2002-12-31 13:24  yozhik
+
+	* BNT/inference/static/@belprop_mrf2_inf_engine/marginal_nodes.m:
+	  Initial import of code base from Kevin Murphy.
+
+2002-12-31 13:24  yozhik
+
+	* BNT/inference/static/@belprop_mrf2_inf_engine/marginal_nodes.m:
+	  Initial revision
+
+2002-12-31 11:00  yozhik
+
+	* BNT/inference/static/@belprop_inf_engine/belprop_inf_engine.m:
+	  Initial import of code base from Kevin Murphy.
+
+2002-12-31 11:00  yozhik
+
+	* BNT/inference/static/@belprop_inf_engine/belprop_inf_engine.m:
+	  Initial revision
+
+2002-12-16 11:16  yozhik
+
+	* BNT/examples/dynamic/HHMM/remove_hhmm_end_state.m: Initial import
+	  of code base from Kevin Murphy.
+
+2002-12-16 11:16  yozhik
+
+	* BNT/examples/dynamic/HHMM/remove_hhmm_end_state.m: Initial
+	  revision
+
+2002-12-16 09:57  yozhik
+
+	* BNT/general/unroll_set.m: Initial import of code base from Kevin
+	  Murphy.
+
+2002-12-16 09:57  yozhik
+
+	* BNT/general/unroll_set.m: Initial revision
+
+2002-11-26 14:14  yozhik
+
+	* BNT/examples/dynamic/HHMM/Mgram/mgram3.m: Initial import of code
+	  base from Kevin Murphy.
+
+2002-11-26 14:14  yozhik
+
+	* BNT/examples/dynamic/HHMM/Mgram/mgram3.m: Initial revision
+
+2002-11-26 14:04  yozhik
+
+	* BNT/examples/dynamic/HHMM/Mgram/mgram2.m: Initial import of code
+	  base from Kevin Murphy.
+
+2002-11-26 14:04  yozhik
+
+	* BNT/examples/dynamic/HHMM/Mgram/mgram2.m: Initial revision
+
+2002-11-22 16:44  yozhik
+
+	* BNT/examples/dynamic/HHMM/Mgram/Old/mgram2.m: Initial import of
+	  code base from Kevin Murphy.
+
+2002-11-22 16:44  yozhik
+
+	* BNT/examples/dynamic/HHMM/Mgram/Old/mgram2.m: Initial revision
+
+2002-11-22 15:59  yozhik
+
+	* BNT/examples/dynamic/HHMM/Mgram/mgram1.m: Initial import of code
+	  base from Kevin Murphy.
+
+2002-11-22 15:59  yozhik
+
+	* BNT/examples/dynamic/HHMM/Mgram/mgram1.m: Initial revision
+
+2002-11-22 15:51  yozhik
+
+	* BNT/inference/dynamic/@jtree_dbn_inf_engine/marginal_nodes.m:
+	  Initial import of code base from Kevin Murphy.
+
+2002-11-22 15:51  yozhik
+
+	* BNT/inference/dynamic/@jtree_dbn_inf_engine/marginal_nodes.m:
+	  Initial revision
+
+2002-11-22 15:07  yozhik
+
+	* BNT/examples/dynamic/HHMM/Mgram/: num2letter.m, letter2num.m:
+	  Initial import of code base from Kevin Murphy.
+
+2002-11-22 15:07  yozhik
+
+	* BNT/examples/dynamic/HHMM/Mgram/: num2letter.m, letter2num.m:
+	  Initial revision
+
+2002-11-22 14:35  yozhik
+
+	* BNT/general/convert_dbn_CPDs_to_pots.m: Initial import of code
+	  base from Kevin Murphy.
+
+2002-11-22 14:35  yozhik
+
+	* BNT/general/convert_dbn_CPDs_to_pots.m: Initial revision
+
+2002-11-22 13:45  yozhik
+
+	* HMM/mk_rightleft_transmat.m: Initial import of code base from
+	  Kevin Murphy.
+
+2002-11-22 13:45  yozhik
+
+	* HMM/mk_rightleft_transmat.m: Initial revision
+
+2002-11-14 12:33  yozhik
+
+	* BNT/examples/dynamic/water2.m: Initial import of code base from
+	  Kevin Murphy.
+
+2002-11-14 12:33  yozhik
+
+	* BNT/examples/dynamic/water2.m: Initial revision
+
+2002-11-14 12:07  yozhik
+
+	* BNT/examples/dynamic/water1.m: Initial import of code base from
+	  Kevin Murphy.
+
+2002-11-14 12:07  yozhik
+
+	* BNT/examples/dynamic/water1.m: Initial revision
+
+2002-11-14 12:02  yozhik
+
+	* BNT/inference/: online/@hmm_2TBN_inf_engine/marginal_nodes.m,
+	  dynamic/@hmm_inf_engine/marginal_nodes.m,
+	  online/@hmm_2TBN_inf_engine/hmm_2TBN_inf_engine.m,
+	  dynamic/@hmm_inf_engine/hmm_inf_engine.m,
+	  dynamic/@hmm_inf_engine/marginal_family.m,
+	  online/@hmm_2TBN_inf_engine/marginal_family.m: Initial import of
+	  code base from Kevin Murphy.
+
+2002-11-14 12:02  yozhik
+
+	* BNT/inference/: online/@hmm_2TBN_inf_engine/marginal_nodes.m,
+	  dynamic/@hmm_inf_engine/marginal_nodes.m,
+	  online/@hmm_2TBN_inf_engine/hmm_2TBN_inf_engine.m,
+	  dynamic/@hmm_inf_engine/hmm_inf_engine.m,
+	  dynamic/@hmm_inf_engine/marginal_family.m,
+	  online/@hmm_2TBN_inf_engine/marginal_family.m: Initial revision
+
+2002-11-14 08:31  yozhik
+
+	* BNT/inference/:
+	  online/@jtree_2TBN_inf_engine/jtree_2TBN_inf_engine.m,
+	  dynamic/@jtree_dbn_inf_engine/jtree_dbn_inf_engine.m: Initial
+	  import of code base from Kevin Murphy.
+
+2002-11-14 08:31  yozhik
+
+	* BNT/inference/:
+	  online/@jtree_2TBN_inf_engine/jtree_2TBN_inf_engine.m,
+	  dynamic/@jtree_dbn_inf_engine/jtree_dbn_inf_engine.m: Initial
+	  revision
+
+2002-11-13 17:01  yozhik
+
+	* BNT/examples/: static/qmr2.m, dynamic/arhmm1.m: Initial import of
+	  code base from Kevin Murphy.
+
+2002-11-13 17:01  yozhik
+
+	* BNT/examples/: static/qmr2.m, dynamic/arhmm1.m: Initial revision
+
+2002-11-03 08:44  yozhik
+
+	* BNT/examples/static/Models/mk_alarm_bnet.m: Initial import of
+	  code base from Kevin Murphy.
+
+2002-11-03 08:44  yozhik
+
+	* BNT/examples/static/Models/mk_alarm_bnet.m: Initial revision
+
+2002-11-01 16:32  yozhik
+
+	* Kalman/kalman_forward_backward.m: Initial import of code base
+	  from Kevin Murphy.
+
+2002-11-01 16:32  yozhik
+
+	* Kalman/kalman_forward_backward.m: Initial revision
+
+2002-10-23 08:17  yozhik
+
+	* Kalman/learning_demo.m: Initial import of code base from Kevin
+	  Murphy.
+
+2002-10-23 08:17  yozhik
+
+	* Kalman/learning_demo.m: Initial revision
+
+2002-10-18 13:05  yozhik
+
+	* BNT/inference/static/@pearl_inf_engine/marginal_family.m: Initial
+	  import of code base from Kevin Murphy.
+
+2002-10-18 13:05  yozhik
+
+	* BNT/inference/static/@pearl_inf_engine/marginal_family.m: Initial
+	  revision
+
+2002-10-10 16:45  yozhik
+
+	* BNT/examples/dynamic/jtree_clq_test2.m: Initial import of code
+	  base from Kevin Murphy.
+
+2002-10-10 16:45  yozhik
+
+	* BNT/examples/dynamic/jtree_clq_test2.m: Initial revision
+
+2002-10-10 16:14  yozhik
+
+	* BNT/examples/dynamic/: mk_mildew_dbn.m, mk_uffe_dbn.m: Initial
+	  import of code base from Kevin Murphy.
+
+2002-10-10 16:14  yozhik
+
+	* BNT/examples/dynamic/: mk_mildew_dbn.m, mk_uffe_dbn.m: Initial
+	  revision
+
+2002-10-09 13:36  yozhik
+
+	* BNT/examples/dynamic/mk_ps_from_clqs.m: Initial import of code
+	  base from Kevin Murphy.
+
+2002-10-09 13:36  yozhik
+
+	* BNT/examples/dynamic/mk_ps_from_clqs.m: Initial revision
+
+2002-10-07 06:26  yozhik
+
+	* BNT/CPDs/@deterministic_CPD/deterministic_CPD.m: Initial import
+	  of code base from Kevin Murphy.
+
+2002-10-07 06:26  yozhik
+
+	* BNT/CPDs/@deterministic_CPD/deterministic_CPD.m: Initial revision
+
+2002-10-02 08:39  yozhik
+
+	* BNT/potentials/Tables/marg_tableC.c: Initial import of code base
+	  from Kevin Murphy.
+
+2002-10-02 08:39  yozhik
+
+	* BNT/potentials/Tables/marg_tableC.c: Initial revision
+
+2002-10-02 08:28  yozhik
+
+	* BNT/potentials/Tables/: mult_by_tableM.m, mult_by_table2.m:
+	  Initial import of code base from Kevin Murphy.
+
+2002-10-02 08:28  yozhik
+
+	* BNT/potentials/Tables/: mult_by_tableM.m, mult_by_table2.m:
+	  Initial revision
+
+2002-10-01 14:33  yozhik
+
+	* BNT/potentials/Tables/mult_by_tableC.c: Initial import of code
+	  base from Kevin Murphy.
+
+2002-10-01 14:33  yozhik
+
+	* BNT/potentials/Tables/mult_by_tableC.c: Initial revision
+
+2002-10-01 14:23  yozhik
+
+	* BNT/potentials/Tables/mult_by_table.c: Initial import of code
+	  base from Kevin Murphy.
+
+2002-10-01 14:23  yozhik
+
+	* BNT/potentials/Tables/mult_by_table.c: Initial revision
+
+2002-10-01 14:20  yozhik
+
+	* BNT/potentials/Tables/repmat_and_mult.c: Initial import of code
+	  base from Kevin Murphy.
+
+2002-10-01 14:20  yozhik
+
+	* BNT/potentials/Tables/repmat_and_mult.c: Initial revision
+
+2002-10-01 12:04  yozhik
+
+	* BNT/potentials/@dpot/dpot.m: Initial import of code base from
+	  Kevin Murphy.
+
+2002-10-01 12:04  yozhik
+
+	* BNT/potentials/@dpot/dpot.m: Initial revision
+
+2002-10-01 11:21  yozhik
+
+	* BNT/examples/static/Belprop/belprop_polytree_discrete.m: Initial
+	  import of code base from Kevin Murphy.
+
+2002-10-01 11:21  yozhik
+
+	* BNT/examples/static/Belprop/belprop_polytree_discrete.m: Initial
+	  revision
+
+2002-10-01 11:16  yozhik
+
+	* BNT/examples/static/cmp_inference_static.m: Initial import of
+	  code base from Kevin Murphy.
+
+2002-10-01 11:16  yozhik
+
+	* BNT/examples/static/cmp_inference_static.m: Initial revision
+
+2002-10-01 10:39  yozhik
+
+	* BNT/potentials/Tables/marg_tableM.m: Initial import of code base
+	  from Kevin Murphy.
+
+2002-10-01 10:39  yozhik
+
+	* BNT/potentials/Tables/marg_tableM.m: Initial revision
+
+2002-09-29 03:21  yozhik
+
+	* BNT/potentials/Tables/mult_by_table_global.m: Initial import of
+	  code base from Kevin Murphy.
+
+2002-09-29 03:21  yozhik
+
+	* BNT/potentials/Tables/mult_by_table_global.m: Initial revision
+
+2002-09-26 01:39  yozhik
+
+	* BNT/learning/learn_struct_K2.m: Initial import of code base from
+	  Kevin Murphy.
+
+2002-09-26 01:39  yozhik
+
+	* BNT/learning/learn_struct_K2.m: Initial revision
+
+2002-09-24 15:43  yozhik
+
+	* BNT/: CPDs/@hhmm2Q_CPD/update_ess.m,
+	  CPDs/@hhmm2Q_CPD/maximize_params.m,
+	  examples/dynamic/HHMM/Map/disp_map_hhmm.m: Initial import of code
+	  base from Kevin Murphy.
+
+2002-09-24 15:43  yozhik
+
+	* BNT/: CPDs/@hhmm2Q_CPD/update_ess.m,
+	  CPDs/@hhmm2Q_CPD/maximize_params.m,
+	  examples/dynamic/HHMM/Map/disp_map_hhmm.m: Initial revision
+
+2002-09-24 15:34  yozhik
+
+	* BNT/CPDs/@hhmm2Q_CPD/: hhmm2Q_CPD.m, reset_ess.m: Initial import
+	  of code base from Kevin Murphy.
+
+2002-09-24 15:34  yozhik
+
+	* BNT/CPDs/@hhmm2Q_CPD/: hhmm2Q_CPD.m, reset_ess.m: Initial
+	  revision
+
+2002-09-24 15:13  yozhik
+
+	* BNT/examples/dynamic/HHMM/Map/mk_rnd_map_hhmm.m: Initial import
+	  of code base from Kevin Murphy.
+
+2002-09-24 15:13  yozhik
+
+	* BNT/examples/dynamic/HHMM/Map/mk_rnd_map_hhmm.m: Initial revision
+
+2002-09-24 06:10  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/maximize_params.m: Initial import of code
+	  base from Kevin Murphy.
+
+2002-09-24 06:10  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/maximize_params.m: Initial revision
+
+2002-09-24 06:02  yozhik
+
+	* BNT/examples/dynamic/HHMM/Map/sample_from_map.m: Initial import
+	  of code base from Kevin Murphy.
+
+2002-09-24 06:02  yozhik
+
+	* BNT/examples/dynamic/HHMM/Map/sample_from_map.m: Initial revision
+
+2002-09-24 05:46  yozhik
+
+	* BNT/CPDs/@hhmm2Q_CPD/CPD_to_CPT.m: Initial import of code base
+	  from Kevin Murphy.
+
+2002-09-24 05:46  yozhik
+
+	* BNT/CPDs/@hhmm2Q_CPD/CPD_to_CPT.m: Initial revision
+
+2002-09-24 03:49  yozhik
+
+	* BNT/examples/dynamic/HHMM/Map/mk_map_hhmm.m: Initial import of
+	  code base from Kevin Murphy.
+
+2002-09-24 03:49  yozhik
+
+	* BNT/examples/dynamic/HHMM/Map/mk_map_hhmm.m: Initial revision
+
+2002-09-24 00:02  yozhik
+
+	* BNT/examples/dynamic/HHMM/Map/Old/mk_map_hhmm.m: Initial import
+	  of code base from Kevin Murphy.
+
+2002-09-24 00:02  yozhik
+
+	* BNT/examples/dynamic/HHMM/Map/Old/mk_map_hhmm.m: Initial revision
+
+2002-09-23 21:19  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/hhmmQ_CPD.m: Initial import of code base from
+	  Kevin Murphy.
+
+2002-09-23 21:19  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/hhmmQ_CPD.m: Initial revision
+
+2002-09-23 19:58  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/update_CPT.m: Initial import of code base
+	  from Kevin Murphy.
+
+2002-09-23 19:58  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/update_CPT.m: Initial revision
+
+2002-09-23 19:30  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/Old/update_CPT.m: Initial import of code base
+	  from Kevin Murphy.
+
+2002-09-23 19:30  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/Old/update_CPT.m: Initial revision
+
+2002-09-21 14:37  yozhik
+
+	* BNT/examples/dynamic/HHMM/abcd_hhmm.m: Initial import of code
+	  base from Kevin Murphy.
+
+2002-09-21 14:37  yozhik
+
+	* BNT/examples/dynamic/HHMM/abcd_hhmm.m: Initial revision
+
+2002-09-21 13:58  yozhik
+
+	* BNT/examples/dynamic/HHMM/mk_hhmm.m: Initial import of code base
+	  from Kevin Murphy.
+
+2002-09-21 13:58  yozhik
+
+	* BNT/examples/dynamic/HHMM/mk_hhmm.m: Initial revision
+
+2002-09-10 10:44  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/log_prob_node.m: Initial import of code
+	  base from Kevin Murphy.
+
+2002-09-10 10:44  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/log_prob_node.m: Initial revision
+
+2002-07-28 16:09  yozhik
+
+	* BNT/learning/: learn_struct_pdag_pc_constrain.m, CovMat.m:
+	  Initial import of code base from Kevin Murphy.
+
+2002-07-28 16:09  yozhik
+
+	* BNT/learning/: learn_struct_pdag_pc_constrain.m, CovMat.m:
+	  Initial revision
+
+2002-07-24 07:48  yozhik
+
+	* BNT/general/hodbn_to_bnet.m: Initial import of code base from
+	  Kevin Murphy.
+
+2002-07-24 07:48  yozhik
+
+	* BNT/general/hodbn_to_bnet.m: Initial revision
+
+2002-07-23 06:17  yozhik
+
+	* BNT/general/mk_higher_order_dbn.m: Initial import of code base
+	  from Kevin Murphy.
+
+2002-07-23 06:17  yozhik
+
+	* BNT/general/mk_higher_order_dbn.m: Initial revision
+
+2002-07-20 18:25  yozhik
+
+	* BNT/inference/online/@jtree_2TBN_inf_engine/set_fields.m: Initial
+	  import of code base from Kevin Murphy.
+
+2002-07-20 18:25  yozhik
+
+	* BNT/inference/online/@jtree_2TBN_inf_engine/set_fields.m: Initial
+	  revision
+
+2002-07-20 17:32  yozhik
+
+	* BNT/inference/online/@jtree_2TBN_inf_engine/back_mpe.m: Initial
+	  import of code base from Kevin Murphy.
+
+2002-07-20 17:32  yozhik
+
+	* BNT/inference/online/@jtree_2TBN_inf_engine/back_mpe.m: Initial
+	  revision
+
+2002-07-02 15:56  yozhik
+
+	* BNT/examples/dynamic/HHMM/Motif/learn_motif_hhmm.m: Initial
+	  import of code base from Kevin Murphy.
+
+2002-07-02 15:56  yozhik
+
+	* BNT/examples/dynamic/HHMM/Motif/learn_motif_hhmm.m: Initial
+	  revision
+
+2002-06-27 13:34  yozhik
+
+	* BNT/general/add_ev_to_dmarginal.m: Initial import of code base
+	  from Kevin Murphy.
+
+2002-06-27 13:34  yozhik
+
+	* BNT/general/add_ev_to_dmarginal.m: Initial revision
+
+2002-06-24 16:54  yozhik
+
+	* BNT/CPDs/@hhmmF_CPD/update_ess.m: Initial import of code base
+	  from Kevin Murphy.
+
+2002-06-24 16:54  yozhik
+
+	* BNT/CPDs/@hhmmF_CPD/update_ess.m: Initial revision
+
+2002-06-24 16:38  yozhik
+
+	* BNT/CPDs/@hhmmF_CPD/hhmmF_CPD.m: Initial import of code base from
+	  Kevin Murphy.
+
+2002-06-24 16:38  yozhik
+
+	* BNT/CPDs/@hhmmF_CPD/hhmmF_CPD.m: Initial revision
+
+2002-06-24 15:45  yozhik
+
+	* BNT/CPDs/@hhmmF_CPD/update_CPT.m: Initial import of code base
+	  from Kevin Murphy.
+
+2002-06-24 15:45  yozhik
+
+	* BNT/CPDs/@hhmmF_CPD/update_CPT.m: Initial revision
+
+2002-06-24 15:35  yozhik
+
+	* BNT/CPDs/@hhmmF_CPD/Old/: hhmmF_CPD.m, log_prior.m,
+	  maximize_params.m, reset_ess.m, update_CPT.m, update_ess.m:
+	  Initial import of code base from Kevin Murphy.
+
+2002-06-24 15:35  yozhik
+
+	* BNT/CPDs/@hhmmF_CPD/Old/: hhmmF_CPD.m, log_prior.m,
+	  maximize_params.m, reset_ess.m, update_CPT.m, update_ess.m:
+	  Initial revision
+
+2002-06-24 15:23  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/Old/update_ess4.m: Initial import of code
+	  base from Kevin Murphy.
+
+2002-06-24 15:23  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/Old/update_ess4.m: Initial revision
+
+2002-06-24 15:08  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/Old/update_ess3.m: Initial import of code
+	  base from Kevin Murphy.
+
+2002-06-24 15:08  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/Old/update_ess3.m: Initial revision
+
+2002-06-24 14:20  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/Old/update_ess2.m: Initial import of code
+	  base from Kevin Murphy.
+
+2002-06-24 14:20  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/Old/update_ess2.m: Initial revision
+
+2002-06-24 11:56  yozhik
+
+	* BNT/: general/mk_fgraph_given_ev.m,
+	  CPDs/mk_isolated_tabular_CPD.m: Initial import of code base from
+	  Kevin Murphy.
+
+2002-06-24 11:56  yozhik
+
+	* BNT/: general/mk_fgraph_given_ev.m,
+	  CPDs/mk_isolated_tabular_CPD.m: Initial revision
+
+2002-06-24 11:19  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/Old/: hhmmQ_CPD.m, log_prior.m,
+	  maximize_params.m, reset_ess.m, update_ess.m: Initial import of
+	  code base from Kevin Murphy.
+
+2002-06-24 11:19  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/Old/: hhmmQ_CPD.m, log_prior.m,
+	  maximize_params.m, reset_ess.m, update_ess.m: Initial revision
+
+2002-06-20 13:30  yozhik
+
+	* BNT/examples/dynamic/mildew1.m: Initial import of code base from
+	  Kevin Murphy.
+
+2002-06-20 13:30  yozhik
+
+	* BNT/examples/dynamic/mildew1.m: Initial revision
+
+2002-06-19 17:18  yozhik
+
+	* BNT/: inference/dynamic/@hmm_inf_engine/find_mpe.m,
+	  examples/dynamic/HHMM/Square/learn_square_hhmm_cts.m: Initial
+	  import of code base from Kevin Murphy.
+
+2002-06-19 17:18  yozhik
+
+	* BNT/: inference/dynamic/@hmm_inf_engine/find_mpe.m,
+	  examples/dynamic/HHMM/Square/learn_square_hhmm_cts.m: Initial
+	  revision
+
+2002-06-19 17:03  yozhik
+
+	* BNT/examples/static/fgraph/fg1.m: Initial import of code base
+	  from Kevin Murphy.
+
+2002-06-19 17:03  yozhik
+
+	* BNT/examples/static/fgraph/fg1.m: Initial revision
+
+2002-06-19 16:59  yozhik
+
+	* BNT/: examples/static/softev1.m,
+	  inference/static/@belprop_fg_inf_engine/find_mpe.m: Initial
+	  import of code base from Kevin Murphy.
+
+2002-06-19 16:59  yozhik
+
+	* BNT/: examples/static/softev1.m,
+	  inference/static/@belprop_fg_inf_engine/find_mpe.m: Initial
+	  revision
+
+2002-06-19 15:11  yozhik
+
+	* BNT/inference/static/@var_elim_inf_engine/find_mpe.m: Initial
+	  import of code base from Kevin Murphy.
+
+2002-06-19 15:11  yozhik
+
+	* BNT/inference/static/@var_elim_inf_engine/find_mpe.m: Initial
+	  revision
+
+2002-06-19 15:08  yozhik
+
+	* BNT/: inference/static/@belprop_inf_engine/find_mpe.m,
+	  examples/static/mpe1.m, examples/static/mpe2.m: Initial import of
+	  code base from Kevin Murphy.
+
+2002-06-19 15:08  yozhik
+
+	* BNT/: inference/static/@belprop_inf_engine/find_mpe.m,
+	  examples/static/mpe1.m, examples/static/mpe2.m: Initial revision
+
+2002-06-19 15:04  yozhik
+
+	* BNT/inference/static/@var_elim_inf_engine/:
+	  var_elim_inf_engine.m, enter_evidence.m: Initial import of code
+	  base from Kevin Murphy.
+
+2002-06-19 15:04  yozhik
+
+	* BNT/inference/static/@var_elim_inf_engine/:
+	  var_elim_inf_engine.m, enter_evidence.m: Initial revision
+
+2002-06-19 14:56  yozhik
+
+	* BNT/inference/static/@global_joint_inf_engine/find_mpe.m: Initial
+	  import of code base from Kevin Murphy.
+
+2002-06-19 14:56  yozhik
+
+	* BNT/inference/static/@global_joint_inf_engine/find_mpe.m: Initial
+	  revision
+
+2002-06-17 16:49  yozhik
+
+	* BNT/inference/online/: @jtree_2TBN_inf_engine/back1_mpe.m,
+	  @smoother_engine/find_mpe.m: Initial import of code base from
+	  Kevin Murphy.
+
+2002-06-17 16:49  yozhik
+
+	* BNT/inference/online/: @jtree_2TBN_inf_engine/back1_mpe.m,
+	  @smoother_engine/find_mpe.m: Initial revision
+
+2002-06-17 16:46  yozhik
+
+	* BNT/inference/online/: @jtree_2TBN_inf_engine/fwd.m,
+	  @jtree_2TBN_inf_engine/fwd1.m, @smoother_engine/enter_evidence.m:
+	  Initial import of code base from Kevin Murphy.
+
+2002-06-17 16:46  yozhik
+
+	* BNT/inference/online/: @jtree_2TBN_inf_engine/fwd.m,
+	  @jtree_2TBN_inf_engine/fwd1.m, @smoother_engine/enter_evidence.m:
+	  Initial revision
+
+2002-06-17 16:38  yozhik
+
+	* BNT/inference/online/@jtree_2TBN_inf_engine/backT_mpe.m: Initial
+	  import of code base from Kevin Murphy.
+
+2002-06-17 16:38  yozhik
+
+	* BNT/inference/online/@jtree_2TBN_inf_engine/backT_mpe.m: Initial
+	  revision
+
+2002-06-17 16:34  yozhik
+
+	* BNT/inference/online/@jtree_2TBN_inf_engine/: back.m, backT.m,
+	  back1.m: Initial import of code base from Kevin Murphy.
+
+2002-06-17 16:34  yozhik
+
+	* BNT/inference/online/@jtree_2TBN_inf_engine/: back.m, backT.m,
+	  back1.m: Initial revision
+
+2002-06-17 16:14  yozhik
+
+	* BNT/inference/static/@jtree_inf_engine/: find_mpe.m,
+	  find_max_config.m: Initial import of code base from Kevin Murphy.
+
+2002-06-17 16:14  yozhik
+
+	* BNT/inference/static/@jtree_inf_engine/: find_mpe.m,
+	  find_max_config.m: Initial revision
+
+2002-06-17 14:58  yozhik
+
+	* BNT/general/Old/calc_mpe.m: Initial import of code base from
+	  Kevin Murphy.
+
+2002-06-17 14:58  yozhik
+
+	* BNT/general/Old/calc_mpe.m: Initial revision
+
+2002-06-17 13:59  yozhik
+
+	* BNT/inference/static/@jtree_inf_engine/: enter_evidence.m,
+	  distribute_evidence.m: Initial import of code base from Kevin
+	  Murphy.
+
+2002-06-17 13:59  yozhik
+
+	* BNT/inference/static/@jtree_inf_engine/: enter_evidence.m,
+	  distribute_evidence.m: Initial revision
+
+2002-06-17 13:29  yozhik
+
+	* BNT/inference/static/@jtree_mnet_inf_engine/: find_mpe.m,
+	  enter_evidence.m: Initial import of code base from Kevin Murphy.
+
+2002-06-17 13:29  yozhik
+
+	* BNT/inference/static/@jtree_mnet_inf_engine/: find_mpe.m,
+	  enter_evidence.m: Initial revision
+
+2002-06-16 13:01  yozhik
+
+	* BNT/general/is_mnet.m: Initial import of code base from Kevin
+	  Murphy.
+
+2002-06-16 13:01  yozhik
+
+	* BNT/general/is_mnet.m: Initial revision
+
+2002-06-16 12:52  yozhik
+
+	* BNT/general/mk_mnet.m: Initial import of code base from Kevin
+	  Murphy.
+
+2002-06-16 12:52  yozhik
+
+	* BNT/general/mk_mnet.m: Initial revision
+
+2002-06-16 12:34  yozhik
+
+	* BNT/inference/static/@jtree_inf_engine/init_pot.m: Initial import
+	  of code base from Kevin Murphy.
+
+2002-06-16 12:34  yozhik
+
+	* BNT/inference/static/@jtree_inf_engine/init_pot.m: Initial
+	  revision
+
+2002-06-16 12:06  yozhik
+
+	* BNT/potentials/@dpot/find_most_prob_entry.m: Initial import of
+	  code base from Kevin Murphy.
+
+2002-06-16 12:06  yozhik
+
+	* BNT/potentials/@dpot/find_most_prob_entry.m: Initial revision
+
+2002-05-31 03:25  yozhik
+
+	* BNT/general/unroll_higher_order_topology.m: Initial import of
+	  code base from Kevin Murphy.
+
+2002-05-31 03:25  yozhik
+
+	* BNT/general/unroll_higher_order_topology.m: Initial revision
+
+2002-05-29 08:59  yozhik
+
+	* BNT/@assocarray/assocarray.m,
+	  BNT/CPDs/@boolean_CPD/boolean_CPD.m,
+	  BNT/CPDs/@discrete_CPD/CPD_to_lambda_msg.m,
+	  BNT/CPDs/@discrete_CPD/CPD_to_pi.m,
+	  BNT/CPDs/@discrete_CPD/CPD_to_scgpot.m,
+	  BNT/CPDs/@discrete_CPD/README,
+	  BNT/CPDs/@discrete_CPD/convert_CPD_to_table_hidden_ps.m,
+	  BNT/CPDs/@discrete_CPD/convert_obs_CPD_to_table.m,
+	  BNT/CPDs/@discrete_CPD/convert_to_sparse_table.c,
+	  BNT/CPDs/@discrete_CPD/convert_to_table.m,
+	  BNT/CPDs/@discrete_CPD/discrete_CPD.m,
+	  BNT/CPDs/@discrete_CPD/dom_sizes.m,
+	  BNT/CPDs/@discrete_CPD/log_prob_node.m,
+	  BNT/CPDs/@discrete_CPD/prob_node.m,
+	  BNT/CPDs/@discrete_CPD/sample_node.m,
+	  BNT/CPDs/@discrete_CPD/Old/convert_to_pot.m,
+	  BNT/CPDs/@discrete_CPD/Old/convert_to_table.m,
+	  BNT/CPDs/@discrete_CPD/Old/prob_CPD.m,
+	  BNT/CPDs/@discrete_CPD/Old/prob_node.m,
+	  BNT/CPDs/@discrete_CPD/private/prod_CPT_and_pi_msgs.m,
+	  BNT/CPDs/@gaussian_CPD/CPD_to_lambda_msg.m,
+	  BNT/CPDs/@gaussian_CPD/CPD_to_pi.m,
+	  BNT/CPDs/@gaussian_CPD/CPD_to_scgpot.m,
+	  BNT/CPDs/@gaussian_CPD/adjustable_CPD.m,
+	  BNT/CPDs/@gaussian_CPD/convert_CPD_to_table_hidden_ps.m,
+	  BNT/CPDs/@gaussian_CPD/display.m,
+	  BNT/CPDs/@gaussian_CPD/get_field.m,
+	  BNT/CPDs/@gaussian_CPD/reset_ess.m,
+	  BNT/CPDs/@gaussian_CPD/sample_node.m,
+	  BNT/CPDs/@gaussian_CPD/set_fields.m,
+	  BNT/CPDs/@gaussian_CPD/Old/CPD_to_lambda_msg.m,
+	  BNT/CPDs/@gaussian_CPD/Old/gaussian_CPD.m,
+	  BNT/CPDs/@gaussian_CPD/Old/log_prob_node.m,
+	  BNT/CPDs/@gaussian_CPD/Old/update_ess.m,
+	  BNT/CPDs/@gaussian_CPD/Old/update_tied_ess.m,
+	  BNT/CPDs/@gaussian_CPD/private/CPD_to_linear_gaussian.m,
+	  BNT/CPDs/@generic_CPD/README,
+	  BNT/CPDs/@generic_CPD/adjustable_CPD.m,
+	  BNT/CPDs/@generic_CPD/display.m,
+	  BNT/CPDs/@generic_CPD/generic_CPD.m,
+	  BNT/CPDs/@generic_CPD/log_prior.m,
+	  BNT/CPDs/@generic_CPD/set_clamped.m,
+	  BNT/CPDs/@generic_CPD/Old/BIC_score_CPD.m,
+	  BNT/CPDs/@generic_CPD/Old/CPD_to_dpots.m,
+	  BNT/CPDs/@gmux_CPD/CPD_to_lambda_msg.m,
+	  BNT/CPDs/@gmux_CPD/convert_to_pot.m,
+	  BNT/CPDs/@gmux_CPD/CPD_to_pi.m, BNT/CPDs/@gmux_CPD/display.m,
+	  BNT/CPDs/@gmux_CPD/gmux_CPD.m, BNT/CPDs/@gmux_CPD/sample_node.m,
+	  BNT/CPDs/@gmux_CPD/Old/gmux_CPD.m,
+	  BNT/CPDs/@hhmmF_CPD/log_prior.m,
+	  BNT/CPDs/@hhmmF_CPD/maximize_params.m,
+	  BNT/CPDs/@hhmmF_CPD/reset_ess.m, BNT/CPDs/@hhmmQ_CPD/log_prior.m,
+	  BNT/CPDs/@hhmmQ_CPD/reset_ess.m,
+	  BNT/CPDs/@mlp_CPD/convert_to_table.m,
+	  BNT/CPDs/@mlp_CPD/maximize_params.m, BNT/CPDs/@mlp_CPD/mlp_CPD.m,
+	  BNT/CPDs/@mlp_CPD/reset_ess.m, BNT/CPDs/@mlp_CPD/update_ess.m,
+	  BNT/CPDs/@noisyor_CPD/CPD_to_lambda_msg.m,
+	  BNT/CPDs/@noisyor_CPD/CPD_to_pi.m,
+	  BNT/CPDs/@noisyor_CPD/noisyor_CPD.m,
+	  BNT/CPDs/@noisyor_CPD/private/sum_prod_CPD_and_pi_msgs.m,
+	  BNT/CPDs/@root_CPD/CPD_to_pi.m,
+	  BNT/CPDs/@root_CPD/convert_to_pot.m,
+	  BNT/CPDs/@root_CPD/log_marg_prob_node.m,
+	  BNT/CPDs/@root_CPD/log_prob_node.m,
+	  BNT/CPDs/@root_CPD/root_CPD.m, BNT/CPDs/@root_CPD/sample_node.m,
+	  BNT/CPDs/@root_CPD/Old/CPD_to_CPT.m,
+	  BNT/CPDs/@softmax_CPD/convert_to_pot.m,
+	  BNT/CPDs/@softmax_CPD/display.m,
+	  BNT/CPDs/@softmax_CPD/get_field.m,
+	  BNT/CPDs/@softmax_CPD/maximize_params.m,
+	  BNT/CPDs/@softmax_CPD/reset_ess.m,
+	  BNT/CPDs/@softmax_CPD/sample_node.m,
+	  BNT/CPDs/@softmax_CPD/set_fields.m,
+	  BNT/CPDs/@softmax_CPD/update_ess.m,
+	  BNT/CPDs/@softmax_CPD/private/extract_params.m,
+	  BNT/CPDs/@tabular_CPD/CPD_to_CPT.m,
+	  BNT/CPDs/@tabular_CPD/bayes_update_params.m,
+	  BNT/CPDs/@tabular_CPD/log_nextcase_prob_node.m,
+	  BNT/CPDs/@tabular_CPD/log_prior.m,
+	  BNT/CPDs/@tabular_CPD/reset_ess.m,
+	  BNT/CPDs/@tabular_CPD/update_ess.m,
+	  BNT/CPDs/@tabular_CPD/update_ess_simple.m,
+	  BNT/CPDs/@tabular_CPD/Old/BIC_score_CPD.m,
+	  BNT/CPDs/@tabular_CPD/Old/bayesian_score_CPD.m,
+	  BNT/CPDs/@tabular_CPD/Old/log_marg_prob_node_case.m,
+	  BNT/CPDs/@tabular_CPD/Old/mult_CPD_and_pi_msgs.m,
+	  BNT/CPDs/@tabular_CPD/Old/prob_CPT.m,
+	  BNT/CPDs/@tabular_CPD/Old/prob_node.m,
+	  BNT/CPDs/@tabular_CPD/Old/sample_node.m,
+	  BNT/CPDs/@tabular_CPD/Old/sample_node_single_case.m,
+	  BNT/CPDs/@tabular_CPD/Old/tabular_CPD.m,
+	  BNT/CPDs/@tabular_CPD/Old/update_params.m,
+	  BNT/CPDs/@tabular_decision_node/CPD_to_CPT.m,
+	  BNT/CPDs/@tabular_decision_node/display.m,
+	  BNT/CPDs/@tabular_decision_node/get_field.m,
+	  BNT/CPDs/@tabular_decision_node/set_fields.m,
+	  BNT/CPDs/@tabular_decision_node/tabular_decision_node.m,
+	  BNT/CPDs/@tabular_decision_node/Old/tabular_decision_node.m,
+	  BNT/CPDs/@tabular_kernel/convert_to_pot.m,
+	  BNT/CPDs/@tabular_kernel/convert_to_table.m,
+	  BNT/CPDs/@tabular_kernel/get_field.m,
+	  BNT/CPDs/@tabular_kernel/set_fields.m,
+	  BNT/CPDs/@tabular_kernel/tabular_kernel.m,
+	  BNT/CPDs/@tabular_kernel/Old/tabular_kernel.m,
+	  BNT/CPDs/@tabular_utility_node/convert_to_pot.m,
+	  BNT/CPDs/@tabular_utility_node/display.m,
+	  BNT/CPDs/@tabular_utility_node/tabular_utility_node.m,
+	  BNT/CPDs/@tree_CPD/display.m,
+	  BNT/CPDs/@tree_CPD/evaluate_tree_performance.m,
+	  BNT/CPDs/@tree_CPD/get_field.m,
+	  BNT/CPDs/@tree_CPD/learn_params.m, BNT/CPDs/@tree_CPD/readme.txt,
+	  BNT/CPDs/@tree_CPD/set_fields.m, BNT/CPDs/@tree_CPD/tree_CPD.m,
+	  BNT/CPDs/Old/@linear_gaussian_CPD/linear_gaussian_CPD.m,
+	  BNT/CPDs/Old/@linear_gaussian_CPD/log_marg_prob_node.m,
+	  BNT/CPDs/Old/@linear_gaussian_CPD/update_params_complete.m,
+	  BNT/CPDs/Old/@root_gaussian_CPD/log_marg_prob_node.m,
+	  BNT/CPDs/Old/@root_gaussian_CPD/root_gaussian_CPD.m,
+	  BNT/CPDs/Old/@root_gaussian_CPD/update_params_complete.m,
+	  BNT/CPDs/Old/@tabular_chance_node/CPD_to_upot.m,
+	  BNT/CPDs/Old/@tabular_chance_node/tabular_chance_node.m,
+	  BNT/examples/dynamic/bat1.m, BNT/examples/dynamic/bkff1.m,
+	  BNT/examples/dynamic/chmm1.m,
+	  BNT/examples/dynamic/cmp_inference_dbn.m,
+	  BNT/examples/dynamic/cmp_learning_dbn.m,
+	  BNT/examples/dynamic/cmp_online_inference.m,
+	  BNT/examples/dynamic/fhmm_infer.m,
+	  BNT/examples/dynamic/filter_test1.m,
+	  BNT/examples/dynamic/kalman1.m,
+	  BNT/examples/dynamic/kjaerulff1.m,
+	  BNT/examples/dynamic/loopy_dbn1.m,
+	  BNT/examples/dynamic/mk_collage_from_clqs.m,
+	  BNT/examples/dynamic/mk_fhmm.m, BNT/examples/dynamic/reveal1.m,
+	  BNT/examples/dynamic/scg_dbn.m,
+	  BNT/examples/dynamic/skf_data_assoc_gmux.m,
+	  BNT/examples/dynamic/HHMM/add_hhmm_end_state.m,
+	  BNT/examples/dynamic/HHMM/hhmm_jtree_clqs.m,
+	  BNT/examples/dynamic/HHMM/mk_hhmm_topo.m,
+	  BNT/examples/dynamic/HHMM/mk_hhmm_topo_F1.m,
+	  BNT/examples/dynamic/HHMM/pretty_print_hhmm_parse.m,
+	  BNT/examples/dynamic/HHMM/Motif/fixed_args_mk_motif_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Motif/mk_motif_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Motif/sample_motif_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Old/mk_abcd_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Old/mk_arrow_alpha_hhmm3.m,
+	  BNT/examples/dynamic/HHMM/Old/mk_hhmm2.m,
+	  BNT/examples/dynamic/HHMM/Old/mk_hhmm3.m,
+	  BNT/examples/dynamic/HHMM/Old/mk_hhmm3_args.m,
+	  BNT/examples/dynamic/HHMM/Old/motif_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Old/remove_hhmm_end_state.m,
+	  BNT/examples/dynamic/HHMM/Square/get_square_data.m,
+	  BNT/examples/dynamic/HHMM/Square/hhmm_inference.m,
+	  BNT/examples/dynamic/HHMM/Square/is_F2_true_D3.m,
+	  BNT/examples/dynamic/HHMM/Square/learn_square_hhmm_discrete.m,
+	  BNT/examples/dynamic/HHMM/Square/mk_square_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Square/plot_square_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Square/sample_square_hhmm_cts.m,
+	  BNT/examples/dynamic/HHMM/Square/sample_square_hhmm_discrete.m,
+	  BNT/examples/dynamic/HHMM/Square/square4.mat,
+	  BNT/examples/dynamic/HHMM/Square/square4_cases.mat,
+	  BNT/examples/dynamic/HHMM/Square/test_square_fig.m,
+	  BNT/examples/dynamic/HHMM/Square/test_square_fig.mat,
+	  BNT/examples/dynamic/HHMM/Square/Old/learn_square_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Square/Old/mk_square_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Square/Old/plot_square_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Square/Old/sample_square_hhmm.m,
+	  BNT/examples/dynamic/Old/chmm1.m,
+	  BNT/examples/dynamic/Old/cmp_inference.m,
+	  BNT/examples/dynamic/Old/kalman1.m,
+	  BNT/examples/dynamic/Old/old.water1.m,
+	  BNT/examples/dynamic/Old/online1.m,
+	  BNT/examples/dynamic/Old/online2.m,
+	  BNT/examples/dynamic/Old/scg_dbn.m,
+	  BNT/examples/dynamic/SLAM/mk_gmux_robot_dbn.m,
+	  BNT/examples/dynamic/SLAM/mk_linear_slam.m,
+	  BNT/examples/dynamic/SLAM/slam_kf.m,
+	  BNT/examples/dynamic/SLAM/slam_offline_loopy.m,
+	  BNT/examples/dynamic/SLAM/slam_partial_kf.m,
+	  BNT/examples/dynamic/SLAM/slam_stationary_loopy.m,
+	  BNT/examples/dynamic/SLAM/Old/offline_loopy_slam.m,
+	  BNT/examples/dynamic/SLAM/Old/paskin1.m,
+	  BNT/examples/dynamic/SLAM/Old/skf_data_assoc_gmux2.m,
+	  BNT/examples/dynamic/SLAM/Old/slam_kf.m,
+	  BNT/examples/limids/id1.m, BNT/examples/limids/pigs1.m,
+	  BNT/examples/static/cg1.m, BNT/examples/static/cg2.m,
+	  BNT/examples/static/discrete2.m, BNT/examples/static/discrete3.m,
+	  BNT/examples/static/fa1.m, BNT/examples/static/gaussian1.m,
+	  BNT/examples/static/gibbs_test1.m, BNT/examples/static/lw1.m,
+	  BNT/examples/static/mfa1.m, BNT/examples/static/mixexp1.m,
+	  BNT/examples/static/mixexp2.m, BNT/examples/static/mixexp3.m,
+	  BNT/examples/static/mog1.m, BNT/examples/static/qmr1.m,
+	  BNT/examples/static/sample1.m, BNT/examples/static/softmax1.m,
+	  BNT/examples/static/Belprop/belprop_loop1_discrete.m,
+	  BNT/examples/static/Belprop/belprop_loop1_gauss.m,
+	  BNT/examples/static/Belprop/belprop_loopy_cg.m,
+	  BNT/examples/static/Belprop/belprop_loopy_discrete.m,
+	  BNT/examples/static/Belprop/belprop_loopy_gauss.m,
+	  BNT/examples/static/Belprop/belprop_polytree_cg.m,
+	  BNT/examples/static/Belprop/belprop_polytree_gauss.m,
+	  BNT/examples/static/Belprop/bp1.m,
+	  BNT/examples/static/Belprop/gmux1.m,
+	  BNT/examples/static/Brutti/Belief_IOhmm.m,
+	  BNT/examples/static/Brutti/Belief_hmdt.m,
+	  BNT/examples/static/Brutti/Belief_hme.m,
+	  BNT/examples/static/Brutti/Sigmoid_Belief.m,
+	  BNT/examples/static/HME/HMEforMatlab.jpg,
+	  BNT/examples/static/HME/README, BNT/examples/static/HME/fhme.m,
+	  BNT/examples/static/HME/gen_data.m,
+	  BNT/examples/static/HME/hme_class_plot.m,
+	  BNT/examples/static/HME/hme_reg_plot.m,
+	  BNT/examples/static/HME/hme_topobuilder.m,
+	  BNT/examples/static/HME/test_data_class.mat,
+	  BNT/examples/static/HME/test_data_class2.mat,
+	  BNT/examples/static/HME/test_data_reg.mat,
+	  BNT/examples/static/HME/train_data_class.mat,
+	  BNT/examples/static/HME/train_data_reg.mat,
+	  BNT/examples/static/Misc/mixexp_data.txt,
+	  BNT/examples/static/Misc/mixexp_graddesc.m,
+	  BNT/examples/static/Misc/mixexp_plot.m,
+	  BNT/examples/static/Misc/sprinkler.bif,
+	  BNT/examples/static/Models/mk_cancer_bnet.m,
+	  BNT/examples/static/Models/mk_car_bnet.m,
+	  BNT/examples/static/Models/mk_ideker_bnet.m,
+	  BNT/examples/static/Models/mk_incinerator_bnet.m,
+	  BNT/examples/static/Models/mk_markov_chain_bnet.m,
+	  BNT/examples/static/Models/mk_minimal_qmr_bnet.m,
+	  BNT/examples/static/Models/mk_qmr_bnet.m,
+	  BNT/examples/static/Models/mk_vstruct_bnet.m,
+	  BNT/examples/static/Models/Old/mk_hmm_bnet.m,
+	  BNT/examples/static/SCG/scg1.m, BNT/examples/static/SCG/scg2.m,
+	  BNT/examples/static/SCG/scg3.m,
+	  BNT/examples/static/SCG/scg_3node.m,
+	  BNT/examples/static/SCG/scg_unstable.m,
+	  BNT/examples/static/StructLearn/bic1.m,
+	  BNT/examples/static/StructLearn/cooper_yoo.m,
+	  BNT/examples/static/StructLearn/k2demo1.m,
+	  BNT/examples/static/StructLearn/mcmc1.m,
+	  BNT/examples/static/StructLearn/pc1.m,
+	  BNT/examples/static/StructLearn/pc2.m,
+	  BNT/examples/static/Zoubin/README,
+	  BNT/examples/static/Zoubin/csum.m,
+	  BNT/examples/static/Zoubin/ffa.m,
+	  BNT/examples/static/Zoubin/mfa.m,
+	  BNT/examples/static/Zoubin/mfa_cl.m,
+	  BNT/examples/static/Zoubin/mfademo.m,
+	  BNT/examples/static/Zoubin/rdiv.m,
+	  BNT/examples/static/Zoubin/rprod.m,
+	  BNT/examples/static/Zoubin/rsum.m,
+	  BNT/examples/static/dtree/test_housing.m,
+	  BNT/examples/static/dtree/test_restaurants.m,
+	  BNT/examples/static/dtree/test_zoo1.m,
+	  BNT/examples/static/dtree/tmp.dot,
+	  BNT/examples/static/dtree/transform_data_into_bnt_format.m,
+	  BNT/examples/static/fgraph/fg2.m,
+	  BNT/examples/static/fgraph/fg3.m,
+	  BNT/examples/static/fgraph/fg_mrf1.m,
+	  BNT/examples/static/fgraph/fg_mrf2.m,
+	  BNT/general/bnet_to_fgraph.m,
+	  BNT/general/compute_fwd_interface.m,
+	  BNT/general/compute_interface_nodes.m,
+	  BNT/general/compute_minimal_interface.m,
+	  BNT/general/dbn_to_bnet.m,
+	  BNT/general/determine_elim_constraints.m,
+	  BNT/general/do_intervention.m, BNT/general/dsep.m,
+	  BNT/general/enumerate_scenarios.m, BNT/general/fgraph_to_bnet.m,
+	  BNT/general/log_lik_complete.m,
+	  BNT/general/log_marg_lik_complete.m, BNT/general/mk_bnet.m,
+	  BNT/general/mk_fgraph.m, BNT/general/mk_limid.m,
+	  BNT/general/mk_mutilated_samples.m,
+	  BNT/general/mk_slice_and_half_dbn.m,
+	  BNT/general/partition_dbn_nodes.m,
+	  BNT/general/sample_bnet_nocell.m, BNT/general/sample_dbn.m,
+	  BNT/general/score_bnet_complete.m,
+	  BNT/general/unroll_dbn_topology.m,
+	  BNT/general/Old/bnet_to_gdl_graph.m,
+	  BNT/general/Old/calc_mpe_bucket.m,
+	  BNT/general/Old/calc_mpe_dbn.m,
+	  BNT/general/Old/calc_mpe_given_inf_engine.m,
+	  BNT/general/Old/calc_mpe_global.m,
+	  BNT/general/Old/compute_interface_nodes.m,
+	  BNT/general/Old/mk_gdl_graph.m, GraphViz/draw_dbn.m,
+	  GraphViz/make_layout.m, BNT/license.gpl.txt,
+	  BNT/general/add_evidence_to_gmarginal.m,
+	  BNT/inference/@inf_engine/bnet_from_engine.m,
+	  BNT/inference/@inf_engine/get_field.m,
+	  BNT/inference/@inf_engine/inf_engine.m,
+	  BNT/inference/@inf_engine/marginal_family.m,
+	  BNT/inference/@inf_engine/set_fields.m,
+	  BNT/inference/@inf_engine/update_engine.m,
+	  BNT/inference/@inf_engine/Old/marginal_family_pot.m,
+	  BNT/inference/@inf_engine/Old/observed_nodes.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/bk_ff_hmm_inf_engine.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_init_bel.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_marginal_from_bel.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_predict_bel.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_update_bel.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_update_bel1.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/marginal_family.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/bk_ff_fb.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/combine_marginals_into_joint.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/dbn_to_hmm.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/mk_hmm_obs_lik_mat.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/mk_hmm_obs_lik_vec.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/mk_hmm_obs_lik_vec1.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/project_joint_onto_marginals.m,
+	  BNT/inference/dynamic/@bk_inf_engine/bk_inf_engine.m,
+	  BNT/inference/dynamic/@bk_inf_engine/dbn_init_bel.m,
+	  BNT/inference/dynamic/@bk_inf_engine/dbn_marginal_from_bel.m,
+	  BNT/inference/dynamic/@bk_inf_engine/dbn_update_bel.m,
+	  BNT/inference/dynamic/@bk_inf_engine/dbn_update_bel1.m,
+	  BNT/inference/dynamic/@bk_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@bk_inf_engine/marginal_family.m,
+	  BNT/inference/dynamic/@bk_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@bk_inf_engine/update_engine.m,
+	  BNT/inference/dynamic/@ff_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@ff_inf_engine/enter_soft_evidence.m,
+	  BNT/inference/dynamic/@ff_inf_engine/ff_inf_engine.m,
+	  BNT/inference/dynamic/@ff_inf_engine/filter_evidence.m,
+	  BNT/inference/dynamic/@ff_inf_engine/marginal_family.m,
+	  BNT/inference/dynamic/@ff_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@ff_inf_engine/smooth_evidence.m,
+	  BNT/inference/dynamic/@ff_inf_engine/Old/enter_soft_evidence.m,
+	  BNT/inference/dynamic/@ff_inf_engine/Old/enter_soft_evidence1.m,
+	  BNT/inference/dynamic/@ff_inf_engine/Old/marginal_family.m,
+	  BNT/inference/dynamic/@frontier_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@frontier_inf_engine/enter_soft_evidence.m,
+	  BNT/inference/dynamic/@frontier_inf_engine/frontier_inf_engine.m,
+	  BNT/inference/dynamic/@frontier_inf_engine/marginal_family.m,
+	  BNT/inference/dynamic/@frontier_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@frontier_inf_engine/set_fwdback.m,
+	  BNT/inference/dynamic/@hmm_inf_engine/update_engine.m,
+	  BNT/inference/dynamic/@hmm_inf_engine/Old/dhmm_inf_engine.m,
+	  BNT/inference/dynamic/@hmm_inf_engine/Old/marginal_family.m,
+	  BNT/inference/dynamic/@hmm_inf_engine/Old/marginal_nodes.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/marginal_family.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Broken/enter_soft_evidence1.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Broken/enter_soft_evidence2.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Broken/enter_soft_evidence3.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Broken/enter_soft_evidence4.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Broken/marginal_nodes.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Old/enter_soft_evidence_nonint.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Old/enter_soft_evidence_trans.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Old/jtree_dbn_inf_engine.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Old/jtree_dbn_inf_engine1.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Old/jtree_dbn_inf_engine2.m,
+	  BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/jtree_unrolled_dbn_inf_engine.m,
+	  BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/marginal_family.m,
+	  BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/update_engine.m,
+	  BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/Old/marginal_family.m,
+	  BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/Old/marginal_nodes.m,
+	  BNT/inference/dynamic/@kalman_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@kalman_inf_engine/kalman_inf_engine.m,
+	  BNT/inference/dynamic/@kalman_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@kalman_inf_engine/update_engine.m,
+	  BNT/inference/dynamic/@kalman_inf_engine/private/dbn_to_lds.m,
+	  BNT/inference/dynamic/@kalman_inf_engine/private/extract_params_from_gbn.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/enter_soft_ev.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/pearl_dbn_inf_engine.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/correct_smooth.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/enter_evidence.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/filter_evidence.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/filter_evidence_obj_oriented.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/smooth_evidence.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/smooth_evidence_fast.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/wrong_smooth.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/private/init_pearl_dbn_ev_msgs.m,
+	  BNT/inference/dynamic/@pearl_unrolled_dbn_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@pearl_unrolled_dbn_inf_engine/marginal_family.m,
+	  BNT/inference/dynamic/@pearl_unrolled_dbn_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@pearl_unrolled_dbn_inf_engine/pearl_unrolled_dbn_inf_engine.m,
+	  BNT/inference/dynamic/@pearl_unrolled_dbn_inf_engine/update_engine.m,
+	  BNT/inference/online/@filter_engine/bnet_from_engine.m,
+	  BNT/inference/online/@filter_engine/enter_evidence.m,
+	  BNT/inference/online/@filter_engine/filter_engine.m,
+	  BNT/inference/online/@filter_engine/marginal_family.m,
+	  BNT/inference/online/@filter_engine/marginal_nodes.m,
+	  BNT/inference/online/@hmm_2TBN_inf_engine/back.m,
+	  BNT/inference/online/@hmm_2TBN_inf_engine/backT.m,
+	  BNT/inference/online/@hmm_2TBN_inf_engine/fwd.m,
+	  BNT/inference/online/@hmm_2TBN_inf_engine/fwd1.m,
+	  BNT/inference/online/@hmm_2TBN_inf_engine/update_engine.m,
+	  BNT/inference/online/@jtree_2TBN_inf_engine/marginal_family.m,
+	  BNT/inference/online/@jtree_2TBN_inf_engine/marginal_nodes.m,
+	  BNT/inference/online/@jtree_2TBN_inf_engine/Old/jtree_2TBN_inf_engine.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/back.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/back1.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/backT.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/enter_evidence.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/fwd.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/fwd1.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/jtree_sparse_2TBN_inf_engine.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/marginal_family.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/marginal_nodes.m,
+	  BNT/inference/online/@smoother_engine/bnet_from_engine.m,
+	  BNT/inference/online/@smoother_engine/marginal_family.m,
+	  BNT/inference/online/@smoother_engine/marginal_nodes.m,
+	  BNT/inference/online/@smoother_engine/smoother_engine.m,
+	  BNT/inference/online/@smoother_engine/update_engine.m,
+	  BNT/inference/static/@belprop_fg_inf_engine/belprop_fg_inf_engine.m,
+	  BNT/inference/static/@belprop_fg_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@belprop_fg_inf_engine/loopy_converged.m,
+	  BNT/inference/static/@belprop_fg_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@belprop_fg_inf_engine/set_params.m,
+	  BNT/inference/static/@belprop_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@belprop_inf_engine/loopy_converged.m,
+	  BNT/inference/static/@belprop_inf_engine/marginal_family.m,
+	  BNT/inference/static/@belprop_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@belprop_inf_engine/Old/belprop_gdl_inf_engine.m,
+	  BNT/inference/static/@belprop_inf_engine/Old/belprop_inf_engine_nostr.m,
+	  BNT/inference/static/@belprop_inf_engine/Old/enter_evidence.m,
+	  BNT/inference/static/@belprop_inf_engine/Old/enter_evidence1.m,
+	  BNT/inference/static/@belprop_inf_engine/Old/marginal_domain.m,
+	  BNT/inference/static/@belprop_inf_engine/private/junk,
+	  BNT/inference/static/@belprop_inf_engine/private/parallel_protocol.m,
+	  BNT/inference/static/@belprop_inf_engine/private/tree_protocol.m,
+	  BNT/inference/static/@cond_gauss_inf_engine/cond_gauss_inf_engine.m,
+	  BNT/inference/static/@cond_gauss_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@cond_gauss_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@enumerative_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@enumerative_inf_engine/enumerative_inf_engine.m,
+	  BNT/inference/static/@enumerative_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@gaussian_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@gaussian_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@gaussian_inf_engine/private/extract_params_from_gbn.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/gibbs_sampling_inf_engine.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/CPT.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_children.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_families.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_families_dbn.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_posterior.c,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_posterior_dbn.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_strides.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/get_cpts.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/get_slice_dbn.c,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/get_slice_dbn.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/my_sample_discrete.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/sample_single_discrete.c,
+	  BNT/inference/static/@global_joint_inf_engine/global_joint_inf_engine.m,
+	  BNT/inference/static/@global_joint_inf_engine/marginal_family.m,
+	  BNT/inference/static/@jtree_inf_engine/cliques_from_engine.m,
+	  BNT/inference/static/@jtree_inf_engine/clq_containing_nodes.m,
+	  BNT/inference/static/@jtree_inf_engine/collect_evidence.m,
+	  BNT/inference/static/@jtree_inf_engine/enter_soft_evidence.m,
+	  BNT/inference/static/@jtree_inf_engine/marginal_family.m,
+	  BNT/inference/static/@jtree_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@jtree_inf_engine/set_fields.m,
+	  BNT/inference/static/@jtree_inf_engine/Old/collect_evidence.m,
+	  BNT/inference/static/@jtree_inf_engine/Old/distribute_evidence.m,
+	  BNT/inference/static/@jtree_inf_engine/Old/enter_evidence.m,
+	  BNT/inference/static/@jtree_inf_engine/Old/enter_soft_evidence.m,
+	  BNT/inference/static/@jtree_limid_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@jtree_limid_inf_engine/jtree_limid_inf_engine.m,
+	  BNT/inference/static/@jtree_limid_inf_engine/marginal_family.m,
+	  BNT/inference/static/@jtree_limid_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@jtree_limid_inf_engine/Old/marginal_family.m,
+	  BNT/inference/static/@jtree_limid_inf_engine/Old/marginal_nodes_SS.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/cliques_from_engine.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/clq_containing_nodes.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/collect_evidence.c,
+	  BNT/inference/static/@jtree_sparse_inf_engine/distribute_evidence.c,
+	  BNT/inference/static/@jtree_sparse_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/enter_soft_evidence.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/init_pot.c,
+	  BNT/inference/static/@jtree_sparse_inf_engine/marginal_family.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/set_fields.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/old/collect_evidence.c,
+	  BNT/inference/static/@jtree_sparse_inf_engine/old/distribute_evidence.c,
+	  BNT/inference/static/@jtree_sparse_inf_engine/old/init_pot.c,
+	  BNT/inference/static/@jtree_sparse_inf_engine/old/init_pot1.c,
+	  BNT/inference/static/@jtree_sparse_inf_engine/old/init_pot1.m,
+	  BNT/inference/static/@likelihood_weighting_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@likelihood_weighting_inf_engine/likelihood_weighting_inf_engine.m,
+	  BNT/inference/static/@likelihood_weighting_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@pearl_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@pearl_inf_engine/loopy_converged.m,
+	  BNT/inference/static/@pearl_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@pearl_inf_engine/private/compute_bel.m,
+	  BNT/inference/static/@pearl_inf_engine/private/prod_lambda_msgs.m,
+	  BNT/inference/static/@pearl_inf_engine/private/tree_protocol.m,
+	  BNT/inference/static/@quickscore_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@quickscore_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@quickscore_inf_engine/quickscore_inf_engine.m,
+	  BNT/inference/static/@quickscore_inf_engine/private/C_quickscore.c,
+	  BNT/inference/static/@quickscore_inf_engine/private/nr.h,
+	  BNT/inference/static/@quickscore_inf_engine/private/nrutil.c,
+	  BNT/inference/static/@quickscore_inf_engine/private/nrutil.h,
+	  BNT/inference/static/@quickscore_inf_engine/private/quickscore.m,
+	  BNT/learning/bayes_update_params.m,
+	  BNT/learning/bic_score_family.m,
+	  BNT/learning/compute_cooling_schedule.m,
+	  BNT/learning/dirichlet_score_family.m,
+	  BNT/learning/kpm_learn_struct_mcmc.m,
+	  BNT/learning/learn_params_em.m,
+	  BNT/learning/learn_struct_dbn_reveal.m,
+	  BNT/learning/learn_struct_pdag_ic_star.m,
+	  BNT/learning/mcmc_sample_to_hist.m, BNT/learning/mk_schedule.m,
+	  BNT/learning/mk_tetrad_data_file.m,
+	  BNT/learning/score_dags_old.m, HMM/dhmm_logprob_brute_force.m,
+	  HMM/dhmm_logprob_path.m, HMM/mdp_sample.m, Kalman/AR_to_SS.m,
+	  Kalman/SS_to_AR.m, Kalman/convert_to_lagged_form.m,
+	  Kalman/ensure_AR.m, Kalman/eval_AR_perf.m,
+	  Kalman/kalman_filter.m, Kalman/kalman_smoother.m,
+	  Kalman/kalman_update.m, Kalman/learn_AR.m,
+	  Kalman/learn_AR_diagonal.m, Kalman/learn_kalman.m,
+	  Kalman/smooth_update.m,
+	  BNT/general/convert_dbn_CPDs_to_tables_slow.m,
+	  BNT/general/dispcpt.m, BNT/general/linear_gaussian_to_cpot.m,
+	  BNT/general/partition_matrix_vec_3.m,
+	  BNT/general/shrink_obs_dims_in_gaussian.m,
+	  BNT/general/shrink_obs_dims_in_table.m,
+	  BNT/potentials/CPD_to_pot.m, BNT/potentials/README,
+	  BNT/potentials/check_for_cd_arcs.m,
+	  BNT/potentials/determine_pot_type.m,
+	  BNT/potentials/mk_initial_pot.m,
+	  BNT/potentials/@cgpot/cg_can_to_mom.m,
+	  BNT/potentials/@cgpot/cg_mom_to_can.m,
+	  BNT/potentials/@cgpot/cgpot.m, BNT/potentials/@cgpot/display.m,
+	  BNT/potentials/@cgpot/divide_by_pot.m,
+	  BNT/potentials/@cgpot/domain_pot.m,
+	  BNT/potentials/@cgpot/enter_cts_evidence_pot.m,
+	  BNT/potentials/@cgpot/enter_discrete_evidence_pot.m,
+	  BNT/potentials/@cgpot/marginalize_pot.m,
+	  BNT/potentials/@cgpot/multiply_by_pot.m,
+	  BNT/potentials/@cgpot/multiply_pots.m,
+	  BNT/potentials/@cgpot/normalize_pot.m,
+	  BNT/potentials/@cgpot/pot_to_marginal.m,
+	  BNT/potentials/@cgpot/Old/normalize_pot.m,
+	  BNT/potentials/@cgpot/Old/simple_marginalize_pot.m,
+	  BNT/potentials/@cpot/cpot.m, BNT/potentials/@cpot/cpot_to_mpot.m,
+	  BNT/potentials/@cpot/display.m,
+	  BNT/potentials/@cpot/divide_by_pot.m,
+	  BNT/potentials/@cpot/domain_pot.m,
+	  BNT/potentials/@cpot/enter_cts_evidence_pot.m,
+	  BNT/potentials/@cpot/marginalize_pot.m,
+	  BNT/potentials/@cpot/multiply_by_pot.m,
+	  BNT/potentials/@cpot/multiply_pots.m,
+	  BNT/potentials/@cpot/normalize_pot.m,
+	  BNT/potentials/@cpot/pot_to_marginal.m,
+	  BNT/potentials/@cpot/rescale_pot.m,
+	  BNT/potentials/@cpot/set_domain_pot.m,
+	  BNT/potentials/@cpot/Old/cpot_to_mpot.m,
+	  BNT/potentials/@cpot/Old/normalize_pot.convert.m,
+	  BNT/potentials/@dpot/approxeq_pot.m,
+	  BNT/potentials/@dpot/display.m,
+	  BNT/potentials/@dpot/domain_pot.m,
+	  BNT/potentials/@dpot/dpot_to_table.m,
+	  BNT/potentials/@dpot/get_fields.m,
+	  BNT/potentials/@dpot/multiply_pots.m,
+	  BNT/potentials/@dpot/pot_to_marginal.m,
+	  BNT/potentials/@dpot/set_domain_pot.m,
+	  BNT/potentials/@mpot/display.m,
+	  BNT/potentials/@mpot/marginalize_pot.m,
+	  BNT/potentials/@mpot/mpot.m, BNT/potentials/@mpot/mpot_to_cpot.m,
+	  BNT/potentials/@mpot/normalize_pot.m,
+	  BNT/potentials/@mpot/pot_to_marginal.m,
+	  BNT/potentials/@mpot/rescale_pot.m,
+	  BNT/potentials/@upot/approxeq_pot.m,
+	  BNT/potentials/@upot/display.m,
+	  BNT/potentials/@upot/divide_by_pot.m,
+	  BNT/potentials/@upot/marginalize_pot.m,
+	  BNT/potentials/@upot/multiply_by_pot.m,
+	  BNT/potentials/@upot/normalize_pot.m,
+	  BNT/potentials/@upot/pot_to_marginal.m,
+	  BNT/potentials/@upot/upot.m,
+	  BNT/potentials/@upot/upot_to_opt_policy.m,
+	  BNT/potentials/Old/comp_eff_node_sizes.m,
+	  BNT/potentials/Tables/divide_by_sparse_table.c,
+	  BNT/potentials/Tables/divide_by_table.c,
+	  BNT/potentials/Tables/marg_sparse_table.c,
+	  BNT/potentials/Tables/marg_table.c,
+	  BNT/potentials/Tables/mult_by_sparse_table.c,
+	  BNT/potentials/Tables/rep_mult.c, HMM/mk_leftright_transmat.m:
+	  Initial import of code base from Kevin Murphy.
+
+2002-05-29 08:59  yozhik
+
+	* BNT/@assocarray/assocarray.m,
+	  BNT/CPDs/@boolean_CPD/boolean_CPD.m,
+	  BNT/CPDs/@discrete_CPD/CPD_to_lambda_msg.m,
+	  BNT/CPDs/@discrete_CPD/CPD_to_pi.m,
+	  BNT/CPDs/@discrete_CPD/CPD_to_scgpot.m,
+	  BNT/CPDs/@discrete_CPD/README,
+	  BNT/CPDs/@discrete_CPD/convert_CPD_to_table_hidden_ps.m,
+	  BNT/CPDs/@discrete_CPD/convert_obs_CPD_to_table.m,
+	  BNT/CPDs/@discrete_CPD/convert_to_sparse_table.c,
+	  BNT/CPDs/@discrete_CPD/convert_to_table.m,
+	  BNT/CPDs/@discrete_CPD/discrete_CPD.m,
+	  BNT/CPDs/@discrete_CPD/dom_sizes.m,
+	  BNT/CPDs/@discrete_CPD/log_prob_node.m,
+	  BNT/CPDs/@discrete_CPD/prob_node.m,
+	  BNT/CPDs/@discrete_CPD/sample_node.m,
+	  BNT/CPDs/@discrete_CPD/Old/convert_to_pot.m,
+	  BNT/CPDs/@discrete_CPD/Old/convert_to_table.m,
+	  BNT/CPDs/@discrete_CPD/Old/prob_CPD.m,
+	  BNT/CPDs/@discrete_CPD/Old/prob_node.m,
+	  BNT/CPDs/@discrete_CPD/private/prod_CPT_and_pi_msgs.m,
+	  BNT/CPDs/@gaussian_CPD/CPD_to_lambda_msg.m,
+	  BNT/CPDs/@gaussian_CPD/CPD_to_pi.m,
+	  BNT/CPDs/@gaussian_CPD/CPD_to_scgpot.m,
+	  BNT/CPDs/@gaussian_CPD/adjustable_CPD.m,
+	  BNT/CPDs/@gaussian_CPD/convert_CPD_to_table_hidden_ps.m,
+	  BNT/CPDs/@gaussian_CPD/display.m,
+	  BNT/CPDs/@gaussian_CPD/get_field.m,
+	  BNT/CPDs/@gaussian_CPD/reset_ess.m,
+	  BNT/CPDs/@gaussian_CPD/sample_node.m,
+	  BNT/CPDs/@gaussian_CPD/set_fields.m,
+	  BNT/CPDs/@gaussian_CPD/Old/CPD_to_lambda_msg.m,
+	  BNT/CPDs/@gaussian_CPD/Old/gaussian_CPD.m,
+	  BNT/CPDs/@gaussian_CPD/Old/log_prob_node.m,
+	  BNT/CPDs/@gaussian_CPD/Old/update_ess.m,
+	  BNT/CPDs/@gaussian_CPD/Old/update_tied_ess.m,
+	  BNT/CPDs/@gaussian_CPD/private/CPD_to_linear_gaussian.m,
+	  BNT/CPDs/@generic_CPD/README,
+	  BNT/CPDs/@generic_CPD/adjustable_CPD.m,
+	  BNT/CPDs/@generic_CPD/display.m,
+	  BNT/CPDs/@generic_CPD/generic_CPD.m,
+	  BNT/CPDs/@generic_CPD/log_prior.m,
+	  BNT/CPDs/@generic_CPD/set_clamped.m,
+	  BNT/CPDs/@generic_CPD/Old/BIC_score_CPD.m,
+	  BNT/CPDs/@generic_CPD/Old/CPD_to_dpots.m,
+	  BNT/CPDs/@gmux_CPD/CPD_to_lambda_msg.m,
+	  BNT/CPDs/@gmux_CPD/convert_to_pot.m,
+	  BNT/CPDs/@gmux_CPD/CPD_to_pi.m, BNT/CPDs/@gmux_CPD/display.m,
+	  BNT/CPDs/@gmux_CPD/gmux_CPD.m, BNT/CPDs/@gmux_CPD/sample_node.m,
+	  BNT/CPDs/@gmux_CPD/Old/gmux_CPD.m,
+	  BNT/CPDs/@hhmmF_CPD/log_prior.m,
+	  BNT/CPDs/@hhmmF_CPD/maximize_params.m,
+	  BNT/CPDs/@hhmmF_CPD/reset_ess.m, BNT/CPDs/@hhmmQ_CPD/log_prior.m,
+	  BNT/CPDs/@hhmmQ_CPD/reset_ess.m,
+	  BNT/CPDs/@mlp_CPD/convert_to_table.m,
+	  BNT/CPDs/@mlp_CPD/maximize_params.m, BNT/CPDs/@mlp_CPD/mlp_CPD.m,
+	  BNT/CPDs/@mlp_CPD/reset_ess.m, BNT/CPDs/@mlp_CPD/update_ess.m,
+	  BNT/CPDs/@noisyor_CPD/CPD_to_lambda_msg.m,
+	  BNT/CPDs/@noisyor_CPD/CPD_to_pi.m,
+	  BNT/CPDs/@noisyor_CPD/noisyor_CPD.m,
+	  BNT/CPDs/@noisyor_CPD/private/sum_prod_CPD_and_pi_msgs.m,
+	  BNT/CPDs/@root_CPD/CPD_to_pi.m,
+	  BNT/CPDs/@root_CPD/convert_to_pot.m,
+	  BNT/CPDs/@root_CPD/log_marg_prob_node.m,
+	  BNT/CPDs/@root_CPD/log_prob_node.m,
+	  BNT/CPDs/@root_CPD/root_CPD.m, BNT/CPDs/@root_CPD/sample_node.m,
+	  BNT/CPDs/@root_CPD/Old/CPD_to_CPT.m,
+	  BNT/CPDs/@softmax_CPD/convert_to_pot.m,
+	  BNT/CPDs/@softmax_CPD/display.m,
+	  BNT/CPDs/@softmax_CPD/get_field.m,
+	  BNT/CPDs/@softmax_CPD/maximize_params.m,
+	  BNT/CPDs/@softmax_CPD/reset_ess.m,
+	  BNT/CPDs/@softmax_CPD/sample_node.m,
+	  BNT/CPDs/@softmax_CPD/set_fields.m,
+	  BNT/CPDs/@softmax_CPD/update_ess.m,
+	  BNT/CPDs/@softmax_CPD/private/extract_params.m,
+	  BNT/CPDs/@tabular_CPD/CPD_to_CPT.m,
+	  BNT/CPDs/@tabular_CPD/bayes_update_params.m,
+	  BNT/CPDs/@tabular_CPD/log_nextcase_prob_node.m,
+	  BNT/CPDs/@tabular_CPD/log_prior.m,
+	  BNT/CPDs/@tabular_CPD/reset_ess.m,
+	  BNT/CPDs/@tabular_CPD/update_ess.m,
+	  BNT/CPDs/@tabular_CPD/update_ess_simple.m,
+	  BNT/CPDs/@tabular_CPD/Old/BIC_score_CPD.m,
+	  BNT/CPDs/@tabular_CPD/Old/bayesian_score_CPD.m,
+	  BNT/CPDs/@tabular_CPD/Old/log_marg_prob_node_case.m,
+	  BNT/CPDs/@tabular_CPD/Old/mult_CPD_and_pi_msgs.m,
+	  BNT/CPDs/@tabular_CPD/Old/prob_CPT.m,
+	  BNT/CPDs/@tabular_CPD/Old/prob_node.m,
+	  BNT/CPDs/@tabular_CPD/Old/sample_node.m,
+	  BNT/CPDs/@tabular_CPD/Old/sample_node_single_case.m,
+	  BNT/CPDs/@tabular_CPD/Old/tabular_CPD.m,
+	  BNT/CPDs/@tabular_CPD/Old/update_params.m,
+	  BNT/CPDs/@tabular_decision_node/CPD_to_CPT.m,
+	  BNT/CPDs/@tabular_decision_node/display.m,
+	  BNT/CPDs/@tabular_decision_node/get_field.m,
+	  BNT/CPDs/@tabular_decision_node/set_fields.m,
+	  BNT/CPDs/@tabular_decision_node/tabular_decision_node.m,
+	  BNT/CPDs/@tabular_decision_node/Old/tabular_decision_node.m,
+	  BNT/CPDs/@tabular_kernel/convert_to_pot.m,
+	  BNT/CPDs/@tabular_kernel/convert_to_table.m,
+	  BNT/CPDs/@tabular_kernel/get_field.m,
+	  BNT/CPDs/@tabular_kernel/set_fields.m,
+	  BNT/CPDs/@tabular_kernel/tabular_kernel.m,
+	  BNT/CPDs/@tabular_kernel/Old/tabular_kernel.m,
+	  BNT/CPDs/@tabular_utility_node/convert_to_pot.m,
+	  BNT/CPDs/@tabular_utility_node/display.m,
+	  BNT/CPDs/@tabular_utility_node/tabular_utility_node.m,
+	  BNT/CPDs/@tree_CPD/display.m,
+	  BNT/CPDs/@tree_CPD/evaluate_tree_performance.m,
+	  BNT/CPDs/@tree_CPD/get_field.m,
+	  BNT/CPDs/@tree_CPD/learn_params.m, BNT/CPDs/@tree_CPD/readme.txt,
+	  BNT/CPDs/@tree_CPD/set_fields.m, BNT/CPDs/@tree_CPD/tree_CPD.m,
+	  BNT/CPDs/Old/@linear_gaussian_CPD/linear_gaussian_CPD.m,
+	  BNT/CPDs/Old/@linear_gaussian_CPD/log_marg_prob_node.m,
+	  BNT/CPDs/Old/@linear_gaussian_CPD/update_params_complete.m,
+	  BNT/CPDs/Old/@root_gaussian_CPD/log_marg_prob_node.m,
+	  BNT/CPDs/Old/@root_gaussian_CPD/root_gaussian_CPD.m,
+	  BNT/CPDs/Old/@root_gaussian_CPD/update_params_complete.m,
+	  BNT/CPDs/Old/@tabular_chance_node/CPD_to_upot.m,
+	  BNT/CPDs/Old/@tabular_chance_node/tabular_chance_node.m,
+	  BNT/examples/dynamic/bat1.m, BNT/examples/dynamic/bkff1.m,
+	  BNT/examples/dynamic/chmm1.m,
+	  BNT/examples/dynamic/cmp_inference_dbn.m,
+	  BNT/examples/dynamic/cmp_learning_dbn.m,
+	  BNT/examples/dynamic/cmp_online_inference.m,
+	  BNT/examples/dynamic/fhmm_infer.m,
+	  BNT/examples/dynamic/filter_test1.m,
+	  BNT/examples/dynamic/kalman1.m,
+	  BNT/examples/dynamic/kjaerulff1.m,
+	  BNT/examples/dynamic/loopy_dbn1.m,
+	  BNT/examples/dynamic/mk_collage_from_clqs.m,
+	  BNT/examples/dynamic/mk_fhmm.m, BNT/examples/dynamic/reveal1.m,
+	  BNT/examples/dynamic/scg_dbn.m,
+	  BNT/examples/dynamic/skf_data_assoc_gmux.m,
+	  BNT/examples/dynamic/HHMM/add_hhmm_end_state.m,
+	  BNT/examples/dynamic/HHMM/hhmm_jtree_clqs.m,
+	  BNT/examples/dynamic/HHMM/mk_hhmm_topo.m,
+	  BNT/examples/dynamic/HHMM/mk_hhmm_topo_F1.m,
+	  BNT/examples/dynamic/HHMM/pretty_print_hhmm_parse.m,
+	  BNT/examples/dynamic/HHMM/Motif/fixed_args_mk_motif_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Motif/mk_motif_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Motif/sample_motif_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Old/mk_abcd_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Old/mk_arrow_alpha_hhmm3.m,
+	  BNT/examples/dynamic/HHMM/Old/mk_hhmm2.m,
+	  BNT/examples/dynamic/HHMM/Old/mk_hhmm3.m,
+	  BNT/examples/dynamic/HHMM/Old/mk_hhmm3_args.m,
+	  BNT/examples/dynamic/HHMM/Old/motif_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Old/remove_hhmm_end_state.m,
+	  BNT/examples/dynamic/HHMM/Square/get_square_data.m,
+	  BNT/examples/dynamic/HHMM/Square/hhmm_inference.m,
+	  BNT/examples/dynamic/HHMM/Square/is_F2_true_D3.m,
+	  BNT/examples/dynamic/HHMM/Square/learn_square_hhmm_discrete.m,
+	  BNT/examples/dynamic/HHMM/Square/mk_square_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Square/plot_square_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Square/sample_square_hhmm_cts.m,
+	  BNT/examples/dynamic/HHMM/Square/sample_square_hhmm_discrete.m,
+	  BNT/examples/dynamic/HHMM/Square/square4.mat,
+	  BNT/examples/dynamic/HHMM/Square/square4_cases.mat,
+	  BNT/examples/dynamic/HHMM/Square/test_square_fig.m,
+	  BNT/examples/dynamic/HHMM/Square/test_square_fig.mat,
+	  BNT/examples/dynamic/HHMM/Square/Old/learn_square_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Square/Old/mk_square_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Square/Old/plot_square_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Square/Old/sample_square_hhmm.m,
+	  BNT/examples/dynamic/Old/chmm1.m,
+	  BNT/examples/dynamic/Old/cmp_inference.m,
+	  BNT/examples/dynamic/Old/kalman1.m,
+	  BNT/examples/dynamic/Old/old.water1.m,
+	  BNT/examples/dynamic/Old/online1.m,
+	  BNT/examples/dynamic/Old/online2.m,
+	  BNT/examples/dynamic/Old/scg_dbn.m,
+	  BNT/examples/dynamic/SLAM/mk_gmux_robot_dbn.m,
+	  BNT/examples/dynamic/SLAM/mk_linear_slam.m,
+	  BNT/examples/dynamic/SLAM/slam_kf.m,
+	  BNT/examples/dynamic/SLAM/slam_offline_loopy.m,
+	  BNT/examples/dynamic/SLAM/slam_partial_kf.m,
+	  BNT/examples/dynamic/SLAM/slam_stationary_loopy.m,
+	  BNT/examples/dynamic/SLAM/Old/offline_loopy_slam.m,
+	  BNT/examples/dynamic/SLAM/Old/paskin1.m,
+	  BNT/examples/dynamic/SLAM/Old/skf_data_assoc_gmux2.m,
+	  BNT/examples/dynamic/SLAM/Old/slam_kf.m,
+	  BNT/examples/limids/id1.m, BNT/examples/limids/pigs1.m,
+	  BNT/examples/static/cg1.m, BNT/examples/static/cg2.m,
+	  BNT/examples/static/discrete2.m, BNT/examples/static/discrete3.m,
+	  BNT/examples/static/fa1.m, BNT/examples/static/gaussian1.m,
+	  BNT/examples/static/gibbs_test1.m, BNT/examples/static/lw1.m,
+	  BNT/examples/static/mfa1.m, BNT/examples/static/mixexp1.m,
+	  BNT/examples/static/mixexp2.m, BNT/examples/static/mixexp3.m,
+	  BNT/examples/static/mog1.m, BNT/examples/static/qmr1.m,
+	  BNT/examples/static/sample1.m, BNT/examples/static/softmax1.m,
+	  BNT/examples/static/Belprop/belprop_loop1_discrete.m,
+	  BNT/examples/static/Belprop/belprop_loop1_gauss.m,
+	  BNT/examples/static/Belprop/belprop_loopy_cg.m,
+	  BNT/examples/static/Belprop/belprop_loopy_discrete.m,
+	  BNT/examples/static/Belprop/belprop_loopy_gauss.m,
+	  BNT/examples/static/Belprop/belprop_polytree_cg.m,
+	  BNT/examples/static/Belprop/belprop_polytree_gauss.m,
+	  BNT/examples/static/Belprop/bp1.m,
+	  BNT/examples/static/Belprop/gmux1.m,
+	  BNT/examples/static/Brutti/Belief_IOhmm.m,
+	  BNT/examples/static/Brutti/Belief_hmdt.m,
+	  BNT/examples/static/Brutti/Belief_hme.m,
+	  BNT/examples/static/Brutti/Sigmoid_Belief.m,
+	  BNT/examples/static/HME/HMEforMatlab.jpg,
+	  BNT/examples/static/HME/README, BNT/examples/static/HME/fhme.m,
+	  BNT/examples/static/HME/gen_data.m,
+	  BNT/examples/static/HME/hme_class_plot.m,
+	  BNT/examples/static/HME/hme_reg_plot.m,
+	  BNT/examples/static/HME/hme_topobuilder.m,
+	  BNT/examples/static/HME/test_data_class.mat,
+	  BNT/examples/static/HME/test_data_class2.mat,
+	  BNT/examples/static/HME/test_data_reg.mat,
+	  BNT/examples/static/HME/train_data_class.mat,
+	  BNT/examples/static/HME/train_data_reg.mat,
+	  BNT/examples/static/Misc/mixexp_data.txt,
+	  BNT/examples/static/Misc/mixexp_graddesc.m,
+	  BNT/examples/static/Misc/mixexp_plot.m,
+	  BNT/examples/static/Misc/sprinkler.bif,
+	  BNT/examples/static/Models/mk_cancer_bnet.m,
+	  BNT/examples/static/Models/mk_car_bnet.m,
+	  BNT/examples/static/Models/mk_ideker_bnet.m,
+	  BNT/examples/static/Models/mk_incinerator_bnet.m,
+	  BNT/examples/static/Models/mk_markov_chain_bnet.m,
+	  BNT/examples/static/Models/mk_minimal_qmr_bnet.m,
+	  BNT/examples/static/Models/mk_qmr_bnet.m,
+	  BNT/examples/static/Models/mk_vstruct_bnet.m,
+	  BNT/examples/static/Models/Old/mk_hmm_bnet.m,
+	  BNT/examples/static/SCG/scg1.m, BNT/examples/static/SCG/scg2.m,
+	  BNT/examples/static/SCG/scg3.m,
+	  BNT/examples/static/SCG/scg_3node.m,
+	  BNT/examples/static/SCG/scg_unstable.m,
+	  BNT/examples/static/StructLearn/bic1.m,
+	  BNT/examples/static/StructLearn/cooper_yoo.m,
+	  BNT/examples/static/StructLearn/k2demo1.m,
+	  BNT/examples/static/StructLearn/mcmc1.m,
+	  BNT/examples/static/StructLearn/pc1.m,
+	  BNT/examples/static/StructLearn/pc2.m,
+	  BNT/examples/static/Zoubin/README,
+	  BNT/examples/static/Zoubin/csum.m,
+	  BNT/examples/static/Zoubin/ffa.m,
+	  BNT/examples/static/Zoubin/mfa.m,
+	  BNT/examples/static/Zoubin/mfa_cl.m,
+	  BNT/examples/static/Zoubin/mfademo.m,
+	  BNT/examples/static/Zoubin/rdiv.m,
+	  BNT/examples/static/Zoubin/rprod.m,
+	  BNT/examples/static/Zoubin/rsum.m,
+	  BNT/examples/static/dtree/test_housing.m,
+	  BNT/examples/static/dtree/test_restaurants.m,
+	  BNT/examples/static/dtree/test_zoo1.m,
+	  BNT/examples/static/dtree/tmp.dot,
+	  BNT/examples/static/dtree/transform_data_into_bnt_format.m,
+	  BNT/examples/static/fgraph/fg2.m,
+	  BNT/examples/static/fgraph/fg3.m,
+	  BNT/examples/static/fgraph/fg_mrf1.m,
+	  BNT/examples/static/fgraph/fg_mrf2.m,
+	  BNT/general/bnet_to_fgraph.m,
+	  BNT/general/compute_fwd_interface.m,
+	  BNT/general/compute_interface_nodes.m,
+	  BNT/general/compute_minimal_interface.m,
+	  BNT/general/dbn_to_bnet.m,
+	  BNT/general/determine_elim_constraints.m,
+	  BNT/general/do_intervention.m, BNT/general/dsep.m,
+	  BNT/general/enumerate_scenarios.m, BNT/general/fgraph_to_bnet.m,
+	  BNT/general/log_lik_complete.m,
+	  BNT/general/log_marg_lik_complete.m, BNT/general/mk_bnet.m,
+	  BNT/general/mk_fgraph.m, BNT/general/mk_limid.m,
+	  BNT/general/mk_mutilated_samples.m,
+	  BNT/general/mk_slice_and_half_dbn.m,
+	  BNT/general/partition_dbn_nodes.m,
+	  BNT/general/sample_bnet_nocell.m, BNT/general/sample_dbn.m,
+	  BNT/general/score_bnet_complete.m,
+	  BNT/general/unroll_dbn_topology.m,
+	  BNT/general/Old/bnet_to_gdl_graph.m,
+	  BNT/general/Old/calc_mpe_bucket.m,
+	  BNT/general/Old/calc_mpe_dbn.m,
+	  BNT/general/Old/calc_mpe_given_inf_engine.m,
+	  BNT/general/Old/calc_mpe_global.m,
+	  BNT/general/Old/compute_interface_nodes.m,
+	  BNT/general/Old/mk_gdl_graph.m, GraphViz/draw_dbn.m,
+	  GraphViz/make_layout.m, BNT/license.gpl.txt,
+	  BNT/general/add_evidence_to_gmarginal.m,
+	  BNT/inference/@inf_engine/bnet_from_engine.m,
+	  BNT/inference/@inf_engine/get_field.m,
+	  BNT/inference/@inf_engine/inf_engine.m,
+	  BNT/inference/@inf_engine/marginal_family.m,
+	  BNT/inference/@inf_engine/set_fields.m,
+	  BNT/inference/@inf_engine/update_engine.m,
+	  BNT/inference/@inf_engine/Old/marginal_family_pot.m,
+	  BNT/inference/@inf_engine/Old/observed_nodes.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/bk_ff_hmm_inf_engine.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_init_bel.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_marginal_from_bel.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_predict_bel.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_update_bel.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_update_bel1.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/marginal_family.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/bk_ff_fb.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/combine_marginals_into_joint.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/dbn_to_hmm.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/mk_hmm_obs_lik_mat.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/mk_hmm_obs_lik_vec.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/mk_hmm_obs_lik_vec1.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/project_joint_onto_marginals.m,
+	  BNT/inference/dynamic/@bk_inf_engine/bk_inf_engine.m,
+	  BNT/inference/dynamic/@bk_inf_engine/dbn_init_bel.m,
+	  BNT/inference/dynamic/@bk_inf_engine/dbn_marginal_from_bel.m,
+	  BNT/inference/dynamic/@bk_inf_engine/dbn_update_bel.m,
+	  BNT/inference/dynamic/@bk_inf_engine/dbn_update_bel1.m,
+	  BNT/inference/dynamic/@bk_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@bk_inf_engine/marginal_family.m,
+	  BNT/inference/dynamic/@bk_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@bk_inf_engine/update_engine.m,
+	  BNT/inference/dynamic/@ff_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@ff_inf_engine/enter_soft_evidence.m,
+	  BNT/inference/dynamic/@ff_inf_engine/ff_inf_engine.m,
+	  BNT/inference/dynamic/@ff_inf_engine/filter_evidence.m,
+	  BNT/inference/dynamic/@ff_inf_engine/marginal_family.m,
+	  BNT/inference/dynamic/@ff_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@ff_inf_engine/smooth_evidence.m,
+	  BNT/inference/dynamic/@ff_inf_engine/Old/enter_soft_evidence.m,
+	  BNT/inference/dynamic/@ff_inf_engine/Old/enter_soft_evidence1.m,
+	  BNT/inference/dynamic/@ff_inf_engine/Old/marginal_family.m,
+	  BNT/inference/dynamic/@frontier_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@frontier_inf_engine/enter_soft_evidence.m,
+	  BNT/inference/dynamic/@frontier_inf_engine/frontier_inf_engine.m,
+	  BNT/inference/dynamic/@frontier_inf_engine/marginal_family.m,
+	  BNT/inference/dynamic/@frontier_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@frontier_inf_engine/set_fwdback.m,
+	  BNT/inference/dynamic/@hmm_inf_engine/update_engine.m,
+	  BNT/inference/dynamic/@hmm_inf_engine/Old/dhmm_inf_engine.m,
+	  BNT/inference/dynamic/@hmm_inf_engine/Old/marginal_family.m,
+	  BNT/inference/dynamic/@hmm_inf_engine/Old/marginal_nodes.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/marginal_family.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Broken/enter_soft_evidence1.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Broken/enter_soft_evidence2.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Broken/enter_soft_evidence3.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Broken/enter_soft_evidence4.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Broken/marginal_nodes.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Old/enter_soft_evidence_nonint.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Old/enter_soft_evidence_trans.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Old/jtree_dbn_inf_engine.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Old/jtree_dbn_inf_engine1.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Old/jtree_dbn_inf_engine2.m,
+	  BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/jtree_unrolled_dbn_inf_engine.m,
+	  BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/marginal_family.m,
+	  BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/update_engine.m,
+	  BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/Old/marginal_family.m,
+	  BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/Old/marginal_nodes.m,
+	  BNT/inference/dynamic/@kalman_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@kalman_inf_engine/kalman_inf_engine.m,
+	  BNT/inference/dynamic/@kalman_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@kalman_inf_engine/update_engine.m,
+	  BNT/inference/dynamic/@kalman_inf_engine/private/dbn_to_lds.m,
+	  BNT/inference/dynamic/@kalman_inf_engine/private/extract_params_from_gbn.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/enter_soft_ev.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/pearl_dbn_inf_engine.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/correct_smooth.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/enter_evidence.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/filter_evidence.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/filter_evidence_obj_oriented.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/smooth_evidence.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/smooth_evidence_fast.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/wrong_smooth.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/private/init_pearl_dbn_ev_msgs.m,
+	  BNT/inference/dynamic/@pearl_unrolled_dbn_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@pearl_unrolled_dbn_inf_engine/marginal_family.m,
+	  BNT/inference/dynamic/@pearl_unrolled_dbn_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@pearl_unrolled_dbn_inf_engine/pearl_unrolled_dbn_inf_engine.m,
+	  BNT/inference/dynamic/@pearl_unrolled_dbn_inf_engine/update_engine.m,
+	  BNT/inference/online/@filter_engine/bnet_from_engine.m,
+	  BNT/inference/online/@filter_engine/enter_evidence.m,
+	  BNT/inference/online/@filter_engine/filter_engine.m,
+	  BNT/inference/online/@filter_engine/marginal_family.m,
+	  BNT/inference/online/@filter_engine/marginal_nodes.m,
+	  BNT/inference/online/@hmm_2TBN_inf_engine/back.m,
+	  BNT/inference/online/@hmm_2TBN_inf_engine/backT.m,
+	  BNT/inference/online/@hmm_2TBN_inf_engine/fwd.m,
+	  BNT/inference/online/@hmm_2TBN_inf_engine/fwd1.m,
+	  BNT/inference/online/@hmm_2TBN_inf_engine/update_engine.m,
+	  BNT/inference/online/@jtree_2TBN_inf_engine/marginal_family.m,
+	  BNT/inference/online/@jtree_2TBN_inf_engine/marginal_nodes.m,
+	  BNT/inference/online/@jtree_2TBN_inf_engine/Old/jtree_2TBN_inf_engine.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/back.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/back1.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/backT.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/enter_evidence.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/fwd.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/fwd1.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/jtree_sparse_2TBN_inf_engine.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/marginal_family.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/marginal_nodes.m,
+	  BNT/inference/online/@smoother_engine/bnet_from_engine.m,
+	  BNT/inference/online/@smoother_engine/marginal_family.m,
+	  BNT/inference/online/@smoother_engine/marginal_nodes.m,
+	  BNT/inference/online/@smoother_engine/smoother_engine.m,
+	  BNT/inference/online/@smoother_engine/update_engine.m,
+	  BNT/inference/static/@belprop_fg_inf_engine/belprop_fg_inf_engine.m,
+	  BNT/inference/static/@belprop_fg_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@belprop_fg_inf_engine/loopy_converged.m,
+	  BNT/inference/static/@belprop_fg_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@belprop_fg_inf_engine/set_params.m,
+	  BNT/inference/static/@belprop_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@belprop_inf_engine/loopy_converged.m,
+	  BNT/inference/static/@belprop_inf_engine/marginal_family.m,
+	  BNT/inference/static/@belprop_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@belprop_inf_engine/Old/belprop_gdl_inf_engine.m,
+	  BNT/inference/static/@belprop_inf_engine/Old/belprop_inf_engine_nostr.m,
+	  BNT/inference/static/@belprop_inf_engine/Old/enter_evidence.m,
+	  BNT/inference/static/@belprop_inf_engine/Old/enter_evidence1.m,
+	  BNT/inference/static/@belprop_inf_engine/Old/marginal_domain.m,
+	  BNT/inference/static/@belprop_inf_engine/private/junk,
+	  BNT/inference/static/@belprop_inf_engine/private/parallel_protocol.m,
+	  BNT/inference/static/@belprop_inf_engine/private/tree_protocol.m,
+	  BNT/inference/static/@cond_gauss_inf_engine/cond_gauss_inf_engine.m,
+	  BNT/inference/static/@cond_gauss_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@cond_gauss_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@enumerative_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@enumerative_inf_engine/enumerative_inf_engine.m,
+	  BNT/inference/static/@enumerative_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@gaussian_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@gaussian_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@gaussian_inf_engine/private/extract_params_from_gbn.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/gibbs_sampling_inf_engine.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/CPT.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_children.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_families.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_families_dbn.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_posterior.c,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_posterior_dbn.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_strides.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/get_cpts.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/get_slice_dbn.c,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/get_slice_dbn.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/my_sample_discrete.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/sample_single_discrete.c,
+	  BNT/inference/static/@global_joint_inf_engine/global_joint_inf_engine.m,
+	  BNT/inference/static/@global_joint_inf_engine/marginal_family.m,
+	  BNT/inference/static/@jtree_inf_engine/cliques_from_engine.m,
+	  BNT/inference/static/@jtree_inf_engine/clq_containing_nodes.m,
+	  BNT/inference/static/@jtree_inf_engine/collect_evidence.m,
+	  BNT/inference/static/@jtree_inf_engine/enter_soft_evidence.m,
+	  BNT/inference/static/@jtree_inf_engine/marginal_family.m,
+	  BNT/inference/static/@jtree_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@jtree_inf_engine/set_fields.m,
+	  BNT/inference/static/@jtree_inf_engine/Old/collect_evidence.m,
+	  BNT/inference/static/@jtree_inf_engine/Old/distribute_evidence.m,
+	  BNT/inference/static/@jtree_inf_engine/Old/enter_evidence.m,
+	  BNT/inference/static/@jtree_inf_engine/Old/enter_soft_evidence.m,
+	  BNT/inference/static/@jtree_limid_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@jtree_limid_inf_engine/jtree_limid_inf_engine.m,
+	  BNT/inference/static/@jtree_limid_inf_engine/marginal_family.m,
+	  BNT/inference/static/@jtree_limid_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@jtree_limid_inf_engine/Old/marginal_family.m,
+	  BNT/inference/static/@jtree_limid_inf_engine/Old/marginal_nodes_SS.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/cliques_from_engine.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/clq_containing_nodes.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/collect_evidence.c,
+	  BNT/inference/static/@jtree_sparse_inf_engine/distribute_evidence.c,
+	  BNT/inference/static/@jtree_sparse_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/enter_soft_evidence.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/init_pot.c,
+	  BNT/inference/static/@jtree_sparse_inf_engine/marginal_family.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/set_fields.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/old/collect_evidence.c,
+	  BNT/inference/static/@jtree_sparse_inf_engine/old/distribute_evidence.c,
+	  BNT/inference/static/@jtree_sparse_inf_engine/old/init_pot.c,
+	  BNT/inference/static/@jtree_sparse_inf_engine/old/init_pot1.c,
+	  BNT/inference/static/@jtree_sparse_inf_engine/old/init_pot1.m,
+	  BNT/inference/static/@likelihood_weighting_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@likelihood_weighting_inf_engine/likelihood_weighting_inf_engine.m,
+	  BNT/inference/static/@likelihood_weighting_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@pearl_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@pearl_inf_engine/loopy_converged.m,
+	  BNT/inference/static/@pearl_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@pearl_inf_engine/private/compute_bel.m,
+	  BNT/inference/static/@pearl_inf_engine/private/prod_lambda_msgs.m,
+	  BNT/inference/static/@pearl_inf_engine/private/tree_protocol.m,
+	  BNT/inference/static/@quickscore_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@quickscore_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@quickscore_inf_engine/quickscore_inf_engine.m,
+	  BNT/inference/static/@quickscore_inf_engine/private/C_quickscore.c,
+	  BNT/inference/static/@quickscore_inf_engine/private/nr.h,
+	  BNT/inference/static/@quickscore_inf_engine/private/nrutil.c,
+	  BNT/inference/static/@quickscore_inf_engine/private/nrutil.h,
+	  BNT/inference/static/@quickscore_inf_engine/private/quickscore.m,
+	  BNT/learning/bayes_update_params.m,
+	  BNT/learning/bic_score_family.m,
+	  BNT/learning/compute_cooling_schedule.m,
+	  BNT/learning/dirichlet_score_family.m,
+	  BNT/learning/kpm_learn_struct_mcmc.m,
+	  BNT/learning/learn_params_em.m,
+	  BNT/learning/learn_struct_dbn_reveal.m,
+	  BNT/learning/learn_struct_pdag_ic_star.m,
+	  BNT/learning/mcmc_sample_to_hist.m, BNT/learning/mk_schedule.m,
+	  BNT/learning/mk_tetrad_data_file.m,
+	  BNT/learning/score_dags_old.m, HMM/dhmm_logprob_brute_force.m,
+	  HMM/dhmm_logprob_path.m, HMM/mdp_sample.m, Kalman/AR_to_SS.m,
+	  Kalman/SS_to_AR.m, Kalman/convert_to_lagged_form.m,
+	  Kalman/ensure_AR.m, Kalman/eval_AR_perf.m,
+	  Kalman/kalman_filter.m, Kalman/kalman_smoother.m,
+	  Kalman/kalman_update.m, Kalman/learn_AR.m,
+	  Kalman/learn_AR_diagonal.m, Kalman/learn_kalman.m,
+	  Kalman/smooth_update.m,
+	  BNT/general/convert_dbn_CPDs_to_tables_slow.m,
+	  BNT/general/dispcpt.m, BNT/general/linear_gaussian_to_cpot.m,
+	  BNT/general/partition_matrix_vec_3.m,
+	  BNT/general/shrink_obs_dims_in_gaussian.m,
+	  BNT/general/shrink_obs_dims_in_table.m,
+	  BNT/potentials/CPD_to_pot.m, BNT/potentials/README,
+	  BNT/potentials/check_for_cd_arcs.m,
+	  BNT/potentials/determine_pot_type.m,
+	  BNT/potentials/mk_initial_pot.m,
+	  BNT/potentials/@cgpot/cg_can_to_mom.m,
+	  BNT/potentials/@cgpot/cg_mom_to_can.m,
+	  BNT/potentials/@cgpot/cgpot.m, BNT/potentials/@cgpot/display.m,
+	  BNT/potentials/@cgpot/divide_by_pot.m,
+	  BNT/potentials/@cgpot/domain_pot.m,
+	  BNT/potentials/@cgpot/enter_cts_evidence_pot.m,
+	  BNT/potentials/@cgpot/enter_discrete_evidence_pot.m,
+	  BNT/potentials/@cgpot/marginalize_pot.m,
+	  BNT/potentials/@cgpot/multiply_by_pot.m,
+	  BNT/potentials/@cgpot/multiply_pots.m,
+	  BNT/potentials/@cgpot/normalize_pot.m,
+	  BNT/potentials/@cgpot/pot_to_marginal.m,
+	  BNT/potentials/@cgpot/Old/normalize_pot.m,
+	  BNT/potentials/@cgpot/Old/simple_marginalize_pot.m,
+	  BNT/potentials/@cpot/cpot.m, BNT/potentials/@cpot/cpot_to_mpot.m,
+	  BNT/potentials/@cpot/display.m,
+	  BNT/potentials/@cpot/divide_by_pot.m,
+	  BNT/potentials/@cpot/domain_pot.m,
+	  BNT/potentials/@cpot/enter_cts_evidence_pot.m,
+	  BNT/potentials/@cpot/marginalize_pot.m,
+	  BNT/potentials/@cpot/multiply_by_pot.m,
+	  BNT/potentials/@cpot/multiply_pots.m,
+	  BNT/potentials/@cpot/normalize_pot.m,
+	  BNT/potentials/@cpot/pot_to_marginal.m,
+	  BNT/potentials/@cpot/rescale_pot.m,
+	  BNT/potentials/@cpot/set_domain_pot.m,
+	  BNT/potentials/@cpot/Old/cpot_to_mpot.m,
+	  BNT/potentials/@cpot/Old/normalize_pot.convert.m,
+	  BNT/potentials/@dpot/approxeq_pot.m,
+	  BNT/potentials/@dpot/display.m,
+	  BNT/potentials/@dpot/domain_pot.m,
+	  BNT/potentials/@dpot/dpot_to_table.m,
+	  BNT/potentials/@dpot/get_fields.m,
+	  BNT/potentials/@dpot/multiply_pots.m,
+	  BNT/potentials/@dpot/pot_to_marginal.m,
+	  BNT/potentials/@dpot/set_domain_pot.m,
+	  BNT/potentials/@mpot/display.m,
+	  BNT/potentials/@mpot/marginalize_pot.m,
+	  BNT/potentials/@mpot/mpot.m, BNT/potentials/@mpot/mpot_to_cpot.m,
+	  BNT/potentials/@mpot/normalize_pot.m,
+	  BNT/potentials/@mpot/pot_to_marginal.m,
+	  BNT/potentials/@mpot/rescale_pot.m,
+	  BNT/potentials/@upot/approxeq_pot.m,
+	  BNT/potentials/@upot/display.m,
+	  BNT/potentials/@upot/divide_by_pot.m,
+	  BNT/potentials/@upot/marginalize_pot.m,
+	  BNT/potentials/@upot/multiply_by_pot.m,
+	  BNT/potentials/@upot/normalize_pot.m,
+	  BNT/potentials/@upot/pot_to_marginal.m,
+	  BNT/potentials/@upot/upot.m,
+	  BNT/potentials/@upot/upot_to_opt_policy.m,
+	  BNT/potentials/Old/comp_eff_node_sizes.m,
+	  BNT/potentials/Tables/divide_by_sparse_table.c,
+	  BNT/potentials/Tables/divide_by_table.c,
+	  BNT/potentials/Tables/marg_sparse_table.c,
+	  BNT/potentials/Tables/marg_table.c,
+	  BNT/potentials/Tables/mult_by_sparse_table.c,
+	  BNT/potentials/Tables/rep_mult.c, HMM/mk_leftright_transmat.m:
+	  Initial revision
+
+2002-05-29 04:59  yozhik
+
+	* BNT/inference/static/@stab_cond_gauss_inf_engine/:
+	  clq_containing_nodes.m, problems.txt, push_pot_toclique.m,
+	  Old/initialize_engine.m: Initial import of code base from Kevin
+	  Murphy.
+
+2002-05-29 04:59  yozhik
+
+	* BNT/inference/static/@stab_cond_gauss_inf_engine/:
+	  clq_containing_nodes.m, problems.txt, push_pot_toclique.m,
+	  Old/initialize_engine.m: Initial revision
+
+2002-05-19 15:11  yozhik
+
+	* BNT/potentials/: @scgcpot/marginalize_pot.m,
+	  @scgcpot/normalize_pot.m, @scgcpot/rescale_pot.m,
+	  @scgcpot/scgcpot.m, @scgpot/direct_combine_pots.m,
+	  @scgpot/pot_to_marginal.m: Initial import of code base from Kevin
+	  Murphy.
+
+2002-05-19 15:11  yozhik
+
+	* BNT/potentials/: @scgcpot/marginalize_pot.m,
+	  @scgcpot/normalize_pot.m, @scgcpot/rescale_pot.m,
+	  @scgcpot/scgcpot.m, @scgpot/direct_combine_pots.m,
+	  @scgpot/pot_to_marginal.m: Initial revision
+
+2001-07-28 08:43  yozhik
+
+	* BNT/potentials/genops.c: Initial import of code base from Kevin
+	  Murphy.
+
+2001-07-28 08:43  yozhik
+
+	* BNT/potentials/genops.c: Initial revision
+
diff --git a/sourcecodes/bnt-master/docs/Eqns/lin_reg_eqn.gif b/sourcecodes/bnt-master/docs/Eqns/lin_reg_eqn.gif
new file mode 100644
index 00000000..6ba3fda5
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Eqns/lin_reg_eqn.gif
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/CPTgrass.gif b/sourcecodes/bnt-master/docs/Figures/CPTgrass.gif
new file mode 100644
index 00000000..a5ecccd1
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/CPTgrass.gif
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/HMEforMatlab.jpg b/sourcecodes/bnt-master/docs/Figures/HMEforMatlab.jpg
new file mode 100644
index 00000000..16682678
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/HMEforMatlab.jpg
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/ar1.fig b/sourcecodes/bnt-master/docs/Figures/ar1.fig
new file mode 100644
index 00000000..32e11d19
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/ar1.fig
@@ -0,0 +1,13 @@
+#FIG 3.1
+Landscape
+Center
+Inches
+1200 2
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 600 450 300 225 600 450 900 675
+1 1 0 1 -1 0 0 0 -1 0.000 1 0.0000 1725 450 300 225 1725 450 2025 675
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 450 1425 450
+4 0 -1 0 0 0 12 0.0000 4 180 2310 300 1050 Auto Regressive model AR(1)\001
+4 0 -1 0 0 0 12 0.0000 4 135 210 450 525 X1\001
+4 0 -1 0 0 0 12 0.0000 4 135 210 1575 525 X2\001
diff --git a/sourcecodes/bnt-master/docs/Figures/ar1.gif b/sourcecodes/bnt-master/docs/Figures/ar1.gif
new file mode 100644
index 00000000..3271dd61
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/ar1.gif
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/batnet.fig b/sourcecodes/bnt-master/docs/Figures/batnet.fig
new file mode 100644
index 00000000..a1c72a6a
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/batnet.fig
@@ -0,0 +1,318 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+0 32 #dfdfdf
+5 1 1 1 -1 -1 0 0 -1 4.000 0 1 0 0 5250.000 2175.000 2250 1500 2175 2175 2250 2850
+5 1 1 1 -1 -1 0 0 -1 4.000 0 1 0 0 6594.530 5137.500 2250 4200 2150 5137 2250 6075
+5 1 1 1 -1 -1 0 0 -1 4.000 0 1 0 0 3562.500 3450.000 2250 3000 2175 3450 2250 3900
+5 1 1 1 -1 -1 0 0 -1 4.000 0 1 0 0 2576.560 6412.500 2250 6225 2200 6412 2250 6600
+6 6075 3300 7125 3600
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 7125 3600 7125 3300 6075 3300 6075 3600 7125 3600
+4 1 -1 0 0 0 12 0.0000 4 135 1020 6600 3525 SensorValid1\001
+-6
+6 6450 3975 7500 4275
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 7500 4275 7500 3975 6450 3975 6450 4275 7500 4275
+4 1 -1 0 0 0 12 0.0000 4 135 870 6975 4200 FYdotDiff1\001
+-6
+6 6600 4575 7650 4875
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 7650 4875 7650 4575 6600 4575 6600 4875 7650 4875
+4 1 -1 0 0 0 12 0.0000 4 135 975 7125 4800 FcloseSlow1\001
+-6
+6 2400 3075 3000 3375
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 3000 3375 3000 3075 2400 3075 2400 3375 3000 3375
+4 1 -1 0 0 0 12 0.0000 4 135 465 2700 3300 Xdot0\001
+-6
+6 5025 3075 5625 3375
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 5625 3375 5625 3075 5025 3075 5025 3375 5625 3375
+4 1 -1 0 0 0 12 0.0000 4 135 465 5325 3300 Xdot1\001
+-6
+6 2400 3600 3150 3900
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 3150 3900 3150 3600 2400 3600 2400 3900 3150 3900
+4 1 -1 0 0 0 12 0.0000 4 135 615 2775 3825 InLane0\001
+-6
+6 4875 3600 5625 3900
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 5625 3900 5625 3600 4875 3600 4875 3900 5625 3900
+4 1 -1 0 0 0 12 0.0000 4 135 615 5250 3825 InLane1\001
+-6
+6 2400 1500 3150 1800
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 3150 1800 3150 1500 2400 1500 2400 1800 3150 1800
+4 1 -1 0 0 0 12 0.0000 4 135 630 2775 1725 LeftClr0\001
+-6
+6 4875 1500 5625 1800
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 5625 1800 5625 1500 4875 1500 4875 1800 5625 1800
+4 1 -1 0 0 0 12 0.0000 4 135 630 5250 1725 LeftClr1\001
+-6
+6 2400 2025 3300 2325
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 3300 2325 3300 2025 2400 2025 2400 2325 3300 2325
+4 1 -1 0 0 0 12 0.0000 4 180 720 2850 2250 RightClr0\001
+-6
+6 4800 2025 5625 2325
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 5625 2325 5625 2025 4800 2025 4800 2325 5625 2325
+4 1 -1 0 0 0 12 0.0000 4 180 720 5250 2250 RightClr1\001
+-6
+6 2400 2550 3300 2850
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 3300 2850 3300 2550 2400 2550 2400 2850 3300 2850
+4 1 -1 0 0 0 12 0.0000 4 135 855 2850 2775 LatAction0\001
+-6
+6 4725 2550 5625 2850
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 5625 2850 5625 2550 4725 2550 4725 2850 5625 2850
+4 1 -1 0 0 0 12 0.0000 4 135 855 5175 2775 LatAction1\001
+-6
+6 2400 4200 3450 4500
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 3450 4500 3450 4200 2400 4200 2400 4500 3450 4500
+4 1 -1 0 0 0 12 0.0000 4 135 930 2925 4425 FwdAction0\001
+-6
+6 4575 4200 5625 4500
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 5625 4500 5625 4200 4575 4200 4575 4500 5625 4500
+4 1 -1 0 0 0 12 0.0000 4 135 930 5100 4425 FwdAction1\001
+-6
+6 2400 4725 3000 5025
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 3000 5025 3000 4725 2400 4725 2400 5025 3000 5025
+4 1 -1 0 0 0 12 0.0000 4 135 465 2700 4950 Ydot0\001
+-6
+6 5025 4725 5625 5025
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 5625 5025 5625 4725 5025 4725 5025 5025 5625 5025
+4 1 -1 0 0 0 12 0.0000 4 135 465 5325 4950 Ydot1\001
+-6
+6 2400 5250 3150 5550
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 3150 5550 3150 5250 2400 5250 2400 5550 3150 5550
+4 1 -1 0 0 0 12 0.0000 4 180 705 2775 5475 Stopped0\001
+-6
+6 4500 5250 5250 5550
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 5250 5550 5250 5250 4500 5250 4500 5550 5250 5550
+4 1 -1 0 0 0 12 0.0000 4 180 705 4875 5475 Stopped1\001
+-6
+6 6450 5325 7200 5625
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 7200 5625 7200 5325 6450 5325 6450 5625 7200 5625
+4 1 -1 0 0 0 12 0.0000 4 135 585 6825 5550 BXdot1\001
+-6
+6 2400 5775 3300 6075
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 3300 6075 3300 5775 2400 5775 2400 6075 3300 6075
+4 1 -1 0 0 0 12 0.0000 4 180 885 2850 6000 EngStatus0\001
+-6
+6 4575 5775 5475 6075
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 5475 6075 5475 5775 4575 5775 4575 6075 5475 6075
+4 1 -1 0 0 0 12 0.0000 4 180 885 5025 6000 EngStatus1\001
+-6
+6 6150 5775 7200 6075
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 7200 6075 7200 5775 6150 5775 6150 6075 7200 6075
+4 1 -1 0 0 0 12 0.0000 4 135 960 6675 6000 BcloseFast1\001
+-6
+6 2400 6300 3750 6600
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 3750 6600 3750 6300 2400 6300 2400 6600 3750 6600
+4 1 -1 0 0 0 12 0.0000 4 135 1380 3075 6525 FrontBackStatus0\001
+-6
+6 4125 6300 5475 6600
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 5475 6600 5475 6300 4125 6300 4125 6600 5475 6600
+4 1 -1 0 0 0 12 0.0000 4 135 1380 4800 6525 FrontBackStatus1\001
+-6
+6 6150 6300 7200 6600
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 7200 6600 7200 6300 6150 6300 6150 6600 7200 6600
+4 1 -1 0 0 0 12 0.0000 4 135 885 6675 6525 BYdotDiff1\001
+-6
+6 7650 5025 8250 5325
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 8250 5325 8250 5025 7650 5025 7650 5325 8250 5325
+4 1 -1 0 0 0 12 0.0000 4 135 390 7950 5250 Fclr1\001
+-6
+6 7650 5775 8250 6075
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 8250 6075 8250 5775 7650 5775 7650 6075 8250 6075
+4 1 -1 0 0 0 12 0.0000 4 135 405 7950 6000 Bclr1\001
+-6
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3150 3750 4725 2775
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3000 3225 4875 3675
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 5175 5025 5025 5250
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 5325 5775 5475 5025
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 5400 5775 6450 4200
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 5175 2850 5325 3075
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 5100 4500 5175 4725
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3150 1650 4800 2550
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3750 6375 4650 4500
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3300 2700 4650 4200
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 5475 6000 6450 5475
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 7725 5775 7200 5550
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3675 6300 4800 2850
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 6150 6000 5475 6525
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 3
+	3 1 1.00 60.00 120.00
+	 5625 4800 6375 3750 8850 3750
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 6600 4800 5475 6375
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 6675 6300 6675 6075
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 3
+	3 1 1.00 60.00 120.00
+	 5475 5850 6150 5175 7650 5175
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3000 3225 5025 3225
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 5625 3225 8850 3225
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 7125 3450 8850 3300
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3150 3750 4875 3750
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 7125 3450 8850 3675
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3150 1650 4875 1650
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 5625 1650 8700 1650
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3300 2175 4800 2175
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 5625 2175 8550 2175
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3300 2700 4725 2700
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3300 2100 4725 2625
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 5625 2700 8700 2700
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3450 4350 4575 4350
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 7500 4125 8400 4350
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 7125 4275 7125 4575
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3000 4875 5025 4875
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 7800 5025 7650 4800
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3150 5400 4500 5400
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 7200 5400 8700 5400
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3300 5925 4575 5925
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 7650 5925 7200 5925
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 7200 6450 8400 6450
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 8250 5175 8850 4875
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 8250 5925 8850 5925
+2 4 1 1 -1 -1 0 0 -1 4.000 0 0 20 0 0 5
+	 3975 6700 1875 6700 1875 4100 3975 4100 3975 6700
+2 4 1 1 -1 -1 0 0 -1 4.000 0 0 20 0 0 5
+	 3975 4000 1875 4000 1875 1400 3975 1400 3975 4000
+2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5
+	 9750 6600 9750 6300 8400 6300 8400 6600 9750 6600
+2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5
+	 9750 6075 9750 5775 8850 5775 8850 6075 9750 6075
+2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5
+	 9750 5550 9750 5250 8700 5250 8700 5550 9750 5550
+2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5
+	 9750 5025 9750 4725 8850 4725 8850 5025 9750 5025
+2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5
+	 9750 4500 9750 4200 8400 4200 8400 4500 9750 4500
+2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5
+	 9750 3900 9750 3600 8850 3600 8850 3900 9750 3900
+2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5
+	 9750 3375 9750 3075 8850 3075 8850 3375 9750 3375
+2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5
+	 9750 2850 9750 2550 8700 2550 8700 2850 9750 2850
+2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5
+	 9750 2325 9750 2025 8550 2025 8550 2325 9750 2325
+2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5
+	 9750 1800 9750 1500 8700 1500 8700 1800 9750 1800
+4 1 -1 0 0 0 12 0.0000 4 135 840 9300 3300 XdotSens1\001
+4 1 -1 0 0 0 12 0.0000 4 135 840 9300 3825 YdotSens1\001
+4 1 -1 0 0 0 12 0.0000 4 135 1005 9225 1725 LeftClrSens1\001
+4 1 -1 0 0 0 12 0.0000 4 180 1095 9150 2250 RightClrSens1\001
+4 1 -1 0 0 0 12 0.0000 4 180 900 9225 2775 TurnSignal1\001
+4 1 -1 0 0 0 12 0.0000 4 135 1245 9075 4425 FYdotDiffSens1\001
+4 1 -1 0 0 0 12 0.0000 4 135 765 9300 4950 FclrSens1\001
+4 1 -1 0 0 0 12 0.0000 4 135 960 9225 5475 BXdotSens1\001
+4 1 -1 0 0 0 12 0.0000 4 135 780 9300 6000 BclrSens1\001
+4 1 -1 0 0 0 12 0.0000 4 135 1260 9075 6525 BYdotDiffSens1\001
+4 1 -1 0 0 0 16 0.0000 4 165 585 2925 7050 slice t\001
+4 1 -1 0 0 0 16 0.0000 4 165 840 4800 7050 slice t+1\001
+4 1 -1 0 0 0 16 0.0000 4 165 855 9150 7050 evidence\001
+
diff --git a/sourcecodes/bnt-master/docs/Figures/batnet.gif b/sourcecodes/bnt-master/docs/Figures/batnet.gif
new file mode 100644
index 00000000..d7fb15b6
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/batnet.gif
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/batnet_numbered.fig b/sourcecodes/bnt-master/docs/Figures/batnet_numbered.fig
new file mode 100644
index 00000000..daa9a755
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/batnet_numbered.fig
@@ -0,0 +1,345 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+0 32 #dfdfdf
+5 1 1 1 -1 -1 0 0 -1 4.000 0 1 0 0 5250.000 2175.000 2250 1500 2175 2175 2250 2850
+5 1 1 1 -1 -1 0 0 -1 4.000 0 1 0 0 6594.530 5137.500 2250 4200 2150 5137 2250 6075
+5 1 1 1 -1 -1 0 0 -1 4.000 0 1 0 0 3562.500 3450.000 2250 3000 2175 3450 2250 3900
+5 1 1 1 -1 -1 0 0 -1 4.000 0 1 0 0 2576.560 6412.500 2250 6225 2200 6412 2250 6600
+6 6075 3300 7125 3600
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 7125 3600 7125 3300 6075 3300 6075 3600 7125 3600
+4 1 -1 0 0 0 12 0.0000 4 135 1020 6600 3525 SensorValid1\001
+-6
+6 6450 3975 7500 4275
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 7500 4275 7500 3975 6450 3975 6450 4275 7500 4275
+4 1 -1 0 0 0 12 0.0000 4 135 870 6975 4200 FYdotDiff1\001
+-6
+6 6600 4575 7650 4875
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 7650 4875 7650 4575 6600 4575 6600 4875 7650 4875
+4 1 -1 0 0 0 12 0.0000 4 135 975 7125 4800 FcloseSlow1\001
+-6
+6 2400 3075 3000 3375
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 3000 3375 3000 3075 2400 3075 2400 3375 3000 3375
+4 1 -1 0 0 0 12 0.0000 4 135 465 2700 3300 Xdot0\001
+-6
+6 5025 3075 5625 3375
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 5625 3375 5625 3075 5025 3075 5025 3375 5625 3375
+4 1 -1 0 0 0 12 0.0000 4 135 465 5325 3300 Xdot1\001
+-6
+6 2400 3600 3150 3900
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 3150 3900 3150 3600 2400 3600 2400 3900 3150 3900
+4 1 -1 0 0 0 12 0.0000 4 135 615 2775 3825 InLane0\001
+-6
+6 4875 3600 5625 3900
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 5625 3900 5625 3600 4875 3600 4875 3900 5625 3900
+4 1 -1 0 0 0 12 0.0000 4 135 615 5250 3825 InLane1\001
+-6
+6 2400 1500 3150 1800
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 3150 1800 3150 1500 2400 1500 2400 1800 3150 1800
+4 1 -1 0 0 0 12 0.0000 4 135 630 2775 1725 LeftClr0\001
+-6
+6 4875 1500 5625 1800
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 5625 1800 5625 1500 4875 1500 4875 1800 5625 1800
+4 1 -1 0 0 0 12 0.0000 4 135 630 5250 1725 LeftClr1\001
+-6
+6 2400 2025 3300 2325
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 3300 2325 3300 2025 2400 2025 2400 2325 3300 2325
+4 1 -1 0 0 0 12 0.0000 4 180 720 2850 2250 RightClr0\001
+-6
+6 4800 2025 5625 2325
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 5625 2325 5625 2025 4800 2025 4800 2325 5625 2325
+4 1 -1 0 0 0 12 0.0000 4 180 720 5250 2250 RightClr1\001
+-6
+6 2400 2550 3300 2850
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 3300 2850 3300 2550 2400 2550 2400 2850 3300 2850
+4 1 -1 0 0 0 12 0.0000 4 135 855 2850 2775 LatAction0\001
+-6
+6 4725 2550 5625 2850
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 5625 2850 5625 2550 4725 2550 4725 2850 5625 2850
+4 1 -1 0 0 0 12 0.0000 4 135 855 5175 2775 LatAction1\001
+-6
+6 2400 4200 3450 4500
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 3450 4500 3450 4200 2400 4200 2400 4500 3450 4500
+4 1 -1 0 0 0 12 0.0000 4 135 930 2925 4425 FwdAction0\001
+-6
+6 4575 4200 5625 4500
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 5625 4500 5625 4200 4575 4200 4575 4500 5625 4500
+4 1 -1 0 0 0 12 0.0000 4 135 930 5100 4425 FwdAction1\001
+-6
+6 2400 4725 3000 5025
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 3000 5025 3000 4725 2400 4725 2400 5025 3000 5025
+4 1 -1 0 0 0 12 0.0000 4 135 465 2700 4950 Ydot0\001
+-6
+6 5025 4725 5625 5025
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 5625 5025 5625 4725 5025 4725 5025 5025 5625 5025
+4 1 -1 0 0 0 12 0.0000 4 135 465 5325 4950 Ydot1\001
+-6
+6 2400 5250 3150 5550
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 3150 5550 3150 5250 2400 5250 2400 5550 3150 5550
+4 1 -1 0 0 0 12 0.0000 4 180 705 2775 5475 Stopped0\001
+-6
+6 4500 5250 5250 5550
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 5250 5550 5250 5250 4500 5250 4500 5550 5250 5550
+4 1 -1 0 0 0 12 0.0000 4 180 705 4875 5475 Stopped1\001
+-6
+6 6450 5325 7200 5625
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 7200 5625 7200 5325 6450 5325 6450 5625 7200 5625
+4 1 -1 0 0 0 12 0.0000 4 135 585 6825 5550 BXdot1\001
+-6
+6 2400 5775 3300 6075
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 3300 6075 3300 5775 2400 5775 2400 6075 3300 6075
+4 1 -1 0 0 0 12 0.0000 4 180 885 2850 6000 EngStatus0\001
+-6
+6 4575 5775 5475 6075
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 5475 6075 5475 5775 4575 5775 4575 6075 5475 6075
+4 1 -1 0 0 0 12 0.0000 4 180 885 5025 6000 EngStatus1\001
+-6
+6 6150 5775 7200 6075
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 7200 6075 7200 5775 6150 5775 6150 6075 7200 6075
+4 1 -1 0 0 0 12 0.0000 4 135 960 6675 6000 BcloseFast1\001
+-6
+6 2325 6300 3825 6600
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 3750 6600 3750 6300 2400 6300 2400 6600 3750 6600
+4 1 -1 0 0 0 12 0.0000 4 135 1380 3075 6525 FrontBackStatus0\001
+-6
+6 4050 6300 5550 6600
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 5475 6600 5475 6300 4125 6300 4125 6600 5475 6600
+4 1 -1 0 0 0 12 0.0000 4 135 1380 4800 6525 FrontBackStatus1\001
+-6
+6 6150 6300 7200 6600
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 7200 6600 7200 6300 6150 6300 6150 6600 7200 6600
+4 1 -1 0 0 0 12 0.0000 4 135 885 6675 6525 BYdotDiff1\001
+-6
+6 7650 5025 8250 5325
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 8250 5325 8250 5025 7650 5025 7650 5325 8250 5325
+4 1 -1 0 0 0 12 0.0000 4 135 390 7950 5250 Fclr1\001
+-6
+6 7650 5775 8250 6075
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 8250 6075 8250 5775 7650 5775 7650 6075 8250 6075
+4 1 -1 0 0 0 12 0.0000 4 135 405 7950 6000 Bclr1\001
+-6
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3150 3750 4725 2775
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3000 3225 4875 3675
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 5175 5025 5025 5250
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 5325 5775 5475 5025
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 5400 5775 6450 4200
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 5175 2850 5325 3075
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 5100 4500 5175 4725
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3150 1650 4800 2550
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3750 6375 4650 4500
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3300 2700 4650 4200
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 5475 6000 6450 5475
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 7725 5775 7200 5550
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3675 6300 4800 2850
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 6150 6000 5475 6525
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 3
+	3 1 1.00 60.00 120.00
+	 5625 4800 6375 3750 8850 3750
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 6600 4800 5475 6375
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 6675 6300 6675 6075
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 3
+	3 1 1.00 60.00 120.00
+	 5475 5850 6150 5175 7650 5175
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3000 3225 5025 3225
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 5625 3225 8850 3225
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 7125 3450 8850 3300
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3150 3750 4875 3750
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 7125 3450 8850 3675
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3150 1650 4875 1650
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 5625 1650 8700 1650
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3300 2175 4800 2175
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 5625 2175 8550 2175
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3300 2700 4725 2700
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3300 2100 4725 2625
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 5625 2700 8700 2700
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3450 4350 4575 4350
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 7500 4125 8400 4350
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 7125 4275 7125 4575
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3000 4875 5025 4875
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 7800 5025 7650 4800
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3150 5400 4500 5400
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 7200 5400 8700 5400
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3300 5925 4575 5925
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 7650 5925 7200 5925
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 7200 6450 8400 6450
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 8250 5175 8850 4875
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 8250 5925 8850 5925
+2 4 1 1 -1 -1 0 0 -1 4.000 0 0 20 0 0 5
+	 3975 6700 1875 6700 1875 4100 3975 4100 3975 6700
+2 4 1 1 -1 -1 0 0 -1 4.000 0 0 20 0 0 5
+	 3975 4000 1875 4000 1875 1400 3975 1400 3975 4000
+2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5
+	 9750 6600 9750 6300 8400 6300 8400 6600 9750 6600
+2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5
+	 9750 6075 9750 5775 8850 5775 8850 6075 9750 6075
+2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5
+	 9750 5550 9750 5250 8700 5250 8700 5550 9750 5550
+2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5
+	 9750 5025 9750 4725 8850 4725 8850 5025 9750 5025
+2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5
+	 9750 4500 9750 4200 8400 4200 8400 4500 9750 4500
+2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5
+	 9750 3900 9750 3600 8850 3600 8850 3900 9750 3900
+2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5
+	 9750 3375 9750 3075 8850 3075 8850 3375 9750 3375
+2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5
+	 9750 2850 9750 2550 8700 2550 8700 2850 9750 2850
+2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5
+	 9750 2325 9750 2025 8550 2025 8550 2325 9750 2325
+2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5
+	 9750 1800 9750 1500 8700 1500 8700 1800 9750 1800
+4 1 -1 0 0 0 12 0.0000 4 135 840 9300 3300 XdotSens1\001
+4 1 -1 0 0 0 12 0.0000 4 135 840 9300 3825 YdotSens1\001
+4 1 -1 0 0 0 12 0.0000 4 135 1005 9225 1725 LeftClrSens1\001
+4 1 -1 0 0 0 12 0.0000 4 180 1095 9150 2250 RightClrSens1\001
+4 1 -1 0 0 0 12 0.0000 4 180 900 9225 2775 TurnSignal1\001
+4 1 -1 0 0 0 12 0.0000 4 135 1245 9075 4425 FYdotDiffSens1\001
+4 1 -1 0 0 0 12 0.0000 4 135 765 9300 4950 FclrSens1\001
+4 1 -1 0 0 0 12 0.0000 4 135 960 9225 5475 BXdotSens1\001
+4 1 -1 0 0 0 12 0.0000 4 135 780 9300 6000 BclrSens1\001
+4 1 -1 0 0 0 12 0.0000 4 135 1260 9075 6525 BYdotDiffSens1\001
+4 1 -1 0 0 0 16 0.0000 4 165 585 2925 7050 slice t\001
+4 1 -1 0 0 0 16 0.0000 4 165 840 4800 7050 slice t+1\001
+4 1 -1 0 0 0 16 0.0000 4 165 855 9150 7050 evidence\001
+4 0 0 50 0 0 12 0.0000 4 135 180 2025 6525 14\001
+4 0 0 50 0 0 12 0.0000 4 135 90 1950 6075 7\001
+4 0 0 50 0 0 12 0.0000 4 135 180 1950 5475 19\001
+4 0 0 50 0 0 12 0.0000 4 135 180 1950 4950 17\001
+4 0 0 50 0 0 12 0.0000 4 135 180 1950 4425 16\001
+4 0 0 50 0 0 12 0.0000 4 135 180 1950 3825 20\001
+4 0 0 50 0 0 12 0.0000 4 135 180 1950 3375 23\001
+4 0 0 50 0 0 12 0.0000 4 135 180 1950 2775 21\001
+4 0 0 50 0 0 12 0.0000 4 135 180 1950 2250 25\001
+4 0 0 50 0 0 12 0.0000 4 135 180 1950 1800 27\001
+4 0 0 50 0 0 12 0.0000 4 135 90 5925 3600 6\001
+4 0 0 50 0 0 12 0.0000 4 135 180 6225 4200 12\001
+4 0 0 50 0 0 12 0.0000 4 135 180 6375 4800 13\001
+4 0 0 50 0 0 12 0.0000 4 135 180 7875 5025 10\001
+4 0 0 50 0 0 12 0.0000 4 135 90 6300 5475 8\001
+4 0 0 50 0 0 12 0.0000 4 135 90 6000 6075 4\001
+4 0 0 50 0 0 12 0.0000 4 135 90 6000 6600 1\001
+4 0 0 50 0 0 12 0.0000 4 135 90 7575 6150 3\001
+4 0 0 50 0 0 12 0.0000 4 135 180 9825 1725 28\001
+4 0 0 50 0 0 12 0.0000 4 135 180 9825 2250 26\001
+4 0 0 50 0 0 12 0.0000 4 135 180 9825 2775 22\001
+4 0 0 50 0 0 12 0.0000 4 135 180 9825 3300 24\001
+4 0 0 50 0 0 12 0.0000 4 135 180 9825 3825 18\001
+4 0 0 50 0 0 12 0.0000 4 135 180 9825 4425 15\001
+4 0 0 50 0 0 12 0.0000 4 135 180 9825 4950 11\001
+4 0 0 50 0 0 12 0.0000 4 135 90 9825 5475 9\001
+4 0 0 50 0 0 12 0.0000 4 135 90 9825 6075 5\001
+4 0 0 50 0 0 12 0.0000 4 135 90 9825 6525 2\001
diff --git a/sourcecodes/bnt-master/docs/Figures/bic.png b/sourcecodes/bnt-master/docs/Figures/bic.png
new file mode 100644
index 00000000..1ad2a4e5
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/bic.png
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/cg1.fig b/sourcecodes/bnt-master/docs/Figures/cg1.fig
new file mode 100644
index 00000000..145c8d1d
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/cg1.fig
@@ -0,0 +1,60 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 1200 3000 300 300 1200 3000 1200 3300
+1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 3900 3000 300 300 3900 3000 3900 3300
+1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 3900 4500 300 300 3900 4500 3900 4800
+1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 2100 5700 300 300 2100 5700 2100 6000
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 5700 5700 300 300 5700 5700 5700 6000
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 3000 300 300 6900 3000 6900 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 3600 1200 4200 1200 4200 1800 3600 1800 3600 1200
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 6600 1200 7200 1200 7200 1800 6600 1800 6600 1200
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1200 1800 1200 2700
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1200 1800 3600 2850
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1200 1800 3600 4350
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1200 3300 2100 5400
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3750 4800 2100 5400
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 4050 4800 5400 5550
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3900 1800 3900 2700
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3900 3300 3900 4200
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6900 1800 4200 4350
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6900 1800 6900 2700
+2 2 0 1 0 0 100 0 2 0.000 0 0 7 0 0 5
+	 900 1200 1500 1200 1500 1800 900 1800 900 1200
+4 0 0 100 0 0 12 0.0000 4 135 180 1050 1650 W\001
+4 0 0 100 0 0 12 0.0000 4 135 300 1050 3150 Min\001
+4 0 0 100 0 0 12 0.0000 4 135 105 3750 1650 F\001
+4 0 0 100 0 0 12 0.0000 4 135 120 3750 3150 E\001
+4 0 0 100 0 0 12 0.0000 4 135 135 3750 4650 D\001
+4 0 0 100 0 0 12 0.0000 4 135 405 1950 5850 Mout\001
+4 0 0 100 0 0 12 0.0000 4 135 120 6750 1650 B\001
+4 0 0 100 0 0 12 0.0000 4 135 120 6750 3150 C\001
+4 0 0 100 0 0 12 0.0000 4 135 105 5550 5850 L\001
diff --git a/sourcecodes/bnt-master/docs/Figures/cg1.gif b/sourcecodes/bnt-master/docs/Figures/cg1.gif
new file mode 100644
index 00000000..fe62c5c7
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/cg1.gif
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/chmm5.T5.fig b/sourcecodes/bnt-master/docs/Figures/chmm5.T5.fig
new file mode 100644
index 00000000..15579df9
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/chmm5.T5.fig
@@ -0,0 +1,323 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+6 300 600 4500 9900
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 5100 300 300 4200 5100 4200 5400
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 7200 300 300 4200 7200 4200 7500
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 9000 300 300 4200 9000 4200 9300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 900 300 300 4200 900 4200 1200
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 3000 300 300 4200 3000 4200 3300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 5100 300 300 1500 5100 1500 5400
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 7200 300 300 1500 7200 1500 7500
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 9000 300 300 1500 9000 1500 9300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 900 300 300 1500 900 1500 1200
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 3000 300 300 1500 3000 1500 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 300 1200 900 1200 900 1800 300 1800 300 1200
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 300 3300 900 3300 900 3900 300 3900 300 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 300 5400 900 5400 900 6000 300 6000 300 5400
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 300 7500 900 7500 900 8100 300 8100 300 7500
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 300 9300 900 9300 900 9900 300 9900 300 9300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 3000 1200 3600 1200 3600 1800 3000 1800 3000 1200
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 3000 3300 3600 3300 3600 3900 3000 3900 3000 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 3000 5400 3600 5400 3600 6000 3000 6000 3000 5400
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 3000 7500 3600 7500 3600 8100 3000 8100 3000 7500
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 3000 9300 3600 9300 3600 9900 3000 9900 3000 9300
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 1200 3900 1050
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 3300 3900 3000
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 5400 3900 5100
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 7500 3900 7200
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 9300 3900 9000
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 1500 3000 3600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 3600 3000 1500
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 1500 3000 1500
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 3600 3000 5700
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 5700 3000 3600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 3600 3000 3600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 5700 3000 5700
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 5700 3000 7800
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 7800 3000 5700
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 7800 3000 7800
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 7800 3000 9600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 9600 3000 9600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 9600 3000 7800
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 1200 1200 1050
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 3300 1200 3000
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 5400 1200 5100
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 7500 1200 7200
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 9300 1200 9000
+-6
+6 3600 600 7200 9900
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 5100 300 300 6900 5100 6900 5400
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 7200 300 300 6900 7200 6900 7500
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 9000 300 300 6900 9000 6900 9300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 900 300 300 6900 900 6900 1200
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 3000 300 300 6900 3000 6900 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 5700 1200 6300 1200 6300 1800 5700 1800 5700 1200
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 5700 3300 6300 3300 6300 3900 5700 3900 5700 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 5700 5400 6300 5400 6300 6000 5700 6000 5700 5400
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 5700 7500 6300 7500 6300 8100 5700 8100 5700 7500
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 5700 9300 6300 9300 6300 9900 5700 9900 5700 9300
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 1200 6600 1050
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 3300 6600 3000
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 5400 6600 5100
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 7500 6600 7200
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 9300 6600 9000
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 1500 5700 3600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 3600 5700 1500
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 1500 5700 1500
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 3600 5700 5700
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 5700 5700 3600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 3600 5700 3600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 5700 5700 5700
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 5700 5700 7800
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 7800 5700 5700
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 7800 5700 7800
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 7800 5700 9600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 9600 5700 9600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 9600 5700 7800
+-6
+6 6300 600 9900 9900
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 9600 5100 300 300 9600 5100 9600 5400
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 9600 7200 300 300 9600 7200 9600 7500
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 9600 9000 300 300 9600 9000 9600 9300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 9600 900 300 300 9600 900 9600 1200
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 9600 3000 300 300 9600 3000 9600 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 8400 1200 9000 1200 9000 1800 8400 1800 8400 1200
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 8400 3300 9000 3300 9000 3900 8400 3900 8400 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 8400 5400 9000 5400 9000 6000 8400 6000 8400 5400
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 8400 7500 9000 7500 9000 8100 8400 8100 8400 7500
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 8400 9300 9000 9300 9000 9900 8400 9900 8400 9300
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 9000 1200 9300 1050
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 9000 3300 9300 3000
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 9000 5400 9300 5100
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 9000 7500 9300 7200
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 9000 9300 9300 9000
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 1500 8400 3600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 3600 8400 1500
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 1500 8400 1500
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 3600 8400 5700
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 5700 8400 3600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 3600 8400 3600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 5700 8400 5700
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 5700 8400 7800
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 7800 8400 5700
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 7800 8400 7800
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 7800 8400 9600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 9600 8400 9600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 9600 8400 7800
+-6
+6 9000 600 12600 9900
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 12300 5100 300 300 12300 5100 12300 5400
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 12300 7200 300 300 12300 7200 12300 7500
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 12300 9000 300 300 12300 9000 12300 9300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 12300 900 300 300 12300 900 12300 1200
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 12300 3000 300 300 12300 3000 12300 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 11100 1200 11700 1200 11700 1800 11100 1800 11100 1200
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 11100 3300 11700 3300 11700 3900 11100 3900 11100 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 11100 5400 11700 5400 11700 6000 11100 6000 11100 5400
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 11100 7500 11700 7500 11700 8100 11100 8100 11100 7500
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 11100 9300 11700 9300 11700 9900 11100 9900 11100 9300
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 11700 1200 12000 1050
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 11700 3300 12000 3000
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 11700 5400 12000 5100
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 11700 7500 12000 7200
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 11700 9300 12000 9000
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 9000 1500 11100 3600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 9000 3600 11100 1500
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 9000 1500 11100 1500
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 9000 3600 11100 5700
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 9000 5700 11100 3600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 9000 3600 11100 3600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 9000 5700 11100 5700
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 9000 5700 11100 7800
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 9000 7800 11100 5700
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 9000 7800 11100 7800
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 9000 7800 11100 9600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 9000 9600 11100 9600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 9000 9600 11100 7800
+-6
diff --git a/sourcecodes/bnt-master/docs/Figures/chmm5.fig b/sourcecodes/bnt-master/docs/Figures/chmm5.fig
new file mode 100644
index 00000000..ae772850
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/chmm5.fig
@@ -0,0 +1,187 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+6 225 1125 975 9975
+6 225 1125 975 9975
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 300 1200 900 1200 900 1800 300 1800 300 1200
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 300 3300 900 3300 900 3900 300 3900 300 3300
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 300 5400 900 5400 900 6000 300 6000 300 5400
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 300 7500 900 7500 900 8100 300 8100 300 7500
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 300 9300 900 9300 900 9900 300 9900 300 9300
+-6
+-6
+6 2925 1125 3675 9975
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 3000 1200 3600 1200 3600 1800 3000 1800 3000 1200
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 3000 3300 3600 3300 3600 3900 3000 3900 3000 3300
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 3000 5400 3600 5400 3600 6000 3000 6000 3000 5400
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 3000 7500 3600 7500 3600 8100 3000 8100 3000 7500
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 3000 9300 3600 9300 3600 9900 3000 9900 3000 9300
+-6
+6 5625 1125 6375 9975
+6 5625 1125 6375 9975
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 5700 1200 6300 1200 6300 1800 5700 1800 5700 1200
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 5700 3300 6300 3300 6300 3900 5700 3900 5700 3300
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 5700 5400 6300 5400 6300 6000 5700 6000 5700 5400
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 5700 7500 6300 7500 6300 8100 5700 8100 5700 7500
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 5700 9300 6300 9300 6300 9900 5700 9900 5700 9300
+-6
+-6
+1 3 0 2 7 0 50 0 20 0.000 1 0.0000 1500 7200 300 300 1500 7200 1500 7500
+1 3 0 2 7 0 50 0 20 0.000 1 0.0000 1500 9000 300 300 1500 9000 1500 9300
+1 3 0 2 7 0 50 0 20 0.000 1 0.0000 4200 9000 300 300 4200 9000 4200 9300
+1 3 0 2 7 0 50 0 20 0.000 1 0.0000 4200 7200 300 300 4200 7200 4200 7500
+1 3 0 2 7 0 50 0 20 0.000 1 0.0000 1500 5100 300 300 1500 5100 1500 5400
+1 3 0 2 7 0 50 0 20 0.000 1 0.0000 1500 3000 300 300 1500 3000 1500 3300
+1 3 0 2 7 0 50 0 20 0.000 1 0.0000 1500 900 300 300 1500 900 1500 1200
+1 3 0 2 7 0 50 0 20 0.000 1 0.0000 4200 900 300 300 4200 900 4200 1200
+1 3 0 2 7 0 50 0 20 0.000 1 0.0000 4200 3000 300 300 4200 3000 4200 3300
+1 3 0 2 7 0 50 0 20 0.000 1 0.0000 4200 5100 300 300 4200 5100 4200 5400
+1 3 0 2 7 0 50 0 20 0.000 1 0.0000 6900 9000 300 300 6900 9000 6900 9300
+1 3 0 2 7 0 50 0 20 0.000 1 0.0000 6900 7200 300 300 6900 7200 6900 7500
+1 3 0 2 7 0 50 0 20 0.000 1 0.0000 6900 5100 300 300 6900 5100 6900 5400
+1 3 0 2 7 0 50 0 20 0.000 1 0.0000 6900 3000 300 300 6900 3000 6900 3300
+1 3 0 2 7 0 50 0 20 0.000 1 0.0000 6900 900 300 300 6900 900 6900 1200
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 7500 1200 7200
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 5400 1200 5100
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 3300 1200 3000
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 1200 1200 1050
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 1200 3900 1050
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 1500 3000 1500
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 3600 3000 1500
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 1500 3000 3600
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 3600 3000 3600
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 3600 3000 5700
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 5700 3000 3600
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 3300 3900 3000
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 3600 5700 1500
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 3600 5700 5700
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 5700 3000 5700
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 7800 3000 5700
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 5700 3000 7800
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 7800 3000 7800
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 9600 3000 7800
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 9300 1200 9000
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 7800 3000 9600
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 9600 3000 9600
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 9600 5700 9600
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 9300 3900 9000
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 9600 5700 7800
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 7800 5700 9600
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 7800 5700 7800
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 7800 5700 5700
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 7500 3900 7200
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 5700 5700 7800
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 5700 5700 5700
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 5700 5700 3600
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 3600 5700 3600
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 1500 5700 3600
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 1500 5700 1500
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 6300 1200 6600 1050
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 6300 3300 6600 3000
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 6300 5400 6600 5100
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 6300 9300 6600 9000
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 6300 7500 6600 7200
+2 1 0 3 0 0 100 0 5 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 5400 3900 5100
diff --git a/sourcecodes/bnt-master/docs/Figures/chmm5.gif b/sourcecodes/bnt-master/docs/Figures/chmm5.gif
new file mode 100644
index 00000000..f8259c4a
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/chmm5.gif
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/chmm5.influence.fig b/sourcecodes/bnt-master/docs/Figures/chmm5.influence.fig
new file mode 100644
index 00000000..62dc8add
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/chmm5.influence.fig
@@ -0,0 +1,200 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 5100 300 300 4200 5100 4200 5400
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 7200 300 300 4200 7200 4200 7500
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 9000 300 300 4200 9000 4200 9300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 900 300 300 4200 900 4200 1200
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 3000 300 300 4200 3000 4200 3300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 5100 300 300 1500 5100 1500 5400
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 7200 300 300 1500 7200 1500 7500
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 9000 300 300 1500 9000 1500 9300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 900 300 300 1500 900 1500 1200
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 3000 300 300 1500 3000 1500 3300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 5100 300 300 6900 5100 6900 5400
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 7200 300 300 6900 7200 6900 7500
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 9000 300 300 6900 9000 6900 9300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 900 300 300 6900 900 6900 1200
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 3000 300 300 6900 3000 6900 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 300 1200 900 1200 900 1800 300 1800 300 1200
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 300 3300 900 3300 900 3900 300 3900 300 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 300 5400 900 5400 900 6000 300 6000 300 5400
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 300 7500 900 7500 900 8100 300 8100 300 7500
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 300 9300 900 9300 900 9900 300 9900 300 9300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 3000 1200 3600 1200 3600 1800 3000 1800 3000 1200
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 3000 3300 3600 3300 3600 3900 3000 3900 3000 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 3000 5400 3600 5400 3600 6000 3000 6000 3000 5400
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 3000 7500 3600 7500 3600 8100 3000 8100 3000 7500
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 3000 9300 3600 9300 3600 9900 3000 9900 3000 9300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 5700 1200 6300 1200 6300 1800 5700 1800 5700 1200
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 5700 3300 6300 3300 6300 3900 5700 3900 5700 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 5700 5400 6300 5400 6300 6000 5700 6000 5700 5400
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 5700 7500 6300 7500 6300 8100 5700 8100 5700 7500
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 5700 9300 6300 9300 6300 9900 5700 9900 5700 9300
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 7800 3000 7800
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 5700 3000 7800
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 7800 3000 5700
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 7500 1200 7200
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 9300 1200 9000
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 9600 3000 9600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 7800 3000 9600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 9300 3900 9000
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 9600 5700 7800
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 9600 5700 9600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 7800 5700 9600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 7800 5700 7800
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 7800 5700 5700
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 7500 3900 7200
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 5700 5700 7800
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 7500 6600 7200
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 9300 6600 9000
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 5700 5700 5700
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 3600 5700 5700
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 5700 5700 3600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 5400 3900 5100
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 5400 6600 5100
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 5700 3000 5700
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 5700 3000 3600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 5400 1200 5100
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 3600 3000 5700
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 3600 3000 3600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 3600 3000 1500
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 3300 1200 3000
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 1500 3000 3600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 1200 1200 1050
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 1500 3000 1500
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 1200 3900 1050
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 1500 5700 1500
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 1500 5700 3600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 3600 5700 1500
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 3300 3900 3000
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 3300 6600 3000
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 3600 5700 3600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 1200 6600 1050
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 900 9600 3000 7800
+3 2 1 3 0 7 100 0 -1 8.000 0 1 0 4
+	2 0 6.00 180.00 360.00
+	 750 1950 2775 3750 975 5475 2925 5550
+	 0.000 -1.000 -1.000 0.000
+3 0 1 3 0 7 100 0 -1 8.000 0 1 0 3
+	2 0 6.00 180.00 360.00
+	 900 1875 3900 3450 5700 5550
+	 0.000 1.000 0.000
+4 0 0 100 0 0 25 0.0000 4 255 435 375 1575 A1\001
+4 0 0 100 0 0 25 0.0000 4 255 420 375 3750 B1\001
+4 0 0 100 0 0 25 0.0000 4 255 420 375 5775 C1\001
+4 0 0 100 0 0 25 0.0000 4 255 435 375 7950 D1\001
+4 0 0 100 0 0 25 0.0000 4 255 405 375 9750 E1\001
+4 0 0 100 0 0 25 0.0000 4 255 435 3075 1575 A2\001
+4 0 0 100 0 0 25 0.0000 4 255 420 3075 3750 B2\001
+4 0 0 100 0 0 25 0.0000 4 255 420 3075 5775 C2\001
+4 0 0 100 0 0 25 0.0000 4 255 435 3075 7875 D2\001
+4 0 0 100 0 0 25 0.0000 4 255 405 3075 9675 E2\001
+4 0 0 100 0 0 25 0.0000 4 255 435 5775 1575 A3\001
+4 0 0 100 0 0 25 0.0000 4 255 420 5700 3675 B3\001
+4 0 0 100 0 0 25 0.0000 4 255 420 5850 5775 C3\001
+4 0 0 100 0 0 25 0.0000 4 255 435 5775 7875 D3\001
+4 0 0 100 0 0 25 0.0000 4 255 405 5850 9675 E3\001
diff --git a/sourcecodes/bnt-master/docs/Figures/chmm5.jpg b/sourcecodes/bnt-master/docs/Figures/chmm5.jpg
new file mode 100644
index 00000000..2aa0de57
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/chmm5.jpg
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/chmm5.named.fig b/sourcecodes/bnt-master/docs/Figures/chmm5.named.fig
new file mode 100644
index 00000000..816d7429
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/chmm5.named.fig
@@ -0,0 +1,192 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 5100 300 300 4200 5100 4200 5400
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 7200 300 300 4200 7200 4200 7500
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 9000 300 300 4200 9000 4200 9300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 900 300 300 4200 900 4200 1200
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 3000 300 300 4200 3000 4200 3300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 5100 300 300 1500 5100 1500 5400
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 7200 300 300 1500 7200 1500 7500
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 9000 300 300 1500 9000 1500 9300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 900 300 300 1500 900 1500 1200
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 3000 300 300 1500 3000 1500 3300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 5100 300 300 6900 5100 6900 5400
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 7200 300 300 6900 7200 6900 7500
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 9000 300 300 6900 9000 6900 9300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 900 300 300 6900 900 6900 1200
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 3000 300 300 6900 3000 6900 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 300 1200 900 1200 900 1800 300 1800 300 1200
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 300 3300 900 3300 900 3900 300 3900 300 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 300 5400 900 5400 900 6000 300 6000 300 5400
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 300 7500 900 7500 900 8100 300 8100 300 7500
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 300 9300 900 9300 900 9900 300 9900 300 9300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 3000 1200 3600 1200 3600 1800 3000 1800 3000 1200
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 3000 3300 3600 3300 3600 3900 3000 3900 3000 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 3000 5400 3600 5400 3600 6000 3000 6000 3000 5400
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 3000 7500 3600 7500 3600 8100 3000 8100 3000 7500
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 3000 9300 3600 9300 3600 9900 3000 9900 3000 9300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 5700 1200 6300 1200 6300 1800 5700 1800 5700 1200
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 5700 3300 6300 3300 6300 3900 5700 3900 5700 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 5700 5400 6300 5400 6300 6000 5700 6000 5700 5400
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 5700 7500 6300 7500 6300 8100 5700 8100 5700 7500
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 5700 9300 6300 9300 6300 9900 5700 9900 5700 9300
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 7800 3000 7800
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 5700 3000 7800
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 7800 3000 5700
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 7500 1200 7200
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 9300 1200 9000
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 9600 3000 9600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 7800 3000 9600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 9300 3900 9000
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 9600 5700 7800
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 9600 5700 9600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 7800 5700 9600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 7800 5700 7800
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 7800 5700 5700
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 7500 3900 7200
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 5700 5700 7800
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 7500 6600 7200
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 9300 6600 9000
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 5700 5700 5700
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 3600 5700 5700
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 5700 5700 3600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 5400 3900 5100
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 5400 6600 5100
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 5700 3000 5700
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 5700 3000 3600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 5400 1200 5100
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 3600 3000 5700
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 3600 3000 3600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 3600 3000 1500
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 3300 1200 3000
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 1500 3000 3600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 1200 1200 1050
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 1500 3000 1500
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 1200 3900 1050
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 1500 5700 1500
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 1500 5700 3600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 3600 5700 1500
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 3300 3900 3000
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 3300 6600 3000
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 3600 5700 3600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 1200 6600 1050
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 900 9600 3000 7800
+4 0 0 100 0 0 25 0.0000 4 255 435 375 1575 A1\001
+4 0 0 100 0 0 25 0.0000 4 255 420 375 3750 B1\001
+4 0 0 100 0 0 25 0.0000 4 255 420 375 5775 C1\001
+4 0 0 100 0 0 25 0.0000 4 255 435 375 7950 D1\001
+4 0 0 100 0 0 25 0.0000 4 255 405 375 9750 E1\001
+4 0 0 100 0 0 25 0.0000 4 255 435 3075 1575 A2\001
+4 0 0 100 0 0 25 0.0000 4 255 420 3075 3750 B2\001
+4 0 0 100 0 0 25 0.0000 4 255 420 3075 5775 C2\001
+4 0 0 100 0 0 25 0.0000 4 255 435 3075 7875 D2\001
+4 0 0 100 0 0 25 0.0000 4 255 405 3075 9675 E2\001
+4 0 0 100 0 0 25 0.0000 4 255 435 5775 1575 A3\001
+4 0 0 100 0 0 25 0.0000 4 255 420 5700 3675 B3\001
+4 0 0 100 0 0 25 0.0000 4 255 420 5850 5775 C3\001
+4 0 0 100 0 0 25 0.0000 4 255 435 5775 7875 D3\001
+4 0 0 100 0 0 25 0.0000 4 255 405 5850 9675 E3\001
diff --git a/sourcecodes/bnt-master/docs/Figures/chmm5.small.fig b/sourcecodes/bnt-master/docs/Figures/chmm5.small.fig
new file mode 100644
index 00000000..8d49e5cc
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/chmm5.small.fig
@@ -0,0 +1,181 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+6 300 600 4500 9900
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 5100 300 300 4200 5100 4200 5400
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 7200 300 300 4200 7200 4200 7500
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 9000 300 300 4200 9000 4200 9300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 900 300 300 4200 900 4200 1200
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 3000 300 300 4200 3000 4200 3300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 5100 300 300 1500 5100 1500 5400
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 7200 300 300 1500 7200 1500 7500
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 9000 300 300 1500 9000 1500 9300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 900 300 300 1500 900 1500 1200
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 3000 300 300 1500 3000 1500 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 300 1200 900 1200 900 1800 300 1800 300 1200
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 300 3300 900 3300 900 3900 300 3900 300 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 300 5400 900 5400 900 6000 300 6000 300 5400
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 300 7500 900 7500 900 8100 300 8100 300 7500
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 300 9300 900 9300 900 9900 300 9900 300 9300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 3000 1200 3600 1200 3600 1800 3000 1800 3000 1200
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 3000 3300 3600 3300 3600 3900 3000 3900 3000 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 3000 5400 3600 5400 3600 6000 3000 6000 3000 5400
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 3000 7500 3600 7500 3600 8100 3000 8100 3000 7500
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 3000 9300 3600 9300 3600 9900 3000 9900 3000 9300
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 1200 3900 1050
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 3300 3900 3000
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 5400 3900 5100
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 7500 3900 7200
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 9300 3900 9000
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 1500 3000 3600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 3600 3000 1500
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 1500 3000 1500
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 3600 3000 5700
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 5700 3000 3600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 3600 3000 3600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 5700 3000 5700
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 5700 3000 7800
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 7800 3000 5700
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 7800 3000 7800
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 7800 3000 9600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 9600 3000 9600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 9600 3000 7800
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 1200 1200 1050
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 3300 1200 3000
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 5400 1200 5100
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 7500 1200 7200
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 9300 1200 9000
+-6
+6 3600 600 7200 9900
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 5100 300 300 6900 5100 6900 5400
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 7200 300 300 6900 7200 6900 7500
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 9000 300 300 6900 9000 6900 9300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 900 300 300 6900 900 6900 1200
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 3000 300 300 6900 3000 6900 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 5700 1200 6300 1200 6300 1800 5700 1800 5700 1200
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 5700 3300 6300 3300 6300 3900 5700 3900 5700 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 5700 5400 6300 5400 6300 6000 5700 6000 5700 5400
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 5700 7500 6300 7500 6300 8100 5700 8100 5700 7500
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 5700 9300 6300 9300 6300 9900 5700 9900 5700 9300
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 1200 6600 1050
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 3300 6600 3000
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 5400 6600 5100
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 7500 6600 7200
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 9300 6600 9000
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 1500 5700 3600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 3600 5700 1500
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 1500 5700 1500
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 3600 5700 5700
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 5700 5700 3600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 3600 5700 3600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 5700 5700 5700
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 5700 5700 7800
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 7800 5700 5700
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 7800 5700 7800
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 7800 5700 9600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 9600 5700 9600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 9600 5700 7800
+-6
diff --git a/sourcecodes/bnt-master/docs/Figures/chmm5_circle.fig b/sourcecodes/bnt-master/docs/Figures/chmm5_circle.fig
new file mode 100644
index 00000000..bda2e382
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/chmm5_circle.fig
@@ -0,0 +1,162 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 5100 300 300 4200 5100 4200 5400
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 7200 300 300 4200 7200 4200 7500
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 9000 300 300 4200 9000 4200 9300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 900 300 300 4200 900 4200 1200
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 3000 300 300 4200 3000 4200 3300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 5100 300 300 1500 5100 1500 5400
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 7200 300 300 1500 7200 1500 7500
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 9000 300 300 1500 9000 1500 9300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 900 300 300 1500 900 1500 1200
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 3000 300 300 1500 3000 1500 3300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 5100 300 300 6900 5100 6900 5400
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 7200 300 300 6900 7200 6900 7500
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 9000 300 300 6900 9000 6900 9300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 900 300 300 6900 900 6900 1200
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 3000 300 300 6900 3000 6900 3300
+1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 602 3534 300 300 602 3534 602 3834
+1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 602 5634 300 300 602 5634 602 5934
+1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 602 7734 300 300 602 7734 602 8034
+1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 602 9459 300 300 602 9459 602 9759
+1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 600 1425 300 300 600 1425 600 1725
+1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 3300 1500 300 300 3300 1500 3300 1800
+1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 3300 3600 300 300 3300 3600 3300 3900
+1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 3300 5700 300 300 3300 5700 3300 6000
+1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 3300 7800 300 300 3300 7800 3300 8100
+1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 3300 9600 300 300 3300 9600 3300 9900
+1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 6077 1509 300 300 6077 1509 6077 1809
+1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 6077 3534 300 300 6077 3534 6077 3834
+1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 6075 5700 300 300 6075 5700 6075 6000
+1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 6077 7809 300 300 6077 7809 6077 8109
+1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 6002 9534 300 300 6002 9534 6002 9834
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 7800 3000 7800
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 5700 3000 7800
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 7800 3000 5700
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 7500 1200 7200
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 9300 1200 9000
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 9600 3000 9600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 7800 3000 9600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 9300 3900 9000
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 9600 5700 7800
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 9600 5700 9600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 7800 5700 9600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 7800 5700 7800
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 7800 5700 5700
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 7500 3900 7200
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 5700 5700 7800
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 7500 6600 7200
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 9300 6600 9000
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 5700 5700 5700
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 3600 5700 5700
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 5700 5700 3600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 5400 3900 5100
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 5400 6600 5100
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 5700 3000 5700
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 5700 3000 3600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 5400 1200 5100
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 3600 3000 5700
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 3600 3000 3600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 3600 3000 1500
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 3300 1200 3000
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 1500 3000 3600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 1200 1200 1050
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 1500 3000 1500
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 1200 3900 1050
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 1500 5700 1500
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 1500 5700 3600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 3600 5700 1500
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 3300 3900 3000
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 3300 6600 3000
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 3600 5700 3600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 1200 6600 1050
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 900 9600 3000 7800
diff --git a/sourcecodes/bnt-master/docs/Figures/chmm5_nobold.fig b/sourcecodes/bnt-master/docs/Figures/chmm5_nobold.fig
new file mode 100644
index 00000000..d13942a8
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/chmm5_nobold.fig
@@ -0,0 +1,187 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+6 225 1125 975 9975
+6 225 1125 975 9975
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 300 1200 900 1200 900 1800 300 1800 300 1200
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 300 3300 900 3300 900 3900 300 3900 300 3300
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 300 5400 900 5400 900 6000 300 6000 300 5400
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 300 7500 900 7500 900 8100 300 8100 300 7500
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 300 9300 900 9300 900 9900 300 9900 300 9300
+-6
+-6
+6 2925 1125 3675 9975
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 3000 1200 3600 1200 3600 1800 3000 1800 3000 1200
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 3000 3300 3600 3300 3600 3900 3000 3900 3000 3300
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 3000 5400 3600 5400 3600 6000 3000 6000 3000 5400
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 3000 7500 3600 7500 3600 8100 3000 8100 3000 7500
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 3000 9300 3600 9300 3600 9900 3000 9900 3000 9300
+-6
+6 5625 1125 6375 9975
+6 5625 1125 6375 9975
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 5700 1200 6300 1200 6300 1800 5700 1800 5700 1200
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 5700 3300 6300 3300 6300 3900 5700 3900 5700 3300
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 5700 5400 6300 5400 6300 6000 5700 6000 5700 5400
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 5700 7500 6300 7500 6300 8100 5700 8100 5700 7500
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 5700 9300 6300 9300 6300 9900 5700 9900 5700 9300
+-6
+-6
+1 3 0 3 0 0 100 0 5 0.000 1 0.0000 6900 7200 300 300 6900 7200 6900 7500
+1 3 0 3 0 0 100 0 5 0.000 1 0.0000 6900 9000 300 300 6900 9000 6900 9300
+1 3 0 3 0 0 100 0 5 0.000 1 0.0000 4200 9000 300 300 4200 9000 4200 9300
+1 3 0 3 0 0 100 0 5 0.000 1 0.0000 4200 7200 300 300 4200 7200 4200 7500
+1 3 0 3 0 0 100 0 5 0.000 1 0.0000 4200 5100 300 300 4200 5100 4200 5400
+1 3 0 3 0 0 100 0 5 0.000 1 0.0000 4200 3000 300 300 4200 3000 4200 3300
+1 3 0 3 0 0 100 0 5 0.000 1 0.0000 4200 900 300 300 4200 900 4200 1200
+1 3 0 3 0 0 100 0 5 0.000 1 0.0000 1500 900 300 300 1500 900 1500 1200
+1 3 0 3 0 0 100 0 5 0.000 1 0.0000 1500 3000 300 300 1500 3000 1500 3300
+1 3 0 3 0 0 100 0 5 0.000 1 0.0000 1500 5100 300 300 1500 5100 1500 5400
+1 3 0 3 0 0 100 0 5 0.000 1 0.0000 1500 7200 300 300 1500 7200 1500 7500
+1 3 0 3 0 0 100 0 5 0.000 1 0.0000 1500 9000 300 300 1500 9000 1500 9300
+1 3 0 3 0 0 100 0 5 0.000 1 0.0000 6900 5100 300 300 6900 5100 6900 5400
+1 3 0 3 0 0 100 0 5 0.000 1 0.0000 6900 3000 300 300 6900 3000 6900 3300
+1 3 0 3 0 0 100 0 5 0.000 1 0.0000 6900 900 300 300 6900 900 6900 1200
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 7500 1200 7200
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 5400 1200 5100
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 3300 1200 3000
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 1200 1200 1050
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 1200 3900 1050
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 1500 3000 1500
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 3600 3000 1500
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 1500 3000 3600
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 3600 3000 3600
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 3600 3000 5700
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 5700 3000 3600
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 3300 3900 3000
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 3600 5700 1500
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 3600 5700 5700
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 5700 3000 5700
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 7800 3000 5700
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 5700 3000 7800
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 7800 3000 7800
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 9600 3000 7800
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 9300 1200 9000
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 7800 3000 9600
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 9600 3000 9600
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 9600 5700 9600
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 9300 3900 9000
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 9600 5700 7800
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 7800 5700 9600
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 7800 5700 7800
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 7800 5700 5700
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 7500 3900 7200
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 5700 5700 7800
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 5700 5700 5700
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 5700 5700 3600
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 3600 5700 3600
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 1500 5700 3600
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 1500 5700 1500
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 6300 1200 6600 1050
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 6300 3300 6600 3000
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 6300 5400 6600 5100
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 6300 9300 6600 9000
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 6300 7500 6600 7200
+2 1 0 3 0 0 100 0 5 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 5400 3900 5100
diff --git a/sourcecodes/bnt-master/docs/Figures/fa.eps b/sourcecodes/bnt-master/docs/Figures/fa.eps
new file mode 100644
index 00000000..03102fbf
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/fa.eps
@@ -0,0 +1,356 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: (ImageMagick)
+%%Title: (fa.eps)
+%%CreationDate: (Tue Nov 16 19:51:50 2004)
+%%BoundingBox: 0 0 131 161
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 1
+%%EndComments
+
+%%BeginDefaults
+%%EndDefaults
+
+%%BeginProlog
+%
+% Display a color image.  The image is displayed in color on
+% Postscript viewers or printers that support color, otherwise
+% it is displayed as grayscale.
+%
+/DirectClassPacket
+{
+  %
+  % Get a DirectClass packet.
+  %
+  % Parameters:
+  %   red.
+  %   green.
+  %   blue.
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile color_packet readhexstring pop pop
+  compression 0 eq
+  {
+    /number_pixels 3 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add 3 mul def
+  } ifelse
+  0 3 number_pixels 1 sub
+  {
+    pixels exch color_packet putinterval
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/DirectClassImage
+{
+  %
+  % Display a DirectClass image.
+  %
+  systemdict /colorimage known
+  {
+    columns rows 8
+    [
+      columns 0 0
+      rows neg 0 rows
+    ]
+    { DirectClassPacket } false 3 colorimage
+  }
+  {
+    %
+    % No colorimage operator;  convert to grayscale.
+    %
+    columns rows 8
+    [
+      columns 0 0
+      rows neg 0 rows
+    ]
+    { GrayDirectClassPacket } image
+  } ifelse
+} bind def
+
+/GrayDirectClassPacket
+{
+  %
+  % Get a DirectClass packet;  convert to grayscale.
+  %
+  % Parameters:
+  %   red
+  %   green
+  %   blue
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile color_packet readhexstring pop pop
+  color_packet 0 get 0.299 mul
+  color_packet 1 get 0.587 mul add
+  color_packet 2 get 0.114 mul add
+  cvi
+  /gray_packet exch def
+  compression 0 eq
+  {
+    /number_pixels 1 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add def
+  } ifelse
+  0 1 number_pixels 1 sub
+  {
+    pixels exch gray_packet put
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/GrayPseudoClassPacket
+{
+  %
+  % Get a PseudoClass packet;  convert to grayscale.
+  %
+  % Parameters:
+  %   index: index into the colormap.
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile byte readhexstring pop 0 get
+  /offset exch 3 mul def
+  /color_packet colormap offset 3 getinterval def
+  color_packet 0 get 0.299 mul
+  color_packet 1 get 0.587 mul add
+  color_packet 2 get 0.114 mul add
+  cvi
+  /gray_packet exch def
+  compression 0 eq
+  {
+    /number_pixels 1 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add def
+  } ifelse
+  0 1 number_pixels 1 sub
+  {
+    pixels exch gray_packet put
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassPacket
+{
+  %
+  % Get a PseudoClass packet.
+  %
+  % Parameters:
+  %   index: index into the colormap.
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile byte readhexstring pop 0 get
+  /offset exch 3 mul def
+  /color_packet colormap offset 3 getinterval def
+  compression 0 eq
+  {
+    /number_pixels 3 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add 3 mul def
+  } ifelse
+  0 3 number_pixels 1 sub
+  {
+    pixels exch color_packet putinterval
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassImage
+{
+  %
+  % Display a PseudoClass image.
+  %
+  % Parameters:
+  %   class: 0-PseudoClass or 1-Grayscale.
+  %
+  currentfile buffer readline pop
+  token pop /class exch def pop
+  class 0 gt
+  {
+    currentfile buffer readline pop
+    token pop /depth exch def pop
+    /grays columns 8 add depth sub depth mul 8 idiv string def
+    columns rows depth
+    [
+      columns 0 0
+      rows neg 0 rows
+    ]
+    { currentfile grays readhexstring pop } image
+  }
+  {
+    %
+    % Parameters:
+    %   colors: number of colors in the colormap.
+    %   colormap: red, green, blue color packets.
+    %
+    currentfile buffer readline pop
+    token pop /colors exch def pop
+    /colors colors 3 mul def
+    /colormap colors string def
+    currentfile colormap readhexstring pop pop
+    systemdict /colorimage known
+    {
+      columns rows 8
+      [
+        columns 0 0
+        rows neg 0 rows
+      ]
+      { PseudoClassPacket } false 3 colorimage
+    }
+    {
+      %
+      % No colorimage operator;  convert to grayscale.
+      %
+      columns rows 8
+      [
+        columns 0 0
+        rows neg 0 rows
+      ]
+      { GrayPseudoClassPacket } image
+    } ifelse
+  } ifelse
+} bind def
+
+/DisplayImage
+{
+  %
+  % Display a DirectClass or PseudoClass image.
+  %
+  % Parameters:
+  %   x & y translation.
+  %   x & y scale.
+  %   label pointsize.
+  %   image label.
+  %   image columns & rows.
+  %   class: 0-DirectClass or 1-PseudoClass.
+  %   compression: 0-none or 1-RunlengthEncoded.
+  %   hex color packets.
+  %
+  gsave
+  /buffer 512 string def
+  /byte 1 string def
+  /color_packet 3 string def
+  /pixels 768 string def
+
+  currentfile buffer readline pop
+  token pop /x exch def
+  token pop /y exch def pop
+  x y translate
+  currentfile buffer readline pop
+  token pop /x exch def
+  token pop /y exch def pop
+  currentfile buffer readline pop
+  token pop /pointsize exch def pop
+  /Times-Roman findfont pointsize scalefont setfont
+  x y scale
+  currentfile buffer readline pop
+  token pop /columns exch def
+  token pop /rows exch def pop
+  currentfile buffer readline pop
+  token pop /class exch def pop
+  currentfile buffer readline pop
+  token pop /compression exch def pop
+  class 0 gt { PseudoClassImage } { DirectClassImage } ifelse
+  grestore
+} bind def
+%%EndProlog
+%%Page:  1 1
+%%PageBoundingBox: 0 0 131 161
+userdict begin
+DisplayImage
+0 0
+131 161
+12.000000
+131 161
+1
+1
+1
+1
+ffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffff
+ffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffff
+ffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffff
+ffffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffffff
+ffffffffffffffffe0fffffffffff001ffffffffffffffffffe0ffffffffff8ffe3fffff
+ffffffffffffe0fffffffffc7fffc7ffffffffffffffffe0fffffffffbfffffbffffffff
+ffffffffe0ffffffffe7fffffcffffffffffffffffe0ffffffffdfffffff7fffffffffff
+ffffe0ffffffffbfffffffbfffffffffffffffe0ffffffff7fffffffdfffffffffffffff
+e0fffffffeffffffffefffffffffffffffe0fffffffeffffffffefffffffffffffffe0ff
+fffffdfffffffff7ffffffffffffffe0fffffffdfe31fffff7ffffffffffffffe0ffffff
+fbff7bfffffbffffffffffffffe0fffffffbffb7fffffbffffffffffffffe0fffffffbff
+8ffffffbffffffffffffffe0fffffffbffcffffffbffffffffffffffe0fffffffbffa7ff
+fffbffffffffffffffe0fffffffbffb7fffffbffffffffffffffe0fffffffbff7bfffffb
+ffffffffffffffe0fffffffdfe31fffff7ffffffffffffffe0fffffffdfffffffff7ffff
+ffffffffffe0fffffffeffffffffefffffffffffffffe0fffffffeffffffffefffffffff
+ffffffe0ffffffff7fffffffdfffffffffffffffe0ffffffffbfffffffbfffffffffffff
+ffe0ffffffffdfffffff7fffffffffffffffe0ffffffffe7fffffcffffffffffffffffe0
+fffffffffbfffffbffffffffffffffffe0fffffffffc7fffc7ffffffffffffffffe0ffff
+ffffff8ffe3fffffffffffffffffe0fffffffffff001ffffffffffffffffffe0ffffffff
+ffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffff
+ffffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffbfff
+ffffffffffffffffe0ffffffffffffbfffffffffffffffffffe0ffffffffffffbfffffff
+ffffffffffffe0ffffffffffffbfffffffffffffffffffe0ffffffffffffbfffffffffff
+ffffffffe0ffffffffffffbfffffffffffffffffffe0ffffffffffffbfffffffffffffff
+ffffe0ffffffffffffbfffffffffffffffffffe0ffffffffffffbfffffffffffffffffff
+e0ffffffffffffbfffffffffffffffffffe0ffffffffffffbfffffffffffffffffffe0ff
+ffffffffffbfffffffffffffffffffe0ffffffffffffbfffffffffffffffffffe0ffffff
+ffffffbfffffffffffffffffffe0ffffffffffffbfffffffffffffffffffe0ffffffffff
+ffbfffffffffffffffffffe0ffffffffffffbfffffffffffffffffffe0ffffffffffffbf
+ffffffffffffffffffe0ffffffffffffbfffffffffffffffffffe0ffffffffffffbfffff
+ffffffffffffffe0ffffffffffffbfffffffffffffffffffe0ffffffffffffbfffffffff
+ffffffffffe0ffffffffffffbfffffffffffffffffffe0ffffffffffffbfffffffffffff
+ffffffe0ffffffffffffbfffffffffffffffffffe0fffffffffffeafffffffffffffffff
+ffe0fffffffffffeafffffffffffffffffffe0fffffffffffe9fffffffffffffffffffe0
+ffffffffffff1fffffffffffffffffffe0ffffffffffff1fffffffffffffffffffe0ffff
+ffffffff1fffffffffffffffffffe0ffffffffffff3fffffffffffffffffffe0ffffffff
+ffffbfffffffffffffffffffe0ffffffffffffbfffffffffffffffffffe0ffffffffffff
+ffffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffffff
+ffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffffffffff
+ffffffffffffe0ffffffffffffffffffffffffffffffffe0fffffffffff001ffffffffff
+ffffffffe0ffffffffff8ffe3fffffffffffffffffe0fffffffffc6eeec7ffffffffffff
+ffffe0fffffffffbfffffbffffffffffffffffe0ffffffffe3bbfbb8ffffffffffffffff
+e0ffffffffdfffffff7fffffffffffffffe0ffffffffaeeeeeeebfffffffffffffffe0ff
+ffffff7fffffffdfffffffffffffffe0fffffffebfbfbfbfafffffffffffffffe0ffffff
+feffffffffefffffffffffffffe0fffffffceeeeeeeee7ffffffffffffffe0fffffffdfe
+38fffff7ffffffffffffffe0fffffffbfb79fbfbfbffffffffffffffe0fffffffbffbbff
+fffbffffffffffffffe0fffffffaeecaeeeeebffffffffffffffe0fffffffbffc7fffffb
+ffffffffffffffe0fffffffbbfafbfbfbbffffffffffffffe0fffffffbffeffffffbffff
+ffffffffffe0fffffffaeeeeeeeeebffffffffffffffe0fffffffdffc7fffff7ffffffff
+ffffffe0fffffffdfbbbfbbbf7ffffffffffffffe0fffffffeffffffffefffffffffffff
+ffe0fffffffeeeeeeeeeefffffffffffffffe0ffffffff7fffffffdfffffffffffffffe0
+ffffffffbfbfbfbfbfffffffffffffffe0ffffffffdfffffff7fffffffffffffffe0ffff
+ffffe6eeeeecffffffffffffffffe0fffffffffbfffffbffffffffffffffffe0ffffffff
+fc7bfbc7ffffffffffffffffe0ffffffffff8ffe3fffffffffffffffffe0fffffffffff0
+01ffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffffff
+ffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffffffffff
+ffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffff
+ffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffff
+ffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffff
+e0ffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ff
+ffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffff
+ffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffff
+ffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffff
+ffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ff80ffffffffbfffcf
+ffdff01c5f7fffe0ffdeffffffffbfffeffffff5c99f7fffe0ffdffffbffff5fffefffff
+f5ebdebfffe0ffdde790cd3f5d3ce9989c6dc7febfffe0ffc1db6bb67eeedb6db6db6c17
+fddfffe0ffdde37bb6fe0edc6d33d9edf7fc1fffe0ffdfdb7bb6feeedb6d7cde5dfbdddf
+ffe0ffdfdb6bb6fdf6db6e76db5df99befffe0ff87e59ccc78e04c86f188d8fc31c7ffe0
+fffffffffffffffffeffffffffffffffe0fffffffffffffffffdffffffffffffffe0ffff
+fffffffffffff9ffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffff
+ffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffff
+ffffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffffff
+ffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffffffffff
+ffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffff
+ffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffff
+ffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffff
+e0
+end
+%%PageTrailer
+%%Trailer
+%%EOF
diff --git a/sourcecodes/bnt-master/docs/Figures/fa.fig b/sourcecodes/bnt-master/docs/Figures/fa.fig
new file mode 100644
index 00000000..db4bec4a
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/fa.fig
@@ -0,0 +1,16 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 900 1950 300 225 900 1950 1200 2175
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 900 825 300 225 900 825 1200 1050
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 1125 900 1650
+4 0 -1 0 0 0 12 0.0000 4 135 135 825 900 X\001
+4 0 -1 0 0 0 12 0.0000 4 135 135 825 2025 Y\001
diff --git a/sourcecodes/bnt-master/docs/Figures/fa.gif b/sourcecodes/bnt-master/docs/Figures/fa.gif
new file mode 100644
index 00000000..420c1517
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/fa.gif
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/fa_caption.fig b/sourcecodes/bnt-master/docs/Figures/fa_caption.fig
new file mode 100644
index 00000000..71cd37f2
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/fa_caption.fig
@@ -0,0 +1,13 @@
+#FIG 3.1
+Landscape
+Center
+Inches
+1200 2
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 900 1950 300 225 900 1950 1200 2175
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 900 825 300 225 900 825 1200 1050
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 1125 900 1650
+4 0 -1 0 0 0 12 0.0000 4 135 135 750 2025 Y\001
+4 0 -1 0 0 0 12 0.0000 4 135 120 750 900 X\001
+4 0 -1 0 0 0 12 0.0000 4 180 1620 300 2625 Factor Analysis/PCA\001
diff --git a/sourcecodes/bnt-master/docs/Figures/fa_discrete.fig b/sourcecodes/bnt-master/docs/Figures/fa_discrete.fig
new file mode 100644
index 00000000..b5be4ca5
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/fa_discrete.fig
@@ -0,0 +1,43 @@
+#FIG 3.2
+Portrait
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 975 600 300 225 975 600 1275 825
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 2100 600 300 225 2100 600 2400 825
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 825 525 1425
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 825 1425 1425
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2025 825 600 1425
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2025 825 1425 1425
+2 2 0 1 -1 0 0 0 2 0.000 0 0 7 0 0 5
+	 300 1425 750 1425 750 1875 300 1875 300 1425
+2 2 0 1 -1 0 0 0 2 0.000 0 0 7 0 0 5
+	 1275 1425 1725 1425 1725 1875 1275 1875 1275 1425
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 825 3000 1425
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2025 825 3000 1425
+2 2 0 1 0 0 100 0 2 3.000 0 0 7 0 0 5
+	 2775 1425 3225 1425 3225 1875 2775 1875 2775 1425
+4 0 -1 0 0 0 24 0.0000 4 30 270 1350 750 ...\001
+4 0 -1 0 0 0 12 0.0000 4 135 210 1350 1725 R2\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 825 675 X1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 1950 675 Xn\001
+4 0 -1 0 0 0 12 0.0000 4 135 210 375 1725 R1\001
+4 0 -1 0 0 0 12 0.0000 4 180 1920 600 2325 Discrete Factor Analysis\001
+4 0 -1 0 0 0 24 0.0000 4 30 270 2100 1650 ...\001
+4 0 0 100 0 -1 12 0.0000 4 135 210 2850 1725 Rn\001
diff --git a/sourcecodes/bnt-master/docs/Figures/fa_discrete.gif b/sourcecodes/bnt-master/docs/Figures/fa_discrete.gif
new file mode 100644
index 00000000..54a8bbfb
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/fa_discrete.gif
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/fa_discrete_single.fig b/sourcecodes/bnt-master/docs/Figures/fa_discrete_single.fig
new file mode 100644
index 00000000..225a741c
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/fa_discrete_single.fig
@@ -0,0 +1,18 @@
+#FIG 3.2
+Portrait
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+1 1 0 1 0 7 100 0 -1 0.000 1 0.0000 825 375 300 225 825 375 1125 600
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 600 825 1275
+2 2 0 1 0 0 100 0 2 0.000 0 0 7 0 0 5
+	 600 1275 975 1275 975 1725 600 1725 600 1275
+4 0 -1 0 0 0 12 0.0000 4 135 120 750 1575 R\001
+4 0 -1 0 0 0 12 0.0000 4 135 135 750 450 X\001
+4 0 0 100 0 0 12 0.0000 4 180 1785 300 2025 discrete factor analysis\001
diff --git a/sourcecodes/bnt-master/docs/Figures/fa_regular.fig b/sourcecodes/bnt-master/docs/Figures/fa_regular.fig
new file mode 100644
index 00000000..db30e0a0
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/fa_regular.fig
@@ -0,0 +1,36 @@
+#FIG 3.1
+Landscape
+Center
+Inches
+1200 2
+6 225 300 3450 3150
+1 3 0 1 -1 7 0 0 -1 0.000 1 0.0000 999 1082 335 335 999 1082 1149 1382
+1 3 0 1 -1 7 0 0 -1 0.000 1 0.0000 2124 1082 335 335 2124 1082 2274 1382
+1 3 0 1 -1 0 0 0 2 0.000 1 0.0000 624 2807 335 335 624 2807 774 3107
+1 3 0 1 -1 0 0 0 2 0.000 1 0.0000 1674 2807 335 335 1674 2807 1824 3107
+1 3 0 1 -1 0 0 0 2 0.000 1 0.0000 2874 2807 335 335 2874 2807 3024 3107
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 1425 675 2475
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 975 1425 1575 2400
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 975 1425 2775 2475
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1950 1425 750 2475
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1950 1425 1650 2325
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1950 1425 2775 2400
+4 0 -1 0 0 0 24 0.0000 4 330 3225 225 600 regular factor analysis\001
+-6
+4 0 -1 0 0 0 12 0.0000 4 135 210 825 1200 X1\001
+4 0 -1 0 0 0 12 0.0000 4 135 210 1950 1200 X2\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 525 2925 Y1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 1500 2850 Y2\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 2700 2850 Y3\001
diff --git a/sourcecodes/bnt-master/docs/Figures/fa_regular.gif b/sourcecodes/bnt-master/docs/Figures/fa_regular.gif
new file mode 100644
index 00000000..bb506a59
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/fa_regular.gif
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/fa_scalar.eps b/sourcecodes/bnt-master/docs/Figures/fa_scalar.eps
new file mode 100644
index 00000000..ccdc01cc
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/fa_scalar.eps
@@ -0,0 +1,414 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: (ImageMagick)
+%%Title: (fa_scalar.eps)
+%%CreationDate: (Tue Nov 16 19:52:00 2004)
+%%BoundingBox: 0 0 246 156
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 1
+%%EndComments
+
+%%BeginDefaults
+%%EndDefaults
+
+%%BeginProlog
+%
+% Display a color image.  The image is displayed in color on
+% Postscript viewers or printers that support color, otherwise
+% it is displayed as grayscale.
+%
+/DirectClassPacket
+{
+  %
+  % Get a DirectClass packet.
+  %
+  % Parameters:
+  %   red.
+  %   green.
+  %   blue.
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile color_packet readhexstring pop pop
+  compression 0 eq
+  {
+    /number_pixels 3 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add 3 mul def
+  } ifelse
+  0 3 number_pixels 1 sub
+  {
+    pixels exch color_packet putinterval
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/DirectClassImage
+{
+  %
+  % Display a DirectClass image.
+  %
+  systemdict /colorimage known
+  {
+    columns rows 8
+    [
+      columns 0 0
+      rows neg 0 rows
+    ]
+    { DirectClassPacket } false 3 colorimage
+  }
+  {
+    %
+    % No colorimage operator;  convert to grayscale.
+    %
+    columns rows 8
+    [
+      columns 0 0
+      rows neg 0 rows
+    ]
+    { GrayDirectClassPacket } image
+  } ifelse
+} bind def
+
+/GrayDirectClassPacket
+{
+  %
+  % Get a DirectClass packet;  convert to grayscale.
+  %
+  % Parameters:
+  %   red
+  %   green
+  %   blue
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile color_packet readhexstring pop pop
+  color_packet 0 get 0.299 mul
+  color_packet 1 get 0.587 mul add
+  color_packet 2 get 0.114 mul add
+  cvi
+  /gray_packet exch def
+  compression 0 eq
+  {
+    /number_pixels 1 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add def
+  } ifelse
+  0 1 number_pixels 1 sub
+  {
+    pixels exch gray_packet put
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/GrayPseudoClassPacket
+{
+  %
+  % Get a PseudoClass packet;  convert to grayscale.
+  %
+  % Parameters:
+  %   index: index into the colormap.
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile byte readhexstring pop 0 get
+  /offset exch 3 mul def
+  /color_packet colormap offset 3 getinterval def
+  color_packet 0 get 0.299 mul
+  color_packet 1 get 0.587 mul add
+  color_packet 2 get 0.114 mul add
+  cvi
+  /gray_packet exch def
+  compression 0 eq
+  {
+    /number_pixels 1 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add def
+  } ifelse
+  0 1 number_pixels 1 sub
+  {
+    pixels exch gray_packet put
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassPacket
+{
+  %
+  % Get a PseudoClass packet.
+  %
+  % Parameters:
+  %   index: index into the colormap.
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile byte readhexstring pop 0 get
+  /offset exch 3 mul def
+  /color_packet colormap offset 3 getinterval def
+  compression 0 eq
+  {
+    /number_pixels 3 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add 3 mul def
+  } ifelse
+  0 3 number_pixels 1 sub
+  {
+    pixels exch color_packet putinterval
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassImage
+{
+  %
+  % Display a PseudoClass image.
+  %
+  % Parameters:
+  %   class: 0-PseudoClass or 1-Grayscale.
+  %
+  currentfile buffer readline pop
+  token pop /class exch def pop
+  class 0 gt
+  {
+    currentfile buffer readline pop
+    token pop /depth exch def pop
+    /grays columns 8 add depth sub depth mul 8 idiv string def
+    columns rows depth
+    [
+      columns 0 0
+      rows neg 0 rows
+    ]
+    { currentfile grays readhexstring pop } image
+  }
+  {
+    %
+    % Parameters:
+    %   colors: number of colors in the colormap.
+    %   colormap: red, green, blue color packets.
+    %
+    currentfile buffer readline pop
+    token pop /colors exch def pop
+    /colors colors 3 mul def
+    /colormap colors string def
+    currentfile colormap readhexstring pop pop
+    systemdict /colorimage known
+    {
+      columns rows 8
+      [
+        columns 0 0
+        rows neg 0 rows
+      ]
+      { PseudoClassPacket } false 3 colorimage
+    }
+    {
+      %
+      % No colorimage operator;  convert to grayscale.
+      %
+      columns rows 8
+      [
+        columns 0 0
+        rows neg 0 rows
+      ]
+      { GrayPseudoClassPacket } image
+    } ifelse
+  } ifelse
+} bind def
+
+/DisplayImage
+{
+  %
+  % Display a DirectClass or PseudoClass image.
+  %
+  % Parameters:
+  %   x & y translation.
+  %   x & y scale.
+  %   label pointsize.
+  %   image label.
+  %   image columns & rows.
+  %   class: 0-DirectClass or 1-PseudoClass.
+  %   compression: 0-none or 1-RunlengthEncoded.
+  %   hex color packets.
+  %
+  gsave
+  /buffer 512 string def
+  /byte 1 string def
+  /color_packet 3 string def
+  /pixels 768 string def
+
+  currentfile buffer readline pop
+  token pop /x exch def
+  token pop /y exch def pop
+  x y translate
+  currentfile buffer readline pop
+  token pop /x exch def
+  token pop /y exch def pop
+  currentfile buffer readline pop
+  token pop /pointsize exch def pop
+  /Times-Roman findfont pointsize scalefont setfont
+  x y scale
+  currentfile buffer readline pop
+  token pop /columns exch def
+  token pop /rows exch def pop
+  currentfile buffer readline pop
+  token pop /class exch def pop
+  currentfile buffer readline pop
+  token pop /compression exch def pop
+  class 0 gt { PseudoClassImage } { DirectClassImage } ifelse
+  grestore
+} bind def
+%%EndProlog
+%%Page:  1 1
+%%PageBoundingBox: 0 0 246 156
+userdict begin
+DisplayImage
+0 0
+246 156
+12.000000
+246 156
+1
+1
+1
+1
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffff800fff
+fffffffffffffffffff800fffffffffffffffffffffcfffffffffffc7ff1ffffffffffff
+ffffffffc7ff1ffffffffffffffffffffcffffffffffe3fffe3ffffffffffffffffffe3f
+ffe3fffffffffffffffffffcffffffffffdfffffdffffffffffffffffffdfffffdffffff
+fffffffffffffcffffffffff3fffffe7fffffffffffffffff3fffffe7fffffffffffffff
+fffcfffffffffefffffffbffffffffffffffffefffffffbffffffffffffffffffcffffff
+fffdfffffffdffffffffffffffffdfffffffdffffffffffffffffffcfffffffffbffffff
+feffffffffffffffffbfffffffeffffffffffffffffffcfffffffff7ffffffff7fffffff
+ffffffff7ffffffff7fffffffffffffffffcfffffffff7ffffffff7fffffffffffffff7f
+fffffff7fffffffffffffffffcffffffffefffffffffbffffffffffffffefffffffffbff
+fffffffffffffffcffffffffefff8c6fffbffffffffffffffeff18fffffbffffffffffff
+fffffcffffffffdfffdecfffdffffffffffffffdffbdfffffdfffffffffffffffffcffff
+ffffdfffedafffdffffffffffffffdffdbfffffdfffffffffffffffffcffffffffdfffe3
+efffdffffffffffffffdffc74ffffdfffffffffffffffffcffffffffdffff3efffdfffff
+fffffffffdffe7b7fffdfffffffffffffffffcffffffffdfffe9efffdffffffffffffffd
+ffd3b7fffdfffffffffffffffffcffffffffdfffedefffdffffffffffffffdffdbb7fffd
+fffffffffffffffffcffffffffdfffdeefffdffffffffffffffdffbdb7fffdffffffffff
+fffffffcffffffffefff8c47ffbffffffffffffffeff1813fffbfffffffffffffffffcff
+ffffffefffffffffbffffffffffffffefffffffffbfffffffffffffffffcfffffffff7ff
+ffffff7fffffffffffffff7ffffffff7fffffffffffffffffcfffffffff7ffffffff7fff
+ffffffffffff7ffffffff7fffffffffffffffffcfffffffffbfffffffeffffff3cf3ffff
+ffbfffffffeffffffffffffffffffcfffffffffdfffffffdffffff3cf3ffffffdfffffff
+dffffffffffffffffffcfffffffffefffffff9ffffffffffffffffefffffffbfffffffff
+fffffffffcffffffffff3fffffe67ffffffffffffffff3fffffe7ffffffffffffffffffc
+ffffffffffdfffffdf8ffffffffffffffffdfffffdfffffffffffffffffffcffffffffff
+e3fffe3ff3fffffffffffffffe3fffe3fffffffffffffffffffcfffffffffffc7ff1fffc
+7fffffffffffffffc7ff1ffffffffffffffffffffcfffffffffff7800f7fff9fffffffff
+fffffff000f7fffffffffffffffffffcfffffffffff7ffff7fffe3ffffffffffffff87ff
+fbfffffffffffffffffffcffffffffffefffffbffffcfffffffffffffe5ffffdffffffff
+fffffffffffcffffffffffefffffbfffff1ffffffffffff13ffffeffffffffffffffffff
+fcffffffffffdfffffdfffffe7ffffffffff8effffff7ffffffffffffffffffcffffffff
+ffdfffffdffffff8fffffffffc7dffffffbffffffffffffffffffcffffffffffdfffffef
+ffffff3ffffffff3f3ffffffdffffffffffffffffffcffffffffffbfffffefffffffc7ff
+ffff8fefffffffeffffffffffffffffffcffffffffffbffffff7fffffff9fffffc7f9fff
+fffff7fffffffffffffffffcffffffffffbffffff7fffffffe3fffe3ff7ffffffffbffff
+fffffffffffffcffffffffff7ffffffbffffffffcfff9ffcfffffffffdffffffffffffff
+fffcffffffffff7ffffffbfffffffff1fc7ffbfffffffffefffffffffffffffffcffffff
+fffefffffffdfffffffffe63fff7ffffffffff7ffffffffffffffffcfffffffffeffffff
+fdffffffffff0fffcfffffffffffbffffffffffffffffcfffffffffefffffffeffffffff
+fcf3ffbfffffffffffdffffffffffffffffcfffffffffdfffffffeffffffffe3fc7e7fff
+ffffffffeffffffffffffffffcfffffffffdffffffff7fffffff1fff9dfffffffffffff7
+fffffffffffffffcfffffffffdffffffff7ffffff8ffffe3fffffffffffffbffffffffff
+fffffcfffffffffbffffffffbfffffe7ffffecfffffffffffffdfffffffffffffffcffff
+fffffbffffffffbfffff1fffffdf1ffffffffffffefffffffffffffffcfffffffff7ffff
+ffffdffff8ffffff3fe7ffffffffffff7ffffffffffffffcfffffffff7ffffffffdfffc7
+fffffefff8ffffffffffffbffffffffffffffcfffffffff7ffffffffefff3ffffff9ffff
+3fffffffffffdffffffffffffffcffffffffefffffffffeff8fffffff7ffffc7ffffffff
+ffeffffffffffffffcffffffffeffffffffff7c7ffffffcffffff9fffffffffff7ffffff
+fffffffcffffffffeffffffffff63fffffffbffffffe3ffffffffffbfffffffffffffcff
+ffffffdffffffffff9ffffffff7fffffffcffffffffffdfffffffffffffcffffffffdfff
+ffffffc3fffffffcfffffffff1fffffffffefffffffffffffcffffffffbffffffffe3dff
+ffffdbfffffffffe7fffffffff7ffffffffffffcffffffffbffffffff1fdffffffa7ffff
+ffffff8fffffffffbffffffffffffcfffffffebfffffffcffebfffff5ffffffffffff3ff
+ffffffdffffffffffffcfffffffe7ffffffe3ffebffffe27fffffffffffc7fffffffefff
+fffffffffcfffffffe5ffffff1fffd3ffffe9fffffffffffff9ffffffff6fffffffffffc
+fffffffe3fffff8ffffe5ffffc7fffffffffffffe3fffffffb7ffffffffffcfffffffcbf
+fffe7fffff1ffff9fffffffffffffffcfffffffd7ffffffffffcfffffffc7fff71ffffff
+1fffffffffffffffffffff1ffffff6bffffffffffcfffffffcfffc8fffffff9fffffffff
+ffffffffffffe7fffff93ffffffffffcfffffffcfff07fffffffcfffffffffffffffffff
+fff8fffffe1ffffffffffcfffffffdffc3ffffffffefffffffffffffffffffffff3fffff
+9ffffffffffcffffffffff803fffffffffffffffffffffffffffffffc7ffffefffffffff
+fcffffff001fffffffffffff800ffffffffffffffffffff9dffff800fffffffcfffff8ff
+e3fffffffffffc7ff1fffffffffffffffffffe27ffc7ff1ffffffcffffc6eeec7fffffff
+ffe377763fffffffffffffffffffcbfe377763fffffcffffbfffffbfffffffffdfffffdf
+ffffffffffffffffff00fdfffffdfffffcfffe3bbfbb8fffffffff1ddfddc7ffffffffff
+fffffffff871ddfddc7ffffcfffdfffffff7fffffffefffffffbffffffffffffffffffff
+efffffffbffffcfffaeeeeeeebfffffffd77777775ffffffffffffffffffffd77777775f
+fffcfff7fffffffdfffffffbfffffffeffffffffffffffffffffbfffffffeffffcffebfb
+fbfbfafffffff5fdfdfdfd7fffffffffffffffffff5fdfdfdfd7fffcffeffffffffeffff
+fff7ffffffff7fffffffffffffffffff7ffffffff7fffcffceeeeeeeee7fffffe7777777
+773ffffffffffffffffffe7777777773fffcffdfe38dffff7fffffeff1c47fffbfffffff
+fffffffffffefe38fffffbfffcffbfb799bfbfbfffffdfdbcb9fdfdfffffffffffffffff
+fdfd7dfdfdfdfffcffbffbb5ffffbfffffdffddfbfffdfffff3cf3fffffffffdffbbffff
+fdfffcffaeecaceeeebfffffd7765737775fffff3cf3fffffffffd7753417775fffcffbf
+fc7dffffbfffffdffe3f7fffdffffffffffffffffffdffc7b6fffdfffcffbbfaf9fbfbbf
+ffffddfd7cfdfddffffffffffffffffffddfcf96dfddfffcffbffefdffffbfffffdfff7d
+ffffdffffffffffffffffffdffefb6fffdfffcffaeeeeceeeebfffffd7777337775fffff
+fffffffffffffd7767367775fffcffdffc78ffff7fffffeffe383fffbfffffffffffffff
+fffeffc7127ffbfffcffdfbbbfbbbf7fffffefdddfdddfbffffffffffffffffffefdddfd
+ddfbfffcffeffffffffefffffff7ffffffff7fffffffffffffffffff7ffffffff7fffcff
+eeeeeeeeeefffffff7777777777fffffffffffffffffff7777777777fffcfff7fffffffd
+fffffffbfffffffeffffffffffffffffffffbfffffffeffffcfffbfbfbfbfbfffffffdfd
+fdfdfdffffffffffffffffffffdfdfdfdfdffffcfffdfffffff7fffffffefffffffbffff
+ffffffffffffffffefffffffbffffcfffe6eeeeecfffffffff37777767ffffffffffffff
+fffffff37777767ffffcffffbfffffbfffffffffdfffffdffffffffffffffffffffffdff
+fffdfffffcffffc7bfbc7fffffffffe3dfde3ffffffffffffffffffffffe3dfde3fffffc
+fffff8ffe3fffffffffffc7ff1ffffffffffffffffffffffffc7ff1ffffffcffffff001f
+ffffffffffff800ffffffffffffffffffffffffff800fffffffcffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffff
+fffffffffffff80fffffffffffe7ffeffffffffffffffffffffffffffcffffffffffffff
+fffdeffffffffffff7fffffffffffffffffffffffffffffcfffffffffffffffffdffffbf
+fffffff7fffffffffffffffffffffffffffffcfffffffffffffffffdde790cd3e69e74cc
+4e3ffffffffffffffffffffffffcfffffffffffffffffc1db6bb67db6db6db6dbfffffff
+fffffffffffffffffcfffffffffffffffffdde37bb6fe36e3699ecffffffffffffffffff
+fffffffcfffffffffffffffffdfdb7bb6fdb6db6be6f3ffffffffffffffffffffffffcff
+fffffffffffffffdfdb6bb6fdb6db73b6dbffffffffffffffffffffffffcffffffffffff
+fffff87e59ccc7e4264378c47ffffffffffffffffffffffffcffffffffffffffffffffff
+ffffffffff7ffffffffffffffffffffffffffffcfffffffffffffffffffffffffffffffe
+fffffffffffffffffffffffffffffcfffffffffffffffffffffffffffffffcffffffffff
+fffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffc
+end
+%%PageTrailer
+%%Trailer
+%%EOF
diff --git a/sourcecodes/bnt-master/docs/Figures/fa_scalar.fig b/sourcecodes/bnt-master/docs/Figures/fa_scalar.fig
new file mode 100644
index 00000000..7a2c3e41
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/fa_scalar.fig
@@ -0,0 +1,41 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+6 300 375 3675 1950
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 975 600 300 225 975 600 1275 825
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 2475 600 300 225 2475 600 2775 825
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 600 1650 300 225 600 1650 900 1875
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 3315 1654 300 225 3315 1654 3615 1879
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1575 1650 300 225 1575 1650 1875 1875
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 825 600 1425
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1200 750 3075 1500
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2400 825 750 1425
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2625 825 3225 1425
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1125 825 1425 1425
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2400 825 1650 1350
+4 0 -1 0 0 0 12 0.0000 4 135 225 900 675 X1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 2325 675 Xn\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 450 1725 Y1\001
+4 0 -1 0 0 0 12 0.0000 4 135 270 3150 1725 Ym\001
+4 0 -1 0 0 0 24 0.0000 4 30 270 1575 750 ...\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 1425 1725 Y2\001
+4 0 -1 0 0 0 24 0.0000 4 30 270 2175 1650 ...\001
+-6
diff --git a/sourcecodes/bnt-master/docs/Figures/fa_scalar.gif b/sourcecodes/bnt-master/docs/Figures/fa_scalar.gif
new file mode 100644
index 00000000..5e5a2598
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/fa_scalar.gif
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/fa_scalar_caption.fig b/sourcecodes/bnt-master/docs/Figures/fa_scalar_caption.fig
new file mode 100644
index 00000000..0862b150
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/fa_scalar_caption.fig
@@ -0,0 +1,38 @@
+#FIG 3.1
+Landscape
+Center
+Inches
+1200 2
+6 300 375 3675 1950
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 975 600 300 225 975 600 1275 825
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 2475 600 300 225 2475 600 2775 825
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 600 1650 300 225 600 1650 900 1875
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 3315 1654 300 225 3315 1654 3615 1879
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1575 1650 300 225 1575 1650 1875 1875
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 825 600 1425
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1200 750 3075 1500
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2400 825 750 1425
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2625 825 3225 1425
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1125 825 1425 1425
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2400 825 1650 1350
+4 0 -1 0 0 0 12 0.0000 4 135 210 900 675 X1\001
+4 0 -1 0 0 0 12 0.0000 4 135 210 2325 675 Xn\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 450 1725 Y1\001
+4 0 -1 0 0 0 12 0.0000 4 135 270 3150 1725 Ym\001
+4 0 -1 0 0 0 24 0.0000 4 30 270 1575 750 ...\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 1425 1725 Y2\001
+4 0 -1 0 0 0 24 0.0000 4 30 270 2175 1650 ...\001
+-6
+4 0 -1 0 0 0 12 0.0000 4 180 1170 1200 2325 Factor analysis\001
diff --git a/sourcecodes/bnt-master/docs/Figures/factorial_hmm3.fig b/sourcecodes/bnt-master/docs/Figures/factorial_hmm3.fig
new file mode 100644
index 00000000..a42ed6bb
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/factorial_hmm3.fig
@@ -0,0 +1,81 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+5 1 0 1 0 0 100 0 -1 0.000 0 1 1 0 2587.500 3637.500 1500 2775 1200 3675 1500 4500
+	0 0 1.00 60.00 120.00
+5 1 0 1 0 0 100 0 -1 0.000 0 1 1 0 2772.051 3261.376 1500 1875 900 3450 1425 4575
+	0 0 1.00 60.00 120.00
+5 1 0 1 0 0 100 0 -1 0.000 0 1 1 0 5962.500 3637.500 4875 2775 4575 3675 4875 4500
+	0 0 1.00 60.00 120.00
+5 1 0 1 0 0 100 0 -1 0.000 0 1 1 0 4162.500 3637.500 3075 2775 2775 3675 3075 4500
+	0 0 1.00 60.00 120.00
+5 1 0 1 0 0 100 0 -1 0.000 0 1 1 0 4347.051 3261.376 3075 1875 2475 3450 3000 4575
+	0 0 1.00 60.00 120.00
+5 1 0 1 0 0 100 0 -1 0.000 0 1 1 0 6147.051 3261.376 4875 1875 4275 3450 4800 4575
+	0 0 1.00 60.00 120.00
+6 1425 4350 2100 4875
+1 1 0 1 0 0 100 0 5 0.000 1 0.0000 1749 4596 300 225 1749 4596 2049 4821
+4 0 0 100 0 0 20 0.0000 4 195 345 1575 4725 Y1\001
+-6
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 1770 3645 300 225 1770 3645 2070 3870
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 3420 3645 300 225 3420 3645 3720 3870
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 5220 3645 300 225 5220 3645 5520 3870
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 1770 2745 300 225 1770 2745 2070 2970
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 3420 2745 300 225 3420 2745 3720 2970
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 5220 2745 300 225 5220 2745 5520 2970
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 5220 1845 300 225 5220 1845 5520 2070
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 3420 1845 300 225 3420 1845 3720 2070
+1 1 0 1 0 7 100 0 -1 0.000 1 0.0000 1770 1845 300 225 1770 1845 2070 2070
+1 1 0 1 0 0 100 0 5 0.000 1 0.0000 3399 4596 300 225 3399 4596 3699 4821
+1 1 0 1 0 0 100 0 5 0.000 1 0.0000 5199 4521 300 225 5199 4521 5499 4746
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 1
+	 4200 4200
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2100 3600 3150 3600
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3750 3600 4950 3600
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 1
+	 4200 3300
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2100 2700 3150 2700
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3750 2700 4950 2700
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 1
+	 4200 2400
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2100 1800 3150 1800
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3750 1800 4950 1800
+2 1 0 1 0 0 100 0 5 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1725 3900 1725 4350
+2 1 0 1 0 0 100 0 5 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 5175 3825 5175 4275
+2 1 0 1 0 0 100 0 5 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3450 3900 3450 4350
+4 0 0 100 0 0 20 0.0000 4 195 345 1575 1950 A1\001
+4 0 0 100 0 0 20 0.0000 4 195 330 1575 2850 B1\001
+4 0 0 100 0 0 20 0.0000 4 195 330 1575 3750 C1\001
+4 0 0 100 0 0 20 0.0000 4 195 345 3225 1950 A2\001
+4 0 0 100 0 0 20 0.0000 4 195 330 3225 2850 B2\001
+4 0 0 100 0 0 20 0.0000 4 195 330 3225 3750 C2\001
+4 0 0 100 0 0 20 0.0000 4 195 345 5025 1950 A3\001
+4 0 0 100 0 0 20 0.0000 4 195 330 5025 2850 B3\001
+4 0 0 100 0 0 20 0.0000 4 195 330 5025 3750 C3\001
+4 0 0 100 0 0 30 0.0000 4 30 525 6375 3000 . . .\001
+4 0 0 100 0 0 20 0.0000 4 195 345 3225 4725 Y2\001
+4 0 0 100 0 0 20 0.0000 4 195 345 5025 4650 Y3\001
diff --git a/sourcecodes/bnt-master/docs/Figures/filter.eps b/sourcecodes/bnt-master/docs/Figures/filter.eps
new file mode 100644
index 00000000..27fd6ced
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/filter.eps
@@ -0,0 +1,9861 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: (ImageMagick)
+%%Title: (filter.eps)
+%%CreationDate: (Tue Nov 16 20:04:33 2004)
+%%BoundingBox: 0 0 657 525
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 1
+%%EndComments
+
+%%BeginDefaults
+%%EndDefaults
+
+%%BeginProlog
+%
+% Display a color image.  The image is displayed in color on
+% Postscript viewers or printers that support color, otherwise
+% it is displayed as grayscale.
+%
+/DirectClassPacket
+{
+  %
+  % Get a DirectClass packet.
+  %
+  % Parameters:
+  %   red.
+  %   green.
+  %   blue.
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile color_packet readhexstring pop pop
+  compression 0 eq
+  {
+    /number_pixels 3 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add 3 mul def
+  } ifelse
+  0 3 number_pixels 1 sub
+  {
+    pixels exch color_packet putinterval
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/DirectClassImage
+{
+  %
+  % Display a DirectClass image.
+  %
+  systemdict /colorimage known
+  {
+    columns rows 8
+    [
+      columns 0 0
+      rows neg 0 rows
+    ]
+    { DirectClassPacket } false 3 colorimage
+  }
+  {
+    %
+    % No colorimage operator;  convert to grayscale.
+    %
+    columns rows 8
+    [
+      columns 0 0
+      rows neg 0 rows
+    ]
+    { GrayDirectClassPacket } image
+  } ifelse
+} bind def
+
+/GrayDirectClassPacket
+{
+  %
+  % Get a DirectClass packet;  convert to grayscale.
+  %
+  % Parameters:
+  %   red
+  %   green
+  %   blue
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile color_packet readhexstring pop pop
+  color_packet 0 get 0.299 mul
+  color_packet 1 get 0.587 mul add
+  color_packet 2 get 0.114 mul add
+  cvi
+  /gray_packet exch def
+  compression 0 eq
+  {
+    /number_pixels 1 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add def
+  } ifelse
+  0 1 number_pixels 1 sub
+  {
+    pixels exch gray_packet put
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/GrayPseudoClassPacket
+{
+  %
+  % Get a PseudoClass packet;  convert to grayscale.
+  %
+  % Parameters:
+  %   index: index into the colormap.
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile byte readhexstring pop 0 get
+  /offset exch 3 mul def
+  /color_packet colormap offset 3 getinterval def
+  color_packet 0 get 0.299 mul
+  color_packet 1 get 0.587 mul add
+  color_packet 2 get 0.114 mul add
+  cvi
+  /gray_packet exch def
+  compression 0 eq
+  {
+    /number_pixels 1 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add def
+  } ifelse
+  0 1 number_pixels 1 sub
+  {
+    pixels exch gray_packet put
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassPacket
+{
+  %
+  % Get a PseudoClass packet.
+  %
+  % Parameters:
+  %   index: index into the colormap.
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile byte readhexstring pop 0 get
+  /offset exch 3 mul def
+  /color_packet colormap offset 3 getinterval def
+  compression 0 eq
+  {
+    /number_pixels 3 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add 3 mul def
+  } ifelse
+  0 3 number_pixels 1 sub
+  {
+    pixels exch color_packet putinterval
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassImage
+{
+  %
+  % Display a PseudoClass image.
+  %
+  % Parameters:
+  %   class: 0-PseudoClass or 1-Grayscale.
+  %
+  currentfile buffer readline pop
+  token pop /class exch def pop
+  class 0 gt
+  {
+    currentfile buffer readline pop
+    token pop /depth exch def pop
+    /grays columns 8 add depth sub depth mul 8 idiv string def
+    columns rows depth
+    [
+      columns 0 0
+      rows neg 0 rows
+    ]
+    { currentfile grays readhexstring pop } image
+  }
+  {
+    %
+    % Parameters:
+    %   colors: number of colors in the colormap.
+    %   colormap: red, green, blue color packets.
+    %
+    currentfile buffer readline pop
+    token pop /colors exch def pop
+    /colors colors 3 mul def
+    /colormap colors string def
+    currentfile colormap readhexstring pop pop
+    systemdict /colorimage known
+    {
+      columns rows 8
+      [
+        columns 0 0
+        rows neg 0 rows
+      ]
+      { PseudoClassPacket } false 3 colorimage
+    }
+    {
+      %
+      % No colorimage operator;  convert to grayscale.
+      %
+      columns rows 8
+      [
+        columns 0 0
+        rows neg 0 rows
+      ]
+      { GrayPseudoClassPacket } image
+    } ifelse
+  } ifelse
+} bind def
+
+/DisplayImage
+{
+  %
+  % Display a DirectClass or PseudoClass image.
+  %
+  % Parameters:
+  %   x & y translation.
+  %   x & y scale.
+  %   label pointsize.
+  %   image label.
+  %   image columns & rows.
+  %   class: 0-DirectClass or 1-PseudoClass.
+  %   compression: 0-none or 1-RunlengthEncoded.
+  %   hex color packets.
+  %
+  gsave
+  /buffer 512 string def
+  /byte 1 string def
+  /color_packet 3 string def
+  /pixels 768 string def
+
+  currentfile buffer readline pop
+  token pop /x exch def
+  token pop /y exch def pop
+  x y translate
+  currentfile buffer readline pop
+  token pop /x exch def
+  token pop /y exch def pop
+  currentfile buffer readline pop
+  token pop /pointsize exch def pop
+  /Times-Roman findfont pointsize scalefont setfont
+  x y scale
+  currentfile buffer readline pop
+  token pop /columns exch def
+  token pop /rows exch def pop
+  currentfile buffer readline pop
+  token pop /class exch def pop
+  currentfile buffer readline pop
+  token pop /compression exch def pop
+  class 0 gt { PseudoClassImage } { DirectClassImage } ifelse
+  grestore
+} bind def
+%%EndProlog
+%%Page:  1 1
+%%PageBoundingBox: 0 0 657 525
+userdict begin
+DisplayImage
+0 0
+657 525
+12.000000
+657 525
+1
+1
+1
+8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffff0000ff00000000
+00000000ffffff0000000000ffffffffffffff0000ffffffffffffffff00ffffffffffff
+ff0000ffffffffffffffffffffffffffffffffffffff0000ffffffffffff0000ffffffff
+ffffffffffffffffffffffffffffff00ffffffffffffff00ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff0000ffffff00000000ffffffff
+ff0000ffffffff00000000ffffffffffff0000ffffffffffffffff0000ffffffffffffff
+ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffff0000ffffffff
+ff00000000ffffffffffffffffffffffffffffffffffffffff00ffffffffffffff00ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff
+ffffff000000ffffffff00ffffffffffff00000000ffffffffff00ffffffffffffffffff
+00ffffffffffff00ffffffffff00ffffffffff0000ffffffffffffffffffffffffffffff
+ffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffff00ffffffffff00
+ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffff0000ffffffffffff0000ffffff00ffffffffffffffff000000ffffffff0000
+ffffffffffffffff00ffffffffffff0000ffffffffff0000ffffffff0000ffffffffffff
+ffffffffffffffffffffff00ffffffffffffffffff0000ffffffffffffffffffffffffff
+ff0000ffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff0000ffffffffffff0000ffff0000ffffffffffffffff
+ff000000ffff0000ffffffffffffffff0000ffffffffffff0000ffffffffffff0000ffff
+ff0000ffffffffffffffffffffffffffffffff0000ffffffffffffffffff0000ffffffff
+ffffffffffffffffffff0000ffffffffffff0000ffffffffffff0000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff0000ffff00
+00ffffffffffffffffffff0000ffff00ffffffffffffffffff0000ffffffff0000000000
+00ffffffff0000ffffff0000ffffff0000000000ffff000000ffffff0000ffffffffffff
+ffffff0000ffffffffffffff0000ffffff000000000000ffffffff0000ffffffffffff00
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff
+ffffff000000ff0000ffffffffffffffffffffff00000000ffffffffffffffffff0000ff
+ffffffffffff0000ffffffffffff000000ffff0000ffffffff0000ffffffffff00ffffff
+0000ffffffffffffffffffff0000ffffffffffffff000000ffffffff0000ffffffffffff
+000000ffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffff0000ffffffff000000ffff0000ffffffffffffffffffffffff000000ffffff
+ffffffffffff0000ffffffffffffff0000ffffffffffffff0000ffff0000ffffffff0000
+ffffffffff00ffffff0000ffffffffffffffffffff0000ffffffffffffff0000ffffffff
+ff0000ffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff00000000000000ffffffff0000ffffffffffffffffff
+ffffff00000000ffffffffffffffff0000ffffffffffffff0000ffffffffffffff0000ff
+ff0000ffffffff000000ffffff0000ffffff0000ffffffffffffffffffff0000ffffffff
+ffffffffffffffffffff0000ffffffffffffff0000ffffffffffff0000ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff0000
+ffffffffffffffffffffff0000000000ffffffffffffffff0000ffffffffffffff0000ff
+ffffffffffff0000ffff0000ffffffffff0000ffffff00ffffffff0000ffffffffffffff
+ffffff0000ffffffffffffffffffffffffffff0000ffffffffffffff0000ffffffffffff
+0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff
+ffffffffffffff0000ffffffffffffffffffffff00ffff000000ffffffffffffff0000ff
+ffffffffffff0000ffffffffffffff0000ffff0000ffffffffff000000ff0000ffffffff
+0000ffffffffffffffffffff0000ffffffffffffffffffffffffffff0000ffffffffffff
+ff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffff0000ffffffffffffffffff0000ffffffffffffffffffff00ffffffff000000
+ffffffffffff0000ffffffffffffff0000ffffffffffffff0000ffff0000ffffffffffff
+0000ff0000ffffffff0000ffffffffffffffffffff0000ffffffffffffffffffffffffff
+ff0000ffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff00000000ff0000ffffff000000ffffffffffffffffffffffffffffffffff
+ffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff0000ffffffffffffffffff0000ffffffffffffffffff
+00ffffffffff000000ffffffffffff0000ffffffffffffff0000ffffffffffffff0000ff
+ff0000ffffffffffff00000000ffffffffff0000ffffffffffffffffffff0000ffffffff
+ffffffffffffffffffff0000ffffffffffffff0000ffffffffffff0000ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff00ffff0000ff0000ffffffff0000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff0000
+00ffffffffffffff0000ffffffffffff000000ffffffffff000000ffffffffffff0000ff
+ffffffffffff0000ffff0000ffffffffffffff000000ffffffffff000000ffffffffffff
+ffffff0000ffffffffffffff0000ffffffffff0000ffffffffffffff0000ffffffffffff
+0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffff00
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff
+ffffffffffffffff0000ffffffffffff0000ffffffffffffff00000000ffffffffff0000
+ffffffffffff0000ff00ffffffff0000ffffff0000ffffffffffffff0000ffffffffffff
+ff0000ffffffffffffffffff0000ffffffffffffff000000ffffffff0000ff00ffffffff
+0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff
+ffffffffffffffff0000ffffffff00ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffff0000ffffffff000000000000ffffffff000000
+00000000ffffff0000ffffffffffffff000000ffffffff0000ffffff0000ffffffffffff
+ffff00ffffffffffffff0000ffffffffffffff00000000000000ffffffff0000ffffffff
+ffff000000ffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffff0000ffffffffffff00ffffffff0000ffffff0000ffffffffffffffffffffffff
+ffffffffffffffffffff00ffffffff0000ffffffffffffffffffffffff00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffff
+ffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffff0000ffffff
+ffffffffffffffffffff0000ffffffffffffffff0000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff0000ffffffffffff0000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff00000000000000ff000000ffffffff0000ffff0000000000ff
+ffff000000000000ffff0000ff000000ff000000ffffff00000000000000ffffffffff00
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff00ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff
+ffffffff00ffffffffffffffffffffffffffff00ffffffffffffffffffff00ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffff00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff0000ffffffff00
+00ffffff0000ffffffff0000ffffff0000ffff000000ffff00ffff0000ffffffff0000ff
+ffff0000ffffff00ffffff000000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff
+0000ffffffffffffffffffff00ffffffffffffffffffffffffffff0000ffffffffffffff
+ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff
+ffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff
+ffff0000ffffffff0000ffffff0000ffffffff0000000000000000ff0000ffffffffffff
+0000ffffffff0000ffffff0000ffffff0000ffffff0000ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffff
+ffffffffffffffffffff0000ffffffffffffffff0000ffffffffffffffffffffff000000
+00ffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffff0000ffffffffff0000ffffffff0000ffffff0000ffffff0000ffffffffffffff
+ff0000ffffffffffff0000ffffffff0000ffffff0000ffffff0000ffffff0000ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff0000ffffffffff0000ffffffff0000ffffff0000ffffff
+0000ffffffffffffffff0000ffffffffffff0000ffffffff0000ffffff0000ffffff0000
+ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff0000ffffffff00
+00ffffff0000ffffff000000ffffffffffffff0000ffffffffffff0000ffffffff0000ff
+ffff0000ffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff
+ffff0000ffffffff0000ffffff0000ffffffff0000ffffffffff00ff0000ffffffffffff
+0000ffffffff0000ffffff0000ffffff0000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffff0000ffffffffff0000ffffffff0000ffffff0000ffffffff00000000000000ff
+ff0000ffffffffffff0000ffffffff0000ffffff0000ffffff00000000ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff0000000000ffff00000000ffff0000000000ffff000000ff
+ffff0000000000ffff0000000000ffffff00000000ffff00000000ff00000000ffff0000
+0000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff00ffff0000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff00ffffffffffffff00ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff00ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000
+00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff0000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffff00ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff00ff0000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff00ff0000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000
+ffffffffff00000000ffffff0000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff00000000ffffffffffffffffffff0000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffff0000ffffffffffffffff
+ffffffffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffff
+ffffffff00ffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff
+ffffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffff
+ffff00ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffff000000ffffffffffffffff0000ffffffff0000ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff0000ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff0000ffffff00000000ffffffffff0000
+ffffffffffffffffffffffffffffffffffff0000ffffffffff00000000ffffffffffffff
+ffffffffffffffffffffffffffff00ffffffffffffffffffffffff0000ffffffffffffff
+ffffffffffffffffffffffffffffffff0000ffffffffff00000000ffffffffffffffffff
+ffffffffffffffffffffffff00ffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff000000ffffffffffffffff0000ffffffffffffffffffff
+ffff00ffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff
+000000ffffffff00ffffffffffffffffffffffffffffffffffffff00ffffffffffffffff
+0000ffffffffffffffffffffffffffffff00ffffffffffff00ffffffffffffffffffffff
+0000ffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff0000
+ffffffffffffffffffffffffffffff00ffffffffffff00ffffffffffffff00ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffff00ffff
+ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffff00
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff0000ffffffffffff0000ffffff00ffffffffffffffffffffffffffffffffffffff00
+ffffffffffffffffff0000ffffffffffffffffffffffffffff0000ffffffffffff0000ff
+ffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff00ffff
+ffffffffffffff0000ffffffffffffffffffffffffffff0000ffffffffffff0000ffffff
+ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ff
+ffffffffff0000ffffffffffffffffffffffff0000ffffffffffffffffffffffffffffff
+ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff0000ffffffffffff0000ffff0000ffffffffffffffffffffff
+ffffffffffffff0000ffffffffffffffffff0000ffffffffffffffffffffffffffff0000
+ffffffffffffff0000ffffffffffffffffff0000ffffffffffffffffffffffffffffffff
+ffffffffff0000ffffffffffffffffff0000ffffffffffffffffffffffffffff0000ffff
+ffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffff0000ffffffffff0000ffffff000000000000ffffffff
+0000000000ffffffff0000ff000000ffff0000ff00000000ffffffffff0000ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff0000000000ffffffffff0000ff000000ffffffff0000
+0000ffffffffffff0000ffff00000000ffff00000000ffffffffff0000000000ffffff00
+0000000000ff00000000ffffffffffffffffffff0000ffffffffffff0000ffff0000ffff
+ffff000000000000ff00000000ffffff0000ffffffffffffffffff0000ffffffffffffff
+0000ffffff000000000000ffffffffff0000ffffffffffffffffff0000ffffffffffffff
+ff0000000000ffff000000ffffff0000ffffffffffffffffff0000ffffffffffffff0000
+ffffff000000000000ffffffffff0000ffffffffffff0000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffff00ffffffffff000000ffffffff
+ff0000ffffffffff0000ffffff0000ff0000000000000000ffff0000000000000000ffff
+ff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000ffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000ffff000000ffff0000000000
+000000ffffff0000ffff0000000000ff0000000000ffff0000000000ffff0000ffff0000
+00ffff000000ffffffff000000ffff0000ffffffffffffffffffffffff0000ffffffffff
+000000ff0000ffffffffffffff000000ffff0000ffffffff0000ffffffffffffffffffff
+0000ffffffffffffff000000ffffffff0000ffffffffffffff000000ffffffffffffffff
+0000ffffffffffffffffff0000ffffffffff00ffffff0000ffffffffffffffffffff0000
+ffffffffffffff000000ffffffff0000ffffffffffffff000000ffffffffff000000ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff0000ffffff
+ffffff0000ffffffffff0000ffffffff0000ffffffff000000ffff0000ffffffffffff00
+0000ffff00000000ffffff0000ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+0000ffffffff0000ffffffffffff0000ffffff000000ffffffff000000ffffffff000000
+ffffff0000ffff000000ffffff0000ffffffffff0000ff0000ffffffffffffffffffffff
+ffff0000ffffffff000000ffff0000ffffffffffffffff0000ff0000ffffffffff0000ff
+ffffffffffffffffff0000ffffffffffffff0000ffffffffff0000ffffffffffffffff00
+00ffffffffffffffff0000ffffffffffffffffff0000ffffffffff00ffffff0000ffffff
+ffffffffffffff0000ffffffffffffff0000ffffffffff0000ffffffffffffffff0000ff
+ffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000
+00ffffff00ffffffffffffff0000ffffffffff0000ffffffff000000000000000000ffff
+0000ffffffffffff0000ffffffff000000ffffff0000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffff00ffffffff0000ffffffff0000ffffffffffff0000ffffffff0000ffffffff00
+00ffffffffff0000ffffffff0000ffffff00ffffffff0000ffffffffffff000000ffffff
+ffffffffffffffffffffff00000000000000ffffffff0000ffffffffffffffffff000000
+ffffffffffff0000ffffffffffffffffffff0000ffffffffffffffffffffffffffff0000
+ffffffffffffffff0000ffffffffffffffff0000ffffffffffffffffff000000ffffff00
+00ffffff0000ffffffffffffffffffff0000ffffffffffffffffffffffffffff0000ffff
+ffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff000000ff0000ffffffffffffff0000ffffffffff0000ffffffff0000
+ffffffffffffffffff0000ffffffffffff0000ffffffffff0000ffffff0000ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff00000000ffffffff0000ffffffffffff0000ffff
+ffff0000ffffffff0000ffffffffff0000ffffffff0000ffffffffffff00000000ffffff
+ffffff000000ffffffffffffffffffffffffffff0000ffffffffffffffffff0000ffffff
+ffffffffffff000000ffffffffffff0000ffffffffffffffffffff0000ffffffffffffff
+ffffffffffffff0000ffffffffffffffff0000ffffffffffffffff0000ffffffffffffff
+ffffff0000ffffff00ffffffff0000ffffffffffffffffffff0000ffffffffffffffffff
+ffffffffff0000ffffffffffffffff0000ffffffffffff0000ffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff000000ff0000ffffffffffffff0000ffffffff
+ff0000ffffff000000ffffffffffffffffff0000ffffffffffff0000ffffffffff0000ff
+ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff0000ffff0000ffffffff0000ff
+ffffffffff0000ffffffff0000ffffffff0000ffffffffff0000ffffffff0000ffffffff
+0000ffff0000ffffffffffffff0000ffffffffffffffffffffffffffff0000ffffffffff
+ffffffff0000ffffffffffffffffffff0000ffffffffffff0000ffffffffffffffffffff
+0000ffffffffffffffffffffffffffff0000ffffffffffffffff0000ffffffffffffffff
+0000ffffffffffffffffffff000000ff0000ffffffff0000ffffffffffffffffffff0000
+ffffffffffffffffffffffffffff0000ffffffffffffffff0000ffffffffffff0000ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffff
+ffffff0000ffffffffff0000ffffff000000ffffffffffffffffff0000ffffffffffff00
+00ffffffffff0000ffffff0000ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff
+0000ffffffff0000ffffffffffffff0000ffff0000ffffffffff0000ffffffffff0000ff
+ffffff0000ffffff0000ffffff0000ffffffffffff00000000ffffffffffffffffffffff
+ffff0000ffffffffffffffffff0000ffffffffffffffffff00000000ffffffffff0000ff
+ffffffffffffffffff0000ffffffffffffffffffffffffffff0000ffffffffffffffff00
+00ffffffffffffffff0000ffffffffffffffffffffff0000ff0000ffffffff0000ffffff
+ffffffffffffff0000ffffffffffffffffffffffffffff0000ffffffffffffffff0000ff
+ffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+00000000ffffffffffffffff0000ffffffffff0000ffffffff0000ffffffffffff00ffff
+0000ffffffffffff0000ffffffffff0000ffffff0000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff0000ffffffff0000ffffffff0000ffffffffffffff0000000000ffffffffffff00
+00ffffffffff0000ffffffff0000ffff0000ffffffff0000ffffffffff0000ff000000ff
+ffffffffffffffffffffff0000ffffffffffffffffff0000ffffffffffffffff0000ff00
+0000ffffffff0000ffffffffffffffffffff0000ffffffffffffffffffffffffffff0000
+ffffffffffffffff0000ffffffffffffffff0000ffffffffffffffffffffff00000000ff
+ffffffff0000ffffffffffffffffffff0000ffffffffffffffffffffffffffff0000ffff
+ffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff0000ffffffffffffffffff0000ffffffffff0000ffffffff0000
+00ffffffff0000ffff0000ffffffffffff0000ffffffff0000ffffffff0000ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff0000ffffffff0000ffffffff0000ffffffffffff0000ffff
+ffffffffffffffff0000ffffffffff0000ffffffff0000ffff0000ffffffff0000ffffff
+ff0000ffffff0000ffffffffffffffffffffffff0000ffffffffffffffffff000000ffff
+ffffffff0000ffffff0000ffffffff000000ffffffffffffffffff0000ffffffffffffff
+0000ffffffffff0000ffffffffffffffff0000ffffffffffffffff0000ffffffffffffff
+ffffffffff000000ffffffffff000000ffffffffffffffffff0000ffffffffffffff0000
+ffffffffff0000ffffffffffffffff0000ffffffffffff0000ffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff0000ffffffff
+ff0000ff00ffffff00000000000000ffffff0000ffffffffffff0000ffffffff00ffffff
+ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff0000ffff00000000ffffffff0000ff
+ffffffffff00000000000000ffffffffff0000ffffffffff0000ffffffff0000ffff0000
+ffff00000000ffffffff00ffffffff000000ffffffffffffffffffffff0000ffffffffff
+ffffffffff0000ffffffffffff00ffffffff000000ffffffff0000ffffffffffffffffff
+0000ffffffffffffff000000ffffffff0000ff00ffffffffff0000ffffffffffffffffff
+0000ffffffffffffffffffffffff0000ffffffffffffff0000ffffffffffffffffff0000
+ffffffffffffff000000ffffffff0000ff00ffffffffff0000ffffffffffff0000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff
+ffff0000000000ffffffff000000ffffffff0000000000ffff000000000000ffffffffff
+0000000000ffffffffff0000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff
+00000000000000000000ffffffff0000000000000000ffff000000000000ff0000000000
+00ff0000000000ff00000000ff00000000ff000000ffff000000000000ffffffffffffff
+000000000000ffffffffffffffff0000ffffffffff000000ffff000000000000ffff0000
+ffffffffffffff00000000000000ffffffff0000ffffffffffff000000ffffffffff0000
+ffffffffffffffffff0000ffffffffffffffffffffffffff00ffffffffffffff0000ffff
+ffffffffff00000000000000ffffffff0000ffffffffffff000000ffffffffff0000ffff
+ffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff0000ff000000000000ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff
+ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff0000ffff
+ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff
+ffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff
+ffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff
+ffffffffff00ffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff00ffffffffffffff00ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff0000ffffffffffffffffffffffffffffffffffff0000ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff
+ffffffffffffffffffffffffff0000ffffffffffffffffffff0000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff00ffffffffffffff00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff000000ffffffff0000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffff
+ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff
+ffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff00
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff
+ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff00000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffff
+ffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff0000ffffffffff00000000ffffffffff
+ffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff
+ffff0000ffffffffffffffffffffffffffffff00ffffffffff00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff00ffffffffffffffffff0000ffffffffffffffffffffffffffff0000ffffffffff0000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff0000ffffffffffffffffff0000ffffffffffffffffffffffffffff
+0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffff000000000000ff00000000ffffff0000ffffffffffffffffff0000ffffffffff
+ffff0000ffffff000000000000ffffffff0000ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffff0000ffffffff0000ffffffffffffffff
+ffff0000ffffffffffffff000000ffffffff0000ffffffffffff000000ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff0000ff0000ffffffffff00
+00ffffffffffffffffffff0000ffffffffffffff0000ffffffffff0000ffffffffffffff
+0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+0000ffffffffffff0000ffffffffffffffffffff0000ffffffffffffffffffffffffffff
+0000ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff000000ffffffffffff0000ffffffffffffffffffff0000ffffffffff
+ffffffffffffffffff0000ffffffffffffff0000ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff0000ffffffffffff0000ffffffffffffffff
+ffff0000ffffffffffffffffffffffffffff0000ffffffffffffff0000ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffff00
+00ffffffffffffffffffff0000ffffffffffffffffffffffffffff0000ffffffffffffff
+0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000
+ff000000ffffffff0000ffffffffffffffffffff0000ffffffffffffffffffffffffffff
+0000ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff0000ffffff0000ffffffff000000ffffffffffffffffff0000ffffffffff
+ffff0000ffffffffff0000ffffffffffffff0000ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff00ffffffff000000ffffffff0000ffffffffffffff
+ffff0000ffffffffffffff000000ffffffff0000ff00ffffffff0000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff000000ffff000000000000ffff
+0000ffffffffffffff00000000000000ffffffff0000ffffffffffff000000ffffffff00
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff00ff0000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff0000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffff00ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff00ff0000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff0000ff00
+00000000000000ffffff0000000000ffffffffffffff0000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffff00ffffffffffffff0000ffffffffff
+ffffffffffffffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffff
+ffffffffffffff00ffffffffffffff00ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff00000000ff
+ffffffff0000ffffffff00000000ffffffffffff0000ffffffffffffffff0000ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff
+ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff00ffffffff
+ffff0000ffffffffffffffffffffffffffffffffff0000ffffffffff00000000ffffffff
+ffffffffffffffffffffffffffffffffff00ffffffffffffff00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+00ffffffffff000000ffffffff00ffffffffffff00000000ffffffffff00ffffffffffff
+ffffff00ffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff00
+00ffffffffffffffffffffffffffffff0000ffffffffff00ffffffffffffffffffffffff
+ffffffffff00ffffffffff0000ffffffffffffffffffffffffffffffffff00ffffffffff
+ffffff0000ffffffffffffffffffffffffffffff00ffffffffffff00ffffffffffffff00
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff0000ffffffffffff0000ffffff00ffffffffffffffff000000ffffff
+ff0000ffffffffffffffff00ffffffffffff0000ffffffffffffffffffffffffffffffff
+ffffffffffffffff0000ffffffffffffffffffffffffffffff0000ffffffff0000ffffff
+ffffffffffffffffffffffffffff0000ffffffff0000ffffffffffffffffffffffffffff
+ffff00ffffffffffffffffff0000ffffffffffffffffffffffffffff0000ffffffffffff
+0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff0000ffffffffffff0000ffff0000ffffffffff
+ffffffff000000ffff0000ffffffffffffffff0000ffffffffffff0000ffffffffffffff
+ff0000ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffff0000
+ffffffff0000ffffffffffffffffffffffffffffffffffff0000ffffff0000ffffffffff
+ffffffffffffffffffff0000ffffffffffffffffff0000ffffffffffffffffffffffffff
+ff0000ffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff0000
+ffff0000ffffffffffffffffffff0000ffff00ffffffffffffffffff0000ffffffff0000
+00000000ffffffffffff0000ffffffffffffffffffff000000ff0000ffffffffff000000
+0000ffffffffff0000ffff000000000000ffffffff0000000000ffffffffffffff0000ff
+ffff0000ffff0000000000ffff000000ffffff0000ffffffffffffffffff0000ffffffff
+ffffff0000ffffff000000000000ffffffffff0000ffffffffffff0000ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+00ffffffffff000000ff0000ffffffffffffffffffffff00000000ffffffffffffffffff
+0000ffffffffffffff0000ffffffffffffffff0000ffffffffffffffff0000ffffff0000
+00ffffffff0000ffffff0000ffffffff0000ffffffff0000ffffffff000000ffff000000
+ffffffffffff000000ffff0000ffffff0000ffffffffff00ffffff0000ffffffffffffff
+ffffff0000ffffffffffffff000000ffffffff0000ffffffffffffff000000ffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff0000ffffffff000000ffff0000ffffffffffffffffffffffff000000
+ffffffffffffffffff0000ffffffffffffff0000ffffffffffffffff0000ffffffffffff
+ffff0000ffffffff0000ffffff0000ffffffff000000ffffff0000ffffffff0000ffffff
+ff000000ffffff0000ffffffffffffff0000ffff0000ffffff0000ffffffffff00ffffff
+0000ffffffffffffffffffff0000ffffffffffffff0000ffffffffff0000ffffffffffff
+ffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff00000000000000ffffffff0000ffffffffffff
+ffffffffffff00000000ffffffffffffffff0000ffffffffffffff0000ffffffffffffff
+ff0000ffffffffffffff0000ffffffffff0000ffffff000000000000000000ffffff0000
+ffffffff0000ffffffffff00ffffffff0000ffffffffffffff0000ffff0000ffffff0000
+00ffffff0000ffffff0000ffffffffffffffffffff0000ffffffffffffffffffffffffff
+ff0000ffffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff
+ff0000ffffffffffffffffffffff0000000000ffffffffffffffff0000ffffffffffffff
+0000ffff00000000000000000000000000ffff0000ffffffffff0000ffffff0000ffffff
+ffffffffffffff0000ffffffff0000ffffffffffffffff00000000ffffffffffffff0000
+ffff0000ffffffff0000ffffff00ffffffff0000ffffffffffffffffffff0000ffffffff
+ffffffffffffffffffff0000ffffffffffffffff0000ffffffffffff0000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+00ffffffffffffffffff0000ffffffffffffffffffffff00ffff000000ffffffffffffff
+0000ffffffffffffff0000ffff00000000000000000000000000ffff0000ffffffffff00
+00ffff000000ffffffffffffffffffff0000ffffffff0000ffffffffffff0000ffff0000
+ffffffffffffff0000ffff0000ffffffff000000ff0000ffffffff0000ffffffffffffff
+ffffff0000ffffffffffffffffffffffffffff0000ffffffffffffffff0000ffffffffff
+ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffff0000ffffffffffffffffff0000ffffffffffffffffffff00ffffffff
+000000ffffffffffff0000ffffffffffffff0000ffffffffffffffff0000ffffffffffff
+ff0000ffffffffff0000ffff000000ffffffffffffffffffff0000ffffffff0000ffffff
+ffff0000ffffff0000ffffffffffffff0000ffff0000ffffffffff0000ff0000ffffffff
+0000ffffffffffffffffffff0000ffffffffffffffffffffffffffff0000ffffffffffff
+ffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff000000ffffff0000ffffffffffffffffffffffffffffffffffffff0000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff0000ffffffffffffffffff0000ffffffffffff
+ffffff00ffffffffff000000ffffffffffff0000ffffffffffffff0000ffffffffffffff
+ff0000ffffffffffffff0000ffffffffff0000ffffff0000ffffffffffff00ffffff0000
+ffffffff0000ffffffff0000ffffffff0000ffffffffffffff0000ffff0000ffffffffff
+00000000ffffffffff0000ffffffffffffffffffff0000ffffffffffffffffffffffffff
+ff0000ffffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff0000ffffff0000ffffffffffffffffffffffff
+ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff
+ff000000ffffffffffffff0000ffffffffffff000000ffffffffff000000ffffffffffff
+0000ffffffffffffffff0000ffffffffffffff000000ffffffff0000ffffff000000ffff
+ffff0000ffffff0000ffffffff0000ffffffff0000ffffffff0000ffffffffffffff0000
+ffff0000ffffffffffff000000ffffffffff000000ffffffffffffffffff0000ffffffff
+ffffff0000ffffffffff0000ffffffffffffffff0000ffffffffffff0000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+00ffffffffffffffffffff0000ffffffffffff0000ffffffffffffff00000000ffffffff
+ff0000ffffffffffff0000ff00ffffffffffff0000ffffffffffffffff000000ffff0000
+000000ffff00000000000000ffffffff0000ffffffff0000ff00ffff0000ffff00000000
+ffffffffffff0000ffffff0000ffffffffffff0000ffffffffffffff0000ffffffffffff
+ffffff0000ffffffffffffff000000ffffffff0000ff00ffffffffff0000ffffffffffff
+0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+00ffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffff0000ffffffff000000000000ffffffff
+00000000000000ffffff0000ffffffffffffff000000ffffffffffff0000ffffffffffff
+ffffff0000000000000000ffffffff0000000000ffffffff0000000000ffffff000000ff
+ffff00000000ff00000000ffffffff0000ffffff0000ffffffffffffff00ffffffffffff
+ff0000ffffffffffffff00000000000000ffffffff0000ffffffffffff000000ffffffff
+ff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff0000ffffffff00ffffffffffffffffffffffff0000ffffffffffff00
+ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff
+ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffff
+ff0000ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff0000ff00000000ffffffff0000ff0000
+00ff000000000000ffffffffff000000000000ffff000000ffffffff000000000000ff00
+00000000ffff000000ffffffffff0000000000ffffffff00000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff
+ffffffffffffffffffff00ffffffffffffffffffff00ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff00ffffffffffffff00ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff00
+00ffffff000000ffff000000ffffff0000ffffff0000ffffffff0000ffffff0000ffffff
+0000ffffff0000ffff0000ffffffffff0000ffffffff0000ffff000000ffffffff0000ff
+ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff
+ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffff00ffffffffffffffffffffffffff0000ffffffffffffffffffff0000ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffff00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff0000ffffffff000000ffff0000ffffffff0000000000000000ffff00ffffffffff00
+00ffffff0000ffffff00ffffffffff00ffff0000ffffffffff0000ffffff0000ffffffff
+000000ffffff0000ffffff0000ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffff
+ffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff0000ffffffffffffffffffff00000000ffffffffffffffff
+ffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000
+ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff0000ffffffffff0000ffff0000ffffff0000ffffffffffffff
+ff0000ffffffffff0000ffffff0000ffff0000ffffffffffffffff0000ffffffffff0000
+ffffff0000ffffffffff0000ffffff0000ffffff0000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff0000ffffffffff0000ffff0000ffffff
+0000ffffffffffffffff0000ffffffffff0000ffffff0000ffff0000ffffffffffffffff
+0000ffffffffff0000ffffff0000ffffffffff0000ffffff0000ffffff0000ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff
+0000ffff0000ffffff000000ffffffffffffff0000ffffffffff0000ffffff0000ffff00
+0000ffffffffffffff0000ffffffffff0000ffffff0000ffffffffff0000ffffff0000ff
+ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff0000ffffffffff00ffffff0000ffffffff0000ffffffffff00ff000000ffffffff00
+00ffffff0000ffff00000000ffffff0000ff0000ffffffffff0000ffffff0000ffffffff
+ff00ffffffff0000ffffff0000ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff000000ffffff0000ffffff0000ffffffff00000000000000ff
+ffff000000ffffff000000ffff0000ffffff00000000000000ffff0000ffffffffff0000
+ffffffff0000ffffff0000ffffffff0000ffffff0000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff000000000000ffffffff0000000000ff
+ffff0000000000ffffffffff00000000ff000000ff00000000ffffff0000000000ffffff
+ff000000ffff00000000ffffffff00000000ffffffffff00000000ff00000000ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffff
+ffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+00ffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff0000ffffffffffffffffffffff0000ffffff00ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffff0000ffff0000
+ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff00000000ff
+ffffff0000ff00000000ffffff00000000ffffffffffffffffffffff0000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff0000
+00ffff00ffffff0000ffffff0000ffff0000ffffff0000ffff0000ffffffffffffffffff
+ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff0000ffffffff0000ffff000000000000ffffff0000ffff0000ffffff00ffffff0000
+ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff0000ffffffff0000ff0000ffffffffffffffff0000ffff0000
+ffffffffff00000000ffffffffffffffffffff0000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff0000ffffffff0000ff0000ffffffffff
+ffffff0000ffff0000ffffffff00ffff0000ffffffffffffffffff00ff0000ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff00
+00ff0000ffffffffff00ffff0000ffff0000ffffff0000ffff0000ffffffffffffffffff
+00ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff0000ffffff0000ffff0000ffffff00ffffff0000ffff0000ffff000000ff000000
+ffffffffffffffffff00ff0000ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff000000000000ffffff00000000ffffff000000ffff0000
+0000ff00000000000000ffffffffffffffff00ff0000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffff
+ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffff00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff
+ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000000000
+0000000000ffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffff00000000ffffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffff
+ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffff00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff000000000000000000ffffffffffffffff0000ff0000000000000000ff
+ffff0000000000ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff
+ffffff0000ffffffffffffffffffffffffffffffffffffff0000ffffffffffff0000ffff
+ffffffffffffffffffffffffffffffffff00ffffffffffffff00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff0000ffffff00000000ffffffffff0000ffff
+ffff00000000ffffffffffff0000ffffffffffffffff0000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffff0000ffff
+ffffff00000000ffffffffffffffffffffffffffffffffffffffff00ffffffffffffff00
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff0000
+00ffffffff00ffffffffffff00000000ffffffffff00ffffffffffffffffff00ffffffff
+ffff00ffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff00ffffffffff0000ffffffffffffffffffffffffff
+ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffff00ffffffff
+ff00ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+0000ffffffffffff0000ffffff00ffffffffffffffff000000ffffffff0000ffffffffff
+ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffff0000ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff0000ffffffff
+ffffffffffffffffffffffffff00ffffffffffffffffff0000ffffffffffffffffffffff
+ffffff0000ffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff0000ffffffffffff0000ffff0000ffffffffffffffffff000000ff
+ff0000ffffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffff
+ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000
+ffffff0000ffffffffffffffffffffffffffffffff0000ffffffffffffffffff0000ffff
+ffffffffffffffffffffffff0000ffffffffffff0000ffffffffffff0000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff0000ffffffffffff0000ffff0000ffffffff
+ffffffffffff0000ffff00ffffffffffffffffff0000ffffffff000000000000ffffffff
+ffffffffffffffffffff000000000000ffffffff0000000000ffff00000000ffff000000
+00ffffffffffff0000ffffff0000ffffff0000000000ffff000000ffffff0000ffffffff
+ffffffffff0000ffffffffffffff0000ffffff000000000000ffffffff0000ffffffffff
+ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff0000
+00ff0000ffffffffffffffffffffff00000000ffffffffffffffffff0000ffffffffffff
+ff0000ffffffffffffffffffffffffffffffffffff0000ffffffff000000ffff000000ff
+ffff0000ffffffff0000ffffffffffff000000ffff0000ffffffff0000ffffffffff00ff
+ffff0000ffffffffffffffffffff0000ffffffffffffff000000ffffffff0000ffffffff
+ffff000000ffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+0000ffffffff000000ffff0000ffffffffffffffffffffffff000000ffffffffffffffff
+ff0000ffffffffffffff0000ffffffffffffffffffffffffffffffffffff0000ffffffff
+000000ffffff0000ffffff0000ffffffff0000ffffffffffffff0000ffff0000ffffffff
+0000ffffffffff00ffffff0000ffffffffffffffffffff0000ffffffffffffff0000ffff
+ffffff0000ffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff00000000000000ffffffff0000ffffffffffffffffffffffff0000
+0000ffffffffffffffff0000ffffffffffffff0000ffffffffffffffffffffffffffffff
+ffffff0000ffffffffff00ffffffff0000ffffff0000ffffffff0000ffffffffffffff00
+00ffff0000ffffffff000000ffffff0000ffffff0000ffffffffffffffffffff0000ffff
+ffffffffffffffffffffffff0000ffffffffffffff0000ffffffffffff0000ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff0000ffffffffff
+ffffffffffff0000000000ffffffffffffffff0000ffffffffffffff0000ffff00000000
+000000000000000000ffffff0000ffffffffffffffff00000000ffffff0000ffffffff00
+00ffffffffffffff0000ffff0000ffffffffff0000ffffff00ffffffff0000ffffffffff
+ffffffffff0000ffffffffffffffffffffffffffff0000ffffffffffffff0000ffffffff
+ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffff
+ffff0000ffffffffffffffffffffff00ffff000000ffffffffffffff0000ffffffffffff
+ff0000ffff00000000000000000000000000ffffff0000ffffffffffff0000ffff0000ff
+ffff0000ffffffff0000ffffffffffffff0000ffff0000ffffffffff000000ff0000ffff
+ffff0000ffffffffffffffffffff0000ffffffffffffffffffffffffffff0000ffffffff
+ffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffff
+0000ffffffffffffffffff0000ffffffffffffffffffff00ffffffff000000ffffffffff
+ff0000ffffffffffffff0000ffffffffffffffffffffffffffffffffffff0000ffffffff
+ff0000ffffff0000ffffff0000ffffffff0000ffffffffffffff0000ffff0000ffffffff
+ffff0000ff0000ffffffff0000ffffffffffffffffffff0000ffffffffffffffffffffff
+ffffff0000ffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff0000ffffffffffffffffff0000ffffffffffffffffff00ffffffff
+ff000000ffffffffffff0000ffffffffffffff0000ffffffffffffffffffffffffffffff
+ffffff0000ffffffff0000ffffffff0000ffffff0000ffffffff0000ffffffffffffff00
+00ffff0000ffffffffffff00000000ffffffffff0000ffffffffffffffffffff0000ffff
+ffffffffffffffffffffffff0000ffffffffffffff0000ffffffffffff0000ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff000000ffffffff
+ffffff0000ffffffffffff000000ffffffffff000000ffffffffffff0000ffffffffffff
+ffffffffffffffffffffffff0000ffffffff0000ffffffff0000ffffff0000ffffffff00
+00ffffffffffffff0000ffff0000ffffffffffffff000000ffffffffff000000ffffffff
+ffffffffff0000ffffffffffffff0000ffffffffff0000ffffffffffffff0000ffffffff
+ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffff
+ffffff0000ffffffffffff0000ffffffffffffff00000000ffffffffff0000ffffffffff
+ff0000ff00ffffffffffffffffffffffffffffffff0000ff00ffff0000ffff00000000ff
+ffff000000ff0000000000ffffffffff0000ffffff0000ffffffffffffff0000ffffffff
+ffffff0000ffffffffffffffffff0000ffffffffffffff000000ffffffff0000ff00ffff
+ffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000
+00000000ffffffffffffffff0000ffffffff000000000000ffffffff00000000000000ff
+ffff0000ffffffffffffff000000ffffffffffffffffffffffffffffffffff000000ffff
+ff00000000ff00000000ffff00000000ff000000ffffffffff0000ffffff0000ffffffff
+ffffffff00ffffffffffffff0000ffffffffffffff00000000000000ffffffff0000ffff
+ffffffff000000ffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffff
+ffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff
+ffffffffffffffffffffffff0000ffffffffffffffff0000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff0000ffffffffffff0000ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff00000000ff0000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffff000000ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff
+ffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff00ffffffffffffffffffffffffffff00ffffffffffffffffffff00ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffff
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff00ffff0000ff0000ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff
+ffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff0000ffffffffff
+ffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+00ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff
+ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff
+ffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffff00
+000000ffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff0000ffffffffffffffffffffffffffffff0000ffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff0000ffffffffffff00ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffff0000ffff
+ffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00000000000000ff000000ffff000000
+0000ff000000ffffff000000000000ffffffffff000000000000ffffffffffffffffffff
+ffffffffff0000ffffffff0000000000ffffffffff00000000000000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff
+ffff0000ffffffffff0000ff00ffffffff0000ffffff0000ffffff0000ffffffff0000ff
+ffffffffffffffffffffffffffff0000ffffff0000ffffff0000ffffff00ffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffff0000ffffffffff0000ffffffffff000000ffffffffff0000000000000000ffff
+00ffffffffff0000ffffffffffffffffffffffffffffff0000ffffff00ffffffff0000ff
+ffff0000ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff0000ffffffffff0000ffffffffffff0000ffffffff0000
+ffffffffffffffff0000ffffffffff0000ffff00000000000000000000ffffff0000ffff
+ffffffff00000000ffffff0000ffffff0000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff0000ffffffffff
+ff0000ffffffff0000ffffffffffffffff0000ffffffffff0000ffffffffffffffffffff
+ffffffffff0000ffffffff0000ffff0000ffffff0000ffff0000ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff
+ffff0000ffffffffff00ff0000ffffff000000ffffffffffffff0000ffffffffff0000ff
+ffffffffffffffffffffffffffff0000ffffff0000ffffff0000ffffffff00000000ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffff0000ffffffffff0000ffffffffff00ffff0000ffffff0000ffffffffff00ff00
+0000ffffffff0000ffffffffffffffffffffffffffffff0000ffffff0000ffffff0000ff
+ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff0000ffffffffff0000ffffffff00ffffff000000ffff00
+000000000000ffffff000000ffffff000000ffffffffffffffffffffffffffff0000ffff
+ff0000ffff000000ffffff00000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff0000000000ffff00000000ff000000
+00ffff00000000ffff0000000000ffffffffff00000000ff000000ffffffffffffffffff
+ffffffff0000000000ff00000000ff000000ffff00000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff00000000
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff00ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff0000ffffffffff00ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+0000ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff0000ffffffffffffffffffff0000ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff00ffffff0000ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff
+0000ffffffffffffffffffffff00ffffffff0000ffffffffffffffffffffffff00ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff
+ffff000000ff00000000ff00000000ffffffffffff0000000000ffffffffff0000000000
+ffffff0000000000ff0000ff00000000ffffffff000000ffffff00000000000000ffffff
+ffff00000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff
+ffffffffffffffffffffffffff00000000ffffff00000000ffffff0000ffff000000ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff00ffffff0000ffffff0000ffffff0000ffffffff0000ffffffff0000ffff000000
+ffffff0000ffff000000ffffff0000ffffff000000ffffff0000ffffffff0000ffffffff
+0000ffffff0000ffffff00ffffff000000ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff0000ffffffffffffffffffffffffffffffffffffffff0000ffffff0000ffff0000ffff
+0000ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff0000ffffffffffffff0000ffffff0000ffffffff0000ffff
+ff0000ffffffff000000ff0000ffffffff000000ffff0000ffffff0000ffffffff0000ff
+ffffff0000ffffffff0000ffffff0000ffffff0000ffffff0000ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff0000ffff
+ff00ffffff0000ffff0000ffffff0000ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff000000ffffffffff0000ffffff00
+00ffffffff0000ffffff0000ffffffffff0000ff0000ffffffffff0000ffff0000ffffff
+0000ffffffff0000ffffffff0000ffffffff0000ffffff0000ffffff0000ffffff0000ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffff
+ffffffffff0000ffffffffff00000000ffff0000ffffff0000ffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ff
+ffffff0000ffffff0000ffffffff0000ffffff0000ffffffffff0000ff0000ffffffffff
+0000ffff0000ffffff0000ffffffff0000ffffffff0000ffffffff0000ffffff0000ffff
+ff0000ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff0000ffffffffff
+ffffffffffffffffffffffffffff0000ffffffff00ffff0000ffff0000ffffff0000ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffff0000ffffff0000ffffffff0000ffffff0000ffffffffff00
+00ff0000ffffffffff0000ffff0000ffffff0000ffffffff0000ffffffff0000ffffffff
+0000ffffff0000ffffffff00000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+00ff0000ffffffffffffffffffffffffffffffffffffff0000ffffff0000ffff0000ffff
+0000ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff00ffffffff00ffffff0000ffffff0000ffffffff0000ffff
+ff0000ffffffffff00ffff0000ffffffffff00ffffff0000ffffff0000ffffffff0000ff
+ffffff0000ffffffff0000ffffff0000ffffff0000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff00ff0000ffffffffffffffffffffffffffffffffffffff0000ffff
+000000ff000000ffff0000ffff000000ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff00ffffffff00ffffff0000ffffff00
+00ffffffff0000ffffffff0000ffffff0000ffffff0000ffffff0000ffffff0000ffffff
+0000ffffffff0000ffffffff0000ffffffff0000ffffff0000ffffff00000000ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff00ff0000ffffffffffffffffffffffffffff
+ffffffffff00000000ff00000000000000ffff000000ff0000ffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ff
+ff0000000000ff0000000000ff00000000ffffffff00000000ffffffffffff00000000ff
+ffffffffff0000000000000000ff00000000ffff00000000ffff00000000ff00000000ff
+ff00000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff00ffff0000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff00ffffffffffffff00ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff
+ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff0000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff00ffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffffff
+ffffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff00ffffffffffffffffffff0000000000000000000000000000
+000000000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff000000
+00ffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff
+ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff0000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+00ffff0000ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff00ffffff0000ffffffff00ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff0000000000ffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000ff
+ffffffffffffff0000ff0000000000000000ffffff0000000000ffffffffffffff0000ff
+ffffffffffffff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffffff
+0000ffffffffffff0000ffffffffffffffffffffffff0000000000000000000000000000
+ff00ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff0000ffffff00000000ffffffffff0000ffffffff00000000ffffffffffff0000ffffff
+ffffffffff0000ffffffffffffffffffff00ffffffffffff0000ffffffffffffffffffff
+ffffffffffffffff0000ffffffffff00000000ffffffffffffffffffffffff0000ffffff
+ff0000ffffffff0000ffff00ffffffffffffff00ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff0000ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff0000ffffffffff000000ffffffff00ffffffffffff00000000ff
+ffffffff00ffffffffffffffffff00ffffffffffff00ffffffffff00ffffffffff0000ff
+ffffffffffffffffffffffffffffffffff00ffffffffffffffff0000ffffffffffffffff
+ffffffff0000ffffffff0000ffffffffff00ffffff00ffffffffffffff00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+00ffff0000ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff0000ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000
+ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff0000ffffffffffff0000ffffff00ffffff
+ffffffffff000000ffffffff0000ffffffffffffffff00ffffffffffff0000ffffffffff
+0000ffffffff0000ffffffffffffffffffffffffffffffffff00ffffffffffffffffff00
+00ffffffffffffffffffffffff00ffffffffff0000ffffffffff00ffffff0000ffffffff
+ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff007f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff
+0000ffff0000ffffffffffffffffff000000ffff0000ffffffffffffffff0000ffffffff
+ffff0000ffffffffffff0000ffffff0000ffffffffffffffffffffffffffffffff0000ff
+ffffffffffffffff0000ffffffffffffffffffffffffffffffffffff0000ffffffffffff
+ffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffff
+ffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff
+ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff0000ffffffffffff0000ffff0000ffffffffffffffffffff0000ffff00ffffffffffff
+ffffff0000ffffffff000000000000ffffffff0000ffffff0000ffffff0000000000ffff
+000000ffffff0000ffffffffffffffffff0000ffffffffffffff0000ffffffffffffffff
+ff0000ffffffffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff
+ffffff00ffffffff0000ffffffffffffffff0000ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff
+ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff0000ffffffffff000000ff0000ffffffffffffffffffffff0000
+0000ffffffffffffffffff0000ffffffffffffff0000ffffffffffff000000ffff0000ff
+ffffff0000ffffffffff00ffffff0000ffffffffffffffffffff0000ffffffffffffff00
+0000ffffffffffffffff0000ffffffffffffffffffff000000ffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+00000000ff000000ffff0000000000ff000000ffffff000000000000ffffffffff000000
+000000ffffffffffffff000000ffffff00000000000000ffffff0000000000ffffff0000
+00000000ffff0000ff0000000000000000ffff000000ffff0000000000ffffffffff0000
+ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff0000ffffffff000000ffff0000ffffffff
+ffffffffffffffff000000ffffffffffffffffff0000ffffffffffffff0000ffffffffff
+ffff0000ffff0000ffffffff0000ffffffffff00ffffff0000ffffffffffffffffffff00
+00ffffffffffffff0000ffffffffffffffffff0000ffffffffffffffffffffff0000ffff
+ffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff0000ffffffffff0000ffffffffff0000ff00ffffffff0000ffffff00
+00ffffff0000ffffffff0000ffffffffffffffff0000ffffffff0000ffffff0000ffffff
+0000ffffffff0000ffffff0000ffff000000ffff00ffff0000ffffffff00ffff0000ffff
+ff0000ffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff007f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000ff
+ffffff0000ffffffffffffffffffffffff00000000ffffffffffffffff0000ffffffffff
+ffff0000ffffffffffffff0000ffff0000ffffffff000000ffffff0000ffffff0000ffff
+ffffffffffffffff0000ffffffffffffffffffffffffffffffffffff0000ffffffffffff
+ffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff0000ffffffffff0000ffffffffff000000ffff
+ffffff0000000000000000ffff00ffffffffff0000ffffffffffffffff0000ffffffff00
+00ffffff0000ffffff0000ffffffff0000000000000000ff0000ffffffffffff0000ffff
+ff0000ffff00ffffffff0000ffffffff0000ffffffffffffffffffffffffffffffffffff
+ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff0000ffffffffffffffffff0000ffffffffffffffffffffff0000000000ffffffffffff
+ffff0000ffffffffffffff0000ffffffffffffff0000ffff0000ffffffffff0000ffffff
+00ffffffff0000ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffff
+ff0000ffffffffffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff0000ff
+ffffffffff0000ffffffff0000ffffffffffffffff0000ffffffffff0000ffffffffffff
+ffff0000ffffffff0000ffffff0000ffffff0000ffffff0000ffffffffffffffff0000ff
+ffffffffffff0000ffff00ffffffffffff00000000ffffffff0000ffffffffffffffffff
+ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff0000ffffffffffffffffff0000ffffffffffffffffffffff00ff
+ff000000ffffffffffffff0000ffffffffffffff0000ffffffffffffff0000ffff0000ff
+ffffffff000000ff0000ffffffff0000ffffffffffffffffffff0000ffffffffffffffff
+ffffffffffffffffffff0000ffffffffffffffffffffff0000ffffffffffff0000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+00ffffffffff0000ffffffffffff0000ffffffff0000ffffffffffffffff0000ffffffff
+ff0000ffffffffffffffff0000ffffffff0000ffffff0000ffffff0000ffffff0000ffff
+ffffffffffff0000ffffffffffffff0000ff0000ffffffff0000ffff0000ffffffff0000
+ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff0000ffffffff
+ffffffffffff00ffffffff000000ffffffffffff0000ffffffffffffff0000ffffffffff
+ffff0000ffff0000ffffffffffff0000ff0000ffffffff0000ffffffffffffffffffff00
+00ffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffff0000ffff
+ffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff0000ffffffffff0000ffffffffff00ff0000ffffff000000ffffffff
+ffffff0000ffffffffff0000ffffffffffffffff0000ffffffff0000ffffff0000ffffff
+0000ffffff000000ffffffffffffff0000ffffffffffffffff000000ffffffff0000ffff
+ff0000ffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff007f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff
+ffffff0000ffffffffffffffffff00ffffffffff000000ffffffffffff0000ffffffffff
+ffff0000ffffffffffffff0000ffff0000ffffffffffff00000000ffffffffff0000ffff
+ffffffffffffffff0000ffffffffffffffffffffffffffffffffffff0000ffffffffffff
+ffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff0000ffffffffff0000ffffffffff00ffff0000
+ffffff0000ffffffffff00ff000000ffffffff0000ffffffffffffffff0000ffffffff00
+00ffffff0000ffffff0000ffffffff0000ffffffffff00ff0000ffffffffffffffff0000
+00ffffffff0000ffffff0000ffffffff0000ffffffffffffffffffffffffffffffffffff
+ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff0000ffffffffffffffffff000000ffffffffffffff0000ffffffffffff000000ffffff
+ffff000000ffffffffffff0000ffffffffffffff0000ffff0000ffffffffffffff000000
+ffffffffff000000ffffffffffffffffff0000ffffffffffffff0000ffffffffffffffff
+ff0000ffffffffffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff0000ff
+ffffff00ffffff000000ffff00000000000000ffffff000000ffffff000000ffffffffff
+ffff0000ffffffff0000ffffff0000ffffff0000ffffffff00000000000000ffff0000ff
+ffffffffffffff000000ffffffff0000ffff000000ffffffff0000ffffffffffffffffff
+ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff0000ffffffffffffffffffff0000ffffffffffff0000ffffffff
+ffffff00000000ffffffffff0000ffffffffffff0000ff00ffffffff0000ffffff0000ff
+ffffffffffff0000ffffffffffffff0000ffffffffffffffffff0000ffffffffffffff00
+0000ffffffffffffffff000000ffffffffffffffffff0000ffffffffffff0000ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000
+000000ffff00000000ff00000000ffff00000000ffff0000000000ffffffffff00000000
+ff000000ffffffffffff00000000ffff00000000ff00000000ffffff000000ffffff0000
+000000ffff0000000000ffffffffffffff00ffffffffff00000000ff000000ffff000000
+0000ffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffff
+ffffffffffffffffffffffffffffffffff000000000000ffffffffffffffff0000ffffff
+ff000000000000ffffffff00000000000000ffffff0000ffffffffffffff000000ffffff
+ff0000ffffff0000ffffffffffffffff00ffffffffffffff0000ffffffffffffff000000
+00000000ffffffff0000ffffffffffffff00000000000000ffffffffffffff0000ffffff
+ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff
+ffffffffffffffffff0000ffffffffffffffffffffffffff0000ffffffffffffffff0000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff
+ffffffffff00ffffffffffffffffffffffff00ffffffffffffffffffffffffffff00ffff
+ffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff00ffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff
+ffffffffffffffffffffffffffff0000ffffffffffffffffffff00ffffffffffffffffff
+ffffffffff0000ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00ffffffffffffff00ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000
+ffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff0000
+ffffffffffffffffffffff00000000ffffffffffffffffffffffff0000ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff
+0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff0000ffffffffffffffffffff0000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff0000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+00ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff0000ffffff0000ffffffffffffffffffffff00ffffffff0000ffffff
+ffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff00000000ffffff000000ff00000000ff00000000ffffffffffff0000
+000000ffffffffff0000000000ffffff0000000000ff0000ff00000000ffffffff000000
+ffffff00000000000000ffffffffff00000000000000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff00ffffff0000ffffff0000ffffff0000ffffffff
+0000ffffffff0000ffff000000ffffff0000ffff000000ffffff0000ffffff000000ffff
+ff0000ffffffff0000ffffffff0000ffffff0000ffffff00ffffff000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffff0000
+ffffff0000ffffffff0000ffffff0000ffffffff000000ff0000ffffffff000000ffff00
+00ffffff0000ffffffff0000ffffffff0000ffffffff0000ffffff0000ffffff0000ffff
+ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+0000ffffffffff0000ffffff0000ffffffff0000ffffff0000ffffffffff0000ff0000ff
+ffffffff0000ffff0000ffffff0000ffffffff0000ffffffff0000ffffffff0000ffffff
+0000ffffff0000ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffff0000ffffff0000ffffffff0000ffffff0000ffff
+ffffff0000ff0000ffffffffff0000ffff0000ffffff0000ffffffff0000ffffffff0000
+ffffffff0000ffffff0000ffffff0000ffff0000ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff00ff0000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff000000ffffff0000ffffff0000ffffffff
+0000ffffff0000ffffffffff0000ff0000ffffffffff0000ffff0000ffffff0000ffffff
+ff0000ffffffff0000ffffffff0000ffffff0000ffffffff00000000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff0000ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff00ffffff0000
+ffffff0000ffffffff0000ffffff0000ffffffffff00ffff0000ffffffffff00ffffff00
+00ffffff0000ffffffff0000ffffffff0000ffffffff0000ffffff0000ffffff0000ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+00ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff
+ffffff00ffffff0000ffffff0000ffffffff0000ffffffff0000ffffff0000ffffff0000
+ffffff0000ffffff0000ffffff0000ffffffff0000ffffffff0000ffffffff0000ffffff
+0000ffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff00ff0000ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff0000000000ffff0000000000ff0000000000ff00000000ffffffff0000
+0000ffffffffffff00000000ffffffffffff0000000000000000ff00000000ffff000000
+00ffff00000000ff00000000ffff00000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff00ffff0000000000ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff
+ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffff0000ffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff00ffffffffffffffffffffffffffffff00000000ffffff0000
+0000000000ffffffff0000ffffffffffffffffffffffffffffffffffffffffffffff00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff00
+ffff0000ffff00ffff0000ff0000ffffffff0000ffffffffffffffffffffffffffffffff
+ffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff
+ffffffffffffff0000ffffffffff0000ffffffffff0000ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+00ffffffffffffffffffffffffffffff0000ffffffffff0000ffffffffff0000ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff0000ffffffffffffffffffffffffffffff0000ffffffffff0000ffff
+ffffff0000ffffffffff00ffffffff0000ffffffffffffffffffffffffffffffffffffff
+0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff000000ffffffffffff0000000000ffff00000000
+00000000000000000000ffff0000ffffff000000ffffff00000000000000ffffffffff00
+0000000000ffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff0000ff
+ff000000ffffff0000ffffffffff0000ffffffffff0000ffffffff0000ffffffff0000ff
+ffff0000ffffff0000ffffff0000ffffffffff0000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000
+ffffffffff0000ffffffff000000ffff0000ffffffffff0000ffffffffff0000ffffffff
+0000ffffffff0000ffffff0000ffffff0000000000000000ffffffff0000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff0000ffffffffff0000ffffffffff0000ffff0000ffffffffff0000ffff
+ffffff0000ffffffff0000ffffffff0000ffffff0000ffff0000ffffffffffffffffffff
+ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff0000ffffffffff0000ffffffffff0000ffff0000
+ffffffffff0000ffffffffff0000ffffffff0000ffffffff0000ffffff0000ffff0000ff
+ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff0000ffff
+ffffff0000ffff0000ffffffffff0000ffffffffff0000ffffffff0000ffffffff0000ff
+ffff0000ffff000000ffffffffffffffffffff0000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000
+ffffffffff0000ffffffffff00ffffff0000ffffffffff0000ffffffffff0000ffffffff
+0000ffffffff0000ffffff0000ffffff0000ffffffffff00ffffffff0000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff00ffffffffffff0000ffffff0000ffffff0000ffffffffff0000ffff
+ffffff0000ffffffff0000ffffffff0000ffffff0000ffffff00000000000000ffffffff
+ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff0000ffffffffffff00000000ffffffff000000
+0000ffff0000000000ffff0000000000ff00000000ffff00000000ff00000000ffffff00
+00000000ffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff
+end
+%%PageTrailer
+%%Trailer
+%%EOF
diff --git a/sourcecodes/bnt-master/docs/Figures/filter.fig b/sourcecodes/bnt-master/docs/Figures/filter.fig
new file mode 100644
index 00000000..4e125ccf
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/filter.fig
@@ -0,0 +1,74 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+6 2550 5100 6300 6375
+2 2 0 1 0 0 100 0 10 0.000 0 0 -1 0 0 5
+	 2550 5475 4050 5475 4050 5775 2550 5775 2550 5475
+2 1 0 1 0 0 100 0 10 0.000 0 0 -1 0 0 2
+	 4050 5475 6300 5475
+2 1 0 1 0 0 100 0 10 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3300 6375 3300 5925
+2 1 0 1 0 0 100 0 10 0.000 0 0 -1 1 1 2
+	0 0 1.00 60.00 120.00
+	0 0 1.00 60.00 120.00
+	 3450 6225 4050 6225
+4 0 0 100 0 0 18 0.0000 4 165 90 4050 5325 t\001
+4 0 0 100 0 0 18 0.0000 4 165 345 3600 6075 tau\001
+-6
+2 2 0 1 0 0 100 0 10 0.000 0 0 -1 0 0 5
+	 2550 2025 4050 2025 4050 2325 2550 2325 2550 2025
+2 1 0 1 0 0 100 0 10 0.000 0 0 -1 0 0 2
+	 4050 2025 6300 2025
+2 1 0 1 0 0 100 0 10 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 4050 2925 4050 2475
+2 2 0 1 0 0 100 0 10 0.000 0 0 -1 0 0 5
+	 2550 7200 6375 7200 6375 7500 2550 7500 2550 7200
+2 1 0 1 0 0 100 0 10 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3975 8025 3975 7575
+2 2 0 1 0 0 100 0 10 0.000 0 0 -1 0 0 5
+	 2475 3525 3975 3525 3975 3825 2475 3825 2475 3525
+2 1 0 1 0 0 100 0 10 0.000 0 0 -1 0 0 2
+	 3975 3525 6225 3525
+2 1 0 1 0 0 100 0 10 0.000 0 0 -1 1 1 2
+	0 0 1.00 60.00 120.00
+	0 0 1.00 60.00 120.00
+	 3975 4275 4575 4275
+2 1 0 1 0 0 100 0 10 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 4650 4425 4650 3975
+2 2 0 1 0 0 100 0 10 0.000 0 0 -1 0 0 5
+	 2550 600 4050 600 4050 900 2550 900 2550 600
+2 1 0 1 0 0 100 0 10 0.000 0 0 -1 0 0 2
+	 4050 600 6300 600
+2 1 0 1 0 0 100 0 10 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 4050 1500 4050 1050
+4 0 0 100 0 0 18 0.0000 4 165 90 4050 1875 t\001
+4 0 0 50 0 0 24 0.0000 4 330 3540 6675 2175 argmax P(x(1:t) | y(1:t))\001
+4 0 0 50 0 0 24 0.0000 4 330 810 6975 2550 x(1:t)\001
+4 0 0 100 0 0 18 0.0000 4 165 90 3975 7125 t\001
+4 0 0 100 0 0 18 0.0000 4 195 180 6225 7125 T\001
+4 0 0 100 0 0 18 0.0000 4 165 90 3975 3375 t\001
+4 0 0 100 0 0 18 0.0000 4 195 540 3975 4125 delta\001
+4 0 0 100 0 0 18 0.0000 4 165 90 4050 450 t\001
+4 0 0 50 0 0 24 0.0000 4 330 1950 6675 750 P(X(t)|y(1:t))\001
+4 0 0 50 0 0 24 0.0000 4 330 2865 6450 3600 P(X(t+delta)|y(1:t))\001
+4 0 0 50 0 0 24 0.0000 4 330 2550 6600 5550 P(X(t-tau)|y(1:t))\001
+4 0 0 50 0 0 24 0.0000 4 330 2085 6750 7425 P(X(t)|y(1:T))\001
+4 0 0 50 0 0 24 0.0000 4 330 1140 600 900 filtering\001
+4 0 0 50 0 0 24 0.0000 4 330 1470 450 3750 prediction\001
+4 0 0 50 0 0 24 0.0000 4 255 1005 600 2175 Viterbi\001
+4 0 0 50 0 0 24 0.0000 4 330 1305 600 5775 fixed-lag\001
+4 0 0 50 0 0 24 0.0000 4 330 1575 525 7740 smoothing\001
+4 0 0 50 0 0 24 0.0000 4 330 1170 525 8055 (offline)\001
+4 0 0 50 0 0 24 0.0000 4 330 1575 600 6090 smoothing\001
+4 0 0 50 0 0 24 0.0000 4 255 1920 525 7425 fixed interval\001
diff --git a/sourcecodes/bnt-master/docs/Figures/filter.gif b/sourcecodes/bnt-master/docs/Figures/filter.gif
new file mode 100644
index 00000000..bda3de61
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/filter.gif
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/filter.tex b/sourcecodes/bnt-master/docs/Figures/filter.tex
new file mode 100644
index 00000000..871f8dfd
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/filter.tex
@@ -0,0 +1,51 @@
+%Latex
+\documentstyle[fleqn,psfig,12pt,pstricks,pst-node,pst-tree]{article}
+
+%\documentclass[fleqn,12pt]{article}
+%\usepackage{pstricks,pst-node,pst-tree}
+ 
+%latex2e
+%\documentclass{article}
+%\usepackage{epsfig,alltt,fancybox}
+
+\setlength{\textwidth}{6.5in}
+\setlength{\oddsidemargin}{0in}
+\setlength{\textheight}{8.5in}
+\setlength{\headheight}{0in}
+\setlength{\headsep}{-0.5in}
+\setlength{\parindent}{0in} % block style
+\setlength{\parskip}{0.3cm}
+
+\newcommand{\mytitle}[1]{\newpage \huge \begin{center}#1\vspace{0.8cm}\end{center} \LARGE}
+
+
+\begin{document}
+
+\mytitle{Hello world}
+
+Hello world
+
+\centering
+$
+\pstree[treemode=R]{\Tcircle{b}}{%
+  \pstree{\TC*^{a_1}}{%
+     \Tr{b_{11}}^{x_1}
+     \Tr{b_{12}}_{x_2}
+   }
+  \pstree{\TC*_{a_2}}{%
+     \Tr{b_{21}}^{x_1}
+     \Tr{b_{22}}_{x_2}
+   }
+}
+$
+
+
+
+\mytitle{Hello world 2}
+
+\psline[linewidth=0.5cm](0,0)(2,0)
+\psline[linewidth=0.05cm](2,-1)(6,-1)
+
+
+
+\end{document}
diff --git a/sourcecodes/bnt-master/docs/Figures/gaussplot.png b/sourcecodes/bnt-master/docs/Figures/gaussplot.png
new file mode 100644
index 00000000..29cb66ec
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/gaussplot.png
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/hme.fig b/sourcecodes/bnt-master/docs/Figures/hme.fig
new file mode 100644
index 00000000..dffda256
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/hme.fig
@@ -0,0 +1,35 @@
+#FIG 3.1
+Landscape
+Center
+Inches
+1200 2
+6 225 150 2625 3825
+6 300 150 1800 3450
+5 1 0 1 -1 -1 0 0 -1 0.000 0 1 1 0 2212.500 2250.000 825 1425 600 2325 825 3075
+	0 0 1.00 60.00 120.00
+5 1 0 1 -1 -1 0 0 -1 0.000 0 1 1 0 3083.468 1905.242 750 525 375 2025 675 3150
+	0 0 1.00 60.00 120.00
+5 1 0 1 -1 -1 0 0 -1 0.000 0 0 1 0 679.747 1409.810 1200 450 1725 1725 1275 2325
+	0 0 1.00 60.00 120.00
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 975 375 300 225 975 375 1275 600
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 1050 3225 300 225 1050 3225 1350 3450
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 825 1050 1200 1050 1200 1500 825 1500 825 1050
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 825 2100 1200 2100 1200 2550 825 2550 825 2100
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1050 600 1050 1050
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1050 1575 1050 2100
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1050 2625 1050 3000
+-6
+4 0 -1 0 0 0 12 0.0000 4 180 2370 225 3750 Hierarchical Mixture of Experts\001
+4 0 -1 0 0 0 12 0.0000 4 135 120 825 450 X\001
+4 0 -1 0 0 0 12 0.0000 4 165 225 900 1350 Q1\001
+4 0 -1 0 0 0 12 0.0000 4 165 225 900 2400 Q2\001
+4 0 -1 0 0 0 12 0.0000 4 135 135 900 3300 Y\001
+-6
diff --git a/sourcecodes/bnt-master/docs/Figures/hme.gif b/sourcecodes/bnt-master/docs/Figures/hme.gif
new file mode 100644
index 00000000..85150fbb
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/hme.gif
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/hme_dec_boundary.gif b/sourcecodes/bnt-master/docs/Figures/hme_dec_boundary.gif
new file mode 100644
index 00000000..15cd6b1d
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/hme_dec_boundary.gif
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/hme_dec_boundary.png b/sourcecodes/bnt-master/docs/Figures/hme_dec_boundary.png
new file mode 100644
index 00000000..a12cb885
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/hme_dec_boundary.png
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/hmm3.fig b/sourcecodes/bnt-master/docs/Figures/hmm3.fig
new file mode 100644
index 00000000..61578c4e
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/hmm3.fig
@@ -0,0 +1,39 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+75.00
+Single
+-2
+1200 2
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 525 1650 270 270 525 1650 675 1875
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1575 1650 270 270 1575 1650 1725 1875
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 2625 1650 270 270 2625 1650 2775 1875
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 375 600 750 600 750 1050 375 1050 375 600
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 525 1050 525 1425
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 825 1350 825
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 1425 600 1800 600 1800 1050 1425 1050 1425 600
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1575 1050 1575 1425
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1800 825 2325 825
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 2400 600 2775 600 2775 1050 2400 1050 2400 600
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2550 1050 2550 1425
+4 0 0 100 0 2 12 0.0000 4 135 90 525 975 1\001
+4 0 0 100 0 2 12 0.0000 4 135 90 1575 975 3\001
+4 0 0 100 0 2 12 0.0000 4 135 90 2475 900 5\001
+4 0 0 100 0 2 12 0.0000 4 135 90 450 1725 2\001
+4 0 0 100 0 2 12 0.0000 4 135 90 1425 1725 4\001
+4 0 0 100 0 2 12 0.0000 4 135 90 2550 1725 6\001
diff --git a/sourcecodes/bnt-master/docs/Figures/hmm3.gif b/sourcecodes/bnt-master/docs/Figures/hmm3.gif
new file mode 100644
index 00000000..05a6f592
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/hmm3.gif
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/hmm3letter.fig b/sourcecodes/bnt-master/docs/Figures/hmm3letter.fig
new file mode 100644
index 00000000..3a190045
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/hmm3letter.fig
@@ -0,0 +1,39 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+75.00
+Single
+-2
+1200 2
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 525 1650 270 270 525 1650 675 1875
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1575 1650 270 270 1575 1650 1725 1875
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 2625 1650 270 270 2625 1650 2775 1875
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 375 600 750 600 750 1050 375 1050 375 600
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 525 1050 525 1425
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 825 1350 825
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 1425 600 1800 600 1800 1050 1425 1050 1425 600
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1575 1050 1575 1425
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1800 825 2325 825
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 2400 600 2775 600 2775 1050 2400 1050 2400 600
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2550 1050 2550 1425
+4 0 0 100 0 0 12 0.0000 4 135 225 450 1725 Y1\001
+4 0 0 100 0 0 12 0.0000 4 135 225 1425 1725 Y2\001
+4 0 0 100 0 0 12 0.0000 4 135 225 2475 1725 Y3\001
+4 0 0 100 0 0 12 0.0000 4 135 225 450 900 X1\001
+4 0 0 100 0 0 12 0.0000 4 135 225 2475 900 X3\001
+4 0 0 100 0 0 12 0.0000 4 135 225 1500 900 X2\001
diff --git a/sourcecodes/bnt-master/docs/Figures/hmm3letter.gif b/sourcecodes/bnt-master/docs/Figures/hmm3letter.gif
new file mode 100644
index 00000000..540fb75b
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/hmm3letter.gif
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/hmm3letter.jpg b/sourcecodes/bnt-master/docs/Figures/hmm3letter.jpg
new file mode 100644
index 00000000..29695dfd
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/hmm3letter.jpg
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/hmm4.fig b/sourcecodes/bnt-master/docs/Figures/hmm4.fig
new file mode 100644
index 00000000..92066fb9
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/hmm4.fig
@@ -0,0 +1,55 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+75.00
+Single
+-2
+1200 2
+1 3 0 2 0 7 50 0 -1 0.000 1 0.0000 600 1200 300 300 600 1200 900 1200
+1 3 0 2 0 7 50 0 -1 0.000 1 0.0000 1800 1200 300 300 1800 1200 2100 1200
+1 3 0 2 0 7 50 0 -1 0.000 1 0.0000 3000 1200 300 300 3000 1200 3300 1200
+1 3 0 2 0 7 50 0 -1 0.000 1 0.0000 4200 1200 300 300 4200 1200 4500 1200
+1 3 0 2 0 0 50 0 7 0.000 1 0.0000 600 2400 300 300 600 2400 900 2400
+1 3 0 2 0 0 50 0 7 0.000 1 0.0000 3000 2400 300 300 3000 2400 3300 2400
+1 3 0 2 0 0 50 0 7 0.000 1 0.0000 4200 2400 300 300 4200 2400 4500 2400
+1 3 0 2 0 0 50 0 7 0.000 1 0.0000 1800 2400 300 300 1800 2400 2100 2400
+2 1 0 2 0 0 50 0 7 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 600 1500 600 2100
+2 1 0 2 0 0 50 0 7 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 900 1200 1500 1200
+2 1 0 2 0 0 50 0 7 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 2100 1200 2700 1200
+2 1 0 2 0 0 50 0 7 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 3375 1200 3900 1200
+2 1 0 2 0 0 50 0 7 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 1800 1500 1800 2100
+2 1 0 2 0 0 50 0 7 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 3000 1500 3000 2100
+2 1 0 2 0 0 50 0 7 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 4200 1500 4200 2100
+4 0 0 100 0 0 30 0.0000 4 60 600 5025 1200 . . .\001
+4 0 0 50 0 0 24 0.0000 4 255 270 450 1275 X\001
+4 0 0 50 0 0 24 0.0000 4 255 270 1650 1275 X\001
+4 0 0 50 0 0 24 0.0000 4 255 270 2850 1275 X\001
+4 0 0 50 0 0 24 0.0000 4 255 240 450 2475 Y\001
+4 0 0 50 0 0 24 0.0000 4 255 240 2850 2475 Y\001
+4 0 0 50 0 0 24 0.0000 4 255 240 4050 2475 Y\001
+4 0 0 50 0 0 24 0.0000 4 255 180 675 1425 1\001
+4 0 0 50 0 0 24 0.0000 4 255 180 1875 1350 2\001
+4 0 0 50 0 0 24 0.0000 4 255 180 3075 1350 3\001
+4 0 0 50 0 0 24 0.0000 4 255 180 4275 1425 4\001
+4 0 0 50 0 0 24 0.0000 4 255 180 600 2550 1\001
+4 0 0 50 0 0 24 0.0000 4 255 180 3000 2550 3\001
+4 0 0 50 0 0 24 0.0000 4 255 180 4200 2550 4\001
+4 0 0 50 0 0 24 0.0000 4 255 270 4050 1275 X\001
+4 0 0 50 0 0 24 0.0000 4 255 180 1800 2625 2\001
+4 0 0 50 0 0 24 0.0000 4 255 240 1650 2475 Y\001
diff --git a/sourcecodes/bnt-master/docs/Figures/hmm4.gif b/sourcecodes/bnt-master/docs/Figures/hmm4.gif
new file mode 100644
index 00000000..336bc5d6
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/hmm4.gif
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/hmm4_params.fig b/sourcecodes/bnt-master/docs/Figures/hmm4_params.fig
new file mode 100644
index 00000000..b254e1e5
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/hmm4_params.fig
@@ -0,0 +1,81 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+75.00
+Single
+-2
+1200 2
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 3150 2550 270 270 3150 2550 3300 2775
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 3975 2550 270 270 3975 2550 4125 2775
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1350 2550 270 270 1350 2550 1500 2775
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 2250 2550 270 270 2250 2550 2400 2775
+1 3 1 1 0 7 100 0 -1 4.000 1 0.0000 2625 3825 270 270 2625 3825 2775 4050
+1 3 1 1 0 7 100 0 -1 4.000 1 0.0000 1425 600 270 270 1425 600 1575 825
+1 3 1 1 0 7 100 0 -1 4.000 1 0.0000 3000 600 270 270 3000 600 3150 825
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 2925 1500 3300 1500 3300 1950 2925 1950 2925 1500
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3075 1950 3075 2325
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 3750 1500 4125 1500 4125 1950 3750 1950 3750 1500
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3300 1725 3750 1725
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3975 1950 3975 2250
+2 1 0 1 0 0 100 0 20 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1575 1725 2100 1725
+2 1 0 1 0 0 100 0 20 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2475 1725 2925 1725
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 1200 1500 1575 1500 1575 1950 1200 1950 1200 1500
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1350 1950 1350 2325
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 2100 1500 2475 1500 2475 1950 2100 1950 2100 1500
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2250 1950 2250 2325
+2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2475 3600 1500 2775
+2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2550 3600 2400 2850
+2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2700 3525 3075 2775
+2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2850 3675 3825 2775
+2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1425 900 1425 1500
+2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2925 900 2400 1500
+2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3075 900 3075 1425
+2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3225 750 3900 1500
+4 0 0 100 0 0 12 0.0000 4 135 225 3000 2625 Y3\001
+4 0 0 100 0 0 12 0.0000 4 165 225 3825 1800 Q4\001
+4 0 0 100 0 0 12 0.0000 4 165 225 3000 1800 Q3\001
+4 0 0 100 0 0 12 0.0000 4 135 225 3825 2625 Y4\001
+4 0 0 100 0 0 12 0.0000 4 135 225 1275 2625 Y1\001
+4 0 0 100 0 0 12 0.0000 4 165 225 1275 1800 Q1\001
+4 0 0 100 0 0 12 0.0000 4 135 225 2100 2625 Y2\001
+4 0 0 100 0 0 12 0.0000 4 165 225 2175 1800 Q2\001
+4 0 0 100 0 0 12 0.0000 4 135 195 1275 675 P1\001
+4 0 0 100 0 0 12 0.0000 4 135 195 2850 675 P2\001
+4 0 0 100 0 0 12 0.0000 4 135 195 2550 3900 P3\001
+4 0 0 100 0 0 30 0.0000 4 30 525 4350 1800 . . .\001
diff --git a/sourcecodes/bnt-master/docs/Figures/hmm4_params.gif b/sourcecodes/bnt-master/docs/Figures/hmm4_params.gif
new file mode 100644
index 00000000..656bc13f
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/hmm4_params.gif
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/hmm4_paramsX.fig b/sourcecodes/bnt-master/docs/Figures/hmm4_paramsX.fig
new file mode 100644
index 00000000..5deec7e1
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/hmm4_paramsX.fig
@@ -0,0 +1,81 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+75.00
+Single
+-2
+1200 2
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 3150 2550 270 270 3150 2550 3300 2775
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 3975 2550 270 270 3975 2550 4125 2775
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1350 2550 270 270 1350 2550 1500 2775
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 2250 2550 270 270 2250 2550 2400 2775
+1 3 1 1 0 7 100 0 -1 4.000 1 0.0000 1425 600 270 270 1425 600 1575 825
+1 3 1 1 0 7 100 0 -1 4.000 1 0.0000 3000 600 270 270 3000 600 3150 825
+1 3 1 1 0 7 100 0 -1 4.000 1 0.0000 2615 3863 270 270 2615 3863 2765 4088
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 2925 1500 3300 1500 3300 1950 2925 1950 2925 1500
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3075 1950 3075 2325
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 3750 1500 4125 1500 4125 1950 3750 1950 3750 1500
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3300 1725 3750 1725
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3975 1950 3975 2250
+2 1 0 1 0 0 100 0 20 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1575 1725 2100 1725
+2 1 0 1 0 0 100 0 20 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2475 1725 2925 1725
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 1200 1500 1575 1500 1575 1950 1200 1950 1200 1500
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1350 1950 1350 2325
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 2100 1500 2475 1500 2475 1950 2100 1950 2100 1500
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2250 1950 2250 2325
+2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2475 3600 1500 2775
+2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2550 3600 2400 2850
+2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2700 3525 3075 2775
+2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2850 3675 3825 2775
+2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1425 900 1425 1500
+2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2925 900 2400 1500
+2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3075 900 3075 1425
+2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3225 750 3900 1500
+4 0 0 100 0 0 12 0.0000 4 135 225 3000 2625 Y3\001
+4 0 0 100 0 0 12 0.0000 4 135 225 3825 2625 Y4\001
+4 0 0 100 0 0 12 0.0000 4 135 225 1275 2625 Y1\001
+4 0 0 100 0 0 12 0.0000 4 135 225 2100 2625 Y2\001
+4 0 0 100 0 0 30 0.0000 4 60 600 4350 1800 . . .\001
+4 0 0 50 0 0 12 0.0000 4 135 225 1275 1800 X1\001
+4 0 0 50 0 0 12 0.0000 4 135 225 2175 1800 X2\001
+4 0 0 50 0 0 12 0.0000 4 135 225 3000 1800 X3\001
+4 0 0 50 0 0 12 0.0000 4 135 225 3825 1800 X4\001
+4 0 0 50 0 0 18 0.0000 4 195 180 2550 3975 B\001
+4 0 0 50 0 0 18 0.0000 4 255 210 1275 750 pi\001
+4 0 0 50 0 0 18 0.0000 4 195 225 2850 750 A\001
diff --git a/sourcecodes/bnt-master/docs/Figures/hmm4_square.fig b/sourcecodes/bnt-master/docs/Figures/hmm4_square.fig
new file mode 100644
index 00000000..9f0226f0
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/hmm4_square.fig
@@ -0,0 +1,55 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+75.00
+Single
+-2
+1200 2
+6 1425 600 2025 1950
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1725 1650 270 270 1725 1650 1875 1875
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 1575 600 1950 600 1950 1050 1575 1050 1575 600
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1725 1050 1725 1425
+4 0 0 100 0 0 12 0.0000 4 135 225 1575 1725 Y2\001
+4 0 0 100 0 0 12 0.0000 4 165 225 1650 900 Q2\001
+-6
+6 525 600 1125 1950
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 825 1650 270 270 825 1650 975 1875
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 675 600 1050 600 1050 1050 675 1050 675 600
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 1050 825 1425
+4 0 0 100 0 0 12 0.0000 4 135 225 750 1725 Y1\001
+4 0 0 100 0 0 12 0.0000 4 165 225 750 900 Q1\001
+-6
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 2625 1650 270 270 2625 1650 2775 1875
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 3450 1650 270 270 3450 1650 3600 1875
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 2400 600 2775 600 2775 1050 2400 1050 2400 600
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2550 1050 2550 1425
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 3225 600 3600 600 3600 1050 3225 1050 3225 600
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2775 825 3225 825
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3450 1050 3450 1350
+2 1 0 1 0 0 100 0 20 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1050 825 1575 825
+2 1 0 1 0 0 100 0 20 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1950 825 2400 825
+4 0 0 100 0 0 12 0.0000 4 135 225 2475 1725 Y3\001
+4 0 0 100 0 0 12 0.0000 4 165 225 3300 900 Q4\001
+4 0 0 100 0 0 12 0.0000 4 165 225 2475 900 Q3\001
+4 0 0 100 0 0 12 0.0000 4 135 225 3300 1725 Y4\001
+4 0 0 100 0 0 30 0.0000 4 30 525 3825 975 . . .\001
diff --git a/sourcecodes/bnt-master/docs/Figures/hmm_ar.fig b/sourcecodes/bnt-master/docs/Figures/hmm_ar.fig
new file mode 100644
index 00000000..8aefe002
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/hmm_ar.fig
@@ -0,0 +1,30 @@
+#FIG 3.1
+Landscape
+Center
+Inches
+1200 2
+6 225 225 2025 1875
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 525 1275 300 225 525 1275 825 1500
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1575 1275 300 225 1575 1275 1875 1500
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 450 1350 450
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 375 225 750 225 750 675 375 675 375 225
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 525 675 525 1050
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 1425 225 1800 225 1800 675 1425 675 1425 225
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1575 675 1575 1050
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 1275 1275 1275
+4 0 -1 0 0 0 12 0.0000 4 165 225 450 525 Q1\001
+4 0 -1 0 0 0 12 0.0000 4 165 225 1500 525 Q2\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 375 1350 Y1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 1425 1350 Y2\001
+4 0 -1 0 0 0 12 0.0000 4 180 1785 225 1800 Auto Regressive HMM\001
+-6
diff --git a/sourcecodes/bnt-master/docs/Figures/hmm_ar.gif b/sourcecodes/bnt-master/docs/Figures/hmm_ar.gif
new file mode 100644
index 00000000..57d57c4d
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/hmm_ar.gif
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/hmm_coupled.fig b/sourcecodes/bnt-master/docs/Figures/hmm_coupled.fig
new file mode 100644
index 00000000..6eab0030
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/hmm_coupled.fig
@@ -0,0 +1,65 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+75.00
+Single
+-2
+1200 2
+6 300 225 1950 675
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 600 450 300 225 600 450 900 675
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1650 450 300 225 1650 450 1950 675
+-6
+6 450 1875 1875 2325
+6 450 1875 1875 2325
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 2100 1425 2100
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 450 1875 825 1875 825 2325 450 2325 450 1875
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 1500 1875 1875 1875 1875 2325 1500 2325 1500 1875
+-6
+-6
+6 450 1050 1875 1500
+6 450 1050 1875 1500
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 1275 1425 1275
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 450 1050 825 1050 825 1500 450 1500 450 1050
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 1500 1050 1875 1050 1875 1500 1500 1500 1500 1050
+-6
+-6
+6 300 2700 1950 3150
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 600 2925 300 225 600 2925 900 3150
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1650 2925 300 225 1650 2925 1950 3150
+-6
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 600 2325 600 2700
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1650 2325 1650 2700
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 600 1050 600 675
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1650 1050 1650 675
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 2100 1425 1350
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 1275 1350 2025
+4 0 -1 0 0 0 12 0.0000 4 135 210 450 525 C1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 525 1350 A1\001
+4 0 -1 0 0 0 12 0.0000 4 135 210 525 2175 B1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 450 3000 D1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 1500 3075 D2\001
+4 0 -1 0 0 0 12 0.0000 4 135 210 1500 525 C2\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 1575 1350 A2\001
+4 0 -1 0 0 0 12 0.0000 4 135 210 1575 2175 B2\001
diff --git a/sourcecodes/bnt-master/docs/Figures/hmm_coupled.gif b/sourcecodes/bnt-master/docs/Figures/hmm_coupled.gif
new file mode 100644
index 00000000..1dd2859c
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/hmm_coupled.gif
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/hmm_factorial.fig b/sourcecodes/bnt-master/docs/Figures/hmm_factorial.fig
new file mode 100644
index 00000000..94e6010c
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/hmm_factorial.fig
@@ -0,0 +1,50 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+75.00
+Single
+-2
+1200 2
+5 1 0 1 -1 7 0 0 -1 0.000 0 1 1 0 1501.355 1323.343 675 450 300 1275 525 2025
+	0 0 1.00 60.00 120.00
+5 1 0 1 -1 7 0 0 -1 0.000 0 1 1 0 2263.600 1307.555 1650 525 1275 1200 1575 2025
+	0 0 1.00 60.00 120.00
+6 675 1050 2100 1500
+6 675 1050 2100 1500
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1125 1275 1650 1275
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 675 1050 1050 1050 1050 1500 675 1500 675 1050
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 1725 1050 2100 1050 2100 1500 1725 1500 1725 1050
+-6
+-6
+6 675 225 2100 675
+6 675 225 2100 675
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1125 450 1650 450
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 675 225 1050 225 1050 675 675 675 675 225
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 1725 225 2100 225 2100 675 1725 675 1725 225
+-6
+-6
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 825 2100 300 225 825 2100 1125 2325
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1875 2100 300 225 1875 2100 2175 2325
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 1500 825 1875
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1875 1500 1875 1875
+4 0 -1 0 0 0 12 0.0000 4 135 225 675 2175 Y1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 1800 2250 Y2\001
+4 0 -1 0 0 0 12 0.0000 4 135 1185 675 2850 Factorial HMM\001
+4 0 0 100 0 0 12 0.0000 4 135 225 750 525 A1\001
+4 0 0 100 0 0 12 0.0000 4 135 225 1800 525 A2\001
+4 0 0 100 0 0 12 0.0000 4 135 210 750 1350 B1\001
+4 0 0 100 0 0 12 0.0000 4 135 210 1800 1350 B2\001
diff --git a/sourcecodes/bnt-master/docs/Figures/hmm_factorial.gif b/sourcecodes/bnt-master/docs/Figures/hmm_factorial.gif
new file mode 100644
index 00000000..6ee4d113
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/hmm_factorial.gif
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/hmm_gauss.fig b/sourcecodes/bnt-master/docs/Figures/hmm_gauss.fig
new file mode 100644
index 00000000..bb26e360
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/hmm_gauss.fig
@@ -0,0 +1,27 @@
+#FIG 3.1
+Landscape
+Center
+Inches
+1200 2
+6 225 600 1875 1875
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 525 1650 300 225 525 1650 825 1875
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1575 1650 300 225 1575 1650 1875 1875
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 825 1350 825
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 375 600 750 600 750 1050 375 1050 375 600
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 525 1050 525 1425
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 1425 600 1800 600 1800 1050 1425 1050 1425 600
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1575 1050 1575 1425
+-6
+4 0 -1 0 0 0 12 0.0000 4 165 225 450 900 Q1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 375 1725 Y1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 1500 1725 Y2\001
+4 0 -1 0 0 0 12 0.0000 4 180 2130 150 2250 HMM with Gaussian output\001
+4 0 -1 0 0 0 12 0.0000 4 165 225 1500 900 Q2\001
diff --git a/sourcecodes/bnt-master/docs/Figures/hmm_gauss.gif b/sourcecodes/bnt-master/docs/Figures/hmm_gauss.gif
new file mode 100644
index 00000000..d0aa117b
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/hmm_gauss.gif
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/hmm_io.fig b/sourcecodes/bnt-master/docs/Figures/hmm_io.fig
new file mode 100644
index 00000000..1f84aafd
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/hmm_io.fig
@@ -0,0 +1,44 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+75.00
+Single
+-2
+1200 2
+5 1 0 1 -1 7 0 0 -1 0.000 0 1 1 0 1725.000 1200.000 600 450 375 1275 600 1950
+	0 0 1.00 60.00 120.00
+5 1 0 1 -1 7 0 0 -1 0.000 0 1 1 0 2859.375 1303.125 1650 525 1425 1200 1575 1950
+	0 0 1.00 60.00 120.00
+6 525 150 2175 2325
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1875 2100 300 225 1875 2100 2175 2325
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 825 2100 300 225 825 2100 1125 2325
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 900 375 300 225 900 375 1200 600
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1875 375 300 225 1875 375 2175 600
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1125 1275 1650 1275
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 675 1050 1050 1050 1050 1500 675 1500 675 1050
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 1500 825 1875
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 1725 1050 2100 1050 2100 1500 1725 1500 1725 1050
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1875 1500 1875 1875
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 675 825 1050
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1875 675 1875 1050
+-6
+4 0 -1 0 0 0 12 0.0000 4 165 225 750 1350 Q1\001
+4 0 -1 0 0 0 12 0.0000 4 165 225 1800 1350 Q2\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 750 450 U1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 750 2175 Y1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 1725 450 U2\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 1725 2175 Y2\001
diff --git a/sourcecodes/bnt-master/docs/Figures/hmm_io.gif b/sourcecodes/bnt-master/docs/Figures/hmm_io.gif
new file mode 100644
index 00000000..24dfc2da
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/hmm_io.gif
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/hmm_mixgauss.fig b/sourcecodes/bnt-master/docs/Figures/hmm_mixgauss.fig
new file mode 100644
index 00000000..cbfb1c63
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/hmm_mixgauss.fig
@@ -0,0 +1,52 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+75.00
+Single
+-2
+1200 2
+6 675 1650 1275 2100
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 975 1875 300 225 975 1875 1275 2100
+4 0 -1 0 0 0 12 0.0000 4 135 225 825 1950 Y1\001
+-6
+6 1725 1725 2325 2175
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 2025 1950 300 225 2025 1950 2325 2175
+4 0 -1 0 0 0 12 0.0000 4 135 225 1950 2025 Y2\001
+-6
+6 1500 900 1875 1350
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 1500 900 1875 900 1875 1350 1500 1350 1500 900
+4 0 -1 0 0 0 12 0.0000 4 135 255 1575 1200 M2\001
+-6
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1275 450 1800 450
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 825 225 1200 225 1200 675 825 675 825 225
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 1875 225 2250 225 2250 675 1875 675 1875 225
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 225 900 600 900 600 1350 225 1350 225 900
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 675 450 900
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 525 1350 750 1650
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1050 675 1050 1650
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1875 675 1725 900
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1800 1350 1950 1725
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2100 675 2100 1725
+4 0 -1 0 0 0 12 0.0000 4 165 225 900 525 Q1\001
+4 0 -1 0 0 0 12 0.0000 4 135 255 300 1200 M1\001
+4 0 -1 0 0 0 12 0.0000 4 165 225 1950 525 Q2\001
diff --git a/sourcecodes/bnt-master/docs/Figures/hmm_mixgauss.gif b/sourcecodes/bnt-master/docs/Figures/hmm_mixgauss.gif
new file mode 100644
index 00000000..33d758b8
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/hmm_mixgauss.gif
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/hmm_zoo.fig b/sourcecodes/bnt-master/docs/Figures/hmm_zoo.fig
new file mode 100644
index 00000000..05d34578
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/hmm_zoo.fig
@@ -0,0 +1,162 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+75.00
+Single
+-2
+1200 2
+5 1 0 2 0 0 50 0 -1 0.000 0 1 1 0 2784.375 4153.125 1575 3375 1350 4050 1500 4800
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 0 50 0 -1 0.000 0 1 1 0 1650.000 4050.000 525 3300 300 4125 525 4800
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 0 50 0 -1 0.000 0 1 1 0 6376.355 4323.343 5550 3450 5175 4275 5400 5025
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 0 50 0 -1 0.000 0 1 1 0 7138.600 4307.555 6525 3525 6150 4200 6450 5025
+	1 1 1.00 60.00 120.00
+1 1 0 2 7 0 50 0 20 0.000 1 0.0000 750 4950 300 225 750 4950 1050 5175
+1 1 0 2 7 0 50 0 20 0.000 1 0.0000 1800 4950 300 225 1800 4950 2100 5175
+1 1 0 2 7 0 50 0 20 0.000 1 0.0000 825 3225 300 225 825 3225 1125 3450
+1 1 0 2 7 0 50 0 20 0.000 1 0.0000 1800 3225 300 225 1800 3225 2100 3450
+1 1 0 2 7 0 50 0 20 0.000 1 0.0000 3150 3150 300 225 3150 3150 3450 3375
+1 1 0 2 7 0 50 0 20 0.000 1 0.0000 4200 3150 300 225 4200 3150 4500 3375
+1 1 0 2 7 0 50 0 20 0.000 1 0.0000 3150 5625 300 225 3150 5625 3450 5850
+1 1 0 2 7 0 50 0 20 0.000 1 0.0000 4200 5625 300 225 4200 5625 4500 5850
+1 1 0 2 7 0 50 0 20 0.000 1 0.0000 5700 5100 300 225 5700 5100 6000 5325
+1 1 0 2 7 0 50 0 20 0.000 1 0.0000 6750 5100 300 225 6750 5100 7050 5325
+1 1 0 2 7 0 50 0 20 0.000 1 0.0000 3375 1800 300 225 3375 1800 3675 2025
+1 1 0 2 7 0 50 0 20 0.000 1 0.0000 1575 1650 300 225 1575 1650 1875 1875
+1 1 0 2 7 0 50 0 20 0.000 1 0.0000 525 1650 300 225 525 1650 825 1875
+1 1 0 2 7 0 50 0 20 0.000 1 0.0000 4425 1875 300 225 4425 1875 4725 2100
+1 1 0 2 7 0 50 0 20 0.000 1 0.0000 5550 1425 300 225 5550 1425 5850 1650
+1 1 0 2 7 0 50 0 20 0.000 1 0.0000 6600 1425 300 225 6600 1425 6900 1650
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3150 3750 3150 3375
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6750 4500 6750 4875
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 4275 150 4650 150 4650 600 4275 600 4275 150
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3225 600 2850 825
+2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5
+	 600 3900 975 3900 975 4350 600 4350 600 3900
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 750 4350 750 4725
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 750 3525 750 3900
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 1800 4350 1800 4725
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 1050 4125 1575 4125
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 1800 3525 1800 3900
+2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5
+	 1650 3900 2025 3900 2025 4350 1650 4350 1650 3900
+2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5
+	 3000 3750 3375 3750 3375 4200 3000 4200 3000 3750
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 3450 3975 3900 4725
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 3450 3975 3975 3975
+2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5
+	 3000 4575 3375 4575 3375 5025 3000 5025 3000 4575
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 3150 5025 3150 5400
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 3450 4800 3975 4050
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 3450 4800 3975 4800
+2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5
+	 4050 4575 4425 4575 4425 5025 4050 5025 4050 4575
+2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5
+	 4050 3750 4425 3750 4425 4200 4050 4200 4050 3750
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 4200 3750 4200 3375
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 4200 5025 4200 5400
+2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5
+	 5550 4050 5925 4050 5925 4500 5550 4500 5550 4050
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 5700 4500 5700 4875
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 6000 3450 6525 3450
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 6000 4275 6525 4275
+2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5
+	 6600 3225 6975 3225 6975 3675 6600 3675 6600 3225
+2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5
+	 6600 4050 6975 4050 6975 4500 6600 4500 6600 4050
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 825 825 1350 825
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 1575 1050 1575 1425
+2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5
+	 375 600 750 600 750 1050 375 1050 375 600
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 525 1050 525 1425
+2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5
+	 1425 600 1800 600 1800 1050 1425 1050 1425 600
+2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5
+	 2625 825 3000 825 3000 1275 2625 1275 2625 825
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 2925 1275 3150 1575
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 3450 600 3450 1575
+2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5
+	 3225 150 3600 150 3600 600 3225 600 3225 150
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 3675 375 4200 375
+2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5
+	 3900 825 4275 825 4275 1275 3900 1275 3900 825
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 4275 600 4125 825
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 4200 1275 4350 1650
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 4500 600 4500 1650
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 5550 825 5550 1200
+2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5
+	 5400 375 5775 375 5775 825 5400 825 5400 375
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 5850 600 6375 600
+2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5
+	 6450 375 6825 375 6825 825 6450 825 6450 375
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 6600 825 6600 1200
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 5850 1425 6300 1425
+2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5
+	 5550 3225 5925 3225 5925 3675 5550 3675 5550 3225
diff --git a/sourcecodes/bnt-master/docs/Figures/hmm_zoo.gif b/sourcecodes/bnt-master/docs/Figures/hmm_zoo.gif
new file mode 100644
index 00000000..c16ddffa
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/hmm_zoo.gif
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/hmm_zoo_names.fig b/sourcecodes/bnt-master/docs/Figures/hmm_zoo_names.fig
new file mode 100644
index 00000000..b53a7143
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/hmm_zoo_names.fig
@@ -0,0 +1,169 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+75.00
+Single
+-2
+1200 2
+5 1 0 1 -1 7 0 0 -1 0.000 0 1 1 0 1650.000 4050.000 525 3300 300 4125 525 4800
+	0 0 1.00 60.00 120.00
+5 1 0 1 -1 7 0 0 -1 0.000 0 1 1 0 2784.375 4153.125 1575 3375 1350 4050 1500 4800
+	0 0 1.00 60.00 120.00
+5 1 0 1 -1 7 0 0 -1 0.000 0 1 1 0 6376.355 4323.343 5550 3450 5175 4275 5400 5025
+	0 0 1.00 60.00 120.00
+5 1 0 1 -1 7 0 0 -1 0.000 0 1 1 0 7138.600 4307.555 6525 3525 6150 4200 6450 5025
+	0 0 1.00 60.00 120.00
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 5550 1425 300 225 5550 1425 5850 1650
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 6600 1425 300 225 6600 1425 6900 1650
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 525 1650 300 225 525 1650 825 1875
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1800 4950 300 225 1800 4950 2100 5175
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 825 3225 300 225 825 3225 1125 3450
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1800 3225 300 225 1800 3225 2100 3450
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 3150 3150 300 225 3150 3150 3450 3375
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 4200 3150 300 225 4200 3150 4500 3375
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 3150 5625 300 225 3150 5625 3450 5850
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 4200 5625 300 225 4200 5625 4500 5850
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 5700 5100 300 225 5700 5100 6000 5325
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 3375 1800 300 225 3375 1800 3675 2025
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 750 4950 300 225 750 4950 1050 5175
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 6750 5100 300 225 6750 5100 7050 5325
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 4425 1875 300 225 4425 1875 4725 2100
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1575 1650 300 225 1575 1650 1875 1875
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 5850 600 6375 600
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 5400 375 5775 375 5775 825 5400 825 5400 375
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 5550 825 5550 1200
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 6450 375 6825 375 6825 825 6450 825 6450 375
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6600 825 6600 1200
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 5850 1425 6300 1425
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 825 1350 825
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 375 600 750 600 750 1050 375 1050 375 600
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 525 1050 525 1425
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 1425 600 1800 600 1800 1050 1425 1050 1425 600
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1575 1050 1575 1425
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1050 4125 1575 4125
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 600 3900 975 3900 975 4350 600 4350 600 3900
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 750 4350 750 4725
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 1650 3900 2025 3900 2025 4350 1650 4350 1650 3900
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1800 4350 1800 4725
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 750 3525 750 3900
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1800 3525 1800 3900
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3150 5025 3150 5400
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 4200 5025 4200 5400
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3150 3750 3150 3375
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 4200 3750 4200 3375
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3450 4800 3975 4050
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3450 3975 3900 4725
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3450 4800 3975 4800
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 3000 4575 3375 4575 3375 5025 3000 5025 3000 4575
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 4050 4575 4425 4575 4425 5025 4050 5025 4050 4575
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3450 3975 3975 3975
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 3000 3750 3375 3750 3375 4200 3000 4200 3000 3750
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 4050 3750 4425 3750 4425 4200 4050 4200 4050 3750
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 5700 4500 5700 4875
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6750 4500 6750 4875
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6000 3450 6525 3450
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 5550 3225 5925 3225 5925 3675 5550 3675 5550 3225
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 6600 3225 6975 3225 6975 3675 6600 3675 6600 3225
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6000 4275 6525 4275
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 5550 4050 5925 4050 5925 4500 5550 4500 5550 4050
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 6600 4050 6975 4050 6975 4500 6600 4500 6600 4050
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3675 375 4200 375
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 3225 150 3600 150 3600 600 3225 600 3225 150
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 4275 150 4650 150 4650 600 4275 600 4275 150
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 2625 825 3000 825 3000 1275 2625 1275 2625 825
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3225 600 2850 825
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2925 1275 3150 1575
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3450 600 3450 1575
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 4275 600 4125 825
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 4200 1275 4350 1650
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 4500 600 4500 1650
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 3900 825 4275 825 4275 1275 3900 1275 3900 825
+4 0 -1 0 0 0 12 0.0000 4 180 2130 150 2400 HMM with Gaussian output\001
+4 0 -1 0 0 0 12 0.0000 4 180 1785 5100 2400 Auto Regressive HMM\001
+4 0 0 50 0 0 12 0.0000 4 180 1440 300 6075 Input-output HMM\001
+4 0 0 50 0 0 12 0.0000 4 180 1125 3000 6225 Coupled HMM\001
+4 0 -1 0 0 0 12 0.0000 4 135 1185 5475 6225 Factorial HMM\001
+4 0 0 50 0 0 12 0.0000 4 180 1530 2925 2625 of Gaussians output\001
+4 0 0 50 0 0 12 0.0000 4 135 1455 2925 2400 HMM with mixture\001
diff --git a/sourcecodes/bnt-master/docs/Figures/hmm_zoo_small.fig b/sourcecodes/bnt-master/docs/Figures/hmm_zoo_small.fig
new file mode 100644
index 00000000..1fae5d57
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/hmm_zoo_small.fig
@@ -0,0 +1,104 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+75.00
+Single
+-2
+1200 2
+5 1 0 2 0 7 50 0 -1 0.000 0 1 1 0 10209.375 1303.125 9000 525 8775 1200 8925 1950
+	0 0 2.00 120.00 240.00
+5 1 0 2 0 7 50 0 -1 0.000 0 1 1 0 9075.000 1200.000 7950 450 7725 1275 7950 1950
+	0 0 2.00 120.00 240.00
+1 1 0 2 0 0 50 0 20 0.000 1 0.0000 525 1650 300 225 525 1650 825 1875
+1 1 0 2 0 0 50 0 20 0.000 1 0.0000 1590 1654 300 225 1590 1654 1890 1879
+1 1 0 2 0 0 50 0 20 0.000 1 0.0000 3375 1800 300 225 3375 1800 3675 2025
+1 1 0 2 0 0 50 0 20 0.000 1 0.0000 4427 1882 300 225 4427 1882 4727 2107
+1 1 0 2 0 0 50 0 20 0.000 1 0.0000 5925 1800 300 225 5925 1800 6225 2025
+1 1 0 2 0 0 50 0 20 0.000 1 0.0000 6975 1800 300 225 6975 1800 7275 2025
+1 1 0 2 0 0 50 0 20 0.000 1 0.0000 8173 2107 300 225 8173 2107 8473 2332
+1 1 0 2 0 0 50 0 20 0.000 1 0.0000 9225 2100 300 225 9225 2100 9525 2325
+1 1 0 2 0 0 50 0 20 0.000 1 0.0000 8250 375 300 225 8250 375 8550 600
+1 1 0 2 0 0 50 0 20 0.000 1 0.0000 9225 375 300 225 9225 375 9525 600
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	0 0 2.00 120.00 240.00
+	 1575 1050 1575 1425
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	0 0 2.00 120.00 240.00
+	 825 825 1350 825
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	0 0 2.00 120.00 240.00
+	 525 1050 525 1425
+2 2 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5
+	 375 600 750 600 750 1050 375 1050 375 600
+2 2 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5
+	 1425 600 1800 600 1800 1050 1425 1050 1425 600
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	0 0 2.00 120.00 240.00
+	 3450 600 3450 1575
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	0 0 2.00 120.00 240.00
+	 3225 600 2850 825
+2 2 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5
+	 2625 825 3000 825 3000 1275 2625 1275 2625 825
+2 2 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5
+	 3225 150 3600 150 3600 600 3225 600 3225 150
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	0 0 2.00 120.00 240.00
+	 3675 375 4200 375
+2 2 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5
+	 3900 825 4275 825 4275 1275 3900 1275 3900 825
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	0 0 2.00 120.00 240.00
+	 4200 1275 4350 1650
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	0 0 2.00 120.00 240.00
+	 4500 600 4500 1650
+2 2 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5
+	 4275 150 4650 150 4650 600 4275 600 4275 150
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+	0 0 2.00 120.00 240.00
+	 4275 600 3975 825
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+	0 0 2.00 120.00 240.00
+	 2925 1275 3225 1575
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	0 0 2.00 120.00 240.00
+	 8175 675 8175 1050
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	0 0 2.00 120.00 240.00
+	 9225 675 9225 1050
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	0 0 2.00 120.00 240.00
+	 9225 1500 9225 1875
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	0 0 2.00 120.00 240.00
+	 8475 1275 9000 1275
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	0 0 2.00 120.00 240.00
+	 8175 1500 8175 1875
+2 2 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5
+	 8025 1050 8400 1050 8400 1500 8025 1500 8025 1050
+2 2 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5
+	 9075 1050 9450 1050 9450 1500 9075 1500 9075 1050
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	0 0 2.00 120.00 240.00
+	 5925 1200 5925 1575
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	0 0 2.00 120.00 240.00
+	 6225 975 6750 975
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	0 0 2.00 120.00 240.00
+	 6225 1800 6675 1800
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	0 0 2.00 120.00 240.00
+	 6975 1200 6975 1575
+2 2 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5
+	 6825 750 7200 750 7200 1200 6825 1200 6825 750
+2 2 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5
+	 5775 750 6150 750 6150 1200 5775 1200 5775 750
+4 0 0 50 0 0 24 0.0000 4 255 945 375 2400 HMM\001
+4 0 0 50 0 0 24 0.0000 4 255 2580 2625 2475 MixGauss HMM\001
+4 0 0 50 0 0 24 0.0000 4 255 1470 8025 2700 IO-HMM\001
+4 0 0 50 0 0 24 0.0000 4 255 1575 5625 2475 AR-HMM\001
diff --git a/sourcecodes/bnt-master/docs/Figures/ifa.eps b/sourcecodes/bnt-master/docs/Figures/ifa.eps
new file mode 100644
index 00000000..f2ea58cb
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/ifa.eps
@@ -0,0 +1,470 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: (ImageMagick)
+%%Title: (ifa.eps)
+%%CreationDate: (Tue Nov 16 19:52:10 2004)
+%%BoundingBox: 0 0 246 221
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 1
+%%EndComments
+
+%%BeginDefaults
+%%EndDefaults
+
+%%BeginProlog
+%
+% Display a color image.  The image is displayed in color on
+% Postscript viewers or printers that support color, otherwise
+% it is displayed as grayscale.
+%
+/DirectClassPacket
+{
+  %
+  % Get a DirectClass packet.
+  %
+  % Parameters:
+  %   red.
+  %   green.
+  %   blue.
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile color_packet readhexstring pop pop
+  compression 0 eq
+  {
+    /number_pixels 3 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add 3 mul def
+  } ifelse
+  0 3 number_pixels 1 sub
+  {
+    pixels exch color_packet putinterval
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/DirectClassImage
+{
+  %
+  % Display a DirectClass image.
+  %
+  systemdict /colorimage known
+  {
+    columns rows 8
+    [
+      columns 0 0
+      rows neg 0 rows
+    ]
+    { DirectClassPacket } false 3 colorimage
+  }
+  {
+    %
+    % No colorimage operator;  convert to grayscale.
+    %
+    columns rows 8
+    [
+      columns 0 0
+      rows neg 0 rows
+    ]
+    { GrayDirectClassPacket } image
+  } ifelse
+} bind def
+
+/GrayDirectClassPacket
+{
+  %
+  % Get a DirectClass packet;  convert to grayscale.
+  %
+  % Parameters:
+  %   red
+  %   green
+  %   blue
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile color_packet readhexstring pop pop
+  color_packet 0 get 0.299 mul
+  color_packet 1 get 0.587 mul add
+  color_packet 2 get 0.114 mul add
+  cvi
+  /gray_packet exch def
+  compression 0 eq
+  {
+    /number_pixels 1 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add def
+  } ifelse
+  0 1 number_pixels 1 sub
+  {
+    pixels exch gray_packet put
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/GrayPseudoClassPacket
+{
+  %
+  % Get a PseudoClass packet;  convert to grayscale.
+  %
+  % Parameters:
+  %   index: index into the colormap.
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile byte readhexstring pop 0 get
+  /offset exch 3 mul def
+  /color_packet colormap offset 3 getinterval def
+  color_packet 0 get 0.299 mul
+  color_packet 1 get 0.587 mul add
+  color_packet 2 get 0.114 mul add
+  cvi
+  /gray_packet exch def
+  compression 0 eq
+  {
+    /number_pixels 1 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add def
+  } ifelse
+  0 1 number_pixels 1 sub
+  {
+    pixels exch gray_packet put
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassPacket
+{
+  %
+  % Get a PseudoClass packet.
+  %
+  % Parameters:
+  %   index: index into the colormap.
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile byte readhexstring pop 0 get
+  /offset exch 3 mul def
+  /color_packet colormap offset 3 getinterval def
+  compression 0 eq
+  {
+    /number_pixels 3 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add 3 mul def
+  } ifelse
+  0 3 number_pixels 1 sub
+  {
+    pixels exch color_packet putinterval
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassImage
+{
+  %
+  % Display a PseudoClass image.
+  %
+  % Parameters:
+  %   class: 0-PseudoClass or 1-Grayscale.
+  %
+  currentfile buffer readline pop
+  token pop /class exch def pop
+  class 0 gt
+  {
+    currentfile buffer readline pop
+    token pop /depth exch def pop
+    /grays columns 8 add depth sub depth mul 8 idiv string def
+    columns rows depth
+    [
+      columns 0 0
+      rows neg 0 rows
+    ]
+    { currentfile grays readhexstring pop } image
+  }
+  {
+    %
+    % Parameters:
+    %   colors: number of colors in the colormap.
+    %   colormap: red, green, blue color packets.
+    %
+    currentfile buffer readline pop
+    token pop /colors exch def pop
+    /colors colors 3 mul def
+    /colormap colors string def
+    currentfile colormap readhexstring pop pop
+    systemdict /colorimage known
+    {
+      columns rows 8
+      [
+        columns 0 0
+        rows neg 0 rows
+      ]
+      { PseudoClassPacket } false 3 colorimage
+    }
+    {
+      %
+      % No colorimage operator;  convert to grayscale.
+      %
+      columns rows 8
+      [
+        columns 0 0
+        rows neg 0 rows
+      ]
+      { GrayPseudoClassPacket } image
+    } ifelse
+  } ifelse
+} bind def
+
+/DisplayImage
+{
+  %
+  % Display a DirectClass or PseudoClass image.
+  %
+  % Parameters:
+  %   x & y translation.
+  %   x & y scale.
+  %   label pointsize.
+  %   image label.
+  %   image columns & rows.
+  %   class: 0-DirectClass or 1-PseudoClass.
+  %   compression: 0-none or 1-RunlengthEncoded.
+  %   hex color packets.
+  %
+  gsave
+  /buffer 512 string def
+  /byte 1 string def
+  /color_packet 3 string def
+  /pixels 768 string def
+
+  currentfile buffer readline pop
+  token pop /x exch def
+  token pop /y exch def pop
+  x y translate
+  currentfile buffer readline pop
+  token pop /x exch def
+  token pop /y exch def pop
+  currentfile buffer readline pop
+  token pop /pointsize exch def pop
+  /Times-Roman findfont pointsize scalefont setfont
+  x y scale
+  currentfile buffer readline pop
+  token pop /columns exch def
+  token pop /rows exch def pop
+  currentfile buffer readline pop
+  token pop /class exch def pop
+  currentfile buffer readline pop
+  token pop /compression exch def pop
+  class 0 gt { PseudoClassImage } { DirectClassImage } ifelse
+  grestore
+} bind def
+%%EndProlog
+%%Page:  1 1
+%%PageBoundingBox: 0 0 246 221
+userdict begin
+DisplayImage
+0 0
+246 221
+12.000000
+246 221
+1
+1
+1
+1
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffc00000007f
+ffffffffffffffffff00000001fffffffffffffffffcffffffffdfffffff7fffffffffff
+ffffffff7ffffffdfffffffffffffffffcffffffffdfffffff7fffffffffffffffffff7f
+fffffdfffffffffffffffffcffffffffdfffffff7fffffffffffffffffff7ffffffdffff
+fffffffffffffcffffffffdfffffff7fffffffffffffffffff7ffffffdffffffffffffff
+fffcffffffffdfffffff7fffffffffffffffffff7ffffffdfffffffffffffffffcffffff
+ffdfffffff7fffffffffffffffffff7ffffffdfffffffffffffffffcffffffffdfffffff
+7fffffffffffffffffff7ffffffdfffffffffffffffffcffffffffdfffffff7fffffffff
+ffffffffff7ffffffdfffffffffffffffffcffffffffdfffffff7fffffffffffffffffff
+7ffffffdfffffffffffffffffcffffffffdfffffff7fffffffffffffffffff7ffffffdff
+fffffffffffffffcffffffffdf87dfff7fffffffffffffffffff7e1ffffdffffffffffff
+fffffcffffffffdf339fff7fffffffffffffffffff7ccffffdfffffffffffffffffcffff
+ffffdf7b5fff7fffffffffffffffffff7deffffdfffffffffffffffffcffffffffdefddf
+ff7fffffffffffffffffff7bf53ffdfffffffffffffffffcffffffffdefddfff7fffffff
+ffffffffffff7bf6dffdfffffffffffffffffcffffffffdefddfff7fffffffffffffffff
+ff7bf6dffdfffffffffffffffffcffffffffdf7bdfff7fffffffffffffffffff7deedffd
+fffffffffffffffffcffffffffdf33dfff7fffffffffffffffffff7ccedffdffffffffff
+fffffffcffffffffdf878fff7fffffffffffffffffff7e1c4ffdfffffffffffffffffcff
+ffffffdfe7ffff7fffffffffffffffffff7f9ffffdfffffffffffffffffcffffffffdff9
+ffff7fffffffffffffffffff7fe7fffdfffffffffffffffffcffffffffdfffffff7fffff
+ffffffffffffff7ffffffdfffffffffffffffffcffffffffdfffffff7fffffffffffffff
+ffff7ffffffdfffffffffffffffffcffffffffdfffffff7fffffffffffffffffff7fffff
+fdfffffffffffffffffcffffffffdfffffff7fffffffffffffffffff7ffffffdffffffff
+fffffffffcffffffffdfffffff7fffffffffffffffffff7ffffffdfffffffffffffffffc
+ffffffffdfffffff7fffffffffffffffffff7ffffffdfffffffffffffffffcffffffffdf
+ffffff7fffffffffffffffffff7ffffffdfffffffffffffffffcffffffffdfffffff7fff
+ffffffffffffffff7ffffffdfffffffffffffffffcffffffffc00000007fffffffffffff
+ffffff00000001fffffffffffffffffcffffffffffffbffffffffffffffffffffffffffe
+fffffffffffffffffffffcffffffffffffbffffffffffffffffffffffffffeffffffffff
+fffffffffffcffffffffffffbffffffffffffffffffffffffffeffffffffffffffffffff
+fcffffffffffffbffffffffffffffffffffffffffefffffffffffffffffffffcffffffff
+fffeaffffffffffffffffffffffffffabffffffffffffffffffffcfffffffffffeafffff
+fffffffffffffffffffffabffffffffffffffffffffcfffffffffffe9fffffffffffffff
+fffffffffffa7ffffffffffffffffffffcffffffffffff1fffffffffffffffffffffffff
+fc7ffffffffffffffffffffcffffffffffff1ffffffffffffffffffffffffffc7fffffff
+fffffffffffffcffffffffffff1ffffffffffffffffffffffffffc7fffffffffffffffff
+fffcffffffffffff3ffffffffffffffffffffffffffcfffffffffffffffffffffcffffff
+ffffffbffffffffffffffffffffffffffefffffffffffffffffffffcffffffffffffbfff
+fffffffffffffffffffffffefffffffffffffffffffffcffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffcffffffffffff800fffffffffffffffffffff
+f800fffffffffffffffffffffcfffffffffffc7ff1ffffffffffffffffffffc7ff1fffff
+fffffffffffffffcffffffffffe3fffe3ffffffffffffffffffe3fffe3ffffffffffffff
+fffffcffffffffffdfffffdffffffffffffffffffdfffffdfffffffffffffffffffcffff
+ffffff3fffffe7fffffffffffffffff3fffffe7ffffffffffffffffffcfffffffffeffff
+fffbffffffffffffffffefffffffbffffffffffffffffffcfffffffffdfffffffdffffff
+ffffffffffdfffffffdffffffffffffffffffcfffffffffbfffffffeffffffffffffffff
+bfffffffeffffffffffffffffffcfffffffff7ffffffff7fffffffffffffff7ffffffff7
+fffffffffffffffffcfffffffff7ffffffff7fffffffffffffff7ffffffff7ffffffffff
+fffffffcffffffffefffffffffbffffffffffffffefffffffffbfffffffffffffffffcff
+ffffffefff8c6fffbffffffffffffffeff18fffffbfffffffffffffffffcffffffffdfff
+decfffdffffffffffffffdffbdfffffdfffffffffffffffffcffffffffdfffedafffdfff
+fffffffffffdffdbfffffdfffffffffffffffffcffffffffdfffe3efffdfffffffffffff
+fdffc74ffffdfffffffffffffffffcffffffffdffff3efffdffffffffffffffdffe7b7ff
+fdfffffffffffffffffcffffffffdfffe9efffdffffffffffffffdffd3b7fffdffffffff
+fffffffffcffffffffdfffedefffdffffffffffffffdffdbb7fffdfffffffffffffffffc
+ffffffffdfffdeefffdffffffffffffffdffbdb7fffdfffffffffffffffffcffffffffef
+ff8c47ffbffffffffffffffeff1813fffbfffffffffffffffffcffffffffefffffffffbf
+fffffffffffffefffffffffbfffffffffffffffffcfffffffff7ffffffff7fffffffffff
+ffff7ffffffff7fffffffffffffffffcfffffffff7ffffffff7fffffffffffffff7fffff
+fff7fffffffffffffffffcfffffffffbfffffffeffffff3cf3ffffffbfffffffefffffff
+fffffffffffcfffffffffdfffffffdffffff3cf3ffffffdfffffffdfffffffffffffffff
+fcfffffffffefffffff9ffffffffffffffffefffffffbffffffffffffffffffcffffffff
+ff3fffffe67ffffffffffffffff3fffffe7ffffffffffffffffffcffffffffffdfffffdf
+8ffffffffffffffffdfffffdfffffffffffffffffffcffffffffffe3fffe3ff3ffffffff
+fffffffe3fffe3fffffffffffffffffffcfffffffffffc7ff1fffc7fffffffffffffffc7
+ff1ffffffffffffffffffffcfffffffffff7800f7fff9ffffffffffffffff000f7ffffff
+fffffffffffffcfffffffffff7ffff7fffe3ffffffffffffff87fffbffffffffffffffff
+fffcffffffffffefffffbffffcfffffffffffffe5ffffdfffffffffffffffffffcffffff
+ffffefffffbfffff1ffffffffffff13ffffefffffffffffffffffffcffffffffffdfffff
+dfffffe7ffffffffff8effffff7ffffffffffffffffffcffffffffffdfffffdffffff8ff
+fffffffc7dffffffbffffffffffffffffffcffffffffffdfffffefffffff3ffffffff3f3
+ffffffdffffffffffffffffffcffffffffffbfffffefffffffc7ffffff8fefffffffefff
+fffffffffffffffcffffffffffbffffff7fffffff9fffffc7f9ffffffff7ffffffffffff
+fffffcffffffffffbffffff7fffffffe3fffe3ff7ffffffffbfffffffffffffffffcffff
+ffffff7ffffffbffffffffcfff9ffcfffffffffdfffffffffffffffffcffffffffff7fff
+fffbfffffffff1fc7ffbfffffffffefffffffffffffffffcfffffffffefffffffdffffff
+fffe63fff7ffffffffff7ffffffffffffffffcfffffffffefffffffdffffffffff0fffcf
+ffffffffffbffffffffffffffffcfffffffffefffffffefffffffffcf3ffbfffffffffff
+dffffffffffffffffcfffffffffdfffffffeffffffffe3fc7e7fffffffffffefffffffff
+fffffffcfffffffffdffffffff7fffffff1fff9dfffffffffffff7fffffffffffffffcff
+fffffffdffffffff7ffffff8ffffe3fffffffffffffbfffffffffffffffcfffffffffbff
+ffffffbfffffe7ffffecfffffffffffffdfffffffffffffffcfffffffffbffffffffbfff
+ff1fffffdf1ffffffffffffefffffffffffffffcfffffffff7ffffffffdffff8ffffff3f
+e7ffffffffffff7ffffffffffffffcfffffffff7ffffffffdfffc7fffffefff8ffffffff
+ffffbffffffffffffffcfffffffff7ffffffffefff3ffffff9ffff3fffffffffffdfffff
+fffffffffcffffffffefffffffffeff8fffffff7ffffc7ffffffffffeffffffffffffffc
+ffffffffeffffffffff7c7ffffffcffffff9fffffffffff7fffffffffffffcffffffffef
+fffffffff63fffffffbffffffe3ffffffffffbfffffffffffffcffffffffdffffffffff9
+ffffffff7fffffffcffffffffffdfffffffffffffcffffffffdfffffffffc3fffffffcff
+fffffff1fffffffffefffffffffffffcffffffffbffffffffe3dffffffdbfffffffffe7f
+ffffffff7ffffffffffffcffffffffbffffffff1fdffffffa7ffffffffff8fffffffffbf
+fffffffffffcfffffffebfffffffcffebfffff5ffffffffffff3ffffffffdfffffffffff
+fcfffffffe7ffffffe3ffebffffe27fffffffffffc7fffffffeffffffffffffcfffffffe
+5ffffff1fffd3ffffe9fffffffffffff9ffffffff6fffffffffffcfffffffe3fffff8fff
+fe5ffffc7fffffffffffffe3fffffffb7ffffffffffcfffffffcbffffe7fffff1ffff9ff
+fffffffffffffcfffffffd7ffffffffffcfffffffc7fff71ffffff1fffffffffffffffff
+ffff1ffffff6bffffffffffcfffffffcfffc8fffffff9fffffffffffffffffffffe7ffff
+f93ffffffffffcfffffffcfff07fffffffcffffffffffffffffffffff8fffffe1fffffff
+fffcfffffffdffc3ffffffffefffffffffffffffffffffff3fffff9ffffffffffcffffff
+ffff803fffffffffffffffffffffffffffffffc7ffffeffffffffffcffffff001fffffff
+ffffff800ffffffffffffffffffff9dffff800fffffffcfffff8ffe3fffffffffffc7ff1
+fffffffffffffffffffe27ffc7ff1ffffffcffffc6eeec7fffffffffe377763fffffffff
+ffffffffffcbfe377763fffffcffffbfffffbfffffffffdfffffdfffffffffffffffffff
+00fdfffffdfffffcfffe3bbfbb8fffffffff1ddfddc7fffffffffffffffffff871ddfddc
+7ffffcfffdfffffff7fffffffefffffffbffffffffffffffffffffefffffffbffffcfffa
+eeeeeeebfffffffd77777775ffffffffffffffffffffd77777775ffffcfff7fffffffdff
+fffffbfffffffeffffffffffffffffffffbfffffffeffffcffebfbfbfbfafffffff5fdfd
+fdfd7fffffffffffffffffff5fdfdfdfd7fffcffeffffffffefffffff7ffffffff7fffff
+ffffffffffffff7ffffffff7fffcffceeeeeeeee7fffffe7777777773fffffffffffffff
+fffe7777777773fffcffdfe38dffff7fffffeff1c47fffbffffffffffffffffffefe38ff
+fffbfffcffbfb799bfbfbfffffdfdbcb9fdfdffffffffffffffffffdfd7dfdfdfdfffcff
+bffbb5ffffbfffffdffddfbfffdfffff3cf3fffffffffdffbbfffffdfffcffaeecaceeee
+bfffffd7765737775fffff3cf3fffffffffd7753417775fffcffbffc7dffff8000001ffe
+3f7fffdfffffffffffff800001ffc7b6fffdfffcffbbfaf9fbfbbfffffddfd7cfdfddfff
+fffffffffffffffddfcf96dfddfffcffbffefdffffbfffffdfff7dffffdfffffffffffff
+fffffdffefb6fffdfffcffaeeeeceeeebfffffd7777337775ffffffffffffffffffd7767
+367775fffcffdffc78ffff7fffffeffe383fffbffffffffffffffffffeffc7127ffbfffc
+ffdfbbbfbbbf7fffffefdddfdddfbffffffffffffffffffefdddfdddfbfffcffefffffff
+fefffffff7ffffffff7fffffffffffffffffff7ffffffff7fffcffeeeeeeeeeefffffff7
+777777777fffffffffffffffffff7777777777fffcfff7fffffffdfffffffbfffffffeff
+ffffffffffffffffffbfffffffeffffcfffbfbfbfbfbfffffffdfdfdfdfdffffffffffff
+ffffffffdfdfdfdfdffffcfffdfffffff7fffffffefffffffbffffffffffffffffffffef
+ffffffbffffcfffe6eeeeecfffffffff37777763ffffffffffffffffffffe37777767fff
+fcffffbfffffbfffffffffdfffffddffffffffffffffffffffddfffffdfffffcffffc7bf
+bc7fffffffffe3dfde3e7fffffffffffffffffff3e3dfde3fffffcfffff8ffe3ffffffff
+fffc7ff1ffbffffffffffffffffffeffc7ff1ffffffcffffff001effffffffffff800fff
+cffffffffffffffffff9fff800fffffffcffffffffff7ffffffffffffffffff7ffffffff
+fffffffff7ffff7ffffffffcffffffffff9ffffffffffffffffff9ffffffffffffffffcf
+fffcfffffffffcffffffffffeffffffffffffffffffe7fffffffffffffff3ffffbffffff
+fffcfffffffffff7ffffffffffffffffff9ffffffffffffffcfffff7fffffffffcffffff
+fffff9ffffffffffffffffffe7fffffffffffff3ffffcffffffffffcfffffffffffeffff
+fffffffffffffff9ffffffffffffcfffffbffffffffffcffffffffffff3fffffffffffff
+fffffe3ffffffffffe3ffffe7ffffffffffcffffffffffffdfffffffffffffffffffc7ff
+fffffff1fffffdfffffffffffcffffffffffffe7fffffffffffffffffff87fffffff0fff
+fff3fffffffffffcfffffffffffffbffffffffffffffffffff83ffffe0ffffffefffffff
+fffffcfffffffffffffcfffffffffffffffffffffc00001fffffff9ffffffffffffcffff
+ffffffffff3ffffffffffffffffffffffffffffffffe7ffffffffffffcffffffffffffff
+cffffffffffffffffffffffffffffffff9fffffffffffffcfffffffffffffff7ffffffff
+fffffffffffffffffffffff7fffffffffffffcfffffffffffffff9ffffffffffffffffff
+ffffffffffffcffffffffffffffcfffffffffffffffe7fffffffffffffffffffffffffff
+ff3ffffffffffffffcffffffffffffffff8ffffffffffffffffffffffffffff8ffffffff
+fffffffcfffffffffffffffff3ffffffffffffffffffffffffffe7fffffffffffffffcff
+fffffffffffffffcffffffffffffffffffffffffff9ffffffffffffffffcffffffffffff
+ffffff1ffffffffffffffffffffffffc7ffffffffffffffffcffffffffffffffffffe7ff
+fffffffffffffffffffff3fffffffffffffffffcfffffffffffffffffff8ffffffffffff
+ffffffffff8ffffffffffffffffffcffffffffffffffffffff1ffffffffffffffffffffc
+7ffffffffffffffffffcffffffffffffffffffffe3ffffffffffffffffffe3ffffffffff
+fffffffffcfffffffffffffffffffffc3ffffffffffffffffe1ffffffffffffffffffffc
+ffffffffffffffffffffffc3ffffffffffffffe1fffffffffffffffffffffcffffffffff
+fffffffffffffc3ffffffffffffe1ffffffffffffffffffffffcffffffffffffffffffff
+ffffc0ffffffffff81fffffffffffffffffffffffcffffffffffffffffffffffffff00ff
+ffff807ffffffffffffffffffffffffcffffffffffffffffffffffffffff0000007fffff
+fffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffff
+fffff1ff9ffffffe7ffff80ffffffffbfffcfffdfffffffffffffffcfffffffffffbffdf
+ffffff7ffffdeffffffffbfffefffffffffffffffffffcfffffffffffbffdfffffff7ffe
+fdffffbffff5fffefffffffffffffffffffcfffffffffffb4f1cc3cd3c734c3dde790cd3
+f5d3ce9989c7fffffffffffffcfffffffffffbb6db6db6db6db6fc1db6bb67eeedb6db6d
+b7fffffffffffffcfffffffffffbb6d86d86db61b6fdde37bb6fe0edc6d33d9fffffffff
+fffffcfffffffffffbb6dbedbedb6fb6fdfdb7bb6feeedb6d7cde7fffffffffffffcffff
+fffffffbb6d9ad9adb66b6fdfdb6bb6fdf6db6e76db7fffffffffffffcfffffffffff113
+2c63c44cb113387e59ccc78e04c86f188ffffffffffffffcffffffffffffffffefffffff
+ffffffffffffffffffeffffffffffffffffffcffffffffffffffffefffffffffffffffff
+ffffffffdffffffffffffffffffcffffffffffffffffc7ffffffffffffffffffffffff9f
+fffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffc
+end
+%%PageTrailer
+%%Trailer
+%%EOF
diff --git a/sourcecodes/bnt-master/docs/Figures/ifa.fig b/sourcecodes/bnt-master/docs/Figures/ifa.fig
new file mode 100644
index 00000000..864d5112
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/ifa.fig
@@ -0,0 +1,59 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+5 1 0 1 -1 7 0 0 -1 0.000 0 1 0 0 2362.500 1537.500 1725 2325 2400 2550 3000 2325
+5 1 0 1 -1 7 0 0 -1 0.000 0 1 0 0 1950.000 818.750 675 2400 1950 2850 3225 2400
+6 225 900 3600 2475
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 900 1125 300 225 900 1125 1200 1350
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 2400 1125 300 225 2400 1125 2700 1350
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 525 2175 300 225 525 2175 825 2400
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 3240 2179 300 225 3240 2179 3540 2404
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1500 2175 300 225 1500 2175 1800 2400
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 750 1350 525 1950
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1125 1275 3000 2025
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2325 1350 675 1950
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2550 1350 3150 1950
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1050 1350 1350 1950
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2325 1350 1575 1875
+4 0 -1 0 0 0 12 0.0000 4 135 225 825 1200 X1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 2250 1200 Xn\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 375 2250 Y1\001
+4 0 -1 0 0 0 12 0.0000 4 135 270 3075 2250 Ym\001
+4 0 -1 0 0 0 24 0.0000 4 30 270 1500 1275 ...\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 1350 2250 Y2\001
+4 0 -1 0 0 0 24 0.0000 4 30 270 2100 2175 ...\001
+-6
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 600 225 1050 225 1050 675 600 675 600 225
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 2250 225 2700 225 2700 675 2250 675 2250 225
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 675 825 900
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2475 675 2475 900
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
+	 825 2175 1200 2175
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
+	 2625 2175 2925 2175
+4 0 -1 0 0 0 12 0.0000 4 165 225 675 525 Q1\001
+4 0 -1 0 0 0 12 0.0000 4 165 225 2325 525 Qn\001
diff --git a/sourcecodes/bnt-master/docs/Figures/ifa.gif b/sourcecodes/bnt-master/docs/Figures/ifa.gif
new file mode 100644
index 00000000..d77cd76a
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/ifa.gif
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/kf.fig b/sourcecodes/bnt-master/docs/Figures/kf.fig
new file mode 100644
index 00000000..a2e24c82
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/kf.fig
@@ -0,0 +1,27 @@
+#FIG 3.1
+Landscape
+Center
+Inches
+1200 2
+6 225 225 1950 2250
+6 225 225 1950 675
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 525 450 300 225 525 450 825 675
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 1650 450 300 225 1650 450 1950 675
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 450 1350 450
+-6
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 525 1575 300 225 525 1575 825 1800
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1650 1575 300 225 1650 1575 1950 1800
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 525 750 525 1275
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1650 750 1650 1275
+4 0 -1 0 0 0 12 0.0000 4 135 1455 225 2250 Kalman filter model\001
+-6
+4 0 -1 0 0 0 12 0.0000 4 135 210 375 525 X1\001
+4 0 -1 0 0 0 12 0.0000 4 135 210 1500 525 X2\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 375 1650 Y1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 1500 1650 Y2\001
diff --git a/sourcecodes/bnt-master/docs/Figures/kf.gif b/sourcecodes/bnt-master/docs/Figures/kf.gif
new file mode 100644
index 00000000..9d0ae34e
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/kf.gif
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/kf_input.fig b/sourcecodes/bnt-master/docs/Figures/kf_input.fig
new file mode 100644
index 00000000..e51d73fa
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/kf_input.fig
@@ -0,0 +1,40 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+5 1 0 1 0 7 100 0 -1 0.000 0 1 1 0 3131.250 1462.500 1575 450 1275 1425 1575 2475
+	0 0 1.00 60.00 120.00
+5 1 0 1 0 7 100 0 -1 0.000 0 1 1 0 4272.606 1559.043 2775 525 2475 1275 2700 2475
+	0 0 1.00 60.00 120.00
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1875 2550 300 225 1875 2550 2175 2775
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 3000 2550 300 225 3000 2550 3300 2775
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 1875 1425 300 225 1875 1425 2175 1650
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 3000 1425 300 225 3000 1425 3300 1650
+1 1 0 1 0 0 100 0 2 0.000 1 0.0000 1875 375 300 225 1875 375 2175 600
+1 1 0 1 0 0 100 0 2 0.000 1 0.0000 3000 375 300 225 3000 375 3300 600
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1875 1725 1875 2250
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3000 1725 3000 2250
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2175 1425 2700 1425
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1875 600 1875 1200
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3000 600 3000 1200
+4 0 -1 0 0 0 12 0.0000 4 135 225 1725 1500 X1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 2850 1500 X2\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 1725 2625 Y1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 2850 2625 Y2\001
+4 0 0 100 0 0 12 0.0000 4 135 225 1725 450 U1\001
+4 0 0 100 0 0 12 0.0000 4 135 225 2850 450 U2\001
diff --git a/sourcecodes/bnt-master/docs/Figures/kf_input.gif b/sourcecodes/bnt-master/docs/Figures/kf_input.gif
new file mode 100644
index 00000000..595d5ae0
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/kf_input.gif
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/kf_notime.fig b/sourcecodes/bnt-master/docs/Figures/kf_notime.fig
new file mode 100644
index 00000000..11b75c1f
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/kf_notime.fig
@@ -0,0 +1,26 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+1 1 0 2 0 0 100 0 2 0.000 1 0.0000 525 1575 300 225 525 1575 825 1800
+1 1 0 2 0 0 100 0 2 0.000 1 0.0000 1650 1575 300 225 1650 1575 1950 1800
+1 1 0 2 0 0 100 0 -1 0.000 1 0.0000 525 450 300 225 525 450 825 675
+1 1 0 2 0 0 100 0 -1 0.000 1 0.0000 1650 450 300 225 1650 450 1950 675
+2 1 0 2 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 2.00 120.00 240.00
+	 525 750 525 1275
+2 1 0 2 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 2.00 120.00 240.00
+	 1650 750 1650 1275
+2 1 0 2 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 2.00 120.00 240.00
+	 825 450 1350 450
+4 0 0 100 0 0 20 0.0000 4 195 210 375 525 X\001
+4 0 0 100 0 0 20 0.0000 4 195 210 1500 525 X\001
+4 0 0 100 0 0 20 0.0000 4 195 210 1500 1650 Y\001
+4 0 0 100 0 0 20 0.0000 4 195 210 375 1650 Y\001
diff --git a/sourcecodes/bnt-master/docs/Figures/kf_obs_track.fig b/sourcecodes/bnt-master/docs/Figures/kf_obs_track.fig
new file mode 100644
index 00000000..b657f62e
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/kf_obs_track.fig
@@ -0,0 +1,43 @@
+#FIG 3.2
+Portrait
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 1350 1500 335 335 1200 1200 1500 1800
+1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 1350 2700 335 335 1200 2400 1500 3000
+1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 1350 3900 335 335 1200 3600 1500 4200
+1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 1350 5100 335 335 1200 4800 1500 5400
+1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 2850 5100 335 335 2700 4800 3000 5400
+1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 2850 3900 335 335 2700 3600 3000 4200
+1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 2850 2700 335 335 2700 2400 3000 3000
+1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 2850 1500 335 335 2700 1200 3000 1800
+2 1 0 2 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 4.00 120.00 240.00
+	 1725 1500 2550 1500
+2 1 0 2 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 4.00 120.00 240.00
+	 1725 2700 2550 1650
+2 1 0 2 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 4.00 120.00 240.00
+	 1725 3900 2475 3900
+2 1 0 2 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 4.00 120.00 240.00
+	 1725 5100 2625 4125
+2 1 0 2 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 4.00 120.00 240.00
+	 1725 5100 2475 5100
+2 1 0 2 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 4.00 120.00 240.00
+	 1725 2700 2550 2700
+4 0 0 100 0 0 20 0.0000 4 195 405 1125 2850 dx1\001
+4 0 0 100 0 0 20 0.0000 4 195 270 1125 4050 x2\001
+4 0 0 100 0 0 20 0.0000 4 195 405 1200 5175 dx2\001
+4 0 0 100 0 0 20 0.0000 4 195 270 1200 1650 x1\001
+4 0 0 100 0 0 20 0.0000 4 195 270 2700 1650 x1\001
+4 0 0 100 0 0 20 0.0000 4 195 405 2700 2850 dx1\001
+4 0 0 100 0 0 20 0.0000 4 195 270 2700 4050 x2\001
+4 0 0 100 0 0 20 0.0000 4 195 405 2700 5250 dx2\001
diff --git a/sourcecodes/bnt-master/docs/Figures/kf_scalar_track.fig b/sourcecodes/bnt-master/docs/Figures/kf_scalar_track.fig
new file mode 100644
index 00000000..27ac7892
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/kf_scalar_track.fig
@@ -0,0 +1,59 @@
+#FIG 3.2
+Portrait
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 2726.786 5448.214 1125 4125 675 5775 1050 6675
+	0 0 4.00 120.00 240.00
+5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 6809.923 4980.705 1050 1725 225 5625 975 8100
+	0 0 4.00 120.00 240.00
+5 1 0 2 0 7 100 0 -1 0.000 0 0 1 0 1778.571 5400.000 3225 3900 3750 6075 3225 6900
+	0 0 4.00 120.00 240.00
+5 1 0 2 0 7 100 0 -1 0.000 0 0 1 0 -75.000 4837.500 3225 1500 4575 5475 3225 8175
+	0 0 4.00 120.00 240.00
+1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 1350 1500 335 335 1200 1200 1500 1800
+1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 1350 2700 335 335 1200 2400 1500 3000
+1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 1350 3900 335 335 1200 3600 1500 4200
+1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 1350 5100 335 335 1200 4800 1500 5400
+1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 2850 5100 335 335 2700 4800 3000 5400
+1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 2850 3900 335 335 2700 3600 3000 4200
+1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 2850 2700 335 335 2700 2400 3000 3000
+1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 2850 1500 335 335 2700 1200 3000 1800
+1 4 0 2 0 0 100 0 2 0.000 1 0.0000 1350 6900 335 335 1200 6600 1500 7200
+1 4 0 2 0 0 100 0 2 0.000 1 0.0000 2850 6900 335 335 2700 6600 3000 7200
+1 4 0 2 0 0 100 0 2 0.000 1 0.0000 2850 8100 335 335 2700 7800 3000 8400
+1 4 0 2 0 0 100 0 2 0.000 1 0.0000 1350 8100 335 335 1200 7800 1500 8400
+2 1 0 2 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 4.00 120.00 240.00
+	 1725 1500 2550 1500
+2 1 0 2 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 4.00 120.00 240.00
+	 1725 2700 2550 1650
+2 1 0 2 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 4.00 120.00 240.00
+	 1725 3900 2475 3900
+2 1 0 2 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 4.00 120.00 240.00
+	 1725 5100 2625 4125
+2 1 0 2 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 4.00 120.00 240.00
+	 1725 5100 2475 5100
+2 1 0 2 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 4.00 120.00 240.00
+	 1725 2700 2550 2700
+4 0 0 100 0 0 20 0.0000 4 195 405 1125 2850 dx1\001
+4 0 0 100 0 0 20 0.0000 4 195 270 1125 4050 x2\001
+4 0 0 100 0 0 20 0.0000 4 195 405 1200 5175 dx2\001
+4 0 0 100 0 0 20 0.0000 4 195 270 1200 1650 x1\001
+4 0 0 100 0 0 20 0.0000 4 195 270 2700 1650 x1\001
+4 0 0 100 0 0 20 0.0000 4 195 405 2700 2850 dx1\001
+4 0 0 100 0 0 20 0.0000 4 195 270 2700 4050 x2\001
+4 0 0 100 0 0 20 0.0000 4 195 405 2700 5250 dx2\001
+4 0 0 100 0 0 20 0.0000 4 255 270 1200 6975 y2\001
+4 0 0 100 0 0 20 0.0000 4 255 270 1200 8175 y1\001
+4 0 0 100 0 0 20 0.0000 4 255 270 2700 7050 y2\001
+4 0 0 100 0 0 20 0.0000 4 255 270 2700 8175 y1\001
diff --git a/sourcecodes/bnt-master/docs/Figures/kfhead.jpg b/sourcecodes/bnt-master/docs/Figures/kfhead.jpg
new file mode 100644
index 00000000..2c1fc6f0
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/kfhead.jpg
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/mathbymatlab.gif b/sourcecodes/bnt-master/docs/Figures/mathbymatlab.gif
new file mode 100644
index 00000000..0de8d7a0
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/mathbymatlab.gif
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/mcmc_accept.jpg b/sourcecodes/bnt-master/docs/Figures/mcmc_accept.jpg
new file mode 100644
index 00000000..f383627e
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/mcmc_accept.jpg
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/mcmc_post.jpg b/sourcecodes/bnt-master/docs/Figures/mcmc_post.jpg
new file mode 100644
index 00000000..bbe172b5
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/mcmc_post.jpg
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/mfa.eps b/sourcecodes/bnt-master/docs/Figures/mfa.eps
new file mode 100644
index 00000000..9b40d66c
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/mfa.eps
@@ -0,0 +1,347 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: (ImageMagick)
+%%Title: (mfa.eps)
+%%CreationDate: (Tue Nov 16 19:52:06 2004)
+%%BoundingBox: 0 0 126 151
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 1
+%%EndComments
+
+%%BeginDefaults
+%%EndDefaults
+
+%%BeginProlog
+%
+% Display a color image.  The image is displayed in color on
+% Postscript viewers or printers that support color, otherwise
+% it is displayed as grayscale.
+%
+/DirectClassPacket
+{
+  %
+  % Get a DirectClass packet.
+  %
+  % Parameters:
+  %   red.
+  %   green.
+  %   blue.
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile color_packet readhexstring pop pop
+  compression 0 eq
+  {
+    /number_pixels 3 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add 3 mul def
+  } ifelse
+  0 3 number_pixels 1 sub
+  {
+    pixels exch color_packet putinterval
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/DirectClassImage
+{
+  %
+  % Display a DirectClass image.
+  %
+  systemdict /colorimage known
+  {
+    columns rows 8
+    [
+      columns 0 0
+      rows neg 0 rows
+    ]
+    { DirectClassPacket } false 3 colorimage
+  }
+  {
+    %
+    % No colorimage operator;  convert to grayscale.
+    %
+    columns rows 8
+    [
+      columns 0 0
+      rows neg 0 rows
+    ]
+    { GrayDirectClassPacket } image
+  } ifelse
+} bind def
+
+/GrayDirectClassPacket
+{
+  %
+  % Get a DirectClass packet;  convert to grayscale.
+  %
+  % Parameters:
+  %   red
+  %   green
+  %   blue
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile color_packet readhexstring pop pop
+  color_packet 0 get 0.299 mul
+  color_packet 1 get 0.587 mul add
+  color_packet 2 get 0.114 mul add
+  cvi
+  /gray_packet exch def
+  compression 0 eq
+  {
+    /number_pixels 1 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add def
+  } ifelse
+  0 1 number_pixels 1 sub
+  {
+    pixels exch gray_packet put
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/GrayPseudoClassPacket
+{
+  %
+  % Get a PseudoClass packet;  convert to grayscale.
+  %
+  % Parameters:
+  %   index: index into the colormap.
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile byte readhexstring pop 0 get
+  /offset exch 3 mul def
+  /color_packet colormap offset 3 getinterval def
+  color_packet 0 get 0.299 mul
+  color_packet 1 get 0.587 mul add
+  color_packet 2 get 0.114 mul add
+  cvi
+  /gray_packet exch def
+  compression 0 eq
+  {
+    /number_pixels 1 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add def
+  } ifelse
+  0 1 number_pixels 1 sub
+  {
+    pixels exch gray_packet put
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassPacket
+{
+  %
+  % Get a PseudoClass packet.
+  %
+  % Parameters:
+  %   index: index into the colormap.
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile byte readhexstring pop 0 get
+  /offset exch 3 mul def
+  /color_packet colormap offset 3 getinterval def
+  compression 0 eq
+  {
+    /number_pixels 3 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add 3 mul def
+  } ifelse
+  0 3 number_pixels 1 sub
+  {
+    pixels exch color_packet putinterval
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassImage
+{
+  %
+  % Display a PseudoClass image.
+  %
+  % Parameters:
+  %   class: 0-PseudoClass or 1-Grayscale.
+  %
+  currentfile buffer readline pop
+  token pop /class exch def pop
+  class 0 gt
+  {
+    currentfile buffer readline pop
+    token pop /depth exch def pop
+    /grays columns 8 add depth sub depth mul 8 idiv string def
+    columns rows depth
+    [
+      columns 0 0
+      rows neg 0 rows
+    ]
+    { currentfile grays readhexstring pop } image
+  }
+  {
+    %
+    % Parameters:
+    %   colors: number of colors in the colormap.
+    %   colormap: red, green, blue color packets.
+    %
+    currentfile buffer readline pop
+    token pop /colors exch def pop
+    /colors colors 3 mul def
+    /colormap colors string def
+    currentfile colormap readhexstring pop pop
+    systemdict /colorimage known
+    {
+      columns rows 8
+      [
+        columns 0 0
+        rows neg 0 rows
+      ]
+      { PseudoClassPacket } false 3 colorimage
+    }
+    {
+      %
+      % No colorimage operator;  convert to grayscale.
+      %
+      columns rows 8
+      [
+        columns 0 0
+        rows neg 0 rows
+      ]
+      { GrayPseudoClassPacket } image
+    } ifelse
+  } ifelse
+} bind def
+
+/DisplayImage
+{
+  %
+  % Display a DirectClass or PseudoClass image.
+  %
+  % Parameters:
+  %   x & y translation.
+  %   x & y scale.
+  %   label pointsize.
+  %   image label.
+  %   image columns & rows.
+  %   class: 0-DirectClass or 1-PseudoClass.
+  %   compression: 0-none or 1-RunlengthEncoded.
+  %   hex color packets.
+  %
+  gsave
+  /buffer 512 string def
+  /byte 1 string def
+  /color_packet 3 string def
+  /pixels 768 string def
+
+  currentfile buffer readline pop
+  token pop /x exch def
+  token pop /y exch def pop
+  x y translate
+  currentfile buffer readline pop
+  token pop /x exch def
+  token pop /y exch def pop
+  currentfile buffer readline pop
+  token pop /pointsize exch def pop
+  /Times-Roman findfont pointsize scalefont setfont
+  x y scale
+  currentfile buffer readline pop
+  token pop /columns exch def
+  token pop /rows exch def pop
+  currentfile buffer readline pop
+  token pop /class exch def pop
+  currentfile buffer readline pop
+  token pop /compression exch def pop
+  class 0 gt { PseudoClassImage } { DirectClassImage } ifelse
+  grestore
+} bind def
+%%EndProlog
+%%Page:  1 1
+%%PageBoundingBox: 0 0 126 151
+userdict begin
+DisplayImage
+0 0
+126 151
+12.000000
+126 151
+1
+1
+1
+1
+fffffffffffffffffffffffffffffffcfffffffffffffffffffffffffffffffcffffffff
+fffffffffffffffffffffffcfffffffffffffffffffffffffffffffcffffffffffffffff
+fffffffffffffffcfffffffffffffffffffffffffffffffcffffffffffffffffffffffff
+fffffffcfffffffffffffffffffffffffffffffcfffffffffffffffffffffffffffffffc
+ff8000001fffffffffffff800ffffffcffbfffffdffffffffffffc7ff1fffffcffbfffff
+dfffffffffffe3fffe3ffffcffbfffffdfffffffffffdfffffdffffcffbfffffdfffffff
+ffff3fffffe7fffcffbfffffdffffffffffefffffffbfffcffbfffffdffffffffffdffff
+fffdfffcffbfffffdffffffffffbfffffffefffcffbfffffdffffffffff7ffffffff7ffc
+ffbfffffdffffffffff7ffffffff7ffcffbfffffdfffffffffefffffffffbffcffbf0fff
+dfffffffffeff18fffffbffcffbe67ffdfffffffffdffbdfffffdffcffbef7ffdfffffff
+ffdffdbfffffdffcffbdfbffdfffffffffdffc7fffffdffcffbdfbffdfffffffffdffe7f
+ffffdffcffbdfbffdfffffffffdffd3fffffdffcffbef7ffdfffffffffdffdbfffffdffc
+ffbe67ffdfffffffffdffbdfffffdffcffbf0fffdfffffffffeff18fffffbffcffbfcfff
+dfffffffffefffffffffbffcffbff3ffdffffffffff7ffffffff7ffcffbfffffdfffffff
+fff7ffffffff7ffcffbfffffdffffffffffbfffffffefffcffbfffffdffffffffffdffff
+fffdfffcffbfffffdffffffffffefffffffbfffcffbfffffdfffffffffff3fffffe7fffc
+ffbfffffdfffffffffffdfffffdffffcffbfffffdfffffffffffe3fffe3ffffcffbfffff
+dffffffffffffc7ff1fffffcff8000001fffffffffffff800ffffffcfffffffdffffffff
+ffffff7ffffffffcfffffffdffffffffffffff7ffffffffcfffffffefffffffffffffeff
+fffffffcffffffff7ffffffffffffdfffffffffcffffffffbffffffffffffbfffffffffc
+ffffffffbffffffffffffbfffffffffcffffffffdffffffffffff7fffffffffcffffffff
+efffffffffffeffffffffffcffffffffefffffffffffeffffffffffcfffffffff7ffffff
+ffffdffffffffffcfffffffffbffffffffffbffffffffffcfffffffffdffffffffff7fff
+fffffffcfffffffffdffffffffff7ffffffffffcfffffffffefffffffffefffffffffffc
+ffffffffff7ffffffffdfffffffffffcffffffffff7ffffffffdfffffffffffcffffffff
+ffbffffffffbfffffffffffcffffffffffdffffffff7fffffffffffcffffffffffefffff
+ffeffffffffffffcffffffffffefffffffeffffffffffffcfffffffffff7ffffffdfffff
+fffffffcfffffffffffbffffffbffffffffffffcfffffffffffbffffffbffffffffffffc
+fffffffffffdffffff7ffffffffffffcfffffffffffefffffefffffffffffffcffffffff
+ffff5ffff5fffffffffffffcffffffffffff5ffff5fffffffffffffcfffffffffffeafff
+eafffffffffffffcffffffffffff4fffe5fffffffffffffcffffffffffff8fffd3ffffff
+fffffffcffffffffffffc7ffc7fffffffffffffcffffffffffffe7ffcffffffffffffffc
+fffffffffffff3ff9ffffffffffffffcfffffffffffffbffbffffffffffffffcffffffff
+fffffc007ffffffffffffffcffffffffffffe3ff8ffffffffffffffcffffffffffff1bbb
+b1fffffffffffffcfffffffffffefffffefffffffffffffcfffffffffff8eefeee3fffff
+fffffffcfffffffffff7ffffffdffffffffffffcffffffffffebbbbbbbaffffffffffffc
+ffffffffffdffffffff7fffffffffffcffffffffffafefefefebfffffffffffcffffffff
+ffbffffffffbfffffffffffcffffffffff3bbbbbbbb9fffffffffffcffffffffff7f8e3f
+fffdfffffffffffcfffffffffefede7efefefffffffffffcfffffffffeffeefffffeffff
+fffffffcfffffffffebbb2bbbbbafffffffffffcfffffffffefff1fffffefffffffffffc
+fffffffffeefebefefeefffffffffffcfffffffffefffbfffffefffffffffffcffffffff
+febbbbbbbbbafffffffffffcffffffffff7ff1fffffdfffffffffffcffffffffff7eeefe
+eefdfffffffffffcffffffffffbffffffffbfffffffffffcffffffffffbbbbbbbbbbffff
+fffffffcffffffffffdffffffff7fffffffffffcffffffffffefefefefeffffffffffffc
+fffffffffff7ffffffdffffffffffffcfffffffffff9bbbbbb3ffffffffffffcffffffff
+fffefffffefffffffffffffcffffffffffff1efef1fffffffffffffcffffffffffffe3ff
+8ffffffffffffffcfffffffffffffc007ffffffffffffffcffffffffffffffffffffffff
+fffffffcfffffffffffffffffffffffffffffffcfffffffffffffffffffffffffffffffc
+fffffffffffffffffffffffffffffffcfffffffffffffffffffffffffffffffcffffffff
+fffffffffffffffffffffffcfffffffffffffffffffffffffffffffcffffffffffffffff
+fffffffffffffffcfffffffffffffffffffffffffffffffcffffffffffffffffffffffff
+fffffffcfffffffffffffffffffffffffffffffcfffffffffffffffffffffffffffffffc
+fffffffffffffffffffffffffffffffcfffffffffffffffffffffffffffffffcffffffff
+fffffffffffffffffffffffcfffffffffffffffffffffffffffffffcffffffffffffffff
+fffffffffffffffcfffffffffffffffffffffffffffffffcffffffffffffffffffffffff
+fffffffcfffffffffffffffffffffffffffffffcfffffffffffffffffffffffffffffffc
+fffffffffffffffffffffffffffffffcfffffffffffffffffffffffffffffffcffffffff
+fffffffffffffffffffffffcfffffffffffffffffffffffffffffffcffffff3f97ffffff
+ffee03effffffffcffffff9f3fffffffffdf7beffffffffcffffff9f3ffbffffffdf7fd7
+fffffffcffffffaea6402533f98f77d7c7fffffcffffffaeb75bb66df6df07bbb7fffffc
+ffffffb5b7bbb6e1f6df77839ffffffcffffffb5b7bbb6eff6df7fbbe7fffffcffffffbb
+b75bb6e6f6df7f7db7fffffcffffff1b024cc871f9de1e388ffffffcffffffffffffffff
+fffffffffffffffcfffffffffffffffffffffffffffffffcffffffffffffffffffffffff
+fffffffcfffffffffffffffffffffffffffffffcfffffffffffffffffffffffffffffffc
+fffffffffffffffffffffffffffffffcfffffffffffffffffffffffffffffffcffffffff
+fffffffffffffffffffffffcfffffffffffffffffffffffffffffffcffffffffffffffff
+fffffffffffffffcfffffffffffffffffffffffffffffffcffffffffffffffffffffffff
+fffffffc
+end
+%%PageTrailer
+%%Trailer
+%%EOF
diff --git a/sourcecodes/bnt-master/docs/Figures/mfa.fig b/sourcecodes/bnt-master/docs/Figures/mfa.fig
new file mode 100644
index 00000000..90662e74
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/mfa.fig
@@ -0,0 +1,24 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+6 225 225 1800 1650
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 1500 450 300 225 1500 450 1800 675
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 975 1425 300 225 975 1425 1275 1650
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 225 225 600 225 600 675 225 675 225 225
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 525 675 900 1200
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1425 675 1050 1200
+-6
+4 0 -1 0 0 0 12 0.0000 4 135 135 825 1500 Y\001
+4 0 -1 0 0 0 12 0.0000 4 165 135 300 525 Q\001
+4 0 -1 0 0 0 12 0.0000 4 135 135 1350 525 X\001
diff --git a/sourcecodes/bnt-master/docs/Figures/mfa.gif b/sourcecodes/bnt-master/docs/Figures/mfa.gif
new file mode 100644
index 00000000..3325b3a4
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/mfa.gif
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/mixexp.fig b/sourcecodes/bnt-master/docs/Figures/mixexp.fig
new file mode 100644
index 00000000..6999ae55
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/mixexp.fig
@@ -0,0 +1,23 @@
+#FIG 3.1
+Landscape
+Center
+Inches
+1200 2
+6 525 300 1575 2925
+5 1 0 1 -1 7 0 0 -1 0.000 0 1 1 0 2055.000 1650.000 975 675 600 1650 975 2625
+	0 0 1.00 60.00 120.00
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1275 525 300 225 1275 525 1575 750
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 1275 2700 300 225 1275 2700 1575 2925
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 1050 1350 1425 1350 1425 1800 1050 1800 1050 1350
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1275 825 1275 1350
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1275 1800 1275 2475
+-6
+4 0 -1 0 0 0 12 0.0000 4 180 1425 450 3300 Mixture of Experts\001
+4 0 -1 0 0 0 12 0.0000 4 135 120 1200 600 X\001
+4 0 -1 0 0 0 12 0.0000 4 165 135 1125 1650 Q\001
+4 0 -1 0 0 0 12 0.0000 4 135 135 1200 2775 Y\001
diff --git a/sourcecodes/bnt-master/docs/Figures/mixexp.gif b/sourcecodes/bnt-master/docs/Figures/mixexp.gif
new file mode 100644
index 00000000..1b76e58c
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/mixexp.gif
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/mixexp_after.gif b/sourcecodes/bnt-master/docs/Figures/mixexp_after.gif
new file mode 100644
index 00000000..06525bf4
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/mixexp_after.gif
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/mixexp_before.gif b/sourcecodes/bnt-master/docs/Figures/mixexp_before.gif
new file mode 100644
index 00000000..6eef2add
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/mixexp_before.gif
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/mixexp_data.gif b/sourcecodes/bnt-master/docs/Figures/mixexp_data.gif
new file mode 100644
index 00000000..7a770216
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/mixexp_data.gif
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/model_select.png b/sourcecodes/bnt-master/docs/Figures/model_select.png
new file mode 100644
index 00000000..25ee5da4
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/model_select.png
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/qmr.fig b/sourcecodes/bnt-master/docs/Figures/qmr.fig
new file mode 100644
index 00000000..0d852876
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/qmr.fig
@@ -0,0 +1,50 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+1 3 0 3 0 0 100 0 5 0.000 1 0.0000 750 2700 309 309 750 2700 1050 2775
+1 3 0 3 0 0 100 0 5 0.000 1 0.0000 3225 2700 309 309 3225 2700 3525 2775
+1 3 0 3 0 0 100 0 5 0.000 1 0.0000 4500 2700 309 309 4500 2700 4800 2775
+1 3 0 3 0 0 100 0 -1 0.000 1 0.0000 1950 2700 309 309 1950 2700 2025 3000
+1 3 0 3 0 0 100 0 -1 0.000 1 0.0000 5775 2700 309 309 5775 2700 5850 3000
+1 3 0 3 0 0 100 0 -1 0.000 1 0.0000 4125 1200 309 309 4125 1200 4200 1500
+1 3 0 3 0 0 100 0 -1 0.000 1 0.0000 3000 1200 309 309 3000 1200 3075 1500
+1 3 0 3 0 0 100 0 -1 0.000 1 0.0000 1875 1200 309 309 1875 1200 1950 1500
+2 1 0 3 0 7 100 0 -1 0.000 0 0 7 1 1 2
+	0 0 3.00 180.00 360.00
+	0 0 3.00 180.00 360.00
+	 450 3750 6150 3750
+2 1 0 3 0 7 100 0 -1 0.000 0 0 7 1 1 2
+	0 0 3.00 180.00 360.00
+	0 0 3.00 180.00 360.00
+	 1350 525 4650 525
+2 1 0 3 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 3.00 180.00 360.00
+	 1725 1500 900 2475
+2 1 0 3 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 3.00 180.00 360.00
+	 2850 1500 1050 2475
+2 1 0 3 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 3.00 180.00 360.00
+	 2925 1500 2100 2400
+2 1 0 3 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 3.00 180.00 360.00
+	 3975 1500 2100 2400
+2 1 0 3 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 3.00 180.00 360.00
+	 3075 1575 3150 2325
+2 1 0 3 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 3.00 180.00 360.00
+	 3150 1575 4200 2400
+2 1 0 3 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 3.00 180.00 360.00
+	 4200 1500 5475 2475
+4 0 0 100 0 0 24 0.0000 4 255 720 1950 4200 4000\001
+4 0 0 100 0 0 24 0.0000 4 330 1575 2850 4200 Symptoms\001
+4 0 0 100 0 0 24 0.0000 4 255 540 2100 375 600\001
+4 0 0 100 0 0 24 0.0000 4 255 1290 2775 375 Diseases\001
diff --git a/sourcecodes/bnt-master/docs/Figures/qmr.gif b/sourcecodes/bnt-master/docs/Figures/qmr.gif
new file mode 100644
index 00000000..f32294fe
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/qmr.gif
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/qmr.jpg b/sourcecodes/bnt-master/docs/Figures/qmr.jpg
new file mode 100644
index 00000000..40a6c57c
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/qmr.jpg
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/qmr.rnd.jpg b/sourcecodes/bnt-master/docs/Figures/qmr.rnd.jpg
new file mode 100644
index 00000000..57026cd7
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/qmr.rnd.jpg
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/rainer_dbn.jpg b/sourcecodes/bnt-master/docs/Figures/rainer_dbn.jpg
new file mode 100644
index 00000000..a546ff4f
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/rainer_dbn.jpg
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/rainer_tied.fig b/sourcecodes/bnt-master/docs/Figures/rainer_tied.fig
new file mode 100644
index 00000000..49cf565c
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/rainer_tied.fig
@@ -0,0 +1,88 @@
+#FIG 3.2
+Portrait
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 3196.875 3000.000 1275 1875 975 3150 1275 4125
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 5596.875 3000.000 3675 1875 3375 3150 3675 4125
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 7 100 0 -1 0.000 0 0 1 0 3849.948 3549.006 2475 3375 3075 2400 4500 2325
+	1 1 1.00 60.00 120.00
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 1500 1875 237 237 1500 1875 1575 2100
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 1500 2775 237 237 1500 2775 1575 3000
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 2400 2325 237 237 2400 2325 2475 2550
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 2325 3600 237 237 2325 3600 2400 3825
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 1500 4275 237 237 1500 4275 1575 4500
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 3900 1875 237 237 3900 1875 3975 2100
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 3900 2775 237 237 3900 2775 3975 3000
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 4800 2325 237 237 4800 2325 4875 2550
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 4725 3600 237 237 4725 3600 4800 3825
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 3900 4275 237 237 3900 4275 3975 4500
+1 1 1 2 0 7 100 0 -1 6.000 1 0.0000 2625 1875 1725 300 2625 1875 4350 2175
+1 1 1 2 0 7 100 0 -1 6.000 1 0.0000 2625 4275 1800 300 2625 4275 4425 4575
+1 1 1 2 0 7 100 0 -1 6.000 1 0.0000 3375 3600 1725 300 3375 3600 5100 3900
+1 1 1 2 0 7 100 0 -1 6.000 1 0.0000 1500 2775 375 300 1500 2775 1875 3075
+1 1 1 2 0 7 100 0 -1 6.000 1 0.0000 3900 2775 375 300 3900 2775 4275 3075
+1 1 1 2 0 7 100 0 -1 6.000 1 0.0000 4800 2325 375 300 4800 2325 5175 2625
+1 1 1 2 0 7 100 0 -1 6.000 1 0.0000 2400 2325 375 225 2400 2325 2775 2550
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 1725 1950 2175 2250
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 2175 2400 1725 2700
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 2400 2550 2400 3375
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 1575 3000 2100 3450
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 3
+	1 1 1.00 60.00 120.00
+	 1725 1950 2175 3375 2175 3375
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 2175 3750 1650 4125
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 4125 1950 4575 2250
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 4575 2400 4125 2700
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 4800 2550 4800 3375
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 3975 3000 4500 3450
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 3
+	1 1 1.00 60.00 120.00
+	 4125 1950 4575 3375 4575 3375
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 4575 3750 4050 4125
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 2700 2325 3675 2700
+4 0 0 100 0 2 12 0.0000 4 135 90 1425 1950 1\001
+4 0 0 100 0 2 12 0.0000 4 135 90 2325 2400 2\001
+4 0 0 100 0 2 12 0.0000 4 135 90 1425 2850 3\001
+4 0 0 100 0 2 12 0.0000 4 135 90 2250 3675 4\001
+4 0 0 100 0 2 12 0.0000 4 135 90 1425 4350 5\001
+4 0 0 100 0 2 12 0.0000 4 135 90 3750 1950 6\001
+4 0 0 100 0 2 12 0.0000 4 135 90 4650 2400 7\001
+4 0 0 100 0 2 12 0.0000 4 135 90 3750 2850 8\001
+4 0 0 100 0 2 12 0.0000 4 135 90 4650 3675 9\001
+4 0 0 100 0 2 12 0.0000 4 135 180 3750 4350 10\001
+4 0 0 100 0 2 12 0.0000 4 135 210 2475 2700 E2\001
+4 0 0 100 0 2 12 0.0000 4 135 210 1350 4725 E5\001
+4 0 0 100 0 2 12 0.0000 4 135 210 1725 3900 E4\001
+4 0 0 100 0 2 12 0.0000 4 135 210 1350 3300 E3\001
+4 0 0 100 0 2 12 0.0000 4 135 210 1350 2325 E1\001
+4 0 0 100 0 2 12 0.0000 4 135 210 3750 3225 E7\001
+4 0 0 100 0 2 12 0.0000 4 135 210 4800 2850 E6\001
diff --git a/sourcecodes/bnt-master/docs/Figures/rainer_tied.gif b/sourcecodes/bnt-master/docs/Figures/rainer_tied.gif
new file mode 100644
index 00000000..19cb8279
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/rainer_tied.gif
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/sar.fig b/sourcecodes/bnt-master/docs/Figures/sar.fig
new file mode 100644
index 00000000..f6f54d1d
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/sar.fig
@@ -0,0 +1,37 @@
+#FIG 3.1
+Landscape
+Center
+Inches
+1200 2
+6 375 225 2175 2325
+6 375 1350 2100 1800
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 675 1575 300 225 675 1575 975 1800
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1800 1575 300 225 1800 1575 2100 1800
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 975 1575 1500 1575
+-6
+6 450 225 1950 675
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 450 225 825 225 825 675 450 675 450 225
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 1575 225 1950 225 1950 675 1575 675 1575 225
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 450 1575 450
+-6
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 675 675 675 1350
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1800 675 1800 1350
+2 1 1 1 -1 0 0 0 2 4.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 975 1425 1500 525
+4 0 -1 0 0 0 12 0.0000 4 180 1530 600 2250 Switching AR model\001
+-6
+4 0 -1 0 0 0 12 0.0000 4 165 225 525 525 Q1\001
+4 0 -1 0 0 0 12 0.0000 4 165 225 1650 525 Q2\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 525 1650 Y1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 1650 1650 Y2\001
diff --git a/sourcecodes/bnt-master/docs/Figures/sar.gif b/sourcecodes/bnt-master/docs/Figures/sar.gif
new file mode 100644
index 00000000..d22e3e2d
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/sar.gif
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/skf.fig b/sourcecodes/bnt-master/docs/Figures/skf.fig
new file mode 100644
index 00000000..85ff267f
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/skf.fig
@@ -0,0 +1,48 @@
+#FIG 3.1
+Landscape
+Center
+Inches
+1200 2
+6 300 300 2550 3375
+5 1 0 1 -1 -1 0 0 -1 0.000 0 1 1 0 3718.581 1734.122 1725 600 1425 1725 1575 2550
+	0 0 1.00 60.00 120.00
+5 1 0 1 -1 -1 0 0 -1 0.000 0 1 1 0 2652.330 1587.076 600 600 375 1575 525 2400
+	0 0 1.00 60.00 120.00
+6 1650 1200 2250 2775
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1950 2550 300 225 1950 2550 2250 2775
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 1950 1425 300 225 1950 1425 2250 1650
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1950 1725 1950 2250
+-6
+6 675 300 2175 750
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 675 300 1050 300 1050 750 675 750 675 300
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 1800 300 2175 300 2175 750 1800 750 1800 300
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1050 525 1800 525
+-6
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 825 2550 300 225 825 2550 1125 2775
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 825 1425 300 225 825 1425 1125 1650
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 750 825 1200
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1950 750 1950 1200
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1125 1425 1650 1425
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 1725 825 2250
+4 0 -1 0 0 0 12 0.0000 4 180 1740 750 3300 Switching Kalman filter\001
+4 0 -1 0 0 0 12 0.0000 4 165 225 750 600 Q1\001
+4 0 -1 0 0 0 12 0.0000 4 165 225 1875 600 Q2\001
+4 0 -1 0 0 0 12 0.0000 4 135 210 675 1500 X1\001
+4 0 -1 0 0 0 12 0.0000 4 135 210 1800 1500 X2\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 675 2625 Y1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 1800 2625 Y2\001
+-6
diff --git a/sourcecodes/bnt-master/docs/Figures/skf.gif b/sourcecodes/bnt-master/docs/Figures/skf.gif
new file mode 100644
index 00000000..aa784e11
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/skf.gif
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/skf3.fig b/sourcecodes/bnt-master/docs/Figures/skf3.fig
new file mode 100644
index 00000000..5940436c
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/skf3.fig
@@ -0,0 +1,71 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+6 300 300 3750 3450
+5 1 0 2 0 0 50 0 -1 0.000 0 1 1 0 2100.000 1950.000 675 975 375 1875 675 2925
+	1 1 2.00 120.00 240.00
+5 1 0 2 0 0 50 0 -1 0.000 0 1 1 0 3300.000 1950.000 1875 975 1575 1875 1875 2925
+	1 1 2.00 120.00 240.00
+5 1 0 2 0 0 50 0 -1 0.000 0 1 1 0 4500.000 1950.000 3075 975 2775 1875 3075 2925
+	1 1 2.00 120.00 240.00
+1 3 0 2 0 0 50 0 -1 0.000 1 0.0000 975 1875 335 335 975 1875 1125 2175
+1 3 0 2 0 0 50 0 -1 0.000 1 0.0000 3375 1875 335 335 3375 1875 3525 2175
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 975 3075 335 335 975 3075 1125 3375
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 2175 3075 335 335 2175 3075 2325 3375
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 3375 3075 335 335 3375 3075 3525 3375
+1 3 0 2 0 0 50 0 -1 0.000 1 0.0000 2175 1875 335 335 2175 1875 2325 2175
+2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5
+	 675 375 1275 375 1275 975 675 975 675 375
+2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5
+	 1875 375 2475 375 2475 975 1875 975 1875 375
+2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5
+	 3075 375 3675 375 3675 975 3075 975 3075 375
+2 1 0 2 0 0 50 0 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 975 975 975 1575
+2 1 0 2 0 0 50 0 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 975 2175 975 2775
+2 1 0 2 0 0 50 0 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 2175 975 2175 1575
+2 1 0 2 0 0 50 0 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 2175 2175 2175 2775
+2 1 0 2 0 0 50 0 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 3375 975 3375 1575
+2 1 0 2 0 0 50 0 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 3375 2175 3375 2775
+2 1 0 2 0 0 50 0 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 1275 1875 1875 1875
+2 1 0 2 0 0 50 0 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 2475 1875 3075 1875
+4 0 0 50 0 0 24 0.0000 4 255 225 750 750 Z\001
+4 0 0 50 0 0 24 0.0000 4 255 225 1950 750 Z\001
+4 0 0 50 0 0 24 0.0000 4 255 180 2175 900 2\001
+4 0 0 50 0 0 24 0.0000 4 255 225 3150 750 Z\001
+4 0 0 50 0 0 24 0.0000 4 255 180 3375 900 3\001
+4 0 0 50 0 0 24 0.0000 4 255 270 825 2025 X\001
+4 0 0 50 0 0 24 0.0000 4 255 180 1050 2175 1\001
+4 0 0 50 0 0 24 0.0000 4 255 180 2250 2175 2\001
+4 0 0 50 0 0 24 0.0000 4 255 180 3450 2175 3\001
+4 0 0 50 0 0 24 0.0000 4 255 270 3225 2025 X\001
+4 0 0 50 0 0 24 0.0000 4 255 270 2025 2025 X\001
+4 0 7 50 0 0 24 0.0000 4 255 240 825 3150 Y\001
+4 0 7 50 0 0 24 0.0000 4 255 240 2025 3150 Y\001
+4 0 7 50 0 0 24 0.0000 4 255 240 3225 3150 Y\001
+4 0 7 50 0 0 24 0.0000 4 255 180 1050 3300 1\001
+4 0 7 50 0 0 24 0.0000 4 255 180 2175 3375 2\001
+4 0 7 50 0 0 24 0.0000 4 255 180 3375 3300 3\001
+4 0 0 50 0 0 24 0.0000 4 255 180 975 900 1\001
+-6
diff --git a/sourcecodes/bnt-master/docs/Figures/skf3_nobold.fig b/sourcecodes/bnt-master/docs/Figures/skf3_nobold.fig
new file mode 100644
index 00000000..0d071170
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/skf3_nobold.fig
@@ -0,0 +1,66 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+5 1 0 1 -1 -1 0 0 -1 0.000 0 1 1 0 2652.330 1587.076 600 600 375 1575 525 2400
+	0 0 1.00 60.00 120.00
+5 1 0 1 -1 -1 0 0 -1 0.000 0 1 1 0 3718.581 1734.122 1725 600 1425 1725 1575 2550
+	0 0 1.00 60.00 120.00
+5 1 0 1 -1 -1 0 0 -1 0.000 0 1 1 0 4843.581 1734.122 2850 600 2550 1725 2700 2550
+	0 0 1.00 60.00 120.00
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 825 2550 300 225 825 2550 1125 2775
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 825 1425 300 225 825 1425 1125 1650
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1950 2550 300 225 1950 2550 2250 2775
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 1950 1425 300 225 1950 1425 2250 1650
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 3075 1425 300 225 3075 1425 3375 1650
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 3075 2550 300 225 3075 2550 3375 2775
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 750 825 1200
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 1725 825 2250
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1950 750 1950 1200
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1125 1425 1650 1425
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3075 750 3075 1200
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2250 1425 2775 1425
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 675 300 1050 300 1050 750 675 750 675 300
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 1800 300 2175 300 2175 750 1800 750 1800 300
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1050 525 1800 525
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1950 1725 1950 2250
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3075 1725 3075 2250
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 2850 300 3225 300 3225 750 2850 750 2850 300
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2100 525 2850 525
+4 0 -1 0 0 0 12 0.0000 4 135 225 675 1500 X1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 675 2625 Y1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 1800 1500 X2\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 1800 2625 Y2\001
+4 0 0 50 0 0 12 0.0000 4 135 225 2850 1500 X3\001
+4 0 0 0 0 0 12 0.0000 4 135 225 2925 2625 Y3\001
+4 0 0 50 0 0 12 0.0000 4 135 210 750 600 Z1\001
+4 0 0 50 0 0 12 0.0000 4 135 210 1875 600 Z2\001
+4 0 0 50 0 0 12 0.0000 4 135 210 2925 600 Z3\001
diff --git a/sourcecodes/bnt-master/docs/Figures/skf3_nosolid.fig b/sourcecodes/bnt-master/docs/Figures/skf3_nosolid.fig
new file mode 100644
index 00000000..60609cb2
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/skf3_nosolid.fig
@@ -0,0 +1,66 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+5 1 0 2 0 7 50 0 -1 0.000 0 1 1 0 2652.330 1587.076 600 600 375 1575 525 2400
+	1 1 2.00 120.00 240.00
+5 1 0 2 0 7 50 0 -1 0.000 0 1 1 0 3718.581 1734.122 1725 600 1425 1725 1575 2550
+	1 1 2.00 120.00 240.00
+5 1 0 2 0 7 50 0 -1 0.000 0 1 1 0 4843.581 1734.122 2850 600 2550 1725 2700 2550
+	1 1 2.00 120.00 240.00
+1 1 0 2 0 7 50 0 -1 0.000 1 0.0000 1950 1425 300 225 1950 1425 2250 1650
+1 1 0 2 0 7 50 0 -1 0.000 1 0.0000 825 1425 300 225 825 1425 1125 1650
+1 1 0 2 0 0 50 0 7 0.000 1 0.0000 825 2550 300 225 825 2550 1125 2775
+1 1 0 2 0 0 50 0 7 0.000 1 0.0000 3075 2550 300 225 3075 2550 3375 2775
+1 1 0 2 0 0 50 0 7 0.000 1 0.0000 1950 2550 300 225 1950 2550 2250 2775
+1 1 0 2 0 7 50 0 -1 0.000 1 0.0000 3075 1425 300 225 3075 1425 3375 1650
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 825 1725 825 2250
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 1125 1425 1650 1425
+2 2 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5
+	 1800 300 2175 300 2175 750 1800 750 1800 300
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 2100 525 2850 525
+2 2 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5
+	 2850 300 3225 300 3225 750 2850 750 2850 300
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 1950 1725 1950 2250
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 2250 1425 2775 1425
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 1950 750 1950 1200
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 3075 750 3075 1200
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 3075 1725 3075 2250
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 825 750 825 1200
+2 2 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5
+	 675 300 1050 300 1050 750 675 750 675 300
+2 1 0 2 0 0 50 0 7 0.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 1050 525 1800 525
+4 0 0 50 0 2 12 0.0000 4 135 225 675 2625 Y1\001
+4 0 0 50 0 2 12 0.0000 4 135 225 2925 2625 Y3\001
+4 0 0 50 0 2 12 0.0000 4 135 225 675 1500 X1\001
+4 0 0 50 0 2 12 0.0000 4 135 225 1800 1500 X2\001
+4 0 0 50 0 2 12 0.0000 4 135 225 2850 1500 X3\001
+4 0 0 50 0 2 12 0.0000 4 135 210 750 600 Z1\001
+4 0 0 50 0 2 12 0.0000 4 135 210 1875 600 Z2\001
+4 0 0 50 0 2 12 0.0000 4 135 210 2925 600 Z3\001
+4 0 0 50 0 2 12 0.0000 4 135 225 1875 2625 Y2\001
diff --git a/sourcecodes/bnt-master/docs/Figures/skf3_polytree.fig b/sourcecodes/bnt-master/docs/Figures/skf3_polytree.fig
new file mode 100644
index 00000000..eea5df04
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/skf3_polytree.fig
@@ -0,0 +1,60 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 825 2550 300 225 825 2550 1125 2775
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 825 1425 300 225 825 1425 1125 1650
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1950 2550 300 225 1950 2550 2250 2775
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 1950 1425 300 225 1950 1425 2250 1650
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 3075 1425 300 225 3075 1425 3375 1650
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 3075 2550 300 225 3075 2550 3375 2775
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 750 825 1200
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 1725 825 2250
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1950 750 1950 1200
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1125 1425 1650 1425
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3075 750 3075 1200
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2250 1425 2775 1425
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 675 300 1050 300 1050 750 675 750 675 300
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 1800 300 2175 300 2175 750 1800 750 1800 300
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1050 525 1800 525
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1950 1725 1950 2250
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3075 1725 3075 2250
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 2850 300 3225 300 3225 750 2850 750 2850 300
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2100 525 2850 525
+4 0 -1 0 0 0 12 0.0000 4 165 225 750 600 Q1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 675 1500 X1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 675 2625 Y1\001
+4 0 -1 0 0 0 12 0.0000 4 165 225 1875 600 Q2\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 1800 1500 X2\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 1800 2625 Y2\001
+4 0 0 50 0 0 12 0.0000 4 165 225 2925 600 Q3\001
+4 0 0 50 0 0 12 0.0000 4 135 225 2850 1500 X3\001
+4 0 0 0 0 0 12 0.0000 4 135 225 2925 2625 Y3\001
diff --git a/sourcecodes/bnt-master/docs/Figures/sprinkler.fig b/sourcecodes/bnt-master/docs/Figures/sprinkler.fig
new file mode 100644
index 00000000..6e343f52
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/sprinkler.fig
@@ -0,0 +1,73 @@
+#FIG 3.2
+Portrait
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+6 3675 1275 6000 3450
+1 1 0 1 -1 7 0 0 -1 0.000 1 0.0000 4125 2400 450 225 4125 2400 4575 2625
+1 1 0 1 -1 7 0 0 -1 0.000 1 0.0000 4800 1500 450 225 4800 1500 5250 1725
+1 1 0 1 -1 7 0 0 -1 0.000 1 0.0000 5550 2400 450 225 5550 2400 6000 2625
+1 1 0 1 -1 7 0 0 -1 0.000 1 0.0000 4875 3225 450 225 4875 3225 5325 3450
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 4650 1725 4200 2175
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 5025 1725 5400 2175
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 4350 2625 4800 3000
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 5475 2700 5100 3000
+4 0 -1 0 0 0 12 0.0000 4 180 525 4575 1575 Cloudy\001
+4 0 -1 0 0 0 12 0.0000 4 180 675 3825 2475 Sprinkler\001
+4 0 -1 0 0 0 12 0.0000 4 135 345 5400 2475 Rain\001
+4 0 -1 0 0 0 12 0.0000 4 135 795 4500 3300 WetGrass\001
+-6
+6 3975 3900 6000 5775
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
+	 3975 4275 6000 4275
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 1
+	 4425 3975
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
+	 4485 3960 4485 5730
+4 0 -1 0 0 0 12 0.0000 4 135 300 4050 4500 F  F\001
+4 0 -1 0 0 0 12 0.0000 4 135 810 4650 4500 1.0        0.0\001
+4 0 -1 0 0 0 12 0.0000 4 135 300 4050 4875 T  F\001
+4 0 -1 0 0 0 12 0.0000 4 135 300 4050 5250 F  T\001
+4 0 -1 0 0 0 12 0.0000 4 135 345 4050 5625 T   T\001
+4 0 -1 0 0 0 12 0.0000 4 135 855 4650 4875 0.1         0.9\001
+4 0 -1 0 0 0 12 0.0000 4 135 855 4650 5250 0.1         0.9\001
+4 0 -1 0 0 0 12 0.0000 4 135 900 4650 5625 0.01      0.99\001
+4 0 -1 0 0 0 12 0.0000 4 180 1785 4125 4230 S  R  P(W=F)  P(W=T)\001
+-6
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
+	 4125 525 5700 525
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
+	 1650 2625 3375 2625
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
+	 2025 2325 2025 3300
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
+	 6525 2700 8250 2700
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
+	 6900 2400 6900 3450
+4 0 -1 0 0 0 12 0.0000 4 180 1260 4290 450 P(C=F)  P(C=T)\001
+4 0 -1 0 0 0 12 0.0000 4 135 855 4425 825 0.5         0.5\001
+4 0 -1 0 0 0 12 0.0000 4 135 105 1725 2925 F\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 2175 2925 0.5\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 2775 2925 0.5\001
+4 0 -1 0 0 0 12 0.0000 4 135 105 1725 3225 T\001
+4 0 -1 0 0 0 12 0.0000 4 135 900 2175 3225 0.9          0.1\001
+4 0 -1 0 0 0 12 0.0000 4 135 120 6600 2625 C\001
+4 0 -1 0 0 0 12 0.0000 4 135 105 6600 3000 F\001
+4 0 -1 0 0 0 12 0.0000 4 135 105 6525 3375 T\001
+4 0 -1 0 0 0 12 0.0000 4 135 945 7050 3375 0.2           0.8\001
+4 0 -1 0 0 0 12 0.0000 4 135 945 7050 3000 0.8           0.2\001
+4 0 0 100 0 0 12 0.0000 4 135 120 1650 2550 C\001
+4 0 0 100 0 0 12 0.0000 4 180 1185 2100 2550 P(S=F) P(S=T)\001
+4 0 0 100 0 0 12 0.0000 4 180 1215 6975 2625 P(R=F) P(R=T)\001
diff --git a/sourcecodes/bnt-master/docs/Figures/sprinkler.gif b/sourcecodes/bnt-master/docs/Figures/sprinkler.gif
new file mode 100644
index 00000000..c3520ef7
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/sprinkler.gif
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/sprinkler.jpg b/sourcecodes/bnt-master/docs/Figures/sprinkler.jpg
new file mode 100644
index 00000000..65ebf1e3
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/sprinkler.jpg
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/sprinkler.noparams.fig b/sourcecodes/bnt-master/docs/Figures/sprinkler.noparams.fig
new file mode 100644
index 00000000..d71d8102
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/sprinkler.noparams.fig
@@ -0,0 +1,31 @@
+#FIG 3.2
+Portrait
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+6 600 300 2925 2475
+1 1 0 1 -1 7 0 0 -1 0.000 1 0.0000 1050 1425 450 225 1050 1425 1500 1650
+1 1 0 1 -1 7 0 0 -1 0.000 1 0.0000 1725 525 450 225 1725 525 2175 750
+1 1 0 1 -1 7 0 0 -1 0.000 1 0.0000 2475 1425 450 225 2475 1425 2925 1650
+1 1 0 1 -1 7 0 0 -1 0.000 1 0.0000 1800 2250 450 225 1800 2250 2250 2475
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1575 750 1125 1200
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1950 750 2325 1200
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1275 1650 1725 2025
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2400 1725 2025 2025
+4 0 -1 0 0 0 12 0.0000 4 180 525 1500 600 Cloudy\001
+4 0 -1 0 0 0 12 0.0000 4 180 675 750 1500 Sprinkler\001
+4 0 -1 0 0 0 12 0.0000 4 135 345 2325 1500 Rain\001
+4 0 -1 0 0 0 12 0.0000 4 135 795 1425 2325 WetGrass\001
+-6
diff --git a/sourcecodes/bnt-master/docs/Figures/sprinkler_bar.gif b/sourcecodes/bnt-master/docs/Figures/sprinkler_bar.gif
new file mode 100644
index 00000000..25a444a2
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/sprinkler_bar.gif
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/sprinkler_bar.jpg b/sourcecodes/bnt-master/docs/Figures/sprinkler_bar.jpg
new file mode 100644
index 00000000..07894e5f
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/sprinkler_bar.jpg
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/sprinkler_bar.png b/sourcecodes/bnt-master/docs/Figures/sprinkler_bar.png
new file mode 100644
index 00000000..6194915e
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/sprinkler_bar.png
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/water3.cts.fig b/sourcecodes/bnt-master/docs/Figures/water3.cts.fig
new file mode 100644
index 00000000..da9022b4
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/water3.cts.fig
@@ -0,0 +1,266 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 3229.069 1880.389 1950 3450 1275 1350 1875 375
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 0 100 0 -1 0.000 0 1 1 0 4200.000 6900.000 1950 5700 1650 6900 1950 8100
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 0 100 0 -1 0.000 0 1 1 0 3787.500 6900.000 1950 4950 1125 7200 1950 8850
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 7232.812 1950.000 5775 3450 5175 1575 5775 450
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 0 100 0 -1 0.000 0 1 1 0 7387.500 6975.000 5775 5700 5400 7500 5775 8250
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 0 100 0 -1 0.000 0 1 1 0 7188.461 6911.539 5775 4950 5175 8250 5850 8925
+	1 1 1.00 60.00 120.00
+6 2100 75 4425 9225
+5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 5282.812 1950.000 3825 3450 3225 1575 3825 450
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 0 100 0 -1 0.000 0 1 1 0 5437.500 6975.000 3825 5700 3450 7500 3825 8250
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 0 100 0 -1 0.000 0 1 1 0 5238.461 6911.539 3825 4950 3225 8250 3900 8925
+	1 1 1.00 60.00 120.00
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 4125 8250 237 237 4125 8250 4200 8475
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 4125 8925 237 237 4125 8925 4200 9150
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 4050 375 237 237 4050 375 4125 600
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 4050 1050 237 237 4050 1050 4125 1275
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 7050 3825 5850
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 7125 3825 6525
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 7200 3825 7200
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 6525 3825 7125
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 6450 3825 6450
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 5700 3825 5700
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 5025 3825 5625
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 5625 3825 5025
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 2850 3825 6300
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4350 3825 5550
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 5550 3825 4350
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4950 3825 4950
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 3600 3825 4800
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4200 3825 4200
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4800 3825 3600
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 3525 3825 4125
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4125 3825 3525
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 3450 3825 3450
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 2775 3825 3375
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 2025 3825 3300
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 2700 3825 2700
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 1950 3825 1950
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 2175 4275 1725 3825 1725 3825 2175 4275 2175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 2925 4275 2475 3825 2475 3825 2925 4275 2925
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 3675 4275 3225 3825 3225 3825 3675 4275 3675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 4425 4275 3975 3825 3975 3825 4425 4275 4425
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 5175 4275 4725 3825 4725 3825 5175 4275 5175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 5925 4275 5475 3825 5475 3825 5925 4275 5925
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 6675 4275 6225 3825 6225 3825 6675 4275 6675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 7425 4275 6975 3825 6975 3825 7425 4275 7425
+2 1 0 2 0 0 100 0 3 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 2175 1650 2175 1200
+2 1 0 2 0 0 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 4050 1725 4050 1275
+-6
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 2175 8250 237 237 2175 8250 2250 8475
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 2175 8925 237 237 2175 8925 2250 9150
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 2175 300 237 237 2175 300 2250 525
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 2175 975 237 237 2175 975 2250 1200
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 6075 8250 237 237 6075 8250 6150 8475
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 6075 8925 237 237 6075 8925 6150 9150
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 6000 375 237 237 6000 375 6075 600
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 6000 1050 237 237 6000 1050 6075 1275
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 7425 2400 6975 1950 6975 1950 7425 2400 7425
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 6675 2400 6225 1950 6225 1950 6675 2400 6675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 5925 2400 5475 1950 5475 1950 5925 2400 5925
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 5175 2400 4725 1950 4725 1950 5175 2400 5175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 4425 2400 3975 1950 3975 1950 4425 2400 4425
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 3675 2400 3225 1950 3225 1950 3675 2400 3675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 2175 2400 1725 1950 1725 1950 2175 2400 2175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 2925 2400 2475 1950 2475 1950 2925 2400 2925
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 7050 5775 5850
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 7125 5775 6525
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 7200 5775 7200
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 6525 5775 7125
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 6450 5775 6450
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 5700 5775 5700
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 5025 5775 5625
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 5625 5775 5025
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 2850 5775 6300
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4350 5775 5550
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 5550 5775 4350
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4950 5775 4950
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 3600 5775 4800
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4200 5775 4200
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4800 5775 3600
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 3525 5775 4125
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4125 5775 3525
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 3450 5775 3450
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 2775 5775 3375
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 2025 5775 3300
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 2700 5775 2700
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 1950 5775 1950
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 2175 6225 1725 5775 1725 5775 2175 6225 2175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 2925 6225 2475 5775 2475 5775 2925 6225 2925
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 3675 6225 3225 5775 3225 5775 3675 6225 3675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 4425 6225 3975 5775 3975 5775 4425 6225 4425
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 5175 6225 4725 5775 4725 5775 5175 6225 5175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 5925 6225 5475 5775 5475 5775 5925 6225 5925
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 6675 6225 6225 5775 6225 5775 6675 6225 6675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 7425 6225 6975 5775 6975 5775 7425 6225 7425
+2 1 0 2 0 0 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 6000 1725 6000 1275
+4 0 0 100 0 2 12 0.0000 4 135 225 2025 2025 A1\001
+4 0 0 100 0 2 12 0.0000 4 135 225 3900 2025 A2\001
+4 0 0 100 0 2 12 0.0000 4 135 225 5850 2025 A3\001
+4 0 0 100 0 2 12 0.0000 4 135 225 2025 2775 B1\001
+4 0 0 100 0 2 12 0.0000 4 135 225 3900 2775 B2\001
+4 0 0 100 0 2 12 0.0000 4 135 225 5850 2775 B3\001
+4 0 0 100 0 2 12 0.0000 4 135 210 2025 3525 C1\001
+4 0 0 100 0 2 12 0.0000 4 135 210 3900 3525 C2\001
+4 0 0 100 0 2 12 0.0000 4 135 210 5850 3525 C3\001
+4 0 0 100 0 2 12 0.0000 4 135 225 2025 4275 D1\001
+4 0 0 100 0 2 12 0.0000 4 135 225 3900 4275 D2\001
+4 0 0 100 0 2 12 0.0000 4 135 225 5850 4275 D3\001
+4 0 0 100 0 2 12 0.0000 4 135 210 2025 5025 E1\001
+4 0 0 100 0 2 12 0.0000 4 135 210 3900 5025 E2\001
+4 0 0 100 0 2 12 0.0000 4 135 210 5850 5025 E3\001
+4 0 0 100 0 2 12 0.0000 4 135 210 3900 5775 F2\001
+4 0 0 100 0 2 12 0.0000 4 135 210 2025 5775 F1\001
+4 0 0 100 0 2 12 0.0000 4 135 210 5850 5775 F3\001
+4 0 0 100 0 2 12 0.0000 4 135 225 2025 6525 G1\001
+4 0 0 100 0 2 12 0.0000 4 135 225 3975 6525 G2\001
+4 0 0 100 0 2 12 0.0000 4 135 225 5850 6525 G3\001
+4 0 0 100 0 2 12 0.0000 4 135 240 3900 7275 H2\001
+4 0 0 100 0 2 12 0.0000 4 135 240 5925 7275 H3\001
+4 0 0 100 0 2 12 0.0000 4 135 240 2025 7275 H1\001
+4 0 0 100 0 2 12 0.0000 4 135 360 1950 1050 YA1\001
+4 0 0 100 0 2 12 0.0000 4 135 360 3900 1125 YA2\001
+4 0 0 100 0 2 12 0.0000 4 135 360 5850 1125 YA3\001
+4 0 0 100 0 2 12 0.0000 4 135 345 1950 375 YC1\001
+4 0 0 100 0 2 12 0.0000 4 135 345 3900 450 YC2\001
+4 0 0 100 0 2 12 0.0000 4 135 345 5850 450 YC3\001
+4 0 0 100 0 2 12 0.0000 4 135 345 2025 8325 YE1\001
+4 0 0 100 0 2 12 0.0000 4 135 345 3975 8325 YE2\001
+4 0 0 100 0 2 12 0.0000 4 135 345 5925 8325 YE3\001
+4 0 0 100 0 2 12 0.0000 4 135 345 3975 9000 YF2\001
+4 0 0 100 0 2 12 0.0000 4 135 345 5925 9000 YF3\001
+4 0 0 100 0 2 12 0.0000 4 135 345 2025 9000 YF1\001
diff --git a/sourcecodes/bnt-master/docs/Figures/water3.fig b/sourcecodes/bnt-master/docs/Figures/water3.fig
new file mode 100644
index 00000000..23bc3e66
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/water3.fig
@@ -0,0 +1,279 @@
+#FIG 3.2
+Portrait
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 7232.812 1950.000 5775 3450 5175 1575 5775 450
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 5282.812 1950.000 3825 3450 3225 1575 3825 450
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 5445.833 6562.500 1950 4200 1275 7200 1950 8925
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 7595.833 6637.500 3825 4275 3150 6825 3825 9000
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 8419.351 6558.096 5700 4200 5100 7950 5775 9000
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 3332.812 2025.000 1875 3525 1275 1650 1875 525
+	1 1 1.00 60.00 120.00
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 7425 2400 6975 1950 6975 1950 7425 2400 7425
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 6675 2400 6225 1950 6225 1950 6675 2400 6675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 5925 2400 5475 1950 5475 1950 5925 2400 5925
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 5175 2400 4725 1950 4725 1950 5175 2400 5175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 4425 2400 3975 1950 3975 1950 4425 2400 4425
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 3675 2400 3225 1950 3225 1950 3675 2400 3675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 2175 2400 1725 1950 1725 1950 2175 2400 2175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 2925 2400 2475 1950 2475 1950 2925 2400 2925
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 7050 5775 5850
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 7125 5775 6525
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 7200 5775 7200
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 6525 5775 7125
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 6450 5775 6450
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 5700 5775 5700
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 5025 5775 5625
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 5625 5775 5025
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 2850 5775 6300
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4350 5775 5550
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 5550 5775 4350
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4950 5775 4950
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 3600 5775 4800
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4200 5775 4200
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4800 5775 3600
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 3525 5775 4125
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4125 5775 3525
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 3450 5775 3450
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 2775 5775 3375
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 2025 5775 3300
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 2700 5775 2700
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 1950 5775 1950
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 2175 6225 1725 5775 1725 5775 2175 6225 2175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 2925 6225 2475 5775 2475 5775 2925 6225 2925
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 3675 6225 3225 5775 3225 5775 3675 6225 3675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 4425 6225 3975 5775 3975 5775 4425 6225 4425
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 5175 6225 4725 5775 4725 5775 5175 6225 5175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 5925 6225 5475 5775 5475 5775 5925 6225 5925
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 6675 6225 6225 5775 6225 5775 6675 6225 6675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 7425 6225 6975 5775 6975 5775 7425 6225 7425
+2 1 0 2 0 0 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 6000 1725 6000 1275
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 7050 3825 5850
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 7125 3825 6525
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 7200 3825 7200
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 6525 3825 7125
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 6450 3825 6450
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 5700 3825 5700
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 5025 3825 5625
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 5625 3825 5025
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 2850 3825 6300
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4350 3825 5550
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 5550 3825 4350
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4950 3825 4950
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 3600 3825 4800
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4200 3825 4200
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4800 3825 3600
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 3525 3825 4125
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4125 3825 3525
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 3450 3825 3450
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 2775 3825 3375
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 2025 3825 3300
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 2700 3825 2700
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 1950 3825 1950
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 2175 4275 1725 3825 1725 3825 2175 4275 2175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 2925 4275 2475 3825 2475 3825 2925 4275 2925
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 3675 4275 3225 3825 3225 3825 3675 4275 3675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 4425 4275 3975 3825 3975 3825 4425 4275 4425
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 5175 4275 4725 3825 4725 3825 5175 4275 5175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 5925 4275 5475 3825 5475 3825 5925 4275 5925
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 6675 4275 6225 3825 6225 3825 6675 4275 6675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 7425 4275 6975 3825 6975 3825 7425 4275 7425
+2 1 0 2 0 0 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 4050 1725 4050 1275
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 6225 1275 6225 825 5775 825 5775 1275 6225 1275
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 6225 600 6225 150 5775 150 5775 600 6225 600
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 4275 600 4275 150 3825 150 3825 600 4275 600
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 4275 1275 4275 825 3825 825 3825 1275 4275 1275
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 2175 7425 2175 7950
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 2400 8400 2400 7950 1950 7950 1950 8400 2400 8400
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 4275 8400 4275 7950 3825 7950 3825 8400 4275 8400
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 6225 8400 6225 7950 5775 7950 5775 8400 6225 8400
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 4050 7425 4050 7950
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 6000 7425 6000 7950
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 2400 9150 2400 8700 1950 8700 1950 9150 2400 9150
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 4275 9150 4275 8700 3825 8700 3825 9150 4275 9150
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 6225 9150 6225 8700 5775 8700 5775 9150 6225 9150
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 2400 1200 2400 750 1950 750 1950 1200 2400 1200
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 2400 600 2400 150 1950 150 1950 600 2400 600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 2175 1650 2175 1200
+4 0 0 100 0 2 12 0.0000 4 135 90 2100 2025 1\001
+4 0 0 100 0 2 12 0.0000 4 135 90 2100 2775 2\001
+4 0 0 100 0 2 12 0.0000 4 135 90 2100 3525 3\001
+4 0 0 100 0 2 12 0.0000 4 135 90 2025 4275 4\001
+4 0 0 100 0 2 12 0.0000 4 135 90 2025 5025 5\001
+4 0 0 100 0 2 12 0.0000 4 135 90 2025 5775 6\001
+4 0 0 100 0 2 12 0.0000 4 135 90 2025 6525 7\001
+4 0 0 100 0 2 12 0.0000 4 135 90 2025 7275 8\001
+4 0 0 100 0 2 12 0.0000 4 135 180 2025 9000 11\001
+4 0 0 100 0 2 12 0.0000 4 135 180 2100 8250 12\001
+4 0 0 100 0 2 12 0.0000 4 135 90 2100 1050 9\001
+4 0 0 100 0 2 12 0.0000 4 135 180 2100 450 10\001
+4 0 0 100 0 2 12 0.0000 4 135 180 3900 2025 13\001
+4 0 0 100 0 2 12 0.0000 4 135 180 3900 2775 14\001
+4 0 0 100 0 2 12 0.0000 4 135 180 3900 3525 15\001
+4 0 0 100 0 2 12 0.0000 4 135 180 3900 4275 16\001
+4 0 0 100 0 2 12 0.0000 4 135 180 3900 5025 17\001
+4 0 0 100 0 2 12 0.0000 4 135 180 3900 5775 18\001
+4 0 0 100 0 2 12 0.0000 4 135 180 3900 6525 19\001
+4 0 0 100 0 2 12 0.0000 4 135 180 3900 7275 20\001
+4 0 0 100 0 2 12 0.0000 4 135 180 3900 1125 21\001
+4 0 0 100 0 2 12 0.0000 4 135 180 3975 450 22\001
+4 0 0 100 0 2 12 0.0000 4 135 180 3900 9000 23\001
+4 0 0 100 0 2 12 0.0000 4 135 180 3900 8250 24\001
+4 0 0 100 0 2 12 0.0000 4 135 180 5850 2025 25\001
+4 0 0 100 0 2 12 0.0000 4 135 180 5850 2775 26\001
+4 0 0 100 0 2 12 0.0000 4 135 180 5850 3525 27\001
+4 0 0 100 0 2 12 0.0000 4 135 180 5850 4275 28\001
+4 0 0 100 0 2 12 0.0000 4 135 180 5850 5025 29\001
+4 0 0 100 0 2 12 0.0000 4 135 180 5850 5775 30\001
+4 0 0 100 0 2 12 0.0000 4 135 180 5850 6525 31\001
+4 0 0 100 0 2 12 0.0000 4 135 180 5850 7275 32\001
+4 0 0 100 0 2 12 0.0000 4 135 180 5850 1125 33\001
+4 0 0 100 0 2 12 0.0000 4 135 180 5925 450 34\001
+4 0 0 100 0 2 12 0.0000 4 135 180 5850 8250 36\001
+4 0 0 100 0 2 12 0.0000 4 135 180 5850 9000 35\001
diff --git a/sourcecodes/bnt-master/docs/Figures/water3.gif b/sourcecodes/bnt-master/docs/Figures/water3.gif
new file mode 100644
index 00000000..9e8ecadd
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/water3.gif
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/water3_75.gif b/sourcecodes/bnt-master/docs/Figures/water3_75.gif
new file mode 100644
index 00000000..e4e477eb
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/water3_75.gif
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Figures/water3_circle.fig b/sourcecodes/bnt-master/docs/Figures/water3_circle.fig
new file mode 100644
index 00000000..a29b9a8b
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/water3_circle.fig
@@ -0,0 +1,231 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 3229.069 1880.389 1950 3450 1275 1350 1875 375
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 7232.812 1950.000 5775 3450 5175 1575 5775 450
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 5282.812 1950.000 3825 3450 3225 1575 3825 450
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 6931.999 6519.041 1875 4275 1425 7050 1950 8925
+	0 0 1.00 60.00 120.00
+5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 7187.500 6562.500 3825 4275 3150 6075 3825 8850
+	0 0 1.00 60.00 120.00
+5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 9787.500 6592.500 5775 4275 5175 6150 5700 8775
+	0 0 1.00 60.00 120.00
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 2175 8925 237 237 2175 8925 2250 9150
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 2175 300 237 237 2175 300 2250 525
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 2175 975 237 237 2175 975 2250 1200
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 2100 1950 237 237 2100 1950 2175 2175
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 2175 2700 237 237 2175 2700 2250 2925
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 2175 3450 237 237 2175 3450 2250 3675
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 2100 4200 237 237 2100 4200 2175 4425
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 2175 4950 237 237 2175 4950 2250 5175
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 2175 5700 237 237 2175 5700 2250 5925
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 2175 6450 237 237 2175 6450 2250 6675
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 2175 7125 237 237 2175 7125 2250 7350
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 4050 375 237 237 4050 375 4125 600
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 4050 1050 237 237 4050 1050 4125 1275
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 4050 1950 237 237 4050 1950 4125 2175
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 4050 2700 237 237 4050 2700 4125 2925
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 4050 3450 237 237 4050 3450 4125 3675
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 4050 4200 237 237 4050 4200 4125 4425
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 4050 4950 237 237 4050 4950 4125 5175
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 4050 5700 237 237 4050 5700 4125 5925
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 4050 6450 237 237 4050 6450 4125 6675
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 4050 7200 237 237 4050 7200 4125 7425
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 6000 1950 237 237 6000 1950 6075 2175
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 6000 2700 237 237 6000 2700 6075 2925
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 6000 4200 237 237 6000 4200 6075 4425
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 6000 4875 237 237 6000 4875 6075 5100
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 6000 5700 237 237 6000 5700 6075 5925
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 6000 6450 237 237 6000 6450 6075 6675
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 6000 7200 237 237 6000 7200 6075 7425
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 6000 3450 237 237 6000 3450 6075 3675
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 2175 8250 237 237 2175 8250 2250 8475
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 4050 8250 237 237 4050 8250 4125 8475
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 4050 8925 237 237 4050 8925 4125 9150
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 6000 8175 237 237 6000 8175 6075 8400
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 6000 8850 237 237 6000 8850 6075 9075
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 6000 375 237 237 6000 375 6075 600
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 6000 1050 237 237 6000 1050 6075 1275
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 7050 5775 5850
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 7125 5775 6525
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 7200 5775 7200
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 6525 5775 7125
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 6450 5775 6450
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 5700 5775 5700
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 5025 5775 5625
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 5625 5775 5025
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 2850 5775 6300
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4350 5775 5550
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 5550 5775 4350
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4950 5775 4950
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 3600 5775 4800
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4200 5775 4200
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4800 5775 3600
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 3525 5775 4125
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4125 5775 3525
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 3450 5775 3450
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 2775 5775 3375
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 2025 5775 3300
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 2700 5775 2700
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 1950 5775 1950
+2 1 0 2 0 0 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 6000 1725 6000 1275
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 7050 3825 5850
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 7125 3825 6525
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 7200 3825 7200
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 6525 3825 7125
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 6450 3825 6450
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 5700 3825 5700
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 5025 3825 5625
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 5625 3825 5025
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 2850 3825 6300
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4350 3825 5550
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 5550 3825 4350
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4950 3825 4950
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 3600 3825 4800
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4200 3825 4200
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4800 3825 3600
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 3525 3825 4125
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4125 3825 3525
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 3450 3825 3450
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 2775 3825 3375
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 2025 3825 3300
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 2700 3825 2700
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 1950 3825 1950
+2 1 0 2 0 0 100 0 3 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 2175 1650 2175 1200
+2 1 0 2 0 0 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 4050 1725 4050 1275
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2175 7350 2175 7950
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 4050 7425 4050 8025
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6000 7425 6000 7950
+4 0 0 100 0 2 12 0.0000 4 135 225 2025 2025 A1\001
+4 0 0 100 0 2 12 0.0000 4 135 225 3900 2025 A2\001
+4 0 0 100 0 2 12 0.0000 4 135 225 5850 2025 A3\001
+4 0 0 100 0 2 12 0.0000 4 135 225 2025 2775 B1\001
+4 0 0 100 0 2 12 0.0000 4 135 225 3900 2775 B2\001
+4 0 0 100 0 2 12 0.0000 4 135 225 5850 2775 B3\001
+4 0 0 100 0 2 12 0.0000 4 135 210 2025 3525 C1\001
+4 0 0 100 0 2 12 0.0000 4 135 210 3900 3525 C2\001
+4 0 0 100 0 2 12 0.0000 4 135 210 5850 3525 C3\001
+4 0 0 100 0 2 12 0.0000 4 135 225 2025 4275 D1\001
+4 0 0 100 0 2 12 0.0000 4 135 225 3900 4275 D2\001
+4 0 0 100 0 2 12 0.0000 4 135 225 5850 4275 D3\001
+4 0 0 100 0 2 12 0.0000 4 135 210 2025 5025 E1\001
+4 0 0 100 0 2 12 0.0000 4 135 210 3900 5025 E2\001
+4 0 0 100 0 2 12 0.0000 4 135 210 5850 5025 E3\001
+4 0 0 100 0 2 12 0.0000 4 135 210 3900 5775 F2\001
+4 0 0 100 0 2 12 0.0000 4 135 210 2025 5775 F1\001
+4 0 0 100 0 2 12 0.0000 4 135 210 5850 5775 F3\001
+4 0 0 100 0 2 12 0.0000 4 135 225 2025 6525 G1\001
+4 0 0 100 0 2 12 0.0000 4 135 225 3975 6525 G2\001
+4 0 0 100 0 2 12 0.0000 4 135 225 5850 6525 G3\001
+4 0 0 100 0 2 12 0.0000 4 135 240 3900 7275 H2\001
+4 0 0 100 0 2 12 0.0000 4 135 240 5925 7275 H3\001
+4 0 0 100 0 2 12 0.0000 4 135 240 2025 7275 H1\001
diff --git a/sourcecodes/bnt-master/docs/Figures/water3_named_nodes.fig b/sourcecodes/bnt-master/docs/Figures/water3_named_nodes.fig
new file mode 100644
index 00000000..362c4aaa
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/water3_named_nodes.fig
@@ -0,0 +1,279 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 3229.069 1880.389 1950 3450 1275 1350 1875 375
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 7232.812 1950.000 5775 3450 5175 1575 5775 450
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 5282.812 1950.000 3825 3450 3225 1575 3825 450
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 5445.833 6562.500 1950 4200 1275 7200 1950 8925
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 7595.833 6637.500 3825 4275 3150 6825 3825 9000
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 8419.351 6558.096 5700 4200 5100 7950 5775 9000
+	1 1 1.00 60.00 120.00
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 7425 2400 6975 1950 6975 1950 7425 2400 7425
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 6675 2400 6225 1950 6225 1950 6675 2400 6675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 5925 2400 5475 1950 5475 1950 5925 2400 5925
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 5175 2400 4725 1950 4725 1950 5175 2400 5175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 4425 2400 3975 1950 3975 1950 4425 2400 4425
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 3675 2400 3225 1950 3225 1950 3675 2400 3675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 2175 2400 1725 1950 1725 1950 2175 2400 2175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 2925 2400 2475 1950 2475 1950 2925 2400 2925
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 7050 5775 5850
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 7125 5775 6525
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 7200 5775 7200
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 6525 5775 7125
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 6450 5775 6450
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 5700 5775 5700
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 5025 5775 5625
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 5625 5775 5025
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 2850 5775 6300
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4350 5775 5550
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 5550 5775 4350
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4950 5775 4950
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 3600 5775 4800
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4200 5775 4200
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4800 5775 3600
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 3525 5775 4125
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4125 5775 3525
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 3450 5775 3450
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 2775 5775 3375
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 2025 5775 3300
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 2700 5775 2700
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 1950 5775 1950
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 2175 6225 1725 5775 1725 5775 2175 6225 2175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 2925 6225 2475 5775 2475 5775 2925 6225 2925
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 3675 6225 3225 5775 3225 5775 3675 6225 3675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 4425 6225 3975 5775 3975 5775 4425 6225 4425
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 5175 6225 4725 5775 4725 5775 5175 6225 5175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 5925 6225 5475 5775 5475 5775 5925 6225 5925
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 6675 6225 6225 5775 6225 5775 6675 6225 6675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 7425 6225 6975 5775 6975 5775 7425 6225 7425
+2 1 0 2 0 0 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 6000 1725 6000 1275
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 7050 3825 5850
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 7125 3825 6525
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 7200 3825 7200
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 6525 3825 7125
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 6450 3825 6450
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 5700 3825 5700
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 5025 3825 5625
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 5625 3825 5025
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 2850 3825 6300
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4350 3825 5550
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 5550 3825 4350
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4950 3825 4950
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 3600 3825 4800
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4200 3825 4200
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4800 3825 3600
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 3525 3825 4125
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4125 3825 3525
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 3450 3825 3450
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 2775 3825 3375
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 2025 3825 3300
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 2700 3825 2700
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 1950 3825 1950
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 2175 4275 1725 3825 1725 3825 2175 4275 2175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 2925 4275 2475 3825 2475 3825 2925 4275 2925
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 3675 4275 3225 3825 3225 3825 3675 4275 3675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 4425 4275 3975 3825 3975 3825 4425 4275 4425
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 5175 4275 4725 3825 4725 3825 5175 4275 5175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 5925 4275 5475 3825 5475 3825 5925 4275 5925
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 6675 4275 6225 3825 6225 3825 6675 4275 6675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 7425 4275 6975 3825 6975 3825 7425 4275 7425
+2 1 0 2 0 0 100 0 3 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 2175 1650 2175 1200
+2 1 0 2 0 0 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 4050 1725 4050 1275
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 6225 1275 6225 825 5775 825 5775 1275 6225 1275
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 6225 600 6225 150 5775 150 5775 600 6225 600
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 4275 600 4275 150 3825 150 3825 600 4275 600
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 4275 1275 4275 825 3825 825 3825 1275 4275 1275
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 2325 1200 2325 750 1875 750 1875 1200 2325 1200
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 2325 525 2325 75 1875 75 1875 525 2325 525
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 2175 7425 2175 7950
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 2400 8400 2400 7950 1950 7950 1950 8400 2400 8400
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 4275 8400 4275 7950 3825 7950 3825 8400 4275 8400
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 6225 8400 6225 7950 5775 7950 5775 8400 6225 8400
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 4050 7425 4050 7950
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 6000 7425 6000 7950
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 2400 9150 2400 8700 1950 8700 1950 9150 2400 9150
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 4275 9150 4275 8700 3825 8700 3825 9150 4275 9150
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 6225 9150 6225 8700 5775 8700 5775 9150 6225 9150
+4 0 0 100 0 2 12 0.0000 4 135 225 2025 2025 A1\001
+4 0 0 100 0 2 12 0.0000 4 135 225 3900 2025 A2\001
+4 0 0 100 0 2 12 0.0000 4 135 225 5850 2025 A3\001
+4 0 0 100 0 2 12 0.0000 4 135 225 2025 2775 B1\001
+4 0 0 100 0 2 12 0.0000 4 135 225 3900 2775 B2\001
+4 0 0 100 0 2 12 0.0000 4 135 225 5850 2775 B3\001
+4 0 0 100 0 2 12 0.0000 4 135 210 2025 3525 C1\001
+4 0 0 100 0 2 12 0.0000 4 135 210 3900 3525 C2\001
+4 0 0 100 0 2 12 0.0000 4 135 210 5850 3525 C3\001
+4 0 0 100 0 2 12 0.0000 4 135 225 2025 4275 D1\001
+4 0 0 100 0 2 12 0.0000 4 135 225 3900 4275 D2\001
+4 0 0 100 0 2 12 0.0000 4 135 225 5850 4275 D3\001
+4 0 0 100 0 2 12 0.0000 4 135 210 2025 5025 E1\001
+4 0 0 100 0 2 12 0.0000 4 135 210 3900 5025 E2\001
+4 0 0 100 0 2 12 0.0000 4 135 210 5850 5025 E3\001
+4 0 0 100 0 2 12 0.0000 4 135 210 3900 5775 F2\001
+4 0 0 100 0 2 12 0.0000 4 135 210 2025 5775 F1\001
+4 0 0 100 0 2 12 0.0000 4 135 210 5850 5775 F3\001
+4 0 0 100 0 2 12 0.0000 4 135 225 2025 6525 G1\001
+4 0 0 100 0 2 12 0.0000 4 135 225 3975 6525 G2\001
+4 0 0 100 0 2 12 0.0000 4 135 225 5850 6525 G3\001
+4 0 0 100 0 2 12 0.0000 4 135 240 3900 7275 H2\001
+4 0 0 100 0 2 12 0.0000 4 135 240 5925 7275 H3\001
+4 0 0 100 0 2 12 0.0000 4 135 240 2025 7275 H1\001
+4 0 0 100 0 2 12 0.0000 4 135 360 1950 1050 YA1\001
+4 0 0 100 0 2 12 0.0000 4 135 360 3900 1125 YA2\001
+4 0 0 100 0 2 12 0.0000 4 135 360 5850 1125 YA3\001
+4 0 0 100 0 2 12 0.0000 4 135 345 1950 375 YC1\001
+4 0 0 100 0 2 12 0.0000 4 135 345 3900 450 YC2\001
+4 0 0 100 0 2 12 0.0000 4 135 345 5850 450 YC3\001
+4 0 0 100 0 2 12 0.0000 4 135 375 2025 8250 YH1\001
+4 0 0 100 0 2 12 0.0000 4 135 375 3900 8250 YH2\001
+4 0 0 100 0 2 12 0.0000 4 135 375 5850 8250 YH3\001
+4 0 0 100 0 2 12 0.0000 4 135 360 2025 9000 YD1\001
+4 0 0 100 0 2 12 0.0000 4 135 360 3900 9000 YD2\001
+4 0 0 100 0 2 12 0.0000 4 135 360 5850 9000 YD3\001
diff --git a/sourcecodes/bnt-master/docs/Figures/water3_nolabels.fig b/sourcecodes/bnt-master/docs/Figures/water3_nolabels.fig
new file mode 100644
index 00000000..2e64a25c
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Figures/water3_nolabels.fig
@@ -0,0 +1,243 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 7232.812 1950.000 5775 3450 5175 1575 5775 450
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 5282.812 1950.000 3825 3450 3225 1575 3825 450
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 5445.833 6562.500 1950 4200 1275 7200 1950 8925
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 7595.833 6637.500 3825 4275 3150 6825 3825 9000
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 8419.351 6558.096 5700 4200 5100 7950 5775 9000
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 3332.812 2025.000 1875 3525 1275 1650 1875 525
+	1 1 1.00 60.00 120.00
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 7425 2400 6975 1950 6975 1950 7425 2400 7425
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 6675 2400 6225 1950 6225 1950 6675 2400 6675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 5925 2400 5475 1950 5475 1950 5925 2400 5925
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 5175 2400 4725 1950 4725 1950 5175 2400 5175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 4425 2400 3975 1950 3975 1950 4425 2400 4425
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 3675 2400 3225 1950 3225 1950 3675 2400 3675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 2175 2400 1725 1950 1725 1950 2175 2400 2175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 2925 2400 2475 1950 2475 1950 2925 2400 2925
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 7050 5775 5850
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 7125 5775 6525
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 7200 5775 7200
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 6525 5775 7125
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 6450 5775 6450
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 5700 5775 5700
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 5025 5775 5625
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 5625 5775 5025
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 2850 5775 6300
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4350 5775 5550
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 5550 5775 4350
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4950 5775 4950
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 3600 5775 4800
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4200 5775 4200
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4800 5775 3600
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 3525 5775 4125
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4125 5775 3525
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 3450 5775 3450
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 2775 5775 3375
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 2025 5775 3300
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 2700 5775 2700
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 1950 5775 1950
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 2175 6225 1725 5775 1725 5775 2175 6225 2175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 2925 6225 2475 5775 2475 5775 2925 6225 2925
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 3675 6225 3225 5775 3225 5775 3675 6225 3675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 4425 6225 3975 5775 3975 5775 4425 6225 4425
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 5175 6225 4725 5775 4725 5775 5175 6225 5175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 5925 6225 5475 5775 5475 5775 5925 6225 5925
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 6675 6225 6225 5775 6225 5775 6675 6225 6675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 7425 6225 6975 5775 6975 5775 7425 6225 7425
+2 1 0 2 0 0 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 6000 1725 6000 1275
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 7050 3825 5850
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 7125 3825 6525
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 7200 3825 7200
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 6525 3825 7125
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 6450 3825 6450
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 5700 3825 5700
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 5025 3825 5625
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 5625 3825 5025
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 2850 3825 6300
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4350 3825 5550
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 5550 3825 4350
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4950 3825 4950
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 3600 3825 4800
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4200 3825 4200
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4800 3825 3600
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 3525 3825 4125
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4125 3825 3525
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 3450 3825 3450
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 2775 3825 3375
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 2025 3825 3300
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 2700 3825 2700
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 1950 3825 1950
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 2175 4275 1725 3825 1725 3825 2175 4275 2175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 2925 4275 2475 3825 2475 3825 2925 4275 2925
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 3675 4275 3225 3825 3225 3825 3675 4275 3675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 4425 4275 3975 3825 3975 3825 4425 4275 4425
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 5175 4275 4725 3825 4725 3825 5175 4275 5175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 5925 4275 5475 3825 5475 3825 5925 4275 5925
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 6675 4275 6225 3825 6225 3825 6675 4275 6675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 7425 4275 6975 3825 6975 3825 7425 4275 7425
+2 1 0 2 0 0 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 4050 1725 4050 1275
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 6225 1275 6225 825 5775 825 5775 1275 6225 1275
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 6225 600 6225 150 5775 150 5775 600 6225 600
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 4275 600 4275 150 3825 150 3825 600 4275 600
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 4275 1275 4275 825 3825 825 3825 1275 4275 1275
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 2175 7425 2175 7950
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 2400 8400 2400 7950 1950 7950 1950 8400 2400 8400
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 4275 8400 4275 7950 3825 7950 3825 8400 4275 8400
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 6225 8400 6225 7950 5775 7950 5775 8400 6225 8400
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 4050 7425 4050 7950
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 6000 7425 6000 7950
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 2400 9150 2400 8700 1950 8700 1950 9150 2400 9150
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 4275 9150 4275 8700 3825 8700 3825 9150 4275 9150
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 6225 9150 6225 8700 5775 8700 5775 9150 6225 9150
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 2400 1200 2400 750 1950 750 1950 1200 2400 1200
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 2400 600 2400 150 1950 150 1950 600 2400 600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 2175 1650 2175 1200
diff --git a/sourcecodes/bnt-master/docs/GR03~1.PDF b/sourcecodes/bnt-master/docs/GR03~1.PDF
new file mode 100644
index 00000000..8ad8cf49
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/GR03~1.PDF
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Talks/BNT_mathworks.ppt b/sourcecodes/bnt-master/docs/Talks/BNT_mathworks.ppt
new file mode 100644
index 00000000..fb41110b
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Talks/BNT_mathworks.ppt
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Talks/gR03.ppt b/sourcecodes/bnt-master/docs/Talks/gR03.ppt
new file mode 100644
index 00000000..fe7b6f74
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Talks/gR03.ppt
Binary files differdiff --git a/sourcecodes/bnt-master/docs/Talks/stair_BNT_mathworks.ppt b/sourcecodes/bnt-master/docs/Talks/stair_BNT_mathworks.ppt
new file mode 100644
index 00000000..a400eba0
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/Talks/stair_BNT_mathworks.ppt
Binary files differdiff --git a/sourcecodes/bnt-master/docs/adj2pajek2.m b/sourcecodes/bnt-master/docs/adj2pajek2.m
new file mode 100644
index 00000000..5276a4e3
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/adj2pajek2.m
@@ -0,0 +1,86 @@
+% ADJ2PAJEK2 Converts an adjacency matrix representation to a Pajek .net read format
+% adj2pajek2(adj, filename-stem, 'argname1', argval1, ...)
+%
+% Set A(i,j)=-1 to get a dotted line
+%
+% Optional arguments
+%
+%  nodeNames - cell array, defaults to {'v1','v2,...}
+%  shapes - cell array, defaults to {'ellipse','ellipse',...}
+%     Choices are 'ellipse', 'box', 'diamond', 'triangle', 'cross', 'empty'
+%  partition - vector of integers, defaults to [1 1 ... 1]
+%    This will automatically color-code the vertices by their partition
+%
+% Run pajek (available from http://vlado.fmf.uni-lj.si/pub/networks/pajek/)
+% Choose File->Network->Read from the menu
+% Then press ctrl-G (Draw->Draw)
+% Optional: additionally load the partition file then press ctrl-P (Draw->partition)
+%
+% Examples
+% A=zeros(5,5);A(1,2)=-1;A(2,1)=-1;A(1,[3 4])=1;A(2,5)=1;
+% adj2pajek2(A,'foo') % makes foo.net
+%
+% adj2pajek2(A,'foo','partition',[1 1 2 2 2]) % makes foo.net and foo.clu
+% 
+% adj2pajek2(A,'foo',...
+%            'nodeNames',{'TF1','TF2','G1','G2','G3'},...
+%            'shapes',{'box','box','ellipse','ellipse','ellipse'});
+%
+%
+% The file format is documented on p68 of the pajek manual
+% and good examples are on p58, p72
+%
+% Written by Kevin Murphy, 30 May 2007
+% Based on adj2pajek by Gergana Bounova
+% http://stuff.mit.edu/people/gerganaa/www/matlab/routines.html
+% Fixes a small bug (opens files as 'wt' instead of 'w' so it works in windows)
+% Also, simplified her code and added some features.
+
+function []=adj2pajek2(adj,filename, varargin)
+
+N = length(adj);
+for i=1:N
+  nodeNames{i} = strcat('"v',num2str(i),'"');
+  shapes{i} = 'ellipse';
+end
+
+[nodeNames, shapes, partition] = process_options(varargin, ...
+    'nodeNames', nodeNames, 'shapes', shapes, 'partition', []);
+
+if ~isempty(partition)
+  fid = fopen(sprintf('%s.clu', filename),'wt','native'); 
+  fprintf(fid,'*Vertices  %6i\n',N);
+  for i=1:N
+    fprintf(fid, '%d\n', partition(i));
+  end
+  fclose(fid);
+end
+
+fid = fopen(sprintf('%s.net', filename),'wt','native'); 
+
+fprintf(fid,'*Vertices  %6i\n',N);
+for i=1:N
+  fprintf(fid,'%3i %s %s\n', i, nodeNames{i}, shapes{i});
+end
+
+%fprintf(fid,'*Edges\n');
+fprintf(fid,'*Arcs\n'); % directed
+for i=1:N
+  for j=1:N
+    if adj(i,j) ~= 0
+      fprintf(fid,' %4i   %4i   %2i\n',i,j,adj(i,j));
+    end
+  end
+end
+fclose(fid)
+
+
+if 0
+adj2pajek2(A,'foo',...
+            'nodeNames',{'TF1','TF2','G1','G2','G3'},...
+            'shapes',{'box','box','ellipse','ellipse','ellipse'});
+
+N = 100; part = ones(1,N); part(intersect(reg.tfidxTest,1:N))=2;
+G = reg.Atest(1:N, 1:N)';
+adj2pajek2(G, 'Ecoli100', 'partition', part)
+end
diff --git a/sourcecodes/bnt-master/docs/bnsoftOld.html b/sourcecodes/bnt-master/docs/bnsoftOld.html
new file mode 100644
index 00000000..9da92fa1
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/bnsoftOld.html
@@ -0,0 +1,1078 @@
+<head>
+<TITLE>Software Packages for Graphical Models / Bayesian Networks</TITLE>
+</head>
+ 
+<body>
+
+<h1>
+Software Packages for Graphical Models / Bayesian Networks
+</h1>
+<p>
+Written by Kevin Murphy.
+<br>
+Last updated 31 October  2005.
+
+<h3>Remarks</h3>
+<ul>
+
+<li>
+A much more detailed comparison of some of these software packages is
+available from Appendix B of 
+<a href="http://www.csse.monash.edu.au/bai/">Bayesian AI</a>, by 
+Ann Nicholson and Kevin Korb.
+This appendix is
+available
+<a
+href="http://www.csse.monash.edu.au/bai/book/appendix_b.pdf">here</a>,
+and is based on the online comparison below.
+
+<li>
+An online <a
+href="http://servasi.insa-rouen.fr/enseignement/siteUV/rna/BNT/software.html">French
+version</a> of this page is also available (not necessarily up-to-date).
+
+<!--
+<li>
+Matt Turk has made a
+<a href="http://ilab.cs.ucsb.edu/BayesNets/Bayesia_Software.pdf">pdf
+version of this page</a> (not necessarily up-to-date) with some extra
+comments on the packages.
+-->
+<!--
+<br>
+(He also has a
+<a href="http://ilab.cs.ucsb.edu/BayesNets">cached copy</a> of several of
+the packages listed below, which you can look at if links are down.)
+-->
+
+</ul>
+
+<h3>What do the headers in the table mean?</h3>
+
+<ul>
+<li> Src = source code included? (N=no) If so, what language?
+
+<li> API = application program interface included?
+(N means the program cannot be integrated into your code, i.e., it
+must be run as a standalone executable.)
+
+<li> Exec = Executable runs on W = Windows (95/98/NT), U = Unix, M =
+Mac, or - = any machine with a compiler.
+
+<li> Cts = are continuous (latent) nodes supported?
+G = (conditionally) Gaussians nodes supported analytically,
+Cs = continuous nodes supported by sampling,
+Cd = continuous nodes supported by discretization,
+Cx = continuous nodes supported by some unspecified method,
+D = only discrete nodes supported.
+
+
+<li> GUI = Graphical User Interface included?
+
+<li> Learns parameters?
+
+<li> Learns structure? CI = means uses conditional independency tests
+
+<!--
+<li> Sample = sampling methods (e.g., likelihood weighting, MCMC) supported?
+-->
+
+<li> Utility = utility and decision nodes (i.e., influence diagrams)
+supported?
+
+<li> Free?
+0 = free (although possibly only for academic use).
+$ = commercial software (although most have free versions
+which are restricted in
+various ways, e.g., the model size is limited, or models cannot be
+saved, or there is no API.)
+
+
+<li> Undir?
+What kind of graphs are supported?
+U = only undirected graphs,
+D = only directed graphs,
+UD = both undirected and directed,
+CG = chain graphs (mixed directed/undirected).
+
+
+<li> Inference = which inference algorithm is used?
+jtree = junction tree,
+varelim = variable (bucket) elimination,
+MH = Metropols Hastings,
+G = Gibbs sampling,
+IS = importance sampling,
+sampling = some other Monte Carlo method,
+polytree = Pearl's algorithm restricted to a graph with no cycles, 
+none = no inference supported (hence the program is only designed for
+structure learning from completely observed data) 
+
+<li> Comments.
+If in "quotes", I am quoting the authors at their request.
+
+</ul>
+
+
+
+<!--
+The following table is automatically generated as follows
+bnsoft_to_html.pl < bnsoft.txt > ! soft.html  
+Then soft.html is inserted and the last line is tidied up.
+-->
+
+<table border>
+<tr>
+<td> Name
+<td> Authors
+<td> Src
+<td> API
+<td> Exec
+<td> Cts
+<td> GUI
+<td> Params
+<td> Struct
+<td> Utility
+<td> Free
+<td> Undir
+<td> Inference
+<td> Comments
+
+
+<tr>
+<td> <!--Name--> <a href=http://www.agenarisk.com > AgenaRisk</a>
+<td> <!--Authors-->Agena
+<td> <!--Src-->N
+<td> <!--API-->Y
+<td> <!--Exec-->W,U
+<td> <!--Cts-->Cx
+<td> <!--GUI-->Y
+<td> <!--Params-->Y
+<td> <!--Struct-->N
+<td> <!--Utility-->N
+<td> <!--Free-->$
+<td> <!--Undir-->D
+<td> <!--Inference-->JTree
+<td> <!--Comments-->Simulation by Dynamic discretisation
+
+<tr>
+<td> <!--Name--> <a href=http://www.lumina.com > Analytica</a>
+<td> <!--Authors-->Lumina
+<td> <!--Src-->N
+<td> <!--API-->Y
+<td> <!--Exec-->W,M
+<td> <!--Cts-->G
+<td> <!--GUI-->Y
+<td> <!--Params-->N
+<td> <!--Struct-->N
+<td> <!--Utility-->Y
+<td> <!--Free-->$
+<td> <!--Undir-->D
+<td> <!--Inference-->sampling
+<td> <!--Comments-->spread sheet compatible
+
+<tr>
+<td> <!--Name--> <a href=http://www.cs.duke.edu/~amink/software/banjo/> Banjo</a>
+<td> <!--Authors-->Hartemink
+<td> <!--Src-->Java
+<td> <!--API-->Y
+<td> <!--Exec-->W,U,M
+<td> <!--Cts-->Cd
+<td> <!--GUI-->N
+<td> <!--Params-->N
+<td> <!--Struct-->Y
+<td> <!--Utility-->N
+<td> <!--Free-->0
+<td> <!--Undir-->D
+<td> <!--Inference-->none
+<td> <!--Comments--> structure learning of
+static or dynamic networks of discrete variables
+
+
+<tr>
+<td><a href=http://www.cs.Helsinki.FI/research/fdk/bassist/> Bassist</a>
+<td>        U. Helsinki
+<td>            C++
+<td>            Y
+<td>           U
+<td>            G
+<td>            N
+<td>     Y
+<td>     N
+<td>        N
+<td>            0
+<td>      D
+<td>      MH
+<td>       Generates C++ for MCMC.
+
+<tr>
+<td><a href=http://www.cs.Helsinki.FI/research/cosco/Projects/NONE/SW/ > Bayda</a>
+<td>        U. Helsinki
+<td>            Java
+<td>            Y
+<td>           WUM
+<td>            G
+<td>            Y
+<td>     Y
+<td>     N
+<td>        N
+<td>            0
+<td>      D
+<td>      ?
+<td>       Bayesian Naive Bayes classifier.
+
+<tr>
+<td><a href=http://www.mbfys.kun.nl/snn/Research/bayesbuilder/  >  BayesBuilder</a>
+<td>        Nijman (U. Nijmegen)
+<td>            N
+<td>            N
+<td>           W
+<td>            D
+<td>            Y
+<td>     N
+<td>     N
+<td>        N
+<td>         0
+<td>      D
+<td>      ?
+<td>       -
+
+<tr>
+<td> <!--Name--> <a
+href="http://www.bayesia.com">BayesiaLab</a>
+<td> <!--Authors-->Bayesia Ltd
+<td> <!--Src-->N
+<td> <!--API-->N
+<td> <!--Exec-->-
+<td> <!--Cts-->Cd
+<td> <!--GUI-->Y
+<td> <!--Params-->Y
+<td> <!--Struct-->Y
+<td> <!--Utility-->N
+<td> <!--Free-->$
+<td> <!--Undir-->CG
+<td> <!--Inference-->jtree,G
+<td> <!--Comments-->
+<!--
+Structural learning (association discovery,
+classification), Bayesian clustering with analysis report generation,
+missing values 
+processing, essential graphs, analysis toolbox, adaptive
+questionnaires, dynamic models
+-->
+Structural learning, adaptive
+questionnaires, dynamic models
+
+
+
+
+<tr>
+
+<td><a href=http://www.bayesware.com>Bayesware Discoverer</a>
+<td>        Bayesware
+<td>            N
+<td>            N
+<td>           WUM
+<td>            Cd
+<td>            Y
+<td>     Y
+<td>     Y
+<td>        N
+<td>            $
+<td>      D
+<td>      ?
+<td>       Uses bound and collapse for learning with missing data.
+
+<tr>
+<td><a href=http://B-Course.hiit.fi/> B-course</a>
+<td>        U.  Helsinki
+<td>            N
+<td>            N
+<td>           WUM
+<td>            Cd
+<td>            Y
+<td>     Y
+<td>     Y
+<td>        N
+<td>            0
+<td>      D
+<td>      ?
+<td>       Runs on their server: view results using a web browser.
+
+<!--
+<tr>
+<td><a href="http://www.aist.go.jp/ETL/etl/suri/motomura/BN/bn-java.html">Bayonnet</a>
+<td>        Motomura (ETL)
+<td>            Java
+<td>            Y
+<td>           WUM
+<td>            NN
+<td>            Cx
+<td>     Y
+<td>     N
+<td>        N
+<td>            0
+<td>      D
+<td>      ?
+<td>       For learning, represents BN as a neural net.
+-->
+
+<tr>
+<td><a href=http://www.cs.ualberta.ca/~jcheng/bnpc.htm  >  Belief net power constructor</a>
+<td>        Cheng (U.Alberta)
+<td>            N
+<td>            W
+<td>           W
+<td>            D
+<td>            Y
+<td>     Y
+<td>     CI
+<td>        N
+<td>            0
+<td>      D
+<td>      ?
+<td>       -
+
+<tr>
+<td><a href=http://www.cs.berkeley.edu/~murphyk/Bayes/bnt.html  >  BNT</a>
+<td>        Murphy (U.C.Berkeley)
+<td>            Matlab/C
+<td>            Y
+<td>           WUM
+<td>            G
+<td>            N
+<td>     Y
+<td>     Y
+<td>        Y
+<td>            0
+<td>      D,U
+<td>      Many
+<td>       Also handles dynamic models, like HMMs and Kalman filters.
+
+
+<tr>
+<td> <!--Name--> <a href="http://bndev.sourceforge.net/">BNJ</a>
+<td> <!--Authors-->Hsu (Kansas)
+<td> <!--Src-->Java
+<td> <!--API-->-
+<td> <!--Exec-->-
+<td> <!--Cts-->D
+<td> <!--GUI-->Y
+<td> <!--Params-->N
+<td> <!--Struct-->Y
+<td> <!--Utility-->N
+<td> <!--Free-->0
+<td> <!--Undir-->D
+<td> <!--Inference-->jtree, IS
+<td> <!--Comments-->-
+
+<!--
+<tr>
+<td><a href=http://94.parkview-court.net/project/  >  BN Toolkit</a>
+<td>        Gowans (Imperial)
+<td>            Visual Basic
+<td>            Y
+<td>           W
+<td>            D
+<td>            Y
+<td>     N
+<td>     Y
+<td>        N
+<td>            0
+<td>      D
+<td>      Polytree
+<td>       Parser and GUI for the XML-BIF format.
+-->
+
+<tr>
+<td><a href=http://www.ics.uci.edu/~irinar  >  BucketElim</a>
+<td>        Rish (U.C.Irvine)
+<td>            C++
+<td>            Y
+<td>           WU
+<td>            D
+<td>            N
+<td>     N
+<td>     N
+<td>        N
+<td>            0
+<td>      D
+<td>      Varelim
+<td>       -
+
+<tr>
+<td><a href=http://www.mrc-bsu.cam.ac.uk/bugs  >  BUGS</a>
+<td>        MRC/Imperial College
+<td>            N
+<td>            N
+<td>           WU
+<td>            Cs
+<td>            W
+<td>     Y
+<td>     N
+<td>        N
+<td>            0
+<td>      D
+<td>      Gibbs
+<td>       -
+
+<tr>
+<td><a href=http://www.data-digest.com  >  Business Navigator 5</a>
+<td>        Data Digest Corp
+<td>            N
+<td>            N
+<td>           W
+<td>            Cd
+<td>            Y
+<td>     Y
+<td>     Y
+<td>        N
+<td>            $
+<td>      D
+<td>      Jtree
+<td>       -
+
+<tr>
+<td><a href=http://www-pcd.stanford.edu/cousins/caben-1.1.tar.gz  >  CABeN</a>
+<td>        Cousins et al. (Wash. U.)
+<td>            C
+<td>            Y
+<td>           WU
+<td>            D
+<td>            N
+<td>     N
+<td>     N
+<td>        N
+<td>            0
+<td>      D
+<td>      5 Sampling methods
+<td>       -
+
+<tr>
+<td> <!--Name--> <a href=
+http://discover1.mc.vanderbilt.edu/discover/public/>Causal discoverer</a>
+<td> <!--Authors-->Vanderbilt
+<td> <!--Src-->N
+<td> <!--API-->N
+<td> <!--Exec-->W
+<td> <!--Cts-->-
+<td> <!--GUI-->-
+<td> <!--Params-->N
+<td> <!--Struct-->Y
+<td> <!--Utility-->N
+<td> <!--Free-->0
+<td> <!--Undir-->D
+<td> <!--Inference-->-
+<td> <!--Comments-->structure learning only
+
+
+<tr>
+<td><a href=http://www.math.auc.dk/~jhb/CoCo/information.html  >  CoCo+Xlisp</a>
+<td>        Badsberg (U. Aalborg)
+<td>            C/lisp
+<td>            Y
+<td>           U
+<td>            D
+<td>            Y
+<td>     Y
+<td>     CI
+<td>        N
+<td>            0
+<td>      U
+<td>      Jtree
+<td>       Designed for contingency tables.
+
+<tr>
+<td><a href=http://www.cs.ubc.ca/labs/lci/CIspace/  >  CIspace</a>
+<td>        Poole et al. (UBC)
+<td>            Java
+<td>            N
+<td>           WU
+<td>            D
+<td>            Y
+<td>     N
+<td>     N
+<td>        N
+<td>            0
+<td>      D
+<td>      Varelim
+<td>       -
+
+<tr>
+<td> <!--Name--> <a href="http://www.robots.ox.ac.uk/~parg/software.html">DBNbox</a>
+<td> <!--Authors-->Roberts et al
+<td> <!--Src-->Matlab
+<td> <!--API-->-
+<td> <!--Exec-->-
+<td> <!--Cts-->Y
+<td> <!--GUI-->N
+<td> <!--Params-->Y
+<td> <!--Struct-->N
+<td> <!--Utility-->N
+
+<td> <!--Free-->Y
+<td> <!--Undir-->D
+<td> <!--Inference-->Various
+<td> <!--Comments-->DBNs
+
+<tr>
+<td> <!--Name--><a href=http://www.math.auc.dk/novo/deal>Deal</a>
+<td> <!--Authors-->Bottcher et al
+<td> <!--Src-->R
+<td> <!--API-->-
+<td> <!--Exec-->-
+<td> <!--Cts-->G
+<td> <!--GUI-->Y
+<td> <!--Params-->Y
+<td> <!--Struct-->Y
+<td> <!--Utility-->N
+<td> <!--Free-->0
+<td> <!--Undir-->D
+<td> <!--Inference-->None
+<td> <!--Comments-->
+Structure learning.
+
+<tr>
+<td><a href=http://www.deriveit.com >DeriveIt</a>
+<td> <!--Authors-->DeriveIt LLC
+<td> <!--Src-->N
+<td> <!--API-->-
+<td> <!--Exec-->-
+<td> <!--Cts-->?
+<td> <!--GUI-->?
+<td> <!--Params-->Y
+<td> <!--Struct-->Y
+<td> <!--Utility-->?
+<td> <!--Free-->$
+<td> <!--Undir-->D
+<td> <!--Inference-->Jtree
+<td> <!--Comments-->
+Exploits local structure in CPDs.
+
+
+<tr>
+<td><a href=http://www.noeticsystems.com>Ergo</>
+<td> <!--Authors-->Noetic systems
+<td> <!--Src-->N
+<td> <!--API-->Y
+<td> <!--Exec-->W,M
+<td> <!--Cts-->D
+<td> <!--GUI-->Y
+<td> <!--Params-->N
+<td> <!--Struct-->N
+<td> <!--Utility-->N
+<td> <!--Free-->$
+<td> <!--Undir-->D
+<td> <!--Inference-->jtree
+<td> <!--Comments-->-
+
+<!--
+<tr>
+<td><a href=http://www.ens-lyon.fr/~jnarboux/Floue/index.html>FLoUE/BIFtoN</a>
+<td>        ENS Lyon
+<td>            Java
+<td>            Y
+<td>           WUM
+<td>           D
+<td>            N
+<td>     N
+<td>     N
+<td>        N
+<td>            0
+<td>      D
+<td>      Jtree
+<td>       -
+-->
+
+<tr>
+<td><a href=http://www.staff.ncl.ac.uk/d.j.wilkinson/software/gdagsim/  >  GDAGsim</a>
+<td>        Wilkinson (U. Newcastle)
+<td>            C
+<td>            Y
+<td>           WUM
+<td>            G
+<td>            N
+<td>     N
+<td>     N
+<td>        N
+<td>            0
+<td>      D
+<td>      Exact
+<td>    Bayesian analysis of large linear Gaussian directed models.
+
+
+<tr>
+<td><a href=http://www2.sis.pitt.edu/~genie  >  Genie</a>
+<td>        U. Pittsburgh
+<td>            N
+<td>            WU
+<td>           WU
+<td>            D
+<td>            W
+<td>     N
+<td>     N
+<td>        Y
+<td>            0
+<td>      D
+<td>      Jtree
+<td>       -
+
+<tr>
+<td><a href=http://www.math.ntnu.no/~hrue/GMRFsim/  >  GMRFsim</a>
+<td>        Rue (U. Trondheim)
+<td>            C
+<td>            Y
+<td>           WUM
+<td>            G
+<td>            N
+<td>     N
+<td>     N
+<td>        N
+<td>            0
+<td>      U
+<td>      MCMC
+<td>       Bayesian analysis of large linear Gaussian undirected models.
+
+
+<tr>
+<td> <!--Name--> <a href=http://ssli.ee.washington.edu/~bilmes/gmtk/>GMTk</a>
+<td> <!--Authors-->Bilmes (UW), Zweig (IBM)
+<td> <!--Src-->N
+<td> <!--API-->Y
+<td> <!--Exec-->U
+<td> <!--Cts-->D
+<td> <!--GUI-->N
+<td> <!--Params-->Y
+<td> <!--Struct-->Y
+<td> <!--Utility-->N
+<td> <!--Free-->0
+<td> <!--Undir-->D
+<td> <!--Inference-->Jtree
+<td> <!--Comments-->
+Designed for speech recognition.
+
+<tr>
+<td> <!--Name--> <a href=http://www.r-project.org/gR>gR</a>
+<td> <!--Authors-->Lauritzen et al.
+<td> <!--Src-->R
+<td> <!--API-->-
+<td> <!--Exec-->-
+<td> <!--Cts-->-
+<td> <!--GUI-->-
+<td> <!--Params-->-
+<td> <!--Struct-->-
+<td> <!--Utility-->-
+<td> <!--Free-->0
+<td> <!--Undir-->-
+<td> <!--Inference-->-
+<td> <!--Comments-->Currently vaporware
+
+
+<tr>
+<td> <!--Name--> <a href=http://www.stats.bris.ac.uk/~peter/Grappa/>Grappa</a>
+<td> <!--Authors-->Green (Bristol)
+<td> <!--Src-->R
+<td> <!--API-->-
+<td> <!--Exec-->-
+<td> <!--Cts-->D
+<td> <!--GUI-->N
+<td> <!--Params-->N)
+<td> <!--Struct-->N
+<td> <!--Utility-->N
+<td> <!--Free-->0
+<td> <!--Undir-->D
+<td> <!--Inference-->Jtree
+<td> <!--Comments-->-
+
+
+<tr>
+<td><a href=http://www.hugin.com  >  Hugin Expert</a>
+<td>        Hugin
+<td>            N
+<td>            Y
+<td>           W
+<td>            G
+<td>            W
+<td>     Y
+<td>     CI
+<td>        Y
+<td>            $
+<td>      CG
+<td>      Jtree
+<td>       -
+
+
+<tr>
+<td> <!--Name--> <a href=http://www.warnes.net/GregsSoftwareLinks/index_html?Tab=MCMC>Hydra</a>
+<td> <!--Authors-->Warnes (U.Wash.)
+<td> <!--Src-->Java
+<td> <!--API-->-
+<td> <!--Exec-->-
+<td> <!--Cts-->Cs
+<td> <!--GUI-->Y
+<td> <!--Params-->Y
+<td> <!--Struct-->N
+<td> <!--Utility-->N
+<td> <!--Free-->0
+<td> <!--Undir-->U,D
+<td> <!--Inference-->MCMC
+<td> <!--Comments-->-
+
+
+<tr>
+<!-- http://www.rpal.rockwell.com/ideal.html  -->
+<td><a href=http://yoda.cis.temple.edu:8080/ideal>Ideal</a>
+<td>        Rockwell
+<td>            Lisp
+<td>            Y
+<td>           WUM
+<td>            D
+<td>            Y
+<td>     N
+<td>     N
+<td>        Y
+<td>            0
+<td>      D
+<td>      Jtree
+<td>       GUI requires Allegro Lisp.
+
+<tr>
+<td><a href=http://www.cs.cmu.edu/~javabayes/Home/  >  Java Bayes</a>
+<td>        Cozman (CMU)
+<td>            Java
+<td>            Y
+<td>           WUM
+<td>            D
+<td>            Y
+<td>     N
+<td>     N
+<td>        Y
+<td>            0
+<td>      D
+<td>      Varelim, jtree
+<td>       -
+
+
+<tr>
+<td> <!--Name--><a href="http://www.codeas.com/kbaseai.php" >KBaseAI</a>
+<td> <!--Authors-->Codeas
+<td> <!--Src-->N
+<td> <!--API-->Y
+<td> <!--Exec-->W,U
+<td> <!--Cts-->D
+<td> <!--GUI-->N
+<td> <!--Params-->N
+<td> <!--Struct-->N
+<td> <!--Utility-->N
+<td> <!--Free-->$
+<td> <!--Undir-->D
+<td> <!--Inference-->varelim
+<td> <!--Comments-->client/server architecture, multiple users, access
+control, query language
+
+
+<tr>
+<td> <!--Name--> <a href=http://www.cs.huji.ac.il/labs/compbio/LibB>LibB</a>
+<td> <!--Authors-->Friedman (Hebrew U)
+<td> <!--Src-->N
+<td> <!--API-->Y
+<td> <!--Exec-->W
+<td> <!--Cts-->D
+<td> <!--GUI-->N
+<td> <!--Params-->Y
+<td> <!--Struct-->Y
+<td> <!--Utility-->N
+<td> <!--Free-->0
+<td> <!--Undir-->D
+<td> <!--Inference-->none
+<td> <!--Comments-->
+Structure learning
+
+<tr>
+<td><a href=http://www.hypergraph.dk/  >  MIM</a>
+<td>        HyperGraph Software
+<td>            N
+<td>            N
+<td>           W
+<td>            G
+<td>            Y
+<td>     Y
+<td>     Y
+<td>        N
+<td>            $
+<td>      CG
+<td>      Jtree
+<td>       Up to 52 variables.
+
+<tr>
+<td><a href=http://research.microsoft.com/adapt/MSBNx/  >  MSBNx</a>
+<td>        Microsoft
+<td>            N
+<td>            Y
+<td>           W
+<td>            D
+<td>            W
+<td>     N
+<td>     N
+<td>        Y
+<td>            0
+<td>      D
+<td>      Jtree
+<td>       -
+
+<tr>
+<td><a href=http://www.norsys.com  >  Netica</a>
+<td>        Norsys
+<td>            N
+<td>            WUM
+<td>           W
+<td>            G
+<td>            W
+<td>     Y
+<td>     N
+<td>        Y
+<td>            $
+<td>      D
+<td>      jtree
+<td>       -
+
+<tr>
+<td> <!--Name--> <a href="http://www.autonlab.org/autonweb/showSoftware/149/">Optimal
+Reinsertion</a>
+<td> <!--Authors-->Moore, Wong (CMU)
+<td> <!--Src-->N
+<td> <!--API-->N
+<td> <!--Exec-->W,U
+<td> <!--Cts-->D
+<td> <!--GUI-->N
+<td> <!--Params-->Y
+<td> <!--Struct-->Y
+<td> <!--Utility-->N
+<td> <!--Free-->0
+<td> <!--Undir-->D
+<td> <!--Inference-->none
+<td> <!--Comments-->structure learning
+
+
+<tr>
+<td> <!--Name--> <a href="http://people.bu.edu/vladimir/pmt/index.html">PMT</a>
+<td> <!--Authors-->Pavlovic (BU)
+<td> <!--Src-->Matlab/C
+<td> <!--API-->-
+<td> <!--Exec-->-
+<td> <!--Cts-->D
+<td> <!--GUI-->N
+<td> <!--Params-->Y
+<td> <!--Struct-->N
+<td> <!--Utility-->N
+<td> <!--Free-->0
+<td> <!--Undir-->D
+<td> <!--Inference-->special purpose
+<td> <!--Comments-->-
+
+
+
+<tr>
+<td> <!--Name--> <a href=http://www.intel.com/research/mrl/pnl/>PNL</a>
+<td> <!--Authors-->Eruhimov (Intel)
+<td> <!--Src-->C++
+<td> <!--API-->-
+<td> <!--Exec-->-
+<td> <!--Cts-->D
+<td> <!--GUI-->N
+<td> <!--Params-->Y
+<td> <!--Struct-->Y
+<td> <!--Utility-->N
+<td> <!--Free-->0
+<td> <!--Undir-->U,D
+<td> <!--Inference-->Jtree
+<td> <!--Comments-->
+A C++ version of BNT; will be released 12/03.
+
+
+<tr>
+<td><a href=http://iridia.ulb.ac.be/pulcinella/Welcome.html  >  Pulcinella</a>
+<td>        IRIDIA
+<td>            Lisp
+<td>            Y
+<td>           WUM
+<td>            D
+<td>            Y
+<td>     N
+<td>     N
+<td>        N
+<td>            0
+<td>      D
+<td>      ?
+<td>       Uses valuation systems for non-probabilistic calculi.
+
+<tr>
+<!-- http://civil.colorado.edu/~dodier/sonero-mirror/index.html  -->
+<td><a href=http://sourceforge.net/projects/riso>RISO</a>
+<td>        Dodier (U.Colorado)
+<td>            Java
+<td>            Y
+<td>           WUM
+<td>            G
+<td>            Y
+<td>     N
+<td>     N
+<td>        N
+<td>            0
+<td>      D
+<td>      Polytree
+<td>       Distributed implementation.
+
+
+
+<tr>
+<td> <!--Name--> <a href=http://reasoning.cs.ucla.edu/samiam/> Sam Iam</a>
+<td> <!--Authors-->Darwiche (UCLA)
+<td> <!--Src-->N
+<td> <!--API-->N ?
+<td> <!--Exec-->WU ? (Java executable)
+<td> <!--Cts-->G ?
+<td> <!--GUI-->Y
+<td> <!--Params-->Y
+<td> <!--Struct-->N ?
+<td> <!--Utility-->Y
+<td> <!--Free-->0
+<td> <!--Undir-->D
+<td> <!--Inference-->Recursive conditioning
+<td> <!--Comments-->Also does sensitivity Analysis
+
+
+<tr>
+<td><a href=http://www.phil.cmu.edu/tetrad/>Tetrad</a>
+<td>        CMU
+<td>            N
+<td>            N
+<td>           WU
+<td>            G
+<td>            N
+<td>     Y
+<td>     CI
+<td>        N
+<td>            0
+<td>      U,D
+<td>      None
+<td>       -
+
+
+<tr>
+<td> <!--Name--> <a href="https://sourceforge.net/projects/unbbayes/">UnBBayes</a>
+<td> <!--Authors-->?
+<td> <!--Src-->Java
+<td> <!--API-->-
+<td> <!--Exec-->-
+<td> <!--Cts-->D
+<td> <!--GUI-->Y
+<td> <!--Params-->N
+<td> <!--Struct-->Y
+<td> <!--Utility-->N
+<td> <!--Free-->0
+<td> <!--Undir-->D
+<td> <!--Inference-->jtree
+<td> <!--Comments-->K2 for struct learning
+
+
+<tr>
+<td><a href=http://www.inference.phy.cam.ac.uk/jmw39/>Vibes</a>
+<td>        Winn & Bishop (U. Cambridge)
+<td>            Java
+<td>            Y
+<td>           WU
+<td>            Cx
+<td>            Y
+<td>     Y
+<td>     N
+<td>        N
+<td>            0
+<td>      D
+<td>      Variational
+<td>    
+Not yet available.
+
+
+<tr>
+<td><a href=http://snowhite.cis.uoguelph.ca/faculty_info/yxiang/ww3/>  Web Weaver</a>
+<td>        Xiang (U.Regina)
+<td>            Java
+<td>            Y
+<td>           WUM
+<td>            D
+<td>            Y
+<td>     N
+<td>     N
+<td>        Y
+<td>            0
+<td>      D
+<td>      ?
+<td>       -
+
+<tr>
+<td><a href=http://research.microsoft.com/~dmax/WinMine/tooldoc.htm  >  WinMine</a>
+<td>        Microsoft
+<td>            N
+<td>            N
+<td>           W
+<td>            Cx
+<td>            Y
+<td>     Y
+<td>     Y
+<td>        N
+<td>            0
+<td>      U,D
+<td>      None
+<td>       Learns BN or dependency net structure.
+
+<tr>
+<td><a href=http://www.staff.city.ac.uk/~rgc/webpages/xbpage.html >  XBAIES 2.0</a>
+<td>        Cowell (City U.)
+<td>            N
+<td>            N
+<td>           W
+<td>            G
+<td>            Y
+<td>     Y
+<td>     N
+<td>        Y
+<td>            0
+<td>      CG
+<td>      Jtree
+<td>       -
+
+<tr>
+
+</table>
+
+
+<p>
+<h2>Other sites related to (software for) graphical models</h2>
+<ul>
+
+
+<li>
+<a
+href="http://directory.google.com/Top/Computers/Artificial_Intelligence/Belief_Networks/Software/">
+Google's list</a> of Bayes net software.
+
+<!--
+<li> <a href="http://www.sis.pitt.edu/~dsl/da-software.html">
+Decision analysis programs</a>, list maintained by 
+Marek Druzdzel.
+-->
+
+<li> <a href="http://www.cs.cmu.edu/~lorens/papers/mscthesis.html">
+Comparison of decision analysis software packages</a> by
+Håkan L. Younes. The emphasis is on real-time decision making.
+
+<li> <a href="http://bayes.stat.washington.edu/almond/belief.html">
+Older belief net programs</a> (c 1996), a list created (but no longer maintained)
+by Russ Almond. 
+
+<li>
+<a
+href="http://www.cs.huji.ac.il/labs/compbio/Repository">
+Repository of Bayes nets</a>.
+
+</document>
diff --git a/sourcecodes/bnt-master/docs/bnt.html b/sourcecodes/bnt-master/docs/bnt.html
new file mode 100644
index 00000000..d43e9fda
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/bnt.html
@@ -0,0 +1,359 @@
+<html> <head>
+<title>Bayes Net Toolbox for Matlab</title>
+</head>
+
+<body>
+<!--<body  bgcolor="#FFFFFF"> -->
+
+<h1>Bayes Net Toolbox for Matlab</h1>
+Written by Kevin Murphy, 1997--2002.
+Last updated: 19 October 2007.
+
+<P><P>
+<table>
+<tr>
+<td>
+<img align=left src="Figures/mathbymatlab.gif" alt="Matlab logo">
+<!-- <img align=left src="toolbox.gif" alt="Toolbox logo">-->
+<td>
+<!--<center>-->
+<a href="http://groups.yahoo.com/group/BayesNetToolbox/join">
+<img src="http://groups.yahoo.com/img/ui/join.gif" border=0><br>
+Click to subscribe to the BNT email list</a>
+<br>
+(<a href="http://groups.yahoo.com/group/BayesNetToolbox">
+http://groups.yahoo.com/group/BayesNetToolbox</a>)
+<!--</center>-->
+</table>
+
+
+<p>
+<ul>
+<li> <a href="changelog.html">Changelog</a>
+
+<li> <a
+href="http://www.cs.ubc.ca/~murphyk/Software/BNT/FullBNT-1.0.4.zip">Download
+zip file</a>.
+
+<li> <a href="install.html">Installation</a>
+
+<li> <a href="license.gpl">Terms and conditions of use (GNU Library GPL)</a>
+
+
+<li> <a href="usage.html">How to use the toolbox</a>
+
+<li> <a href="whyNotSourceforge.html">Why I closed the sourceforge
+site</a>.
+
+<!--
+<li> <a href="Talks/BNT_mathworks.ppt">Powerpoint slides on graphical models
+and BNT</a>, presented to the Mathworks, June 2003
+
+
+<li> <a href="Talks/gR03.ppt">Powerpoint slides on BNT and object
+recognition</a>, presented at the <a
+href="http://www.math.auc.dk/gr/gr2003.html">gR</a> workshop,
+September 2003. 
+-->
+
+<!--
+<li> <a href="gR03.pdf">Proposed design for gR, a graphical models
+toolkit in R</a>, September 2003.
+(For more information on the gR project,
+click <a href="http://www.r-project.org/gR/">here</a>.)
+-->
+
+<li>
+<!--
+<img src = "../new.gif" alt="new">
+-->
+
+<a href="../../Papers/bnt.pdf">Invited paper on BNT</a>,
+published in
+Computing Science and Statistics, 2001.
+
+<li> <a href="../bnsoft.html">Other Bayes net software</a>
+
+<!--<li> <a href="software.html">Other Matlab software</a>-->
+
+<li> <a href="../../Bayes/bnintro.html">A brief introduction to
+Bayesian Networks</a>
+
+
+<li> <a href="#features">Major features</a>
+<li> <a href="#models">Supported models</a>
+<!--<li> <a href="#future">Future work</a>-->
+<li> <a href="#give_away">Why do I give the code away?</a>
+<li> <a href="#why_matlab">Why Matlab?</a>
+<li> <a href="#ack">Acknowledgments</a>
+</ul>
+<p>
+
+
+
+<h2><a name="features">Major features</h2>
+<ul>
+
+<li> BNT supports many types of
+<b>conditional probability distributions</b> (nodes),
+and it is easy to add more.
+<ul>
+<li>Tabular (multinomial)
+<li>Gaussian
+<li>Softmax (logistic/ sigmoid)
+<li>Multi-layer perceptron (neural network)
+<li>Noisy-or
+<li>Deterministic
+</ul>
+<p>
+
+<li> BNT supports <b>decision and utility nodes</b>, as well as chance
+nodes,
+i.e., influence diagrams as well as Bayes nets.
+<p>
+
+<li> BNT supports static and dynamic BNs (useful for modelling dynamical systems
+and sequence data).
+<p>
+
+<li> BNT supports many different <b>inference algorithms</b>,
+and it is easy to add more.
+
+<ul>
+<li> Exact inference for static BNs:
+<ul>
+<li>junction tree
+<li>variable elimination
+<li>brute force enumeration (for discrete nets)
+<li>linear algebra (for Gaussian nets)
+<li>Pearl's algorithm (for polytrees)
+<li>quickscore (for QMR)
+</ul>
+
+<p>
+<li> Approximate inference for static BNs:
+<ul>
+<li>likelihood weighting
+<li> Gibbs sampling
+<li>loopy belief propagation
+</ul>
+
+<p>
+<li> Exact inference for DBNs:
+<ul>
+<li>junction tree
+<li>frontier algorithm
+<li>forwards-backwards (for HMMs)
+<li>Kalman-RTS (for LDSs)
+</ul>
+
+<p>
+<li> Approximate inference for DBNs:
+<ul>
+<li>Boyen-Koller
+<li>factored-frontier/loopy belief propagation
+</ul>
+
+</ul>
+<p>
+
+<li>
+BNT supports several methods for <b>parameter learning</b>,
+and it is easy to add more.
+<ul>
+
+<li> Batch MLE/MAP parameter learning using EM.
+(Each node type has its own M method, e.g. softmax nodes use IRLS,<br>
+and each inference engine has its own E method, so the code is fully modular.)
+
+<li> Sequential/batch Bayesian parameter learning (for fully observed tabular nodes only).
+</ul>
+
+
+<p>
+<li>
+BNT supports several methods for <b>regularization</b>,
+and it is easy to add more.
+<ul>
+<li> Any node can have its parameters clamped (made non-adjustable).
+<li> Any set of compatible nodes can have their parameters tied (c.f.,
+weight sharing in a neural net).
+<li> Some node types (e.g., tabular) supports priors for MAP estimation.
+<li> Gaussian covariance matrices can be declared full or diagonal, and can
+be tied across states of their discrete parents (if any).
+</ul>
+
+<p>
+<li>
+BNT supports several methods for <b>structure learning</b>,
+and it is easy to add more.
+<ul>
+
+<li> Bayesian structure learning,
+using MCMC or local search (for fully observed tabular nodes only).
+
+<li> Constraint-based structure learning (IC/PC and IC*/FCI).
+</ul>
+
+
+<p>
+<li> The source code is extensively documented, object-oriented, and free, making it
+an excellent tool for teaching, research and rapid prototyping.
+
+</ul>
+
+
+
+<h2><a name="models">Supported probabilistic models</h2>
+<p>
+It is trivial to implement all of
+the following probabilistic models using the toolbox.
+<ul>
+<li>Static
+<ul>
+<li> Linear regression, logistic regression, hierarchical mixtures of experts
+
+<li> Naive Bayes classifiers, mixtures of Gaussians,
+sigmoid belief nets
+
+<li> Factor analysis, probabilistic
+PCA, probabilistic ICA, mixtures of these models
+
+</ul>
+
+<li>Dynamic
+<ul>
+
+<li> HMMs, Factorial HMMs, coupled HMMs, input-output HMMs, DBNs
+
+<li> Kalman filters, ARMAX models, switching Kalman filters,
+tree-structured Kalman filters, multiscale AR models
+
+</ul>
+
+<li> Many other combinations, for which there are (as yet) no names!
+
+</ul>
+
+
+<!--
+<h2><a name="future">Future work</h2>
+
+I have a long <a href="wish.txt">wish list</a>
+of features I would like to add to BNT
+at some point in the future.
+Please email me (<a
+href="mailto:murphyk@cs.berkeley.edu">murphyk@cs.berkeley.edu</a>)
+if you are interested in contributing!
+-->
+
+
+
+<h2><a name="give_away">Why do I give the code away?</h2>
+
+<ul>
+
+<li>
+I was hoping for a Linux-style effect, whereby people would contribute
+their own Matlab code so that the package would grow. With a few
+exceptions, this has not happened, 
+although several people have provided bug-fixes (see the <a
+href="#ack">acknowledgements</a>). 
+Perhaps the <a
+href="http://www.cs.berkeley.edu/~murphyk/OpenBayes/index.html">Open
+Bayes Project</a> will be more 
+succesful in this regard, although the evidence to date is not promising.
+
+<p>
+<li>
+Knowing that someone else might read your code forces one to
+document it properly, a good practice in any case, as anyone knows who
+has revisited old code.
+In addition, by having many "eye balls", it is easier to spot bugs.
+
+
+<p>
+<li>
+I believe in the concept of
+<a href="http://www-stat.stanford.edu/~donoho/Reports/1995/wavelab.pdf">
+reproducible research</a>.
+Good science requires that other people be able 
+to replicate your experiments.
+Often a paper does not give enough details about how exactly an
+algorithm was implemented (e.g., how were the parameters chosen? what
+initial conditions were used?), and these can make a big difference in
+practice.
+Hence one should release the code that
+was actually used to generate the results in one's paper.
+This also prevents re-inventing the wheel.
+
+<p>
+<li>
+I was fed up with reading papers where all people do is figure out how 
+to do exact inference and/or learning
+in a model which is just a trivial special case of a general Bayes net, e.g.,
+input-output HMMs, coupled-HMMs, auto-regressive HMMs.
+My hope is that, by releasing general purpose software, the field can
+move on to more interesting questions.
+As Alfred North Whitehead said in 1911,
+"Civilization advances by extending the number of important operations
+that we can do without thinking about them."
+
+</ul>
+
+
+
+
+
+<h2><a name="why_matlab">Why Matlab?</h2>
+
+Matlab is an interactive, matrix-oriented programming language that
+enables one to express one's (mathematical) ideas very concisely and directly,
+without having to worry about annoying details like memory allocation
+or type checking. This considerably reduces development time and
+keeps code short, readable and fully portable.
+Matlab has excellent built-in support for many data analysis and
+visualization routines. In addition, there are many useful toolboxes, e.g., for
+neural networks, signal and image processing.
+The main disadvantages of Matlab are that it can be slow (which is why
+we are currently rewriting parts of BNT in C), and that the commercial
+license is expensive (although the student version is only $100 in the US).
+<p>
+Many people ask me why I did not use
+<a href="http://www.octave.org/">Octave</a>,
+an open-source Matlab clone.
+The reason is that
+Octave does not support multi-dimensional arrays,
+cell arrays, objects, etc.
+<p>
+Click <a href="../which_language.html">here</a> for a more detailed
+comparison of matlab and other languages.
+
+
+
+<h2><a name="ack">Acknowledgments</h2>
+
+I would like to thank numerous people for bug fixes, including:
+Rainer Deventer, Michael Robert James, Philippe Leray, Pedrito Maynard-Reid II, Andrew Ng,
+Ron Parr, Ilya Shpitser, Xuejing Sun, Ursula Sondhauss.
+<p>
+I would like to thank the following people for contributing code:
+Pierpaolo Brutti, Ali Taylan Cemgil, Tamar Kushnir, 
+Tom Murray,
+Nicholas Saunier,
+Ken Shan,
+Yair Weiss,
+Bob Welch,
+Ron Zohar.
+<p>
+The following Intel employees have also contributed code:
+Qian Diao, Shan Huang, Yimin Zhang and especially Wei Hu.
+
+<p>
+I would like to thank Stuart Russell for funding me over the years as
+I developed BNT, and Gary Bradksi for hiring me as an intern at Intel,
+which has supported much of the recent developments of BNT.
+
+       
+</body>
+
diff --git a/sourcecodes/bnt-master/docs/bnt_download.html b/sourcecodes/bnt-master/docs/bnt_download.html
new file mode 100644
index 00000000..83d32bf4
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/bnt_download.html
@@ -0,0 +1,16 @@
+<title>Download BNT</title>
+
+Download BNT from <a href="http://bnt.sourceforge.net/">BNT sourceforge site</a>
+
+<!--
+Number of hits since 13 November 2002:
+<!-- Begin of WebCounter.com code. Do not modify -->
+<applet codebase="http://vc.webcounter.com/" code="vc5.class" width=88 height=31>
+<param name=a value=37322><a href="http://www.webcounter.com/">
+<img src="http://vc.webcounter.com/0/t?a=37322&s=&g=" width=88 height=31></a></applet>
+<!-- End of WebCounter.com code. Do not modify -->
+
+<p>
+<a href="../FullBNT.zip">Download BNT</a>
+<p>
+-->
diff --git a/sourcecodes/bnt-master/docs/bnt_pre_sf.html b/sourcecodes/bnt-master/docs/bnt_pre_sf.html
new file mode 100644
index 00000000..9b1fe2cb
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/bnt_pre_sf.html
@@ -0,0 +1,350 @@
+<html> <head>
+<title>Bayes Net Toolbox for Matlab</title>
+</head>
+
+<body>
+<!--<body  bgcolor="#FFFFFF"> -->
+
+<h1>Bayes Net Toolbox for Matlab</h1>
+Written by Kevin Murphy.
+<br>
+<b>BNT is now  available from <a href="http://bnt.sourceforge.net/">sourceforge</a>!</b>
+<!--
+Last updated on 9 June 2004 (<a href="changelog.html">Detailed
+changelog</a>)
+-->
+<p>
+
+<P><P>
+<table>
+<tr>
+<td>
+<img align=left src="Figures/mathbymatlab.gif" alt="Matlab logo">
+<!-- <img align=left src="toolbox.gif" alt="Toolbox logo">-->
+<td>
+<!--<center>-->
+<a href="http://groups.yahoo.com/group/BayesNetToolbox/join">
+<img src="http://groups.yahoo.com/img/ui/join.gif" border=0><br>
+Click to subscribe to the BNT email list</a>
+<br>
+(<a href="http://groups.yahoo.com/group/BayesNetToolbox">
+http://groups.yahoo.com/group/BayesNetToolbox</a>)
+<!--</center>-->
+</table>
+
+
+<p>
+<ul>
+<!--<li> <a href="bnt_download.html">Download toolbox</a>-->
+<li> Download BNT from <a href="http://bnt.sourceforge.net/">BNT sourceforge site</a>
+
+<li> <a href="license.gpl">Terms and conditions of use (GNU Library GPL)</a>
+
+<li> <a href="usage.html">How to use the toolbox</a>
+
+
+<li> <a href="Talks/BNT_mathworks.ppt">Powerpoint slides on graphical models
+and BNT</a>, presented to the Mathworks, June 2003
+
+<!--
+<li> <a href="Talks/gR03.ppt">Powerpoint slides on BNT and object
+recognition</a>, presented at the <a
+href="http://www.math.auc.dk/gr/gr2003.html">gR</a> workshop,
+September 2003. 
+-->
+
+<li> <a href="gR03.pdf">Proposed design for gR, a graphical models
+toolkit in R</a>, September 2003.
+<!--
+(For more information on the gR project,
+click <a href="http://www.r-project.org/gR/">here</a>.)
+-->
+
+<li>
+<!--
+<img src = "../new.gif" alt="new">
+-->
+<a href="../../Papers/bnt.pdf">Invited paper on BNT</a>,
+published in
+Computing Science and Statistics, 2001.
+
+<li> <a href="bnsoft.html">Other Bayes net software</a>
+
+<!--<li> <a href="software.html">Other Matlab software</a>-->
+
+<li> <a href="../../Bayes/bnintro.html">A brief introduction to
+Bayesian Networks</a>
+
+<li> <a href="#features">Major features</a>
+<li> <a href="#models">Supported models</a>
+<!--<li> <a href="#future">Future work</a>-->
+<li> <a href="#give_away">Why do I give the code away?</a>
+<li> <a href="#why_matlab">Why Matlab?</a>
+<li> <a href="#ack">Acknowledgments</a>
+</ul>
+<p>
+
+
+
+<h2><a name="features">Major features</h2>
+<ul>
+
+<li> BNT supports many types of
+<b>conditional probability distributions</b> (nodes),
+and it is easy to add more.
+<ul>
+<li>Tabular (multinomial)
+<li>Gaussian
+<li>Softmax (logistic/ sigmoid)
+<li>Multi-layer perceptron (neural network)
+<li>Noisy-or
+<li>Deterministic
+</ul>
+<p>
+
+<li> BNT supports <b>decision and utility nodes</b>, as well as chance
+nodes,
+i.e., influence diagrams as well as Bayes nets.
+<p>
+
+<li> BNT supports static and dynamic BNs (useful for modelling dynamical systems
+and sequence data).
+<p>
+
+<li> BNT supports many different <b>inference algorithms</b>,
+and it is easy to add more.
+
+<ul>
+<li> Exact inference for static BNs:
+<ul>
+<li>junction tree
+<li>variable elimination
+<li>brute force enumeration (for discrete nets)
+<li>linear algebra (for Gaussian nets)
+<li>Pearl's algorithm (for polytrees)
+<li>quickscore (for QMR)
+</ul>
+
+<p>
+<li> Approximate inference for static BNs:
+<ul>
+<li>likelihood weighting
+<li> Gibbs sampling
+<li>loopy belief propagation
+</ul>
+
+<p>
+<li> Exact inference for DBNs:
+<ul>
+<li>junction tree
+<li>frontier algorithm
+<li>forwards-backwards (for HMMs)
+<li>Kalman-RTS (for LDSs)
+</ul>
+
+<p>
+<li> Approximate inference for DBNs:
+<ul>
+<li>Boyen-Koller
+<li>factored-frontier/loopy belief propagation
+</ul>
+
+</ul>
+<p>
+
+<li>
+BNT supports several methods for <b>parameter learning</b>,
+and it is easy to add more.
+<ul>
+
+<li> Batch MLE/MAP parameter learning using EM.
+(Each node type has its own M method, e.g. softmax nodes use IRLS,<br>
+and each inference engine has its own E method, so the code is fully modular.)
+
+<li> Sequential/batch Bayesian parameter learning (for fully observed tabular nodes only).
+</ul>
+
+
+<p>
+<li>
+BNT supports several methods for <b>regularization</b>,
+and it is easy to add more.
+<ul>
+<li> Any node can have its parameters clamped (made non-adjustable).
+<li> Any set of compatible nodes can have their parameters tied (c.f.,
+weight sharing in a neural net).
+<li> Some node types (e.g., tabular) supports priors for MAP estimation.
+<li> Gaussian covariance matrices can be declared full or diagonal, and can
+be tied across states of their discrete parents (if any).
+</ul>
+
+<p>
+<li>
+BNT supports several methods for <b>structure learning</b>,
+and it is easy to add more.
+<ul>
+
+<li> Bayesian structure learning,
+using MCMC or local search (for fully observed tabular nodes only).
+
+<li> Constraint-based structure learning (IC/PC and IC*/FCI).
+</ul>
+
+
+<p>
+<li> The source code is extensively documented, object-oriented, and free, making it
+an excellent tool for teaching, research and rapid prototyping.
+
+</ul>
+
+
+
+<h2><a name="models">Supported probabilistic models</h2>
+<p>
+It is trivial to implement all of
+the following probabilistic models using the toolbox.
+<ul>
+<li>Static
+<ul>
+<li> Linear regression, logistic regression, hierarchical mixtures of experts
+
+<li> Naive Bayes classifiers, mixtures of Gaussians,
+sigmoid belief nets
+
+<li> Factor analysis, probabilistic
+PCA, probabilistic ICA, mixtures of these models
+
+</ul>
+
+<li>Dynamic
+<ul>
+
+<li> HMMs, Factorial HMMs, coupled HMMs, input-output HMMs, DBNs
+
+<li> Kalman filters, ARMAX models, switching Kalman filters,
+tree-structured Kalman filters, multiscale AR models
+
+</ul>
+
+<li> Many other combinations, for which there are (as yet) no names!
+
+</ul>
+
+
+<!--
+<h2><a name="future">Future work</h2>
+
+I have a long <a href="wish.txt">wish list</a>
+of features I would like to add to BNT
+at some point in the future.
+Please email me (<a
+href="mailto:murphyk@cs.berkeley.edu">murphyk@cs.berkeley.edu</a>)
+if you are interested in contributing!
+-->
+
+
+
+<h2><a name="give_away">Why do I give the code away?</h2>
+
+<ul>
+
+<li>
+I was hoping for a Linux-style effect, whereby people would contribute
+their own Matlab code so that the package would grow. With a few
+exceptions, this has not happened, 
+although several people have provided bug-fixes (see the <a
+href="#ack">acknowledgements</a>). 
+Perhaps the <a
+href="http://www.cs.berkeley.edu/~murphyk/OpenBayes/index.html">Open
+Bayes Project</a> will be more 
+succesful in this regard, although the evidence to date is not promising.
+
+<p>
+<li>
+Knowing that someone else might read your code forces one to
+document it properly, a good practice in any case, as anyone knows who
+has revisited old code.
+In addition, by having many "eye balls", it is easier to spot bugs.
+
+
+<p>
+<li>
+I believe in the concept of
+<a href="http://www-stat.stanford.edu/~donoho/Reports/1995/wavelab.pdf">
+reproducible research</a>.
+Good science requires that other people be able 
+to replicate your experiments.
+Often a paper does not give enough details about how exactly an
+algorithm was implemented (e.g., how were the parameters chosen? what
+initial conditions were used?), and these can make a big difference in
+practice.
+Hence one should release the code that
+was actually used to generate the results in one's paper.
+This also prevents re-inventing the wheel.
+
+<p>
+<li>
+I was fed up with reading papers where all people do is figure out how 
+to do exact inference and/or learning
+in a model which is just a trivial special case of a general Bayes net, e.g.,
+input-output HMMs, coupled-HMMs, auto-regressive HMMs.
+My hope is that, by releasing general purpose software, the field can
+move on to more interesting questions.
+As Alfred North Whitehead said in 1911,
+"Civilization advances by extending the number of important operations
+that we can do without thinking about them."
+
+</ul>
+
+
+
+
+
+<h2><a name="why_matlab">Why Matlab?</h2>
+
+Matlab is an interactive, matrix-oriented programming language that
+enables one to express one's (mathematical) ideas very concisely and directly,
+without having to worry about annoying details like memory allocation
+or type checking. This considerably reduces development time and
+keeps code short, readable and fully portable.
+Matlab has excellent built-in support for many data analysis and
+visualization routines. In addition, there are many useful toolboxes, e.g., for
+neural networks, signal and image processing.
+The main disadvantages of Matlab are that it can be slow (which is why
+we are currently rewriting parts of BNT in C), and that the commercial
+license is expensive (although the student version is only $100 in the US).
+<p>
+Many people ask me why I did not use
+<a href="http://www.octave.org/">Octave</a>,
+an open-source Matlab clone.
+The reason is that
+Octave does not support multi-dimensional arrays,
+cell arrays, objects, etc.
+<p>
+Click <a href="../which_language.html">here</a> for a more detailed
+comparison of matlab and other languages.
+
+
+
+<h2><a name="ack">Acknowledgments</h2>
+
+I would like to thank numerous people for bug fixes, including:
+Rainer Deventer, Michael Robert James, Philippe Leray, Pedrito Maynard-Reid II, Andrew Ng,
+Ron Parr, Ilya Shpitser, Xuejing Sun, Ursula Sondhauss.
+<p>
+I would like to thank the following people for contributing code:
+Pierpaolo Brutti, Ali Taylan Cemgil, Tamar Kushnir, Ken Shan,
+<a href="http://www.cs.berkeley.edu/~yweiss">Yair Weiss</a>,
+Ron Zohar.
+<p>
+The following Intel employees have also contributed code:
+Qian Diao, Shan Huang, Yimin Zhang and especially Wei Hu.
+
+<p>
+I would like to thank Stuart Russell for funding me over the years as
+I developed BNT, and Gary Bradksi for hiring me as an intern at Intel,
+which has supported much of the recent developments of BNT.
+
+       
+</body>
+
diff --git a/sourcecodes/bnt-master/docs/cellarray.html b/sourcecodes/bnt-master/docs/cellarray.html
new file mode 100644
index 00000000..19a8da21
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/cellarray.html
@@ -0,0 +1,59 @@
+Cell arrays are a little tricky in Matlab.
+Consider this example.
+
+C=num2cell(rand(2,3))
+C = 
+    [0.4565]    [0.8214]    [0.6154]
+    [0.0185]    [0.4447]    [0.7919]
+
+C{1,2}  % this is the contents of this cell (could be a vector or a string)
+ans =
+    0.8214
+
+C{1:2,2} % this is the contents of these cells - returns multiple
+answers!
+ans =
+    0.8214
+ans =
+    0.4447
+
+A = C(1:2,2)  % this is a slice of the cell array
+ans = 
+    [0.8214]
+    [0.4447]
+
+A{1}  % A is itself a cell array
+ans =
+    0.8214
+
+
+
+>> C(1:2,2)=0 % can't assign a scalar to a cell array
+C(1:2,2)=0
+??? Conversion to cell from double is not possible.
+
+
+>> C(1:2,2)={0;0} % can assign a cell array to a cell array
+C(1:2,2)={0;0}
+C = 
+    [0.4565]    [0]    [0.6154]
+    [0.0185]    [0]    [0.7919]
+
+
+BTW, I use cell arrays for evidence for 2 reasons:
+
+1. [] indicates missing values
+2. it can easily represent vector-valued nodes
+
+The following example  makes this clear
+
+C{1,1} = []
+C{2,1} = rand(3,1)
+
+C = 
+              []    [0]    [0.6154]
+    [3x1 double]    [0]    [0.7919]
+
+
+Hope this helps,
+Kevin
diff --git a/sourcecodes/bnt-master/docs/changelog.html b/sourcecodes/bnt-master/docs/changelog.html
new file mode 100644
index 00000000..23f7a9a3
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/changelog.html
@@ -0,0 +1,1617 @@
+<title>History of changes to BNT</title>
+<h1>History of changes to BNT</h1>
+
+
+<h2>Changes since 4 Oct 2007</h2>
+
+<pre>
+- 19 Oct 07 murphyk
+
+* BNT\CPDs\@noisyor_CPD\CPD_to_CPT.m: 2nd half of the file is a repeat
+of the first half and was deleted (thanks to Karl Kuschner)
+
+* KPMtools\myismember.m should return logical for use in "assert" so add line at end
+                p=logical(p);  this prevents "assert" from failing on an integer input.
+(thanks to Karl Kuschner)
+
+
+
+- 17 Oct 07 murphyk
+
+* Updated subv2ind and ind2subv in KPMtools to Tom Minka's implementation.
+His ind2subv is faster (vectorized), but I had to modify it so it
+matched the behavior of my version when called with siz=[].
+His subv2inv is slightly simpler than mine because he does not treat
+the siz=[2 2 ... 2] case separately.
+Note: there is now no need to ever use the C versions of these
+functions (or any others, for that matter).
+
+* removed BNT/add_BNT_to_path since no longer needed.
+
+
+
+- 4 Oct 07 murphyk
+
+*  moved code from sourceforge to UBC website, made version 1.0.4
+
+* @pearl_inf_engine/pearl_inf_engine line 24, default
+argument for protocol changed from [] to 'parallel'.
+Also, changed private/parallel_protocol so it doesn't write to an
+empty file id (Matlab 7 issue)
+
+* added foptions (Matlab 7 issue)
+
+* changed genpathKPM to exclude svn. Put it in toplevel directory to
+massively simplify the installation process.
+
+</pre>
+
+
+<h2>Sourceforge changelog</h2>
+
+BNT was first ported to sourceforge on 28 July 2001 by yozhik.
+BNT was removed from sourceforge on 4 October 2007 by Kevin Murphy;
+that version is cached as <a
+href="FullBNT-1.0.3.zip">FullBNT-1.0.3.zip</a>. 
+See  <a href="ChangeLog.Sourceforge.txt">Changelog from
+sourceforge</a> for a history of that version of the code,
+which formed the basis of the branch currently on Murphy's web page.
+
+
+<h2> Changes from August 1998 -- July 2004</h2>
+
+Kevin Murphy made the following changes to his own private copy.
+(Other small changes were made between July 2004 and October 2007, but were
+not documented.)
+These may or may not be reflected in the sourceforge version of the
+code (which was independently maintained).
+
+
+<ul>
+<li> 9 June 2004
+<ul>
+<li> Changed tabular_CPD/learn_params back to old syntax, to make it
+compatible with gaussian_CPD/learn_params (and re-enabled
+generic_CPD/learn_params).
+Modified learning/learn_params.m and learning/score_family
+appropriately.
+(In particular, I undid the change Sonia Leach had to make to
+score_family to handle this asymmetry.)
+Added examples/static/gaussian2 to test this new functionality.
+
+<li> Added bp_mrf2 (for generic pairwise MRFs) to
+inference/static/@bp_belprop_mrf2_inf_engine. [MRFs are not
+"officially" supported in BNT, so this code is just for expert
+hackers.]
+
+<li> Added examples/static/nodeorderExample.m to illustrate importance
+of using topological ordering.
+
+<li> Ran dos2unix on all *.c files within BNT to eliminate compiler
+warnings.
+
+</ul>
+
+<li> 7 June 2004
+<ul>
+<li> Replaced normaliseC with normalise in HMM/fwdback, for maximum
+portability (and negligible loss in speed).
+<li> Ensured FullBNT versions of HMM, KPMstats etc were as up-to-date
+as stand-alone versions.
+<li> Changed add_BNT_to_path so it no longer uses addpath(genpath()),
+which caused Old versions of files to mask new ones.
+</ul>
+
+<li> 18 February 2004
+<ul>
+<li> A few small bug fixes to BNT, as posted to the Yahoo group.
+<li> Several new functions added to KPMtools, KPMstats and Graphviz
+(none needed by BNT).
+<li> Added CVS to some of my toolboxes.
+</ul>
+
+<li> 30 July 2003
+<ul>
+<li> qian.diao fixed @mpot/set_domain_pot and @cgpot/set_domain_pot
+<li> Marco Grzegorczyk found, and Sonia Leach fixed, a bug in
+do_removal inside learn_struct_mcmc
+</ul>
+
+
+<li> 28 July 2003
+<ul>
+<li> Sebastian Luehr provided 2 minor bug fixes, to HMM/fwdback (if any(scale==0))
+and FullBNT\HMM\CPDs\@hhmmQ_CPD\update_ess.m (wrong transpose).
+</ul>
+
+<li> 8 July 2003
+<ul>
+<li> Removed buggy  BNT/examples/static/MRF2/Old/mk_2D_lattice.m which was
+masking correct graph/mk_2D_lattice.
+<li> Fixed bug in graph/mk_2D_lattice_slow in the non-wrap-around case
+(line 78)
+</ul>
+
+
+<li> 2 July 2003
+<ul>
+<li> Sped up normalize(., 1) in KPMtools by avoiding general repmat
+<li> Added assign_cols and marginalize_table to KPMtools
+</ul>
+
+
+<li> 29 May 2003
+<ul>
+<li> Modified KPMstats/mixgauss_Mstep so it repmats Sigma in the tied
+covariance case (bug found by galt@media.mit.edu).
+
+<li> Bob Welch found bug in gaussian_CPDs/maximize_params in the way
+cpsz was computed.
+
+<li> Added KPMstats/mixgauss_em, because my code is easier to
+understand/modify than netlab's (at least for me!).
+
+<li> Modified BNT/examples/dynamic/viterbi1 to call multinomial_prob
+instead of mk_dhmm_obs_lik.
+
+<li> Moved parzen window and partitioned models code to KPMstats.
+
+<li> Rainer Deventer fixed some bugs in his scgpot code, as follows:
+1. complement_pot.m
+Problems occured for probabilities equal to zero. The result is an
+division by zero error.
+<br>
+2. normalize_pot.m
+This function is used during the calculation of the log-likelihood.
+For a probability of zero a warning "log of zero" occurs. I have not
+realy fixed the bug. As a workaround I suggest to calculate the 
+likelihhod based on realmin (the smallest real number) instead of
+zero.
+<br>
+3. recursive_combine_pots
+At the beginning of the function there was no test for the trivial case,
+which defines the combination of two potentials as equal to the direct
+combination. The result might be an infinite recursion which leads to
+a stack overflow in matlab.
+</ul>
+
+
+
+<li> 11 May 2003
+<ul> 
+<li> Fixed bug in gaussian_CPD/maximize_params so it is compatible
+with the new clg_Mstep routine
+<li> Modified KPMstats/cwr_em to handle single cluster case 
+separately.
+<li> Fixed bug in netlab/gmminit.
+<li> Added hash tables to KPMtools.
+</ul>
+
+
+<li> 4 May 2003
+<ul>
+<li>
+Renamed many functions in KPMstats so the name of the
+distribution/model type comes first, 
+Mstep_clg -> clg_Mstep,
+Mstep_cond_gauss -> mixgauss_Mstep.
+Also, renamed eval_pdf_xxx functions to xxx_prob, e.g.
+eval_pdf_cond_mixgauss -> mixgauss_prob.
+This is simpler and shorter.
+
+<li> 
+Renamed many functions in HMM toolbox so the name of the
+distribution/model type comes first, 
+log_lik_mhmm -> mhmm_logprob, etc.
+mk_arhmm_obs_lik has finally been re-implemented in terms of clg_prob
+and mixgauss_prob (for slice 1).
+Removed the Demos directory, and put them in the main directory.
+This code is not backwards compatible.
+
+<li> Removed some of the my_xxx functions from KPMstats (these were
+mostly copies of functions from the Mathworks stats toolbox).
+
+
+<li> Modified BNT to take into account changes to KPMstats and
+HMM toolboxes.
+
+<li> Fixed KPMstats/Mstep_clg (now called clg_Mstep) for spherical Gaussian case.
+(Trace was wrongly parenthesised, and I used YY instead of YTY.
+The spherical case now gives the same result as the full case
+for cwr_demo.)
+Also, mixgauss_Mstep now adds 0.01 to the ML estimate of Sigma,
+to act as a regularizer (it used to add 0.01 to  E[YY'], but this was
+ignored in the spherical case).
+
+<li> Added cluster weighted regression to KPMstats.
+
+<li> Added KPMtools/strmatch_substr.
+</ul>
+
+
+
+<li>  28 Mar 03 
+<ul>
+<li> Added mc_stat_distrib and eval_pdf_cond_prod_parzen to KPMstats
+<li> Fixed GraphViz/arrow.m incompatibility with matlab 6.5
+(replace all NaN's with 0).
+Modified GraphViz/graph_to_dot so it also works on windows.
+<li> I removed dag_to_jtree and added graph_to_jtree to the graph
+toolbox; the latter expects an undirected graph as input.
+<li> I added triangulate_2Dlattice_demo.m to graph.
+<li> Rainer Deventer fixed the stable conditional Gaussian potential
+classes (scgpot and scgcpot) and inference engine
+(stab_cond_gauss_inf_engine).
+<li> Rainer Deventer added (stable) higher-order Markov models (see
+inference/dynamic/@stable_ho_inf_engine).
+</ul>
+
+
+<li> 14 Feb 03
+<ul>
+<li> Simplified learning/learn_params so it no longer returns BIC
+score. Also, simplified @tabular_CPD/learn_params so it only takes
+local evidence.
+Added learn_params_dbn, which does ML estimation of fully observed
+DBNs.
+<li> Vectorized KPMstats/eval_pdf_cond_mixgauss for tied Sigma
+case (much faster!).
+Also, now works in log-domain to prevent underflow.
+eval_pdf_mixgauss now calls eval_pdf_cond_mixgauss and inherits these benefits.
+<li> add_BNT_to_path now calls genpath with 2 arguments if using
+matlab version 5.
+</ul>
+
+
+<li>  30 Jan 03
+<ul>
+<li> Vectorized KPMstats/eval_pdf_cond_mixgauss for scalar Sigma
+case (much faster!)
+<li> Renamed mk_dotfile_from_hmm to draw_hmm and moved it to the
+GraphViz library.
+<li> Rewrote @gaussian_CPD/maximize_params.m so it calls
+KPMstats/Mstep_clg.
+This fixes bug when using clamped means (found by Rainer Deventer
+and Victor Eruhimov)
+and a bug when using a Wishart prior (no gamma term in the denominator).
+It is also easier to read.
+I rewrote the technical report re-deriving all the equations in a
+clearer notation, making the solution to the bugs more obvious.
+(See www.ai.mit.edu/~murphyk/Papers/learncg.pdf)
+Modified Mstep_cond_gauss to handle priors.
+<li> Fixed bug reported by Ramgopal Mettu in which add_BNT_to_path
+calls genpath with only 1 argument, whereas version 5 requires 2.
+<li> Fixed installC and uninstallC to search in FullBNT/BNT.
+</ul>
+
+
+<li> 24 Jan 03
+<ul>
+<li> Major simplification of HMM code.
+The API is not backwards compatible.
+No new functionality has been added, however.
+There is now only one fwdback function, instead of 7;
+different behaviors are controlled through optional arguments. 
+I renamed 'evaluate observation likelihood' (local evidence)
+to 'evaluate conditional pdf', since this is more general.
+i.e., renamed
+mk_dhmm_obs_lik to eval_pdf_cond_multinomial,
+mk_ghmm_obs_lik to eval_pdf_cond_gauss,
+mk_mhmm_obs_lik to eval_pdf_cond_mog.
+These functions have been moved to KPMstats,
+so they can be used by other toolboxes.
+ghmm's have been eliminated, since they are just a special case of
+mhmm's with M=1 mixture component.
+mixgauss HMMs can now handle a different number of
+mixture components per state.
+init_mhmm has been eliminated, and replaced with init_cond_mixgauss
+(in KPMstats) and mk_leftright/rightleft_transmat.
+learn_dhmm can no longer handle inputs (although this is easy to add back).
+</ul>
+
+
+
+
+
+<li> 20 Jan 03
+<ul>
+<li> Added arrow.m to GraphViz directory, and commented out line 922,
+in response to a bug report.
+</ul>
+
+<li> 18 Jan 03
+<ul>
+<li> Major restructuring of BNT file structure:
+all code that is not specific to Bayes nets has been removed;
+these packages must be downloaded separately. (Or just download FullBNT.)
+This makes it easier to ensure different toolboxes are consistent.
+misc has been slimmed down and renamed KPMtools, so it can be shared by other toolboxes,
+such as HMM and Kalman; some of the code has been moved to BNT/general.
+The Graphics directory has been slimmed down and renamed GraphViz.
+The graph directory now has no dependence on BNT (dag_to_jtree has
+been renamed graph_to_jtree and has a new API).
+netlab2 no longer contains any netlab files, only netlab extensions.
+None of the functionality has changed.
+</ul>
+
+
+
+<li> 11 Jan 03
+<ul>
+<li> jtree_dbn_inf_engine can now support soft evidence.
+
+<li> Rewrote graph/dfs to make it clearer.
+Return arguments have changed, as has mk_rooted_tree.
+The acyclicity check for large undirected graphs can cause a stack overflow.
+It turns out that this was not a bug, but is because Matlab's stack depth
+bound is very low by default.
+
+<li> Renamed examples/dynamic/filter2 to filter_test1, so it does not
+conflict with the filter2 function in the image processing toolbox.
+
+<li> Ran test_BNT on various versions of matlab to check compatibility.
+On matlab 6.5 (r13), elapsed time = 211s, cpu time = 204s.
+On matlab 6.1 (r12), elapsed time = 173s, cpu time = 164s.
+On matlab 5.3 (r11), elapsed time = 116s, cpu time = 114s.
+So matlab is apparently getting slower with time!!
+(All results were with a linux PIII machine.)
+</ul>
+
+
+<li> 14 Nov 02
+<ul>
+<li> Removed all ndx inference routines, since they are only
+marginally faster on toy problems,
+and are slower on large problems due to having to store and lookup 
+the indices (causes cache misses).
+In particular, I removed jtree_ndx_inf_eng and jtree_ndx_dbn_inf_eng, all the *ndx*
+routines from potentials/Tables, and all the UID stuff from
+add_BNT_to_path,
+thus simplifying the code.
+This required fixing hmm_(2TBN)_inf_engine/marginal_nodes\family,
+and updating installC.
+
+
+<li> Removed jtree_C_inf_engine and jtree_C_dbn_inf_engine.
+The former is basically the same as using jtree_inf_engine with
+mutliply_by_table.c and marginalize_table.c.
+The latter benefited slightly by assuming potentials were tables
+(arrays not objects), but these negligible savings don't justify the
+complexity and code duplication.
+
+<li> Removed stab_cond_gauss_inf_engine and
+scg_unrolled_dbn_inf_engine,
+written by shan.huang@intel.com, since the code was buggy.
+
+<li> Removed potential_engine, which was only experimental anyway.
+
+</ul>
+
+
+
+<li> 13 Nov 02
+<ul>
+<li> <b>Released version 5</b>.
+The previous version, released on 7/28/02, is available
+<a href="BNT4.zip">here</a>.
+
+<li> Moved code and documentation to MIT.
+
+<li> Added repmat.c from Thomas Minka's lightspeed library.
+Modified it so it can return an empty matrix.
+
+<li> Tomas Kocka fixed bug in the BDeu option for tabular_CPD,
+and contributed graph/dag_to_eg, to convert to essential graphs.
+
+<!--<li> Wrote a <a href="../Papers/fastmult.pdf">paper</a> which explains
+the ndx methods and the ndx cache BNT uses for fast
+multiplication/ marginalization of multi-dimensional arrays.
+-->
+
+<li> Modified definition of hhmmQ_CPD, so that Qps can now accept
+parents in either the current or previous slice.
+
+<li> Added hhmm2Q_CPD class, which is simpler than hhmmQ (no embedded
+sub CPDs, etc), and which allows the conditioning parents, Qps, to
+be before (in the topological ordering) the F or Q(t-1) nodes.
+See BNT/examples/dynamic/HHMM/Map/mk_map_hhmm for an example.
+</ul>
+
+
+<li> 7/28/02
+<ul>
+<li> Changed graph/best_first_elim_order from min-fill to min-weight.
+<li> Ernest Chan fixed bug in Kalman/sample_lds (G{i} becomes G{m} in
+line 61).
+<li> Tal Blum <bloom@cs.huji.ac.il> fixed bug in HMM/init_ghmm (Q
+becomes K, the number of states).
+<li> Fixed jtree_2tbn_inf_engine/set_fields so it correctly sets the
+maximize flag to 1 even in subengines.
+<li> Gary Bradksi did a simple mod to the PC struct learn alg so you can pass it an
+adjacency matrix as a constraint. Also, CovMat.m reads a file and
+produces a covariance matrix.
+<li> KNOWN BUG in CPDs/@hhmmQ_CPD/update_ess.m at line 72 caused by 
+examples/dynamic/HHMM/Square/learn_square_hhmm_cts.m at line 57.
+<li>
+The old version is available from www.cs.berkeley.edu/~murphyk/BNT.24june02.zip
+</ul>
+
+
+<li> 6/24/02
+<ul>
+<li> Renamed dag_to_dot as graph_to_dot and added support for
+undirected graphs.
+<li> Changed syntax for HHMM CPD constructors: no need to specify d/D
+anymore,so they can be used for more complex models.
+<li> Removed redundant first argument to mk_isolated_tabular_CPD.
+</ul>
+
+
+<li> 6/19/02
+<ul>
+<li>
+Fixed most probable explanation code.
+Replaced calc_mpe with find_mpe, which is now a method of certain
+inference engines, e.g., jtree, belprop.
+calc_mpe_global has become the find_mpe method of global_joint.
+calc_mpe_bucket has become the find_mpe method of var_elim.
+calc_mpe_dbn has become the find_mpe method of smoother.
+These routines now correctly find the jointly most probable
+explanation, instead of the marginally most probable assignments.
+See examples/static/mpe1\mpe2 and examples/dynamic/viterbi1
+for examples.
+Removed maximize flag from constructor and enter_evidence
+methods, since this no longer needs to be specified by the user.
+
+<li> Rainer Deventer fixed in a bug in 
+CPDs/@gaussian_CPD/udpate_ess.m: 
+now, hidden_cps = any(hidden_bitv(cps)), whereas it used to be
+hidden_cps = all(hidden_bitv(cps)).
+
+</ul>
+
+
+<li> 5/29/02
+<ul>
+<li> CPDs/@gaussian_CPD/udpate_ess.m fixed WX,WXX,WXY (thanks to Rainer Deventer and
+Yohsuke Minowa for spotting the bug). Does the C version work??
+<li> potentials/@cpot/mpot_to_cpot fixed K==0 case (thanks to Rainer Deventer).
+<li> CPDs/@gaussian_CPD/log_prob_node now accepts non-cell array data
+on self (thanks to rishi <rishi@capsl.udel.edu> for catching this).
+</ul>
+
+
+<li> 5/19/02
+<ul>
+
+<!--
+<li> Finally added <a href="../Papers/wei_ndx.ps.gz">paper</a> by Wei Hu (written
+November 2001)
+describing ndxB, ndxD, and ndxSD.
+-->
+
+<li> Wei Hu made the following changes.
+<ul>
+<li>   Memory leak repair:
+     a.  distribute_evidence.c   in  static/@jtree_C directory
+     b.  distribute_evidence.c   in  static/@jtree_ndx directory
+     c.  marg_tablec.            in  Tables dir
+
+<li>   Add "@jtree_ndx_2TBN_inf_engine"  in inference/online dir
+
+<li>   Add "@jtree_sparse_inf_engine"    in inference/static dir
+
+<li>   Add "@jtree_sparse_2TBN_inf_engine"   in inference/online  dir
+
+<li>   Modify "tabular_CPD.m" in CPDs/@tabular_CPD dir , used for sparse
+
+<li>   In "@discrete_CPD" dir:
+     a.  modify "convert_to_pot.m", used for sparse
+     b.  add "convert_to_sparse_table.c"
+
+<li>   In "potentials/@dpot" dir:
+     a.  remove "divide_by_pot.c" and "multiply_by_pot.c"
+     b.  add "divide_by_pot.m" and "multiply_by_pot.m"
+     c.  modify "dpot.m", "marginalize_pot.m" and "normalize_pot.m"
+
+<li>   In "potentials/Tables" dir:
+     a.  modify mk_ndxB.c;(for speedup)
+     b.  add "mult_by_table.m", 
+             "divide_by_table.m",
+             "divide_by_table.c",
+             "marg_sparse_table.c",
+             "mult_by_sparse_table.c",
+             "divide_by_sparse_table.c".
+
+<li>   Modify "normalise.c" in misc dir, used for sparse.
+
+<li>And, add discrete2, discrete3, filter2 and filter3 as test applications in test_BNT.m
+Modify installC.m
+</ul>
+
+<li> Kevin made the following changes related to strong junction
+trees:
+<ul>
+<li> jtree_inf_engin line 75:
+engine.root_clq = length(engine.cliques);
+the last clq is guaranteed to be a strong root
+
+<li> dag_to_jtree line 38: [jtree, root, B, w] =
+cliques_to_jtree(cliques, ns);
+never call cliques_to_strong_jtree
+
+<li> strong_elim_order: use Ilya's code instead of topological sorting.
+</ul>
+
+<li> Kevin fixed CPDs/@generic_CPD/learn_params, so it always passes
+in the correct hidden_bitv field to update_params.
+
+</ul>.
+
+
+<li> 5/8/02
+<ul>
+
+<li> Jerod Weinman helped fix some bugs in HHMMQ_CPD/maximize_params.
+
+<li> Removed broken online inference from hmm_inf_engine.
+It has been replaced filter_inf_engine, which can take hmm_inf_engine
+as an argument.
+
+<li> Changed graph visualization function names.
+'draw_layout' is now 'draw_graph',
+'draw_layout_dbn' is now 'draw_dbn',
+'plotgraph' is now 'dag_to_dot',
+'plothmm' is now 'hmm_to_dot',
+added 'dbn_to_dot',
+'mkdot' no longer exists': its functioality has been subsumed by dag_to_dot.
+The dot functions now all take optional args in string/value format.
+</ul>
+
+
+<li> 4/1/02
+<ul>
+<li> Added online inference classes.
+See BNT/inference/online and BNT/examples/dynamic/filter1.
+This is work in progress.
+<li> Renamed cmp_inference to cmp_inference_dbn, and made its
+    interface and behavior more similar to cmp_inference_static.
+<li> Added field rep_of_eclass to bnet and dbn, to simplify
+parameter tying (see ~murphyk/Bayes/param_tieing.html).
+<li> Added gmux_CPD (Gaussian mulitplexers).
+See BNT/examples/dynamic/SLAM/skf_data_assoc_gmux for an example.
+<li> Modified the forwards sampling routines.
+general/sample_dbn and sample_bnet now take optional arguments as
+strings, and can sample with pre-specified evidence.
+sample_bnet can only generate a single sample, and it is always a cell
+array. 
+sample_node can only generate a single sample, and it is always a
+scalar or vector.
+This eliminates the false impression that the function was
+ever vectorized (which was only true for tabular_CPDs).
+(Calling sample_bnet inside a for-loop is unlikely to be a bottleneck.)
+<li> Updated usage.html's description of CPDs (gmux) and inference
+(added gibbs_sampling and modified the description of pearl).
+<li> Modified BNT/Kalman/kalman_filter\smoother so they now optionally
+take an observed input (control) sequence.
+Also, optional arguments are now passed as strings.
+<li> Removed BNT/examples/static/uci_data to save space.
+</ul>
+
+<li> 3/14/02
+<ul>
+<li> pearl_inf_engine now works for (vector) Gaussian nodes, as well
+as discrete. compute_pi has been renamed CPD_to_pi. compute_lambda_msg
+    has been renamed CPD_to_lambda_msg. These are now implemented for
+    the discrete_CPD class instead of tabular_CPD. noisyor and
+    Gaussian have their own private implemenations.
+Created examples/static/Belprop subdirectory.
+<li> Added examples/dynamic/HHMM/Motif.
+<li> Added Matt Brand's entropic prior code.
+<li> cmp_inference_static has changed. It no longer returns err. It
+    can check for convergence. It can accept 'observed'.
+</ul>
+
+
+<li> 3/4/02
+<ul>
+<li> Fixed HHMM code. Now BNT/examples/dynamic/HHMM/mk_abcd_hhmm
+implements the example in the NIPS paper. See also
+Square/sample_square_hhmm_discrete and other files.
+
+<li> Included Bhaskara Marthi's gibbs_sampling_inf_engine. Currently
+this only works if all CPDs are tabular and if you call installC.
+
+<li> Modified Kalman/tracking_demo  so it calls plotgauss2d instead of
+    gaussplot.
+
+<li> Included Sonia Leach's speedup of mk_rnd_dag.
+My version created all NchooseK subsets, and then picked among them. Sonia
+reorders the possible parents randomly and choose
+the first k. This saves on having to enumerate the large number of
+possible subsets before picking from one. 
+
+<li> Eliminated BNT/inference/static/Old, which contained some old
+.mexglx files which wasted space.
+</ul>
+
+
+
+<li> 2/15/02
+<ul>
+<li> Removed the netlab directory, since most of it was not being
+used, and it took up too much space (the goal is to have BNT.zip be
+less than 1.4MB, so if fits on a floppy).
+The required files have been copied into netlab2.
+</ul>
+
+<li> 2/14/02
+<ul>
+<li> Shan Huang fixed most (all?) of the bugs in his stable CG code.
+scg1-3 now work, but scg_3node and scg_unstable give different
+    behavior than that reported in the Cowell book.
+
+<li> I changed gaussplot so it plots an ellipse representing the
+    eigenvectors of the covariance matrix, rather than numerically
+    evaluating the density and using a contour plot; this
+    is much faster and gives better pictures. The new function is
+    called plotgauss2d in BNT/Graphics.
+
+<li> Joni Alon <jalon@cs.bu.edu> fixed some small bugs:
+    mk_dhmm_obs_lik called forwards with the wrong args, and
+    add_BNT_to_path should quote filenames with spaces.
+
+<li> I added BNT/stats2/myunidrnd which is called by learn_struct_mcmc.
+
+<li> I changed BNT/potentials/@dpot/multiply_by_dpot so it now says
+Tbig.T(:) = Tbig.T(:) .* Ts(:);
+</ul>
+
+
+<li> 2/6/02
+<ul>
+<li> Added hierarchical HMMs. See BNT/examples/dynamic/HHMM and
+CPDs/@hhmmQ_CPD and @hhmmF_CPD.
+<li> sample_dbn can now sample until a certain condition is true.
+<li> Sonia Leach fixed learn_struct_mcmc and changed mk_nbrs_of_digraph
+so it only returns DAGs.
+Click <a href="sonia_mcmc.txt">here</a> for details of her changes.
+</ul>
+
+
+<li> 2/4/02
+<ul>
+<li> Wei Hu fixed a bug in
+jtree_ndx_inf_engine/collect\distribute_evidence.c which failed when
+maximize=1.
+<li>
+I fixed various bugs to do with conditional Gaussians,
+so mixexp3 now works (thansk to Gerry Fung <gerry.fung@utoronto.ca>
+      for spotting the error). Specifically:
+Changed softmax_CPD/convert_to_pot so it now puts cts nodes in cdom, and no longer inherits 
+      this function from discrete_CPD.
+     Changed root_CPD/convert_to_put so it puts self in cdom.
+</ul>
+
+
+<li> 1/31/02
+<ul>
+<li> Fixed log_lik_mhmm (thanks to ling chen <real_lingchen@yahoo.com>
+for spotting the typo)
+<li> Now many scripts in examples/static  call cmp_inference_static.
+Also, SCG scripts have been simplified (but still don't work!).
+<li> belprop and belprop_fg enter_evidence now returns [engine, ll,
+      niter], with ll=0, so the order of the arguments is compatible with other engines.
+<li> Ensured that all enter_evidence methods support optional
+      arguments such as 'maximize', even if they ignore them.
+<li> Added Wei Hu's potentials/Tables/rep_mult.c, which is used to
+      totally eliminate all repmats from gaussian_CPD/update_ess.
+</ul>
+
+
+<li> 1/30/02
+<ul>
+<li> update_ess now takes hidden_bitv instead of hidden_self and
+hidden_ps. This allows gaussian_CPD to distinguish hidden discrete and 
+cts parents. Now learn_params_em, as well as learn_params_dbn_em,
+    passes in this info, for speed.
+
+<li> gaussian_CPD update_ess is now vectorized for any case where all
+    the continuous nodes are observed (eg., Gaussian HMMs,  AR-HMMs).
+
+<li> mk_dbn now automatically detects autoregressive nodes.
+
+<li> hmm_inf_engine now uses indexes in marginal_nodes/family for
+    speed. Marginal_ndoes can now only handle single nodes.
+   (SDndx is hard-coded, to avoid the overhead of using marg_ndx,
+    which is slow because of the case and global statements.)
+
+<li> add_ev_to_dmarginal now retains the domain field.
+
+<li> Wei Hu wrote potentials/Tables/repmat_and_mult.c, which is used to
+    avoid some of the repmat's in gaussian_CPD/update_ess.
+
+<li> installC now longer sets the global USEC, since USEC is set to 0
+    by add_BNT_to_path, even if the C files have already been compiled 
+    in a previous session. Instead, gaussian_CPD checks to
+    see if repmat_and_mult exists, and (bat1, chmm1, water1, water2)
+    check to see if jtree_C_inf_engine/collect_evidence exists.
+    Note that checking if a file exists is slow, so we do the check
+    inside the gaussian_CPD constructor, not inside update_ess.
+
+<li> uninstallC now deletes both .mex and .dll files, just in case I
+    accidently ship a .zip file with binaries.  It also deletes mex
+   files from jtree_C_inf_engine.
+   
+<li> Now marginal_family for both jtree_limid_inf_engine and
+	    global_joint_inf_engine returns a marginal structure and
+	    potential, as required by solve_limid.
+    Other engines (eg. jtree_ndx, hmm) are not required to return a potential.
+</ul>
+
+
+
+<li> 1/22/02
+<ul>
+<li> Added an optional argument to mk_bnet and mk_dbn which lets you
+add names to nodes. This uses the new assoc_array class.
+
+<li> Added Yimin Zhang's (unfinished) classification/regression tree
+code to CPDs/tree_CPD.
+
+</ul>
+
+
+
+<li> 1/14/02
+<ul> 
+<li> Incorporated some of Shan Huang's (still broken) stable CG code.
+</ul>
+
+
+<li> 1/9/02
+<ul>
+<li> Yimin Zhang vectorized @discrete_CPD/prob_node, which speeds up
+structure learning considerably. I fixed this to handle softmax CPDs.
+
+<li> Shan Huang changed the stable conditional Gaussian code to handle
+vector-valued nodes, but it is buggy.
+
+<li> I vectorized @gaussian_CPD/update_ess for a special case.
+
+<li> Removed denom=min(1, ... Z) from gaussian_CPD/maximize_params
+(added to cope with negative temperature for entropic prior), which
+gives wrong results on mhmm1.
+</ul>
+
+
+<li> 1/7/02
+
+<ul>
+<li> Removed the 'xo' typo from mk_qmr_bnet.
+
+<li> convert_dbn_CPDs_to_tables has been vectorized; it is now
+substantially faster to compute the conditional likelihood for long sequences.
+
+<li> Simplified constructors for tabular_CPD and gaussian_CPD, so they
+now both only take the form CPD(bnet, i, ...) for named arguments -
+the CPD('self', i, ...) format is gone. Modified mk_fgraph_given_ev
+to use mk_isolated_tabular_CPD instead.
+
+<li> Added entropic prior to tabular and Gaussian nodes.
+For tabular_CPD, changed name of arguments to the constructor to
+distinguish Dirichlet and entropic priors. In particular,
+tabular_CPD(bnet, i, 'prior', 2) is now
+tabular_CPD(bnet, i, 'prior_type', 'dirichlet', 'dirichlet_weight', 2).
+
+<li> Added deterministic annealing to learn_params_dbn_em for use with
+entropic priors. The old format learn(engine, cases, max_iter) has
+been replaced by learn(engine, cases, 'max_iter', max_iter).
+
+<li> Changed examples/dynamic/bat1 and kjaerulff1, since default
+equivalence classes have changed from untied to tied.
+</ul>
+
+<li> 12/30/01
+<ul>
+<li> DBN default equivalence classes for slice 2 has changed, so that
+now parameters are tied for nodes with 'equivalent' parents in slices
+1 and 2 (e.g., observed leaf nodes). This essentially makes passing in
+the eclass arguments redundant (hooray!).
+</ul>
+
+
+<li> 12/20/01
+<ul>
+<li> <b>Released version 4</b>.
+Version 4 is considered a major new release
+since it is not completely backwards compatible with V3.
+Observed nodes are now specified when the bnet/dbn is created,
+not when the engine is created. This changes the interface to many of
+the engines, making the code no longer backwards compatible.
+Hence support for non-named optional arguments (BNT2 style) has also
+been removed; hence mk_dbn etc. requires arguments to be passed by name.
+
+<li> Ilya Shpitser's C code for triangulation now compiles under
+Windows as well as Unix, thanks to Wei Hu.
+
+<li> All the ndx engines have been combined, and now take an optional
+argument specifying what kind of index to use.
+
+<li> learn_params_dbn_em is now more efficient:
+@tabular_CPD/update_ess for nodes whose families
+are hidden does not need need to call add_evidence_to_dmarginal, which
+is slow.
+
+<li> Wei Hu fixed bug in jtree_ndxD, so now the matlab and C versions
+both work.
+
+<li> dhmm_inf_engine replaces hmm_inf_engine, since the former can
+handle any kind of topology and is slightly more efficient. dhmm is
+extended to handle Gaussian, as well as discrete,
+observed nodes. The new hmm_inf_engine no longer supports online
+inference (which was broken anyway).
+
+<li> Added autoregressive HMM special case to hmm_inf_engine for
+speed.
+
+<li> jtree_ndxSD_dbn_inf_engine now computes likelihood of the
+evidence in a vectorized manner, where possible, just like
+hmm_inf_engine.
+
+<li> Added mk_limid, and hence simplified mk_bnet and mk_dbn.
+
+
+<li> Gaussian_CPD now uses 0.01*I prior on covariance matrix by
+default. To do ML estimation, set 'cov_prior_weight' to 0.
+
+<li> Gaussian_CPD and tabular_CPD
+optional binary arguments are now set using 0/1 rather no 'no'/'yes'.
+
+<li> Removed Shan Huang's PDAG and decomposable graph code, which will
+be put in a separate structure learning library.
+</ul>
+
+
+<li> 12/11/01
+<ul>
+<li> Wei Hu fixed jtree_ndx*_dbn_inf_engine and marg_table.c.
+
+<li> Shan Huang contributed his implementation of stable conditional
+Gaussian code (Lauritzen 1999), and methods to search through the
+space of PDAGs (Markov equivalent DAGs) and undirected decomposable
+graphs. The latter is still under development.
+</ul>
+
+
+<li> 12/10/01
+<ul>
+<li> Included Wei Hu's new versions of the ndx* routines, which use
+integers instead of doubles. The new versions are about 5 times faster
+in C. In general, ndxSD is the best choice.
+
+<li> Fixed misc/add_ev_to_dmarginal so it works with the ndx routines
+in bat1.
+
+<li> Added calc_mpe_dbn to do Viterbi parsing.
+
+<li> Updated dhmm_inf_engine so it computes marginals.
+</ul>
+
+
+
+<li> 11/23/01
+<ul>
+<li> learn_params now does MAP estimation (i.e., uses Dirichlet prior,
+if define). Thanks to Simon Keizer skeizer@cs.utwente.nl for spotting
+this.
+<li> Changed plotgraph so it calls ghostview with the output of dotty,
+instead of converting from .ps to .tif. The resulting image is much
+easier to read.
+<li> Fixed cgpot/multiply_by_pots.m.
+<li> Wei Hu fixed ind2subv.c.
+<li> Changed arguments to compute_joint_pot.
+</ul>
+
+
+<li> 11/1/01
+<ul>
+<li> Changed sparse to dense in @dpot/multiply_pots, because sparse
+arrays apparently cause a bug in the NT version of Matlab.
+
+<li> Fixed the bug in gaussian_CPD/log_prob_node.m which
+incorrectly called the vectorized gaussian_prob with different means
+when there were continuous parents and more than one case.
+(Thanks to Dave Andre for finding this.)
+
+<li> Fixed the bug in root_CPD/convert_to_pot which did not check for
+pot_type='g'. 
+(Thanks to Dave Andre for finding this.)
+
+<li> Changed calc_mpe and calc_mpe_global so they now return a cell array.
+
+<li> Combine pearl and loopy_pearl into a single inference engine
+called 'pearl_inf_engine', which now takes optional arguments passed
+in using the name/value pair syntax.
+marginal_nodes/family now takes the optional add_ev argument (same as
+jtree), which is the opposite of the previous shrink argument.
+
+<li> Created pearl_unrolled_dbn_inf_engine and "resurrected"
+pearl_dbn_inf_engine in a simplified (but still broken!) form.
+
+<li> Wei Hi fixed the bug in ind2subv.c, so now ndxSD works.
+He also made C versions of ndxSD and ndxB, and added (the unfinished) ndxD.
+
+</ul>
+
+
+<li> 10/20/01
+
+<ul>
+<li>  Removed the use_ndx option from jtree_inf,
+and created 2 new inference engines: jtree_ndxSD_inf_engine and
+jtree_ndxB_inf_engine.
+The former stores 2 sets of indices for the small and difference
+domains; the latter stores 1 set of indices for the big domain.
+In Matlab, the ndxB version is often significantly faster than ndxSD
+and regular jree, except when the clique size is large.
+When compiled to C, the difference between ndxB and ndxSD (in terms of
+speed) vanishes; again, both are faster than compiled jtree, except
+when the clique size is large.
+Note: ndxSD currently has a bug in it, so it gives the wrong results!
+(The DBN analogs are jtree_dbn_ndxSD_inf_engine and 
+jtree_dbn_ndxB_inf_engine.)
+
+<li> Removed duplicate files from the HMM and Kalman subdirectories.
+e.g., normalise is now only in BNT/misc, so when compiled to C, it
+masks the unique copy of the Matlab version.
+</ul>
+
+
+
+<li> 10/17/01
+<ul>
+<li> Fixed bugs introduced on 10/15:
+Renamed extract_gaussian_CPD_params_given_ev_on_dps.m to
+gaussian_CPD_params_given_dps.m since Matlab can't cope with such long
+names (this caused cg1 to fail). Fixed bug in
+gaussian_CPD/convert_to_pot, which now calls convert_to_table in the
+discrete case.
+
+<li> Fixed bug in bk_inf_engine/marginal_nodes.
+The test 'if nodes < ss' is now
+'if nodes <= ss' (bug fix due to Stephen seg_ma@hotmail.com)
+
+<li> Simplified uninstallC.
+</ul>
+
+
+<li> 10/15/01
+<ul>
+
+<li> Added use_ndx option to jtree_inf and jtree_dbn_inf.
+This pre-computes indices for multiplying, dividing and marginalizing
+discrete potentials.
+This is like the old jtree_fast_inf_engine, but we use an extra level
+of indirection to reduce the number of indices needed (see
+uid_generator object).
+Sometimes this is faster than the original way...
+This is work in progress.
+
+<li> The constructor for dpot no longer calls myreshape, which is very
+slow.
+But new dpots still must call myones.
+Hence discrete potentials are only sometimes 1D vectors (but should
+always be thought of as multi-D arrays). This is work in progress.
+</ul>
+
+
+<li> 10/6/01
+<ul>
+<li> Fixed jtree_dbn_inf_engine, and added kjaerulff1 to test this.
+<li> Added option to jtree_inf_engine/marginal_nodes to return "full
+sized" marginals, even on observed nodes.
+<li> Clustered BK in examples/dynamic/bat1 seems to be broken,
+so it has been commented out.
+BK will be re-implemented on top of jtree_dbn, which should much more
+efficient.
+</ul>
+
+<li> 9/25/01
+<ul>
+<li> jtree_dbn_inf_engine is now more efficient than calling BK with
+clusters = exact, since it only uses the interface nodes, instead of
+all of them, to maintain the belief state.
+<li> Uninstalled the broken C version of strong_elim_order.
+<li> Changed order of arguments to unroll_dbn_topology, so that intra1
+is no longer required.
+<li> Eliminated jtree_onepass, which can be simulated by calling
+collect_evidence on jtree.
+<li> online1 is no longer in the test_BNT suite, since there is some
+problem with online prediction with mixtures of Gaussians using BK.
+This functionality is no longer supported, since doing it properly is
+too much work.
+</ul>
+</li>
+
+<li> 9/7/01
+<ul>
+<li> Added Ilya Shpitser's C triangulation code (43x faster!).
+Currently this only compiles under linux; windows support is being added.
+</ul>
+
+
+<li> 9/5/01
+<ul>
+<li> Fixed typo in CPDs/@tabular_kernel/convert_to_table (thanks,
+Philippe!)
+<li> Fixed problems with clamping nodes in tabular_CPD, learn_params,
+learn_params_tabular, and bayes_update_params. See
+BNT/examples/static/learn1 for a demo.
+</ul>
+
+
+<li> 9/3/01
+<ul>
+<li> Fixed typo on line 87 of gaussian_CPD which caused error in cg1.m
+<li> Installed Wei Hu's latest version of jtree_C_inf_engine, which
+can now compute marginals on any clique/cluster.
+<li> Added Yair Weiss's code to compute the Bethe free energy
+approximation to the log likelihood in loopy_pearl (still need to add
+this to belprop). The return arguments are now: engine, loglik and
+niter, which is different than before.
+</ul>
+
+
+
+<li> 8/30/01
+<ul>
+<li> Fixed bug in BNT/examples/static/id1 which passed hard-coded
+directory name to belprop_inf_engine.
+
+<li> Changed tabular_CPD and gaussian_CPD so they can now be created
+without having to pass in a bnet.
+
+<li> Finished mk_fgraph_given_ev. See the fg* files in examples/static
+for demos of factor graphs (work in progress).
+</ul>
+
+
+
+<li> 8/22/01
+<ul>
+
+<li> Removed jtree_compiled_inf_engine,
+since the C code it generated was so big that it would barf on large
+models.
+
+<li> Tidied up the potentials/Tables directory.
+Removed mk_marg/mult_ndx.c,
+which have been superceded by the much faster mk_marg/mult_index.c
+(written by Wei Hu).
+Renamed the Matlab versions mk_marginalise/multiply_table_ndx.m
+to be mk_marg/mult_index.m to be compatible with the C versions.
+Note: nobody calls these routines anymore!
+(jtree_C_inf_engine/enter_softev.c has them built-in.)
+Removed mk_ndx.c, which was only used by jtree_compiled.
+Removed mk_cluster_clq_ndx.m, mk_CPD_clq_ndx, and marginalise_table.m
+which were not used.
+Moved shrink_obs_dims_in_table.m to misc.
+
+<li> In potentials/@dpot directory: removed multiply_by_pot_C_old.c.
+Now marginalize_pot.c can handle maximization,
+and divide_by_pot.c has been implmented.
+marginalize/multiply/divide_by_pot.m no longer have useC or genops options.
+(To get the C versions, use installC.m)
+
+<li> Removed useC and genops options from jtree_inf_engine.m
+To use the C versions, install the C code.
+
+<li> Updated BNT/installC.m.
+
+<li> Added fclose to @loopy_pearl_inf/enter_evidence.
+
+<li> Changes to MPE routines in BNT/general.
+The maximize parameter is now specified inside enter_evidence
+instead of when the engine is created.
+Renamed calc_mpe_given_inf_engine to just calc_mpe.
+Added Ron Zohar's optional fix to handle the case of ties.
+Now returns log-likelihood instead of likelihood.
+Added calc_mpe_global.
+Removed references to genops in calc_mpe_bucket.m
+Test file is now called mpe1.m
+
+<li> For DBN inference, filter argument is now passed by name,
+as is maximize. This is NOT BACKWARDS COMPATIBLE.
+
+<li> Removed @loopy_dbn_inf_engine, which will was too complicated.
+In the future, a new version, which applies static loopy to the
+unrolled DBN, will be provided.
+
+<li> discrete_CPD class now contains the family sizes and supports the
+method dom_sizes. This is because it could not access the child field
+CPD.sizes, and mysize(CPT) may give the wrong answer.
+
+<li> Removed all functions of the form CPD_to_xxx, where xxx = dpot, cpot,
+cgpot, table, tables.  These have been replaced by convert_to_pot,
+which takes a pot_type argument.
+@discrete_CPD calls convert_to_table to implement a default
+convert_to_pot.
+@discrete_CPD calls CPD_to_CPT to implement a default
+convert_to_table.
+The convert_to_xxx routines take fewer arguments (no need to pass in
+the globals node_sizes and cnodes!).
+Eventually, convert_to_xxx will be vectorized, so it will operate on
+all nodes in the same equivalence class "simultaneously", which should
+be significantly quicker, at least for Gaussians.
+
+<li> Changed discrete_CPD/sample_node and prob_node to use
+convert_to_table, instead of CPD_to_CPT, so mlp/softmax nodes can
+benefit.
+
+<li> Removed @tabular_CPD/compute_lambda_msg_fast and
+private/prod_CPD_and_pi_msgs_fast, since no one called them.
+
+<li> Renamed compute_MLE to learn_params,
+by analogy with bayes_update_params (also because it may compute an
+MAP estimate).
+
+<li> Renamed set_params to set_fields
+and get_params to get_field for CPD and dpot objects, to
+avoid confusion with the parameters of the CPD.
+
+<li> Removed inference/doc, which has been superceded
+by the web page.
+
+<li> Removed inference/static/@stab_cond_gauss_inf_engine, which is
+broken, and all references to stable CG.
+
+</ul>
+
+
+
+
+
+<li> 8/12/01
+<ul>
+<li> I removed potentials/@dpot/marginalize_pot_max.
+Now marginalize_pot for all potential classes take an optional third
+argument, specifying whether to sum out or max out.
+The dpot class also takes in optional arguments specifying whether to
+use C or genops (the global variable USE_GENOPS has been eliminated).
+
+<li> potentials/@dpot/marginalize_pot has been simplified by assuming
+that 'onto' is always in ascending order (i.e., we remove
+Maynard-Reid's patch). This is to keep the code identical to the C
+version and the other class implementations.
+
+<li> Added Ron Zohar's general/calc_mpe_bucket function,
+and my general/calc_mpe_given_inf_engine, for calculating the most
+probable explanation.
+
+
+<li> Added Wei Hu's jtree_C_inf_engine.
+enter_softev.c is about 2 times faster than enter_soft_evidence.m.
+
+<li> Added the latest version of jtree_compiled_inf_engine by Wei Hu.
+The 'C' ndx_method now calls potentials/Tables/mk_marg/mult_index,
+and the 'oldC' ndx_method calls potentials/Tables/mk_marg/mult_ndx.
+
+<li> Added potentials/@dpot/marginalize_pot_C.c and
+multiply_by_pot_C.c by Wei Hu.
+These can be called by setting the 'useC' argument in
+jtree_inf_engine. 
+
+<li> Added BNT/installC.m to compile all the mex files.
+
+<li> Renamed prob_fully_instantiated_bnet to log_lik_complete.
+
+<li> Added Shan Huang's unfinished stable conditional Gaussian
+inference routines.
+</ul>
+
+
+
+<li> 7/13/01
+<ul>
+<li> Added the latest version of jtree_compiled_inf_engine by Wei Hu.
+<li> Added the genops class by Doug Schwarz (see
+BNT/genopsfun/README). This provides a 1-2x speed-up of
+potentials/@dpot/multiply_by_pot and divide_by_pot.
+<li> The function BNT/examples/static/qmr_compiled compares the
+performance gains of these new functions.
+</ul>
+
+<li> 7/6/01
+<ul>
+<li> Made bk_inf_engine use the name/value argument syntax. This can
+now do max-product (Viterbi) as well as sum-product
+(forward-backward).
+<li> Changed examples/static/mfa1 to use the new name/value argument
+syntax.
+</ul>
+
+
+<li> 6/28/01
+
+<ul>
+
+<li> <b>Released version 3</b>.
+Version 3 is considered a major new release
+since it is not completely backwards compatible with V2.
+V3 supports decision and utility nodes, loopy belief propagation on
+general graphs (including undirected), structure learning for non-tabular nodes,
+a simplified way of handling optional
+arguments to functions,
+and many other features which are described below.
+In addition, the documentation has been substantially rewritten.
+
+<li> The following functions can now take optional arguments specified
+as name/value pairs, instead of passing arguments in a fixed order:
+mk_bnet, jtree_inf_engine, tabular_CPD, gaussian_CPD, softmax_CPD, mlp_CPD,
+enter_evidence.
+This is very helpful if you want to use default values for most parameters.
+The functions remain backwards compatible with BNT2.
+
+<li> dsoftmax_CPD has been renamed softmax_CPD, replacing the older
+version of softmax. The directory netlab2 has been updated, and
+contains weighted versions of some of the learning routines in netlab.
+(This code is still being developed by P. Brutti.)
+
+<li> The "fast" versions of the inference engines, which generated
+matlab code, have been removed.
+@jtree_compiled_inf_engine now generates C code.
+(This feature is currently being developed by Wei Hu of Intel (China), 
+and is not yet ready for public use.)
+
+<li> CPD_to_dpot, CPD_to_cpot, CPD_to_cgpot and CPD_to_upot 
+are in the process of being replaced by convert_to_pot.
+
+<li> determine_pot_type now takes as arguments (bnet, onodes)
+instead of (onodes, cnodes, dag),
+so it can detect the presence of utility nodes as well as continuous
+nodes.
+Hence this function is not backwards compatible with BNT2.
+
+<li> The structure learning code (K2, mcmc) now works with any node
+type, not just tabular.
+mk_bnets_tabular has been eliminated.
+bic_score_family and dirichlet_score_family will be replaced by score_family.
+Note: learn_struct_mcmc has a new interface that is not backwards
+compatible with BNT2.
+
+<li> update_params_complete has been renamed bayes_update_params.
+Also, learn_params_tabular has been replaced by learn_params, which
+works for any CPD type.
+
+<li> Added decision/utility nodes.
+</ul>
+
+
+<li> 6/6/01
+<ul>
+<li> Added soft evidence to jtree_inf_engine.
+<li> Changed the documentation slightly (added soft evidence and
+parameter tying, and separated parameter and structure learning).
+<li> Changed the parameters of determine_pot_type, so it no longer
+needs to be passed a DAG argument.
+<li> Fixed parameter tying in mk_bnet (num. CPDs now equals num. equiv
+classes).
+<li> Made learn_struct_mcmc work in matlab version 5.2 (thanks to
+Nimrod Megiddo for finding this bug).
+<li> Made 'acyclic.m' work for undirected graphs.
+</ul>
+
+
+<li> 5/23/01
+<ul>
+<li> Added Tamar Kushnir's code for the IC* algorithm
+(learn_struct_pdag_ic_star). This learns the
+structure of a PDAG, and can identify the presence of latent
+variables.
+
+<li> Added Yair Weiss's code for computing the MAP assignment using
+junction tree (i.e., a new method called @dpot/marginalize_pot_max
+instead of marginalize_pot.)
+
+<li> Added @discrete_CPD/prob_node in addition to log_prob_node to handle
+deterministic CPDs.
+</ul>
+
+
+<li> 5/12/01
+<ul>
+<li> Pierpaolo Brutti updated his mlp and dsoftmax CPD classes,
+and improved the HME code.
+
+<li> HME example now added to web page. (The previous example was non-hierarchical.)
+
+<li> Philippe Leray (author of the French documentation for BNT)
+pointed out that I was including netlab.tar unnecessarily.
+</ul>
+
+
+<li> 5/4/01
+<ul>
+<li> Added mlp_CPD which defines a CPD as a (conditional) multi-layer perceptron.
+This class was written by Pierpaolo Brutti.
+
+<li> Added hierarchical mixtures of experts demo (due to Pierpaolo Brutti).
+
+<li> Fixed some bugs in dsoftmax_CPD.
+
+<li> Now the BNT distribution includes the whole
+<a href="http://www.ncrg.aston.ac.uk/netlab/">Netlab</a> library in a
+subdirectory.
+It also includes my HMM and Kalman filter toolboxes, instead of just
+fragments of them.
+</ul>
+
+
+<li> 5/2/01
+<ul>
+<li> gaussian_inf_engine/enter_evidence now correctly returns the
+loglik, even if all nodes are instantiated (bug fix due to
+Michael Robert James).
+
+<li> Added dsoftmax_CPD which allows softmax nodes to have discrete
+and continuous parents; the discrete parents act as indices into the
+parameters for the continuous node, by analogy with conditional
+Gaussian nodes. This class was written by Pierpaolo Brutti.
+</ul>
+
+
+<li> 3/27/01
+<ul>
+<li> learn_struct_mcmc  no longer returns sampled_bitv.
+<li> Added mcmc_sample_to_hist to post-process the set of samples.
+</ul>
+
+<li> 3/21/01
+<ul>
+<li> Changed license from UC to GNU Library GPL.
+
+<li> Made all CPD constructors accept 0 arguments, so now bnets can be
+saved to and loaded from files.
+
+<li> Improved the implementation of sequential and batch Bayesian
+parameter learning for tabular CPDs with completely observed data (see
+log_marg_lik_complete and update_params_complete). This code also
+handles interventional data.
+
+<li> Added MCMC structure learning for completely observed, discrete,
+static BNs.
+
+<li> Started implementing Bayesian estimation of linear Gaussian
+nodes. See root_gaussian_CPD and
+linear_gaussian_CPD. The old gaussian_CPD class has not been changed.
+
+<li> Renamed evaluate_CPD to log_prob_node, and simplified its
+arguments.
+
+<li> Renamed sample_CPD to sample_node, simplified its
+arguments, and vectorized it.
+
+<li> Renamed "learn_params_tabular" to "update_params_complete".
+This does Bayesian updating, but no longer computes the BIC score.
+
+<li> Made routines for completely observed networks (sampling,
+complete data likelihood, etc.) handle cell arrays or regular arrays,
+which are faster.
+If some nodes are not scalars, or are hidden, you must use cell arrays.
+You must convert to a cell array before passing to an inference routine.
+
+<li> Fixed bug in gaussian_CPD constructor. When creating CPD with
+more than 1 discrete parent with random parameters, the matrices were
+the wrong shape (Bug fix due to Xuejing Sun).
+</ul>
+
+
+
+<li> 11/24/00
+<ul>
+<li> Renamed learn_params and learn_params_dbn to learn_params_em/
+learn_params_dbn_em. The return arguments are now [bnet, LLtrace,
+engine] instead of [engine, LLtrace].
+<li> Added structure learning code for static nets (K2, PC).
+<li> Renamed learn_struct_inter_full_obs as learn_struct_dbn_reveal,
+and reimplemented it to make it simpler and faster.
+<li> Added sequential Bayesian parameter learning (learn_params_tabular).
+<li> Major rewrite of the documentation.
+</ul>
+
+<!--
+<li> 6/1/00
+<ul>
+<li> Subtracted 1911 off the counter, so now it counts hits from
+5/22/00. (The initial value of 1911 was a conservative lower bound on the number of
+hits from the time the page was created.)
+</ul>
+-->
+
+<li> 5/22/00
+<ul>
+<li> Added online filtering and prediction.
+<li> Added the factored frontier and loopy_dbn algorithms.
+<li> Separated the online user manual into two, for static and dynamic
+networks.
+<!--
+<li> Added a counter to the BNT web page, and initialized it to 1911,
+which is the number of people who have downloaded my software (BNT and
+other toolboxes) since 8/24/98.
+-->
+<li> Added a counter to the BNT web page.
+<!--
+Up to this point, 1911 people had downloaded my software (BNT and
+other toolboxes) since 8/24/98.
+-->
+</ul>
+
+
+<li> 4/27/00
+<ul>
+<li> Fixed the typo in bat1.m
+<li> Added preliminary code for online inference in DBNs
+<li> Added coupled HMM example
+</ul>
+
+<li> 4/23/00
+<ul>
+<li> Fixed the bug in the fast inference routines where the indices
+are empty (arises in bat1.m).
+<li> Sped up marginal_family for the fast engines by precomputing indices.
+</ul>
+
+<li> 4/17/00
+<ul>
+<li> Simplified implementation of BK_inf_engine by using soft evidence.
+<li> Added jtree_onepass_inf_engine (which computes a single marginal)
+and modified jtree_dbn_fast to use it.
+</ul>
+
+<li> 4/14/00
+<ul>
+<li> Added fast versions of jtree and BK, which are
+designed for models where the division into hidden/observed is fixed,
+and all hidden variables are discrete. These routines are 2-3 times
+faster than their non-fast counterparts.
+
+<li> Added graph drawing code
+contributed by Ali Taylan Cemgil from the University of Nijmegen.
+</ul>
+
+<li> 4/10/00
+<ul>
+<li> Distinguished cnodes and cnodes_slice in DBNs so that kalman1
+works with BK.
+<li> Removed dependence on cellfun (which only exists in matlab 5.3)
+by adding isemptycell. Now the code works in 5.2.
+<li> Changed the UC copyright notice.
+</ul>
+
+
+ 
+<li> 3/29/00
+<ul>
+<li><b>Released BNT 2.0</b>, now with objects!
+Here are the major changes.
+
+<li> There are now 3 classes of objects in BNT:
+Conditional Probability Distributions, potentials (for junction tree),
+and inference engines. 
+Making an inference algorithm (junction tree, sampling, loopy belief
+propagation, etc.) an object might seem counter-intuitive, but in
+fact turns out to be a good idea, since the code and documentation
+can be made modular.
+(In Java, each algorithm would be a class that implements the
+inferenceEngine interface. Since Matlab doesn't support interfaces,
+inferenceEngine is an abstract (virtual) base class.)
+
+<p>
+<li>
+In version 1, instead of Matlab's built-in objects,
+I used structs and a
+  simulated dispatch mechanism based on the type-tag system in the
+  classic textbook by Abelson
+  and Sussman ("Structure and Interpretation of Computer Programs",
+  MIT Press, 1985). This required editing the dispatcher every time a
+  new object type was added. It also required unique (and hence long)
+  names for each method, and allowed the user unrestricted access to
+  the internal state of objects.
+
+<p>
+<li> The Bayes net itself is now a lightweight struct, and can be
+used to specify a model independently of the inference algorithm used
+to process it.
+In version 1, the inference engine was stored inside the Bayes net.
+              
+<!--
+See the list of <a href="differences2.html">changes from version
+1</a>.
+-->
+</ul>
+
+
+
+<li> 11/24/99
+<ul>
+<li> Added fixed lag smoothing, online EM and the ability to learn
+switching HMMs (POMDPs) to the HMM toolbox.
+<li> Renamed the HMM toolbox function 'mk_dhmm_obs_mat' to
+'mk_dhmm_obs_lik', and similarly for ghmm and mhmm. Updated references
+to these functions in BNT.
+<li> Changed the order of return params from kalman_filter to make it
+more natural. Updated references to this function in BNT.
+</ul>
+
+
+
+<li>10/27/99
+<ul>
+<li>Fixed line 42 of potential/cg/marginalize_cgpot and lines 32-39 of bnet/add_evidence_to_marginal
+(thanks to Rainer Deventer for spotting these bugs!)
+</ul>
+
+
+<li>10/21/99
+<ul>
+<li>Completely changed the blockmatrix class to make its semantics
+more sensible. The constructor is not backwards compatible!
+</ul>
+
+<li>10/6/99
+<ul>
+<li>Fixed all_vals = cat(1, vals{:}) in user/enter_evidence
+<li>Vectorized ind2subv and sub2indv and removed the C versions.
+<li>Made mk_CPT_from_mux_node much faster by having it call vectorized
+ind2subv
+<li>Added Sondhauss's bug fix to line 68 of bnet/add_evidence_to_marginal
+<li>In dbn/update_belief_state, instead of adding eps to likelihood if 0,
+we leave it at 0, and set the scale factor to 0 instead of dividing.
+</ul>
+
+<li>8/19/99
+<ul>
+<li>Added Ghahramani's mfa code to examples directory to compare with
+fa1, which uses BNT
+<li>Changed all references of assoc to stringmatch (e.g., in
+examples/mk_bat_topology)
+</ul>
+
+<li>June 1999
+<ul>
+<li><b>Released BNT 1.0</b> on the web.
+</ul>
+
+
+<li>August 1998
+<ul>
+<li><b>Released BNT 0.0</b> via email.
+</ul>
+
+
+<li>October 1997
+<ul>
+<li>First started working on Matlab version of BNT.
+</ul>
+
+<li>Summer 1997
+<ul>
+<li> First started working on C++ version of BNT while working at DEC (now Compaq) CRL.
+</ul>
+
+<!--
+<li>Fall 1996
+<ul>
+<li>Made a C++ program that generates DBN-specific C++ code
+for inference using the frontier algorithm.
+</ul>
+
+<li>Fall 1995
+<ul>
+<li>Arrive in Berkeley, and first learn about Bayes Nets. Start using
+Geoff Zweig's C++ code.
+</ul>
+-->
+
+</ul>
diff --git a/sourcecodes/bnt-master/docs/dbn_hmm_demo.m b/sourcecodes/bnt-master/docs/dbn_hmm_demo.m
new file mode 100644
index 00000000..30933b8f
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/dbn_hmm_demo.m
@@ -0,0 +1,37 @@
+ Example due to Wang Hee Lin" <engp1622@nus.edu.sg
+
+
+intra = zeros(2);
+intra(1,2) = 1; 
+inter = zeros(2);
+inter(1,1) = 1; 
+
+Q = 2; % num hidden states
+O = 2; % num observable symbols
+ns = [Q O];%number of states
+dnodes = 1:2;
+%onodes = [1:2]; % only possible with jtree, not hmm
+onodes = [2]; 
+bnet = mk_dbn(intra, inter, ns, 'discrete', dnodes, 'observed', onodes);
+for i=1:4
+  bnet.CPD{i} = tabular_CPD(bnet, i);
+end
+
+prior0 = normalise(rand(Q,1));
+transmat0 = mk_stochastic(rand(Q,Q));
+obsmat0 = mk_stochastic(rand(Q,O));
+
+%engine = smoother_engine(hmm_2TBN_inf_engine(bnet));
+engine = smoother_engine(jtree_2TBN_inf_engine(bnet));
+
+ss = 2;%slice size(ss)
+ncases = 10;%number of examples
+T=10;
+max_iter=2;%iterations for EM
+cases = cell(1, ncases);
+for i=1:ncases
+  ev = sample_dbn(bnet, T);
+  cases{i} = cell(ss,T);
+  cases{i}(onodes,:) = ev(onodes, :);
+end
+[bnet2, LLtrace] = learn_params_dbn_em(engine, cases, 'max_iter', 4);
diff --git a/sourcecodes/bnt-master/docs/gr03.pdf b/sourcecodes/bnt-master/docs/gr03.pdf
new file mode 100644
index 00000000..8ad8cf49
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/gr03.pdf
Binary files differdiff --git a/sourcecodes/bnt-master/docs/graph_to_dot.m b/sourcecodes/bnt-master/docs/graph_to_dot.m
new file mode 100644
index 00000000..c9f692d1
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/graph_to_dot.m
@@ -0,0 +1,86 @@
+function graph_to_dot(adj, varargin)
+%GRAPH_TO_DOT  Makes a GraphViz (AT&T) file representing an adjacency matrix
+% graph_to_dot(adj, ...) writes to the specified filename.
+%
+% Optional arguments can be passed as name/value pairs: [default]
+%
+% 'filename' - if omitted, writes to 'tmp.dot'
+% 'arc_label' - arc_label{i,j} is a string attached to the i-j arc [""]
+% 'node_label' - node_label{i} is a string attached to the node i ["i"]
+% 'width'     - width in inches [10]
+% 'height'    - height in inches [10]
+% 'leftright' - 1 means layout left-to-right, 0 means top-to-bottom [0]
+% 'directed'  - 1 means use directed arcs, 0 means undirected [1]
+%
+% For details on graphviz, See http://www.research.att.com/sw/tools/graphviz
+%
+% See also dot_to_graph and draw_dot.
+
+% First version written by Kevin Murphy 2002.
+% Modified by Leon Peshkin, Jan 2004.
+% Bugfix by Tom Minka, Mar 2004.
+                   
+node_label = [];   arc_label = [];   % set default args
+width = 10;        height = 10;
+leftright = 0;     directed = 1;     filename = 'tmp.dot';
+
+for i = 1:2:nargin-1                    % get optional args
+  switch varargin{i}
+    case 'filename', filename = varargin{i+1};
+    case 'node_label', node_label = varargin{i+1};
+    case 'arc_label', arc_label = varargin{i+1};
+    case 'width', width = varargin{i+1};
+    case 'height', height = varargin{i+1};
+    case 'leftright', leftright = varargin{i+1};
+    case 'directed', directed = varargin{i+1};
+  end
+end
+% minka
+if ~directed
+  adj = triu(adj | adj');
+end
+
+fid = fopen(filename, 'w');
+if directed
+  fprintf(fid, 'digraph G {\n');
+  arctxt = '->'; 
+  if isempty(arc_label)
+    labeltxt = '';
+  else
+    labeltxt = '[label="%s"]';
+  end
+else
+  fprintf(fid, 'graph G {\n');
+  arctxt = '--'; 
+  if isempty(arc_label)
+    labeltxt = '[dir=none]';
+  else
+    labeltext = '[label="%s",dir=none]';
+  end
+end
+edgeformat = strcat(['%d ',arctxt,' %d ',labeltxt,';\n']);
+fprintf(fid, 'center = 1;\n');
+fprintf(fid, 'size=\"%d,%d\";\n', width, height);
+if leftright
+  fprintf(fid, 'rankdir=LR;\n');
+end
+Nnds = length(adj);
+for node = 1:Nnds               %  process nodes 
+  if isempty(node_label)
+    fprintf(fid, '%d;\n', node);
+  else
+    fprintf(fid, '%d [ label = "%s" ];\n', node, node_label{node});
+  end
+end
+for node1 = 1:Nnds   % process edges
+  arcs = find(adj(node1,:));         % children(adj, node);
+  for node2 = arcs
+    if  ~isempty(arc_label)
+      fprintf(fid, edgeformat,node1,node2,arc_label{node1,node2});
+    else
+      fprintf(fid, edgeformat, node1, node2);    
+    end    
+  end
+end
+fprintf(fid, '}');
+fclose(fid); 
diff --git a/sourcecodes/bnt-master/docs/graphviz.html b/sourcecodes/bnt-master/docs/graphviz.html
new file mode 100644
index 00000000..5ad3e777
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/graphviz.html
@@ -0,0 +1,66 @@
+<h1>Visualizing graph structures in matlab</h1>
+
+We discuss some methods for visualizing graphs/ networks, including automatic
+layout of the nodes.
+We assume the graph is represented as an adjacency matrix.
+If using BNT, you can access the DAG using
+<pre>
+G = bnet.dag;
+</pre>
+
+<h2>Matlab's biograph function</h2>
+
+The Mathworks computational biology toolbox
+has many useful graph related functions, including visualization.
+<br>
+Click 
+<a href="http://www.mathworks.com/products/bioinfo/demos.html?file=/products/demos/shipping/bioinfo/graphtheorydemo.html#4">
+here</a>
+for a demo.
+
+
+
+<h2>Cemgil's draw_graph</h2>
+
+You can visualize an arbitrary graph (such as one learned using the
+structure learning routines) with Matlab code written by
+<a href="http://www-sigproc.eng.cam.ac.uk/~atc27/matlab/layout.html">
+Ali Taylan Cemgil</a>
+from the University of Cambridge.
+A modified version of this code
+is <a href="GraphViz.zip">here</a>
+(this is already bundled with BNT).
+Just type
+<pre>
+draw_graph(G);
+</pre>
+For example, this is the output produced on a
+<a href="http://www.cs.ubc.ca/~murphyk/Software/BNT/usage.html#qmr">random QMR-like model</a>:
+<p>
+<img src="Figures/qmr.rnd.jpg">
+<p>
+
+<h2>Pajek</h2>
+
+<a href="http://vlado.fmf.uni-lj.si/pub/networks/pajek">Pajek</a>
+is an excellent, free Windows program for graph layout.
+Use <a href="adj2pajek2.m">adj2pajek2.m</a> to convert a graph to the
+Pajek file format.
+<br>
+Then Choose File->Network->Read from the menu.
+
+<h2>AT&T Graphviz</h2>
+
+<a href="http://www.research.att.com/sw/tools/graphviz">graphhviz</a>
+is an 
+open-source graph visualization package from AT&T.
+Use
+<a href="graph_to_dot.m">graph_to_dot</a>
+to convert an adjacency matrix to 
+the AT&T file format (the "dot" format).
+You then use dot to convert it to postscript:
+<pre>
+graph_to_dot(G, 'filename', 'foo.dot');
+dot -Tps foo.dot -o foo.ps
+ghostview foo.ps &
+</pre>
diff --git a/sourcecodes/bnt-master/docs/install.html b/sourcecodes/bnt-master/docs/install.html
new file mode 100644
index 00000000..989dd8ff
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/install.html
@@ -0,0 +1,32 @@
+To install, just unzip FullBNT.zip, start Matlab, and proceed as
+follows
+<pre>
+>> cd C:\kmurphy\FullBNT\FullBNT-1.0.4
+>> addpath(genpathKPM(pwd))
+
+Warning: Function C:\kmurphy\FullBNT\FullBNT-1.0.4\KPMtools\isvector.m has the same name as a MATLAB builtin. We suggest you rename the function to avoid a potential name conflict.
+> In path at 110
+  In addpath at 89
+Warning: Function C:\kmurphy\FullBNT\FullBNT-1.0.4\KPMtools\isscalar.m has the same name as a MATLAB builtin. We suggest you rename the function to avoid a potential name conflict.
+> In path at 110
+  In addpath at 89
+Warning: Function C:\kmurphy\FullBNT\FullBNT-1.0.4\KPMtools\assert.m has the same name as a MATLAB builtin. We suggest you rename the function to avoid a potential name conflict.
+> In path at 110
+  In addpath at 89
+
+>> test_BNT
+</pre>
+The genpathKPM function is like the builtin genpath function, but it
+does not add directories called 'Old' to the path, thus preventing old
+versions of functions accidently shadowing new ones.
+The warnings occur because Matlab 7 added functions with the same
+names as my functions. The BNT versions will shadow the built-in ones,
+but this should be harmless.
+<p>
+Note: the functions installC_BNT etc. are not needed anymore: all C
+code has either been removed or is unnecessary.
+<p> Note: as mentioned above, with new versions of matlab you
+will get lots of warning messages, but everything should still work.
+<p> Note: Cory Reith tells me that, as of
+15 Sep 2009,  octave 3.2.2 can run most of BNT.
+Please send email to crieth@ucsd.edu if you have questions.
diff --git a/sourcecodes/bnt-master/docs/join.gif b/sourcecodes/bnt-master/docs/join.gif
new file mode 100644
index 00000000..04692115
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/join.gif
Binary files differdiff --git a/sourcecodes/bnt-master/docs/license.gpl b/sourcecodes/bnt-master/docs/license.gpl
new file mode 100644
index 00000000..6a2d5712
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/license.gpl
@@ -0,0 +1,450 @@
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License version 2 as published by the Free Software Foundation.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+
+GNU Library General Public License
+
+----------------------------------------------------------------------------
+
+Table of Contents
+
+   * GNU LIBRARY GENERAL PUBLIC LICENSE
+        o Preamble
+        o TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+----------------------------------------------------------------------------
+
+GNU LIBRARY GENERAL PUBLIC LICENSE
+
+Version 2, June 1991
+
+Copyright (C) 1991 Free Software Foundation, Inc.
+675 Mass Ave, Cambridge, MA 02139, USA
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+
+[This is the first released version of the library GPL.  It is
+ numbered 2 because it goes with version 2 of the ordinary GPL.]
+
+Preamble
+
+The licenses for most software are designed to take away your freedom to
+share and change it. By contrast, the GNU General Public Licenses are
+intended to guarantee your freedom to share and change free software--to
+make sure the software is free for all its users.
+
+This license, the Library General Public License, applies to some specially
+designated Free Software Foundation software, and to any other libraries
+whose authors decide to use it. You can use it for your libraries, too.
+
+When we speak of free software, we are referring to freedom, not price. Our
+General Public Licenses are designed to make sure that you have the freedom
+to distribute copies of free software (and charge for this service if you
+wish), that you receive source code or can get it if you want it, that you
+can change the software or use pieces of it in new free programs; and that
+you know you can do these things.
+
+To protect your rights, we need to make restrictions that forbid anyone to
+deny you these rights or to ask you to surrender the rights. These
+restrictions translate to certain responsibilities for you if you distribute
+copies of the library, or if you modify it.
+
+For example, if you distribute copies of the library, whether gratis or for
+a fee, you must give the recipients all the rights that we gave you. You
+must make sure that they, too, receive or can get the source code. If you
+link a program with the library, you must provide complete object files to
+the recipients so that they can relink them with the library, after making
+changes to the library and recompiling it. And you must show them these
+terms so they know their rights.
+
+Our method of protecting your rights has two steps: (1) copyright the
+library, and (2) offer you this license which gives you legal permission to
+copy, distribute and/or modify the library.
+
+Also, for each distributor's protection, we want to make certain that
+everyone understands that there is no warranty for this free library. If the
+library is modified by someone else and passed on, we want its recipients to
+know that what they have is not the original version, so that any problems
+introduced by others will not reflect on the original authors' reputations.
+
+Finally, any free program is threatened constantly by software patents. We
+wish to avoid the danger that companies distributing free software will
+individually obtain patent licenses, thus in effect transforming the program
+into proprietary software. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+Most GNU software, including some libraries, is covered by the ordinary GNU
+General Public License, which was designed for utility programs. This
+license, the GNU Library General Public License, applies to certain
+designated libraries. This license is quite different from the ordinary one;
+be sure to read it in full, and don't assume that anything in it is the same
+as in the ordinary license.
+
+The reason we have a separate public license for some libraries is that they
+blur the distinction we usually make between modifying or adding to a
+program and simply using it. Linking a program with a library, without
+changing the library, is in some sense simply using the library, and is
+analogous to running a utility program or application program. However, in a
+textual and legal sense, the linked executable is a combined work, a
+derivative of the original library, and the ordinary General Public License
+treats it as such.
+
+Because of this blurred distinction, using the ordinary General Public
+License for libraries did not effectively promote software sharing, because
+most developers did not use the libraries. We concluded that weaker
+conditions might promote sharing better.
+
+However, unrestricted linking of non-free programs would deprive the users
+of those programs of all benefit from the free status of the libraries
+themselves. This Library General Public License is intended to permit
+developers of non-free programs to use free libraries, while preserving your
+freedom as a user of such programs to change the free libraries that are
+incorporated in them. (We have not seen how to achieve this as regards
+changes in header files, but we have achieved it as regards changes in the
+actual functions of the Library.) The hope is that this will lead to faster
+development of free libraries.
+
+The precise terms and conditions for copying, distribution and modification
+follow. Pay close attention to the difference between a "work based on the
+library" and a "work that uses the library". The former contains code
+derived from the library, while the latter only works together with the
+library.
+
+Note that it is possible for a library to be covered by the ordinary General
+Public License rather than by this special one.
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+0. This License Agreement applies to any software library which contains a
+notice placed by the copyright holder or other authorized party saying it
+may be distributed under the terms of this Library General Public License
+(also called "this License"). Each licensee is addressed as "you".
+
+A "library" means a collection of software functions and/or data prepared so
+as to be conveniently linked with application programs (which use some of
+those functions and data) to form executables.
+
+The "Library", below, refers to any such software library or work which has
+been distributed under these terms. A "work based on the Library" means
+either the Library or any derivative work under copyright law: that is to
+say, a work containing the Library or a portion of it, either verbatim or
+with modifications and/or translated straightforwardly into another
+language. (Hereinafter, translation is included without limitation in the
+term "modification".)
+
+"Source code" for a work means the preferred form of the work for making
+modifications to it. For a library, complete source code means all the
+source code for all modules it contains, plus any associated interface
+definition files, plus the scripts used to control compilation and
+installation of the library.
+
+Activities other than copying, distribution and modification are not covered
+by this License; they are outside its scope. The act of running a program
+using the Library is not restricted, and output from such a program is
+covered only if its contents constitute a work based on the Library
+(independent of the use of the Library in a tool for writing it). Whether
+that is true depends on what the Library does and what the program that uses
+the Library does.
+
+1. You may copy and distribute verbatim copies of the Library's complete
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the notices
+that refer to this License and to the absence of any warranty; and
+distribute a copy of this License along with the Library.
+
+You may charge a fee for the physical act of transferring a copy, and you
+may at your option offer warranty protection in exchange for a fee.
+
+2. You may modify your copy or copies of the Library or any portion of it,
+thus forming a work based on the Library, and copy and distribute such
+modifications or work under the terms of Section 1 above, provided that you
+also meet all of these conditions:
+
+        o a) The modified work must itself be a software library.
+
+        o b) You must cause the files modified to carry prominent notices
+          stating that you changed the files and the date of any change.
+
+        o c) You must cause the whole of the work to be licensed at no
+          charge to all third parties under the terms of this License.
+
+        o d) If a facility in the modified Library refers to a function or a
+          table of data to be supplied by an application program that uses
+          the facility, other than as an argument passed when the facility
+          is invoked, then you must make a good faith effort to ensure that,
+          in the event an application does not supply such function or
+          table, the facility still operates, and performs whatever part of
+          its purpose remains meaningful.
+
+          (For example, a function in a library to compute square roots has
+          a purpose that is entirely well-defined independent of the
+          application. Therefore, Subsection 2d requires that any
+          application-supplied function or table used by this function must
+          be optional: if the application does not supply it, the square
+          root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If identifiable
+sections of that work are not derived from the Library, and can be
+reasonably considered independent and separate works in themselves, then
+this License, and its terms, do not apply to those sections when you
+distribute them as separate works. But when you distribute the same sections
+as part of a whole which is a work based on the Library, the distribution of
+the whole must be on the terms of this License, whose permissions for other
+licensees extend to the entire whole, and thus to each and every part
+regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest your
+rights to work written entirely by you; rather, the intent is to exercise
+the right to control the distribution of derivative or collective works
+based on the Library.
+
+In addition, mere aggregation of another work not based on the Library with
+the Library (or with a work based on the Library) on a volume of a storage
+or distribution medium does not bring the other work under the scope of this
+License.
+
+3. You may opt to apply the terms of the ordinary GNU General Public License
+instead of this License to a given copy of the Library. To do this, you must
+alter all the notices that refer to this License, so that they refer to the
+ordinary GNU General Public License, version 2, instead of to this License.
+(If a newer version than version 2 of the ordinary GNU General Public
+License has appeared, then you can specify that version instead if you
+wish.) Do not make any other change in these notices.
+
+Once this change is made in a given copy, it is irreversible for that copy,
+so the ordinary GNU General Public License applies to all subsequent copies
+and derivative works made from that copy.
+
+This option is useful when you wish to copy part of the code of the Library
+into a program that is not a library.
+
+4. You may copy and distribute the Library (or a portion or derivative of
+it, under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you accompany it with the complete
+corresponding machine-readable source code, which must be distributed under
+the terms of Sections 1 and 2 above on a medium customarily used for
+software interchange.
+
+If distribution of object code is made by offering access to copy from a
+designated place, then offering equivalent access to copy the source code
+from the same place satisfies the requirement to distribute the source code,
+even though third parties are not compelled to copy the source along with
+the object code.
+
+5. A program that contains no derivative of any portion of the Library, but
+is designed to work with the Library by being compiled or linked with it, is
+called a "work that uses the Library". Such a work, in isolation, is not a
+derivative work of the Library, and therefore falls outside the scope of
+this License.
+
+However, linking a "work that uses the Library" with the Library creates an
+executable that is a derivative of the Library (because it contains portions
+of the Library), rather than a "work that uses the library". The executable
+is therefore covered by this License. Section 6 states terms for
+distribution of such executables.
+
+When a "work that uses the Library" uses material from a header file that is
+part of the Library, the object code for the work may be a derivative work
+of the Library even though the source code is not. Whether this is true is
+especially significant if the work can be linked without the Library, or if
+the work is itself a library. The threshold for this to be true is not
+precisely defined by law.
+
+If such an object file uses only numerical parameters, data structure
+layouts and accessors, and small macros and small inline functions (ten
+lines or less in length), then the use of the object file is unrestricted,
+regardless of whether it is legally a derivative work. (Executables
+containing this object code plus portions of the Library will still fall
+under Section 6.)
+
+Otherwise, if the work is a derivative of the Library, you may distribute
+the object code for the work under the terms of Section 6. Any executables
+containing that work also fall under Section 6, whether or not they are
+linked directly with the Library itself.
+
+6. As an exception to the Sections above, you may also compile or link a
+"work that uses the Library" with the Library to produce a work containing
+portions of the Library, and distribute that work under terms of your
+choice, provided that the terms permit modification of the work for the
+customer's own use and reverse engineering for debugging such modifications.
+
+You must give prominent notice with each copy of the work that the Library
+is used in it and that the Library and its use are covered by this License.
+You must supply a copy of this License. If the work during execution
+displays copyright notices, you must include the copyright notice for the
+Library among them, as well as a reference directing the user to the copy of
+this License. Also, you must do one of these things:
+
+        o a) Accompany the work with the complete corresponding
+          machine-readable source code for the Library including whatever
+          changes were used in the work (which must be distributed under
+          Sections 1 and 2 above); and, if the work is an executable linked
+          with the Library, with the complete machine-readable "work that
+          uses the Library", as object code and/or source code, so that the
+          user can modify the Library and then relink to produce a modified
+          executable containing the modified Library. (It is understood that
+          the user who changes the contents of definitions files in the
+          Library will not necessarily be able to recompile the application
+          to use the modified definitions.)
+
+        o b) Accompany the work with a written offer, valid for at least
+          three years, to give the same user the materials specified in
+          Subsection 6a, above, for a charge no more than the cost of
+          performing this distribution.
+
+        o c) If distribution of the work is made by offering access to copy
+          from a designated place, offer equivalent access to copy the above
+          specified materials from the same place.
+
+        o d) Verify that the user has already received a copy of these
+          materials or that you have already sent this user a copy.
+
+For an executable, the required form of the "work that uses the Library"
+must include any data and utility programs needed for reproducing the
+executable from it. However, as a special exception, the source code
+distributed need not include anything that is normally distributed (in
+either source or binary form) with the major components (compiler, kernel,
+and so on) of the operating system on which the executable runs, unless that
+component itself accompanies the executable.
+
+It may happen that this requirement contradicts the license restrictions of
+other proprietary libraries that do not normally accompany the operating
+system. Such a contradiction means you cannot use both them and the Library
+together in an executable that you distribute.
+
+7. You may place library facilities that are a work based on the Library
+side-by-side in a single library together with other library facilities not
+covered by this License, and distribute such a combined library, provided
+that the separate distribution of the work based on the Library and of the
+other library facilities is otherwise permitted, and provided that you do
+these two things:
+
+        o a) Accompany the combined library with a copy of the same work
+          based on the Library, uncombined with any other library
+          facilities. This must be distributed under the terms of the
+          Sections above.
+
+        o b) Give prominent notice with the combined library of the fact
+          that part of it is a work based on the Library, and explaining
+          where to find the accompanying uncombined form of the same work.
+
+8. You may not copy, modify, sublicense, link with, or distribute the
+Library except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense, link with, or distribute the Library
+is void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under this
+License will not have their licenses terminated so long as such parties
+remain in full compliance.
+
+9. You are not required to accept this License, since you have not signed
+it. However, nothing else grants you permission to modify or distribute the
+Library or its derivative works. These actions are prohibited by law if you
+do not accept this License. Therefore, by modifying or distributing the
+Library (or any work based on the Library), you indicate your acceptance of
+this License to do so, and all its terms and conditions for copying,
+distributing or modifying the Library or works based on it.
+
+10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the original
+licensor to copy, distribute, link with or modify the Library subject to
+these terms and conditions. You may not impose any further restrictions on
+the recipients' exercise of the rights granted herein. You are not
+responsible for enforcing compliance by third parties to this License.
+
+11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot distribute so
+as to satisfy simultaneously your obligations under this License and any
+other pertinent obligations, then as a consequence you may not distribute
+the Library at all. For example, if a patent license would not permit
+royalty-free redistribution of the Library by all those who receive copies
+directly or indirectly through you, then the only way you could satisfy both
+it and this License would be to refrain entirely from distribution of the
+Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents
+or other property right claims or to contest validity of any such claims;
+this section has the sole purpose of protecting the integrity of the free
+software distribution system which is implemented by public license
+practices. Many people have made generous contributions to the wide range of
+software distributed through that system in reliance on consistent
+application of that system; it is up to the author/donor to decide if he or
+she is willing to distribute software through any other system and a
+licensee cannot impose that choice.
+
+This section is intended to make thoroughly clear what is believed to be a
+consequence of the rest of this License.
+
+12. If the distribution and/or use of the Library is restricted in certain
+countries either by patents or by copyrighted interfaces, the original
+copyright holder who places the Library under this License may add an
+explicit geographical distribution limitation excluding those countries, so
+that distribution is permitted only in or among countries not thus excluded.
+In such case, this License incorporates the limitation as if written in the
+body of this License.
+
+13. The Free Software Foundation may publish revised and/or new versions of
+the Library General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Library does not specify a license version
+number, you may choose any version ever published by the Free Software
+Foundation.
+
+14. If you wish to incorporate parts of the Library into other free programs
+whose distribution conditions are incompatible with these, write to the
+author to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals of
+preserving the free status of all derivatives of our free software and of
+promoting the sharing and reuse of software generally.
+
+NO WARRANTY
+
+15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
+THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO
+THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY
+PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
+CORRECTION.
+
+16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO
+LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR
+THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER
+SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License version 2 as published by the Free Software Foundation.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+
+
diff --git a/sourcecodes/bnt-master/docs/majorFeatures.html b/sourcecodes/bnt-master/docs/majorFeatures.html
new file mode 100644
index 00000000..11005a85
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/majorFeatures.html
@@ -0,0 +1,113 @@
+
+<h2><a name="features">Major features</h2> 
+<ul> 
+ 
+<li> BNT supports many types of
+<b>conditional probability distributions</b> (nodes),
+and it is easy to add more.
+<ul> 
+<li>Tabular (multinomial)
+<li>Gaussian
+<li>Softmax (logistic/ sigmoid)
+<li>Multi-layer perceptron (neural network)
+<li>Noisy-or
+<li>Deterministic
+</ul> 
+<p> 
+ 
+<li> BNT supports <b>decision and utility nodes</b>, as well as chance
+nodes,
+i.e., influence diagrams as well as Bayes nets.
+<p> 
+ 
+<li> BNT supports static and dynamic BNs (useful for modelling dynamical systems
+and sequence data).
+<p> 
+ 
+<li> BNT supports many different <b>inference algorithms</b>,
+and it is easy to add more.
+ 
+<ul> 
+<li> Exact inference for static BNs:
+<ul> 
+<li>junction tree
+<li>variable elimination
+<li>brute force enumeration (for discrete nets)
+<li>linear algebra (for Gaussian nets)
+<li>Pearl's algorithm (for polytrees)
+<li>quickscore (for QMR)
+</ul> 
+ 
+<p> 
+<li> Approximate inference for static BNs:
+<ul> 
+<li>likelihood weighting
+<li> Gibbs sampling
+<li>loopy belief propagation
+</ul> 
+ 
+<p> 
+<li> Exact inference for DBNs:
+<ul> 
+<li>junction tree
+<li>frontier algorithm
+<li>forwards-backwards (for HMMs)
+<li>Kalman-RTS (for LDSs)
+</ul> 
+ 
+<p> 
+<li> Approximate inference for DBNs:
+<ul> 
+<li>Boyen-Koller
+<li>factored-frontier/loopy belief propagation
+</ul> 
+ 
+</ul> 
+<p> 
+ 
+<li> 
+BNT supports several methods for <b>parameter learning</b>,
+and it is easy to add more.
+<ul> 
+ 
+<li> Batch MLE/MAP parameter learning using EM.
+(Each node type has its own M method, e.g. softmax nodes use IRLS,<br> 
+and each inference engine has its own E method, so the code is fully modular.)
+ 
+<li> Sequential/batch Bayesian parameter learning (for fully observed tabular nodes only).
+</ul> 
+ 
+ 
+<p> 
+<li> 
+BNT supports several methods for <b>regularization</b>,
+and it is easy to add more.
+<ul> 
+<li> Any node can have its parameters clamped (made non-adjustable).
+<li> Any set of compatible nodes can have their parameters tied (c.f.,
+weight sharing in a neural net).
+<li> Some node types (e.g., tabular) supports priors for MAP estimation.
+<li> Gaussian covariance matrices can be declared full or diagonal, and can
+be tied across states of their discrete parents (if any).
+</ul> 
+ 
+<p> 
+<li> 
+BNT supports several methods for <b>structure learning</b>,
+and it is easy to add more.
+<ul> 
+ 
+<li> Bayesian structure learning,
+using MCMC or local search (for fully observed tabular nodes only).
+ 
+<li> Constraint-based structure learning (IC/PC and IC*/FCI).
+</ul> 
+ 
+ 
+<p> 
+<li> The source code is extensively documented, object-oriented, and free, making it
+an excellent tool for teaching, research and rapid prototyping.
+ 
+</ul> 
+ 
+ 
\ No newline at end of file
diff --git a/sourcecodes/bnt-master/docs/mathbymatlab.gif b/sourcecodes/bnt-master/docs/mathbymatlab.gif
new file mode 100644
index 00000000..0de8d7a0
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/mathbymatlab.gif
Binary files differdiff --git a/sourcecodes/bnt-master/docs/matlab_comparison.html b/sourcecodes/bnt-master/docs/matlab_comparison.html
new file mode 100644
index 00000000..bdf75aae
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/matlab_comparison.html
@@ -0,0 +1,62 @@
+<html> <head>
+<title>Comparison of Matlab, R/S/Splus, Gauss, etc.</title>
+</head>
+
+<body>
+<!--<body  bgcolor="#FFFFFF"> -->
+
+<h1>Comparison of Matlab, R/S/Splus, Gauss,  etc.</h1>
+
+<ul>
+<li> <a href="http://www.scientificweb.com/ncrunch/">Comparison of
+mathematical programs for data analysis</a>,
+Stefan Steinhaus, tech report, 2000.
+<br>
+This is a very detailed comparison of features and speed of several
+interactive scientific programming environments, e.g. Matlab,
+Mathematica, Splus.
+
+
+<!--
+<p>
+<li> <a href="Papers/gauss.econ.review.ps">Econometric
+programming environments: Gauss, Ox and S-PLUS</a>,
+Francisco Cribari-Neto.
+J. of Applied Econometrics, 12(1):77-89, 1997
+<br>
+Ox can not be used interactively, and has a C-style syntax (it even
+requires users to pre-declare variables!). Its only advantage is speed.
+S-Plus has tons of features and good documentation, but is slow.
+Gauss is somewhere in between.
+
+
+<p>
+<li> <a href="Papers/matlab.econ.review.ps">MATLAB as an econometric
+programming environment</a>,
+Francisco Cribari-Neto and Mark J. Jensen.
+J. of Applied Econometrics, 12(6):735-432, 1997.
+<br>
+The basic conclusion is that Matlab has excellent graphics and
+sparse-matrix facilities, but is slower than Gauss/Ox (especially on
+code 
+with loops), and has few statistical routines built-in (one must buy the
+stats toolbox).
+
+
+
+<p>
+<li> <a href="Papers/R.econ.review.ps">R: Yet another  econometric
+programming environment</a>,
+Francisco Cribari-Neto and S. Zarkos.
+J. of Applied Econometrics, 14(3):319-329, 1999.
+<br>
+The basic conclusion is that R is much faster than Splus on
+code with loops, but a little bit slower on vectorized code. (Gauss/
+Ox is much faster than both; in my experience, R and Matlab have about
+the same speed.)
+However, R has much better memory management than Splus, and R is free. Otherwise, R/S/Splus
+are essentially the same.
+-->
+
+
+</ul>
diff --git a/sourcecodes/bnt-master/docs/numDAGsEqn.png b/sourcecodes/bnt-master/docs/numDAGsEqn.png
new file mode 100644
index 00000000..3524947b
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/numDAGsEqn.png
Binary files differdiff --git a/sourcecodes/bnt-master/docs/numDAGsEqn2.png b/sourcecodes/bnt-master/docs/numDAGsEqn2.png
new file mode 100644
index 00000000..0898c969
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/numDAGsEqn2.png
Binary files differdiff --git a/sourcecodes/bnt-master/docs/param_tieing.html b/sourcecodes/bnt-master/docs/param_tieing.html
new file mode 100644
index 00000000..b426fe30
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/param_tieing.html
@@ -0,0 +1,47 @@
+
+<h2>Example of more complex parameter tieing</h2>
+
+We now give a more complex pattern of parameter tieing.
+(This example is due to Rainer Deventer.)
+The structure is as follows:
+<p>
+<img src="Figures/rainer_tied.gif" height="400">
+<!--<img src="rainer_dbn.jpg" height="600">-->
+<p>
+Since nodes 2 and 3 in slice 2 (N7 and N8)
+have different parents than their counterparts in slice 1 (N2 and N3),
+they must be put into different equivalence classes.
+Hence we define
+<pre>
+eclass1 = [1 2 3 4 5];
+eclass2 = [1 6 7 4 5];
+</pre>
+The dotted bubbles represent the equivalence classes.
+Node 7 is the representative node for equivalence class
+6, and node 8 is the rep. for class 7, so we need to write
+<pre>
+bnet.CPD{6} = xxx_CPD(bnet, 7, xxx);
+bnet.CPD{7} = xxx_CPD(bnet, 8, xxx);
+</pre>
+In general, you can use the following code fragment:
+<pre>
+eclass = bnet.equiv_class(:);
+for e=1:max(eclass)
+  i = bnet.rep_of_eclass(e);
+  bnet.CPD{e} = xxx_CPD(bnet,i);
+end
+</pre>
+<!--
+which is equivalent to
+<pre>
+E = max(eclass);
+rep = zeros(1,E);
+for e=1:E
+  mems = find(eclass==e);
+  rep(e) = mems(1);
+end
+for e=1:E
+  bnet.CPD{e} = xxx_CPD(bnet, rep(e));
+end
+</pre>
+-->
diff --git a/sourcecodes/bnt-master/docs/supportedModels.html b/sourcecodes/bnt-master/docs/supportedModels.html
new file mode 100644
index 00000000..af29d18e
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/supportedModels.html
@@ -0,0 +1,32 @@
+ <h2><a name="models">Supported probabilistic models</h2> 
+<p> 
+It is trivial to implement all of
+the following probabilistic models using the toolbox.
+<ul> 
+<li>Static
+<ul> 
+<li> Linear regression, logistic regression, hierarchical mixtures of experts
+ 
+<li> Naive Bayes classifiers, mixtures of Gaussians,
+sigmoid belief nets
+ 
+<li> Factor analysis, probabilistic
+PCA, probabilistic ICA, mixtures of these models
+ 
+</ul> 
+ 
+<li>Dynamic
+<ul> 
+ 
+<li> HMMs, Factorial HMMs, coupled HMMs, input-output HMMs, DBNs
+ 
+<li> Kalman filters, ARMAX models, switching Kalman filters,
+tree-structured Kalman filters, multiscale AR models
+ 
+</ul> 
+ 
+<li> Many other combinations, for which there are (as yet) no names!
+ 
+</ul> 
+ 
+ 
\ No newline at end of file
diff --git a/sourcecodes/bnt-master/docs/usage.html b/sourcecodes/bnt-master/docs/usage.html
new file mode 100644
index 00000000..018301e3
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/usage.html
@@ -0,0 +1,3072 @@
+<HEAD>
+<TITLE>How to use the Bayes Net Toolbox</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF">
+<!-- white background is better for the pictures and equations -->
+
+<h1>How to use the Bayes Net Toolbox</h1>
+
+This documentation was last updated on 29 October 2007.
+<br>
+Click
+<a href="http://bnt.insa-rouen.fr/">here</a>
+for a French version of this documentation (last updated in 2005).
+<p>
+
+<ul>
+<li> <a href="install.html">Installation</a>
+
+<li> <a href="#basics">Creating your first Bayes net</a>
+  <ul>
+  <li> <a href="#basics">Creating a model by hand</a>
+  <li> <a href="#file">Loading a model from a file</a>
+  <li> <a href="#GUI">Creating a model using a GUI</a>
+  <li> <a href="graphviz.html">Graph visualization</a>
+  </ul>
+
+<li> <a href="#inference">Inference</a>
+  <ul>
+  <li> <a href="#marginal">Computing marginal distributions</a>
+  <li> <a href="#joint">Computing joint distributions</a>
+  <li> <a href="#soft">Soft/virtual evidence</a>
+  <li> <a href="#mpe">Most probable explanation</a>
+  </ul>
+
+<li> <a href="#cpd">Conditional Probability Distributions</a>
+  <ul>
+  <li> <a href="#tabular">Tabular (multinomial) nodes</a>
+  <li> <a href="#noisyor">Noisy-or nodes</a>
+  <li> <a href="#deterministic">Other (noisy) deterministic nodes</a>
+  <li> <a href="#softmax">Softmax (multinomial logit) nodes</a>
+  <li> <a href="#mlp">Neural network nodes</a>
+  <li> <a href="#root">Root nodes</a>
+  <li> <a href="#gaussian">Gaussian nodes</a>
+  <li> <a href="#glm">Generalized linear model nodes</a>
+  <li> <a href="#dtree">Classification/regression tree nodes</a>
+  <li> <a href="#nongauss">Other continuous distributions</a>
+  <li> <a href="#cpd_summary">Summary of CPD types</a>
+  </ul>
+
+<li> <a href="#examples">Example models</a>
+  <ul>
+  <li> <a
+  href="http://www.media.mit.edu/wearables/mithril/BNT/mixtureBNT.txt">
+Gaussian mixture models</a>
+  <li> <a href="#pca">PCA, ICA, and all that</a>
+  <li> <a href="#mixep">Mixtures of experts</a>
+  <li> <a href="#hme">Hierarchical mixtures of experts</a>
+  <li> <a href="#qmr">QMR</a>
+  <li> <a href="#cg_model">Conditional Gaussian models</a>
+  <li> <a href="#hybrid">Other hybrid models</a>
+  </ul>
+
+<li> <a href="#param_learning">Parameter learning</a>
+  <ul>
+  <li> <a href="#load_data">Loading data from a file</a>
+  <li> <a href="#mle_complete">Maximum likelihood parameter estimation from complete data</a>
+  <li> <a href="#prior">Parameter priors</a>
+  <li> <a href="#bayes_learn">(Sequential) Bayesian parameter updating from complete data</a>
+  <li> <a href="#em">Maximum likelihood parameter estimation with  missing values (EM)</a>
+  <li> <a href="#tying">Parameter tying</a>
+  </ul>
+
+<li> <a href="#structure_learning">Structure learning</a>
+  <ul>
+  <li> <a href="#enumerate">Exhaustive search</a>
+  <li> <a href="#K2">K2</a>
+  <li> <a href="#hill_climb">Hill-climbing</a>
+  <li> <a href="#mcmc">MCMC</a>
+  <li> <a href="#active">Active learning</a>
+  <li> <a href="#struct_em">Structural EM</a>
+  <li> <a href="#graphdraw">Visualizing the learned graph  structure</a>
+  <li> <a href="#constraint">Constraint-based methods</a>
+  </ul>
+
+
+<li> <a href="#engines">Inference engines</a>
+  <ul>
+  <li> <a href="#jtree">Junction tree</a>
+  <li> <a href="#varelim">Variable elimination</a>
+  <li> <a href="#global">Global inference methods</a>
+  <li> <a href="#quickscore">Quickscore</a>
+  <li> <a href="#belprop">Belief propagation</a>
+  <li> <a href="#sampling">Sampling (Monte Carlo)</a>
+  <li> <a href="#engine_summary">Summary of inference engines</a>
+  </ul>
+
+
+<li> <a href="#influence">Influence diagrams/ decision making</a>
+
+
+<li> <a href="usage_dbn.html">DBNs, HMMs, Kalman filters and all that</a>
+</ul>
+
+</ul>
+
+
+
+<h1><a name="basics">Creating your first Bayes net</h1>
+
+To define a Bayes net, you must specify the graph structure and then
+the parameters. We look at each in turn, using a simple example
+(adapted from Russell and
+Norvig, "Artificial Intelligence: a Modern Approach", Prentice Hall,
+1995, p454).
+
+
+<h2>Graph structure</h2>
+
+
+Consider the following network.
+
+<p>
+<center>
+<IMG SRC="Figures/sprinkler.gif">
+</center>
+<p>
+
+<P>
+To specify this directed acyclic graph (dag), we create an adjacency matrix:
+<PRE>
+N = 4; 
+dag = zeros(N,N);
+C = 1; S = 2; R = 3; W = 4;
+dag(C,[R S]) = 1;
+dag(R,W) = 1;
+dag(S,W)=1;
+</PRE>
+<P>
+We have numbered the nodes as follows:
+Cloudy = 1, Sprinkler = 2, Rain = 3, WetGrass = 4.
+<b>The nodes must always be numbered in topological order, i.e.,
+ancestors before descendants.</b>
+For a more complicated graph, this is a little inconvenient: we will
+see how to get around this <a href="usage_dbn.html#bat">below</a>.
+<p>
+In Matlab 6, you can use logical arrays instead of double arrays,
+which are 4 times smaller:
+<pre>
+dag = false(N,N);
+dag(C,[R S]) = true;
+...
+</pre>
+However, <b>some graph functions (eg acyclic) do not work on
+logical arrays</b>!
+<p>
+You can visualize the resulting  graph structure using
+the methods discussed <a href="#graphdraw">below</a>.
+For details on GUIs,
+click <a href="#GUI">here</a>.
+
+<h2>Creating the Bayes net shell</h2>
+
+In addition to specifying the graph structure,
+we must specify the size and type of each node.
+If a node is discrete, its size is the
+number of possible values
+each node can take on; if a node is continuous,
+it can be a vector, and its size is the length of this vector.
+In this case, we will assume all nodes are discrete and binary.
+<PRE>
+discrete_nodes = 1:N;
+node_sizes = 2*ones(1,N); 
+</pre>
+If the nodes were not binary, you could type e.g., 
+<pre>
+node_sizes = [4 2 3 5];
+</pre>
+meaning that Cloudy has 4 possible values, 
+Sprinkler has 2 possible values, etc.
+Note that these are cardinal values, not ordinal, i.e., 
+they are not ordered in any way, like 'low', 'medium', 'high'.
+<p>
+We are now ready to make the Bayes net:
+<pre>
+bnet = mk_bnet(dag, node_sizes, 'discrete', discrete_nodes);
+</PRE>
+By default, all nodes are assumed to be discrete, so we can also just
+write
+<pre>
+bnet = mk_bnet(dag, node_sizes);
+</PRE>
+You may also specify which nodes will be observed.
+If you don't know, or if this not fixed in advance,
+just use the empty list (the default).
+<pre>
+onodes = [];
+bnet = mk_bnet(dag, node_sizes, 'discrete', discrete_nodes, 'observed', onodes);
+</PRE>
+Note that optional arguments are specified using a name/value syntax.
+This is common for many BNT functions.
+In general, to find out more about a function (e.g., which optional
+arguments it takes), please see its
+documentation string by typing
+<pre>
+help mk_bnet
+</pre>
+See also other <a href="matlab_tips.html">useful Matlab tips</a>.
+<p>
+It is possible to associate names with nodes, as follows:
+<pre>
+bnet = mk_bnet(dag, node_sizes, 'names', {'cloudy','S','R','W'}, 'discrete', 1:4);
+</pre>
+You can then refer to a node by its name:
+<pre>
+C = bnet.names('cloudy'); % bnet.names is an associative array
+bnet.CPD{C} = tabular_CPD(bnet, C, [0.5 0.5]);
+</pre>
+This feature uses my own associative array class.
+
+
+<h2><a name="cpt">Parameters</h2>
+
+A model consists of the graph structure and the parameters.
+The parameters are represented by CPD objects (CPD = Conditional
+Probability Distribution), which define the probability distribution
+of a node given its parents.
+(We will use the terms "node" and "random variable" interchangeably.)
+The simplest kind of CPD is a table (multi-dimensional array), which
+is suitable when all the nodes are discrete-valued. Note that the discrete
+values are not assumed to be ordered in any way; that is, they
+represent categorical quantities, like male and female, rather than
+ordinal quantities, like low, medium and high.
+(We will discuss CPDs in more detail <a href="#cpd">below</a>.)
+<p>
+Tabular CPDs, also called CPTs (conditional probability tables),
+are stored as multidimensional arrays, where the dimensions
+are arranged in the same order as the nodes, e.g., the CPT for node 4
+(WetGrass) is indexed by Sprinkler (2), Rain (3) and then WetGrass (4) itself.
+Hence the child is always the last dimension.
+If a node has no parents, its CPT is a column vector representing its
+prior.
+Note that in Matlab (unlike C), arrays are indexed
+from 1, and are layed out in memory such that the first index toggles
+fastest, e.g., the CPT for node 4 (WetGrass) is as follows
+<P>
+<P><IMG ALIGN=BOTTOM SRC="Figures/CPTgrass.gif"><P>
+<P>
+where we have used the convention that false==1, true==2.
+We can create this CPT in Matlab as follows
+<PRE>
+CPT = zeros(2,2,2);
+CPT(1,1,1) = 1.0;
+CPT(2,1,1) = 0.1;
+...
+</PRE>
+Here is an easier way:
+<PRE>
+CPT = reshape([1 0.1 0.1 0.01 0 0.9 0.9 0.99], [2 2 2]);
+</PRE>
+In fact, we don't need to reshape the array, since the CPD constructor
+will do that for us. So we can just write
+<pre>
+bnet.CPD{W} = tabular_CPD(bnet, W, 'CPT', [1 0.1 0.1 0.01 0 0.9 0.9 0.99]);
+</pre>
+The other nodes are created similarly (using the old syntax for
+optional parameters)
+<PRE>
+bnet.CPD{C} = tabular_CPD(bnet, C, [0.5 0.5]);
+bnet.CPD{R} = tabular_CPD(bnet, R, [0.8 0.2 0.2 0.8]);
+bnet.CPD{S} = tabular_CPD(bnet, S, [0.5 0.9 0.5 0.1]);
+bnet.CPD{W} = tabular_CPD(bnet, W, [1 0.1 0.1 0.01 0 0.9 0.9 0.99]);
+</PRE>
+
+
+<h2><a name="rnd_cpt">Random Parameters</h2>
+
+If we do not specify the CPT, random parameters will be
+created, i.e., each "row" of the CPT will be drawn from the uniform distribution.
+To ensure repeatable results, use
+<pre>
+rand('state', seed);
+randn('state', seed);
+</pre>
+To control the degree of randomness (entropy),
+you can sample each row of the CPT from a Dirichlet(p,p,...) distribution.
+If p << 1, this encourages "deterministic" CPTs (one entry near 1, the rest near 0).
+If p = 1, each entry is drawn from U[0,1].
+If p >> 1, the entries will all be near 1/k, where k is the arity of
+this node, i.e., each row will be nearly uniform.
+You can do this as follows, assuming this node
+is number i, and ns is the node_sizes.
+<pre>
+k = ns(i);
+ps = parents(dag, i);
+psz = prod(ns(ps));
+CPT = sample_dirichlet(p*ones(1,k), psz);
+bnet.CPD{i} = tabular_CPD(bnet, i, 'CPT', CPT);
+</pre>
+
+
+<h2><a name="file">Loading a network from a file</h2>
+
+If you already have a Bayes net represented in the XML-based
+<a href="http://www.cs.cmu.edu/afs/cs/user/fgcozman/www/Research/InterchangeFormat/">
+Bayes Net Interchange Format (BNIF)</a> (e.g., downloaded from the 
+<a
+href="http://www.cs.huji.ac.il/labs/compbio/Repository">
+Bayes Net repository</a>),
+you can convert it to BNT format using
+the 
+<a href="http://www.digitas.harvard.edu/~ken/bif2bnt/">BIF-BNT Java
+program</a> written by Ken Shan.
+(This is not necessarily up-to-date.)
+<p>
+<b>It is currently not possible to save/load a BNT matlab object to
+file</b>, but this is easily fixed if you modify all the constructors
+for all the classes (see matlab documentation).
+
+<h2><a name="GUI">Creating a model using a GUI</h2>
+
+<ul>
+<li>Senthil Nachimuthu
+has started (Oct 07) an open source
+GUI for BNT called
+<a href="http://projeny.sourceforge.net">projeny</a>
+using Java. This is a successor to BNJ.
+
+<li>
+Philippe LeRay has written (Sep 05)
+a
+<a href="http://banquiseasi.insa-rouen.fr/projects/bnt-editor/">
+BNT GUI</a> in matlab.
+
+<li>
+<a
+href="http://www.dataonstage.com/BNT/PACKAGES/LinkStrength/index.html">
+LinkStrength</a>,
+ a package by Imme Ebert-Uphoff for visualizing the strength of
+dependencies between nodes.
+
+</ul>
+
+<h2>Graph visualization</h2>
+
+Click <a href="graphviz.html">here</a> for more information
+on graph visualization.
+
+
+<h1><a name="inference">Inference</h1>
+
+Having created the BN, we can now use it for inference.
+There are many different algorithms for doing inference in Bayes nets,
+that make different tradeoffs between speed, 
+complexity, generality, and accuracy.
+BNT therefore offers a variety of different inference
+"engines". We will discuss these
+in more detail <a href="#engines">below</a>.
+For now, we will use the junction tree
+engine, which is the mother of all exact inference algorithms.
+This can be created as follows.
+<pre>
+engine = jtree_inf_engine(bnet);
+</pre>
+The other engines have similar constructors, but might take
+additional, algorithm-specific parameters.
+All engines are used in the same way, once they have been created.
+We illustrate this in the following sections.
+
+
+<h2><a name="marginal">Computing marginal distributions</h2>
+
+Suppose we want to compute the probability that the sprinker was on
+given that the grass is wet.
+The evidence consists of the fact that W=2. All the other nodes
+are hidden (unobserved). We can specify this as follows.
+<pre>
+evidence = cell(1,N);
+evidence{W} = 2;
+</pre>
+We use a 1D cell array instead of a vector to
+cope with the fact that nodes can be vectors of different lengths.
+In addition, the value [] can be used
+to denote 'no evidence', instead of having to specify the observation
+pattern as a separate argument.
+(Click <a href="cellarray.html">here</a> for a quick tutorial on cell
+arrays in matlab.)
+<p>
+We are now ready to add the evidence to the engine.
+<pre>
+[engine, loglik] = enter_evidence(engine, evidence);
+</pre>
+The behavior of this function is algorithm-specific, and is discussed
+in more detail <a href="#engines">below</a>.
+In the case of the jtree engine,
+enter_evidence implements a two-pass message-passing scheme.
+The first return argument contains the modified engine, which
+incorporates the evidence. The second return argument contains the
+log-likelihood of the evidence. (Not all engines are capable of
+computing the log-likelihood.)
+<p>
+Finally, we can compute p=P(S=2|W=2) as follows.
+<PRE>
+marg = marginal_nodes(engine, S);
+marg.T
+ans =
+      0.57024
+      0.42976
+p = marg.T(2);
+</PRE>
+We see that p = 0.4298.
+<p>
+Now let us add the evidence that it was raining, and see what
+difference it makes.
+<PRE>
+evidence{R} = 2;
+[engine, loglik] = enter_evidence(engine, evidence);
+marg = marginal_nodes(engine, S);
+p = marg.T(2);
+</PRE>
+We find that p = P(S=2|W=2,R=2) = 0.1945,
+which is lower than
+before, because the rain can ``explain away'' the
+fact that the grass is wet.
+<p>
+You can plot a marginal distribution over a discrete variable
+as a barchart using the built 'bar' function:
+<pre>
+bar(marg.T)
+</pre>
+This is what it looks like
+
+<p>
+<center>
+<IMG SRC="Figures/sprinkler_bar.gif">
+</center>
+<p>
+
+<h2><a name="observed">Observed nodes</h2>
+
+What happens if we ask for the marginal on an observed node, e.g. P(W|W=2)?
+An observed discrete node effectively only has 1 value (the observed
+      one) --- all other values would result in 0 probability.
+For efficiency, BNT treats observed (discrete) nodes as if they were
+      set to 1, as we see below:
+<pre>
+evidence = cell(1,N);
+evidence{W} = 2;
+engine = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, W);
+m.T
+ans =
+     1
+</pre>
+This can get a little confusing, since we assigned W=2.
+So we can ask BNT to add the evidence back in by passing in an optional argument:
+<pre>
+m = marginal_nodes(engine, W, 1);
+m.T
+ans =
+     0
+     1
+</pre>
+This shows that P(W=1|W=2) = 0 and P(W=2|W=2) = 1.
+
+
+
+<h2><a name="joint">Computing joint distributions</h2>
+
+We can compute the joint probability on a set of nodes as in the
+following example.
+<pre>
+evidence = cell(1,N);
+[engine, ll] = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, [S R W]);
+</pre>
+m is a structure. The 'T' field is a multi-dimensional array (in
+this case, 3-dimensional) that contains the joint probability
+distribution on the specified nodes.
+<pre>
+>> m.T
+ans(:,:,1) =
+    0.2900    0.0410
+    0.0210    0.0009
+ans(:,:,2) =
+         0    0.3690
+    0.1890    0.0891
+</pre>
+We see that P(S=1,R=1,W=2) = 0, since it is impossible for the grass
+to be wet if both the rain and sprinkler are off.
+<p>
+Let us now add some evidence to R.
+<pre>
+evidence{R} = 2;
+[engine, ll] = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, [S R W])
+m = 
+    domain: [2 3 4]
+         T: [2x1x2 double]
+>> m.T
+m.T
+ans(:,:,1) =
+    0.0820
+    0.0018
+ans(:,:,2) =
+    0.7380
+    0.1782
+</pre>
+The joint T(i,j,k) = P(S=i,R=j,W=k|evidence)
+should have T(i,1,k) = 0 for all i,k, since R=1 is incompatible
+with the evidence that R=2.
+Instead of creating large tables with many 0s, BNT sets the effective
+size of observed (discrete) nodes to 1, as explained above.
+This is why m.T has size 2x1x2.
+To get a 2x2x2 table, type
+<pre>
+m = marginal_nodes(engine, [S R W], 1)
+m = 
+    domain: [2 3 4]
+         T: [2x2x2 double]
+>> m.T
+m.T
+ans(:,:,1) =
+            0        0.082
+            0       0.0018
+ans(:,:,2) =
+            0        0.738
+            0       0.1782
+</pre>
+
+<p>
+Note: It is not always possible to compute the joint on arbitrary
+sets of nodes: it depends on which inference engine you use, as discussed 
+in more detail <a href="#engines">below</a>. 
+
+
+<h2><a name="soft">Soft/virtual evidence</h2>
+
+Sometimes a node is not observed, but we have some distribution over
+its possible values; this is often called "soft" or "virtual"
+evidence.
+One can use this as follows
+<pre>
+[engine, loglik] = enter_evidence(engine, evidence, 'soft', soft_evidence);
+</pre>
+where soft_evidence{i} is either [] (if node i has no soft evidence)
+or is a vector representing the probability distribution over i's
+possible values.
+For example, if we don't know i's exact value, but we know its
+likelihood ratio is 60/40, we can write evidence{i} = [] and
+soft_evidence{i} = [0.6 0.4].
+<p>
+Currently only jtree_inf_engine supports this option.
+It assumes that all hidden nodes, and all nodes for
+which we have soft evidence, are discrete.
+For a longer example, see BNT/examples/static/softev1.m. 
+
+
+<h2><a name="mpe">Most probable explanation</h2>
+
+To compute the most probable explanation (MPE) of the evidence (i.e.,
+the most probable assignment, or a mode of the joint), use
+<pre>
+[mpe, ll] = calc_mpe(engine, evidence);     
+</pre>
+mpe{i} is the most likely value of node i.
+This calls enter_evidence with the 'maximize' flag set to 1, which
+causes the engine to do max-product instead of sum-product.
+The resulting max-marginals are then thresholded.
+If there is more than one maximum probability assignment, we must take 
+    care to break ties in a consistent manner (thresholding the
+    max-marginals may give the wrong result). To force this behavior,
+    type
+<pre>
+[mpe, ll] = calc_mpe(engine, evidence, 1);     
+</pre>
+Note that computing the MPE is someties called abductive reasoning.
+    
+<p>
+You can also use <tt>calc_mpe_bucket</tt> written by Ron Zohar,
+that does a forwards max-product pass, and then a backwards traceback
+pass, which is how Viterbi is traditionally implemented.
+
+
+
+<h1><a name="cpd">Conditional Probability Distributions</h1>
+
+A Conditional Probability Distributions (CPD)
+defines P(X(i) | X(Pa(i))), where X(i) is the i'th node, and X(Pa(i))
+are the parents of node i. There are many ways to represent this
+distribution, which depend in part on whether X(i) and X(Pa(i)) are
+discrete, continuous, or a combination.
+We will discuss various representations below.
+
+
+<h2><a name="tabular">Tabular nodes</h2>
+
+If the CPD is represented as a table (i.e., if it is a multinomial
+distribution), it has a number of parameters that is exponential in
+the number of parents. See the example <a href="#cpt">above</a>.
+
+
+<h2><a name="noisyor">Noisy-or nodes</h2>
+
+A noisy-OR node is like a regular logical OR gate except that
+sometimes the effects of parents that are on get inhibited.
+Let the prob. that parent i gets inhibited be q(i).
+Then a node, C, with 2 parents, A and B, has the following CPD, where
+we use F and T to represent off and on (1 and 2 in BNT).
+<pre>
+A  B  P(C=off)      P(C=on)
+---------------------------
+F  F  1.0           0.0
+T  F  q(A)          1-q(A)
+F  T  q(B)          1-q(B)
+T  T  q(A)q(B)      1-q(A)q(B)
+</pre>
+Thus we see that the causes get inhibited independently.
+It is common to associate a "leak" node with a noisy-or CPD, which is
+like a parent that is always on. This can account for all other unmodelled
+causes which might turn the node on.
+<p>
+The noisy-or distribution is similar to the logistic distribution.
+To see this, let the nodes, S(i), have values in {0,1}, and let q(i,j)
+be the prob. that j inhibits i. Then
+<pre>
+Pr(S(i)=1 | parents(S(i))) = 1 - prod_{j} q(i,j)^S(j)
+</pre>
+Now define w(i,j) = -ln q(i,j) and rho(x) = 1-exp(-x). Then
+<pre>
+Pr(S(i)=1 | parents(S(i))) = rho(sum_j w(i,j) S(j))
+</pre>
+For a sigmoid node, we have
+<pre>
+Pr(S(i)=1 | parents(S(i))) = sigma(-sum_j w(i,j) S(j))
+</pre>
+where sigma(x) = 1/(1+exp(-x)). Hence they differ in the choice of
+the activation function (although both are monotonically increasing).
+In addition, in the case of a noisy-or, the weights are constrained to be
+positive, since they derive from probabilities q(i,j).
+In both cases, the number of parameters is <em>linear</em> in the
+number of parents, unlike the case of a multinomial distribution,
+where the number of parameters is exponential in the number of parents.
+We will see an example of noisy-OR nodes <a href="#qmr">below</a>.
+
+
+<h2><a name="deterministic">Other (noisy) deterministic nodes</h2>
+
+Deterministic CPDs for discrete random variables can be created using
+the deterministic_CPD class. It is also possible to 'flip' the output
+of the function with some probability, to simulate noise.
+The boolean_CPD class is just a special case of a
+deterministic CPD, where the parents and child are all binary.
+<p>
+Both of these classes are just "syntactic sugar" for the tabular_CPD
+class.
+
+
+
+<h2><a name="softmax">Softmax nodes</h2>
+
+If we have a discrete node with a continuous parent,
+we can define its CPD using a softmax function 
+(also known as the multinomial logit function).
+This acts like a soft thresholding operator, and is defined as follows:
+<pre>
+                    exp(w(:,i)'*x + b(i)) 
+Pr(Q=i | X=x)  =  -----------------------------
+                  sum_j   exp(w(:,j)'*x + b(j))
+
+</pre>
+The parameters of a softmax node, w(:,i) and b(i), i=1..|Q|, have the
+following interpretation: w(:,i)-w(:,j) is the normal vector to the
+decision boundary between classes i and j,
+and b(i)-b(j) is its offset (bias). For example, suppose
+X is a 2-vector, and Q is binary. Then
+<pre>
+w = [1 -1;
+     0 0];
+
+b = [0 0];
+</pre>
+means class 1 are points in the 2D plane with positive x coordinate,
+and class 2 are points in the 2D plane with negative x coordinate.
+If w has large magnitude, the decision boundary is sharp, otherwise it
+is soft.
+In the special case that Q is binary (0/1), the softmax function reduces to the logistic
+(sigmoid) function.
+<p>
+Fitting a softmax function can be done using the iteratively reweighted
+least squares (IRLS) algorithm.
+We use the implementation from
+<a href="http://www.ncrg.aston.ac.uk/netlab/">Netlab</a>.
+Note that since
+the softmax distribution is not in the exponential family, it does not
+have finite sufficient statistics, and hence we must store all the
+training data in uncompressed form.
+If this takes too much space, one should use online (stochastic) gradient
+descent (not implemented in BNT).
+<p>
+If a softmax node also has discrete parents,
+we use a different set of w/b parameters for each combination of
+parent values, as in the <a href="#gaussian">conditional linear
+Gaussian CPD</a>.
+This feature was implemented by Pierpaolo Brutti.
+He is currently extending it so that discrete parents can be treated
+as if they were continuous, by adding indicator variables to the X
+vector.
+<p>
+We will see an example of softmax nodes <a href="#mixexp">below</a>.
+
+
+<h2><a name="mlp">Neural network nodes</h2>
+
+Pierpaolo Brutti has implemented the mlp_CPD class, which uses a multi layer perceptron
+to implement a mapping from continuous parents to discrete children,
+similar to the softmax function.
+(If there are also discrete parents, it creates a mixture of MLPs.)
+It uses code from <a
+href="http://www.ncrg.aston.ac.uk/netlab/">Netlab</a>.
+This is work in progress.
+
+<h2><a name="root">Root nodes</h2>
+
+A root node has no parents and no parameters; it can be used to model
+an observed, exogeneous input variable, i.e., one which is "outside"
+the model. 
+This is useful for conditional density models.
+We will see an example of root nodes <a href="#mixexp">below</a>.
+
+
+<h2><a name="gaussian">Gaussian nodes</h2>
+
+We now consider a distribution suitable for the continuous-valued nodes.
+Suppose the node is called Y, its continuous parents (if any) are
+called X, and its discrete parents (if any) are called Q.
+The distribution on Y is defined as follows:
+<pre>
+- no parents: Y ~ N(mu, Sigma)
+- cts parents : Y|X=x ~ N(mu + W x, Sigma)
+- discrete parents: Y|Q=i ~ N(mu(:,i), Sigma(:,:,i))
+- cts and discrete parents: Y|X=x,Q=i ~ N(mu(:,i) + W(:,:,i) * x, Sigma(:,:,i))
+</pre>
+where N(mu, Sigma) denotes a Normal distribution with mean mu and
+covariance Sigma. Let |X|, |Y| and |Q| denote the sizes of X, Y and Q
+respectively.
+If there are no discrete parents, |Q|=1; if there is
+more than one, then |Q| = a vector of the sizes of each discrete parent.
+If there are no continuous parents, |X|=0; if there is more than one,
+then |X| = the sum of their sizes.
+Then mu is a |Y|*|Q| vector, Sigma is a |Y|*|Y|*|Q| positive
+semi-definite matrix, and W is a |Y|*|X|*|Q| regression (weight)
+matrix.
+<p>
+We can create a Gaussian node with random parameters as follows.
+<pre>
+bnet.CPD{i} = gaussian_CPD(bnet, i);
+</pre>
+We can specify the value of one or more of the parameters as in the
+following example, in which |Y|=2, and |Q|=1.
+<pre>
+bnet.CPD{i} = gaussian_CPD(bnet, i, 'mean', [0; 0], 'weights', randn(Y,X), 'cov', eye(Y));
+</pre>
+<p>
+We will see an example of conditional linear Gaussian nodes <a
+href="#cg_model">below</a>. 
+<p>
+<b>When learning Gaussians from data</b>, it is helpful to ensure the
+data has a small magnitde
+(see e.g., KPMstats/standardize) to prevent numerical problems.
+Unless you have a lot of data, it is also a very good idea to use
+diagonal instead of full covariance matrices.
+(BNT does not currently support spherical covariances, although it
+would be easy to add, since  KPMstats/clg_Mstep supports this option;
+you would just need to modify gaussian_CPD/update_ess to accumulate
+weighted inner products.)
+
+
+
+<h2><a name="nongauss">Other continuous distributions</h2>
+
+Currently BNT does not support any CPDs for continuous nodes other
+than the Gaussian.
+However, you can use a mixture of Gaussians to
+approximate other continuous distributions. We will see some an example
+of this with the IFA model <a href="#pca">below</a>.
+
+
+<h2><a name="glm">Generalized linear model nodes</h2>
+
+In the future, we may incorporate some of the functionality of
+<a href =
+"http://www.sci.usq.edu.au/staff/dunn/glmlab/glmlab.html">glmlab</a>
+into BNT.
+
+
+<h2><a name="dtree">Classification/regression tree nodes</h2>
+
+We plan to add classification and regression trees to define CPDs for
+discrete and continuous nodes, respectively.
+Trees have many advantages: they are easy to interpret, they can do
+feature selection, they can
+handle discrete and continuous inputs, they do not make strong
+assumptions about the form of the distribution, the number of
+parameters can grow in a data-dependent way (i.e., they are
+semi-parametric), they can handle missing data, etc.
+However, they are not yet implemented.
+<!--
+Yimin Zhang is currently (Feb '02) implementing this.
+-->
+
+
+<h2><a name="cpd_summary">Summary of CPD types</h2>
+
+We list all the different types of CPDs supported by BNT.
+For each CPD, we specify if the child and parents can be discrete (D) or
+continuous (C) (Binary (B) nodes are a special case).
+We also specify which methods each class supports.
+If a method is inherited, the name of the  parent class is mentioned.
+If a parent class calls a child method, this is mentioned.
+<p>
+The <tt>CPD_to_CPT</tt> method converts a CPD to a table; this
+requires that the child and all parents are discrete.
+The CPT might be exponentially big...
+<tt>convert_to_table</tt> evaluates a CPD with evidence, and
+represents the the resulting potential as an array.
+This requires that the child is discrete, and any continuous parents
+are observed.
+<tt>convert_to_pot</tt> evaluates a CPD with evidence, and
+represents the resulting potential as a dpot, gpot, cgpot or upot, as
+requested. (d=discrete, g=Gaussian, cg = conditional Gaussian, u =
+utility).
+
+<p>
+When we sample a node, all the parents are observed.
+When we compute the (log) probability of a node, all the parents and
+the child are observed.
+<p>
+We also specify if the parameters are learnable.
+For learning with EM, we require
+the methods <tt>reset_ess</tt>, <tt>update_ess</tt> and
+<tt>maximize_params</tt>. 
+For learning from fully observed data, we require
+the method <tt>learn_params</tt>.
+By default, all classes inherit this from generic_CPD, which simply
+calls <tt>update_ess</tt> N times, once for each data case, followed
+by <tt>maximize_params</tt>, i.e., it is like EM, without the E step.
+Some classes implement a batch formula, which is quicker.
+<p>
+Bayesian learning means computing a posterior over the parameters
+given fully observed data.
+<p>
+Pearl means we implement the methods <tt>compute_pi</tt> and
+<tt>compute_lambda_msg</tt>, used by
+<tt>pearl_inf_engine</tt>, which runs on directed graphs.
+<tt>belprop_inf_engine</tt> only needs <tt>convert_to_pot</tt>.H
+The pearl methods can exploit special properties of the CPDs for
+computing the messages efficiently, whereas belprop does not.
+<p>
+The only method implemented by generic_CPD is <tt>adjustable_CPD</tt>,
+which is not shown, since it is not very interesting.
+
+
+<p>
+
+
+<table>
+<table border units = pixels><tr>
+<td align=center>Name
+<td align=center>Child
+<td align=center>Parents
+<td align=center>Comments
+<td align=center>CPD_to_CPT
+<td align=center>conv_to_table
+<td align=center>conv_to_pot
+<td align=center>sample
+<td align=center>prob
+<td align=center>learn
+<td align=center>Bayes
+<td align=center>Pearl
+
+
+<tr>
+<!-- Name--><td>
+<!-- Child--><td>
+<!-- Parents--><td>
+<!-- Comments--><td>
+<!-- CPD_to_CPT--><td>
+<!-- conv_to_table--><td>
+<!-- conv_to_pot--><td>
+<!-- sample--><td>
+<!-- prob--><td>
+<!-- learn--><td>
+<!-- Bayes--><td>
+<!-- Pearl--><td>
+
+<tr>
+<!-- Name--><td>boolean
+<!-- Child--><td>B
+<!-- Parents--><td>B
+<!-- Comments--><td>Syntactic sugar for tabular
+<!-- CPD_to_CPT--><td>-
+<!-- conv_to_table--><td>-
+<!-- conv_to_pot--><td>-
+<!-- sample--><td>-
+<!-- prob--><td>-
+<!-- learn--><td>-
+<!-- Bayes--><td>-
+<!-- Pearl--><td>-
+
+<tr>
+<!-- Name--><td>deterministic
+<!-- Child--><td>D
+<!-- Parents--><td>D
+<!-- Comments--><td>Syntactic sugar for tabular
+<!-- CPD_to_CPT--><td>-
+<!-- conv_to_table--><td>-
+<!-- conv_to_pot--><td>-
+<!-- sample--><td>-
+<!-- prob--><td>-
+<!-- learn--><td>-
+<!-- Bayes--><td>-
+<!-- Pearl--><td>-
+
+<tr>
+<!-- Name--><td>Discrete
+<!-- Child--><td>D
+<!-- Parents--><td>C/D
+<!-- Comments--><td>Virtual class
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>Calls CPD_to_CPT
+<!-- conv_to_pot--><td>Calls conv_to_table
+<!-- sample--><td>Calls conv_to_table
+<!-- prob--><td>Calls conv_to_table
+<!-- learn--><td>N
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+<tr>
+<!-- Name--><td>Gaussian
+<!-- Child--><td>C
+<!-- Parents--><td>C/D
+<!-- Comments--><td>-
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>N
+<!-- conv_to_pot--><td>Y
+<!-- sample--><td>Y
+<!-- prob--><td>Y
+<!-- learn--><td>Y
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+<tr>
+<!-- Name--><td>gmux
+<!-- Child--><td>C
+<!-- Parents--><td>C/D
+<!-- Comments--><td>multiplexer
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>N
+<!-- conv_to_pot--><td>Y
+<!-- sample--><td>N
+<!-- prob--><td>N
+<!-- learn--><td>N
+<!-- Bayes--><td>N
+<!-- Pearl--><td>Y
+
+
+<tr>
+<!-- Name--><td>MLP
+<!-- Child--><td>D
+<!-- Parents--><td>C/D
+<!-- Comments--><td>multi layer perceptron
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>Y
+<!-- conv_to_pot--><td>Inherits from discrete
+<!-- sample--><td>Inherits from discrete
+<!-- prob--><td>Inherits from discrete
+<!-- learn--><td>Y
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+
+<tr>
+<!-- Name--><td>noisy-or
+<!-- Child--><td>B
+<!-- Parents--><td>B
+<!-- Comments--><td>-
+<!-- CPD_to_CPT--><td>Y
+<!-- conv_to_table--><td>Inherits from discrete
+<!-- conv_to_pot--><td>Inherits from discrete
+<!-- sample--><td>Inherits from discrete
+<!-- prob--><td>Inherits from discrete
+<!-- learn--><td>N
+<!-- Bayes--><td>N
+<!-- Pearl--><td>Y
+
+
+<tr>
+<!-- Name--><td>root
+<!-- Child--><td>C/D
+<!-- Parents--><td>none
+<!-- Comments--><td>no params
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>N
+<!-- conv_to_pot--><td>Y
+<!-- sample--><td>Y
+<!-- prob--><td>Y
+<!-- learn--><td>N
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+
+<tr>
+<!-- Name--><td>softmax
+<!-- Child--><td>D
+<!-- Parents--><td>C/D
+<!-- Comments--><td>-
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>Y
+<!-- conv_to_pot--><td>Inherits from discrete
+<!-- sample--><td>Inherits from discrete
+<!-- prob--><td>Inherits from discrete
+<!-- learn--><td>Y
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+
+<tr>
+<!-- Name--><td>generic
+<!-- Child--><td>C/D
+<!-- Parents--><td>C/D
+<!-- Comments--><td>Virtual class
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>N
+<!-- conv_to_pot--><td>N
+<!-- sample--><td>N
+<!-- prob--><td>N
+<!-- learn--><td>N
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+
+<tr>
+<!-- Name--><td>Tabular
+<!-- Child--><td>D
+<!-- Parents--><td>D
+<!-- Comments--><td>-
+<!-- CPD_to_CPT--><td>Y
+<!-- conv_to_table--><td>Inherits from discrete
+<!-- conv_to_pot--><td>Inherits from discrete
+<!-- sample--><td>Inherits from discrete
+<!-- prob--><td>Inherits from discrete
+<!-- learn--><td>Y
+<!-- Bayes--><td>Y
+<!-- Pearl--><td>Y
+
+</table>
+
+
+
+<h1><a name="examples">Example models</h1>
+
+
+<h2>Gaussian mixture models</h2>
+
+Richard W. DeVaul has made a detailed tutorial on how to fit mixtures
+of Gaussians using BNT. Available
+<a href="http://www.media.mit.edu/wearables/mithril/BNT/mixtureBNT.txt">here</a>.
+
+
+<h2><a name="pca">PCA, ICA, and all that </h2>
+
+In Figure (a) below, we show how Factor Analysis can be thought of as a
+graphical model. Here, X has an N(0,I) prior, and
+Y|X=x ~ N(mu + Wx, Psi),
+where Psi is diagonal and W is called the "factor loading matrix".
+Since the noise on both X and Y is diagonal, the components of these
+vectors are uncorrelated, and hence can be represented as individual
+scalar nodes, as we show in (b).
+(This is useful if parts of the observations on the Y vector are occasionally missing.)
+We usually take k=|X| << |Y|=D, so the model tries to explain
+many observations using a low-dimensional subspace.
+
+
+<center>
+<table>
+<tr>
+<td><img src="Figures/fa.gif">
+<td><img src="Figures/fa_scalar.gif">
+<td><img src="Figures/mfa.gif">
+<td><img src="Figures/ifa.gif">
+<tr>
+<td align=center> (a)
+<td align=center> (b)
+<td align=center> (c)
+<td align=center> (d)
+</table>
+</center>
+
+<p>
+We can create this model in BNT as follows.
+<pre>
+ns = [k D];
+dag = zeros(2,2);
+dag(1,2) = 1;
+bnet = mk_bnet(dag, ns, 'discrete', []);
+bnet.CPD{1} = gaussian_CPD(bnet, 1, 'mean', zeros(k,1), 'cov', eye(k), ...
+   'cov_type', 'diag', 'clamp_mean', 1, 'clamp_cov', 1);
+bnet.CPD{2} = gaussian_CPD(bnet, 2, 'mean', zeros(D,1), 'cov', diag(Psi0), 'weights', W0, ...
+   'cov_type', 'diag', 'clamp_mean', 1);
+</pre>
+
+The root node is clamped to the N(0,I) distribution, so that we will
+not update these parameters during learning.
+The mean of the leaf node is clamped to 0,
+since we assume the data has been centered (had its mean subtracted
+off); this is just for simplicity.
+Finally, the covariance of the leaf node is constrained to be
+diagonal. W0 and Psi0 are the initial parameter guesses.
+
+<p>
+We can fit this model (i.e., estimate its parameters in a maximum
+likelihood (ML) sense) using EM, as we
+explain <a href="#em">below</a>.
+Not surprisingly, the ML estimates for mu and Psi turn out to be
+identical to the
+sample mean and variance, which can be computed directly as
+<pre>
+mu_ML = mean(data);
+Psi_ML = diag(cov(data));
+</pre>
+Note that W can only be identified up to a rotation matrix, because of
+the spherical symmetry of the source.
+
+<p>
+If we restrict Psi to be spherical, i.e., Psi = sigma*I,
+there is a closed-form solution for W as well,
+i.e., we do not need to use EM.
+In particular, W contains the first |X| eigenvectors of the sample covariance
+matrix, with scalings determined by the eigenvalues and sigma.
+Classical PCA can be obtained by taking the sigma->0 limit.
+For details, see
+
+<ul>
+<li> <a href="ftp://hope.caltech.edu/pub/roweis/Empca/empca.ps">
+"EM algorithms for PCA and SPCA"</a>, Sam Roweis, NIPS 97.
+(<a href="ftp://hope.caltech.edu/pub/roweis/Code/empca.tar.gz">
+Matlab software</a>)
+
+<p>
+<li>
+<a
+href=http://neural-server.aston.ac.uk/cgi-bin/tr_avail.pl?trnumber=NCRG/97/003>
+"Mixtures of probabilistic principal component analyzers"</a>,
+Tipping and Bishop, Neural Computation 11(2):443--482, 1999.
+</ul>
+
+<p>
+By adding a hidden discrete variable, we can create mixtures of FA
+models, as shown in (c).
+Now we can explain the data using a set of subspaces.
+We can create this model in BNT as follows.
+<pre>
+ns = [M k D];
+dag = zeros(3);
+dag(1,3) = 1;
+dag(2,3) = 1;
+bnet = mk_bnet(dag, ns, 'discrete', 1);
+bnet.CPD{1} = tabular_CPD(bnet, 1, Pi0);
+bnet.CPD{2} = gaussian_CPD(bnet, 2, 'mean', zeros(k, 1), 'cov', eye(k), 'cov_type', 'diag', ...
+			   'clamp_mean', 1, 'clamp_cov', 1);
+bnet.CPD{3} = gaussian_CPD(bnet, 3, 'mean', Mu0', 'cov', repmat(diag(Psi0), [1 1 M]), ...
+			   'weights', W0, 'cov_type', 'diag', 'tied_cov', 1);
+</pre>
+Notice how the covariance matrix for Y is the same for all values of
+Q; that is, the noise level in each sub-space is assumed the same.
+However, we allow the offset, mu, to vary.
+For details, see
+<ul>
+
+<LI> 
+<a HREF="ftp://ftp.cs.toronto.edu/pub/zoubin/tr-96-1.ps.gz"> The EM 
+Algorithm for Mixtures of Factor Analyzers </A>,
+Ghahramani, Z. and Hinton, G.E. (1996),
+University of Toronto
+Technical Report CRG-TR-96-1.
+(<A HREF="ftp://ftp.cs.toronto.edu/pub/zoubin/mfa.tar.gz">Matlab software</A>)
+
+<p>
+<li>
+<a
+href=http://neural-server.aston.ac.uk/cgi-bin/tr_avail.pl?trnumber=NCRG/97/003>
+"Mixtures of probabilistic principal component analyzers"</a>,
+Tipping and Bishop, Neural Computation 11(2):443--482, 1999.
+</ul>
+
+<p>
+I have included Zoubin's specialized MFA code (with his permission)
+with the toolbox, so you can check that BNT gives the same results:
+see 'BNT/examples/static/mfa1.m'. 
+
+<p>
+Independent Factor Analysis (IFA) generalizes FA by allowing a
+non-Gaussian prior on each component of X.
+(Note that we can approximate a non-Gaussian prior using a mixture of
+Gaussians.)
+This means that the likelihood function is no longer rotationally
+invariant, so we can uniquely identify W and the hidden
+sources X.
+IFA also allows a non-diagonal Psi (i.e. correlations between the components of Y).
+We recover classical Independent Components Analysis (ICA)
+in the Psi -> 0 limit, and by assuming that |X|=|Y|, so that the
+weight matrix W is square and invertible.
+For details, see
+<ul>
+<li>
+<a href="http://www.gatsby.ucl.ac.uk/~hagai/ifa.ps">Independent Factor
+Analysis</a>, H. Attias, Neural Computation 11: 803--851, 1998.
+</ul>
+
+
+
+<h2><a name="mixexp">Mixtures of experts</h2>
+
+As an example of the use of the softmax function,
+we introduce the Mixture of Experts model.
+<!--
+We also show
+the Hierarchical Mixture of Experts model, where the hierarchy has two
+levels.
+(This is essentially a probabilistic decision tree of height two.)
+-->
+As before,
+circles denote continuous-valued nodes,
+squares denote discrete nodes, clear
+means hidden, and shaded means observed.
+<p>
+<center>
+<table>
+<tr>
+<td><img src="Figures/mixexp.gif">
+<!--
+<td><img src="Figures/hme.gif">
+-->
+</table>
+</center>
+<p>
+X is the observed
+input, Y is the output, and
+the Q nodes are hidden "gating" nodes, which select the appropriate
+set of parameters for Y. During training, Y is assumed observed,
+but for testing, the goal is to predict Y given X.
+Note that this is a <em>conditional</em> density model, so we don't
+associate any parameters with X.
+Hence X's CPD will be a root CPD, which is a way of modelling
+exogenous nodes.
+If the output is a continuous-valued quantity,
+we assume the "experts" are linear-regression units,
+and set Y's CPD to linear-Gaussian.
+If the output is discrete, we set Y's CPD to a softmax function.
+The Q CPDs will always be softmax functions.
+
+<p>
+As a concrete example, consider the mixture of experts model where X and Y are
+scalars, and Q is binary.
+This is just piecewise linear regression, where
+we have two line segments, i.e.,
+<P>
+<IMG ALIGN=BOTTOM SRC="Eqns/lin_reg_eqn.gif">
+<P>
+We can create this model with random parameters as follows.
+(This code is bundled in BNT/examples/static/mixexp2.m.)
+<PRE>
+X = 1;
+Q = 2;
+Y = 3;
+dag = zeros(3,3);
+dag(X,[Q Y]) = 1
+dag(Q,Y) = 1;
+ns = [1 2 1]; % make X and Y scalars, and have 2 experts
+onodes = [1 3];
+bnet = mk_bnet(dag, ns, 'discrete', 2, 'observed', onodes);
+
+rand('state', 0);
+randn('state', 0);
+bnet.CPD{1} = root_CPD(bnet, 1);
+bnet.CPD{2} = softmax_CPD(bnet, 2);
+bnet.CPD{3} = gaussian_CPD(bnet, 3);
+</PRE>
+Now let us fit this model using <a href="#em">EM</a>.
+First we <a href="#load_data">load the data</a> (1000 training cases) and plot them.
+<P>
+<PRE>
+data = load('/examples/static/Misc/mixexp_data.txt', '-ascii');        
+plot(data(:,1), data(:,2), '.');
+</PRE>
+<p>
+<center>
+<IMG SRC="Figures/mixexp_data.gif">
+</center>
+<p>
+This is what the model looks like before training.
+(Thanks to Thomas Hofman for writing this plotting routine.)
+<p>
+<center>
+<IMG SRC="Figures/mixexp_before.gif">
+</center>
+<p>
+Now let's train the model, and plot the final performance.
+(We will discuss how to train models in more detail <a href="#param_learning">below</a>.)
+<P>
+<PRE>
+ncases = size(data, 1); % each row of data is a training case
+cases = cell(3, ncases);
+cases([1 3], :) = num2cell(data'); % each column of cases is a training case
+engine = jtree_inf_engine(bnet);
+max_iter = 20;
+[bnet2, LLtrace] = learn_params_em(engine, cases, max_iter);
+</PRE>
+(We specify which nodes will be observed when we create the engine.
+Hence BNT knows that the hidden nodes are all discrete.
+For complex models, this can lead to a significant speedup.)
+Below we show what the model looks like after 16 iterations of EM
+(with 100 IRLS iterations per M step), when it converged
+using the default convergence tolerance (that the
+fractional change in the log-likelihood be less than 1e-3).
+Before learning, the log-likelihood was
+-322.927442; afterwards, it was -13.728778.
+<p>
+<center>
+<IMG SRC="Figures/mixexp_after.gif">
+</center>
+(See BNT/examples/static/mixexp2.m for details of the code.)
+
+
+
+<h2><a name="hme">Hierarchical mixtures of experts</h2>
+
+A hierarchical mixture of experts (HME) extends the mixture of experts
+model by having more than one hidden node. A two-level example is shown below, along
+with its more traditional representation as a neural network.
+This is like a (balanced) probabilistic decision tree of height 2.
+<p>
+<center>
+<IMG SRC="Figures/HMEforMatlab.jpg">
+</center>
+<p>
+<a href="mailto:pbrutti@stat.cmu.edu">Pierpaolo Brutti</a>
+has written an extensive set of routines for HMEs,
+which are bundled with BNT: see the examples/static/HME directory.
+These routines allow you to choose the number of hidden (gating)
+layers, and the form of the experts (softmax or MLP).
+See the file hmemenu, which provides a demo.
+For example, the figure below shows the decision boundaries learned
+for a ternary classification problem, using a 2 level HME with softmax
+gates and softmax experts; the training set is on the left, the
+testing set on the right.
+<p>
+<center>
+<!--<IMG SRC="Figures/hme_dec_boundary.gif">-->
+<IMG SRC="Figures/hme_dec_boundary.png">
+</center>
+<p>
+
+
+<p>
+For more details, see the following:
+<ul>
+
+<li> <a href="http://www.cs.berkeley.edu/~jordan/papers/hierarchies.ps.Z">
+Hierarchical mixtures of experts and the EM algorithm</a>
+M. I. Jordan and R. A. Jacobs. Neural Computation, 6, 181-214, 1994.
+
+<li> <a href =
+"http://www.cs.berkeley.edu/~dmartin/software">David Martin's
+matlab code for HME</a>
+
+<li> <a
+href="http://www.cs.berkeley.edu/~jordan/papers/uai.ps.Z">Why the
+logistic function? A tutorial discussion on 
+probabilities and neural networks.</a> M. I. Jordan. MIT Computational
+Cognitive Science Report 9503, August 1995. 
+
+<li> "Generalized Linear Models", McCullagh and Nelder, Chapman and
+Halll, 1983.
+
+<li>
+"Improved learning algorithms for mixtures of experts in multiclass
+classification".
+K. Chen, L. Xu, H. Chi.
+Neural Networks (1999) 12: 1229-1252.
+
+<li> <a href="http://www.oigeeza.com/steve/">
+Classification Using Hierarchical Mixtures of Experts</a>
+S.R. Waterhouse and A.J. Robinson.
+In Proc. IEEE Workshop on Neural Network for Signal Processing IV (1994), pp. 177-186
+
+<li> <a href="http://www.idiap.ch/~perry/">
+Localized mixtures of experts</a>,
+P. Moerland, 1998.
+
+<li> "Nonlinear gated experts for time series",
+A.S. Weigend and M. Mangeas, 1995.
+
+</ul>
+
+
+<h2><a name="qmr">QMR</h2>
+
+Bayes nets originally arose out of an attempt to add probabilities to
+expert systems, and this is still the most common use for BNs.
+A famous example is
+QMR-DT, a decision-theoretic reformulation of the Quick Medical
+Reference (QMR) model.
+<p>
+<center>
+<IMG ALIGN=BOTTOM SRC="Figures/qmr.gif">
+</center>
+Here, the top layer represents hidden disease nodes, and the bottom
+layer represents observed symptom nodes.
+The goal is to infer the posterior probability of each disease given
+all the symptoms (which can be present, absent or unknown).
+Each node in the top layer has a Bernoulli prior (with a low prior
+probability that the disease is present).
+Since each node in the bottom layer has a high fan-in, we use a
+noisy-OR parameterization; each disease has an independent chance of
+causing each symptom.
+The real QMR-DT model is copyright, but
+we can create a random QMR-like model as follows.
+<pre>
+function bnet = mk_qmr_bnet(G, inhibit, leak, prior)
+% MK_QMR_BNET Make a QMR model
+% bnet = mk_qmr_bnet(G, inhibit, leak, prior)
+%
+% G(i,j) = 1 iff there is an arc from disease i to finding j
+% inhibit(i,j) = inhibition probability on i->j arc
+% leak(j) = inhibition prob. on leak->j arc
+% prior(i) = prob. disease i is on
+
+[Ndiseases Nfindings] = size(inhibit);
+N = Ndiseases + Nfindings;
+finding_node = Ndiseases+1:N;
+ns = 2*ones(1,N);
+dag = zeros(N,N);
+dag(1:Ndiseases, finding_node) = G;
+bnet = mk_bnet(dag, ns, 'observed', finding_node);
+
+for d=1:Ndiseases
+  CPT = [1-prior(d) prior(d)];
+  bnet.CPD{d} = tabular_CPD(bnet, d, CPT');
+end
+
+for i=1:Nfindings
+  fnode = finding_node(i);
+  ps = parents(G, i);
+  bnet.CPD{fnode} = noisyor_CPD(bnet, fnode, leak(i), inhibit(ps, i));
+end
+</pre>
+In the file BNT/examples/static/qmr1, we create a random bipartite
+graph G, with 5 diseases and 10 findings, and random parameters.
+(In general, to create a random dag, use 'mk_random_dag'.)
+We can visualize the resulting  graph structure using
+the methods discussed <a href="#graphdraw">below</a>, with the
+following results:
+<p>
+<img src="Figures/qmr.rnd.jpg">
+
+<p>
+Now let us put some random evidence on all the leaves except the very
+first and very last, and compute the disease posteriors.
+<pre>
+pos = 2:floor(Nfindings/2);
+neg = (pos(end)+1):(Nfindings-1);
+onodes = myunion(pos, neg);
+evidence = cell(1, N);
+evidence(findings(pos)) = num2cell(repmat(2, 1, length(pos)));
+evidence(findings(neg)) = num2cell(repmat(1, 1, length(neg)));
+
+engine = jtree_inf_engine(bnet);
+[engine, ll] = enter_evidence(engine, evidence);
+post = zeros(1, Ndiseases);
+for i=diseases(:)'
+  m = marginal_nodes(engine, i);
+  post(i) = m.T(2);
+end
+</pre>
+Junction tree can be quite slow on large QMR models.
+Fortunately, it is possible to exploit properties of the noisy-OR
+function to speed up exact inference using an algorithm called
+<a href="#quickscore">quickscore</a>, discussed below.
+
+
+
+
+
+<h2><a name="cg_model">Conditional Gaussian models</h2>
+
+A conditional Gaussian model is one in which, conditioned on all the discrete
+nodes, the distribution over the remaining (continuous) nodes is
+multivariate Gaussian. This means we can have arcs from discrete (D)
+to continuous (C) nodes, but not vice versa.
+(We <em>are</em> allowed C->D arcs if the continuous nodes are observed,
+as in the <a href="#mixexp">mixture of experts</a> model,
+since this distribution can be represented with a discrete potential.)
+<p>
+We now give an example of a CG model, from
+the paper "Propagation of Probabilities, Means amd
+Variances in Mixed Graphical Association Models", Steffen Lauritzen,
+JASA 87(420):1098--1108, 1992 (reprinted in the book "Probabilistic Networks and Expert
+Systems", R. G. Cowell, A. P. Dawid, S. L. Lauritzen and
+D. J. Spiegelhalter, Springer, 1999.)
+
+<h3>Specifying the graph</h3>
+
+Consider the model of waste emissions from an incinerator plant shown below.
+We follow the standard convention that shaded nodes are observed,
+clear nodes are hidden.
+We also use the non-standard convention that
+square nodes are discrete (tabular) and round nodes are
+Gaussian.
+
+<p>
+<center>
+<IMG SRC="Figures/cg1.gif">
+</center>
+<p>
+
+We can create this model as follows.
+<pre>
+F = 1; W = 2; E = 3; B = 4; C = 5; D = 6; Min = 7; Mout = 8; L = 9;
+n = 9;
+
+dag = zeros(n);
+dag(F,E)=1;
+dag(W,[E Min D]) = 1;
+dag(E,D)=1;
+dag(B,[C D])=1;
+dag(D,[L Mout])=1;
+dag(Min,Mout)=1;
+
+% node sizes - all cts nodes are scalar, all discrete nodes are binary
+ns = ones(1, n);
+dnodes = [F W B];
+cnodes = mysetdiff(1:n, dnodes);
+ns(dnodes) = 2;
+
+bnet = mk_bnet(dag, ns, 'discrete', dnodes);
+</pre>
+'dnodes' is a list of the discrete nodes; 'cnodes' is the continuous
+nodes. 'mysetdiff' is a faster version of the built-in 'setdiff'.
+<p>
+
+
+<h3>Specifying the parameters</h3>
+
+The parameters of the discrete nodes can be specified as follows.
+<pre>
+bnet.CPD{B} = tabular_CPD(bnet, B, 'CPT', [0.85 0.15]); % 1=stable, 2=unstable
+bnet.CPD{F} = tabular_CPD(bnet, F, 'CPT', [0.95 0.05]); % 1=intact, 2=defect
+bnet.CPD{W} = tabular_CPD(bnet, W, 'CPT', [2/7 5/7]); % 1=industrial, 2=household
+</pre>
+
+<p>
+The parameters of the continuous nodes can be specified as follows.
+<pre>
+bnet.CPD{E} = gaussian_CPD(bnet, E, 'mean', [-3.9 -0.4 -3.2 -0.5], ...
+			   'cov', [0.00002 0.0001 0.00002 0.0001]);
+bnet.CPD{D} = gaussian_CPD(bnet, D, 'mean', [6.5 6.0 7.5 7.0], ...
+			   'cov', [0.03 0.04 0.1 0.1], 'weights', [1 1 1 1]);
+bnet.CPD{C} = gaussian_CPD(bnet, C, 'mean', [-2 -1], 'cov', [0.1 0.3]);
+bnet.CPD{L} = gaussian_CPD(bnet, L, 'mean', 3, 'cov', 0.25, 'weights', -0.5);
+bnet.CPD{Min} = gaussian_CPD(bnet, Min, 'mean', [0.5 -0.5], 'cov', [0.01 0.005]);
+bnet.CPD{Mout} = gaussian_CPD(bnet, Mout, 'mean', 0, 'cov', 0.002, 'weights', [1 1]);
+</pre>
+
+
+<h3><a name="cg_infer">Inference</h3>
+
+<!--Let us perform inference in the <a href="#cg_model">waste incinerator example</a>.-->
+First we compute the unconditional marginals.
+<pre>
+engine = jtree_inf_engine(bnet);
+evidence = cell(1,n);
+[engine, ll] = enter_evidence(engine, evidence);
+marg = marginal_nodes(engine, E);
+</pre>
+<!--(Of course, we could use <tt>cond_gauss_inf_engine</tt> instead of jtree.)-->
+'marg' is a structure that contains the fields 'mu' and 'Sigma', which
+contain the mean and (co)variance of the marginal on E.
+In this case, they are both scalars.
+Let us check they match the published figures (to 2 decimal places).
+<!--(We can't expect
+more precision than this in general because I have implemented the algorithm of
+Lauritzen (1992), which can be numerically unstable.)-->
+<pre>
+tol = 1e-2;
+assert(approxeq(marg.mu, -3.25, tol));
+assert(approxeq(sqrt(marg.Sigma), 0.709, tol));
+</pre>
+We can compute the other posteriors similarly.
+Now let us add some evidence.
+<pre>
+evidence = cell(1,n);
+evidence{W} = 1; % industrial
+evidence{L} = 1.1;
+evidence{C} = -0.9;
+[engine, ll] = enter_evidence(engine, evidence);
+</pre>
+Now we find
+<pre>
+marg = marginal_nodes(engine, E);
+assert(approxeq(marg.mu, -3.8983, tol));
+assert(approxeq(sqrt(marg.Sigma), 0.0763, tol));
+</pre>
+
+
+We can also compute the joint probability on a set of nodes.
+For example, P(D, Mout | evidence) is a 2D Gaussian:
+<pre>
+marg = marginal_nodes(engine, [D Mout])
+marg = 
+    domain: [6 8]
+        mu: [2x1 double]
+     Sigma: [2x2 double]
+         T: 1.0000
+</pre>
+The mean is
+<pre>
+marg.mu
+ans =
+    3.6077
+    4.1077
+</pre>
+and the covariance matrix is
+<pre>
+marg.Sigma
+ans =
+    0.1062    0.1062
+    0.1062    0.1182
+</pre>
+It is easy to visualize this posterior using standard Matlab plotting
+functions, e.g.,
+<pre>
+gaussplot2d(marg.mu, marg.Sigma);
+</pre>
+produces the following picture.
+
+<p>
+<center>
+<IMG SRC="Figures/gaussplot.png">
+</center>
+<p>
+
+
+The T field indicates that the mixing weight of this Gaussian
+component is 1.0.
+If the joint contains discrete and continuous variables, the result
+will be a mixture of Gaussians, e.g.,
+<pre>
+marg = marginal_nodes(engine, [F E])
+    domain: [1 3]
+        mu: [-3.9000 -0.4003]
+     Sigma: [1x1x2 double]
+         T: [0.9995 4.7373e-04]
+</pre>
+The interpretation is
+Sigma(i,j,k) = Cov[ E(i) E(j) | F=k ].
+In this case, E is a scalar, so i=j=1; k specifies the mixture component.
+<p>
+We saw in the sprinkler network that BNT sets the effective size of
+observed discrete nodes to 1, since they only have one legal value.
+For continuous nodes, BNT sets their length to 0,
+since they have been reduced to a point.
+For example,
+<pre>
+marg = marginal_nodes(engine, [B C])
+    domain: [4 5]
+        mu: []
+     Sigma: []
+         T: [0.0123 0.9877]
+</pre>
+It is simple to post-process the output of marginal_nodes.
+For example, the file BNT/examples/static/cg1 sets the mu term of
+observed nodes to their observed value, and the Sigma term to 0 (since
+observed nodes have no variance).
+
+<p>
+Note that the implemented version of the junction tree is numerically
+unstable when using CG potentials
+(which is why, in the example above, we only required our answers to agree with
+the published ones to 2dp.)
+This is why you might want to use <tt>stab_cond_gauss_inf_engine</tt>,
+implemented by Shan Huang. This is described in
+
+<ul>
+<li> "Stable Local Computation with Conditional Gaussian Distributions",
+S. Lauritzen and F. Jensen, Tech Report R-99-2014,
+Dept. Math. Sciences, Allborg Univ., 1999.
+</ul>
+
+However, even the numerically stable version
+can be computationally intractable if there are many hidden discrete
+nodes, because the number of mixture components grows exponentially e.g., in a
+<a href="usage_dbn.html#lds">switching linear dynamical system</a>.
+In general, one must resort to approximate inference techniques: see
+the discussion on <a href="#engines">inference engines</a> below.
+
+
+<h2><a name="hybrid">Other hybrid models</h2>
+
+When we have C->D arcs, where C is hidden, we need to use
+approximate inference.
+One approach (not implemented in BNT) is described in
+<ul>
+<li> <a
+href="http://www.cs.berkeley.edu/~murphyk/Papers/hybrid_uai99.ps.gz">A
+Variational Approximation for Bayesian Networks with 
+Discrete and Continuous Latent Variables</a>,
+K. Murphy, UAI 99.
+</ul>
+Of course, one can always use <a href="#sampling">sampling</a> methods
+for approximate inference in such models.
+
+
+
+<h1><a name="param_learning">Parameter Learning</h1>
+
+The parameter estimation routines in BNT can be classified into 4
+types, depending on whether the goal is to compute
+a full (Bayesian) posterior over the parameters or just a point
+estimate (e.g., Maximum Likelihood or Maximum A Posteriori),
+and whether all the variables are fully observed or there is missing
+data/ hidden variables (partial observability).
+<p>
+
+<TABLE BORDER>
+<tr>
+ <TH></TH>
+ <th>Full obs</th>
+ <th>Partial obs</th>
+</tr>
+<tr>
+ <th>Point</th>
+ <td><tt>learn_params</tt></td>
+ <td><tt>learn_params_em</tt></td>
+</tr>
+<tr>
+ <th>Bayes</th>
+ <td><tt>bayes_update_params</tt></td>
+ <td>not yet supported</td>
+</tr>
+</table>
+
+
+<h2><a name="load_data">Loading data from a file</h2>
+
+To load numeric data from an ASCII text file called 'dat.txt', where each row is a
+case and columns are separated by white-space, such as
+<pre>
+011979 1626.5 0.0
+021979 1367.0 0.0
+...
+</pre>
+you can use
+<pre>
+data = load('dat.txt');
+</pre>
+or
+<pre>
+load dat.txt -ascii
+</pre>
+In the latter case, the data is stored in a variable called 'dat' (the
+filename minus the extension).
+Alternatively, suppose the data is stored in a .csv file (has commas
+separating the columns, and contains a header line), such as
+<pre>
+header info goes here
+ORD,011979,1626.5,0.0
+DSM,021979,1367.0,0.0
+...
+</pre>
+You can load this using
+<pre>
+[a,b,c,d] = textread('dat.txt', '%s %d %f %f', 'delimiter', ',', 'headerlines', 1);
+</pre>
+If your file is not in either of these formats, you can either use Perl to convert
+it to this format, or use the Matlab scanf command.
+Type
+<tt>
+help iofun
+</tt>
+for more information on Matlab's file functions.
+<!--
+<p>
+To load data directly from Excel,
+you should buy the 
+<a href="http://www.mathworks.com/products/excellink/">Excel Link</a>.
+To load data directly from a relational database,
+you should buy the 
+<a href="http://www.mathworks.com/products/database">Database
+toolbox</a>.
+-->
+<p>
+BNT learning routines require data to be stored in a cell array.
+data{i,m} is the value of node i in case (example) m, i.e., each
+<em>column</em> is a case.
+If node i is not observed in case m (missing value), set
+data{i,m} = [].
+(Not all the learning routines can cope with such missing values, however.)
+In the special case that all the nodes are observed and are
+scalar-valued (as opposed to vector-valued), the data can be
+stored in a matrix (as opposed to a cell-array).
+<p>
+Suppose, as in the <a href="#mixexp">mixture of experts example</a>,
+that we have 3 nodes in the graph: X(1) is the observed input, X(3) is
+the observed output, and X(2) is a hidden (gating) node. We can
+create the dataset as follows.
+<pre>
+data = load('dat.txt');
+ncases = size(data, 1);
+cases = cell(3, ncases);
+cases([1 3], :) = num2cell(data');
+</pre>
+Notice how we transposed the data, to convert rows into columns.
+Also, cases{2,m} = [] for all m, since X(2) is always hidden.
+
+
+<h2><a name="mle_complete">Maximum likelihood parameter estimation from complete data</h2>
+
+As an example, let's generate some data from the sprinkler network, randomize the parameters,
+and then try to recover the original model.
+First we create some training data using forwards sampling.
+<pre>
+samples = cell(N, nsamples);
+for i=1:nsamples
+  samples(:,i) = sample_bnet(bnet);
+end
+</pre>
+samples{j,i} contains the value of the j'th node in case i.
+sample_bnet returns a cell array because, in general, each node might
+be a vector of different length.
+In this case, all nodes are discrete (and hence scalars), so we
+could have used a regular array instead (which can be quicker):
+<pre>
+data = cell2num(samples);
+</pre
+So now data(j,i) = samples{j,i}.
+<p>
+Now we create a network with random parameters.
+(The initial values of bnet2 don't matter in this case, since we can find the
+globally optimal MLE independent of where we start.)
+<pre>
+% Make a tabula rasa
+bnet2 = mk_bnet(dag, node_sizes);
+seed = 0;
+rand('state', seed);
+bnet2.CPD{C} = tabular_CPD(bnet2, C);
+bnet2.CPD{R} = tabular_CPD(bnet2, R);
+bnet2.CPD{S} = tabular_CPD(bnet2, S);
+bnet2.CPD{W} = tabular_CPD(bnet2, W);
+</pre>
+Finally, we find the maximum likelihood estimates of the parameters.
+<pre>
+bnet3 = learn_params(bnet2, samples);
+</pre>
+To view the learned parameters, we use a little Matlab hackery.
+<pre>
+CPT3 = cell(1,N);
+for i=1:N
+  s=struct(bnet3.CPD{i});  % violate object privacy
+  CPT3{i}=s.CPT;
+end
+</pre>
+Here are the parameters learned for node 4.
+<pre>
+dispcpt(CPT3{4})
+1 1 : 1.0000 0.0000 
+2 1 : 0.2000 0.8000 
+1 2 : 0.2273 0.7727 
+2 2 : 0.0000 1.0000 
+</pre>
+So we see that the learned parameters are fairly close to the "true"
+ones, which we display below.
+<pre>
+dispcpt(CPT{4})
+1 1 : 1.0000 0.0000 
+2 1 : 0.1000 0.9000 
+1 2 : 0.1000 0.9000 
+2 2 : 0.0100 0.9900 
+</pre>
+We can get better results by using a larger training set, or using
+informative priors (see <a href="#prior">below</a>).
+
+
+
+<h2><a name="prior">Parameter priors</h2>
+
+Currently, only tabular CPDs can have priors on their parameters.
+The conjugate prior for a multinomial is the Dirichlet.
+(For binary random variables, the multinomial is the same as the
+Bernoulli, and the Dirichlet is the same as the Beta.)
+<p>
+The Dirichlet has a simple interpretation in terms of pseudo counts.
+If we let N_ijk = the num. times X_i=k and Pa_i=j occurs in the
+training set, where Pa_i are the parents of X_i,
+then the maximum likelihood (ML) estimate is
+T_ijk = N_ijk  / N_ij (where N_ij = sum_k' N_ijk'), which will be 0 if N_ijk=0.
+To prevent us from declaring that (X_i=k, Pa_i=j) is impossible just because this
+event was not seen in the training set,
+we can pretend we saw value k of X_i, for each value j of Pa_i some number (alpha_ijk)
+of times in the past.
+The MAP (maximum a posterior) estimate is then
+<pre>
+T_ijk = (N_ijk + alpha_ijk) / (N_ij + alpha_ij)
+</pre>
+and is never 0 if all alpha_ijk > 0.
+For example, consider the network A->B, where A is binary and B has 3
+values.
+A uniform prior for B has the form
+<pre>
+    B=1 B=2 B=3
+A=1 1   1   1
+A=2 1   1   1
+</pre>
+which can be created using
+<pre>
+tabular_CPD(bnet, i, 'prior_type', 'dirichlet', 'dirichlet_type', 'unif');
+</pre>
+This prior does not satisfy the likelihood equivalence principle,
+which says that <a href="#markov_equiv">Markov equivalent</a> models
+should have the same marginal likelihood.
+A prior that does satisfy this principle is shown below.
+Heckerman (1995) calls this the
+BDeu prior (likelihood equivalent uniform Bayesian Dirichlet).
+<pre>
+    B=1 B=2 B=3
+A=1 1/6 1/6 1/6
+A=2 1/6 1/6 1/6
+</pre>
+where we put N/(q*r) in each bin; N is the equivalent sample size,
+r=|A|, q = |B|.
+This can be created as follows
+<pre>
+tabular_CPD(bnet, i, 'prior_type', 'dirichlet', 'dirichlet_type', 'BDeu');
+</pre>
+Here, 1 is the equivalent sample size, and is the strength of the
+prior.
+You can change this using
+<pre>
+tabular_CPD(bnet, i, 'prior_type', 'dirichlet', 'dirichlet_type', ...
+   'BDeu', 'dirichlet_weight', 10);
+</pre>
+<!--where counts is an array of pseudo-counts of the same size as the
+CPT.-->
+<!--
+<p>
+When you specify a prior, you should set row i of the CPT to the
+normalized version of row i of the pseudo-count matrix, i.e., to the
+expected values of the parameters. This will ensure that computing the
+marginal likelihood sequentially (see <a
+href="#bayes_learn">below</a>) and in batch form gives the same
+results.
+To do this, proceed as follows.
+<pre>
+tabular_CPD(bnet, i, 'prior', counts, 'CPT', mk_stochastic(counts));
+</pre>
+For a non-informative prior, you can just write
+<pre>
+tabular_CPD(bnet, i, 'prior', 'unif', 'CPT', 'unif');
+</pre>
+-->
+
+
+<h2><a name="bayes_learn">(Sequential) Bayesian parameter updating from complete data</h2>
+
+If we use conjugate priors and have fully observed data, we can
+compute the posterior over the parameters in batch form as follows.
+<pre>
+cases = sample_bnet(bnet, nsamples);
+bnet = bayes_update_params(bnet, cases);  
+LL = log_marg_lik_complete(bnet, cases);   
+</pre>
+bnet.CPD{i}.prior contains the new Dirichlet pseudocounts,
+and bnet.CPD{i}.CPT is set to the mean of the posterior (the
+normalized counts).
+(Hence if the initial pseudo counts are 0,
+<tt>bayes_update_params</tt> and <tt>learn_params</tt> will give the
+same result.)
+
+
+
+
+<p>
+We can compute the same result sequentially (on-line) as follows.
+<pre>
+LL = 0;
+for m=1:nsamples
+  LL = LL + log_marg_lik_complete(bnet, cases(:,m));
+  bnet = bayes_update_params(bnet, cases(:,m));
+end
+</pre>
+
+The file <tt>BNT/examples/static/StructLearn/model_select1</tt> has an example of
+sequential model selection which uses the same idea.
+We generate data from the model A->B
+and compute the posterior prob of all 3 dags on 2 nodes:
+ (1) A B,  (2) A <- B , (3) A -> B
+Models 2 and 3 are <a href="#markov_equiv">Markov equivalent</a>, and therefore indistinguishable from 
+observational data alone, so we expect their posteriors to be the same
+(assuming a prior which satisfies likelihood equivalence).
+If we use random parameters, the "true" model only gets a higher posterior after 2000 trials!
+However, if we make B a noisy NOT gate, the true model "wins" after 12
+trials, as shown below (red = model 1, blue/green (superimposed)
+represents models 2/3).
+<p>
+<img src="Figures/model_select.png">
+<p>
+The use of marginal likelihood for model selection is discussed in
+greater detail in the 
+section on <a href="structure_learning">structure learning</a>.
+
+
+
+
+<h2><a name="em">Maximum likelihood parameter estimation with missing values</h2>
+
+Now we consider learning when some values are not observed.
+Let us randomly hide half the values generated from the water
+sprinkler example.
+<pre>
+samples2 = samples;
+hide = rand(N, nsamples) > 0.5;
+[I,J]=find(hide);
+for k=1:length(I)
+  samples2{I(k), J(k)} = [];
+end
+</pre>
+samples2{i,l} is the value of node i in training case l, or [] if unobserved.
+<p>
+Now we will compute the MLEs using the EM algorithm.
+We need to use an inference algorithm to compute the expected
+sufficient statistics in the E step; the M (maximization) step is as
+above.
+<pre>
+engine2 = jtree_inf_engine(bnet2);
+max_iter = 10;
+[bnet4, LLtrace] = learn_params_em(engine2, samples2, max_iter);
+</pre>
+LLtrace(i) is the log-likelihood at iteration i. We can plot this as
+follows:
+<pre>
+plot(LLtrace, 'x-')
+</pre>
+Let's display the results after 10 iterations of EM.
+<pre>
+celldisp(CPT4)
+CPT4{1} =
+    0.6616
+    0.3384
+CPT4{2} =
+    0.6510    0.3490
+    0.8751    0.1249
+CPT4{3} =
+    0.8366    0.1634
+    0.0197    0.9803
+CPT4{4} =
+(:,:,1) =
+    0.8276    0.0546
+    0.5452    0.1658
+(:,:,2) =
+    0.1724    0.9454
+    0.4548    0.8342
+</pre>
+We can get improved performance by using one or more of the following
+methods:
+<ul>
+<li> Increasing the size of the training set.
+<li> Decreasing the amount of hidden data.
+<li> Running EM for longer.
+<li> Using informative priors.
+<li> Initialising EM from multiple starting points.
+</ul>
+
+Click <a href="#gaussian">here</a> for a discussion of learning
+Gaussians, which can cause numerical problems.
+<p>
+For a more complete example of learning with EM,
+see the script BNT/examples/static/learn1.m.
+
+<h2><a name="tying">Parameter tying</h2>
+
+In networks with repeated structure (e.g., chains and grids), it is
+common to assume that the parameters are the same at every node. This
+is called parameter tying, and reduces the amount of data needed for
+learning.
+<p>
+When we have tied parameters, there is no longer a one-to-one
+correspondence between nodes and CPDs.
+Rather, each CPD species the parameters for a whole equivalence class
+of nodes.
+It is easiest to see this by example.
+Consider the following <a href="usage_dbn.html#hmm">hidden Markov
+model (HMM)</a>
+<p>
+<img src="Figures/hmm3.gif">
+<p>
+<!--
+We can create this graph structure, assuming we have T time-slices,
+as follows.
+(We number the nodes as shown in the figure, but we could equally well
+number the hidden nodes 1:T, and the observed nodes T+1:2T.)
+<pre>
+N = 2*T;
+dag = zeros(N);
+hnodes = 1:2:2*T;
+for i=1:T-1
+  dag(hnodes(i), hnodes(i+1))=1;
+end
+onodes = 2:2:2*T;
+for i=1:T
+  dag(hnodes(i), onodes(i)) = 1;
+end
+</pre>
+<p>
+The hidden nodes are always discrete, and have Q possible values each,
+but the observed nodes can be discrete or continuous, and have O possible values/length.
+<pre>
+if cts_obs
+  dnodes = hnodes;
+else
+  dnodes = 1:N;
+end
+ns = ones(1,N);
+ns(hnodes) = Q;
+ns(onodes) = O;
+</pre>
+-->
+When HMMs are used for semi-infinite processes like speech recognition,
+we assume the transition matrix
+P(H(t+1)|H(t)) is the same for all t; this is called a time-invariant
+or homogenous Markov chain.
+Hence hidden nodes 2, 3, ..., T
+are all in the same equivalence class, say class Hclass.
+Similarly, the observation matrix P(O(t)|H(t)) is assumed to be the
+same for all t, so the observed nodes are all in the same equivalence
+class, say class Oclass.
+Finally, the prior term P(H(1)) is in a class all by itself, say class
+H1class.
+This is illustrated below, where we explicitly represent the
+parameters as random variables (dotted nodes).
+<p>
+<img src="Figures/hmm4_params.gif">
+<p>
+In BNT, we cannot represent parameters as random variables (nodes).
+Instead, we "hide" the
+parameters inside one CPD for each equivalence class,
+and then specify that the other CPDs should share these parameters, as
+follows.
+<pre>
+hnodes = 1:2:2*T;
+onodes = 2:2:2*T;
+H1class = 1; Hclass = 2; Oclass = 3;
+eclass = ones(1,N);
+eclass(hnodes(2:end)) = Hclass;
+eclass(hnodes(1)) = H1class;
+eclass(onodes) = Oclass;
+% create dag and ns in the usual way
+bnet = mk_bnet(dag, ns, 'discrete', dnodes, 'equiv_class', eclass);
+</pre>
+Finally, we define the parameters for each equivalence class:
+<pre>
+bnet.CPD{H1class} = tabular_CPD(bnet, hnodes(1)); % prior
+bnet.CPD{Hclass} = tabular_CPD(bnet, hnodes(2)); % transition matrix
+if cts_obs
+  bnet.CPD{Oclass} = gaussian_CPD(bnet, onodes(1));
+else
+  bnet.CPD{Oclass} = tabular_CPD(bnet, onodes(1));
+end
+</pre>
+In general, if bnet.CPD{e} = xxx_CPD(bnet, j), then j should be a
+member of e's equivalence class; that is, it is not always the case
+that e == j. You can use bnet.rep_of_eclass(e) to return the
+representative of equivalence class e.
+BNT will look up the parents of j to determine the size
+of the CPT to use. It assumes that this is the same for all members of
+the equivalence class.
+Click <a href="param_tieing.html">here</a> for
+a more complex example of parameter tying.
+<p>
+Note:
+Normally one would define an HMM as a
+<a href = "usage_dbn.html">Dynamic Bayes Net</a>
+(see the function BNT/examples/dynamic/mk_chmm.m).
+However, one can define an HMM as a static BN using the function
+BNT/examples/static/Models/mk_hmm_bnet.m.
+
+
+
+<h1><a name="structure_learning">Structure learning</h1>
+
+Update (9/29/03):
+Phillipe LeRay is developing some additional structure learning code
+on top of BNT. Click
+<a href="http://banquiseasi.insa-rouen.fr/projects/bnt-slp/">
+here</a>
+for details.
+
+<p>
+
+There are two very different approaches to structure learning:
+constraint-based and search-and-score.
+In the <a href="#constraint">constraint-based approach</a>,
+we start with a fully connected graph, and remove edges if certain
+conditional independencies are measured in the data.
+This has the disadvantage that repeated independence tests lose
+statistical power.
+<p>
+In the more popular search-and-score approach,
+we perform a search through the space of possible DAGs, and either
+return the best one found (a point estimate), or return a sample of the
+models found (an approximation to the Bayesian posterior).
+<p>
+The number of DAGs as a function of the number of
+nodes, G(n), is super-exponential in n,
+and is given by the following recurrence
+<!--(where R(i)=G(n)):-->
+<p>
+<center>
+<IMG SRC="numDAGsEqn2.png">
+</center>
+<p>
+The first few values
+are shown below.
+
+<table>
+<tr>  <th>n</th>    <th align=left>G(n)</th> </tr>
+<tr>  <td>1</td>    <td>1</td> </tr>
+<tr>  <td>2</td>    <td>3</td> </tr>
+<tr>  <td>3</td>    <td>25</td> </tr>
+<tr>   <td>4</td>    <td>543</td> </tr> 
+<tr>   <td>5</td>    <td>29,281</td> </tr>
+<tr>   <td>6</td>    <td>3,781,503</td> </tr>
+<tr>   <td>7</td>    <td>1.1 x 10^9</td> </tr>
+<tr>   <td>8</td>    <td>7.8 x 10^11</td> </tr>
+<tr>   <td>9</td>    <td>1.2 x 10^15</td> </tr>
+<tr>   <td>10</td>    <td>4.2 x 10^18</td> </tr>
+</table>
+
+Since the number of DAGs is super-exponential in the number of nodes,
+we cannot exhaustively search the space, so we either use a local
+search algorithm (e.g., greedy hill climbining, perhaps with multiple
+restarts) or a global search algorithm (e.g., Markov Chain Monte
+Carlo). 
+<p>
+If we know a total ordering on the nodes,
+finding the best structure amounts to picking the best set of parents
+for each node independently.
+This is what the K2 algorithm does.
+If the ordering is unknown, we can search over orderings,
+which is more efficient than searching over DAGs (Koller and Friedman, 2000).
+<p>
+In addition to the search procedure, we must specify the scoring
+function. There are two popular choices. The Bayesian score integrates
+out the parameters, i.e., it is the marginal likelihood of the model.
+The BIC (Bayesian Information Criterion) is defined as
+log P(D|theta_hat) - 0.5*d*log(N), where D is the data, theta_hat is
+the ML estimate of the parameters, d is the number of parameters, and
+N is the number of data cases.
+The BIC method has the advantage of not requiring a prior.
+<p>
+BIC can be derived as a large sample
+approximation to the marginal likelihood.
+(It is also equal to the Minimum Description Length of a model.)
+However, in practice, the sample size does not need to be very large
+for the approximation to be good.
+For example, in the figure below, we plot the ratio between the log marginal likelihood
+and the BIC score against data-set size; we see that the ratio rapidly
+approaches 1, especially for non-informative priors. 
+(This plot was generated by the file BNT/examples/static/bic1.m. It
+uses the water sprinkler BN with BDeu Dirichlet priors with different
+equivalent sample sizes.)
+
+<p>
+<center>
+<IMG SRC="Figures/bic.png">
+</center>
+<p>
+
+<p>
+As with parameter learning, handling missing data/ hidden variables is
+much harder than the fully observed case.
+The structure learning routines in BNT can therefore be classified into 4
+types, analogously to the parameter learning case.
+<p>
+
+<TABLE BORDER>
+<tr>
+ <TH></TH>
+ <th>Full obs</th>
+ <th>Partial obs</th>
+</tr>
+<tr>
+ <th>Point</th>
+ <td><tt>learn_struct_K2</tt>  <br>
+<!--     <tt>learn_struct_hill_climb</tt></td> -->
+ <td><tt>not yet supported</tt></td>
+</tr>
+<tr>
+ <th>Bayes</th>
+ <td><tt>learn_struct_mcmc</tt></td>
+ <td>not yet supported</td>
+</tr>
+</table>
+
+
+<h2><a name="markov_equiv">Markov equivalence</h2>
+
+If two DAGs encode the same conditional independencies, they are
+called Markov equivalent. The set of all DAGs can be paritioned into
+Markov equivalence classes. Graphs within the same class can 
+have
+the direction of some of their arcs reversed without changing any of
+the CI relationships.
+Each class can be represented by a PDAG
+(partially directed acyclic graph) called an essential graph or
+pattern. This specifies which edges must be oriented in a certain
+direction, and which may be reversed.
+
+<p>
+When learning graph structure from observational data,
+the best one can hope to do is to identify the model up to Markov
+equivalence. To distinguish amongst graphs within the same equivalence
+class, one needs interventional data: see the discussion on <a
+href="#active">active learning</a> below.
+
+
+
+<h2><a name="enumerate">Exhaustive search</h2>
+
+The brute-force approach to structure learning is to enumerate all
+possible DAGs, and score each one. This provides a "gold standard"
+with which to compare other algorithms. We can do this as follows.
+<pre>
+dags = mk_all_dags(N);
+score = score_dags(data, ns, dags);
+</pre>
+where data(i,m) is the value of node i in case m,
+and ns(i) is the size of node i.
+If the DAGs have a lot of families in common, we can cache the sufficient statistics,
+making this potentially more efficient than scoring the DAGs one at a time.
+(Caching is not currently implemented, however.)
+<p>
+By default, we use the Bayesian scoring metric, and assume CPDs are
+represented by tables with BDeu(1) priors.
+We can override these defaults as follows.
+If we want to use uniform priors, we can say
+<pre>
+params = cell(1,N);
+for i=1:N
+  params{i} = {'prior', 'unif'};
+end
+score = score_dags(data, ns, dags, 'params', params);
+</pre>
+params{i} is a cell-array, containing optional arguments that are
+passed to the constructor for CPD i.
+<p>
+Now suppose we want to use different node types, e.g., 
+Suppose nodes 1 and 2 are Gaussian, and nodes 3 and 4 softmax (both
+these CPDs can support discrete and continuous parents, which is
+necessary since all other nodes will be considered as parents).
+The Bayesian scoring metric currently only works for tabular CPDs, so
+we will use BIC:
+<pre>
+score = score_dags(data, ns, dags, 'discrete', [3 4], 'params', [], 
+    'type', {'gaussian', 'gaussian', 'softmax', softmax'}, 'scoring_fn', 'bic')
+</pre>
+In practice, one can't enumerate all possible DAGs for N > 5,
+but one can evaluate any reasonably-sized set of hypotheses in this
+way (e.g., nearest neighbors of your current best guess).
+Think of this as "computer assisted model refinement" as opposed to de
+novo learning.
+
+
+<h2><a name="K2">K2</h2>
+
+The K2 algorithm (Cooper and Herskovits, 1992) is a greedy search algorithm that works as follows.
+Initially each node has no parents. It then adds incrementally that parent whose addition most
+increases the score of the resulting structure. When the addition of no single
+parent can increase the score, it stops adding parents to the node.
+Since we are using a fixed ordering, we do not need to check for
+cycles, and can choose the parents for each node independently.
+<p>
+The original paper used the Bayesian scoring
+metric with tabular CPDs and Dirichlet priors.
+BNT generalizes this to allow any kind of CPD, and either the Bayesian
+scoring metric or BIC, as in the example <a href="#enumerate">above</a>.
+In addition, you can specify
+an optional upper bound on the number of parents for each node.
+The file BNT/examples/static/k2demo1.m gives an example of how to use K2.
+We use the water sprinkler network and sample 100 cases from it as before.
+Then we see how much data it takes to recover the generating structure:
+<pre>
+order = [C S R W];
+max_fan_in = 2;
+sz = 5:5:100;
+for i=1:length(sz)
+  dag2 = learn_struct_K2(data(:,1:sz(i)), node_sizes, order, 'max_fan_in', max_fan_in);
+  correct(i) = isequal(dag, dag2);
+end
+</pre>
+Here are the results.
+<pre>
+correct =
+  Columns 1 through 12 
+     0     0     0     0     0     0     0     1     0     1     1     1
+  Columns 13 through 20 
+     1     1     1     1     1     1     1     1
+</pre>
+So we see it takes about sz(10)=50 cases. (BIC behaves similarly,
+showing that the prior doesn't matter too much.)
+In general, we cannot hope to recover the "true" generating structure,
+only one that is in its <a href="#markov_equiv">Markov equivalence
+class</a>.
+
+
+<h2><a name="hill_climb">Hill-climbing</h2>
+
+Hill-climbing starts at a specific point in space,
+considers all nearest neighbors, and moves to the neighbor
+that has the highest score; if no neighbors have higher
+score than the current point (i.e., we have reached a local maximum),
+the algorithm stops. One can then restart in another part of the space.
+<p>
+A common definition of "neighbor" is all graphs that can be
+generated from the current graph by adding, deleting or reversing a
+single arc, subject to the acyclicity constraint.
+Other neighborhoods are possible: see
+<a href="http://research.microsoft.com/~dmax/publications/jmlr02.pdf">
+Optimal Structure Identification with Greedy Search</a>, Max
+Chickering, JMLR 2002.
+
+<!--
+Note: This algorithm is currently (Feb '02) being implemented by Qian
+Diao.
+-->
+
+
+<h2><a name="mcmc">MCMC</h2>
+
+We can use a Markov Chain Monte Carlo (MCMC) algorithm called
+Metropolis-Hastings (MH) to search the space of all 
+DAGs.
+The standard proposal distribution is to consider moving to all
+nearest neighbors in the sense defined <a href="#hill_climb">above</a>.
+<p>
+The function can be called
+as in the following example.
+<pre>
+[sampled_graphs, accept_ratio] = learn_struct_mcmc(data, ns, 'nsamples', 100, 'burnin', 10);
+</pre>
+We can convert our set of sampled graphs to a histogram
+(empirical posterior over all the DAGs) thus
+<pre>
+all_dags = mk_all_dags(N);
+mcmc_post = mcmc_sample_to_hist(sampled_graphs, all_dags);
+</pre>
+To see how well this performs, let us compute the exact posterior exhaustively.
+<p>
+<pre>
+score = score_dags(data, ns, all_dags);
+post = normalise(exp(score)); % assuming uniform structural prior
+</pre>
+We plot the results below.
+(The data set was 100 samples drawn from a random 4 node bnet; see the
+file BNT/examples/static/mcmc1.)
+<pre>
+subplot(2,1,1)
+bar(post)
+subplot(2,1,2)
+bar(mcmc_post)
+</pre>
+<img src="Figures/mcmc_post.jpg" width="800" height="500">
+<p>
+We can also plot the acceptance ratio versus number of MCMC steps,
+as a crude convergence diagnostic.
+<pre>
+clf
+plot(accept_ratio)
+</pre>
+<img src="Figures/mcmc_accept.jpg" width="800" height="300">
+<p>
+Even though the number of samples needed by MCMC is theoretically
+polynomial (not exponential) in the dimensionality of the search space, in practice it has been
+found that MCMC does not converge in reasonable time for graphs with
+more than about 10 nodes.
+
+
+
+
+<h2><a name="active">Active structure learning</h2>
+
+As was mentioned <a href="#markov_equiv">above</a>,
+one can only learn a DAG up to Markov equivalence, even given infinite data.
+If one is interested in learning the structure of a causal network,
+one needs interventional data.
+(By "intervention" we mean forcing a node to take on a specific value,
+thereby effectively severing its incoming arcs.)
+<p>
+Most of the scoring functions accept an optional argument
+that specifies whether a node was observed to have a certain value, or
+was forced to have that value: we set clamped(i,m)=1 if node i was
+forced in training case m. e.g., see the file
+BNT/examples/static/cooper_yoo.
+<p>
+An interesting question is to decide which interventions to perform
+(c.f., design of experiments). For details, see the following tech
+report
+<ul>
+<li> <a href = "../../Papers/alearn.ps.gz">
+Active learning of causal Bayes net structure</a>, Kevin Murphy, March
+2001.
+</ul>
+
+
+<h2><a name="struct_em">Structural EM</h2>
+
+Computing the Bayesian score when there is partial observability is
+computationally challenging, because the parameter posterior becomes
+multimodal (the hidden nodes induce a mixture distribution).
+One therefore needs to use approximations such as BIC.
+Unfortunately, search algorithms are still expensive, because we need
+to run EM at each step to compute the MLE, which is needed to compute
+the score of each model. An alternative approach is
+to do the local search steps inside of the M step of EM, which is more
+efficient since the data has been "filled in" - this is
+called the structural EM algorithm (Friedman 1997), and provably
+converges to a local maximum of the BIC score.
+<p> 
+Wei Hu has implemented SEM for discrete nodes.
+You can download his package from
+<a href="../SEM.zip">here</a>.
+Please address all questions about this code to
+wei.hu@intel.com.
+See also <a href="#phl">Phl's implementation of SEM</a>.
+
+<!--
+<h2><a name="reveal">REVEAL algorithm</h2>
+
+A simple way to learn the structure of a fully observed, discrete,
+factored DBN from a time series is described <a
+href="usage_dbn.html#struct_learn">here</a>.
+-->
+
+
+<h2><a name="graphdraw">Visualizing the graph</h2>
+
+Click <a href="graphviz.html">here</a> for more information
+on graph visualization.
+
+<h2><a name = "constraint">Constraint-based methods</h2>
+
+The IC algorithm (Pearl and Verma, 1991),
+and the faster, but otherwise equivalent, PC algorithm (Spirtes, Glymour, and Scheines 1993),
+computes many conditional independence tests,
+and combines these constraints into a
+PDAG to represent the whole
+<a href="#markov_equiv">Markov equivalence class</a>.
+<p>
+IC*/FCI extend IC/PC to handle latent variables: see <a href="#ic_star">below</a>.
+(IC stands for inductive causation; PC stands for Peter and Clark,
+the first names of Spirtes and Glymour; FCI stands for fast causal
+inference.
+What we, following Pearl (2000), call IC* was called
+IC in the original Pearl and Verma paper.)
+For details, see
+<ul>
+<li>
+<a href="http://hss.cmu.edu/html/departments/philosophy/TETRAD/tetrad.html">Causation,
+Prediction, and Search</a>, Spirtes, Glymour and 
+Scheines (SGS), 2001 (2nd edition), MIT Press.
+<li> 
+<a href="http://bayes.cs.ucla.edu/BOOK-2K/index.html">Causality: Models, Reasoning and Inference</a>, J. Pearl, 
+2000, Cambridge University Press.
+</ul>
+
+<p>
+
+The PC algorithm takes as arguments a function f, the number of nodes N,
+the maximum fan in K, and additional arguments A which are passed to f.
+The function f(X,Y,S,A) returns 1 if X is conditionally independent of Y given S, and 0
+otherwise.
+For example, suppose we cheat by
+passing in a CI "oracle" which has access to the true DAG; the oracle
+tests for d-separation in this DAG, i.e.,
+f(X,Y,S) calls dsep(X,Y,S,dag). We can to this as follows.
+<pre>
+pdag = learn_struct_pdag_pc('dsep', N, max_fan_in, dag);
+</pre>
+pdag(i,j) = -1 if there is definitely an i->j arc,
+and pdag(i,j) = 1 if there is either an i->j or and i<-j arc.
+<p>
+Applied to the sprinkler network, this returns
+<pre>
+pdag =
+     0     1     1     0
+     1     0     0    -1
+     1     0     0    -1
+     0     0     0     0
+</pre>
+So as expected, we see that the V-structure at the W node is uniquely identified,
+but the other arcs have ambiguous orientation.
+<p>
+We now give an example from p141 (1st edn) / p103 (2nd end) of the SGS
+book.
+This example concerns the female orgasm.
+We are given a correlation matrix C between 7 measured factors (such
+as subjective experiences of coital and masturbatory experiences),
+derived from 281 samples, and want to learn a causal model of the
+data. We will not discuss the merits of this type of work here, but
+merely show how to reproduce the results in the SGS book.
+Their program,
+<a href="http://hss.cmu.edu/html/departments/philosophy/TETRAD/tetrad.html">Tetrad</a>,
+makes use of the Fisher Z-test for conditional
+independence, so we do the same:
+<pre>
+max_fan_in = 4;
+nsamples = 281;
+alpha = 0.05;
+pdag = learn_struct_pdag_pc('cond_indep_fisher_z', n, max_fan_in, C, nsamples, alpha);
+</pre>
+In this case, the CI test is
+<pre>
+f(X,Y,S) = cond_indep_fisher_z(X,Y,S,  C,nsamples,alpha)
+</pre>
+The results match those of Fig 12a of SGS apart from two edge
+differences; presumably this is due to rounding error (although it
+could be a bug, either in BNT or in Tetrad).
+This example can be found in the file BNT/examples/static/pc2.m.
+
+<p>
+
+The IC* algorithm (Pearl and Verma, 1991),
+and the faster FCI algorithm (Spirtes, Glymour, and Scheines 1993),
+are like the IC/PC algorithm, except that they can detect the presence
+of latent variables.
+See the file <tt>learn_struct_pdag_ic_star</tt> written by Tamar
+Kushnir. The output is a matrix P, defined as follows
+(see Pearl (2000), p52 for details):
+<pre>
+% P(i,j) = -1 if there is either a latent variable L such that i <-L->j OR there is a directed edge from i->j.
+% P(i,j) = -2 if there is a marked directed i-*>j edge.
+% P(i,j) = P(j,i) = 1 if there is and undirected edge i--j
+% P(i,j) = P(j,i) = 2 if there is a latent variable L such that i<-L->j.
+</pre>
+
+
+<h2><a name="phl">Philippe Leray's structure learning package</h2>
+
+Philippe Leray has written a 
+<a href="http://bnt.insa-rouen.fr/ajouts.html">
+structure learning package</a> that uses BNT.
+
+It currently (Juen 2003) has the following features:
+<ul>
+<li>PC with Chi2 statistical test 
+<li>             MWST : Maximum weighted Spanning Tree 
+<li>             Hill Climbing 
+<li>             Greedy Search 
+<li>             Structural EM 
+<li>             hist_ic : optimal Histogram based on IC information criterion 
+<li>             cpdag_to_dag 
+<li>             dag_to_cpdag 
+<li>             ... 
+</ul>
+
+
+</a>
+
+
+<!--
+<h2><a name="read_learning">Further reading on learning</h2>
+
+I recommend the following tutorials for more details on learning.
+<ul>
+<li> <a
+href="http://www.cs.berkeley.edu/~murphyk/Papers/intel.ps.gz">My short
+tutorial</a> on graphical models, which contains an overview of learning.
+
+<li> 
+<A HREF="ftp://ftp.research.microsoft.com/pub/tr/TR-95-06.PS">
+A tutorial on learning with Bayesian networks</a>, D. Heckerman,
+Microsoft Research Tech Report, 1995.
+
+<li> <A HREF="http://www-cad.eecs.berkeley.edu/~wray/Mirror/lwgmja">
+Operations for Learning with Graphical Models</a>,
+W. L. Buntine, JAIR'94, 159--225.
+</ul>
+<p>
+-->
+
+
+
+
+
+<h1><a name="engines">Inference engines</h1>
+
+Up until now, we have used the junction tree algorithm for inference.
+However, sometimes this is too slow, or not even applicable.
+In general, there are many inference algorithms each of which make
+different tradeoffs between speed, accuracy, complexity and
+generality. Furthermore, there might be many implementations of the
+same algorithm; for instance, a general purpose, readable version,
+and a highly-optimized, specialized one.
+To cope with this variety, we treat each inference algorithm as an
+object, which we call an inference engine.
+
+<p>
+An inference engine is an object that contains a bnet and supports the
+'enter_evidence' and 'marginal_nodes' methods.  The engine constructor
+takes the bnet as argument and may do some model-specific processing.
+When 'enter_evidence' is called, the engine may do some
+evidence-specific processing.  Finally, when 'marginal_nodes' is
+called, the engine may do some query-specific processing.
+
+<p>
+The amount of work done when each stage is specified -- structure,
+parameters, evidence, and query -- depends on the engine.  The cost of
+work done early in this sequence can be amortized.  On the other hand,
+one can make better optimizations if one waits until later in the
+sequence.
+For example, the parameters might imply
+conditional indpendencies that are not evident in the graph structure,
+but can nevertheless be exploited; the evidence indicates which nodes
+are observed and hence can effectively be disconnected from the
+graph; and the query might indicate that large parts of the network
+are d-separated from the query nodes.  (Since it is not the actual
+<em>values</em> of the evidence that matters, just which nodes are observed,
+many engines allow you to specify which nodes will be observed when they are constructed,
+i.e., before calling 'enter_evidence'. Some engines can still cope if
+the actual pattern of evidence is different, e.g., if there is missing
+data.)
+<p>
+
+Although being maximally lazy (i.e., only doing work when a query is
+issued) may seem desirable,
+this is not always the most efficient.
+For example,
+when learning using EM, we need to call marginal_nodes N times, where N is the
+number of nodes. <a href="varelim">Variable elimination</a> would end
+up repeating a lot of work
+each time marginal_nodes is called, making it inefficient for
+learning. The junction tree algorithm, by contrast, uses dynamic
+programming to avoid this redundant computation --- it calculates all
+marginals in two passes during 'enter_evidence', so calling
+'marginal_nodes' takes constant time.
+<p>
+We will discuss some of the inference algorithms implemented in BNT
+below, and finish with a <a href="#engine_summary">summary</a> of all
+of them.
+
+
+
+
+
+
+
+<h2><a name="varelim">Variable elimination</h2>
+
+The variable elimination algorithm, also known as bucket elimination
+or peeling, is one of the simplest inference algorithms.
+The basic idea is to "push sums inside of products"; this is explained
+in more detail
+<a
+href="http://HTTP.CS.Berkeley.EDU/~murphyk/Bayes/bayes.html#infer">here</a>. 
+<p>
+The principle of distributing sums over products can be generalized
+greatly to apply to any commutative semiring.
+This forms the basis of many common algorithms, such as Viterbi
+decoding and the Fast Fourier Transform. For details, see
+
+<ul>
+<li> R. McEliece and S. M. Aji, 2000.
+<!--<a href="http://www.systems.caltech.edu/EE/Faculty/rjm/papers/GDL.ps">-->
+<a href="GDL.pdf">
+The Generalized Distributive Law</a>,
+IEEE Trans. Inform. Theory, vol. 46, no. 2 (March 2000),
+pp. 325--343. 
+
+
+<li>
+F. R. Kschischang, B. J. Frey and H.-A. Loeliger, 2001.
+<a href="http://www.cs.toronto.edu/~frey/papers/fgspa.abs.html">
+Factor graphs and the sum-product algorithm</a>
+IEEE Transactions on Information Theory, February, 2001.
+
+</ul>
+
+<p>
+Choosing an order in which to sum out the variables so as to minimize
+computational cost is known to be NP-hard.
+The implementation of this algorithm in
+<tt>var_elim_inf_engine</tt> makes no attempt to optimize this
+ordering (in contrast, say, to <tt>jtree_inf_engine</tt>, which uses a
+greedy search procedure to find a good ordering).
+<p>
+Note: unlike most algorithms, var_elim does all its computational work
+inside of <tt>marginal_nodes</tt>, not inside of
+<tt>enter_evidence</tt>.
+
+
+
+
+<h2><a name="global">Global inference methods</h2>
+
+The simplest inference algorithm of all is to explicitely construct
+the joint distribution over all the nodes, and then to marginalize it.
+This is implemented in <tt>global_joint_inf_engine</tt>.
+Since the size of the joint is exponential in the
+number of discrete (hidden) nodes, this is not a very practical algorithm.
+It is included merely for pedagogical and debugging purposes.
+<p>
+Three specialized versions of this algorithm have also been implemented,
+corresponding to the cases where all the nodes are discrete (D), all
+are Gaussian (G), and some are discrete and some Gaussian (CG).
+They are called <tt>enumerative_inf_engine</tt>,
+<tt>gaussian_inf_engine</tt>,
+and <tt>cond_gauss_inf_engine</tt> respectively.
+<p>
+Note: unlike most algorithms, these global inference algorithms do all their computational work
+inside of <tt>marginal_nodes</tt>, not inside of
+<tt>enter_evidence</tt>.
+
+
+<h2><a name="quickscore">Quickscore</h2>
+
+The junction tree algorithm is quite slow on the <a href="#qmr">QMR</a> network,
+since the cliques are so big.
+One simple trick we can use is to notice that hidden leaves do not
+affect the posteriors on the roots, and hence do not need to be
+included in the network.
+A second trick is to notice that the negative findings can be
+"absorbed" into the prior:
+see the file
+BNT/examples/static/mk_minimal_qmr_bnet for details.
+<p>
+
+A much more significant speedup is obtained by exploiting special
+properties of the noisy-or node, as done by the quickscore
+algorithm. For details, see
+<ul>
+<li> Heckerman, "A tractable inference algorithm for diagnosing multiple diseases", UAI 89.
+<li> Rish and Dechter, "On the impact of causal independence", UCI
+tech report, 1998.
+</ul>
+
+This has been implemented in BNT as a special-purpose inference
+engine, which can be created and used as follows:
+<pre>
+engine = quickscore_inf_engine(inhibit, leak, prior);
+engine = enter_evidence(engine, pos, neg);
+m = marginal_nodes(engine, i);
+</pre>
+
+
+<h2><a name="belprop">Belief propagation</h2>
+
+Even using quickscore, exact inference takes time that is exponential
+in the number of positive findings.
+Hence for large networks we need to resort to approximate inference techniques.
+See for example
+<ul>
+<li> T. Jaakkola and M. Jordan, "Variational probabilistic inference and the
+QMR-DT network", JAIR 10, 1999.
+
+<li> K. Murphy, Y. Weiss and M. Jordan, "Loopy belief propagation for approximate inference: an empirical study",
+   UAI 99.
+</ul>
+The latter approximation
+entails applying Pearl's belief propagation algorithm to a model even
+if it has loops (hence the name loopy belief propagation).
+Pearl's algorithm, implemented as <tt>pearl_inf_engine</tt>, gives
+exact results when applied to singly-connected graphs
+(a.k.a. polytrees, since
+the underlying undirected topology is a tree, but a node may have
+multiple parents).
+To apply this algorithm to a graph with loops, 
+use <tt>pearl_inf_engine</tt>.
+This can use a centralized or distributed message passing protocol.
+You can use it as in the following example.
+<pre>
+engine = pearl_inf_engine(bnet, 'max_iter', 30);
+engine = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, i);
+</pre>
+We found that this algorithm often converges, and when it does, often
+is very accurate, but it depends on the precise setting of the
+parameter values of the network.
+(See the file BNT/examples/static/qmr1 to repeat the experiment for yourself.)
+Understanding when and why belief propagation converges/ works
+is a topic of ongoing research.
+<p>
+<tt>pearl_inf_engine</tt> can exploit special structure in noisy-or
+and gmux nodes to compute messages efficiently.
+<p>
+<tt>belprop_inf_engine</tt> is like pearl, but uses potentials to
+represent messages. Hence this is slower.
+<p>
+<tt>belprop_fg_inf_engine</tt> is like belprop,
+but is designed for factor graphs.
+
+
+
+<h2><a name="sampling">Sampling</h2>
+
+BNT now (Mar '02) has two sampling (Monte Carlo) inference algorithms:
+<ul>
+<li> <tt>likelihood_weighting_inf_engine</tt> which does importance
+sampling and can handle any node type.
+<li> <tt>gibbs_sampling_inf_engine</tt>, written by Bhaskara Marthi.
+Currently this can only handle tabular CPDs.
+For a much faster and more powerful Gibbs sampling program, see
+<a href="http://www.mrc-bsu.cam.ac.uk/bugs">BUGS</a>.
+</ul>
+Note: To generate samples from a network (which is not the same as inference!),
+use <tt>sample_bnet</tt>.
+
+
+
+<h2><a name="engine_summary">Summary of inference engines</h2>
+
+
+The inference engines differ in many ways. Here are
+some of the major "axes":
+<ul>
+<li> Works for all topologies or makes restrictions? 
+<li> Works for all node types or makes restrictions?
+<li> Exact or approximate inference?
+</ul>
+
+<p>
+In terms of topology, most engines handle any kind of DAG.
+<tt>belprop_fg</tt> does approximate inference on factor graphs (FG), which
+can be used to represent directed, undirected, and mixed (chain)
+graphs.
+(In the future, we plan to support exact inference on chain graphs.)
+<tt>quickscore</tt> only works on QMR-like models.
+<p>
+In terms of node types: algorithms that use potentials can handle
+discrete (D), Gaussian (G) or conditional Gaussian (CG) models.
+Sampling algorithms can essentially handle any kind of node (distribution).
+Other algorithms make more restrictive assumptions in exchange for
+speed.
+<p>
+Finally, most algorithms are designed to give the exact answer.
+The belief propagation algorithms are exact if applied to trees, and
+in some other cases.
+Sampling is considered approximate, even though, in the limit of an
+infinite number of samples, it gives the exact answer.
+
+<p>
+
+Here is a summary of the properties 
+of all the engines in BNT which work on static networks.
+<p>
+<table>
+<table border units = pixels><tr>
+<td align=left width=0>Name
+<td align=left width=0>Exact?
+<td align=left width=0>Node type?
+<td align=left width=0>topology
+<tr>
+<tr>
+<td align=left> belprop
+<td align=left> approx
+<td align=left> D
+<td align=left> DAG
+<tr>
+<td align=left> belprop_fg
+<td align=left> approx
+<td align=left> D
+<td align=left> factor graph
+<tr>
+<td align=left> cond_gauss
+<td align=left> exact
+<td align=left> CG
+<td align=left> DAG
+<tr>
+<td align=left> enumerative
+<td align=left> exact
+<td align=left> D
+<td align=left> DAG
+<tr>
+<td align=left> gaussian
+<td align=left> exact
+<td align=left> G
+<td align=left> DAG
+<tr>
+<td align=left> gibbs
+<td align=left> approx
+<td align=left> D
+<td align=left> DAG
+<tr>
+<td align=left> global_joint
+<td align=left> exact
+<td align=left> D,G,CG
+<td align=left> DAG
+<tr>
+<td align=left> jtree
+<td align=left> exact
+<td align=left> D,G,CG
+<td align=left> DAG
+b<tr>
+<td align=left> likelihood_weighting
+<td align=left> approx
+<td align=left> any
+<td align=left> DAG
+<tr>
+<td align=left> pearl
+<td align=left> approx
+<td align=left> D,G
+<td align=left> DAG
+<tr>
+<td align=left> pearl
+<td align=left> exact
+<td align=left> D,G
+<td align=left> polytree
+<tr>
+<td align=left> quickscore
+<td align=left> exact
+<td align=left> noisy-or
+<td align=left> QMR
+<tr>
+<td align=left> stab_cond_gauss
+<td align=left> exact
+<td align=left> CG
+<td align=left> DAG
+<tr>
+<td align=left> var_elim
+<td align=left> exact
+<td align=left> D,G,CG
+<td align=left> DAG
+</table>
+
+
+
+<h1><a name="influence">Influence diagrams/ decision making</h1>
+
+BNT implements an exact algorithm for solving LIMIDs (limited memory
+influence diagrams), described in
+<ul>
+<li> S. L. Lauritzen and D. Nilsson.
+<a href="http://www.math.auc.dk/~steffen/papers/limids.pdf">
+Representing and solving decision problems with limited
+information</a>
+Management Science, 47, 1238 - 1251. September 2001.
+</ul>
+LIMIDs explicitely show all information arcs, rather than implicitely
+assuming no forgetting. This allows them to model forgetful
+controllers.
+<p>
+See the examples in <tt>BNT/examples/limids</tt> for details.
+
+
+
+
+<h1>DBNs, HMMs, Kalman filters and all that</h1>
+
+Click <a href="usage_dbn.html">here</a> for documentation about how to
+use BNT for dynamical systems and sequence data.
+
+
+</BODY>
diff --git a/sourcecodes/bnt-master/docs/usage_02nov13.html b/sourcecodes/bnt-master/docs/usage_02nov13.html
new file mode 100644
index 00000000..a1e24294
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/usage_02nov13.html
@@ -0,0 +1,3215 @@
+<HEAD>
+<TITLE>How to use the Bayes Net Toolbox</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF">
+<!-- white background is better for the pictures and equations -->
+
+<h1>How to use the Bayes Net Toolbox</h1>
+
+This documentation was last updated on 13 November 2002.
+<br>
+Click <a href="changelog.html">here</a> for a list of changes made to
+BNT.
+<br>
+Click 
+<a href="http://bnt.insa-rouen.fr/">here</a>
+for a French version of this documentation (which might not
+be up-to-date).
+
+
+<p>
+
+<ul>
+<li> <a href="#install">Installation</a>
+<ul>
+<li> <a href="#installM">Installing the Matlab code</a>
+<li> <a href="#installC">Installing the C code</a>
+<li> <a href="../matlab_tips.html">Useful Matlab tips</a>.
+</ul>
+
+<li> <a href="#basics">Creating your first Bayes net</a>
+  <ul>
+  <li> <a href="#basics">Creating a model by hand</a>
+  <li> <a href="#file">Loading a model from a file</a>
+  <li> <a href="http://bnt.insa-rouen.fr/ajouts.html">Creating a model using a GUI</a>
+  </ul>
+
+<li> <a href="#inference">Inference</a>
+  <ul>
+  <li> <a href="#marginal">Computing marginal distributions</a>
+  <li> <a href="#joint">Computing joint distributions</a>
+  <li> <a href="#soft">Soft/virtual evidence</a>
+  <li> <a href="#mpe">Most probable explanation</a>
+  </ul>
+
+<li> <a href="#cpd">Conditional Probability Distributions</a>
+  <ul>
+  <li> <a href="#tabular">Tabular (multinomial) nodes</a>
+  <li> <a href="#noisyor">Noisy-or nodes</a>
+  <li> <a href="#deterministic">Other (noisy) deterministic nodes</a>
+  <li> <a href="#softmax">Softmax (multinomial logit) nodes</a>
+  <li> <a href="#mlp">Neural network nodes</a>
+  <li> <a href="#root">Root nodes</a>
+  <li> <a href="#gaussian">Gaussian nodes</a>
+  <li> <a href="#glm">Generalized linear model nodes</a>
+  <li> <a href="#dtree">Classification/regression tree nodes</a>
+  <li> <a href="#nongauss">Other continuous distributions</a>
+  <li> <a href="#cpd_summary">Summary of CPD types</a>
+  </ul>
+
+<li> <a href="#examples">Example models</a>
+  <ul>
+  <li> <a
+  href="http://www.media.mit.edu/wearables/mithril/BNT/mixtureBNT.txt">
+Gaussian mixture models</a>
+  <li> <a href="#pca">PCA, ICA, and all that</a>
+  <li> <a href="#mixep">Mixtures of experts</a>
+  <li> <a href="#hme">Hierarchical mixtures of experts</a>
+  <li> <a href="#qmr">QMR</a>
+  <li> <a href="#cg_model">Conditional Gaussian models</a>
+  <li> <a href="#hybrid">Other hybrid models</a>
+  </ul>
+
+<li> <a href="#param_learning">Parameter learning</a>
+  <ul>
+  <li> <a href="#load_data">Loading data from a file</a>
+  <li> <a href="#mle_complete">Maximum likelihood parameter estimation from complete data</a>
+  <li> <a href="#prior">Parameter priors</a>
+  <li> <a href="#bayes_learn">(Sequential) Bayesian parameter updating from complete data</a>
+  <li> <a href="#em">Maximum likelihood parameter estimation with  missing values (EM)</a>
+  <li> <a href="#tying">Parameter tying</a>
+  </ul>
+
+<li> <a href="#structure_learning">Structure learning</a>
+  <ul>
+  <li> <a href="#enumerate">Exhaustive search</a>
+  <li> <a href="#K2">K2</a>
+  <li> <a href="#hill_climb">Hill-climbing</a>
+  <li> <a href="#mcmc">MCMC</a>
+  <li> <a href="#active">Active learning</a>
+  <li> <a href="#struct_em">Structural EM</a>
+  <li> <a href="#graphdraw">Visualizing the learned graph  structure</a>
+  <li> <a href="#constraint">Constraint-based methods</a>
+  </ul>
+
+
+<li> <a href="#engines">Inference engines</a>
+  <ul>
+  <li> <a href="#jtree">Junction tree</a>
+  <li> <a href="#varelim">Variable elimination</a>
+  <li> <a href="#global">Global inference methods</a>
+  <li> <a href="#quickscore">Quickscore</a>
+  <li> <a href="#belprop">Belief propagation</a>
+  <li> <a href="#sampling">Sampling (Monte Carlo)</a>
+  <li> <a href="#engine_summary">Summary of inference engines</a>
+  </ul>
+
+
+<li> <a href="#influence">Influence diagrams/ decision making</a>
+
+
+<li> <a href="usage_dbn.html">DBNs, HMMs, Kalman filters and all that</a>
+</ul>
+
+</ul>
+
+
+
+
+<h1><a name="install">Installation</h1>
+
+<h2><a name="installM">Installing the Matlab code</h2>
+
+<ul>
+<li> <a href="bnt_download.html">Download</a> the BNT.zip file.
+
+<p>
+<li> Unpack the file. In Unix, type
+<!--"tar xvf BNT.tar".-->
+"unzip FullBNT.zip".
+In Windows, use
+a program like <a href="http://www.winzip.com">Winzip</a>. This will
+create a directory called FullBNT, which contains BNT and other libraries.
+
+<p>
+<li> Read the file <tt>BNT/README</tt> to make sure the date
+matches the one on the top of <a href=bnt.html>the BNT home page</a>.
+If not, you may need to press 'refresh' on your browser, and download
+again, to get the most recent version.
+
+<p>
+<li> <b>Edit the file "BNT/add_BNT_to_path.m"</b> so it contains the correct
+pathname.
+For example, in Windows,
+I download FullBNT.zip into C:\kpmurphy\matlab, and 
+then comment out the second line (with the % character), and uncomment
+the third line, which reads
+<pre>
+BNT_HOME = 'C:\kpmurphy\matlab\FullBNT';
+</pre>
+
+<p>
+<li> Start up Matlab.
+
+<p>
+<li> Type "ver" at the Matlab prompt (">>").
+<b>You need Matlab version 5.2 or newer to run BNT</b>.
+(Versions 5.0 and 5.1 have a memory leak which seems to sometimes
+crash BNT.)
+
+<p>
+<li> Move to the BNT directory.
+For example, in Windows, I type
+<pre>
+>> cd C:\kpmurphy\matlab\FullBNT\BNT
+</pre>
+
+<p>
+<li> Type "add_BNT_to_path".
+This executes the command
+<tt>addpath(genpath(BNT_HOME))</tt>,
+which adds all directories below FullBNT to the matlab path.
+
+<p>
+<li> Type "test_BNT".
+
+If all goes well, this will produce a bunch of numbers and maybe some
+warning messages (which you can ignore), but no error messages.
+(The warnings should only be of the form
+"Warning: Maximum number of iterations has been exceeded", and are
+produced by Netlab.)
+
+<p>
+<li> <a href="http://groups.yahoo.com/group/BayesNetToolbox/join">
+Join the BNT email list</a>
+
+</ul>
+
+
+If you are new to Matlab, you might like to check out
+<a href="matlab_tips.html">some useful Matlab tips</a>.
+For instance, this explains how to create a startup file, which can be
+used to set your path variable automatically, so you can avoid having
+to type the above commands every time.
+
+
+
+
+<h2><a name="installC">Installing the C code</h2>
+
+Some BNT functions also have C implementations.
+<b>It is not necessary to install the C code</b>, but it can result in a speedup
+of a factor of 5-10.
+To install all the C code, 
+edit installC_BNT.m so it contains the right path,
+then type <tt>installC_BNT</tt>.
+To uninstall all the C code,
+edit uninstallC_BNT.m so it contains the right path,
+then type <tt>uninstallC_BNT</tt>.
+For an up-to-date list of the files which have C implementations, see
+BNT/installC_BNT.m.
+
+<p>
+mex is a script that lets you call C code from Matlab - it does not compile matlab to
+C (see mcc below).
+If your C/C++ compiler  is set up correctly, mex should work out of
+the box.
+If not, you might need to type
+<p>
+<tt> mex -setup</tt>
+<p>
+before calling installC.
+<p>
+To make mex call gcc on Windows,
+you must install <a
+href="http://www.mrc-cbu.cam.ac.uk/Imaging/gnumex20.html">gnumex</a>.
+You can use the <a href="http://www.mingw.org/">minimalist GNU for
+Windows</a> version of gcc, or
+the <a href="http://sources.redhat.com/cygwin/">cygwin</a> version.
+<p>
+In general, typing 
+'mex foo.c' from inside Matlab creates a file called
+'foo.mexglx' or 'foo.dll' (the exact file
+extension is system dependent - on Linux it is 'mexglx', on Windows it is '.dll').
+The resulting file will hide the original 'foo.m' (if it existed), i.e., 
+typing 'foo' at the prompt will call the compiled C version.
+To reveal the original matlab version, just delete foo.mexglx (this is
+what uninstallC does).
+<p>
+Sometimes it takes time for Matlab to realize that the file has
+changed from matlab to C or vice versa; try typing 'clear all' or
+restarting Matlab to refresh it.
+To find out which version of a file you are running, type
+'which foo'.
+<p>
+<a href="http://www.mathworks.com/products/compiler">mcc</a>, the
+Matlab to C compiler, is a separate product, 
+and is quite different from mex. It does not yet support
+objects/classes, which is why we can't compile all of BNT to C automatically.
+Also, hand-written C code is usually much
+better than the C code generated by mcc.
+
+
+<p>
+Acknowledgements:
+Although I wrote some of the C code, most of
+the C code (e.g., for jtree and dpot) was written by Wei Hu;
+the triangulation C code was written by Ilya Shpitser.
+
+
+<h1><a name="basics">Creating your first Bayes net</h1>
+
+To define a Bayes net, you must specify the graph structure and then
+the parameters. We look at each in turn, using a simple example
+(adapted from Russell and
+Norvig, "Artificial Intelligence: a Modern Approach", Prentice Hall,
+1995, p454).
+
+
+<h2>Graph structure</h2>
+
+
+Consider the following network.
+
+<p>
+<center>
+<IMG SRC="Figures/sprinkler.gif">
+</center>
+<p>
+
+<P>
+To specify this directed acyclic graph (dag), we create an adjacency matrix:
+<PRE>
+N = 4; 
+dag = zeros(N,N);
+C = 1; S = 2; R = 3; W = 4;
+dag(C,[R S]) = 1;
+dag(R,W) = 1;
+dag(S,W)=1;
+</PRE>
+<P>
+We have numbered the nodes as follows:
+Cloudy = 1, Sprinkler = 2, Rain = 3, WetGrass = 4.
+<b>The nodes must always be numbered in topological order, i.e.,
+ancestors before descendants.</b>
+For a more complicated graph, this is a little inconvenient: we will
+see how to get around this <a href="usage_dbn.html#bat">below</a>.
+<p>
+In Matlab 6, you can use logical arrays instead of double arrays,
+which are 4 times smaller:
+<pre>
+dag = false(N,N);
+dag(C,[R S]) = true;
+...
+</pre>
+<p>
+A preliminary attempt to make a <b>GUI</b>
+has been writte by Philippe LeRay and can be downloaded
+from <a href="http://bnt.insa-rouen.fr/ajouts.html">here</a>.
+<p>
+You can visualize the resulting  graph structure using
+the methods discussed <a href="#graphdraw">below</a>.
+
+<h2>Creating the Bayes net shell</h2>
+
+In addition to specifying the graph structure,
+we must specify the size and type of each node.
+If a node is discrete, its size is the
+number of possible values
+each node can take on; if a node is continuous,
+it can be a vector, and its size is the length of this vector.
+In this case, we will assume all nodes are discrete and binary.
+<PRE>
+discrete_nodes = 1:N;
+node_sizes = 2*ones(1,N); 
+</pre>
+If the nodes were not binary, you could type e.g., 
+<pre>
+node_sizes = [4 2 3 5];
+</pre>
+meaning that Cloudy has 4 possible values, 
+Sprinkler has 2 possible values, etc.
+Note that these are cardinal values, not ordinal, i.e., 
+they are not ordered in any way, like 'low', 'medium', 'high'.
+<p>
+We are now ready to make the Bayes net:
+<pre>
+bnet = mk_bnet(dag, node_sizes, 'discrete', discrete_nodes);
+</PRE>
+By default, all nodes are assumed to be discrete, so we can also just
+write
+<pre>
+bnet = mk_bnet(dag, node_sizes);
+</PRE>
+You may also specify which nodes will be observed.
+If you don't know, or if this not fixed in advance,
+just use the empty list (the default).
+<pre>
+onodes = [];
+bnet = mk_bnet(dag, node_sizes, 'discrete', discrete_nodes, 'observed', onodes);
+</PRE>
+Note that optional arguments are specified using a name/value syntax.
+This is common for many BNT functions.
+In general, to find out more about a function (e.g., which optional
+arguments it takes), please see its
+documentation string by typing
+<pre>
+help mk_bnet
+</pre>
+See also other <a href="matlab_tips.html">useful Matlab tips</a>.
+<p>
+It is possible to associate names with nodes, as follows:
+<pre>
+bnet = mk_bnet(dag, node_sizes, 'names', {'cloudy','S','R','W'}, 'discrete', 1:4);
+</pre>
+You can then refer to a node by its name:
+<pre>
+C = bnet.names{'cloudy'}; % bnet.names is an associative array
+bnet.CPD{C} = tabular_CPD(bnet, C, [0.5 0.5]);
+</pre>
+
+
+<h2><a name="cpt">Parameters</h2>
+
+A model consists of the graph structure and the parameters.
+The parameters are represented by CPD objects (CPD = Conditional
+Probability Distribution), which define the probability distribution
+of a node given its parents.
+(We will use the terms "node" and "random variable" interchangeably.)
+The simplest kind of CPD is a table (multi-dimensional array), which
+is suitable when all the nodes are discrete-valued. Note that the discrete
+values are not assumed to be ordered in any way; that is, they
+represent categorical quantities, like male and female, rather than
+ordinal quantities, like low, medium and high.
+(We will discuss CPDs in more detail <a href="#cpd">below</a>.)
+<p>
+Tabular CPDs, also called CPTs (conditional probability tables),
+are stored as multidimensional arrays, where the dimensions
+are arranged in the same order as the nodes, e.g., the CPT for node 4
+(WetGrass) is indexed by Sprinkler (2), Rain (3) and then WetGrass (4) itself.
+Hence the child is always the last dimension.
+If a node has no parents, its CPT is a column vector representing its
+prior.
+Note that in Matlab (unlike C), arrays are indexed
+from 1, and are layed out in memory such that the first index toggles
+fastest, e.g., the CPT for node 4 (WetGrass) is as follows
+<P>
+<P><IMG ALIGN=BOTTOM SRC="Figures/CPTgrass.gif"><P>
+<P>
+where we have used the convention that false==1, true==2.
+We can create this CPT in Matlab as follows
+<PRE>
+CPT = zeros(2,2,2);
+CPT(1,1,1) = 1.0;
+CPT(2,1,1) = 0.1;
+...
+</PRE>
+Here is an easier way:
+<PRE>
+CPT = reshape([1 0.1 0.1 0.01 0 0.9 0.9 0.99], [2 2 2]);
+</PRE>
+In fact, we don't need to reshape the array, since the CPD constructor
+will do that for us. So we can just write
+<pre>
+bnet.CPD{W} = tabular_CPD(bnet, W, 'CPT', [1 0.1 0.1 0.01 0 0.9 0.9 0.99]);
+</pre>
+The other nodes are created similarly (using the old syntax for
+optional parameters)
+<PRE>
+bnet.CPD{C} = tabular_CPD(bnet, C, [0.5 0.5]);
+bnet.CPD{R} = tabular_CPD(bnet, R, [0.8 0.2 0.2 0.8]);
+bnet.CPD{S} = tabular_CPD(bnet, S, [0.5 0.9 0.5 0.1]);
+bnet.CPD{W} = tabular_CPD(bnet, W, [1 0.1 0.1 0.01 0 0.9 0.9 0.99]);
+</PRE>
+
+
+<h2><a name="rnd_cpt">Random Parameters</h2>
+
+If we do not specify the CPT, random parameters will be
+created, i.e., each "row" of the CPT will be drawn from the uniform distribution.
+To ensure repeatable results, use
+<pre>
+rand('state', seed);
+randn('state', seed);
+</pre>
+To control the degree of randomness (entropy),
+you can sample each row of the CPT from a Dirichlet(p,p,...) distribution.
+If p << 1, this encourages "deterministic" CPTs (one entry near 1, the rest near 0).
+If p = 1, each entry is drawn from U[0,1].
+If p >> 1, the entries will all be near 1/k, where k is the arity of
+this node, i.e., each row will be nearly uniform.
+You can do this as follows, assuming this node
+is number i, and ns is the node_sizes.
+<pre>
+k = ns(i);
+ps = parents(dag, i);
+psz = prod(ns(ps));
+CPT = sample_dirichlet(p*ones(1,k), psz);
+bnet.CPD{i} = tabular_CPD(bnet, i, 'CPT', CPT);
+</pre>
+
+
+<h2><a name="file">Loading a network from a file</h2>
+
+If you already have a Bayes net represented in the XML-based
+<a href="http://www.cs.cmu.edu/afs/cs/user/fgcozman/www/Research/InterchangeFormat/">
+Bayes Net Interchange Format (BNIF)</a> (e.g., downloaded from the 
+<a
+href="http://www.cs.huji.ac.il/labs/compbio/Repository">
+Bayes Net repository</a>),
+you can convert it to BNT format using
+the 
+<a href="http://www.digitas.harvard.edu/~ken/bif2bnt/">BIF-BNT Java
+program</a> written by Ken Shan.
+(This is not necessarily up-to-date.)
+
+
+<h2>Creating a model using a GUI</h2>
+
+Click <a href="http://bnt.insa-rouen.fr/ajouts.html">here</a>.
+
+
+
+<h1><a name="inference">Inference</h1>
+
+Having created the BN, we can now use it for inference.
+There are many different algorithms for doing inference in Bayes nets,
+that make different tradeoffs between speed, 
+complexity, generality, and accuracy.
+BNT therefore offers a variety of different inference
+"engines". We will discuss these
+in more detail <a href="#engines">below</a>.
+For now, we will use the junction tree
+engine, which is the mother of all exact inference algorithms.
+This can be created as follows.
+<pre>
+engine = jtree_inf_engine(bnet);
+</pre>
+The other engines have similar constructors, but might take
+additional, algorithm-specific parameters.
+All engines are used in the same way, once they have been created.
+We illustrate this in the following sections.
+
+
+<h2><a name="marginal">Computing marginal distributions</h2>
+
+Suppose we want to compute the probability that the sprinker was on
+given that the grass is wet.
+The evidence consists of the fact that W=2. All the other nodes
+are hidden (unobserved). We can specify this as follows.
+<pre>
+evidence = cell(1,N);
+evidence{W} = 2;
+</pre>
+We use a 1D cell array instead of a vector to
+cope with the fact that nodes can be vectors of different lengths.
+In addition, the value [] can be used
+to denote 'no evidence', instead of having to specify the observation
+pattern as a separate argument.
+(Click <a href="cellarray.html">here</a> for a quick tutorial on cell
+arrays in matlab.)
+<p>
+We are now ready to add the evidence to the engine.
+<pre>
+[engine, loglik] = enter_evidence(engine, evidence);
+</pre>
+The behavior of this function is algorithm-specific, and is discussed
+in more detail <a href="#engines">below</a>.
+In the case of the jtree engine,
+enter_evidence implements a two-pass message-passing scheme.
+The first return argument contains the modified engine, which
+incorporates the evidence. The second return argument contains the
+log-likelihood of the evidence. (Not all engines are capable of
+computing the log-likelihood.)
+<p>
+Finally, we can compute p=P(S=2|W=2) as follows.
+<PRE>
+marg = marginal_nodes(engine, S);
+marg.T
+ans =
+      0.57024
+      0.42976
+p = marg.T(2);
+</PRE>
+We see that p = 0.4298.
+<p>
+Now let us add the evidence that it was raining, and see what
+difference it makes.
+<PRE>
+evidence{R} = 2;
+[engine, loglik] = enter_evidence(engine, evidence);
+marg = marginal_nodes(engine, S);
+p = marg.T(2);
+</PRE>
+We find that p = P(S=2|W=2,R=2) = 0.1945,
+which is lower than
+before, because the rain can ``explain away'' the
+fact that the grass is wet.
+<p>
+You can plot a marginal distribution over a discrete variable
+as a barchart using the built 'bar' function:
+<pre>
+bar(marg.T)
+</pre>
+This is what it looks like
+
+<p>
+<center>
+<IMG SRC="Figures/sprinkler_bar.gif">
+</center>
+<p>
+
+<h2><a name="observed">Observed nodes</h2>
+
+What happens if we ask for the marginal on an observed node, e.g. P(W|W=2)?
+An observed discrete node effectively only has 1 value (the observed
+      one) --- all other values would result in 0 probability.
+For efficiency, BNT treats observed (discrete) nodes as if they were
+      set to 1, as we see below:
+<pre>
+evidence = cell(1,N);
+evidence{W} = 2;
+engine = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, W);
+m.T
+ans =
+     1
+</pre>
+This can get a little confusing, since we assigned W=2.
+So we can ask BNT to add the evidence back in by passing in an optional argument:
+<pre>
+m = marginal_nodes(engine, W, 1);
+m.T
+ans =
+     0
+     1
+</pre>
+This shows that P(W=1|W=2) = 0 and P(W=2|W=2) = 1.
+
+
+
+<h2><a name="joint">Computing joint distributions</h2>
+
+We can compute the joint probability on a set of nodes as in the
+following example.
+<pre>
+evidence = cell(1,N);
+[engine, ll] = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, [S R W]);
+</pre>
+m is a structure. The 'T' field is a multi-dimensional array (in
+this case, 3-dimensional) that contains the joint probability
+distribution on the specified nodes.
+<pre>
+>> m.T
+ans(:,:,1) =
+    0.2900    0.0410
+    0.0210    0.0009
+ans(:,:,2) =
+         0    0.3690
+    0.1890    0.0891
+</pre>
+We see that P(S=1,R=1,W=2) = 0, since it is impossible for the grass
+to be wet if both the rain and sprinkler are off.
+<p>
+Let us now add some evidence to R.
+<pre>
+evidence{R} = 2;
+[engine, ll] = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, [S R W])
+m = 
+    domain: [2 3 4]
+         T: [2x1x2 double]
+>> m.T
+m.T
+ans(:,:,1) =
+    0.0820
+    0.0018
+ans(:,:,2) =
+    0.7380
+    0.1782
+</pre>
+The joint T(i,j,k) = P(S=i,R=j,W=k|evidence)
+should have T(i,1,k) = 0 for all i,k, since R=1 is incompatible
+with the evidence that R=2.
+Instead of creating large tables with many 0s, BNT sets the effective
+size of observed (discrete) nodes to 1, as explained above.
+This is why m.T has size 2x1x2.
+To get a 2x2x2 table, type
+<pre>
+m = marginal_nodes(engine, [S R W], 1)
+m = 
+    domain: [2 3 4]
+         T: [2x2x2 double]
+>> m.T
+m.T
+ans(:,:,1) =
+            0        0.082
+            0       0.0018
+ans(:,:,2) =
+            0        0.738
+            0       0.1782
+</pre>
+
+<p>
+Note: It is not always possible to compute the joint on arbitrary
+sets of nodes: it depends on which inference engine you use, as discussed 
+in more detail <a href="#engines">below</a>. 
+
+
+<h2><a name="soft">Soft/virtual evidence</h2>
+
+Sometimes a node is not observed, but we have some distribution over
+its possible values; this is often called "soft" or "virtual"
+evidence.
+One can use this as follows
+<pre>
+[engine, loglik] = enter_evidence(engine, evidence, 'soft', soft_evidence);
+</pre>
+where soft_evidence{i} is either [] (if node i has no soft evidence)
+or is a vector representing the probability distribution over i's
+possible values.
+For example, if we don't know i's exact value, but we know its
+likelihood ratio is 60/40, we can write evidence{i} = [] and
+soft_evidence{i} = [0.6 0.4].
+<p>
+Currently only jtree_inf_engine supports this option.
+It assumes that all hidden nodes, and all nodes for
+which we have soft evidence, are discrete.
+For a longer example, see BNT/examples/static/softev1.m. 
+
+
+<h2><a name="mpe">Most probable explanation</h2>
+
+To compute the most probable explanation (MPE) of the evidence (i.e.,
+the most probable assignment, or a mode of the joint), use
+<pre>
+[mpe, ll] = calc_mpe(engine, evidence);     
+</pre>
+mpe{i} is the most likely value of node i.
+This calls enter_evidence with the 'maximize' flag set to 1, which
+causes the engine to do max-product instead of sum-product.
+The resulting max-marginals are then thresholded.
+If there is more than one maximum probability assignment, we must take 
+    care to break ties in a consistent manner (thresholding the
+    max-marginals may give the wrong result). To force this behavior,
+    type
+<pre>
+[mpe, ll] = calc_mpe(engine, evidence, 1);     
+</pre>
+Note that computing the MPE is someties called abductive reasoning.
+    
+<p>
+You can also use <tt>calc_mpe_bucket</tt> written by Ron Zohar,
+that does a forwards max-product pass, and then a backwards traceback
+pass, which is how Viterbi is traditionally implemented.
+
+
+
+<h1><a name="cpd">Conditional Probability Distributions</h1>
+
+A Conditional Probability Distributions (CPD)
+defines P(X(i) | X(Pa(i))), where X(i) is the i'th node, and X(Pa(i))
+are the parents of node i. There are many ways to represent this
+distribution, which depend in part on whether X(i) and X(Pa(i)) are
+discrete, continuous, or a combination.
+We will discuss various representations below.
+
+
+<h2><a name="tabular">Tabular nodes</h2>
+
+If the CPD is represented as a table (i.e., if it is a multinomial
+distribution), it has a number of parameters that is exponential in
+the number of parents. See the example <a href="#cpt">above</a>.
+
+
+<h2><a name="noisyor">Noisy-or nodes</h2>
+
+A noisy-OR node is like a regular logical OR gate except that
+sometimes the effects of parents that are on get inhibited.
+Let the prob. that parent i gets inhibited be q(i).
+Then a node, C, with 2 parents, A and B, has the following CPD, where
+we use F and T to represent off and on (1 and 2 in BNT).
+<pre>
+A  B  P(C=off)      P(C=on)
+---------------------------
+F  F  1.0           0.0
+T  F  q(A)          1-q(A)
+F  T  q(B)          1-q(B)
+T  T  q(A)q(B)      q-q(A)q(B)
+</pre>
+Thus we see that the causes get inhibited independently.
+It is common to associate a "leak" node with a noisy-or CPD, which is
+like a parent that is always on. This can account for all other unmodelled
+causes which might turn the node on.
+<p>
+The noisy-or distribution is similar to the logistic distribution.
+To see this, let the nodes, S(i), have values in {0,1}, and let q(i,j)
+be the prob. that j inhibits i. Then
+<pre>
+Pr(S(i)=1 | parents(S(i))) = 1 - prod_{j} q(i,j)^S(j)
+</pre>
+Now define w(i,j) = -ln q(i,j) and rho(x) = 1-exp(-x). Then
+<pre>
+Pr(S(i)=1 | parents(S(i))) = rho(sum_j w(i,j) S(j))
+</pre>
+For a sigmoid node, we have
+<pre>
+Pr(S(i)=1 | parents(S(i))) = sigma(-sum_j w(i,j) S(j))
+</pre>
+where sigma(x) = 1/(1+exp(-x)). Hence they differ in the choice of
+the activation function (although both are monotonically increasing).
+In addition, in the case of a noisy-or, the weights are constrained to be
+positive, since they derive from probabilities q(i,j).
+In both cases, the number of parameters is <em>linear</em> in the
+number of parents, unlike the case of a multinomial distribution,
+where the number of parameters is exponential in the number of parents.
+We will see an example of noisy-OR nodes <a href="#qmr">below</a>.
+
+
+<h2><a name="deterministic">Other (noisy) deterministic nodes</h2>
+
+Deterministic CPDs for discrete random variables can be created using
+the deterministic_CPD class. It is also possible to 'flip' the output
+of the function with some probability, to simulate noise.
+The boolean_CPD class is just a special case of a
+deterministic CPD, where the parents and child are all binary.
+<p>
+Both of these classes are just "syntactic sugar" for the tabular_CPD
+class.
+
+
+
+<h2><a name="softmax">Softmax nodes</h2>
+
+If we have a discrete node with a continuous parent,
+we can define its CPD using a softmax function 
+(also known as the multinomial logit function).
+This acts like a soft thresholding operator, and is defined as follows:
+<pre>
+                    exp(w(:,i)'*x + b(i)) 
+Pr(Q=i | X=x)  =  -----------------------------
+                  sum_j   exp(w(:,j)'*x + b(j))
+
+</pre>
+The parameters of a softmax node, w(:,i) and b(i), i=1..|Q|, have the
+following interpretation: w(:,i)-w(:,j) is the normal vector to the
+decision boundary between classes i and j,
+and b(i)-b(j) is its offset (bias). For example, suppose
+X is a 2-vector, and Q is binary. Then
+<pre>
+w = [1 -1;
+     0 0];
+
+b = [0 0];
+</pre>
+means class 1 are points in the 2D plane with positive x coordinate,
+and class 2 are points in the 2D plane with negative x coordinate.
+If w has large magnitude, the decision boundary is sharp, otherwise it
+is soft.
+In the special case that Q is binary (0/1), the softmax function reduces to the logistic
+(sigmoid) function.
+<p>
+Fitting a softmax function can be done using the iteratively reweighted
+least squares (IRLS) algorithm.
+We use the implementation from
+<a href="http://www.ncrg.aston.ac.uk/netlab/">Netlab</a>.
+Note that since
+the softmax distribution is not in the exponential family, it does not
+have finite sufficient statistics, and hence we must store all the
+training data in uncompressed form.
+If this takes too much space, one should use online (stochastic) gradient
+descent (not implemented in BNT).
+<p>
+If a softmax node also has discrete parents,
+we use a different set of w/b parameters for each combination of
+parent values, as in the <a href="#gaussian">conditional linear
+Gaussian CPD</a>.
+This feature was implemented by Pierpaolo Brutti.
+He is currently extending it so that discrete parents can be treated
+as if they were continuous, by adding indicator variables to the X
+vector.
+<p>
+We will see an example of softmax nodes <a href="#mixexp">below</a>.
+
+
+<h2><a name="mlp">Neural network nodes</h2>
+
+Pierpaolo Brutti has implemented the mlp_CPD class, which uses a multi layer perceptron
+to implement a mapping from continuous parents to discrete children,
+similar to the softmax function.
+(If there are also discrete parents, it creates a mixture of MLPs.)
+It uses code from <a
+href="http://www.ncrg.aston.ac.uk/netlab/">Netlab</a>.
+This is work in progress.
+
+<h2><a name="root">Root nodes</h2>
+
+A root node has no parents and no parameters; it can be used to model
+an observed, exogeneous input variable, i.e., one which is "outside"
+the model. 
+This is useful for conditional density models.
+We will see an example of root nodes <a href="#mixexp">below</a>.
+
+
+<h2><a name="gaussian">Gaussian nodes</h2>
+
+We now consider a distribution suitable for the continuous-valued nodes.
+Suppose the node is called Y, its continuous parents (if any) are
+called X, and its discrete parents (if any) are called Q.
+The distribution on Y is defined as follows:
+<pre>
+- no parents: Y ~ N(mu, Sigma)
+- cts parents : Y|X=x ~ N(mu + W x, Sigma)
+- discrete parents: Y|Q=i ~ N(mu(:,i), Sigma(:,:,i))
+- cts and discrete parents: Y|X=x,Q=i ~ N(mu(:,i) + W(:,:,i) * x, Sigma(:,:,i))
+</pre>
+where N(mu, Sigma) denotes a Normal distribution with mean mu and
+covariance Sigma. Let |X|, |Y| and |Q| denote the sizes of X, Y and Q
+respectively.
+If there are no discrete parents, |Q|=1; if there is
+more than one, then |Q| = a vector of the sizes of each discrete parent.
+If there are no continuous parents, |X|=0; if there is more than one,
+then |X| = the sum of their sizes.
+Then mu is a |Y|*|Q| vector, Sigma is a |Y|*|Y|*|Q| positive
+semi-definite matrix, and W is a |Y|*|X|*|Q| regression (weight)
+matrix.
+<p>
+We can create a Gaussian node with random parameters as follows.
+<pre>
+bnet.CPD{i} = gaussian_CPD(bnet, i);
+</pre>
+We can specify the value of one or more of the parameters as in the
+following example, in which |Y|=2, and |Q|=1.
+<pre>
+bnet.CPD{i} = gaussian_CPD(bnet, i, 'mean', [0; 0], 'weights', randn(Y,X), 'cov', eye(Y));
+</pre>
+<p>
+We will see an example of conditional linear Gaussian nodes <a
+href="#cg_model">below</a>. 
+<p>
+<b>When learning Gaussians from data</b>, it is helpful to ensure the
+data has a small magnitde
+(see e.g., KPMstats/standardize) to prevent numerical problems.
+Unless you have a lot of data, it is also a very good idea to use
+diagonal instead of full covariance matrices.
+(BNT does not currently support spherical covariances, although it
+would be easy to add, since  KPMstats/clg_Mstep supports this option;
+you would just need to modify gaussian_CPD/update_ess to accumulate
+weighted inner products.)
+
+
+
+<h2><a name="nongauss">Other continuous distributions</h2>
+
+Currently BNT does not support any CPDs for continuous nodes other
+than the Gaussian.
+However, you can use a mixture of Gaussians to
+approximate other continuous distributions. We will see some an example
+of this with the IFA model <a href="#pca">below</a>.
+
+
+<h2><a name="glm">Generalized linear model nodes</h2>
+
+In the future, we may incorporate some of the functionality of
+<a href =
+"http://www.sci.usq.edu.au/staff/dunn/glmlab/glmlab.html">glmlab</a>
+into BNT.
+
+
+<h2><a name="dtree">Classification/regression tree nodes</h2>
+
+We plan to add classification and regression trees to define CPDs for
+discrete and continuous nodes, respectively.
+Trees have many advantages: they are easy to interpret, they can do
+feature selection, they can
+handle discrete and continuous inputs, they do not make strong
+assumptions about the form of the distribution, the number of
+parameters can grow in a data-dependent way (i.e., they are
+semi-parametric), they can handle missing data, etc.
+However, they are not yet implemented.
+<!--
+Yimin Zhang is currently (Feb '02) implementing this.
+-->
+
+
+<h2><a name="cpd_summary">Summary of CPD types</h2>
+
+We list all the different types of CPDs supported by BNT.
+For each CPD, we specify if the child and parents can be discrete (D) or
+continuous (C) (Binary (B) nodes are a special case).
+We also specify which methods each class supports.
+If a method is inherited, the name of the  parent class is mentioned.
+If a parent class calls a child method, this is mentioned.
+<p>
+The <tt>CPD_to_CPT</tt> method converts a CPD to a table; this
+requires that the child and all parents are discrete.
+The CPT might be exponentially big...
+<tt>convert_to_table</tt> evaluates a CPD with evidence, and
+represents the the resulting potential as an array.
+This requires that the child is discrete, and any continuous parents
+are observed.
+<tt>convert_to_pot</tt> evaluates a CPD with evidence, and
+represents the resulting potential as a dpot, gpot, cgpot or upot, as
+requested. (d=discrete, g=Gaussian, cg = conditional Gaussian, u =
+utility).
+
+<p>
+When we sample a node, all the parents are observed.
+When we compute the (log) probability of a node, all the parents and
+the child are observed.
+<p>
+We also specify if the parameters are learnable.
+For learning with EM, we require
+the methods <tt>reset_ess</tt>, <tt>update_ess</tt> and
+<tt>maximize_params</tt>. 
+For learning from fully observed data, we require
+the method <tt>learn_params</tt>.
+By default, all classes inherit this from generic_CPD, which simply
+calls <tt>update_ess</tt> N times, once for each data case, followed
+by <tt>maximize_params</tt>, i.e., it is like EM, without the E step.
+Some classes implement a batch formula, which is quicker.
+<p>
+Bayesian learning means computing a posterior over the parameters
+given fully observed data.
+<p>
+Pearl means we implement the methods <tt>compute_pi</tt> and
+<tt>compute_lambda_msg</tt>, used by
+<tt>pearl_inf_engine</tt>, which runs on directed graphs.
+<tt>belprop_inf_engine</tt> only needs <tt>convert_to_pot</tt>.H
+The pearl methods can exploit special properties of the CPDs for
+computing the messages efficiently, whereas belprop does not.
+<p>
+The only method implemented by generic_CPD is <tt>adjustable_CPD</tt>,
+which is not shown, since it is not very interesting.
+
+
+<p>
+
+
+<table>
+<table border units = pixels><tr>
+<td align=center>Name
+<td align=center>Child
+<td align=center>Parents
+<td align=center>Comments
+<td align=center>CPD_to_CPT
+<td align=center>conv_to_table
+<td align=center>conv_to_pot
+<td align=center>sample
+<td align=center>prob
+<td align=center>learn
+<td align=center>Bayes
+<td align=center>Pearl
+
+
+<tr>
+<!-- Name--><td>
+<!-- Child--><td>
+<!-- Parents--><td>
+<!-- Comments--><td>
+<!-- CPD_to_CPT--><td>
+<!-- conv_to_table--><td>
+<!-- conv_to_pot--><td>
+<!-- sample--><td>
+<!-- prob--><td>
+<!-- learn--><td>
+<!-- Bayes--><td>
+<!-- Pearl--><td>
+
+<tr>
+<!-- Name--><td>boolean
+<!-- Child--><td>B
+<!-- Parents--><td>B
+<!-- Comments--><td>Syntactic sugar for tabular
+<!-- CPD_to_CPT--><td>-
+<!-- conv_to_table--><td>-
+<!-- conv_to_pot--><td>-
+<!-- sample--><td>-
+<!-- prob--><td>-
+<!-- learn--><td>-
+<!-- Bayes--><td>-
+<!-- Pearl--><td>-
+
+<tr>
+<!-- Name--><td>deterministic
+<!-- Child--><td>D
+<!-- Parents--><td>D
+<!-- Comments--><td>Syntactic sugar for tabular
+<!-- CPD_to_CPT--><td>-
+<!-- conv_to_table--><td>-
+<!-- conv_to_pot--><td>-
+<!-- sample--><td>-
+<!-- prob--><td>-
+<!-- learn--><td>-
+<!-- Bayes--><td>-
+<!-- Pearl--><td>-
+
+<tr>
+<!-- Name--><td>Discrete
+<!-- Child--><td>D
+<!-- Parents--><td>C/D
+<!-- Comments--><td>Virtual class
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>Calls CPD_to_CPT
+<!-- conv_to_pot--><td>Calls conv_to_table
+<!-- sample--><td>Calls conv_to_table
+<!-- prob--><td>Calls conv_to_table
+<!-- learn--><td>N
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+<tr>
+<!-- Name--><td>Gaussian
+<!-- Child--><td>C
+<!-- Parents--><td>C/D
+<!-- Comments--><td>-
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>N
+<!-- conv_to_pot--><td>Y
+<!-- sample--><td>Y
+<!-- prob--><td>Y
+<!-- learn--><td>Y
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+<tr>
+<!-- Name--><td>gmux
+<!-- Child--><td>C
+<!-- Parents--><td>C/D
+<!-- Comments--><td>multiplexer
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>N
+<!-- conv_to_pot--><td>Y
+<!-- sample--><td>N
+<!-- prob--><td>N
+<!-- learn--><td>N
+<!-- Bayes--><td>N
+<!-- Pearl--><td>Y
+
+
+<tr>
+<!-- Name--><td>MLP
+<!-- Child--><td>D
+<!-- Parents--><td>C/D
+<!-- Comments--><td>multi layer perceptron
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>Y
+<!-- conv_to_pot--><td>Inherits from discrete
+<!-- sample--><td>Inherits from discrete
+<!-- prob--><td>Inherits from discrete
+<!-- learn--><td>Y
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+
+<tr>
+<!-- Name--><td>noisy-or
+<!-- Child--><td>B
+<!-- Parents--><td>B
+<!-- Comments--><td>-
+<!-- CPD_to_CPT--><td>Y
+<!-- conv_to_table--><td>Inherits from discrete
+<!-- conv_to_pot--><td>Inherits from discrete
+<!-- sample--><td>Inherits from discrete
+<!-- prob--><td>Inherits from discrete
+<!-- learn--><td>N
+<!-- Bayes--><td>N
+<!-- Pearl--><td>Y
+
+
+<tr>
+<!-- Name--><td>root
+<!-- Child--><td>C/D
+<!-- Parents--><td>none
+<!-- Comments--><td>no params
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>N
+<!-- conv_to_pot--><td>Y
+<!-- sample--><td>Y
+<!-- prob--><td>Y
+<!-- learn--><td>N
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+
+<tr>
+<!-- Name--><td>softmax
+<!-- Child--><td>D
+<!-- Parents--><td>C/D
+<!-- Comments--><td>-
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>Y
+<!-- conv_to_pot--><td>Inherits from discrete
+<!-- sample--><td>Inherits from discrete
+<!-- prob--><td>Inherits from discrete
+<!-- learn--><td>Y
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+
+<tr>
+<!-- Name--><td>generic
+<!-- Child--><td>C/D
+<!-- Parents--><td>C/D
+<!-- Comments--><td>Virtual class
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>N
+<!-- conv_to_pot--><td>N
+<!-- sample--><td>N
+<!-- prob--><td>N
+<!-- learn--><td>N
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+
+<tr>
+<!-- Name--><td>Tabular
+<!-- Child--><td>D
+<!-- Parents--><td>D
+<!-- Comments--><td>-
+<!-- CPD_to_CPT--><td>Y
+<!-- conv_to_table--><td>Inherits from discrete
+<!-- conv_to_pot--><td>Inherits from discrete
+<!-- sample--><td>Inherits from discrete
+<!-- prob--><td>Inherits from discrete
+<!-- learn--><td>Y
+<!-- Bayes--><td>Y
+<!-- Pearl--><td>Y
+
+</table>
+
+
+
+<h1><a name="examples">Example models</h1>
+
+
+<h2>Gaussian mixture models</h2>
+
+Richard W. DeVaul has made a detailed tutorial on how to fit mixtures
+of Gaussians using BNT. Available
+<a href="http://www.media.mit.edu/wearables/mithril/BNT/mixtureBNT.txt">here</a>.
+
+
+<h2><a name="pca">PCA, ICA, and all that </h2>
+
+In Figure (a) below, we show how Factor Analysis can be thought of as a
+graphical model. Here, X has an N(0,I) prior, and
+Y|X=x ~ N(mu + Wx, Psi),
+where Psi is diagonal and W is called the "factor loading matrix".
+Since the noise on both X and Y is diagonal, the components of these
+vectors are uncorrelated, and hence can be represented as individual
+scalar nodes, as we show in (b).
+(This is useful if parts of the observations on the Y vector are occasionally missing.)
+We usually take k=|X| << |Y|=D, so the model tries to explain
+many observations using a low-dimensional subspace.
+
+
+<center>
+<table>
+<tr>
+<td><img src="Figures/fa.gif">
+<td><img src="Figures/fa_scalar.gif">
+<td><img src="Figures/mfa.gif">
+<td><img src="Figures/ifa.gif">
+<tr>
+<td align=center> (a)
+<td align=center> (b)
+<td align=center> (c)
+<td align=center> (d)
+</table>
+</center>
+
+<p>
+We can create this model in BNT as follows.
+<pre>
+ns = [k D];
+dag = zeros(2,2);
+dag(1,2) = 1;
+bnet = mk_bnet(dag, ns, 'discrete', []);
+bnet.CPD{1} = gaussian_CPD(bnet, 1, 'mean', zeros(k,1), 'cov', eye(k), ...
+   'cov_type', 'diag', 'clamp_mean', 1, 'clamp_cov', 1);
+bnet.CPD{2} = gaussian_CPD(bnet, 2, 'mean', zeros(D,1), 'cov', diag(Psi0), 'weights', W0, ...
+   'cov_type', 'diag', 'clamp_mean', 1);
+</pre>
+
+The root node is clamped to the N(0,I) distribution, so that we will
+not update these parameters during learning.
+The mean of the leaf node is clamped to 0,
+since we assume the data has been centered (had its mean subtracted
+off); this is just for simplicity.
+Finally, the covariance of the leaf node is constrained to be
+diagonal. W0 and Psi0 are the initial parameter guesses.
+
+<p>
+We can fit this model (i.e., estimate its parameters in a maximum
+likelihood (ML) sense) using EM, as we
+explain <a href="#em">below</a>.
+Not surprisingly, the ML estimates for mu and Psi turn out to be
+identical to the
+sample mean and variance, which can be computed directly as
+<pre>
+mu_ML = mean(data);
+Psi_ML = diag(cov(data));
+</pre>
+Note that W can only be identified up to a rotation matrix, because of
+the spherical symmetry of the source.
+
+<p>
+If we restrict Psi to be spherical, i.e., Psi = sigma*I,
+there is a closed-form solution for W as well,
+i.e., we do not need to use EM.
+In particular, W contains the first |X| eigenvectors of the sample covariance
+matrix, with scalings determined by the eigenvalues and sigma.
+Classical PCA can be obtained by taking the sigma->0 limit.
+For details, see
+
+<ul>
+<li> <a href="ftp://hope.caltech.edu/pub/roweis/Empca/empca.ps">
+"EM algorithms for PCA and SPCA"</a>, Sam Roweis, NIPS 97.
+(<a href="ftp://hope.caltech.edu/pub/roweis/Code/empca.tar.gz">
+Matlab software</a>)
+
+<p>
+<li>
+<a
+href=http://neural-server.aston.ac.uk/cgi-bin/tr_avail.pl?trnumber=NCRG/97/003>
+"Mixtures of probabilistic principal component analyzers"</a>,
+Tipping and Bishop, Neural Computation 11(2):443--482, 1999.
+</ul>
+
+<p>
+By adding a hidden discrete variable, we can create mixtures of FA
+models, as shown in (c).
+Now we can explain the data using a set of subspaces.
+We can create this model in BNT as follows.
+<pre>
+ns = [M k D];
+dag = zeros(3);
+dag(1,3) = 1;
+dag(2,3) = 1;
+bnet = mk_bnet(dag, ns, 'discrete', 1);
+bnet.CPD{1} = tabular_CPD(bnet, 1, Pi0);
+bnet.CPD{2} = gaussian_CPD(bnet, 2, 'mean', zeros(k, 1), 'cov', eye(k), 'cov_type', 'diag', ...
+			   'clamp_mean', 1, 'clamp_cov', 1);
+bnet.CPD{3} = gaussian_CPD(bnet, 3, 'mean', Mu0', 'cov', repmat(diag(Psi0), [1 1 M]), ...
+			   'weights', W0, 'cov_type', 'diag', 'tied_cov', 1);
+</pre>
+Notice how the covariance matrix for Y is the same for all values of
+Q; that is, the noise level in each sub-space is assumed the same.
+However, we allow the offset, mu, to vary.
+For details, see
+<ul>
+
+<LI> 
+<a HREF="ftp://ftp.cs.toronto.edu/pub/zoubin/tr-96-1.ps.gz"> The EM 
+Algorithm for Mixtures of Factor Analyzers </A>,
+Ghahramani, Z. and Hinton, G.E. (1996),
+University of Toronto
+Technical Report CRG-TR-96-1.
+(<A HREF="ftp://ftp.cs.toronto.edu/pub/zoubin/mfa.tar.gz">Matlab software</A>)
+
+<p>
+<li>
+<a
+href=http://neural-server.aston.ac.uk/cgi-bin/tr_avail.pl?trnumber=NCRG/97/003>
+"Mixtures of probabilistic principal component analyzers"</a>,
+Tipping and Bishop, Neural Computation 11(2):443--482, 1999.
+</ul>
+
+<p>
+I have included Zoubin's specialized MFA code (with his permission)
+with the toolbox, so you can check that BNT gives the same results:
+see 'BNT/examples/static/mfa1.m'. 
+
+<p>
+Independent Factor Analysis (IFA) generalizes FA by allowing a
+non-Gaussian prior on each component of X.
+(Note that we can approximate a non-Gaussian prior using a mixture of
+Gaussians.)
+This means that the likelihood function is no longer rotationally
+invariant, so we can uniquely identify W and the hidden
+sources X.
+IFA also allows a non-diagonal Psi (i.e. correlations between the components of Y).
+We recover classical Independent Components Analysis (ICA)
+in the Psi -> 0 limit, and by assuming that |X|=|Y|, so that the
+weight matrix W is square and invertible.
+For details, see
+<ul>
+<li>
+<a href="http://www.gatsby.ucl.ac.uk/~hagai/ifa.ps">Independent Factor
+Analysis</a>, H. Attias, Neural Computation 11: 803--851, 1998.
+</ul>
+
+
+
+<h2><a name="mixexp">Mixtures of experts</h2>
+
+As an example of the use of the softmax function,
+we introduce the Mixture of Experts model.
+<!--
+We also show
+the Hierarchical Mixture of Experts model, where the hierarchy has two
+levels.
+(This is essentially a probabilistic decision tree of height two.)
+-->
+As before,
+circles denote continuous-valued nodes,
+squares denote discrete nodes, clear
+means hidden, and shaded means observed.
+<p>
+<center>
+<table>
+<tr>
+<td><img src="Figures/mixexp.gif">
+<!--
+<td><img src="Figures/hme.gif">
+-->
+</table>
+</center>
+<p>
+X is the observed
+input, Y is the output, and
+the Q nodes are hidden "gating" nodes, which select the appropriate
+set of parameters for Y. During training, Y is assumed observed,
+but for testing, the goal is to predict Y given X.
+Note that this is a <em>conditional</em> density model, so we don't
+associate any parameters with X.
+Hence X's CPD will be a root CPD, which is a way of modelling
+exogenous nodes.
+If the output is a continuous-valued quantity,
+we assume the "experts" are linear-regression units,
+and set Y's CPD to linear-Gaussian.
+If the output is discrete, we set Y's CPD to a softmax function.
+The Q CPDs will always be softmax functions.
+
+<p>
+As a concrete example, consider the mixture of experts model where X and Y are
+scalars, and Q is binary.
+This is just piecewise linear regression, where
+we have two line segments, i.e.,
+<P>
+<IMG ALIGN=BOTTOM SRC="Eqns/lin_reg_eqn.gif">
+<P>
+We can create this model with random parameters as follows.
+(This code is bundled in BNT/examples/static/mixexp2.m.)
+<PRE>
+X = 1;
+Q = 2;
+Y = 3;
+dag = zeros(3,3);
+dag(X,[Q Y]) = 1
+dag(Q,Y) = 1;
+ns = [1 2 1]; % make X and Y scalars, and have 2 experts
+onodes = [1 3];
+bnet = mk_bnet(dag, ns, 'discrete', 2, 'observed', onodes);
+
+rand('state', 0);
+randn('state', 0);
+bnet.CPD{1} = root_CPD(bnet, 1);
+bnet.CPD{2} = softmax_CPD(bnet, 2);
+bnet.CPD{3} = gaussian_CPD(bnet, 3);
+</PRE>
+Now let us fit this model using <a href="#em">EM</a>.
+First we <a href="#load_data">load the data</a> (1000 training cases) and plot them.
+<P>
+<PRE>
+data = load('/examples/static/Misc/mixexp_data.txt', '-ascii');        
+plot(data(:,1), data(:,2), '.');
+</PRE>
+<p>
+<center>
+<IMG SRC="Figures/mixexp_data.gif">
+</center>
+<p>
+This is what the model looks like before training.
+(Thanks to Thomas Hofman for writing this plotting routine.)
+<p>
+<center>
+<IMG SRC="Figures/mixexp_before.gif">
+</center>
+<p>
+Now let's train the model, and plot the final performance.
+(We will discuss how to train models in more detail <a href="#param_learning">below</a>.)
+<P>
+<PRE>
+ncases = size(data, 1); % each row of data is a training case
+cases = cell(3, ncases);
+cases([1 3], :) = num2cell(data'); % each column of cases is a training case
+engine = jtree_inf_engine(bnet);
+max_iter = 20;
+[bnet2, LLtrace] = learn_params_em(engine, cases, max_iter);
+</PRE>
+(We specify which nodes will be observed when we create the engine.
+Hence BNT knows that the hidden nodes are all discrete.
+For complex models, this can lead to a significant speedup.)
+Below we show what the model looks like after 16 iterations of EM
+(with 100 IRLS iterations per M step), when it converged
+using the default convergence tolerance (that the
+fractional change in the log-likelihood be less than 1e-3).
+Before learning, the log-likelihood was
+-322.927442; afterwards, it was -13.728778.
+<p>
+<center>
+<IMG SRC="Figures/mixexp_after.gif">
+</center>
+(See BNT/examples/static/mixexp2.m for details of the code.)
+
+
+
+<h2><a name="hme">Hierarchical mixtures of experts</h2>
+
+A hierarchical mixture of experts (HME) extends the mixture of experts
+model by having more than one hidden node. A two-level example is shown below, along
+with its more traditional representation as a neural network.
+This is like a (balanced) probabilistic decision tree of height 2.
+<p>
+<center>
+<IMG SRC="Figures/HMEforMatlab.jpg">
+</center>
+<p>
+<a href="mailto:pbrutti@stat.cmu.edu">Pierpaolo Brutti</a>
+has written an extensive set of routines for HMEs,
+which are bundled with BNT: see the examples/static/HME directory.
+These routines allow you to choose the number of hidden (gating)
+layers, and the form of the experts (softmax or MLP).
+See the file hmemenu, which provides a demo.
+For example, the figure below shows the decision boundaries learned
+for a ternary classification problem, using a 2 level HME with softmax
+gates and softmax experts; the training set is on the left, the
+testing set on the right.
+<p>
+<center>
+<!--<IMG SRC="Figures/hme_dec_boundary.gif">-->
+<IMG SRC="Figures/hme_dec_boundary.png">
+</center>
+<p>
+
+
+<p>
+For more details, see the following:
+<ul>
+
+<li> <a href="http://www.cs.berkeley.edu/~jordan/papers/hierarchies.ps.Z">
+Hierarchical mixtures of experts and the EM algorithm</a>
+M. I. Jordan and R. A. Jacobs. Neural Computation, 6, 181-214, 1994.
+
+<li> <a href =
+"http://www.cs.berkeley.edu/~dmartin/software">David Martin's
+matlab code for HME</a>
+
+<li> <a
+href="http://www.cs.berkeley.edu/~jordan/papers/uai.ps.Z">Why the
+logistic function? A tutorial discussion on 
+probabilities and neural networks.</a> M. I. Jordan. MIT Computational
+Cognitive Science Report 9503, August 1995. 
+
+<li> "Generalized Linear Models", McCullagh and Nelder, Chapman and
+Halll, 1983.
+
+<li>
+"Improved learning algorithms for mixtures of experts in multiclass
+classification".
+K. Chen, L. Xu, H. Chi.
+Neural Networks (1999) 12: 1229-1252.
+
+<li> <a href="http://www.oigeeza.com/steve/">
+Classification Using Hierarchical Mixtures of Experts</a>
+S.R. Waterhouse and A.J. Robinson.
+In Proc. IEEE Workshop on Neural Network for Signal Processing IV (1994), pp. 177-186
+
+<li> <a href="http://www.idiap.ch/~perry/">
+Localized mixtures of experts</a>,
+P. Moerland, 1998.
+
+<li> "Nonlinear gated experts for time series",
+A.S. Weigend and M. Mangeas, 1995.
+
+</ul>
+
+
+<h2><a name="qmr">QMR</h2>
+
+Bayes nets originally arose out of an attempt to add probabilities to
+expert systems, and this is still the most common use for BNs.
+A famous example is
+QMR-DT, a decision-theoretic reformulation of the Quick Medical
+Reference (QMR) model.
+<p>
+<center>
+<IMG ALIGN=BOTTOM SRC="Figures/qmr.gif">
+</center>
+Here, the top layer represents hidden disease nodes, and the bottom
+layer represents observed symptom nodes.
+The goal is to infer the posterior probability of each disease given
+all the symptoms (which can be present, absent or unknown).
+Each node in the top layer has a Bernoulli prior (with a low prior
+probability that the disease is present).
+Since each node in the bottom layer has a high fan-in, we use a
+noisy-OR parameterization; each disease has an independent chance of
+causing each symptom.
+The real QMR-DT model is copyright, but
+we can create a random QMR-like model as follows.
+<pre>
+function bnet = mk_qmr_bnet(G, inhibit, leak, prior)
+% MK_QMR_BNET Make a QMR model
+% bnet = mk_qmr_bnet(G, inhibit, leak, prior)
+%
+% G(i,j) = 1 iff there is an arc from disease i to finding j
+% inhibit(i,j) = inhibition probability on i->j arc
+% leak(j) = inhibition prob. on leak->j arc
+% prior(i) = prob. disease i is on
+
+[Ndiseases Nfindings] = size(inhibit);
+N = Ndiseases + Nfindings;
+finding_node = Ndiseases+1:N;
+ns = 2*ones(1,N);
+dag = zeros(N,N);
+dag(1:Ndiseases, finding_node) = G;
+bnet = mk_bnet(dag, ns, 'observed', finding_node);
+
+for d=1:Ndiseases
+  CPT = [1-prior(d) prior(d)];
+  bnet.CPD{d} = tabular_CPD(bnet, d, CPT');
+end
+
+for i=1:Nfindings
+  fnode = finding_node(i);
+  ps = parents(G, i);
+  bnet.CPD{fnode} = noisyor_CPD(bnet, fnode, leak(i), inhibit(ps, i));
+end
+</pre>
+In the file BNT/examples/static/qmr1, we create a random bipartite
+graph G, with 5 diseases and 10 findings, and random parameters.
+(In general, to create a random dag, use 'mk_random_dag'.)
+We can visualize the resulting  graph structure using
+the methods discussed <a href="#graphdraw">below</a>, with the
+following results:
+<p>
+<img src="Figures/qmr.rnd.jpg">
+
+<p>
+Now let us put some random evidence on all the leaves except the very
+first and very last, and compute the disease posteriors.
+<pre>
+pos = 2:floor(Nfindings/2);
+neg = (pos(end)+1):(Nfindings-1);
+onodes = myunion(pos, neg);
+evidence = cell(1, N);
+evidence(findings(pos)) = num2cell(repmat(2, 1, length(pos)));
+evidence(findings(neg)) = num2cell(repmat(1, 1, length(neg)));
+
+engine = jtree_inf_engine(bnet);
+[engine, ll] = enter_evidence(engine, evidence);
+post = zeros(1, Ndiseases);
+for i=diseases(:)'
+  m = marginal_nodes(engine, i);
+  post(i) = m.T(2);
+end
+</pre>
+Junction tree can be quite slow on large QMR models.
+Fortunately, it is possible to exploit properties of the noisy-OR
+function to speed up exact inference using an algorithm called
+<a href="#quickscore">quickscore</a>, discussed below.
+
+
+
+
+
+<h2><a name="cg_model">Conditional Gaussian models</h2>
+
+A conditional Gaussian model is one in which, conditioned on all the discrete
+nodes, the distribution over the remaining (continuous) nodes is
+multivariate Gaussian. This means we can have arcs from discrete (D)
+to continuous (C) nodes, but not vice versa.
+(We <em>are</em> allowed C->D arcs if the continuous nodes are observed,
+as in the <a href="#mixexp">mixture of experts</a> model,
+since this distribution can be represented with a discrete potential.)
+<p>
+We now give an example of a CG model, from
+the paper "Propagation of Probabilities, Means amd
+Variances in Mixed Graphical Association Models", Steffen Lauritzen,
+JASA 87(420):1098--1108, 1992 (reprinted in the book "Probabilistic Networks and Expert
+Systems", R. G. Cowell, A. P. Dawid, S. L. Lauritzen and
+D. J. Spiegelhalter, Springer, 1999.)
+
+<h3>Specifying the graph</h3>
+
+Consider the model of waste emissions from an incinerator plant shown below.
+We follow the standard convention that shaded nodes are observed,
+clear nodes are hidden.
+We also use the non-standard convention that
+square nodes are discrete (tabular) and round nodes are
+Gaussian.
+
+<p>
+<center>
+<IMG SRC="Figures/cg1.gif">
+</center>
+<p>
+
+We can create this model as follows.
+<pre>
+F = 1; W = 2; E = 3; B = 4; C = 5; D = 6; Min = 7; Mout = 8; L = 9;
+n = 9;
+
+dag = zeros(n);
+dag(F,E)=1;
+dag(W,[E Min D]) = 1;
+dag(E,D)=1;
+dag(B,[C D])=1;
+dag(D,[L Mout])=1;
+dag(Min,Mout)=1;
+
+% node sizes - all cts nodes are scalar, all discrete nodes are binary
+ns = ones(1, n);
+dnodes = [F W B];
+cnodes = mysetdiff(1:n, dnodes);
+ns(dnodes) = 2;
+
+bnet = mk_bnet(dag, ns, 'discrete', dnodes);
+</pre>
+'dnodes' is a list of the discrete nodes; 'cnodes' is the continuous
+nodes. 'mysetdiff' is a faster version of the built-in 'setdiff'.
+<p>
+
+
+<h3>Specifying the parameters</h3>
+
+The parameters of the discrete nodes can be specified as follows.
+<pre>
+bnet.CPD{B} = tabular_CPD(bnet, B, 'CPT', [0.85 0.15]); % 1=stable, 2=unstable
+bnet.CPD{F} = tabular_CPD(bnet, F, 'CPT', [0.95 0.05]); % 1=intact, 2=defect
+bnet.CPD{W} = tabular_CPD(bnet, W, 'CPT', [2/7 5/7]); % 1=industrial, 2=household
+</pre>
+
+<p>
+The parameters of the continuous nodes can be specified as follows.
+<pre>
+bnet.CPD{E} = gaussian_CPD(bnet, E, 'mean', [-3.9 -0.4 -3.2 -0.5], ...
+			   'cov', [0.00002 0.0001 0.00002 0.0001]);
+bnet.CPD{D} = gaussian_CPD(bnet, D, 'mean', [6.5 6.0 7.5 7.0], ...
+			   'cov', [0.03 0.04 0.1 0.1], 'weights', [1 1 1 1]);
+bnet.CPD{C} = gaussian_CPD(bnet, C, 'mean', [-2 -1], 'cov', [0.1 0.3]);
+bnet.CPD{L} = gaussian_CPD(bnet, L, 'mean', 3, 'cov', 0.25, 'weights', -0.5);
+bnet.CPD{Min} = gaussian_CPD(bnet, Min, 'mean', [0.5 -0.5], 'cov', [0.01 0.005]);
+bnet.CPD{Mout} = gaussian_CPD(bnet, Mout, 'mean', 0, 'cov', 0.002, 'weights', [1 1]);
+</pre>
+
+
+<h3><a name="cg_infer">Inference</h3>
+
+<!--Let us perform inference in the <a href="#cg_model">waste incinerator example</a>.-->
+First we compute the unconditional marginals.
+<pre>
+engine = jtree_inf_engine(bnet);
+evidence = cell(1,n);
+[engine, ll] = enter_evidence(engine, evidence);
+marg = marginal_nodes(engine, E);
+</pre>
+<!--(Of course, we could use <tt>cond_gauss_inf_engine</tt> instead of jtree.)-->
+'marg' is a structure that contains the fields 'mu' and 'Sigma', which
+contain the mean and (co)variance of the marginal on E.
+In this case, they are both scalars.
+Let us check they match the published figures (to 2 decimal places).
+<!--(We can't expect
+more precision than this in general because I have implemented the algorithm of
+Lauritzen (1992), which can be numerically unstable.)-->
+<pre>
+tol = 1e-2;
+assert(approxeq(marg.mu, -3.25, tol));
+assert(approxeq(sqrt(marg.Sigma), 0.709, tol));
+</pre>
+We can compute the other posteriors similarly.
+Now let us add some evidence.
+<pre>
+evidence = cell(1,n);
+evidence{W} = 1; % industrial
+evidence{L} = 1.1;
+evidence{C} = -0.9;
+[engine, ll] = enter_evidence(engine, evidence);
+</pre>
+Now we find
+<pre>
+marg = marginal_nodes(engine, E);
+assert(approxeq(marg.mu, -3.8983, tol));
+assert(approxeq(sqrt(marg.Sigma), 0.0763, tol));
+</pre>
+
+
+We can also compute the joint probability on a set of nodes.
+For example, P(D, Mout | evidence) is a 2D Gaussian:
+<pre>
+marg = marginal_nodes(engine, [D Mout])
+marg = 
+    domain: [6 8]
+        mu: [2x1 double]
+     Sigma: [2x2 double]
+         T: 1.0000
+</pre>
+The mean is
+<pre>
+marg.mu
+ans =
+    3.6077
+    4.1077
+</pre>
+and the covariance matrix is
+<pre>
+marg.Sigma
+ans =
+    0.1062    0.1062
+    0.1062    0.1182
+</pre>
+It is easy to visualize this posterior using standard Matlab plotting
+functions, e.g.,
+<pre>
+gaussplot2d(marg.mu, marg.Sigma);
+</pre>
+produces the following picture.
+
+<p>
+<center>
+<IMG SRC="Figures/gaussplot.png">
+</center>
+<p>
+
+
+The T field indicates that the mixing weight of this Gaussian
+component is 1.0.
+If the joint contains discrete and continuous variables, the result
+will be a mixture of Gaussians, e.g.,
+<pre>
+marg = marginal_nodes(engine, [F E])
+    domain: [1 3]
+        mu: [-3.9000 -0.4003]
+     Sigma: [1x1x2 double]
+         T: [0.9995 4.7373e-04]
+</pre>
+The interpretation is
+Sigma(i,j,k) = Cov[ E(i) E(j) | F=k ].
+In this case, E is a scalar, so i=j=1; k specifies the mixture component.
+<p>
+We saw in the sprinkler network that BNT sets the effective size of
+observed discrete nodes to 1, since they only have one legal value.
+For continuous nodes, BNT sets their length to 0,
+since they have been reduced to a point.
+For example,
+<pre>
+marg = marginal_nodes(engine, [B C])
+    domain: [4 5]
+        mu: []
+     Sigma: []
+         T: [0.0123 0.9877]
+</pre>
+It is simple to post-process the output of marginal_nodes.
+For example, the file BNT/examples/static/cg1 sets the mu term of
+observed nodes to their observed value, and the Sigma term to 0 (since
+observed nodes have no variance).
+
+<p>
+Note that the implemented version of the junction tree is numerically
+unstable when using CG potentials
+(which is why, in the example above, we only required our answers to agree with
+the published ones to 2dp.)
+This is why you might want to use <tt>stab_cond_gauss_inf_engine</tt>,
+implemented by Shan Huang. This is described in
+
+<ul>
+<li> "Stable Local Computation with Conditional Gaussian Distributions",
+S. Lauritzen and F. Jensen, Tech Report R-99-2014,
+Dept. Math. Sciences, Allborg Univ., 1999.
+</ul>
+
+However, even the numerically stable version
+can be computationally intractable if there are many hidden discrete
+nodes, because the number of mixture components grows exponentially e.g., in a
+<a href="usage_dbn.html#lds">switching linear dynamical system</a>.
+In general, one must resort to approximate inference techniques: see
+the discussion on <a href="#engines">inference engines</a> below.
+
+
+<h2><a name="hybrid">Other hybrid models</h2>
+
+When we have C->D arcs, where C is hidden, we need to use
+approximate inference.
+One approach (not implemented in BNT) is described in
+<ul>
+<li> <a
+href="http://www.cs.berkeley.edu/~murphyk/Papers/hybrid_uai99.ps.gz">A
+Variational Approximation for Bayesian Networks with 
+Discrete and Continuous Latent Variables</a>,
+K. Murphy, UAI 99.
+</ul>
+Of course, one can always use <a href="#sampling">sampling</a> methods
+for approximate inference in such models.
+
+
+
+<h1><a name="param_learning">Parameter Learning</h1>
+
+The parameter estimation routines in BNT can be classified into 4
+types, depending on whether the goal is to compute
+a full (Bayesian) posterior over the parameters or just a point
+estimate (e.g., Maximum Likelihood or Maximum A Posteriori),
+and whether all the variables are fully observed or there is missing
+data/ hidden variables (partial observability).
+<p>
+
+<TABLE BORDER>
+<tr>
+ <TH></TH>
+ <th>Full obs</th>
+ <th>Partial obs</th>
+</tr>
+<tr>
+ <th>Point</th>
+ <td><tt>learn_params</tt></td>
+ <td><tt>learn_params_em</tt></td>
+</tr>
+<tr>
+ <th>Bayes</th>
+ <td><tt>bayes_update_params</tt></td>
+ <td>not yet supported</td>
+</tr>
+</table>
+
+
+<h2><a name="load_data">Loading data from a file</h2>
+
+To load numeric data from an ASCII text file called 'dat.txt', where each row is a
+case and columns are separated by white-space, such as
+<pre>
+011979 1626.5 0.0
+021979 1367.0 0.0
+...
+</pre>
+you can use
+<pre>
+data = load('dat.txt');
+</pre>
+or
+<pre>
+load dat.txt -ascii
+</pre>
+In the latter case, the data is stored in a variable called 'dat' (the
+filename minus the extension).
+Alternatively, suppose the data is stored in a .csv file (has commas
+separating the columns, and contains a header line), such as
+<pre>
+header info goes here
+ORD,011979,1626.5,0.0
+DSM,021979,1367.0,0.0
+...
+</pre>
+You can load this using
+<pre>
+[a,b,c,d] = textread('dat.txt', '%s %d %f %f', 'delimiter', ',', 'headerlines', 1);
+</pre>
+If your file is not in either of these formats, you can either use Perl to convert
+it to this format, or use the Matlab scanf command.
+Type
+<tt>
+help iofun
+</tt>
+for more information on Matlab's file functions.
+<!--
+<p>
+To load data directly from Excel,
+you should buy the 
+<a href="http://www.mathworks.com/products/excellink/">Excel Link</a>.
+To load data directly from a relational database,
+you should buy the 
+<a href="http://www.mathworks.com/products/database">Database
+toolbox</a>.
+-->
+<p>
+BNT learning routines require data to be stored in a cell array.
+data{i,m} is the value of node i in case (example) m, i.e., each
+<em>column</em> is a case.
+If node i is not observed in case m (missing value), set
+data{i,m} = [].
+(Not all the learning routines can cope with such missing values, however.)
+In the special case that all the nodes are observed and are
+scalar-valued (as opposed to vector-valued), the data can be
+stored in a matrix (as opposed to a cell-array).
+<p>
+Suppose, as in the <a href="#mixexp">mixture of experts example</a>,
+that we have 3 nodes in the graph: X(1) is the observed input, X(3) is
+the observed output, and X(2) is a hidden (gating) node. We can
+create the dataset as follows.
+<pre>
+data = load('dat.txt');
+ncases = size(data, 1);
+cases = cell(3, ncases);
+cases([1 3], :) = num2cell(data');
+</pre>
+Notice how we transposed the data, to convert rows into columns.
+Also, cases{2,m} = [] for all m, since X(2) is always hidden.
+
+
+<h2><a name="mle_complete">Maximum likelihood parameter estimation from complete data</h2>
+
+As an example, let's generate some data from the sprinkler network, randomize the parameters,
+and then try to recover the original model.
+First we create some training data using forwards sampling.
+<pre>
+samples = cell(N, nsamples);
+for i=1:nsamples
+  samples(:,i) = sample_bnet(bnet);
+end
+</pre>
+samples{j,i} contains the value of the j'th node in case i.
+sample_bnet returns a cell array because, in general, each node might
+be a vector of different length.
+In this case, all nodes are discrete (and hence scalars), so we
+could have used a regular array instead (which can be quicker):
+<pre>
+data = cell2num(samples);
+</pre
+So now data(j,i) = samples{j,i}.
+<p>
+Now we create a network with random parameters.
+(The initial values of bnet2 don't matter in this case, since we can find the
+globally optimal MLE independent of where we start.)
+<pre>
+% Make a tabula rasa
+bnet2 = mk_bnet(dag, node_sizes);
+seed = 0;
+rand('state', seed);
+bnet2.CPD{C} = tabular_CPD(bnet2, C);
+bnet2.CPD{R} = tabular_CPD(bnet2, R);
+bnet2.CPD{S} = tabular_CPD(bnet2, S);
+bnet2.CPD{W} = tabular_CPD(bnet2, W);
+</pre>
+Finally, we find the maximum likelihood estimates of the parameters.
+<pre>
+bnet3 = learn_params(bnet2, samples);
+</pre>
+To view the learned parameters, we use a little Matlab hackery.
+<pre>
+CPT3 = cell(1,N);
+for i=1:N
+  s=struct(bnet3.CPD{i});  % violate object privacy
+  CPT3{i}=s.CPT;
+end
+</pre>
+Here are the parameters learned for node 4.
+<pre>
+dispcpt(CPT3{4})
+1 1 : 1.0000 0.0000 
+2 1 : 0.2000 0.8000 
+1 2 : 0.2273 0.7727 
+2 2 : 0.0000 1.0000 
+</pre>
+So we see that the learned parameters are fairly close to the "true"
+ones, which we display below.
+<pre>
+dispcpt(CPT{4})
+1 1 : 1.0000 0.0000 
+2 1 : 0.1000 0.9000 
+1 2 : 0.1000 0.9000 
+2 2 : 0.0100 0.9900 
+</pre>
+We can get better results by using a larger training set, or using
+informative priors (see <a href="#prior">below</a>).
+
+
+
+<h2><a name="prior">Parameter priors</h2>
+
+Currently, only tabular CPDs can have priors on their parameters.
+The conjugate prior for a multinomial is the Dirichlet.
+(For binary random variables, the multinomial is the same as the
+Bernoulli, and the Dirichlet is the same as the Beta.)
+<p>
+The Dirichlet has a simple interpretation in terms of pseudo counts.
+If we let N_ijk = the num. times X_i=k and Pa_i=j occurs in the
+training set, where Pa_i are the parents of X_i,
+then the maximum likelihood (ML) estimate is
+T_ijk = N_ijk  / N_ij (where N_ij = sum_k' N_ijk'), which will be 0 if N_ijk=0.
+To prevent us from declaring that (X_i=k, Pa_i=j) is impossible just because this
+event was not seen in the training set,
+we can pretend we saw value k of X_i, for each value j of Pa_i some number (alpha_ijk)
+of times in the past.
+The MAP (maximum a posterior) estimate is then
+<pre>
+T_ijk = (N_ijk + alpha_ijk) / (N_ij + alpha_ij)
+</pre>
+and is never 0 if all alpha_ijk > 0.
+For example, consider the network A->B, where A is binary and B has 3
+values.
+A uniform prior for B has the form
+<pre>
+    B=1 B=2 B=3
+A=1 1   1   1
+A=2 1   1   1
+</pre>
+which can be created using
+<pre>
+tabular_CPD(bnet, i, 'prior_type', 'dirichlet', 'dirichlet_type', 'unif');
+</pre>
+This prior does not satisfy the likelihood equivalence principle,
+which says that <a href="#markov_equiv">Markov equivalent</a> models
+should have the same marginal likelihood.
+A prior that does satisfy this principle is shown below.
+Heckerman (1995) calls this the
+BDeu prior (likelihood equivalent uniform Bayesian Dirichlet).
+<pre>
+    B=1 B=2 B=3
+A=1 1/6 1/6 1/6
+A=2 1/6 1/6 1/6
+</pre>
+where we put N/(q*r) in each bin; N is the equivalent sample size,
+r=|A|, q = |B|.
+This can be created as follows
+<pre>
+tabular_CPD(bnet, i, 'prior_type', 'dirichlet', 'dirichlet_type', 'BDeu');
+</pre>
+Here, 1 is the equivalent sample size, and is the strength of the
+prior.
+You can change this using
+<pre>
+tabular_CPD(bnet, i, 'prior_type', 'dirichlet', 'dirichlet_type', ...
+   'BDeu', 'dirichlet_weight', 10);
+</pre>
+<!--where counts is an array of pseudo-counts of the same size as the
+CPT.-->
+<!--
+<p>
+When you specify a prior, you should set row i of the CPT to the
+normalized version of row i of the pseudo-count matrix, i.e., to the
+expected values of the parameters. This will ensure that computing the
+marginal likelihood sequentially (see <a
+href="#bayes_learn">below</a>) and in batch form gives the same
+results.
+To do this, proceed as follows.
+<pre>
+tabular_CPD(bnet, i, 'prior', counts, 'CPT', mk_stochastic(counts));
+</pre>
+For a non-informative prior, you can just write
+<pre>
+tabular_CPD(bnet, i, 'prior', 'unif', 'CPT', 'unif');
+</pre>
+-->
+
+
+<h2><a name="bayes_learn">(Sequential) Bayesian parameter updating from complete data</h2>
+
+If we use conjugate priors and have fully observed data, we can
+compute the posterior over the parameters in batch form as follows.
+<pre>
+cases = sample_bnet(bnet, nsamples);
+bnet = bayes_update_params(bnet, cases);  
+LL = log_marg_lik_complete(bnet, cases);   
+</pre>
+bnet.CPD{i}.prior contains the new Dirichlet pseudocounts,
+and bnet.CPD{i}.CPT is set to the mean of the posterior (the
+normalized counts).
+(Hence if the initial pseudo counts are 0,
+<tt>bayes_update_params</tt> and <tt>learn_params</tt> will give the
+same result.)
+
+
+
+
+<p>
+We can compute the same result sequentially (on-line) as follows.
+<pre>
+LL = 0;
+for m=1:nsamples
+  LL = LL + log_marg_lik_complete(bnet, cases(:,m));
+  bnet = bayes_update_params(bnet, cases(:,m));
+end
+</pre>
+
+The file <tt>BNT/examples/static/StructLearn/model_select1</tt> has an example of
+sequential model selection which uses the same idea.
+We generate data from the model A->B
+and compute the posterior prob of all 3 dags on 2 nodes:
+ (1) A B,  (2) A <- B , (3) A -> B
+Models 2 and 3 are <a href="#markov_equiv">Markov equivalent</a>, and therefore indistinguishable from 
+observational data alone, so we expect their posteriors to be the same
+(assuming a prior which satisfies likelihood equivalence).
+If we use random parameters, the "true" model only gets a higher posterior after 2000 trials!
+However, if we make B a noisy NOT gate, the true model "wins" after 12
+trials, as shown below (red = model 1, blue/green (superimposed)
+represents models 2/3).
+<p>
+<img src="Figures/model_select.png">
+<p>
+The use of marginal likelihood for model selection is discussed in
+greater detail in the 
+section on <a href="structure_learning">structure learning</a>.
+
+
+
+
+<h2><a name="em">Maximum likelihood parameter estimation with missing values</h2>
+
+Now we consider learning when some values are not observed.
+Let us randomly hide half the values generated from the water
+sprinkler example.
+<pre>
+samples2 = samples;
+hide = rand(N, nsamples) > 0.5;
+[I,J]=find(hide);
+for k=1:length(I)
+  samples2{I(k), J(k)} = [];
+end
+</pre>
+samples2{i,l} is the value of node i in training case l, or [] if unobserved.
+<p>
+Now we will compute the MLEs using the EM algorithm.
+We need to use an inference algorithm to compute the expected
+sufficient statistics in the E step; the M (maximization) step is as
+above.
+<pre>
+engine2 = jtree_inf_engine(bnet2);
+max_iter = 10;
+[bnet4, LLtrace] = learn_params_em(engine2, samples2, max_iter);
+</pre>
+LLtrace(i) is the log-likelihood at iteration i. We can plot this as
+follows:
+<pre>
+plot(LLtrace, 'x-')
+</pre>
+Let's display the results after 10 iterations of EM.
+<pre>
+celldisp(CPT4)
+CPT4{1} =
+    0.6616
+    0.3384
+CPT4{2} =
+    0.6510    0.3490
+    0.8751    0.1249
+CPT4{3} =
+    0.8366    0.1634
+    0.0197    0.9803
+CPT4{4} =
+(:,:,1) =
+    0.8276    0.0546
+    0.5452    0.1658
+(:,:,2) =
+    0.1724    0.9454
+    0.4548    0.8342
+</pre>
+We can get improved performance by using one or more of the following
+methods:
+<ul>
+<li> Increasing the size of the training set.
+<li> Decreasing the amount of hidden data.
+<li> Running EM for longer.
+<li> Using informative priors.
+<li> Initialising EM from multiple starting points.
+</ul>
+
+Click <a href="#gaussian">here</a> for a discussion of learning
+Gaussians, which can cause numerical problems.
+
+<h2><a name="tying">Parameter tying</h2>
+
+In networks with repeated structure (e.g., chains and grids), it is
+common to assume that the parameters are the same at every node. This
+is called parameter tying, and reduces the amount of data needed for
+learning.
+<p>
+When we have tied parameters, there is no longer a one-to-one
+correspondence between nodes and CPDs.
+Rather, each CPD species the parameters for a whole equivalence class
+of nodes.
+It is easiest to see this by example.
+Consider the following <a href="usage_dbn.html#hmm">hidden Markov
+model (HMM)</a>
+<p>
+<img src="Figures/hmm3.gif">
+<p>
+<!--
+We can create this graph structure, assuming we have T time-slices,
+as follows.
+(We number the nodes as shown in the figure, but we could equally well
+number the hidden nodes 1:T, and the observed nodes T+1:2T.)
+<pre>
+N = 2*T;
+dag = zeros(N);
+hnodes = 1:2:2*T;
+for i=1:T-1
+  dag(hnodes(i), hnodes(i+1))=1;
+end
+onodes = 2:2:2*T;
+for i=1:T
+  dag(hnodes(i), onodes(i)) = 1;
+end
+</pre>
+<p>
+The hidden nodes are always discrete, and have Q possible values each,
+but the observed nodes can be discrete or continuous, and have O possible values/length.
+<pre>
+if cts_obs
+  dnodes = hnodes;
+else
+  dnodes = 1:N;
+end
+ns = ones(1,N);
+ns(hnodes) = Q;
+ns(onodes) = O;
+</pre>
+-->
+When HMMs are used for semi-infinite processes like speech recognition,
+we assume the transition matrix
+P(H(t+1)|H(t)) is the same for all t; this is called a time-invariant
+or homogenous Markov chain.
+Hence hidden nodes 2, 3, ..., T
+are all in the same equivalence class, say class Hclass.
+Similarly, the observation matrix P(O(t)|H(t)) is assumed to be the
+same for all t, so the observed nodes are all in the same equivalence
+class, say class Oclass.
+Finally, the prior term P(H(1)) is in a class all by itself, say class
+H1class.
+This is illustrated below, where we explicitly represent the
+parameters as random variables (dotted nodes).
+<p>
+<img src="Figures/hmm4_params.gif">
+<p>
+In BNT, we cannot represent parameters as random variables (nodes).
+Instead, we "hide" the
+parameters inside one CPD for each equivalence class,
+and then specify that the other CPDs should share these parameters, as
+follows.
+<pre>
+hnodes = 1:2:2*T;
+onodes = 2:2:2*T;
+H1class = 1; Hclass = 2; Oclass = 3;
+eclass = ones(1,N);
+eclass(hnodes(2:end)) = Hclass;
+eclass(hnodes(1)) = H1class;
+eclass(onodes) = Oclass;
+% create dag and ns in the usual way
+bnet = mk_bnet(dag, ns, 'discrete', dnodes, 'equiv_class', eclass);
+</pre>
+Finally, we define the parameters for each equivalence class:
+<pre>
+bnet.CPD{H1class} = tabular_CPD(bnet, hnodes(1)); % prior
+bnet.CPD{Hclass} = tabular_CPD(bnet, hnodes(2)); % transition matrix
+if cts_obs
+  bnet.CPD{Oclass} = gaussian_CPD(bnet, onodes(1));
+else
+  bnet.CPD{Oclass} = tabular_CPD(bnet, onodes(1));
+end
+</pre>
+In general, if bnet.CPD{e} = xxx_CPD(bnet, j), then j should be a
+member of e's equivalence class; that is, it is not always the case
+that e == j. You can use bnet.rep_of_eclass(e) to return the
+representative of equivalence class e.
+BNT will look up the parents of j to determine the size
+of the CPT to use. It assumes that this is the same for all members of
+the equivalence class.
+Click <a href="http://www.cs.berkeley.edu/~murphyk/Bayes/param_tieing.html">here</a> for
+a more complex example of parameter tying.
+<p>
+Note:
+Normally one would define an HMM as a
+<a href = "usage_dbn.html">Dynamic Bayes Net</a>
+(see the function BNT/examples/dynamic/mk_chmm.m).
+However, one can define an HMM as a static BN using the function
+BNT/examples/static/Models/mk_hmm_bnet.m.
+
+
+
+<h1><a name="structure_learning">Structure learning</h1>
+
+Update (9/29/03):
+Phillipe LeRay is developing some additional structure learning code
+on top of BNT. Click <a
+href="http://bnt.insa-rouen.fr/ajouts.html">here</a>
+for details.
+
+<p>
+
+There are two very different approaches to structure learning:
+constraint-based and search-and-score.
+In the <a href="#constraint">constraint-based approach</a>,
+we start with a fully connected graph, and remove edges if certain
+conditional independencies are measured in the data.
+This has the disadvantage that repeated independence tests lose
+statistical power.
+<p>
+In the more popular search-and-score approach,
+we perform a search through the space of possible DAGs, and either
+return the best one found (a point estimate), or return a sample of the
+models found (an approximation to the Bayesian posterior).
+<p>
+Unfortunately, the number of DAGs as a function of the number of
+nodes, G(n), is super-exponential in n.
+A closed form formula for G(n) is not known, but the first few values
+are shown below (from Cooper, 1999).
+
+<table>
+<tr>  <th>n</th>    <th align=left>G(n)</th> </tr>
+<tr>  <td>1</td>    <td>1</td> </tr>
+<tr>  <td>2</td>    <td>3</td> </tr>
+<tr>  <td>3</td>    <td>25</td> </tr>
+<tr>   <td>4</td>    <td>543</td> </tr> 
+<tr>   <td>5</td>    <td>29,281</td> </tr>
+<tr>   <td>6</td>    <td>3,781,503</td> </tr>
+<tr>   <td>7</td>    <td>1.1 x 10^9</td> </tr>
+<tr>   <td>8</td>    <td>7.8 x 10^11</td> </tr>
+<tr>   <td>9</td>    <td>1.2 x 10^15</td> </tr>
+<tr>   <td>10</td>    <td>4.2 x 10^18</td> </tr>
+</table>
+
+Since the number of DAGs is super-exponential in the number of nodes,
+we cannot exhaustively search the space, so we either use a local
+search algorithm (e.g., greedy hill climbining, perhaps with multiple
+restarts) or a global search algorithm (e.g., Markov Chain Monte
+Carlo). 
+<p>
+If we know a total ordering on the nodes,
+finding the best structure amounts to picking the best set of parents
+for each node independently.
+This is what the K2 algorithm does.
+If the ordering is unknown, we can search over orderings,
+which is more efficient than searching over DAGs (Koller and Friedman, 2000).
+<p>
+In addition to the search procedure, we must specify the scoring
+function. There are two popular choices. The Bayesian score integrates
+out the parameters, i.e., it is the marginal likelihood of the model.
+The BIC (Bayesian Information Criterion) is defined as
+log P(D|theta_hat) - 0.5*d*log(N), where D is the data, theta_hat is
+the ML estimate of the parameters, d is the number of parameters, and
+N is the number of data cases.
+The BIC method has the advantage of not requiring a prior.
+<p>
+BIC can be derived as a large sample
+approximation to the marginal likelihood.
+(It is also equal to the Minimum Description Length of a model.)
+However, in practice, the sample size does not need to be very large
+for the approximation to be good.
+For example, in the figure below, we plot the ratio between the log marginal likelihood
+and the BIC score against data-set size; we see that the ratio rapidly
+approaches 1, especially for non-informative priors. 
+(This plot was generated by the file BNT/examples/static/bic1.m. It
+uses the water sprinkler BN with BDeu Dirichlet priors with different
+equivalent sample sizes.)
+
+<p>
+<center>
+<IMG SRC="Figures/bic.png">
+</center>
+<p>
+
+<p>
+As with parameter learning, handling missing data/ hidden variables is
+much harder than the fully observed case.
+The structure learning routines in BNT can therefore be classified into 4
+types, analogously to the parameter learning case.
+<p>
+
+<TABLE BORDER>
+<tr>
+ <TH></TH>
+ <th>Full obs</th>
+ <th>Partial obs</th>
+</tr>
+<tr>
+ <th>Point</th>
+ <td><tt>learn_struct_K2</tt>  <br>
+<!--     <tt>learn_struct_hill_climb</tt></td> -->
+ <td><tt>not yet supported</tt></td>
+</tr>
+<tr>
+ <th>Bayes</th>
+ <td><tt>learn_struct_mcmc</tt></td>
+ <td>not yet supported</td>
+</tr>
+</table>
+
+
+<h2><a name="markov_equiv">Markov equivalence</h2>
+
+If two DAGs encode the same conditional independencies, they are
+called Markov equivalent. The set of all DAGs can be paritioned into
+Markov equivalence classes. Graphs within the same class can 
+have
+the direction of some of their arcs reversed without changing any of
+the CI relationships.
+Each class can be represented by a PDAG
+(partially directed acyclic graph) called an essential graph or
+pattern. This specifies which edges must be oriented in a certain
+direction, and which may be reversed.
+
+<p>
+When learning graph structure from observational data,
+the best one can hope to do is to identify the model up to Markov
+equivalence. To distinguish amongst graphs within the same equivalence
+class, one needs interventional data: see the discussion on <a
+href="#active">active learning</a> below.
+
+
+
+<h2><a name="enumerate">Exhaustive search</h2>
+
+The brute-force approach to structure learning is to enumerate all
+possible DAGs, and score each one. This provides a "gold standard"
+with which to compare other algorithms. We can do this as follows.
+<pre>
+dags = mk_all_dags(N);
+score = score_dags(data, ns, dags);
+</pre>
+where data(i,m) is the value of node i in case m,
+and ns(i) is the size of node i.
+If the DAGs have a lot of families in common, we can cache the sufficient statistics,
+making this potentially more efficient than scoring the DAGs one at a time.
+(Caching is not currently implemented, however.)
+<p>
+By default, we use the Bayesian scoring metric, and assume CPDs are
+represented by tables with BDeu(1) priors.
+We can override these defaults as follows.
+If we want to use uniform priors, we can say
+<pre>
+params = cell(1,N);
+for i=1:N
+  params{i} = {'prior', 'unif'};
+end
+score = score_dags(data, ns, dags, 'params', params);
+</pre>
+params{i} is a cell-array, containing optional arguments that are
+passed to the constructor for CPD i.
+<p>
+Now suppose we want to use different node types, e.g., 
+Suppose nodes 1 and 2 are Gaussian, and nodes 3 and 4 softmax (both
+these CPDs can support discrete and continuous parents, which is
+necessary since all other nodes will be considered as parents).
+The Bayesian scoring metric currently only works for tabular CPDs, so
+we will use BIC:
+<pre>
+score = score_dags(data, ns, dags, 'discrete', [3 4], 'params', [], 
+    'type', {'gaussian', 'gaussian', 'softmax', softmax'}, 'scoring_fn', 'bic')
+</pre>
+In practice, one can't enumerate all possible DAGs for N > 5,
+but one can evaluate any reasonably-sized set of hypotheses in this
+way (e.g., nearest neighbors of your current best guess).
+Think of this as "computer assisted model refinement" as opposed to de
+novo learning.
+
+
+<h2><a name="K2">K2</h2>
+
+The K2 algorithm (Cooper and Herskovits, 1992) is a greedy search algorithm that works as follows.
+Initially each node has no parents. It then adds incrementally that parent whose addition most
+increases the score of the resulting structure. When the addition of no single
+parent can increase the score, it stops adding parents to the node.
+Since we are using a fixed ordering, we do not need to check for
+cycles, and can choose the parents for each node independently.
+<p>
+The original paper used the Bayesian scoring
+metric with tabular CPDs and Dirichlet priors.
+BNT generalizes this to allow any kind of CPD, and either the Bayesian
+scoring metric or BIC, as in the example <a href="#enumerate">above</a>.
+In addition, you can specify
+an optional upper bound on the number of parents for each node.
+The file BNT/examples/static/k2demo1.m gives an example of how to use K2.
+We use the water sprinkler network and sample 100 cases from it as before.
+Then we see how much data it takes to recover the generating structure:
+<pre>
+order = [C S R W];
+max_fan_in = 2;
+sz = 5:5:100;
+for i=1:length(sz)
+  dag2 = learn_struct_K2(data(:,1:sz(i)), node_sizes, order, 'max_fan_in', max_fan_in);
+  correct(i) = isequal(dag, dag2);
+end
+</pre>
+Here are the results.
+<pre>
+correct =
+  Columns 1 through 12 
+     0     0     0     0     0     0     0     1     0     1     1     1
+  Columns 13 through 20 
+     1     1     1     1     1     1     1     1
+</pre>
+So we see it takes about sz(10)=50 cases. (BIC behaves similarly,
+showing that the prior doesn't matter too much.)
+In general, we cannot hope to recover the "true" generating structure,
+only one that is in its <a href="#markov_equiv">Markov equivalence
+class</a>.
+
+
+<h2><a name="hill_climb">Hill-climbing</h2>
+
+Hill-climbing starts at a specific point in space,
+considers all nearest neighbors, and moves to the neighbor
+that has the highest score; if no neighbors have higher
+score than the current point (i.e., we have reached a local maximum),
+the algorithm stops. One can then restart in another part of the space.
+<p>
+A common definition of "neighbor" is all graphs that can be
+generated from the current graph by adding, deleting or reversing a
+single arc, subject to the acyclicity constraint.
+Other neighborhoods are possible: see
+<a href="http://research.microsoft.com/~dmax/publications/jmlr02.pdf">
+Optimal Structure Identification with Greedy Search</a>, Max
+Chickering, JMLR 2002.
+
+<!--
+Note: This algorithm is currently (Feb '02) being implemented by Qian
+Diao.
+-->
+
+
+<h2><a name="mcmc">MCMC</h2>
+
+We can use a Markov Chain Monte Carlo (MCMC) algorithm called
+Metropolis-Hastings (MH) to search the space of all 
+DAGs.
+The standard proposal distribution is to consider moving to all
+nearest neighbors in the sense defined <a href="#hill_climb">above</a>.
+<p>
+The function can be called
+as in the following example.
+<pre>
+[sampled_graphs, accept_ratio] = learn_struct_mcmc(data, ns, 'nsamples', 100, 'burnin', 10);
+</pre>
+We can convert our set of sampled graphs to a histogram
+(empirical posterior over all the DAGs) thus
+<pre>
+all_dags = mk_all_dags(N);
+mcmc_post = mcmc_sample_to_hist(sampled_graphs, all_dags);
+</pre>
+To see how well this performs, let us compute the exact posterior exhaustively.
+<p>
+<pre>
+score = score_dags(data, ns, all_dags);
+post = normalise(exp(score)); % assuming uniform structural prior
+</pre>
+We plot the results below.
+(The data set was 100 samples drawn from a random 4 node bnet; see the
+file BNT/examples/static/mcmc1.)
+<pre>
+subplot(2,1,1)
+bar(post)
+subplot(2,1,2)
+bar(mcmc_post)
+</pre>
+<img src="Figures/mcmc_post.jpg" width="800" height="500">
+<p>
+We can also plot the acceptance ratio versus number of MCMC steps,
+as a crude convergence diagnostic.
+<pre>
+clf
+plot(accept_ratio)
+</pre>
+<img src="Figures/mcmc_accept.jpg" width="800" height="300">
+<p>
+Even though the number of samples needed by MCMC is theoretically
+polynomial (not exponential) in the dimensionality of the search space, in practice it has been
+found that MCMC does not converge in reasonable time for graphs with
+more than about 10 nodes.
+
+
+
+
+<h2><a name="active">Active structure learning</h2>
+
+As was mentioned <a href="#markov_equiv">above</a>,
+one can only learn a DAG up to Markov equivalence, even given infinite data.
+If one is interested in learning the structure of a causal network,
+one needs interventional data.
+(By "intervention" we mean forcing a node to take on a specific value,
+thereby effectively severing its incoming arcs.)
+<p>
+Most of the scoring functions accept an optional argument
+that specifies whether a node was observed to have a certain value, or
+was forced to have that value: we set clamped(i,m)=1 if node i was
+forced in training case m. e.g., see the file
+BNT/examples/static/cooper_yoo.
+<p>
+An interesting question is to decide which interventions to perform
+(c.f., design of experiments). For details, see the following tech
+report
+<ul>
+<li> <a href = "../../Papers/alearn.ps.gz">
+Active learning of causal Bayes net structure</a>, Kevin Murphy, March
+2001.
+</ul>
+
+
+<h2><a name="struct_em">Structural EM</h2>
+
+Computing the Bayesian score when there is partial observability is
+computationally challenging, because the parameter posterior becomes
+multimodal (the hidden nodes induce a mixture distribution).
+One therefore needs to use approximations such as BIC.
+Unfortunately, search algorithms are still expensive, because we need
+to run EM at each step to compute the MLE, which is needed to compute
+the score of each model. An alternative approach is
+to do the local search steps inside of the M step of EM, which is more
+efficient since the data has been "filled in" - this is
+called the structural EM algorithm (Friedman 1997), and provably
+converges to a local maximum of the BIC score.
+<p> 
+Wei Hu has implemented SEM for discrete nodes.
+You can download his package from
+<a href="../SEM.zip">here</a>.
+Please address all questions about this code to
+wei.hu@intel.com.
+See also <a href="#phl">Phl's implementation of SEM</a>.
+
+<!--
+<h2><a name="reveal">REVEAL algorithm</h2>
+
+A simple way to learn the structure of a fully observed, discrete,
+factored DBN from a time series is described <a
+href="usage_dbn.html#struct_learn">here</a>.
+-->
+
+
+<h2><a name="graphdraw">Visualizing the graph</h2>
+
+You can visualize an arbitrary graph (such as one learned using the
+structure learning routines) with Matlab code contributed by
+<a href="http://www.mbfys.kun.nl/~cemgil/matlab/layout.html">Ali
+Taylan Cemgil</a>
+from the University of Nijmegen.
+For static BNs, call it as follows:
+<pre>
+draw_graph(bnet.dag);
+</pre>
+For example, this is the output produced on a
+<a href="#qmr">random QMR-like model</a>:
+<p>
+<img src="Figures/qmr.rnd.jpg">
+<p>
+If you install the excellent <a
+href="http://www.research.att.com/sw/tools/graphviz">graphhviz</a>, an
+open-source graph visualization package from AT&T,
+you can create a much better visualization as follows
+<pre>
+graph_to_dot(bnet.dag)
+</pre>
+This works by converting the adjacency matrix to a file suitable
+for input to graphviz (using the dot format),
+then converting the output of graphviz to postscript, and displaying the results using
+ghostview.
+You can do each of these steps separately for more control, as shown
+below.
+<pre>
+graph_to_dot(bnet.dag, 'filename', 'foo.dot');
+dot -Tps foo.dot -o foo.ps
+ghostview foo.ps &
+</pre>
+
+<h2><a name = "constraint">Constraint-based methods</h2>
+
+The IC algorithm (Pearl and Verma, 1991),
+and the faster, but otherwise equivalent, PC algorithm (Spirtes, Glymour, and Scheines 1993),
+computes many conditional independence tests,
+and combines these constraints into a
+PDAG to represent the whole
+<a href="#markov_equiv">Markov equivalence class</a>.
+<p>
+IC*/FCI extend IC/PC to handle latent variables: see <a href="#ic_star">below</a>.
+(IC stands for inductive causation; PC stands for Peter and Clark,
+the first names of Spirtes and Glymour; FCI stands for fast causal
+inference.
+What we, following Pearl (2000), call IC* was called
+IC in the original Pearl and Verma paper.)
+For details, see
+<ul>
+<li>
+<a href="http://hss.cmu.edu/html/departments/philosophy/TETRAD/tetrad.html">Causation,
+Prediction, and Search</a>, Spirtes, Glymour and 
+Scheines (SGS), 2001 (2nd edition), MIT Press.
+<li> 
+<a href="http://bayes.cs.ucla.edu/BOOK-2K/index.html">Causality: Models, Reasoning and Inference</a>, J. Pearl, 
+2000, Cambridge University Press.
+</ul>
+
+<p>
+
+The PC algorithm takes as arguments a function f, the number of nodes N,
+the maximum fan in K, and additional arguments A which are passed to f.
+The function f(X,Y,S,A) returns 1 if X is conditionally independent of Y given S, and 0
+otherwise.
+For example, suppose we cheat by
+passing in a CI "oracle" which has access to the true DAG; the oracle
+tests for d-separation in this DAG, i.e.,
+f(X,Y,S) calls dsep(X,Y,S,dag). We can to this as follows.
+<pre>
+pdag = learn_struct_pdag_pc('dsep', N, max_fan_in, dag);
+</pre>
+pdag(i,j) = -1 if there is definitely an i->j arc,
+and pdag(i,j) = 1 if there is either an i->j or and i<-j arc.
+<p>
+Applied to the sprinkler network, this returns
+<pre>
+pdag =
+     0     1     1     0
+     1     0     0    -1
+     1     0     0    -1
+     0     0     0     0
+</pre>
+So as expected, we see that the V-structure at the W node is uniquely identified,
+but the other arcs have ambiguous orientation.
+<p>
+We now give an example from p141 (1st edn) / p103 (2nd end) of the SGS
+book.
+This example concerns the female orgasm.
+We are given a correlation matrix C between 7 measured factors (such
+as subjective experiences of coital and masturbatory experiences),
+derived from 281 samples, and want to learn a causal model of the
+data. We will not discuss the merits of this type of work here, but
+merely show how to reproduce the results in the SGS book.
+Their program,
+<a href="http://hss.cmu.edu/html/departments/philosophy/TETRAD/tetrad.html">Tetrad</a>,
+makes use of the Fisher Z-test for conditional
+independence, so we do the same:
+<pre>
+max_fan_in = 4;
+nsamples = 281;
+alpha = 0.05;
+pdag = learn_struct_pdag_pc('cond_indep_fisher_z', n, max_fan_in, C, nsamples, alpha);
+</pre>
+In this case, the CI test is
+<pre>
+f(X,Y,S) = cond_indep_fisher_z(X,Y,S,  C,nsamples,alpha)
+</pre>
+The results match those of Fig 12a of SGS apart from two edge
+differences; presumably this is due to rounding error (although it
+could be a bug, either in BNT or in Tetrad).
+This example can be found in the file BNT/examples/static/pc2.m.
+
+<p>
+
+The IC* algorithm (Pearl and Verma, 1991),
+and the faster FCI algorithm (Spirtes, Glymour, and Scheines 1993),
+are like the IC/PC algorithm, except that they can detect the presence
+of latent variables.
+See the file <tt>learn_struct_pdag_ic_star</tt> written by Tamar
+Kushnir. The output is a matrix P, defined as follows
+(see Pearl (2000), p52 for details):
+<pre>
+% P(i,j) = -1 if there is either a latent variable L such that i <-L->j OR there is a directed edge from i->j.
+% P(i,j) = -2 if there is a marked directed i-*>j edge.
+% P(i,j) = P(j,i) = 1 if there is and undirected edge i--j
+% P(i,j) = P(j,i) = 2 if there is a latent variable L such that i<-L->j.
+</pre>
+
+
+<h2><a name="phl">Philippe Leray's structure learning package</h2>
+
+Philippe Leray has written a 
+<a href="http://bnt.insa-rouen.fr/ajouts.html">
+structure learning package</a> that uses BNT.
+
+It currently (Juen 2003) has the following features:
+<ul>
+<li>PC with Chi2 statistical test 
+<li>             MWST : Maximum weighted Spanning Tree 
+<li>             Hill Climbing 
+<li>             Greedy Search 
+<li>             Structural EM 
+<li>             hist_ic : optimal Histogram based on IC information criterion 
+<li>             cpdag_to_dag 
+<li>             dag_to_cpdag 
+<li>             ... 
+</ul>
+
+
+</a>
+
+
+<!--
+<h2><a name="read_learning">Further reading on learning</h2>
+
+I recommend the following tutorials for more details on learning.
+<ul>
+<li> <a
+href="http://www.cs.berkeley.edu/~murphyk/Papers/intel.ps.gz">My short
+tutorial</a> on graphical models, which contains an overview of learning.
+
+<li> 
+<A HREF="ftp://ftp.research.microsoft.com/pub/tr/TR-95-06.PS">
+A tutorial on learning with Bayesian networks</a>, D. Heckerman,
+Microsoft Research Tech Report, 1995.
+
+<li> <A HREF="http://www-cad.eecs.berkeley.edu/~wray/Mirror/lwgmja">
+Operations for Learning with Graphical Models</a>,
+W. L. Buntine, JAIR'94, 159--225.
+</ul>
+<p>
+-->
+
+
+
+
+
+<h1><a name="engines">Inference engines</h1>
+
+Up until now, we have used the junction tree algorithm for inference.
+However, sometimes this is too slow, or not even applicable.
+In general, there are many inference algorithms each of which make
+different tradeoffs between speed, accuracy, complexity and
+generality. Furthermore, there might be many implementations of the
+same algorithm; for instance, a general purpose, readable version,
+and a highly-optimized, specialized one.
+To cope with this variety, we treat each inference algorithm as an
+object, which we call an inference engine.
+
+<p>
+An inference engine is an object that contains a bnet and supports the
+'enter_evidence' and 'marginal_nodes' methods.  The engine constructor
+takes the bnet as argument and may do some model-specific processing.
+When 'enter_evidence' is called, the engine may do some
+evidence-specific processing.  Finally, when 'marginal_nodes' is
+called, the engine may do some query-specific processing.
+
+<p>
+The amount of work done when each stage is specified -- structure,
+parameters, evidence, and query -- depends on the engine.  The cost of
+work done early in this sequence can be amortized.  On the other hand,
+one can make better optimizations if one waits until later in the
+sequence.
+For example, the parameters might imply
+conditional indpendencies that are not evident in the graph structure,
+but can nevertheless be exploited; the evidence indicates which nodes
+are observed and hence can effectively be disconnected from the
+graph; and the query might indicate that large parts of the network
+are d-separated from the query nodes.  (Since it is not the actual
+<em>values</em> of the evidence that matters, just which nodes are observed,
+many engines allow you to specify which nodes will be observed when they are constructed,
+i.e., before calling 'enter_evidence'. Some engines can still cope if
+the actual pattern of evidence is different, e.g., if there is missing
+data.)
+<p>
+
+Although being maximally lazy (i.e., only doing work when a query is
+issued) may seem desirable,
+this is not always the most efficient.
+For example,
+when learning using EM, we need to call marginal_nodes N times, where N is the
+number of nodes. <a href="varelim">Variable elimination</a> would end
+up repeating a lot of work
+each time marginal_nodes is called, making it inefficient for
+learning. The junction tree algorithm, by contrast, uses dynamic
+programming to avoid this redundant computation --- it calculates all
+marginals in two passes during 'enter_evidence', so calling
+'marginal_nodes' takes constant time.
+<p>
+We will discuss some of the inference algorithms implemented in BNT
+below, and finish with a <a href="#engine_summary">summary</a> of all
+of them.
+
+
+
+
+
+
+
+<h2><a name="varelim">Variable elimination</h2>
+
+The variable elimination algorithm, also known as bucket elimination
+or peeling, is one of the simplest inference algorithms.
+The basic idea is to "push sums inside of products"; this is explained
+in more detail
+<a
+href="http://HTTP.CS.Berkeley.EDU/~murphyk/Bayes/bayes.html#infer">here</a>. 
+<p>
+The principle of distributing sums over products can be generalized
+greatly to apply to any commutative semiring.
+This forms the basis of many common algorithms, such as Viterbi
+decoding and the Fast Fourier Transform. For details, see
+
+<ul>
+<li> R. McEliece and S. M. Aji, 2000.
+<!--<a href="http://www.systems.caltech.edu/EE/Faculty/rjm/papers/GDL.ps">-->
+<a href="GDL.pdf">
+The Generalized Distributive Law</a>,
+IEEE Trans. Inform. Theory, vol. 46, no. 2 (March 2000),
+pp. 325--343. 
+
+
+<li>
+F. R. Kschischang, B. J. Frey and H.-A. Loeliger, 2001.
+<a href="http://www.cs.toronto.edu/~frey/papers/fgspa.abs.html">
+Factor graphs and the sum-product algorithm</a>
+IEEE Transactions on Information Theory, February, 2001.
+
+</ul>
+
+<p>
+Choosing an order in which to sum out the variables so as to minimize
+computational cost is known to be NP-hard.
+The implementation of this algorithm in
+<tt>var_elim_inf_engine</tt> makes no attempt to optimize this
+ordering (in contrast, say, to <tt>jtree_inf_engine</tt>, which uses a
+greedy search procedure to find a good ordering).
+<p>
+Note: unlike most algorithms, var_elim does all its computational work
+inside of <tt>marginal_nodes</tt>, not inside of
+<tt>enter_evidence</tt>.
+
+
+
+
+<h2><a name="global">Global inference methods</h2>
+
+The simplest inference algorithm of all is to explicitely construct
+the joint distribution over all the nodes, and then to marginalize it.
+This is implemented in <tt>global_joint_inf_engine</tt>.
+Since the size of the joint is exponential in the
+number of discrete (hidden) nodes, this is not a very practical algorithm.
+It is included merely for pedagogical and debugging purposes.
+<p>
+Three specialized versions of this algorithm have also been implemented,
+corresponding to the cases where all the nodes are discrete (D), all
+are Gaussian (G), and some are discrete and some Gaussian (CG).
+They are called <tt>enumerative_inf_engine</tt>,
+<tt>gaussian_inf_engine</tt>,
+and <tt>cond_gauss_inf_engine</tt> respectively.
+<p>
+Note: unlike most algorithms, these global inference algorithms do all their computational work
+inside of <tt>marginal_nodes</tt>, not inside of
+<tt>enter_evidence</tt>.
+
+
+<h2><a name="quickscore">Quickscore</h2>
+
+The junction tree algorithm is quite slow on the <a href="#qmr">QMR</a> network,
+since the cliques are so big.
+One simple trick we can use is to notice that hidden leaves do not
+affect the posteriors on the roots, and hence do not need to be
+included in the network.
+A second trick is to notice that the negative findings can be
+"absorbed" into the prior:
+see the file
+BNT/examples/static/mk_minimal_qmr_bnet for details.
+<p>
+
+A much more significant speedup is obtained by exploiting special
+properties of the noisy-or node, as done by the quickscore
+algorithm. For details, see
+<ul>
+<li> Heckerman, "A tractable inference algorithm for diagnosing multiple diseases", UAI 89.
+<li> Rish and Dechter, "On the impact of causal independence", UCI
+tech report, 1998.
+</ul>
+
+This has been implemented in BNT as a special-purpose inference
+engine, which can be created and used as follows:
+<pre>
+engine = quickscore_inf_engine(inhibit, leak, prior);
+engine = enter_evidence(engine, pos, neg);
+m = marginal_nodes(engine, i);
+</pre>
+
+
+<h2><a name="belprop">Belief propagation</h2>
+
+Even using quickscore, exact inference takes time that is exponential
+in the number of positive findings.
+Hence for large networks we need to resort to approximate inference techniques.
+See for example
+<ul>
+<li> T. Jaakkola and M. Jordan, "Variational probabilistic inference and the
+QMR-DT network", JAIR 10, 1999.
+
+<li> K. Murphy, Y. Weiss and M. Jordan, "Loopy belief propagation for approximate inference: an empirical study",
+   UAI 99.
+</ul>
+The latter approximation
+entails applying Pearl's belief propagation algorithm to a model even
+if it has loops (hence the name loopy belief propagation).
+Pearl's algorithm, implemented as <tt>pearl_inf_engine</tt>, gives
+exact results when applied to singly-connected graphs
+(a.k.a. polytrees, since
+the underlying undirected topology is a tree, but a node may have
+multiple parents).
+To apply this algorithm to a graph with loops, 
+use <tt>pearl_inf_engine</tt>.
+This can use a centralized or distributed message passing protocol.
+You can use it as in the following example.
+<pre>
+engine = pearl_inf_engine(bnet, 'max_iter', 30);
+engine = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, i);
+</pre>
+We found that this algorithm often converges, and when it does, often
+is very accurate, but it depends on the precise setting of the
+parameter values of the network.
+(See the file BNT/examples/static/qmr1 to repeat the experiment for yourself.)
+Understanding when and why belief propagation converges/ works
+is a topic of ongoing research.
+<p>
+<tt>pearl_inf_engine</tt> can exploit special structure in noisy-or
+and gmux nodes to compute messages efficiently.
+<p>
+<tt>belprop_inf_engine</tt> is like pearl, but uses potentials to
+represent messages. Hence this is slower.
+<p>
+<tt>belprop_fg_inf_engine</tt> is like belprop,
+but is designed for factor graphs.
+
+
+
+<h2><a name="sampling">Sampling</h2>
+
+BNT now (Mar '02) has two sampling (Monte Carlo) inference algorithms:
+<ul>
+<li> <tt>likelihood_weighting_inf_engine</tt> which does importance
+sampling and can handle any node type.
+<li> <tt>gibbs_sampling_inf_engine</tt>, written by Bhaskara Marthi.
+Currently this can only handle tabular CPDs.
+For a much faster and more powerful Gibbs sampling program, see
+<a href="http://www.mrc-bsu.cam.ac.uk/bugs">BUGS</a>.
+</ul>
+Note: To generate samples from a network (which is not the same as inference!),
+use <tt>sample_bnet</tt>.
+
+
+
+<h2><a name="engine_summary">Summary of inference engines</h2>
+
+
+The inference engines differ in many ways. Here are
+some of the major "axes":
+<ul>
+<li> Works for all topologies or makes restrictions? 
+<li> Works for all node types or makes restrictions?
+<li> Exact or approximate inference?
+</ul>
+
+<p>
+In terms of topology, most engines handle any kind of DAG.
+<tt>belprop_fg</tt> does approximate inference on factor graphs (FG), which
+can be used to represent directed, undirected, and mixed (chain)
+graphs.
+(In the future, we plan to support exact inference on chain graphs.)
+<tt>quickscore</tt> only works on QMR-like models.
+<p>
+In terms of node types: algorithms that use potentials can handle
+discrete (D), Gaussian (G) or conditional Gaussian (CG) models.
+Sampling algorithms can essentially handle any kind of node (distribution).
+Other algorithms make more restrictive assumptions in exchange for
+speed.
+<p>
+Finally, most algorithms are designed to give the exact answer.
+The belief propagation algorithms are exact if applied to trees, and
+in some other cases.
+Sampling is considered approximate, even though, in the limit of an
+infinite number of samples, it gives the exact answer.
+
+<p>
+
+Here is a summary of the properties 
+of all the engines in BNT which work on static networks.
+<p>
+<table>
+<table border units = pixels><tr>
+<td align=left width=0>Name
+<td align=left width=0>Exact?
+<td align=left width=0>Node type?
+<td align=left width=0>topology
+<tr>
+<tr>
+<td align=left> belprop
+<td align=left> approx
+<td align=left> D
+<td align=left> DAG
+<tr>
+<td align=left> belprop_fg
+<td align=left> approx
+<td align=left> D
+<td align=left> factor graph
+<tr>
+<td align=left> cond_gauss
+<td align=left> exact
+<td align=left> CG
+<td align=left> DAG
+<tr>
+<td align=left> enumerative
+<td align=left> exact
+<td align=left> D
+<td align=left> DAG
+<tr>
+<td align=left> gaussian
+<td align=left> exact
+<td align=left> G
+<td align=left> DAG
+<tr>
+<td align=left> gibbs
+<td align=left> approx
+<td align=left> D
+<td align=left> DAG
+<tr>
+<td align=left> global_joint
+<td align=left> exact
+<td align=left> D,G,CG
+<td align=left> DAG
+<tr>
+<td align=left> jtree
+<td align=left> exact
+<td align=left> D,G,CG
+<td align=left> DAG
+b<tr>
+<td align=left> likelihood_weighting
+<td align=left> approx
+<td align=left> any
+<td align=left> DAG
+<tr>
+<td align=left> pearl
+<td align=left> approx
+<td align=left> D,G
+<td align=left> DAG
+<tr>
+<td align=left> pearl
+<td align=left> exact
+<td align=left> D,G
+<td align=left> polytree
+<tr>
+<td align=left> quickscore
+<td align=left> exact
+<td align=left> noisy-or
+<td align=left> QMR
+<tr>
+<td align=left> stab_cond_gauss
+<td align=left> exact
+<td align=left> CG
+<td align=left> DAG
+<tr>
+<td align=left> var_elim
+<td align=left> exact
+<td align=left> D,G,CG
+<td align=left> DAG
+</table>
+
+
+
+<h1><a name="influence">Influence diagrams/ decision making</h1>
+
+BNT implements an exact algorithm for solving LIMIDs (limited memory
+influence diagrams), described in
+<ul>
+<li> S. L. Lauritzen and D. Nilsson.
+<a href="http://www.math.auc.dk/~steffen/papers/limids.pdf">
+Representing and solving decision problems with limited
+information</a>
+Management Science, 47, 1238 - 1251. September 2001.
+</ul>
+LIMIDs explicitely show all information arcs, rather than implicitely
+assuming no forgetting. This allows them to model forgetful
+controllers.
+<p>
+See the examples in <tt>BNT/examples/limids</tt> for details.
+
+
+
+
+<h1>DBNs, HMMs, Kalman filters and all that</h1>
+
+Click <a href="usage_dbn.html">here</a> for documentation about how to
+use BNT for dynamical systems and sequence data.
+
+
+</BODY>
diff --git a/sourcecodes/bnt-master/docs/usage_cropped.html b/sourcecodes/bnt-master/docs/usage_cropped.html
new file mode 100644
index 00000000..11bb4e12
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/usage_cropped.html
@@ -0,0 +1,3232 @@
+<HEAD>
+<TITLE>How to use the Bayes Net Toolbox</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF">
+<!-- white background is better for the pictures and equations -->
+
+<h1>How to use the Bayes Net Toolbox</h1>
+
+This documentation was last updated on 13 November 2002.
+<br>
+Click <a href="changelog.html">here</a> for a list of changes made to
+BNT.
+<br>
+Click 
+<a href="http://bnt.insa-rouen.fr/">here</a>
+for a French version of this documentation (which might not
+be up-to-date).
+
+
+<p>
+
+<ul>
+<li> <a href="#install">Installation</a>
+<ul>
+<li> <a href="#installM">Installing the Matlab code</a>
+<li> <a href="#installC">Installing the C code</a>
+<li> <a href="../matlab_tips.html">Useful Matlab tips</a>.
+</ul>
+
+<li> <a href="#basics">Creating your first Bayes net</a>
+  <ul>
+  <li> <a href="#basics">Creating a model by hand</a>
+  <li> <a href="#file">Loading a model from a file</a>
+  <li> <a href="http://bnt.insa-rouen.fr/ajouts.html">Creating a model using a GUI</a>
+  </ul>
+
+<li> <a href="#inference">Inference</a>
+  <ul>
+  <li> <a href="#marginal">Computing marginal distributions</a>
+  <li> <a href="#joint">Computing joint distributions</a>
+  <li> <a href="#soft">Soft/virtual evidence</a>
+  <li> <a href="#mpe">Most probable explanation</a>
+  </ul>
+
+<li> <a href="#cpd">Conditional Probability Distributions</a>
+  <ul>
+  <li> <a href="#tabular">Tabular (multinomial) nodes</a>
+  <li> <a href="#noisyor">Noisy-or nodes</a>
+  <li> <a href="#deterministic">Other (noisy) deterministic nodes</a>
+  <li> <a href="#softmax">Softmax (multinomial logit) nodes</a>
+  <li> <a href="#mlp">Neural network nodes</a>
+  <li> <a href="#root">Root nodes</a>
+  <li> <a href="#gaussian">Gaussian nodes</a>
+  <li> <a href="#glm">Generalized linear model nodes</a>
+  <li> <a href="#dtree">Classification/regression tree nodes</a>
+  <li> <a href="#nongauss">Other continuous distributions</a>
+  <li> <a href="#cpd_summary">Summary of CPD types</a>
+  </ul>
+
+<li> <a href="#examples">Example models</a>
+  <ul>
+  <li> <a
+  href="http://www.media.mit.edu/wearables/mithril/BNT/mixtureBNT.txt">
+Gaussian mixture models</a>
+  <li> <a href="#pca">PCA, ICA, and all that</a>
+  <li> <a href="#mixep">Mixtures of experts</a>
+  <li> <a href="#hme">Hierarchical mixtures of experts</a>
+  <li> <a href="#qmr">QMR</a>
+  <li> <a href="#cg_model">Conditional Gaussian models</a>
+  <li> <a href="#hybrid">Other hybrid models</a>
+  </ul>
+
+<li> <a href="#param_learning">Parameter learning</a>
+  <ul>
+  <li> <a href="#load_data">Loading data from a file</a>
+  <li> <a href="#mle_complete">Maximum likelihood parameter estimation from complete data</a>
+  <li> <a href="#prior">Parameter priors</a>
+  <li> <a href="#bayes_learn">(Sequential) Bayesian parameter updating from complete data</a>
+  <li> <a href="#em">Maximum likelihood parameter estimation with  missing values (EM)</a>
+  <li> <a href="#tying">Parameter tying</a>
+  </ul>
+
+<li> <a href="#structure_learning">Structure learning</a>
+  <ul>
+  <li> <a href="#enumerate">Exhaustive search</a>
+  <li> <a href="#K2">K2</a>
+  <li> <a href="#hill_climb">Hill-climbing</a>
+  <li> <a href="#mcmc">MCMC</a>
+  <li> <a href="#active">Active learning</a>
+  <li> <a href="#struct_em">Structural EM</a>
+  <li> <a href="#graphdraw">Visualizing the learned graph  structure</a>
+  <li> <a href="#constraint">Constraint-based methods</a>
+  </ul>
+
+
+<li> <a href="#engines">Inference engines</a>
+  <ul>
+  <li> <a href="#jtree">Junction tree</a>
+  <li> <a href="#varelim">Variable elimination</a>
+  <li> <a href="#global">Global inference methods</a>
+  <li> <a href="#quickscore">Quickscore</a>
+  <li> <a href="#belprop">Belief propagation</a>
+  <li> <a href="#sampling">Sampling (Monte Carlo)</a>
+  <li> <a href="#engine_summary">Summary of inference engines</a>
+  </ul>
+
+
+<li> <a href="#influence">Influence diagrams/ decision making</a>
+
+
+<li> <a href="usage_dbn.html">DBNs, HMMs, Kalman filters and all that</a>
+</ul>
+
+</ul>
+
+
+
+
+<h1><a name="install">Installation</h1>
+
+<h2><a name="installM">Installing the Matlab code</h2>
+
+<ul>
+<li> <a href="bnt_download.html">Download</a> the BNT.zip file.
+
+<p>
+<li> Unpack the file. In Unix, type
+<!--"tar xvf BNT.tar".-->
+"unzip FullBNT.zip".
+In Windows, use
+a program like <a href="http://www.winzip.com">Winzip</a>. This will
+create a directory called FullBNT, which contains BNT and other libraries.
+
+<p>
+<li> Read the file <tt>BNT/README</tt> to make sure the date
+matches the one on the top of <a href=bnt.html>the BNT home page</a>.
+If not, you may need to press 'refresh' on your browser, and download
+again, to get the most recent version.
+
+<p>
+<li> <b>Edit the file "BNT/add_BNT_to_path.m"</b> so it contains the correct
+pathname.
+For example, in Windows,
+I download FullBNT.zip into C:\kpmurphy\matlab, and 
+then comment out the second line (with the % character), and uncomment
+the third line, which reads
+<pre>
+BNT_HOME = 'C:\kpmurphy\matlab\FullBNT';
+</pre>
+
+<p>
+<li> Start up Matlab.
+
+<p>
+<li> Type "ver" at the Matlab prompt (">>").
+<b>You need Matlab version 5.2 or newer to run BNT</b>.
+(Versions 5.0 and 5.1 have a memory leak which seems to sometimes
+crash BNT.)
+
+<p>
+<li> Move to the BNT directory.
+For example, in Windows, I type
+<pre>
+>> cd C:\kpmurphy\matlab\FullBNT\BNT
+</pre>
+
+<p>
+<li> Type "add_BNT_to_path".
+This executes the command
+<tt>addpath(genpath(BNT_HOME))</tt>,
+which adds all directories below FullBNT to the matlab path.
+
+<p>
+<li> Type "test_BNT".
+<b>If all goes well, this will just produce a bunch of numbers and pictures.</b>
+It may produce some
+warning messages (which you can ignore), but should not produce any  error messages.
+(The warnings should only be of the form
+"Warning: Maximum number of iterations has been exceeded", and are
+produced by Netlab.)
+
+<p>
+<li> <a href="http://groups.yahoo.com/group/BayesNetToolbox/join">
+Join the BNT email list</a>
+
+</ul>
+
+
+If you are new to Matlab, you might like to check out
+<a href="matlab_tips.html">some useful Matlab tips</a>.
+For instance, this explains how to create a startup file, which can be
+used to set your path variable automatically, so you can avoid having
+to type the above commands every time.
+
+
+
+
+<h2><a name="installC">Installing the C code</h2>
+
+Some BNT functions also have C implementations.
+<b>It is not necessary to install the C code</b>, but it can result in a speedup
+of a factor of 2-5 of certain simple functions.
+To install all the C code, 
+edit installC_BNT.m so it contains the right path,
+then type <tt>installC_BNT</tt>.
+To uninstall all the C code,
+edit uninstallC_BNT.m so it contains the right path,
+then type <tt>uninstallC_BNT</tt>.
+For an up-to-date list of the files which have C implementations, see
+BNT/installC_BNT.m.
+
+<p>
+mex is a script that lets you call C code from Matlab - it does not compile matlab to
+C (see mcc below).
+If your C/C++ compiler  is set up correctly, mex should work out of
+the box. (Matlab 6 now ships with its own minimal C compiler.)
+If not, you might need to type
+<p>
+<tt> mex -setup</tt>
+<p>
+before calling installC.
+<p>
+To make mex call gcc on Windows,
+you must install <a
+href="http://www.mrc-cbu.cam.ac.uk/Imaging/gnumex20.html">gnumex</a>.
+You can use the <a href="http://www.mingw.org/">minimalist GNU for
+Windows</a> version of gcc, or
+the <a href="http://sources.redhat.com/cygwin/">cygwin</a> version.
+<p>
+In general, typing 
+'mex foo.c' from inside Matlab creates a file called
+'foo.mexglx' or 'foo.dll' (the exact file
+extension is system dependent - on Linux it is 'mexglx', on Windows it is '.dll').
+The resulting file will hide the original 'foo.m' (if it existed), i.e., 
+typing 'foo' at the prompt will call the compiled C version.
+To reveal the original matlab version, just delete foo.mexglx (this is
+what uninstallC does).
+<p>
+Sometimes it takes time for Matlab to realize that the file has
+changed from matlab to C or vice versa; try typing 'clear all' or
+restarting Matlab to refresh it.
+To find out which version of a file you are running, type
+'which foo'.
+<p>
+<a href="http://www.mathworks.com/products/compiler">mcc</a>, the
+Matlab to C compiler, is a separate product, 
+and is quite different from mex. It does not yet support
+objects/classes, which is why we can't compile all of BNT to C automatically.
+Also, hand-written C code is usually much
+better than the C code generated by mcc.
+
+
+<p>
+Acknowledgements:
+Although I wrote some of the C code, most of
+the C code (e.g., for jtree and dpot) was written by Wei Hu;
+the triangulation C code was written by Ilya Shpitser.
+
+
+<h1><a name="basics">Creating your first Bayes net</h1>
+
+To define a Bayes net, you must specify the graph structure and then
+the parameters. We look at each in turn, using a simple example
+(adapted from Russell and
+Norvig, "Artificial Intelligence: a Modern Approach", Prentice Hall,
+1995, p454).
+
+
+<h2>Graph structure</h2>
+
+
+Consider the following network.
+
+<p>
+<center>
+<IMG SRC="Figures/sprinkler.gif">
+</center>
+<p>
+
+<P>
+To specify this directed acyclic graph (dag), we create an adjacency matrix:
+<PRE>
+N = 4; 
+dag = zeros(N,N);
+C = 1; S = 2; R = 3; W = 4;
+dag(C,[R S]) = 1;
+dag(R,W) = 1;
+dag(S,W)=1;
+</PRE>
+<P>
+We have numbered the nodes as follows:
+Cloudy = 1, Sprinkler = 2, Rain = 3, WetGrass = 4.
+<b>The nodes must always be numbered in topological order, i.e.,
+ancestors before descendants.</b>
+For a more complicated graph, this is a little inconvenient: we will
+see how to get around this <a href="usage_dbn.html#bat">below</a>.
+<p>
+<!--
+In Matlab 6, you can use logical arrays instead of double arrays,
+which are 4 times smaller:
+<pre>
+dag = false(N,N);
+dag(C,[R S]) = true;
+...
+</pre>
+--
+<p>
+A preliminary attempt to make a <b>GUI</b>
+has been writte by Philippe LeRay and can be downloaded
+from <a href="http://bnt.insa-rouen.fr/ajouts.html">here</a>.
+<p>
+You can visualize the resulting  graph structure using
+the methods discussed <a href="#graphdraw">below</a>.
+
+<h2>Creating the Bayes net shell</h2>
+
+In addition to specifying the graph structure,
+we must specify the size and type of each node.
+If a node is discrete, its size is the
+number of possible values
+each node can take on; if a node is continuous,
+it can be a vector, and its size is the length of this vector.
+In this case, we will assume all nodes are discrete and binary.
+<PRE>
+discrete_nodes = 1:N;
+node_sizes = 2*ones(1,N); 
+</pre>
+If the nodes were not binary, you could type e.g., 
+<pre>
+node_sizes = [4 2 3 5];
+</pre>
+meaning that Cloudy has 4 possible values, 
+Sprinkler has 2 possible values, etc.
+Note that these are cardinal values, not ordinal, i.e., 
+they are not ordered in any way, like 'low', 'medium', 'high'.
+<p>
+We are now ready to make the Bayes net:
+<pre>
+bnet = mk_bnet(dag, node_sizes, 'discrete', discrete_nodes);
+</PRE>
+By default, all nodes are assumed to be discrete, so we can also just
+write
+<pre>
+bnet = mk_bnet(dag, node_sizes);
+</PRE>
+You may also specify which nodes will be observed.
+If you don't know, or if this not fixed in advance,
+just use the empty list (the default).
+<pre>
+onodes = [];
+bnet = mk_bnet(dag, node_sizes, 'discrete', discrete_nodes, 'observed', onodes);
+</PRE>
+Note that optional arguments are specified using a name/value syntax.
+This is common for many BNT functions.
+In general, to find out more about a function (e.g., which optional
+arguments it takes), please see its
+documentation string by typing
+<pre>
+help mk_bnet
+</pre>
+See also other <a href="matlab_tips.html">useful Matlab tips</a>.
+<p>
+It is possible to associate names with nodes, as follows:
+<pre>
+bnet = mk_bnet(dag, node_sizes, 'names', {'cloudy','S','R','W'}, 'discrete', 1:4);
+</pre>
+You can then refer to a node by its name:
+<pre>
+C = bnet.names{'cloudy'}; % bnet.names is an associative array
+bnet.CPD{C} = tabular_CPD(bnet, C, [0.5 0.5]);
+</pre>
+
+
+<h2><a name="cpt">Parameters</h2>
+
+A model consists of the graph structure and the parameters.
+The parameters are represented by CPD objects (CPD = Conditional
+Probability Distribution), which define the probability distribution
+of a node given its parents.
+(We will use the terms "node" and "random variable" interchangeably.)
+The simplest kind of CPD is a table (multi-dimensional array), which
+is suitable when all the nodes are discrete-valued. Note that the discrete
+values are not assumed to be ordered in any way; that is, they
+represent categorical quantities, like male and female, rather than
+ordinal quantities, like low, medium and high.
+(We will discuss CPDs in more detail <a href="#cpd">below</a>.)
+<p>
+Tabular CPDs, also called CPTs (conditional probability tables),
+are stored as multidimensional arrays, where the dimensions
+are arranged in the same order as the nodes, e.g., the CPT for node 4
+(WetGrass) is indexed by Sprinkler (2), Rain (3) and then WetGrass (4) itself.
+Hence the child is always the last dimension.
+If a node has no parents, its CPT is a column vector representing its
+prior.
+Note that in Matlab (unlike C), arrays are indexed
+from 1, and are layed out in memory such that the first index toggles
+fastest, e.g., the CPT for node 4 (WetGrass) is as follows
+<P>
+<P><IMG ALIGN=BOTTOM SRC="Figures/CPTgrass.gif"><P>
+<P>
+where we have used the convention that false==1, true==2.
+We can create this CPT in Matlab as follows
+<PRE>
+CPT = zeros(2,2,2);
+CPT(1,1,1) = 1.0;
+CPT(2,1,1) = 0.1;
+...
+</PRE>
+Here is an easier way:
+<PRE>
+CPT = reshape([1 0.1 0.1 0.01 0 0.9 0.9 0.99], [2 2 2]);
+</PRE>
+In fact, we don't need to reshape the array, since the CPD constructor
+will do that for us. So we can just write
+<pre>
+bnet.CPD{W} = tabular_CPD(bnet, W, 'CPT', [1 0.1 0.1 0.01 0 0.9 0.9 0.99]);
+</pre>
+The other nodes are created similarly (using the old syntax for
+optional parameters)
+<PRE>
+bnet.CPD{C} = tabular_CPD(bnet, C, [0.5 0.5]);
+bnet.CPD{R} = tabular_CPD(bnet, R, [0.8 0.2 0.2 0.8]);
+bnet.CPD{S} = tabular_CPD(bnet, S, [0.5 0.9 0.5 0.1]);
+bnet.CPD{W} = tabular_CPD(bnet, W, [1 0.1 0.1 0.01 0 0.9 0.9 0.99]);
+</PRE>
+
+
+<h2><a name="rnd_cpt">Random Parameters</h2>
+
+If we do not specify the CPT, random parameters will be
+created, i.e., each "row" of the CPT will be drawn from the uniform distribution.
+To ensure repeatable results, use
+<pre>
+rand('state', seed);
+randn('state', seed);
+</pre>
+To control the degree of randomness (entropy),
+you can sample each row of the CPT from a Dirichlet(p,p,...) distribution.
+If p << 1, this encourages "deterministic" CPTs (one entry near 1, the rest near 0).
+If p = 1, each entry is drawn from U[0,1].
+If p >> 1, the entries will all be near 1/k, where k is the arity of
+this node, i.e., each row will be nearly uniform.
+You can do this as follows, assuming this node
+is number i, and ns is the node_sizes.
+<pre>
+k = ns(i);
+ps = parents(dag, i);
+psz = prod(ns(ps));
+CPT = sample_dirichlet(p*ones(1,k), psz);
+bnet.CPD{i} = tabular_CPD(bnet, i, 'CPT', CPT);
+</pre>
+
+
+<h2><a name="file">Loading a network from a file</h2>
+
+If you already have a Bayes net represented in the XML-based
+<a href="http://www.cs.cmu.edu/afs/cs/user/fgcozman/www/Research/InterchangeFormat/">
+Bayes Net Interchange Format (BNIF)</a> (e.g., downloaded from the 
+<a
+href="http://www.cs.huji.ac.il/labs/compbio/Repository">
+Bayes Net repository</a>),
+you can convert it to BNT format using
+the 
+<a href="http://www.digitas.harvard.edu/~ken/bif2bnt/">BIF-BNT Java
+program</a> written by Ken Shan.
+(This is not necessarily up-to-date.)
+
+
+<h2>Creating a model using a GUI</h2>
+
+Click <a href="http://bnt.insa-rouen.fr/ajouts.html">here</a>.
+
+
+
+<h1><a name="inference">Inference</h1>
+
+Having created the BN, we can now use it for inference.
+There are many different algorithms for doing inference in Bayes nets,
+that make different tradeoffs between speed, 
+complexity, generality, and accuracy.
+BNT therefore offers a variety of different inference
+"engines". We will discuss these
+in more detail <a href="#engines">below</a>.
+For now, we will use the junction tree
+engine, which is the mother of all exact inference algorithms.
+This can be created as follows.
+<pre>
+engine = jtree_inf_engine(bnet);
+</pre>
+The other engines have similar constructors, but might take
+additional, algorithm-specific parameters.
+All engines are used in the same way, once they have been created.
+We illustrate this in the following sections.
+
+
+<h2><a name="marginal">Computing marginal distributions</h2>
+
+Suppose we want to compute the probability that the sprinker was on
+given that the grass is wet.
+The evidence consists of the fact that W=2. All the other nodes
+are hidden (unobserved). We can specify this as follows.
+<pre>
+evidence = cell(1,N);
+evidence{W} = 2;
+</pre>
+We use a 1D cell array instead of a vector to
+cope with the fact that nodes can be vectors of different lengths.
+In addition, the value [] can be used
+to denote 'no evidence', instead of having to specify the observation
+pattern as a separate argument.
+(Click <a href="cellarray.html">here</a> for a quick tutorial on cell
+arrays in matlab.)
+<p>
+We are now ready to add the evidence to the engine.
+<pre>
+[engine, loglik] = enter_evidence(engine, evidence);
+</pre>
+The behavior of this function is algorithm-specific, and is discussed
+in more detail <a href="#engines">below</a>.
+In the case of the jtree engine,
+enter_evidence implements a two-pass message-passing scheme.
+The first return argument contains the modified engine, which
+incorporates the evidence. The second return argument contains the
+log-likelihood of the evidence. (Not all engines are capable of
+computing the log-likelihood.)
+<p>
+Finally, we can compute p=P(S=2|W=2) as follows.
+<PRE>
+marg = marginal_nodes(engine, S);
+marg.T
+ans =
+      0.57024
+      0.42976
+p = marg.T(2);
+</PRE>
+We see that p = 0.4298.
+<p>
+Now let us add the evidence that it was raining, and see what
+difference it makes.
+<PRE>
+evidence{R} = 2;
+[engine, loglik] = enter_evidence(engine, evidence);
+marg = marginal_nodes(engine, S);
+p = marg.T(2);
+</PRE>
+We find that p = P(S=2|W=2,R=2) = 0.1945,
+which is lower than
+before, because the rain can ``explain away'' the
+fact that the grass is wet.
+<p>
+You can plot a marginal distribution over a discrete variable
+as a barchart using the built 'bar' function:
+<pre>
+bar(marg.T)
+</pre>
+This is what it looks like
+
+<p>
+<center>
+<IMG SRC="Figures/sprinkler_bar.gif">
+</center>
+<p>
+
+<h2><a name="observed">Observed nodes</h2>
+
+What happens if we ask for the marginal on an observed node, e.g. P(W|W=2)?
+An observed discrete node effectively only has 1 value (the observed
+      one) --- all other values would result in 0 probability.
+For efficiency, BNT treats observed (discrete) nodes as if they were
+      set to 1, as we see below:
+<pre>
+evidence = cell(1,N);
+evidence{W} = 2;
+engine = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, W);
+m.T
+ans =
+     1
+</pre>
+This can get a little confusing, since we assigned W=2.
+So we can ask BNT to add the evidence back in by passing in an optional argument:
+<pre>
+m = marginal_nodes(engine, W, 1);
+m.T
+ans =
+     0
+     1
+</pre>
+This shows that P(W=1|W=2) = 0 and P(W=2|W=2) = 1.
+
+
+
+<h2><a name="joint">Computing joint distributions</h2>
+
+We can compute the joint probability on a set of nodes as in the
+following example.
+<pre>
+evidence = cell(1,N);
+[engine, ll] = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, [S R W]);
+</pre>
+m is a structure. The 'T' field is a multi-dimensional array (in
+this case, 3-dimensional) that contains the joint probability
+distribution on the specified nodes.
+<pre>
+>> m.T
+ans(:,:,1) =
+    0.2900    0.0410
+    0.0210    0.0009
+ans(:,:,2) =
+         0    0.3690
+    0.1890    0.0891
+</pre>
+We see that P(S=1,R=1,W=2) = 0, since it is impossible for the grass
+to be wet if both the rain and sprinkler are off.
+<p>
+Let us now add some evidence to R.
+<pre>
+evidence{R} = 2;
+[engine, ll] = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, [S R W])
+m = 
+    domain: [2 3 4]
+         T: [2x1x2 double]
+>> m.T
+m.T
+ans(:,:,1) =
+    0.0820
+    0.0018
+ans(:,:,2) =
+    0.7380
+    0.1782
+</pre>
+The joint T(i,j,k) = P(S=i,R=j,W=k|evidence)
+should have T(i,1,k) = 0 for all i,k, since R=1 is incompatible
+with the evidence that R=2.
+Instead of creating large tables with many 0s, BNT sets the effective
+size of observed (discrete) nodes to 1, as explained above.
+This is why m.T has size 2x1x2.
+To get a 2x2x2 table, type
+<pre>
+m = marginal_nodes(engine, [S R W], 1)
+m = 
+    domain: [2 3 4]
+         T: [2x2x2 double]
+>> m.T
+m.T
+ans(:,:,1) =
+            0        0.082
+            0       0.0018
+ans(:,:,2) =
+            0        0.738
+            0       0.1782
+</pre>
+
+<p>
+Note: It is not always possible to compute the joint on arbitrary
+sets of nodes: it depends on which inference engine you use, as discussed 
+in more detail <a href="#engines">below</a>. 
+
+
+<h2><a name="soft">Soft/virtual evidence</h2>
+
+Sometimes a node is not observed, but we have some distribution over
+its possible values; this is often called "soft" or "virtual"
+evidence.
+One can use this as follows
+<pre>
+[engine, loglik] = enter_evidence(engine, evidence, 'soft', soft_evidence);
+</pre>
+where soft_evidence{i} is either [] (if node i has no soft evidence)
+or is a vector representing the probability distribution over i's
+possible values.
+For example, if we don't know i's exact value, but we know its
+likelihood ratio is 60/40, we can write evidence{i} = [] and
+soft_evidence{i} = [0.6 0.4].
+<p>
+Currently only jtree_inf_engine supports this option.
+It assumes that all hidden nodes, and all nodes for
+which we have soft evidence, are discrete.
+For a longer example, see BNT/examples/static/softev1.m. 
+
+
+<h2><a name="mpe">Most probable explanation</h2>
+
+To compute the most probable explanation (MPE) of the evidence (i.e.,
+the most probable assignment, or a mode of the joint), use
+<pre>
+[mpe, ll] = calc_mpe(engine, evidence);     
+</pre>
+mpe{i} is the most likely value of node i.
+This calls enter_evidence with the 'maximize' flag set to 1, which
+causes the engine to do max-product instead of sum-product.
+The resulting max-marginals are then thresholded.
+If there is more than one maximum probability assignment, we must take 
+    care to break ties in a consistent manner (thresholding the
+    max-marginals may give the wrong result). To force this behavior,
+    type
+<pre>
+[mpe, ll] = calc_mpe(engine, evidence, 1);     
+</pre>
+Note that computing the MPE is someties called abductive reasoning.
+    
+<p>
+You can also use <tt>calc_mpe_bucket</tt> written by Ron Zohar,
+that does a forwards max-product pass, and then a backwards traceback
+pass, which is how Viterbi is traditionally implemented.
+
+
+
+<h1><a name="cpd">Conditional Probability Distributions</h1>
+
+A Conditional Probability Distributions (CPD)
+defines P(X(i) | X(Pa(i))), where X(i) is the i'th node, and X(Pa(i))
+are the parents of node i. There are many ways to represent this
+distribution, which depend in part on whether X(i) and X(Pa(i)) are
+discrete, continuous, or a combination.
+We will discuss various representations below.
+
+
+<h2><a name="tabular">Tabular nodes</h2>
+
+If the CPD is represented as a table (i.e., if it is a multinomial
+distribution), it has a number of parameters that is exponential in
+the number of parents. See the example <a href="#cpt">above</a>.
+
+
+<h2><a name="noisyor">Noisy-or nodes</h2>
+
+A noisy-OR node is like a regular logical OR gate except that
+sometimes the effects of parents that are on get inhibited.
+Let the prob. that parent i gets inhibited be q(i).
+Then a node, C, with 2 parents, A and B, has the following CPD, where
+we use F and T to represent off and on (1 and 2 in BNT).
+<pre>
+A  B  P(C=off)      P(C=on)
+---------------------------
+F  F  1.0           0.0
+T  F  q(A)          1-q(A)
+F  T  q(B)          1-q(B)
+T  T  q(A)q(B)      q-q(A)q(B)
+</pre>
+Thus we see that the causes get inhibited independently.
+It is common to associate a "leak" node with a noisy-or CPD, which is
+like a parent that is always on. This can account for all other unmodelled
+causes which might turn the node on.
+<p>
+The noisy-or distribution is similar to the logistic distribution.
+To see this, let the nodes, S(i), have values in {0,1}, and let q(i,j)
+be the prob. that j inhibits i. Then
+<pre>
+Pr(S(i)=1 | parents(S(i))) = 1 - prod_{j} q(i,j)^S(j)
+</pre>
+Now define w(i,j) = -ln q(i,j) and rho(x) = 1-exp(-x). Then
+<pre>
+Pr(S(i)=1 | parents(S(i))) = rho(sum_j w(i,j) S(j))
+</pre>
+For a sigmoid node, we have
+<pre>
+Pr(S(i)=1 | parents(S(i))) = sigma(-sum_j w(i,j) S(j))
+</pre>
+where sigma(x) = 1/(1+exp(-x)). Hence they differ in the choice of
+the activation function (although both are monotonically increasing).
+In addition, in the case of a noisy-or, the weights are constrained to be
+positive, since they derive from probabilities q(i,j).
+In both cases, the number of parameters is <em>linear</em> in the
+number of parents, unlike the case of a multinomial distribution,
+where the number of parameters is exponential in the number of parents.
+We will see an example of noisy-OR nodes <a href="#qmr">below</a>.
+
+
+<h2><a name="deterministic">Other (noisy) deterministic nodes</h2>
+
+Deterministic CPDs for discrete random variables can be created using
+the deterministic_CPD class. It is also possible to 'flip' the output
+of the function with some probability, to simulate noise.
+The boolean_CPD class is just a special case of a
+deterministic CPD, where the parents and child are all binary.
+<p>
+Both of these classes are just "syntactic sugar" for the tabular_CPD
+class.
+
+
+
+<h2><a name="softmax">Softmax nodes</h2>
+
+If we have a discrete node with a continuous parent,
+we can define its CPD using a softmax function 
+(also known as the multinomial logit function).
+This acts like a soft thresholding operator, and is defined as follows:
+<pre>
+                    exp(w(:,i)'*x + b(i)) 
+Pr(Q=i | X=x)  =  -----------------------------
+                  sum_j   exp(w(:,j)'*x + b(j))
+
+</pre>
+The parameters of a softmax node, w(:,i) and b(i), i=1..|Q|, have the
+following interpretation: w(:,i)-w(:,j) is the normal vector to the
+decision boundary between classes i and j,
+and b(i)-b(j) is its offset (bias). For example, suppose
+X is a 2-vector, and Q is binary. Then
+<pre>
+w = [1 -1;
+     0 0];
+
+b = [0 0];
+</pre>
+means class 1 are points in the 2D plane with positive x coordinate,
+and class 2 are points in the 2D plane with negative x coordinate.
+If w has large magnitude, the decision boundary is sharp, otherwise it
+is soft.
+In the special case that Q is binary (0/1), the softmax function reduces to the logistic
+(sigmoid) function.
+<p>
+Fitting a softmax function can be done using the iteratively reweighted
+least squares (IRLS) algorithm.
+We use the implementation from
+<a href="http://www.ncrg.aston.ac.uk/netlab/">Netlab</a>.
+Note that since
+the softmax distribution is not in the exponential family, it does not
+have finite sufficient statistics, and hence we must store all the
+training data in uncompressed form.
+If this takes too much space, one should use online (stochastic) gradient
+descent (not implemented in BNT).
+<p>
+If a softmax node also has discrete parents,
+we use a different set of w/b parameters for each combination of
+parent values, as in the <a href="#gaussian">conditional linear
+Gaussian CPD</a>.
+This feature was implemented by Pierpaolo Brutti.
+He is currently extending it so that discrete parents can be treated
+as if they were continuous, by adding indicator variables to the X
+vector.
+<p>
+We will see an example of softmax nodes <a href="#mixexp">below</a>.
+
+
+<h2><a name="mlp">Neural network nodes</h2>
+
+Pierpaolo Brutti has implemented the mlp_CPD class, which uses a multi layer perceptron
+to implement a mapping from continuous parents to discrete children,
+similar to the softmax function.
+(If there are also discrete parents, it creates a mixture of MLPs.)
+It uses code from <a
+href="http://www.ncrg.aston.ac.uk/netlab/">Netlab</a>.
+This is work in progress.
+
+<h2><a name="root">Root nodes</h2>
+
+A root node has no parents and no parameters; it can be used to model
+an observed, exogeneous input variable, i.e., one which is "outside"
+the model. 
+This is useful for conditional density models.
+We will see an example of root nodes <a href="#mixexp">below</a>.
+
+
+<h2><a name="gaussian">Gaussian nodes</h2>
+
+We now consider a distribution suitable for the continuous-valued nodes.
+Suppose the node is called Y, its continuous parents (if any) are
+called X, and its discrete parents (if any) are called Q.
+The distribution on Y is defined as follows:
+<pre>
+- no parents: Y ~ N(mu, Sigma)
+- cts parents : Y|X=x ~ N(mu + W x, Sigma)
+- discrete parents: Y|Q=i ~ N(mu(:,i), Sigma(:,:,i))
+- cts and discrete parents: Y|X=x,Q=i ~ N(mu(:,i) + W(:,:,i) * x, Sigma(:,:,i))
+</pre>
+where N(mu, Sigma) denotes a Normal distribution with mean mu and
+covariance Sigma. Let |X|, |Y| and |Q| denote the sizes of X, Y and Q
+respectively.
+If there are no discrete parents, |Q|=1; if there is
+more than one, then |Q| = a vector of the sizes of each discrete parent.
+If there are no continuous parents, |X|=0; if there is more than one,
+then |X| = the sum of their sizes.
+Then mu is a |Y|*|Q| vector, Sigma is a |Y|*|Y|*|Q| positive
+semi-definite matrix, and W is a |Y|*|X|*|Q| regression (weight)
+matrix.
+<p>
+We can create a Gaussian node with random parameters as follows.
+<pre>
+bnet.CPD{i} = gaussian_CPD(bnet, i);
+</pre>
+We can specify the value of one or more of the parameters as in the
+following example, in which |Y|=2, and |Q|=1.
+<pre>
+bnet.CPD{i} = gaussian_CPD(bnet, i, 'mean', [0; 0], 'weights', randn(Y,X), 'cov', eye(Y));
+</pre>
+<p>
+We will see an example of conditional linear Gaussian nodes <a
+href="#cg_model">below</a>. 
+<p>
+When fitting a Gaussian using EM, you might encounter some numerical
+problems. See <a
+href="http://www.ai.mit.edu/~murphyk/Software/HMM/hmm.html#loglikpos">here</a>
+for a discussion of this in the context of HMMs.
+(Note: BNT does not currently support spherical covariances, although it
+would be easy to add, since  KPMstats/clg_Mstep supports this option;
+you would just need to modify gaussian_CPD/update_ess to accumulate
+weighted inner products.)
+
+
+<h2><a name="nongauss">Other continuous distributions</h2>
+
+Currently BNT does not support any CPDs for continuous nodes other
+than the Gaussian.
+However, you can use a mixture of Gaussians to
+approximate other continuous distributions. We will see some an example
+of this with the IFA model <a href="#pca">below</a>.
+
+
+<h2><a name="glm">Generalized linear model nodes</h2>
+
+In the future, we may incorporate some of the functionality of
+<a href =
+"http://www.sci.usq.edu.au/staff/dunn/glmlab/glmlab.html">glmlab</a>
+into BNT.
+
+
+<h2><a name="dtree">Classification/regression tree nodes</h2>
+
+We plan to add classification and regression trees to define CPDs for
+discrete and continuous nodes, respectively.
+Trees have many advantages: they are easy to interpret, they can do
+feature selection, they can
+handle discrete and continuous inputs, they do not make strong
+assumptions about the form of the distribution, the number of
+parameters can grow in a data-dependent way (i.e., they are
+semi-parametric), they can handle missing data, etc.
+However, they are not yet implemented.
+<!--
+Yimin Zhang is currently (Feb '02) implementing this.
+-->
+
+
+<h2><a name="cpd_summary">Summary of CPD types</h2>
+
+We list all the different types of CPDs supported by BNT.
+For each CPD, we specify if the child and parents can be discrete (D) or
+continuous (C) (Binary (B) nodes are a special case).
+We also specify which methods each class supports.
+If a method is inherited, the name of the  parent class is mentioned.
+If a parent class calls a child method, this is mentioned.
+<p>
+The <tt>CPD_to_CPT</tt> method converts a CPD to a table; this
+requires that the child and all parents are discrete.
+The CPT might be exponentially big...
+<tt>convert_to_table</tt> evaluates a CPD with evidence, and
+represents the the resulting potential as an array.
+This requires that the child is discrete, and any continuous parents
+are observed.
+<tt>convert_to_pot</tt> evaluates a CPD with evidence, and
+represents the resulting potential as a dpot, gpot, cgpot or upot, as
+requested. (d=discrete, g=Gaussian, cg = conditional Gaussian, u =
+utility).
+
+<p>
+When we sample a node, all the parents are observed.
+When we compute the (log) probability of a node, all the parents and
+the child are observed.
+<p>
+We also specify if the parameters are learnable.
+For learning with EM, we require
+the methods <tt>reset_ess</tt>, <tt>update_ess</tt> and
+<tt>maximize_params</tt>. 
+For learning from fully observed data, we require
+the method <tt>learn_params</tt>.
+By default, all classes inherit this from generic_CPD, which simply
+calls <tt>update_ess</tt> N times, once for each data case, followed
+by <tt>maximize_params</tt>, i.e., it is like EM, without the E step.
+Some classes implement a batch formula, which is quicker.
+<p>
+Bayesian learning means computing a posterior over the parameters
+given fully observed data.
+<p>
+Pearl means we implement the methods <tt>compute_pi</tt> and
+<tt>compute_lambda_msg</tt>, used by
+<tt>pearl_inf_engine</tt>, which runs on directed graphs.
+<tt>belprop_inf_engine</tt> only needs <tt>convert_to_pot</tt>.H
+The pearl methods can exploit special properties of the CPDs for
+computing the messages efficiently, whereas belprop does not.
+<p>
+The only method implemented by generic_CPD is <tt>adjustable_CPD</tt>,
+which is not shown, since it is not very interesting.
+
+
+<p>
+
+
+<table>
+<table border units = pixels><tr>
+<td align=center>Name
+<td align=center>Child
+<td align=center>Parents
+<td align=center>Comments
+<td align=center>CPD_to_CPT
+<td align=center>conv_to_table
+<td align=center>conv_to_pot
+<td align=center>sample
+<td align=center>prob
+<td align=center>learn
+<td align=center>Bayes
+<td align=center>Pearl
+
+
+<tr>
+<!-- Name--><td>
+<!-- Child--><td>
+<!-- Parents--><td>
+<!-- Comments--><td>
+<!-- CPD_to_CPT--><td>
+<!-- conv_to_table--><td>
+<!-- conv_to_pot--><td>
+<!-- sample--><td>
+<!-- prob--><td>
+<!-- learn--><td>
+<!-- Bayes--><td>
+<!-- Pearl--><td>
+
+<tr>
+<!-- Name--><td>boolean
+<!-- Child--><td>B
+<!-- Parents--><td>B
+<!-- Comments--><td>Syntactic sugar for tabular
+<!-- CPD_to_CPT--><td>-
+<!-- conv_to_table--><td>-
+<!-- conv_to_pot--><td>-
+<!-- sample--><td>-
+<!-- prob--><td>-
+<!-- learn--><td>-
+<!-- Bayes--><td>-
+<!-- Pearl--><td>-
+
+<tr>
+<!-- Name--><td>deterministic
+<!-- Child--><td>D
+<!-- Parents--><td>D
+<!-- Comments--><td>Syntactic sugar for tabular
+<!-- CPD_to_CPT--><td>-
+<!-- conv_to_table--><td>-
+<!-- conv_to_pot--><td>-
+<!-- sample--><td>-
+<!-- prob--><td>-
+<!-- learn--><td>-
+<!-- Bayes--><td>-
+<!-- Pearl--><td>-
+
+<tr>
+<!-- Name--><td>Discrete
+<!-- Child--><td>D
+<!-- Parents--><td>C/D
+<!-- Comments--><td>Virtual class
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>Calls CPD_to_CPT
+<!-- conv_to_pot--><td>Calls conv_to_table
+<!-- sample--><td>Calls conv_to_table
+<!-- prob--><td>Calls conv_to_table
+<!-- learn--><td>N
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+<tr>
+<!-- Name--><td>Gaussian
+<!-- Child--><td>C
+<!-- Parents--><td>C/D
+<!-- Comments--><td>-
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>N
+<!-- conv_to_pot--><td>Y
+<!-- sample--><td>Y
+<!-- prob--><td>Y
+<!-- learn--><td>Y
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+<tr>
+<!-- Name--><td>gmux
+<!-- Child--><td>C
+<!-- Parents--><td>C/D
+<!-- Comments--><td>multiplexer
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>N
+<!-- conv_to_pot--><td>Y
+<!-- sample--><td>N
+<!-- prob--><td>N
+<!-- learn--><td>N
+<!-- Bayes--><td>N
+<!-- Pearl--><td>Y
+
+
+<tr>
+<!-- Name--><td>MLP
+<!-- Child--><td>D
+<!-- Parents--><td>C/D
+<!-- Comments--><td>multi layer perceptron
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>Y
+<!-- conv_to_pot--><td>Inherits from discrete
+<!-- sample--><td>Inherits from discrete
+<!-- prob--><td>Inherits from discrete
+<!-- learn--><td>Y
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+
+<tr>
+<!-- Name--><td>noisy-or
+<!-- Child--><td>B
+<!-- Parents--><td>B
+<!-- Comments--><td>-
+<!-- CPD_to_CPT--><td>Y
+<!-- conv_to_table--><td>Inherits from discrete
+<!-- conv_to_pot--><td>Inherits from discrete
+<!-- sample--><td>Inherits from discrete
+<!-- prob--><td>Inherits from discrete
+<!-- learn--><td>N
+<!-- Bayes--><td>N
+<!-- Pearl--><td>Y
+
+
+<tr>
+<!-- Name--><td>root
+<!-- Child--><td>C/D
+<!-- Parents--><td>none
+<!-- Comments--><td>no params
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>N
+<!-- conv_to_pot--><td>Y
+<!-- sample--><td>Y
+<!-- prob--><td>Y
+<!-- learn--><td>N
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+
+<tr>
+<!-- Name--><td>softmax
+<!-- Child--><td>D
+<!-- Parents--><td>C/D
+<!-- Comments--><td>-
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>Y
+<!-- conv_to_pot--><td>Inherits from discrete
+<!-- sample--><td>Inherits from discrete
+<!-- prob--><td>Inherits from discrete
+<!-- learn--><td>Y
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+
+<tr>
+<!-- Name--><td>generic
+<!-- Child--><td>C/D
+<!-- Parents--><td>C/D
+<!-- Comments--><td>Virtual class
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>N
+<!-- conv_to_pot--><td>N
+<!-- sample--><td>N
+<!-- prob--><td>N
+<!-- learn--><td>N
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+
+<tr>
+<!-- Name--><td>Tabular
+<!-- Child--><td>D
+<!-- Parents--><td>D
+<!-- Comments--><td>-
+<!-- CPD_to_CPT--><td>Y
+<!-- conv_to_table--><td>Inherits from discrete
+<!-- conv_to_pot--><td>Inherits from discrete
+<!-- sample--><td>Inherits from discrete
+<!-- prob--><td>Inherits from discrete
+<!-- learn--><td>Y
+<!-- Bayes--><td>Y
+<!-- Pearl--><td>Y
+
+</table>
+
+
+
+<h1><a name="examples">Example models</h1>
+
+
+<h2>Gaussian mixture models</h2>
+
+Richard W. DeVaul has made a detailed tutorial on how to fit mixtures
+of Gaussians using BNT. Available
+<a href="http://www.media.mit.edu/wearables/mithril/BNT/mixtureBNT.txt">here</a>.
+
+
+<h2><a name="pca">PCA, ICA, and all that </h2>
+
+In Figure (a) below, we show how Factor Analysis can be thought of as a
+graphical model. Here, X has an N(0,I) prior, and
+Y|X=x ~ N(mu + Wx, Psi),
+where Psi is diagonal and W is called the "factor loading matrix".
+Since the noise on both X and Y is diagonal, the components of these
+vectors are uncorrelated, and hence can be represented as individual
+scalar nodes, as we show in (b).
+(This is useful if parts of the observations on the Y vector are occasionally missing.)
+We usually take k=|X| << |Y|=D, so the model tries to explain
+many observations using a low-dimensional subspace.
+
+
+<center>
+<table>
+<tr>
+<td><img src="Figures/fa.gif">
+<td><img src="Figures/fa_scalar.gif">
+<td><img src="Figures/mfa.gif">
+<td><img src="Figures/ifa.gif">
+<tr>
+<td align=center> (a)
+<td align=center> (b)
+<td align=center> (c)
+<td align=center> (d)
+</table>
+</center>
+
+<p>
+We can create this model in BNT as follows.
+<pre>
+ns = [k D];
+dag = zeros(2,2);
+dag(1,2) = 1;
+bnet = mk_bnet(dag, ns, 'discrete', []);
+bnet.CPD{1} = gaussian_CPD(bnet, 1, 'mean', zeros(k,1), 'cov', eye(k), ...
+   'cov_type', 'diag', 'clamp_mean', 1, 'clamp_cov', 1);
+bnet.CPD{2} = gaussian_CPD(bnet, 2, 'mean', zeros(D,1), 'cov', diag(Psi0), 'weights', W0, ...
+   'cov_type', 'diag', 'clamp_mean', 1);
+</pre>
+
+The root node is clamped to the N(0,I) distribution, so that we will
+not update these parameters during learning.
+The mean of the leaf node is clamped to 0,
+since we assume the data has been centered (had its mean subtracted
+off); this is just for simplicity.
+Finally, the covariance of the leaf node is constrained to be
+diagonal. W0 and Psi0 are the initial parameter guesses.
+
+<p>
+We can fit this model (i.e., estimate its parameters in a maximum
+likelihood (ML) sense) using EM, as we
+explain <a href="#em">below</a>.
+Not surprisingly, the ML estimates for mu and Psi turn out to be
+identical to the
+sample mean and variance, which can be computed directly as
+<pre>
+mu_ML = mean(data);
+Psi_ML = diag(cov(data));
+</pre>
+Note that W can only be identified up to a rotation matrix, because of
+the spherical symmetry of the source.
+
+<p>
+If we restrict Psi to be spherical, i.e., Psi = sigma*I,
+there is a closed-form solution for W as well,
+i.e., we do not need to use EM.
+In particular, W contains the first |X| eigenvectors of the sample covariance
+matrix, with scalings determined by the eigenvalues and sigma.
+Classical PCA can be obtained by taking the sigma->0 limit.
+For details, see
+
+<ul>
+<li> <a href="ftp://hope.caltech.edu/pub/roweis/Empca/empca.ps">
+"EM algorithms for PCA and SPCA"</a>, Sam Roweis, NIPS 97.
+(<a href="ftp://hope.caltech.edu/pub/roweis/Code/empca.tar.gz">
+Matlab software</a>)
+
+<p>
+<li>
+<a
+href=http://neural-server.aston.ac.uk/cgi-bin/tr_avail.pl?trnumber=NCRG/97/003>
+"Mixtures of probabilistic principal component analyzers"</a>,
+Tipping and Bishop, Neural Computation 11(2):443--482, 1999.
+</ul>
+
+<p>
+By adding a hidden discrete variable, we can create mixtures of FA
+models, as shown in (c).
+Now we can explain the data using a set of subspaces.
+We can create this model in BNT as follows.
+<pre>
+ns = [M k D];
+dag = zeros(3);
+dag(1,3) = 1;
+dag(2,3) = 1;
+bnet = mk_bnet(dag, ns, 'discrete', 1);
+bnet.CPD{1} = tabular_CPD(bnet, 1, Pi0);
+bnet.CPD{2} = gaussian_CPD(bnet, 2, 'mean', zeros(k, 1), 'cov', eye(k), 'cov_type', 'diag', ...
+			   'clamp_mean', 1, 'clamp_cov', 1);
+bnet.CPD{3} = gaussian_CPD(bnet, 3, 'mean', Mu0', 'cov', repmat(diag(Psi0), [1 1 M]), ...
+			   'weights', W0, 'cov_type', 'diag', 'tied_cov', 1);
+</pre>
+Notice how the covariance matrix for Y is the same for all values of
+Q; that is, the noise level in each sub-space is assumed the same.
+However, we allow the offset, mu, to vary.
+For details, see
+<ul>
+
+<LI> 
+<a HREF="ftp://ftp.cs.toronto.edu/pub/zoubin/tr-96-1.ps.gz"> The EM 
+Algorithm for Mixtures of Factor Analyzers </A>,
+Ghahramani, Z. and Hinton, G.E. (1996),
+University of Toronto
+Technical Report CRG-TR-96-1.
+(<A HREF="ftp://ftp.cs.toronto.edu/pub/zoubin/mfa.tar.gz">Matlab software</A>)
+
+<p>
+<li>
+<a
+href=http://neural-server.aston.ac.uk/cgi-bin/tr_avail.pl?trnumber=NCRG/97/003>
+"Mixtures of probabilistic principal component analyzers"</a>,
+Tipping and Bishop, Neural Computation 11(2):443--482, 1999.
+</ul>
+
+<p>
+I have included Zoubin's specialized MFA code (with his permission)
+with the toolbox, so you can check that BNT gives the same results:
+see 'BNT/examples/static/mfa1.m'. 
+
+<p>
+Independent Factor Analysis (IFA) generalizes FA by allowing a
+non-Gaussian prior on each component of X.
+(Note that we can approximate a non-Gaussian prior using a mixture of
+Gaussians.)
+This means that the likelihood function is no longer rotationally
+invariant, so we can uniquely identify W and the hidden
+sources X.
+IFA also allows a non-diagonal Psi (i.e. correlations between the components of Y).
+We recover classical Independent Components Analysis (ICA)
+in the Psi -> 0 limit, and by assuming that |X|=|Y|, so that the
+weight matrix W is square and invertible.
+For details, see
+<ul>
+<li>
+<a href="http://www.gatsby.ucl.ac.uk/~hagai/ifa.ps">Independent Factor
+Analysis</a>, H. Attias, Neural Computation 11: 803--851, 1998.
+</ul>
+
+
+
+<h2><a name="mixexp">Mixtures of experts</h2>
+
+As an example of the use of the softmax function,
+we introduce the Mixture of Experts model.
+<!--
+We also show
+the Hierarchical Mixture of Experts model, where the hierarchy has two
+levels.
+(This is essentially a probabilistic decision tree of height two.)
+-->
+As before,
+circles denote continuous-valued nodes,
+squares denote discrete nodes, clear
+means hidden, and shaded means observed.
+<p>
+<center>
+<table>
+<tr>
+<td><img src="Figures/mixexp.gif">
+<!--
+<td><img src="Figures/hme.gif">
+-->
+</table>
+</center>
+<p>
+X is the observed
+input, Y is the output, and
+the Q nodes are hidden "gating" nodes, which select the appropriate
+set of parameters for Y. During training, Y is assumed observed,
+but for testing, the goal is to predict Y given X.
+Note that this is a <em>conditional</em> density model, so we don't
+associate any parameters with X.
+Hence X's CPD will be a root CPD, which is a way of modelling
+exogenous nodes.
+If the output is a continuous-valued quantity,
+we assume the "experts" are linear-regression units,
+and set Y's CPD to linear-Gaussian.
+If the output is discrete, we set Y's CPD to a softmax function.
+The Q CPDs will always be softmax functions.
+
+<p>
+As a concrete example, consider the mixture of experts model where X and Y are
+scalars, and Q is binary.
+This is just piecewise linear regression, where
+we have two line segments, i.e.,
+<P>
+<IMG ALIGN=BOTTOM SRC="Eqns/lin_reg_eqn.gif">
+<P>
+We can create this model with random parameters as follows.
+(This code is bundled in BNT/examples/static/mixexp2.m.)
+<PRE>
+X = 1;
+Q = 2;
+Y = 3;
+dag = zeros(3,3);
+dag(X,[Q Y]) = 1
+dag(Q,Y) = 1;
+ns = [1 2 1]; % make X and Y scalars, and have 2 experts
+onodes = [1 3];
+bnet = mk_bnet(dag, ns, 'discrete', 2, 'observed', onodes);
+
+rand('state', 0);
+randn('state', 0);
+bnet.CPD{1} = root_CPD(bnet, 1);
+bnet.CPD{2} = softmax_CPD(bnet, 2);
+bnet.CPD{3} = gaussian_CPD(bnet, 3);
+</PRE>
+Now let us fit this model using <a href="#em">EM</a>.
+First we <a href="#load_data">load the data</a> (1000 training cases) and plot them.
+<P>
+<PRE>
+data = load('/examples/static/Misc/mixexp_data.txt', '-ascii');        
+plot(data(:,1), data(:,2), '.');
+</PRE>
+<p>
+<center>
+<IMG SRC="Figures/mixexp_data.gif">
+</center>
+<p>
+This is what the model looks like before training.
+(Thanks to Thomas Hofman for writing this plotting routine.)
+<p>
+<center>
+<IMG SRC="Figures/mixexp_before.gif">
+</center>
+<p>
+Now let's train the model, and plot the final performance.
+(We will discuss how to train models in more detail <a href="#param_learning">below</a>.)
+<P>
+<PRE>
+ncases = size(data, 1); % each row of data is a training case
+cases = cell(3, ncases);
+cases([1 3], :) = num2cell(data'); % each column of cases is a training case
+engine = jtree_inf_engine(bnet);
+max_iter = 20;
+[bnet2, LLtrace] = learn_params_em(engine, cases, max_iter);
+</PRE>
+(We specify which nodes will be observed when we create the engine.
+Hence BNT knows that the hidden nodes are all discrete.
+For complex models, this can lead to a significant speedup.)
+Below we show what the model looks like after 16 iterations of EM
+(with 100 IRLS iterations per M step), when it converged
+using the default convergence tolerance (that the
+fractional change in the log-likelihood be less than 1e-3).
+Before learning, the log-likelihood was
+-322.927442; afterwards, it was -13.728778.
+<p>
+<center>
+<IMG SRC="Figures/mixexp_after.gif">
+</center>
+(See BNT/examples/static/mixexp2.m for details of the code.)
+
+
+
+<h2><a name="hme">Hierarchical mixtures of experts</h2>
+
+A hierarchical mixture of experts (HME) extends the mixture of experts
+model by having more than one hidden node. A two-level example is shown below, along
+with its more traditional representation as a neural network.
+This is like a (balanced) probabilistic decision tree of height 2.
+<p>
+<center>
+<IMG SRC="Figures/HMEforMatlab.jpg">
+</center>
+<p>
+<a href="mailto:pbrutti@stat.cmu.edu">Pierpaolo Brutti</a>
+has written an extensive set of routines for HMEs,
+which are bundled with BNT: see the examples/static/HME directory.
+These routines allow you to choose the number of hidden (gating)
+layers, and the form of the experts (softmax or MLP).
+See the file hmemenu, which provides a demo.
+For example, the figure below shows the decision boundaries learned
+for a ternary classification problem, using a 2 level HME with softmax
+gates and softmax experts; the training set is on the left, the
+testing set on the right.
+<p>
+<center>
+<!--<IMG SRC="Figures/hme_dec_boundary.gif">-->
+<IMG SRC="Figures/hme_dec_boundary.png">
+</center>
+<p>
+
+
+<p>
+For more details, see the following:
+<ul>
+
+<li> <a href="http://www.cs.berkeley.edu/~jordan/papers/hierarchies.ps.Z">
+Hierarchical mixtures of experts and the EM algorithm</a>
+M. I. Jordan and R. A. Jacobs. Neural Computation, 6, 181-214, 1994.
+
+<li> <a href =
+"http://www.cs.berkeley.edu/~dmartin/software">David Martin's
+matlab code for HME</a>
+
+<li> <a
+href="http://www.cs.berkeley.edu/~jordan/papers/uai.ps.Z">Why the
+logistic function? A tutorial discussion on 
+probabilities and neural networks.</a> M. I. Jordan. MIT Computational
+Cognitive Science Report 9503, August 1995. 
+
+<li> "Generalized Linear Models", McCullagh and Nelder, Chapman and
+Halll, 1983.
+
+<li>
+"Improved learning algorithms for mixtures of experts in multiclass
+classification".
+K. Chen, L. Xu, H. Chi.
+Neural Networks (1999) 12: 1229-1252.
+
+<li> <a href="http://www.oigeeza.com/steve/">
+Classification Using Hierarchical Mixtures of Experts</a>
+S.R. Waterhouse and A.J. Robinson.
+In Proc. IEEE Workshop on Neural Network for Signal Processing IV (1994), pp. 177-186
+
+<li> <a href="http://www.idiap.ch/~perry/">
+Localized mixtures of experts</a>,
+P. Moerland, 1998.
+
+<li> "Nonlinear gated experts for time series",
+A.S. Weigend and M. Mangeas, 1995.
+
+</ul>
+
+
+<h2><a name="qmr">QMR</h2>
+
+Bayes nets originally arose out of an attempt to add probabilities to
+expert systems, and this is still the most common use for BNs.
+A famous example is
+QMR-DT, a decision-theoretic reformulation of the Quick Medical
+Reference (QMR) model.
+<p>
+<center>
+<IMG ALIGN=BOTTOM SRC="Figures/qmr.gif">
+</center>
+Here, the top layer represents hidden disease nodes, and the bottom
+layer represents observed symptom nodes.
+The goal is to infer the posterior probability of each disease given
+all the symptoms (which can be present, absent or unknown).
+Each node in the top layer has a Bernoulli prior (with a low prior
+probability that the disease is present).
+Since each node in the bottom layer has a high fan-in, we use a
+noisy-OR parameterization; each disease has an independent chance of
+causing each symptom.
+The real QMR-DT model is copyright, but
+we can create a random QMR-like model as follows.
+<pre>
+function bnet = mk_qmr_bnet(G, inhibit, leak, prior)
+% MK_QMR_BNET Make a QMR model
+% bnet = mk_qmr_bnet(G, inhibit, leak, prior)
+%
+% G(i,j) = 1 iff there is an arc from disease i to finding j
+% inhibit(i,j) = inhibition probability on i->j arc
+% leak(j) = inhibition prob. on leak->j arc
+% prior(i) = prob. disease i is on
+
+[Ndiseases Nfindings] = size(inhibit);
+N = Ndiseases + Nfindings;
+finding_node = Ndiseases+1:N;
+ns = 2*ones(1,N);
+dag = zeros(N,N);
+dag(1:Ndiseases, finding_node) = G;
+bnet = mk_bnet(dag, ns, 'observed', finding_node);
+
+for d=1:Ndiseases
+  CPT = [1-prior(d) prior(d)];
+  bnet.CPD{d} = tabular_CPD(bnet, d, CPT');
+end
+
+for i=1:Nfindings
+  fnode = finding_node(i);
+  ps = parents(G, i);
+  bnet.CPD{fnode} = noisyor_CPD(bnet, fnode, leak(i), inhibit(ps, i));
+end
+</pre>
+In the file BNT/examples/static/qmr1, we create a random bipartite
+graph G, with 5 diseases and 10 findings, and random parameters.
+(In general, to create a random dag, use 'mk_random_dag'.)
+We can visualize the resulting  graph structure using
+the methods discussed <a href="#graphdraw">below</a>, with the
+following results:
+<p>
+<img src="Figures/qmr.rnd.jpg">
+
+<p>
+Now let us put some random evidence on all the leaves except the very
+first and very last, and compute the disease posteriors.
+<pre>
+pos = 2:floor(Nfindings/2);
+neg = (pos(end)+1):(Nfindings-1);
+onodes = myunion(pos, neg);
+evidence = cell(1, N);
+evidence(findings(pos)) = num2cell(repmat(2, 1, length(pos)));
+evidence(findings(neg)) = num2cell(repmat(1, 1, length(neg)));
+
+engine = jtree_inf_engine(bnet);
+[engine, ll] = enter_evidence(engine, evidence);
+post = zeros(1, Ndiseases);
+for i=diseases(:)'
+  m = marginal_nodes(engine, i);
+  post(i) = m.T(2);
+end
+</pre>
+Junction tree can be quite slow on large QMR models.
+Fortunately, it is possible to exploit properties of the noisy-OR
+function to speed up exact inference using an algorithm called
+<a href="#quickscore">quickscore</a>, discussed below.
+
+
+
+
+
+<h2><a name="cg_model">Conditional Gaussian models</h2>
+
+A conditional Gaussian model is one in which, conditioned on all the discrete
+nodes, the distribution over the remaining (continuous) nodes is
+multivariate Gaussian. This means we can have arcs from discrete (D)
+to continuous (C) nodes, but not vice versa.
+(We <em>are</em> allowed C->D arcs if the continuous nodes are observed,
+as in the <a href="#mixexp">mixture of experts</a> model,
+since this distribution can be represented with a discrete potential.)
+<p>
+We now give an example of a CG model, from
+the paper "Propagation of Probabilities, Means amd
+Variances in Mixed Graphical Association Models", Steffen Lauritzen,
+JASA 87(420):1098--1108, 1992 (reprinted in the book "Probabilistic Networks and Expert
+Systems", R. G. Cowell, A. P. Dawid, S. L. Lauritzen and
+D. J. Spiegelhalter, Springer, 1999.)
+
+<h3>Specifying the graph</h3>
+
+Consider the model of waste emissions from an incinerator plant shown below.
+We follow the standard convention that shaded nodes are observed,
+clear nodes are hidden.
+We also use the non-standard convention that
+square nodes are discrete (tabular) and round nodes are
+Gaussian.
+
+<p>
+<center>
+<IMG SRC="Figures/cg1.gif">
+</center>
+<p>
+
+We can create this model as follows.
+<pre>
+F = 1; W = 2; E = 3; B = 4; C = 5; D = 6; Min = 7; Mout = 8; L = 9;
+n = 9;
+
+dag = zeros(n);
+dag(F,E)=1;
+dag(W,[E Min D]) = 1;
+dag(E,D)=1;
+dag(B,[C D])=1;
+dag(D,[L Mout])=1;
+dag(Min,Mout)=1;
+
+% node sizes - all cts nodes are scalar, all discrete nodes are binary
+ns = ones(1, n);
+dnodes = [F W B];
+cnodes = mysetdiff(1:n, dnodes);
+ns(dnodes) = 2;
+
+bnet = mk_bnet(dag, ns, 'discrete', dnodes);
+</pre>
+'dnodes' is a list of the discrete nodes; 'cnodes' is the continuous
+nodes. 'mysetdiff' is a faster version of the built-in 'setdiff'.
+<p>
+
+
+<h3>Specifying the parameters</h3>
+
+The parameters of the discrete nodes can be specified as follows.
+<pre>
+bnet.CPD{B} = tabular_CPD(bnet, B, 'CPT', [0.85 0.15]); % 1=stable, 2=unstable
+bnet.CPD{F} = tabular_CPD(bnet, F, 'CPT', [0.95 0.05]); % 1=intact, 2=defect
+bnet.CPD{W} = tabular_CPD(bnet, W, 'CPT', [2/7 5/7]); % 1=industrial, 2=household
+</pre>
+
+<p>
+The parameters of the continuous nodes can be specified as follows.
+<pre>
+bnet.CPD{E} = gaussian_CPD(bnet, E, 'mean', [-3.9 -0.4 -3.2 -0.5], ...
+			   'cov', [0.00002 0.0001 0.00002 0.0001]);
+bnet.CPD{D} = gaussian_CPD(bnet, D, 'mean', [6.5 6.0 7.5 7.0], ...
+			   'cov', [0.03 0.04 0.1 0.1], 'weights', [1 1 1 1]);
+bnet.CPD{C} = gaussian_CPD(bnet, C, 'mean', [-2 -1], 'cov', [0.1 0.3]);
+bnet.CPD{L} = gaussian_CPD(bnet, L, 'mean', 3, 'cov', 0.25, 'weights', -0.5);
+bnet.CPD{Min} = gaussian_CPD(bnet, Min, 'mean', [0.5 -0.5], 'cov', [0.01 0.005]);
+bnet.CPD{Mout} = gaussian_CPD(bnet, Mout, 'mean', 0, 'cov', 0.002, 'weights', [1 1]);
+</pre>
+
+
+<h3><a name="cg_infer">Inference</h3>
+
+<!--Let us perform inference in the <a href="#cg_model">waste incinerator example</a>.-->
+First we compute the unconditional marginals.
+<pre>
+engine = jtree_inf_engine(bnet);
+evidence = cell(1,n);
+[engine, ll] = enter_evidence(engine, evidence);
+marg = marginal_nodes(engine, E);
+</pre>
+<!--(Of course, we could use <tt>cond_gauss_inf_engine</tt> instead of jtree.)-->
+'marg' is a structure that contains the fields 'mu' and 'Sigma', which
+contain the mean and (co)variance of the marginal on E.
+In this case, they are both scalars.
+Let us check they match the published figures (to 2 decimal places).
+<!--(We can't expect
+more precision than this in general because I have implemented the algorithm of
+Lauritzen (1992), which can be numerically unstable.)-->
+<pre>
+tol = 1e-2;
+assert(approxeq(marg.mu, -3.25, tol));
+assert(approxeq(sqrt(marg.Sigma), 0.709, tol));
+</pre>
+We can compute the other posteriors similarly.
+Now let us add some evidence.
+<pre>
+evidence = cell(1,n);
+evidence{W} = 1; % industrial
+evidence{L} = 1.1;
+evidence{C} = -0.9;
+[engine, ll] = enter_evidence(engine, evidence);
+</pre>
+Now we find
+<pre>
+marg = marginal_nodes(engine, E);
+assert(approxeq(marg.mu, -3.8983, tol));
+assert(approxeq(sqrt(marg.Sigma), 0.0763, tol));
+</pre>
+
+
+We can also compute the joint probability on a set of nodes.
+For example, P(D, Mout | evidence) is a 2D Gaussian:
+<pre>
+marg = marginal_nodes(engine, [D Mout])
+marg = 
+    domain: [6 8]
+        mu: [2x1 double]
+     Sigma: [2x2 double]
+         T: 1.0000
+</pre>
+The mean is
+<pre>
+marg.mu
+ans =
+    3.6077
+    4.1077
+</pre>
+and the covariance matrix is
+<pre>
+marg.Sigma
+ans =
+    0.1062    0.1062
+    0.1062    0.1182
+</pre>
+It is easy to visualize this posterior using standard Matlab plotting
+functions, e.g.,
+<pre>
+gaussplot2d(marg.mu, marg.Sigma);
+</pre>
+produces the following picture.
+
+<p>
+<center>
+<IMG SRC="Figures/gaussplot.png">
+</center>
+<p>
+
+
+The T field indicates that the mixing weight of this Gaussian
+component is 1.0.
+If the joint contains discrete and continuous variables, the result
+will be a mixture of Gaussians, e.g.,
+<pre>
+marg = marginal_nodes(engine, [F E])
+    domain: [1 3]
+        mu: [-3.9000 -0.4003]
+     Sigma: [1x1x2 double]
+         T: [0.9995 4.7373e-04]
+</pre>
+The interpretation is
+Sigma(i,j,k) = Cov[ E(i) E(j) | F=k ].
+In this case, E is a scalar, so i=j=1; k specifies the mixture component.
+<p>
+We saw in the sprinkler network that BNT sets the effective size of
+observed discrete nodes to 1, since they only have one legal value.
+For continuous nodes, BNT sets their length to 0,
+since they have been reduced to a point.
+For example,
+<pre>
+marg = marginal_nodes(engine, [B C])
+    domain: [4 5]
+        mu: []
+     Sigma: []
+         T: [0.0123 0.9877]
+</pre>
+It is simple to post-process the output of marginal_nodes.
+For example, the file BNT/examples/static/cg1 sets the mu term of
+observed nodes to their observed value, and the Sigma term to 0 (since
+observed nodes have no variance).
+
+<p>
+Note that the implemented version of the junction tree is numerically
+unstable when using CG potentials
+(which is why, in the example above, we only required our answers to agree with
+the published ones to 2dp.)
+This is why you might want to use <tt>stab_cond_gauss_inf_engine</tt>,
+implemented by Shan Huang. This is described in
+
+<ul>
+<li> "Stable Local Computation with Conditional Gaussian Distributions",
+S. Lauritzen and F. Jensen, Tech Report R-99-2014,
+Dept. Math. Sciences, Allborg Univ., 1999.
+</ul>
+
+However, even the numerically stable version
+can be computationally intractable if there are many hidden discrete
+nodes, because the number of mixture components grows exponentially e.g., in a
+<a href="usage_dbn.html#lds">switching linear dynamical system</a>.
+In general, one must resort to approximate inference techniques: see
+the discussion on <a href="#engines">inference engines</a> below.
+
+
+<h2><a name="hybrid">Other hybrid models</h2>
+
+When we have C->D arcs, where C is hidden, we need to use
+approximate inference.
+One approach (not implemented in BNT) is described in
+<ul>
+<li> <a
+href="http://www.cs.berkeley.edu/~murphyk/Papers/hybrid_uai99.ps.gz">A
+Variational Approximation for Bayesian Networks with 
+Discrete and Continuous Latent Variables</a>,
+K. Murphy, UAI 99.
+</ul>
+Of course, one can always use <a href="#sampling">sampling</a> methods
+for approximate inference in such models.
+
+
+
+<h1><a name="param_learning">Parameter Learning</h1>
+
+The parameter estimation routines in BNT can be classified into 4
+types, depending on whether the goal is to compute
+a full (Bayesian) posterior over the parameters or just a point
+estimate (e.g., Maximum Likelihood or Maximum A Posteriori),
+and whether all the variables are fully observed or there is missing
+data/ hidden variables (partial observability).
+<p>
+
+<TABLE BORDER>
+<tr>
+ <TH></TH>
+ <th>Full obs</th>
+ <th>Partial obs</th>
+</tr>
+<tr>
+ <th>Point</th>
+ <td><tt>learn_params</tt></td>
+ <td><tt>learn_params_em</tt></td>
+</tr>
+<tr>
+ <th>Bayes</th>
+ <td><tt>bayes_update_params</tt></td>
+ <td>not yet supported</td>
+</tr>
+</table>
+
+
+<h2><a name="load_data">Loading data from a file</h2>
+
+To load numeric data from an ASCII text file called 'dat.txt', where each row is a
+case and columns are separated by white-space, such as
+<pre>
+011979 1626.5 0.0
+021979 1367.0 0.0
+...
+</pre>
+you can use
+<pre>
+data = load('dat.txt');
+</pre>
+or
+<pre>
+load dat.txt -ascii
+</pre>
+In the latter case, the data is stored in a variable called 'dat' (the
+filename minus the extension).
+Alternatively, suppose the data is stored in a .csv file (has commas
+separating the columns, and contains a header line), such as
+<pre>
+header info goes here
+ORD,011979,1626.5,0.0
+DSM,021979,1367.0,0.0
+...
+</pre>
+You can load this using
+<pre>
+[a,b,c,d] = textread('dat.txt', '%s %d %f %f', 'delimiter', ',', 'headerlines', 1);
+</pre>
+If your file is not in either of these formats, you can either use Perl to convert
+it to this format, or use the Matlab scanf command.
+Type
+<tt>
+help iofun
+</tt>
+for more information on Matlab's file functions.
+<!--
+<p>
+To load data directly from Excel,
+you should buy the 
+<a href="http://www.mathworks.com/products/excellink/">Excel Link</a>.
+To load data directly from a relational database,
+you should buy the 
+<a href="http://www.mathworks.com/products/database">Database
+toolbox</a>.
+-->
+<p>
+BNT learning routines require data to be stored in a cell array.
+data{i,m} is the value of node i in case (example) m, i.e., each
+<em>column</em> is a case.
+If node i is not observed in case m (missing value), set
+data{i,m} = [].
+(Not all the learning routines can cope with such missing values, however.)
+In the special case that all the nodes are observed and are
+scalar-valued (as opposed to vector-valued), the data can be
+stored in a matrix (as opposed to a cell-array).
+<p>
+Suppose, as in the <a href="#mixexp">mixture of experts example</a>,
+that we have 3 nodes in the graph: X(1) is the observed input, X(3) is
+the observed output, and X(2) is a hidden (gating) node. We can
+create the dataset as follows.
+<pre>
+data = load('dat.txt');
+ncases = size(data, 1);
+cases = cell(3, ncases);
+cases([1 3], :) = num2cell(data');
+</pre>
+Notice how we transposed the data, to convert rows into columns.
+Also, cases{2,m} = [] for all m, since X(2) is always hidden.
+
+
+<h2><a name="mle_complete">Maximum likelihood parameter estimation from complete data</h2>
+
+As an example, let's generate some data from the sprinkler network, randomize the parameters,
+and then try to recover the original model.
+First we create some training data using forwards sampling.
+<pre>
+samples = cell(N, nsamples);
+for i=1:nsamples
+  samples(:,i) = sample_bnet(bnet);
+end
+</pre>
+samples{j,i} contains the value of the j'th node in case i.
+sample_bnet returns a cell array because, in general, each node might
+be a vector of different length.
+In this case, all nodes are discrete (and hence scalars), so we
+could have used a regular array instead (which can be quicker):
+<pre>
+data = cell2num(samples);
+</pre
+So now data(j,i) = samples{j,i}.
+<p>
+Now we create a network with random parameters.
+(The initial values of bnet2 don't matter in this case, since we can find the
+globally optimal MLE independent of where we start.)
+<pre>
+% Make a tabula rasa
+bnet2 = mk_bnet(dag, node_sizes);
+seed = 0;
+rand('state', seed);
+bnet2.CPD{C} = tabular_CPD(bnet2, C);
+bnet2.CPD{R} = tabular_CPD(bnet2, R);
+bnet2.CPD{S} = tabular_CPD(bnet2, S);
+bnet2.CPD{W} = tabular_CPD(bnet2, W);
+</pre>
+Finally, we find the maximum likelihood estimates of the parameters.
+<pre>
+bnet3 = learn_params(bnet2, samples);
+</pre>
+To view the learned parameters, we use a little Matlab hackery.
+<pre>
+CPT3 = cell(1,N);
+for i=1:N
+  s=struct(bnet3.CPD{i});  % violate object privacy
+  CPT3{i}=s.CPT;
+end
+</pre>
+Here are the parameters learned for node 4.
+<pre>
+dispcpt(CPT3{4})
+1 1 : 1.0000 0.0000 
+2 1 : 0.2000 0.8000 
+1 2 : 0.2273 0.7727 
+2 2 : 0.0000 1.0000 
+</pre>
+So we see that the learned parameters are fairly close to the "true"
+ones, which we display below.
+<pre>
+dispcpt(CPT{4})
+1 1 : 1.0000 0.0000 
+2 1 : 0.1000 0.9000 
+1 2 : 0.1000 0.9000 
+2 2 : 0.0100 0.9900 
+</pre>
+We can get better results by using a larger training set, or using
+informative priors (see <a href="#prior">below</a>).
+
+
+
+<h2><a name="prior">Parameter priors</h2>
+
+Currently, only tabular CPDs can have priors on their parameters.
+The conjugate prior for a multinomial is the Dirichlet.
+(For binary random variables, the multinomial is the same as the
+Bernoulli, and the Dirichlet is the same as the Beta.)
+<p>
+The Dirichlet has a simple interpretation in terms of pseudo counts.
+If we let N_ijk = the num. times X_i=k and Pa_i=j occurs in the
+training set, where Pa_i are the parents of X_i,
+then the maximum likelihood (ML) estimate is
+T_ijk = N_ijk  / N_ij (where N_ij = sum_k' N_ijk'), which will be 0 if N_ijk=0.
+To prevent us from declaring that (X_i=k, Pa_i=j) is impossible just because this
+event was not seen in the training set,
+we can pretend we saw value k of X_i, for each value j of Pa_i some number (alpha_ijk)
+of times in the past.
+The MAP (maximum a posterior) estimate is then
+<pre>
+T_ijk = (N_ijk + alpha_ijk) / (N_ij + alpha_ij)
+</pre>
+and is never 0 if all alpha_ijk > 0.
+For example, consider the network A->B, where A is binary and B has 3
+values.
+A uniform prior for B has the form
+<pre>
+    B=1 B=2 B=3
+A=1 1   1   1
+A=2 1   1   1
+</pre>
+which can be created using
+<pre>
+tabular_CPD(bnet, i, 'prior_type', 'dirichlet', 'dirichlet_type', 'unif');
+</pre>
+This prior does not satisfy the likelihood equivalence principle,
+which says that <a href="#markov_equiv">Markov equivalent</a> models
+should have the same marginal likelihood.
+A prior that does satisfy this principle is shown below.
+Heckerman (1995) calls this the
+BDeu prior (likelihood equivalent uniform Bayesian Dirichlet).
+<pre>
+    B=1 B=2 B=3
+A=1 1/6 1/6 1/6
+A=2 1/6 1/6 1/6
+</pre>
+where we put N/(q*r) in each bin; N is the equivalent sample size,
+r=|A|, q = |B|.
+This can be created as follows
+<pre>
+tabular_CPD(bnet, i, 'prior_type', 'dirichlet', 'dirichlet_type', 'BDeu');
+</pre>
+Here, 1 is the equivalent sample size, and is the strength of the
+prior.
+You can change this using
+<pre>
+tabular_CPD(bnet, i, 'prior_type', 'dirichlet', 'dirichlet_type', ...
+   'BDeu', 'dirichlet_weight', 10);
+</pre>
+<!--where counts is an array of pseudo-counts of the same size as the
+CPT.-->
+<!--
+<p>
+When you specify a prior, you should set row i of the CPT to the
+normalized version of row i of the pseudo-count matrix, i.e., to the
+expected values of the parameters. This will ensure that computing the
+marginal likelihood sequentially (see <a
+href="#bayes_learn">below</a>) and in batch form gives the same
+results.
+To do this, proceed as follows.
+<pre>
+tabular_CPD(bnet, i, 'prior', counts, 'CPT', mk_stochastic(counts));
+</pre>
+For a non-informative prior, you can just write
+<pre>
+tabular_CPD(bnet, i, 'prior', 'unif', 'CPT', 'unif');
+</pre>
+-->
+
+
+<h2><a name="bayes_learn">(Sequential) Bayesian parameter updating from complete data</h2>
+
+If we use conjugate priors and have fully observed data, we can
+compute the posterior over the parameters in batch form as follows.
+<pre>
+cases = sample_bnet(bnet, nsamples);
+bnet = bayes_update_params(bnet, cases);  
+LL = log_marg_lik_complete(bnet, cases);   
+</pre>
+bnet.CPD{i}.prior contains the new Dirichlet pseudocounts,
+and bnet.CPD{i}.CPT is set to the mean of the posterior (the
+normalized counts).
+(Hence if the initial pseudo counts are 0,
+<tt>bayes_update_params</tt> and <tt>learn_params</tt> will give the
+same result.)
+
+
+
+
+<p>
+We can compute the same result sequentially (on-line) as follows.
+<pre>
+LL = 0;
+for m=1:nsamples
+  LL = LL + log_marg_lik_complete(bnet, cases(:,m));
+  bnet = bayes_update_params(bnet, cases(:,m));
+end
+</pre>
+
+The file <tt>BNT/examples/static/StructLearn/model_select1</tt> has an example of
+sequential model selection which uses the same idea.
+We generate data from the model A->B
+and compute the posterior prob of all 3 dags on 2 nodes:
+ (1) A B,  (2) A <- B , (3) A -> B
+Models 2 and 3 are <a href="#markov_equiv">Markov equivalent</a>, and therefore indistinguishable from 
+observational data alone, so we expect their posteriors to be the same
+(assuming a prior which satisfies likelihood equivalence).
+If we use random parameters, the "true" model only gets a higher posterior after 2000 trials!
+However, if we make B a noisy NOT gate, the true model "wins" after 12
+trials, as shown below (red = model 1, blue/green (superimposed)
+represents models 2/3).
+<p>
+<img src="Figures/model_select.png">
+<p>
+The use of marginal likelihood for model selection is discussed in
+greater detail in the 
+section on <a href="structure_learning">structure learning</a>.
+
+
+
+
+<h2><a name="em">Maximum likelihood parameter estimation with missing values</h2>
+
+Now we consider learning when some values are not observed.
+Let us randomly hide half the values generated from the water
+sprinkler example.
+<pre>
+samples2 = samples;
+hide = rand(N, nsamples) > 0.5;
+[I,J]=find(hide);
+for k=1:length(I)
+  samples2{I(k), J(k)} = [];
+end
+</pre>
+samples2{i,l} is the value of node i in training case l, or [] if unobserved.
+<p>
+Now we will compute the MLEs using the EM algorithm.
+We need to use an inference algorithm to compute the expected
+sufficient statistics in the E step; the M (maximization) step is as
+above.
+<pre>
+engine2 = jtree_inf_engine(bnet2);
+max_iter = 10;
+[bnet4, LLtrace] = learn_params_em(engine2, samples2, max_iter);
+</pre>
+LLtrace(i) is the log-likelihood at iteration i. We can plot this as
+follows:
+<pre>
+plot(LLtrace, 'x-')
+</pre>
+Let's display the results after 10 iterations of EM.
+<pre>
+celldisp(CPT4)
+CPT4{1} =
+    0.6616
+    0.3384
+CPT4{2} =
+    0.6510    0.3490
+    0.8751    0.1249
+CPT4{3} =
+    0.8366    0.1634
+    0.0197    0.9803
+CPT4{4} =
+(:,:,1) =
+    0.8276    0.0546
+    0.5452    0.1658
+(:,:,2) =
+    0.1724    0.9454
+    0.4548    0.8342
+</pre>
+We can get improved performance by using one or more of the following
+methods:
+<ul>
+<li> Increasing the size of the training set.
+<li> Decreasing the amount of hidden data.
+<li> Running EM for longer.
+<li> Using informative priors.
+<li> Initialising EM from multiple starting points.
+</ul>
+
+<h2><a name="gaussianNumerical">Numerical problems when fitting
+Gaussians using EM</h2>
+
+When fitting a <a href="#gaussian">Gaussian CPD</a> using EM, you
+might encounter some numerical 
+problems. See <a
+href="http://www.ai.mit.edu/~murphyk/Software/HMM/hmm.html#loglikpos">here</a>
+for a discussion of this in the context of HMMs.
+<!--
+(Note: BNT does not currently support spherical covariances, although it
+would be easy to add, since  KPMstats/clg_Mstep supports this option;
+you would just need to modify gaussian_CPD/update_ess to accumulate
+weighted inner products.)
+-->
+
+
+<h2><a name="tying">Parameter tying</h2>
+
+In networks with repeated structure (e.g., chains and grids), it is
+common to assume that the parameters are the same at every node. This
+is called parameter tying, and reduces the amount of data needed for
+learning.
+<p>
+When we have tied parameters, there is no longer a one-to-one
+correspondence between nodes and CPDs.
+Rather, each CPD species the parameters for a whole equivalence class
+of nodes.
+It is easiest to see this by example.
+Consider the following <a href="usage_dbn.html#hmm">hidden Markov
+model (HMM)</a>
+<p>
+<img src="Figures/hmm3.gif">
+<p>
+<!--
+We can create this graph structure, assuming we have T time-slices,
+as follows.
+(We number the nodes as shown in the figure, but we could equally well
+number the hidden nodes 1:T, and the observed nodes T+1:2T.)
+<pre>
+N = 2*T;
+dag = zeros(N);
+hnodes = 1:2:2*T;
+for i=1:T-1
+  dag(hnodes(i), hnodes(i+1))=1;
+end
+onodes = 2:2:2*T;
+for i=1:T
+  dag(hnodes(i), onodes(i)) = 1;
+end
+</pre>
+<p>
+The hidden nodes are always discrete, and have Q possible values each,
+but the observed nodes can be discrete or continuous, and have O possible values/length.
+<pre>
+if cts_obs
+  dnodes = hnodes;
+else
+  dnodes = 1:N;
+end
+ns = ones(1,N);
+ns(hnodes) = Q;
+ns(onodes) = O;
+</pre>
+-->
+When HMMs are used for semi-infinite processes like speech recognition,
+we assume the transition matrix
+P(H(t+1)|H(t)) is the same for all t; this is called a time-invariant
+or homogenous Markov chain.
+Hence hidden nodes 2, 3, ..., T
+are all in the same equivalence class, say class Hclass.
+Similarly, the observation matrix P(O(t)|H(t)) is assumed to be the
+same for all t, so the observed nodes are all in the same equivalence
+class, say class Oclass.
+Finally, the prior term P(H(1)) is in a class all by itself, say class
+H1class.
+This is illustrated below, where we explicitly represent the
+parameters as random variables (dotted nodes).
+<p>
+<img src="Figures/hmm4_params.gif">
+<p>
+In BNT, we cannot represent parameters as random variables (nodes).
+Instead, we "hide" the
+parameters inside one CPD for each equivalence class,
+and then specify that the other CPDs should share these parameters, as
+follows.
+<pre>
+hnodes = 1:2:2*T;
+onodes = 2:2:2*T;
+H1class = 1; Hclass = 2; Oclass = 3;
+eclass = ones(1,N);
+eclass(hnodes(2:end)) = Hclass;
+eclass(hnodes(1)) = H1class;
+eclass(onodes) = Oclass;
+% create dag and ns in the usual way
+bnet = mk_bnet(dag, ns, 'discrete', dnodes, 'equiv_class', eclass);
+</pre>
+Finally, we define the parameters for each equivalence class:
+<pre>
+bnet.CPD{H1class} = tabular_CPD(bnet, hnodes(1)); % prior
+bnet.CPD{Hclass} = tabular_CPD(bnet, hnodes(2)); % transition matrix
+if cts_obs
+  bnet.CPD{Oclass} = gaussian_CPD(bnet, onodes(1));
+else
+  bnet.CPD{Oclass} = tabular_CPD(bnet, onodes(1));
+end
+</pre>
+In general, if bnet.CPD{e} = xxx_CPD(bnet, j), then j should be a
+member of e's equivalence class; that is, it is not always the case
+that e == j. You can use bnet.rep_of_eclass(e) to return the
+representative of equivalence class e.
+BNT will look up the parents of j to determine the size
+of the CPT to use. It assumes that this is the same for all members of
+the equivalence class.
+Click <a href="http://www.cs.berkeley.edu/~murphyk/Bayes/param_tieing.html">here</a> for
+a more complex example of parameter tying.
+<p>
+Note:
+Normally one would define an HMM as a
+<a href = "usage_dbn.html">Dynamic Bayes Net</a>
+(see the function BNT/examples/dynamic/mk_chmm.m).
+However, one can define an HMM as a static BN using the function
+BNT/examples/static/Models/mk_hmm_bnet.m.
+
+
+
+<h1><a name="structure_learning">Structure learning</h1>
+
+Update (9/29/03):
+Phillipe LeRay is developing some additional structure learning code
+on top of BNT. Click <a
+href="http://bnt.insa-rouen.fr/ajouts.html">here</a>
+for details.
+
+<p>
+
+There are two very different approaches to structure learning:
+constraint-based and search-and-score.
+In the <a href="#constraint">constraint-based approach</a>,
+we start with a fully connected graph, and remove edges if certain
+conditional independencies are measured in the data.
+This has the disadvantage that repeated independence tests lose
+statistical power.
+<p>
+In the more popular search-and-score approach,
+we perform a search through the space of possible DAGs, and either
+return the best one found (a point estimate), or return a sample of the
+models found (an approximation to the Bayesian posterior).
+<p>
+Unfortunately, the number of DAGs as a function of the number of
+nodes, G(n), is super-exponential in n.
+A closed form formula for G(n) is not known, but the first few values
+are shown below (from Cooper, 1999).
+
+<table>
+<tr>  <th>n</th>    <th align=left>G(n)</th> </tr>
+<tr>  <td>1</td>    <td>1</td> </tr>
+<tr>  <td>2</td>    <td>3</td> </tr>
+<tr>  <td>3</td>    <td>25</td> </tr>
+<tr>   <td>4</td>    <td>543</td> </tr> 
+<tr>   <td>5</td>    <td>29,281</td> </tr>
+<tr>   <td>6</td>    <td>3,781,503</td> </tr>
+<tr>   <td>7</td>    <td>1.1 x 10^9</td> </tr>
+<tr>   <td>8</td>    <td>7.8 x 10^11</td> </tr>
+<tr>   <td>9</td>    <td>1.2 x 10^15</td> </tr>
+<tr>   <td>10</td>    <td>4.2 x 10^18</td> </tr>
+</table>
+
+Since the number of DAGs is super-exponential in the number of nodes,
+we cannot exhaustively search the space, so we either use a local
+search algorithm (e.g., greedy hill climbining, perhaps with multiple
+restarts) or a global search algorithm (e.g., Markov Chain Monte
+Carlo). 
+<p>
+If we know a total ordering on the nodes,
+finding the best structure amounts to picking the best set of parents
+for each node independently.
+This is what the K2 algorithm does.
+If the ordering is unknown, we can search over orderings,
+which is more efficient than searching over DAGs (Koller and Friedman, 2000).
+<p>
+In addition to the search procedure, we must specify the scoring
+function. There are two popular choices. The Bayesian score integrates
+out the parameters, i.e., it is the marginal likelihood of the model.
+The BIC (Bayesian Information Criterion) is defined as
+log P(D|theta_hat) - 0.5*d*log(N), where D is the data, theta_hat is
+the ML estimate of the parameters, d is the number of parameters, and
+N is the number of data cases.
+The BIC method has the advantage of not requiring a prior.
+<p>
+BIC can be derived as a large sample
+approximation to the marginal likelihood.
+(It is also equal to the Minimum Description Length of a model.)
+However, in practice, the sample size does not need to be very large
+for the approximation to be good.
+For example, in the figure below, we plot the ratio between the log marginal likelihood
+and the BIC score against data-set size; we see that the ratio rapidly
+approaches 1, especially for non-informative priors. 
+(This plot was generated by the file BNT/examples/static/bic1.m. It
+uses the water sprinkler BN with BDeu Dirichlet priors with different
+equivalent sample sizes.)
+
+<p>
+<center>
+<IMG SRC="Figures/bic.png">
+</center>
+<p>
+
+<p>
+As with parameter learning, handling missing data/ hidden variables is
+much harder than the fully observed case.
+The structure learning routines in BNT can therefore be classified into 4
+types, analogously to the parameter learning case.
+<p>
+
+<TABLE BORDER>
+<tr>
+ <TH></TH>
+ <th>Full obs</th>
+ <th>Partial obs</th>
+</tr>
+<tr>
+ <th>Point</th>
+ <td><tt>learn_struct_K2</tt>  <br>
+<!--     <tt>learn_struct_hill_climb</tt></td> -->
+ <td><tt>not yet supported</tt></td>
+</tr>
+<tr>
+ <th>Bayes</th>
+ <td><tt>learn_struct_mcmc</tt></td>
+ <td>not yet supported</td>
+</tr>
+</table>
+
+
+<h2><a name="markov_equiv">Markov equivalence</h2>
+
+If two DAGs encode the same conditional independencies, they are
+called Markov equivalent. The set of all DAGs can be paritioned into
+Markov equivalence classes. Graphs within the same class can 
+have
+the direction of some of their arcs reversed without changing any of
+the CI relationships.
+Each class can be represented by a PDAG
+(partially directed acyclic graph) called an essential graph or
+pattern. This specifies which edges must be oriented in a certain
+direction, and which may be reversed.
+
+<p>
+When learning graph structure from observational data,
+the best one can hope to do is to identify the model up to Markov
+equivalence. To distinguish amongst graphs within the same equivalence
+class, one needs interventional data: see the discussion on <a
+href="#active">active learning</a> below.
+
+
+
+<h2><a name="enumerate">Exhaustive search</h2>
+
+The brute-force approach to structure learning is to enumerate all
+possible DAGs, and score each one. This provides a "gold standard"
+with which to compare other algorithms. We can do this as follows.
+<pre>
+dags = mk_all_dags(N);
+score = score_dags(data, ns, dags);
+</pre>
+where data(i,m) is the value of node i in case m,
+and ns(i) is the size of node i.
+If the DAGs have a lot of families in common, we can cache the sufficient statistics,
+making this potentially more efficient than scoring the DAGs one at a time.
+(Caching is not currently implemented, however.)
+<p>
+By default, we use the Bayesian scoring metric, and assume CPDs are
+represented by tables with BDeu(1) priors.
+We can override these defaults as follows.
+If we want to use uniform priors, we can say
+<pre>
+params = cell(1,N);
+for i=1:N
+  params{i} = {'prior', 'unif'};
+end
+score = score_dags(data, ns, dags, 'params', params);
+</pre>
+params{i} is a cell-array, containing optional arguments that are
+passed to the constructor for CPD i.
+<p>
+Now suppose we want to use different node types, e.g., 
+Suppose nodes 1 and 2 are Gaussian, and nodes 3 and 4 softmax (both
+these CPDs can support discrete and continuous parents, which is
+necessary since all other nodes will be considered as parents).
+The Bayesian scoring metric currently only works for tabular CPDs, so
+we will use BIC:
+<pre>
+score = score_dags(data, ns, dags, 'discrete', [3 4], 'params', [], 
+    'type', {'gaussian', 'gaussian', 'softmax', softmax'}, 'scoring_fn', 'bic')
+</pre>
+In practice, one can't enumerate all possible DAGs for N > 5,
+but one can evaluate any reasonably-sized set of hypotheses in this
+way (e.g., nearest neighbors of your current best guess).
+Think of this as "computer assisted model refinement" as opposed to de
+novo learning.
+
+
+<h2><a name="K2">K2</h2>
+
+The K2 algorithm (Cooper and Herskovits, 1992) is a greedy search algorithm that works as follows.
+Initially each node has no parents. It then adds incrementally that parent whose addition most
+increases the score of the resulting structure. When the addition of no single
+parent can increase the score, it stops adding parents to the node.
+Since we are using a fixed ordering, we do not need to check for
+cycles, and can choose the parents for each node independently.
+<p>
+The original paper used the Bayesian scoring
+metric with tabular CPDs and Dirichlet priors.
+BNT generalizes this to allow any kind of CPD, and either the Bayesian
+scoring metric or BIC, as in the example <a href="#enumerate">above</a>.
+In addition, you can specify
+an optional upper bound on the number of parents for each node.
+The file BNT/examples/static/k2demo1.m gives an example of how to use K2.
+We use the water sprinkler network and sample 100 cases from it as before.
+Then we see how much data it takes to recover the generating structure:
+<pre>
+order = [C S R W];
+max_fan_in = 2;
+sz = 5:5:100;
+for i=1:length(sz)
+  dag2 = learn_struct_K2(data(:,1:sz(i)), node_sizes, order, 'max_fan_in', max_fan_in);
+  correct(i) = isequal(dag, dag2);
+end
+</pre>
+Here are the results.
+<pre>
+correct =
+  Columns 1 through 12 
+     0     0     0     0     0     0     0     1     0     1     1     1
+  Columns 13 through 20 
+     1     1     1     1     1     1     1     1
+</pre>
+So we see it takes about sz(10)=50 cases. (BIC behaves similarly,
+showing that the prior doesn't matter too much.)
+In general, we cannot hope to recover the "true" generating structure,
+only one that is in its <a href="#markov_equiv">Markov equivalence
+class</a>.
+
+
+<h2><a name="hill_climb">Hill-climbing</h2>
+
+Hill-climbing starts at a specific point in space,
+considers all nearest neighbors, and moves to the neighbor
+that has the highest score; if no neighbors have higher
+score than the current point (i.e., we have reached a local maximum),
+the algorithm stops. One can then restart in another part of the space.
+<p>
+A common definition of "neighbor" is all graphs that can be
+generated from the current graph by adding, deleting or reversing a
+single arc, subject to the acyclicity constraint.
+Other neighborhoods are possible: see
+<a href="http://research.microsoft.com/~dmax/publications/jmlr02.pdf">
+Optimal Structure Identification with Greedy Search</a>, Max
+Chickering, JMLR 2002.
+
+<!--
+Note: This algorithm is currently (Feb '02) being implemented by Qian
+Diao.
+-->
+
+
+<h2><a name="mcmc">MCMC</h2>
+
+We can use a Markov Chain Monte Carlo (MCMC) algorithm called
+Metropolis-Hastings (MH) to search the space of all 
+DAGs.
+The standard proposal distribution is to consider moving to all
+nearest neighbors in the sense defined <a href="#hill_climb">above</a>.
+<p>
+The function can be called
+as in the following example.
+<pre>
+[sampled_graphs, accept_ratio] = learn_struct_mcmc(data, ns, 'nsamples', 100, 'burnin', 10);
+</pre>
+We can convert our set of sampled graphs to a histogram
+(empirical posterior over all the DAGs) thus
+<pre>
+all_dags = mk_all_dags(N);
+mcmc_post = mcmc_sample_to_hist(sampled_graphs, all_dags);
+</pre>
+To see how well this performs, let us compute the exact posterior exhaustively.
+<p>
+<pre>
+score = score_dags(data, ns, all_dags);
+post = normalise(exp(score)); % assuming uniform structural prior
+</pre>
+We plot the results below.
+(The data set was 100 samples drawn from a random 4 node bnet; see the
+file BNT/examples/static/mcmc1.)
+<pre>
+subplot(2,1,1)
+bar(post)
+subplot(2,1,2)
+bar(mcmc_post)
+</pre>
+<img src="Figures/mcmc_post.jpg" width="800" height="500">
+<p>
+We can also plot the acceptance ratio versus number of MCMC steps,
+as a crude convergence diagnostic.
+<pre>
+clf
+plot(accept_ratio)
+</pre>
+<img src="Figures/mcmc_accept.jpg" width="800" height="300">
+<p>
+Better convergence diagnostics can be found
+<a href="<a href="http://www.lce.hut.fi/~ave/code/mcmcdiag/">here</a>
+<p>
+Even though the number of samples needed by MCMC is theoretically
+polynomial (not exponential) in the dimensionality of the search space, in practice it has been
+found that MCMC does not converge in reasonable time for graphs with
+more than about 10 nodes.
+<p>
+<a href="http://www.bioss.sari.ac.uk/~dirk/software/DBmcmc/">
+Dirk Husmeier has extended MCMC model selection to DBNs</a>.
+
+
+<h2><a name="active">Active structure learning</h2>
+
+As was mentioned <a href="#markov_equiv">above</a>,
+one can only learn a DAG up to Markov equivalence, even given infinite data.
+If one is interested in learning the structure of a causal network,
+one needs interventional data.
+(By "intervention" we mean forcing a node to take on a specific value,
+thereby effectively severing its incoming arcs.)
+<p>
+Most of the scoring functions accept an optional argument
+that specifies whether a node was observed to have a certain value, or
+was forced to have that value: we set clamped(i,m)=1 if node i was
+forced in training case m. e.g., see the file
+BNT/examples/static/cooper_yoo.
+<p>
+An interesting question is to decide which interventions to perform
+(c.f., design of experiments). For details, see the following tech
+report
+<ul>
+<li> <a href = "../../Papers/alearn.ps.gz">
+Active learning of causal Bayes net structure</a>, Kevin Murphy, March
+2001.
+</ul>
+
+
+<h2><a name="struct_em">Structural EM</h2>
+
+Computing the Bayesian score when there is partial observability is
+computationally challenging, because the parameter posterior becomes
+multimodal (the hidden nodes induce a mixture distribution).
+One therefore needs to use approximations such as BIC.
+Unfortunately, search algorithms are still expensive, because we need
+to run EM at each step to compute the MLE, which is needed to compute
+the score of each model. An alternative approach is
+to do the local search steps inside of the M step of EM, which is more
+efficient since the data has been "filled in" - this is
+called the structural EM algorithm (Friedman 1997), and provably
+converges to a local maximum of the BIC score.
+<p> 
+Wei Hu has implemented SEM for discrete nodes.
+You can download his package from
+<a href="../SEM.zip">here</a>.
+Please address all questions about this code to
+wei.hu@intel.com.
+See also <a href="#phl">Phl's implementation of SEM</a>.
+
+<!--
+<h2><a name="reveal">REVEAL algorithm</h2>
+
+A simple way to learn the structure of a fully observed, discrete,
+factored DBN from a time series is described <a
+href="usage_dbn.html#struct_learn">here</a>.
+-->
+
+
+<h2><a name="graphdraw">Visualizing the graph</h2>
+
+You can visualize an arbitrary graph (such as one learned using the
+structure learning routines) with Matlab code contributed by
+<a href="http://www.mbfys.kun.nl/~cemgil/matlab/layout.html">Ali
+Taylan Cemgil</a>
+from the University of Nijmegen.
+For static BNs, call it as follows:
+<pre>
+draw_graph(bnet.dag);
+</pre>
+For example, this is the output produced on a
+<a href="#qmr">random QMR-like model</a>:
+<p>
+<img src="Figures/qmr.rnd.jpg">
+<p>
+If you install the excellent <a
+href="http://www.research.att.com/sw/tools/graphviz">graphhviz</a>, an
+open-source graph visualization package from AT&T,
+you can create a much better visualization as follows
+<pre>
+graph_to_dot(bnet.dag)
+</pre>
+This works by converting the adjacency matrix to a file suitable
+for input to graphviz (using the dot format),
+then converting the output of graphviz to postscript, and displaying the results using
+ghostview.
+You can do each of these steps separately for more control, as shown
+below.
+<pre>
+graph_to_dot(bnet.dag, 'filename', 'foo.dot');
+dot -Tps foo.dot -o foo.ps
+ghostview foo.ps &
+</pre>
+
+<h2><a name = "constraint">Constraint-based methods</h2>
+
+The IC algorithm (Pearl and Verma, 1991),
+and the faster, but otherwise equivalent, PC algorithm (Spirtes, Glymour, and Scheines 1993),
+computes many conditional independence tests,
+and combines these constraints into a
+PDAG to represent the whole
+<a href="#markov_equiv">Markov equivalence class</a>.
+<p>
+IC*/FCI extend IC/PC to handle latent variables: see <a href="#ic_star">below</a>.
+(IC stands for inductive causation; PC stands for Peter and Clark,
+the first names of Spirtes and Glymour; FCI stands for fast causal
+inference.
+What we, following Pearl (2000), call IC* was called
+IC in the original Pearl and Verma paper.)
+For details, see
+<ul>
+<li>
+<a href="http://hss.cmu.edu/html/departments/philosophy/TETRAD/tetrad.html">Causation,
+Prediction, and Search</a>, Spirtes, Glymour and 
+Scheines (SGS), 2001 (2nd edition), MIT Press.
+<li> 
+<a href="http://bayes.cs.ucla.edu/BOOK-2K/index.html">Causality: Models, Reasoning and Inference</a>, J. Pearl, 
+2000, Cambridge University Press.
+</ul>
+
+<p>
+
+The PC algorithm takes as arguments a function f, the number of nodes N,
+the maximum fan in K, and additional arguments A which are passed to f.
+The function f(X,Y,S,A) returns 1 if X is conditionally independent of Y given S, and 0
+otherwise.
+For example, suppose we cheat by
+passing in a CI "oracle" which has access to the true DAG; the oracle
+tests for d-separation in this DAG, i.e.,
+f(X,Y,S) calls dsep(X,Y,S,dag). We can to this as follows.
+<pre>
+pdag = learn_struct_pdag_pc('dsep', N, max_fan_in, dag);
+</pre>
+pdag(i,j) = -1 if there is definitely an i->j arc,
+and pdag(i,j) = 1 if there is either an i->j or and i<-j arc.
+<p>
+Applied to the sprinkler network, this returns
+<pre>
+pdag =
+     0     1     1     0
+     1     0     0    -1
+     1     0     0    -1
+     0     0     0     0
+</pre>
+So as expected, we see that the V-structure at the W node is uniquely identified,
+but the other arcs have ambiguous orientation.
+<p>
+We now give an example from p141 (1st edn) / p103 (2nd end) of the SGS
+book.
+This example concerns the female orgasm.
+We are given a correlation matrix C between 7 measured factors (such
+as subjective experiences of coital and masturbatory experiences),
+derived from 281 samples, and want to learn a causal model of the
+data. We will not discuss the merits of this type of work here, but
+merely show how to reproduce the results in the SGS book.
+Their program,
+<a href="http://hss.cmu.edu/html/departments/philosophy/TETRAD/tetrad.html">Tetrad</a>,
+makes use of the Fisher Z-test for conditional
+independence, so we do the same:
+<pre>
+max_fan_in = 4;
+nsamples = 281;
+alpha = 0.05;
+pdag = learn_struct_pdag_pc('cond_indep_fisher_z', n, max_fan_in, C, nsamples, alpha);
+</pre>
+In this case, the CI test is
+<pre>
+f(X,Y,S) = cond_indep_fisher_z(X,Y,S,  C,nsamples,alpha)
+</pre>
+The results match those of Fig 12a of SGS apart from two edge
+differences; presumably this is due to rounding error (although it
+could be a bug, either in BNT or in Tetrad).
+This example can be found in the file BNT/examples/static/pc2.m.
+
+<p>
+
+The IC* algorithm (Pearl and Verma, 1991),
+and the faster FCI algorithm (Spirtes, Glymour, and Scheines 1993),
+are like the IC/PC algorithm, except that they can detect the presence
+of latent variables.
+See the file <tt>learn_struct_pdag_ic_star</tt> written by Tamar
+Kushnir. The output is a matrix P, defined as follows
+(see Pearl (2000), p52 for details):
+<pre>
+% P(i,j) = -1 if there is either a latent variable L such that i <-L->j OR there is a directed edge from i->j.
+% P(i,j) = -2 if there is a marked directed i-*>j edge.
+% P(i,j) = P(j,i) = 1 if there is and undirected edge i--j
+% P(i,j) = P(j,i) = 2 if there is a latent variable L such that i<-L->j.
+</pre>
+
+
+<h2><a name="phl">Philippe Leray's structure learning package</h2>
+
+Philippe Leray has written a 
+<a href="http://bnt.insa-rouen.fr/ajouts.html">
+structure learning package</a> that uses BNT.
+
+It currently (Juen 2003) has the following features:
+<ul>
+<li>PC with Chi2 statistical test 
+<li>             MWST : Maximum weighted Spanning Tree 
+<li>             Hill Climbing 
+<li>             Greedy Search 
+<li>             Structural EM 
+<li>             hist_ic : optimal Histogram based on IC information criterion 
+<li>             cpdag_to_dag 
+<li>             dag_to_cpdag 
+<li>             ... 
+</ul>
+
+
+</a>
+
+
+<!--
+<h2><a name="read_learning">Further reading on learning</h2>
+
+I recommend the following tutorials for more details on learning.
+<ul>
+<li> <a
+href="http://www.cs.berkeley.edu/~murphyk/Papers/intel.ps.gz">My short
+tutorial</a> on graphical models, which contains an overview of learning.
+
+<li> 
+<A HREF="ftp://ftp.research.microsoft.com/pub/tr/TR-95-06.PS">
+A tutorial on learning with Bayesian networks</a>, D. Heckerman,
+Microsoft Research Tech Report, 1995.
+
+<li> <A HREF="http://www-cad.eecs.berkeley.edu/~wray/Mirror/lwgmja">
+Operations for Learning with Graphical Models</a>,
+W. L. Buntine, JAIR'94, 159--225.
+</ul>
+<p>
+-->
+
+
+
+
+
+<h1><a name="engines">Inference engines</h1>
+
+Up until now, we have used the junction tree algorithm for inference.
+However, sometimes this is too slow, or not even applicable.
+In general, there are many inference algorithms each of which make
+different tradeoffs between speed, accuracy, complexity and
+generality. Furthermore, there might be many implementations of the
+same algorithm; for instance, a general purpose, readable version,
+and a highly-optimized, specialized one.
+To cope with this variety, we treat each inference algorithm as an
+object, which we call an inference engine.
+
+<p>
+An inference engine is an object that contains a bnet and supports the
+'enter_evidence' and 'marginal_nodes' methods.  The engine constructor
+takes the bnet as argument and may do some model-specific processing.
+When 'enter_evidence' is called, the engine may do some
+evidence-specific processing.  Finally, when 'marginal_nodes' is
+called, the engine may do some query-specific processing.
+
+<p>
+The amount of work done when each stage is specified -- structure,
+parameters, evidence, and query -- depends on the engine.  The cost of
+work done early in this sequence can be amortized.  On the other hand,
+one can make better optimizations if one waits until later in the
+sequence.
+For example, the parameters might imply
+conditional indpendencies that are not evident in the graph structure,
+but can nevertheless be exploited; the evidence indicates which nodes
+are observed and hence can effectively be disconnected from the
+graph; and the query might indicate that large parts of the network
+are d-separated from the query nodes.  (Since it is not the actual
+<em>values</em> of the evidence that matters, just which nodes are observed,
+many engines allow you to specify which nodes will be observed when they are constructed,
+i.e., before calling 'enter_evidence'. Some engines can still cope if
+the actual pattern of evidence is different, e.g., if there is missing
+data.)
+<p>
+
+Although being maximally lazy (i.e., only doing work when a query is
+issued) may seem desirable,
+this is not always the most efficient.
+For example,
+when learning using EM, we need to call marginal_nodes N times, where N is the
+number of nodes. <a href="varelim">Variable elimination</a> would end
+up repeating a lot of work
+each time marginal_nodes is called, making it inefficient for
+learning. The junction tree algorithm, by contrast, uses dynamic
+programming to avoid this redundant computation --- it calculates all
+marginals in two passes during 'enter_evidence', so calling
+'marginal_nodes' takes constant time.
+<p>
+We will discuss some of the inference algorithms implemented in BNT
+below, and finish with a <a href="#engine_summary">summary</a> of all
+of them.
+
+
+
+
+
+
+
+<h2><a name="varelim">Variable elimination</h2>
+
+The variable elimination algorithm, also known as bucket elimination
+or peeling, is one of the simplest inference algorithms.
+The basic idea is to "push sums inside of products"; this is explained
+in more detail
+<a
+href="http://HTTP.CS.Berkeley.EDU/~murphyk/Bayes/bayes.html#infer">here</a>. 
+<p>
+The principle of distributing sums over products can be generalized
+greatly to apply to any commutative semiring.
+This forms the basis of many common algorithms, such as Viterbi
+decoding and the Fast Fourier Transform. For details, see
+
+<ul>
+<li> R. McEliece and S. M. Aji, 2000.
+<!--<a href="http://www.systems.caltech.edu/EE/Faculty/rjm/papers/GDL.ps">-->
+<a href="GDL.pdf">
+The Generalized Distributive Law</a>,
+IEEE Trans. Inform. Theory, vol. 46, no. 2 (March 2000),
+pp. 325--343. 
+
+
+<li>
+F. R. Kschischang, B. J. Frey and H.-A. Loeliger, 2001.
+<a href="http://www.cs.toronto.edu/~frey/papers/fgspa.abs.html">
+Factor graphs and the sum-product algorithm</a>
+IEEE Transactions on Information Theory, February, 2001.
+
+</ul>
+
+<p>
+Choosing an order in which to sum out the variables so as to minimize
+computational cost is known to be NP-hard.
+The implementation of this algorithm in
+<tt>var_elim_inf_engine</tt> makes no attempt to optimize this
+ordering (in contrast, say, to <tt>jtree_inf_engine</tt>, which uses a
+greedy search procedure to find a good ordering).
+<p>
+Note: unlike most algorithms, var_elim does all its computational work
+inside of <tt>marginal_nodes</tt>, not inside of
+<tt>enter_evidence</tt>.
+
+
+
+
+<h2><a name="global">Global inference methods</h2>
+
+The simplest inference algorithm of all is to explicitely construct
+the joint distribution over all the nodes, and then to marginalize it.
+This is implemented in <tt>global_joint_inf_engine</tt>.
+Since the size of the joint is exponential in the
+number of discrete (hidden) nodes, this is not a very practical algorithm.
+It is included merely for pedagogical and debugging purposes.
+<p>
+Three specialized versions of this algorithm have also been implemented,
+corresponding to the cases where all the nodes are discrete (D), all
+are Gaussian (G), and some are discrete and some Gaussian (CG).
+They are called <tt>enumerative_inf_engine</tt>,
+<tt>gaussian_inf_engine</tt>,
+and <tt>cond_gauss_inf_engine</tt> respectively.
+<p>
+Note: unlike most algorithms, these global inference algorithms do all their computational work
+inside of <tt>marginal_nodes</tt>, not inside of
+<tt>enter_evidence</tt>.
+
+
+<h2><a name="quickscore">Quickscore</h2>
+
+The junction tree algorithm is quite slow on the <a href="#qmr">QMR</a> network,
+since the cliques are so big.
+One simple trick we can use is to notice that hidden leaves do not
+affect the posteriors on the roots, and hence do not need to be
+included in the network.
+A second trick is to notice that the negative findings can be
+"absorbed" into the prior:
+see the file
+BNT/examples/static/mk_minimal_qmr_bnet for details.
+<p>
+
+A much more significant speedup is obtained by exploiting special
+properties of the noisy-or node, as done by the quickscore
+algorithm. For details, see
+<ul>
+<li> Heckerman, "A tractable inference algorithm for diagnosing multiple diseases", UAI 89.
+<li> Rish and Dechter, "On the impact of causal independence", UCI
+tech report, 1998.
+</ul>
+
+This has been implemented in BNT as a special-purpose inference
+engine, which can be created and used as follows:
+<pre>
+engine = quickscore_inf_engine(inhibit, leak, prior);
+engine = enter_evidence(engine, pos, neg);
+m = marginal_nodes(engine, i);
+</pre>
+
+
+<h2><a name="belprop">Belief propagation</h2>
+
+Even using quickscore, exact inference takes time that is exponential
+in the number of positive findings.
+Hence for large networks we need to resort to approximate inference techniques.
+See for example
+<ul>
+<li> T. Jaakkola and M. Jordan, "Variational probabilistic inference and the
+QMR-DT network", JAIR 10, 1999.
+
+<li> K. Murphy, Y. Weiss and M. Jordan, "Loopy belief propagation for approximate inference: an empirical study",
+   UAI 99.
+</ul>
+The latter approximation
+entails applying Pearl's belief propagation algorithm to a model even
+if it has loops (hence the name loopy belief propagation).
+Pearl's algorithm, implemented as <tt>pearl_inf_engine</tt>, gives
+exact results when applied to singly-connected graphs
+(a.k.a. polytrees, since
+the underlying undirected topology is a tree, but a node may have
+multiple parents).
+To apply this algorithm to a graph with loops, 
+use <tt>pearl_inf_engine</tt>.
+This can use a centralized or distributed message passing protocol.
+You can use it as in the following example.
+<pre>
+engine = pearl_inf_engine(bnet, 'max_iter', 30);
+engine = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, i);
+</pre>
+We found that this algorithm often converges, and when it does, often
+is very accurate, but it depends on the precise setting of the
+parameter values of the network.
+(See the file BNT/examples/static/qmr1 to repeat the experiment for yourself.)
+Understanding when and why belief propagation converges/ works
+is a topic of ongoing research.
+<p>
+<tt>pearl_inf_engine</tt> can exploit special structure in noisy-or
+and gmux nodes to compute messages efficiently.
+<p>
+<tt>belprop_inf_engine</tt> is like pearl, but uses potentials to
+represent messages. Hence this is slower.
+<p>
+<tt>belprop_fg_inf_engine</tt> is like belprop,
+but is designed for factor graphs.
+
+
+
+<h2><a name="sampling">Sampling</h2>
+
+BNT now (Mar '02) has two sampling (Monte Carlo) inference algorithms:
+<ul>
+<li> <tt>likelihood_weighting_inf_engine</tt> which does importance
+sampling and can handle any node type.
+<li> <tt>gibbs_sampling_inf_engine</tt>, written by Bhaskara Marthi.
+Currently this can only handle tabular CPDs.
+For a much faster and more powerful Gibbs sampling program, see
+<a href="http://www.mrc-bsu.cam.ac.uk/bugs">BUGS</a>.
+</ul>
+Note: To generate samples from a network (which is not the same as inference!),
+use <tt>sample_bnet</tt>.
+
+
+
+<h2><a name="engine_summary">Summary of inference engines</h2>
+
+
+The inference engines differ in many ways. Here are
+some of the major "axes":
+<ul>
+<li> Works for all topologies or makes restrictions? 
+<li> Works for all node types or makes restrictions?
+<li> Exact or approximate inference?
+</ul>
+
+<p>
+In terms of topology, most engines handle any kind of DAG.
+<tt>belprop_fg</tt> does approximate inference on factor graphs (FG), which
+can be used to represent directed, undirected, and mixed (chain)
+graphs.
+(In the future, we plan to support exact inference on chain graphs.)
+<tt>quickscore</tt> only works on QMR-like models.
+<p>
+In terms of node types: algorithms that use potentials can handle
+discrete (D), Gaussian (G) or conditional Gaussian (CG) models.
+Sampling algorithms can essentially handle any kind of node (distribution).
+Other algorithms make more restrictive assumptions in exchange for
+speed.
+<p>
+Finally, most algorithms are designed to give the exact answer.
+The belief propagation algorithms are exact if applied to trees, and
+in some other cases.
+Sampling is considered approximate, even though, in the limit of an
+infinite number of samples, it gives the exact answer.
+
+<p>
+
+Here is a summary of the properties 
+of all the engines in BNT which work on static networks.
+<p>
+<table>
+<table border units = pixels><tr>
+<td align=left width=0>Name
+<td align=left width=0>Exact?
+<td align=left width=0>Node type?
+<td align=left width=0>topology
+<tr>
+<tr>
+<td align=left> belprop
+<td align=left> approx
+<td align=left> D
+<td align=left> DAG
+<tr>
+<td align=left> belprop_fg
+<td align=left> approx
+<td align=left> D
+<td align=left> factor graph
+<tr>
+<td align=left> cond_gauss
+<td align=left> exact
+<td align=left> CG
+<td align=left> DAG
+<tr>
+<td align=left> enumerative
+<td align=left> exact
+<td align=left> D
+<td align=left> DAG
+<tr>
+<td align=left> gaussian
+<td align=left> exact
+<td align=left> G
+<td align=left> DAG
+<tr>
+<td align=left> gibbs
+<td align=left> approx
+<td align=left> D
+<td align=left> DAG
+<tr>
+<td align=left> global_joint
+<td align=left> exact
+<td align=left> D,G,CG
+<td align=left> DAG
+<tr>
+<td align=left> jtree
+<td align=left> exact
+<td align=left> D,G,CG
+<td align=left> DAG
+b<tr>
+<td align=left> likelihood_weighting
+<td align=left> approx
+<td align=left> any
+<td align=left> DAG
+<tr>
+<td align=left> pearl
+<td align=left> approx
+<td align=left> D,G
+<td align=left> DAG
+<tr>
+<td align=left> pearl
+<td align=left> exact
+<td align=left> D,G
+<td align=left> polytree
+<tr>
+<td align=left> quickscore
+<td align=left> exact
+<td align=left> noisy-or
+<td align=left> QMR
+<tr>
+<td align=left> stab_cond_gauss
+<td align=left> exact
+<td align=left> CG
+<td align=left> DAG
+<tr>
+<td align=left> var_elim
+<td align=left> exact
+<td align=left> D,G,CG
+<td align=left> DAG
+</table>
+
+
+
+<h1><a name="influence">Influence diagrams/ decision making</h1>
+
+BNT implements an exact algorithm for solving LIMIDs (limited memory
+influence diagrams), described in
+<ul>
+<li> S. L. Lauritzen and D. Nilsson.
+<a href="http://www.math.auc.dk/~steffen/papers/limids.pdf">
+Representing and solving decision problems with limited
+information</a>
+Management Science, 47, 1238 - 1251. September 2001.
+</ul>
+LIMIDs explicitely show all information arcs, rather than implicitely
+assuming no forgetting. This allows them to model forgetful
+controllers.
+<p>
+See the examples in <tt>BNT/examples/limids</tt> for details.
+
+
+
+
+<h1>DBNs, HMMs, Kalman filters and all that</h1>
+
+Click <a href="usage_dbn.html">here</a> for documentation about how to
+use BNT for dynamical systems and sequence data.
+
+
+</BODY>
diff --git a/sourcecodes/bnt-master/docs/usage_dbn.html b/sourcecodes/bnt-master/docs/usage_dbn.html
new file mode 100644
index 00000000..7582a0cb
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/usage_dbn.html
@@ -0,0 +1,719 @@
+<HEAD>
+<TITLE>How to use BNT for DBNs</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF">
+<!-- white background is better for the pictures and equations -->
+
+Documentation last updated on 7 June 2004
+
+<h1>How to use BNT for DBNs</h1>
+
+<p>
+<ul>
+<li> <a href="#spec">Model specification</a>
+<ul>
+<li> <a href="#hmm">HMMs</a>
+<li> <a href="#lds">Kalman filters</a>
+<li> <a href="#chmm">Coupled HMMs</a>
+<li> <a href="#water">Water network</a>
+<li> <a href="#bat">BAT network</a>
+</ul>
+
+<li> <a href="#inf">Inference</a>
+<ul>
+<li> <a href="#discrete">Discrete hidden nodes</a>
+<li> <a href="#cts">Continuous hidden nodes</a>
+</ul>
+
+<li> <a href="#learn">Learning</a>
+<ul>
+<li> <a href="#param_learn">Parameter learning</a>
+<li> <a href="#struct_learn">Structure learning</a>
+</ul>
+
+</ul>
+
+Note:
+you are recommended to read an introduction
+to DBNs first, such as
+<a href="http://www.ai.mit.edu/~murphyk/Papers/dbnchapter.pdf">
+this book chapter</a>.
+<br>
+You may also want to consider using
+<a href=http://ssli.ee.washington.edu/~bilmes/gmtk/>GMTk</a>, which is
+an excellent C++ package for DBNs.
+
+
+<h1><a name="spec">Model specification</h1>
+
+
+<!--<h1><a name="dbn_intro">Dynamic Bayesian Networks (DBNs)</h1>-->
+
+Dynamic Bayesian Networks (DBNs) are directed graphical models of stochastic
+processes.
+They generalise <a href="#hmm">hidden Markov models (HMMs)</a>
+and <a href="#lds">linear dynamical systems (LDSs)</a>
+by representing the hidden (and observed) state in terms of state
+variables, which can have complex interdependencies.
+The graphical structure provides an easy way to specify these
+conditional independencies, and hence to provide a compact
+parameterization of the model.
+<p>
+Note that "temporal Bayesian network" would be a better name than
+"dynamic Bayesian network", since
+it is assumed that the model structure does not change, but
+the term DBN has become entrenched.
+We also normally assume that the parameters do not
+change, i.e., the model is time-invariant.
+However, we can always add extra
+hidden nodes to represent the current "regime", thereby creating
+mixtures of models to capture periodic non-stationarities.
+<p>
+There are some cases where the size of the state space can change over
+time, e.g., tracking a variable, but unknown, number of objects.
+In this case, we need to change the model structure over time.
+BNT does not support this.
+<!--
+, but see the following paper for a
+discussion of some of the issues:
+<ul>
+<li> <a href="ftp://ftp.cs.monash.edu.au/pub/annn/smc.ps">
+Dynamic belief networks for discrete monitoring</a>,
+A. E. Nicholson and J. M. Brady. 
+IEEE Systems, Man and Cybernetics, 24(11):1593-1610, 1994. 
+</ul>
+-->
+
+
+<h2><a name="hmm">Hidden Markov Models (HMMs)</h2>
+
+The simplest kind of DBN is a Hidden Markov Model (HMM), which has
+one discrete hidden node and one discrete or continuous
+observed node per slice. We illustrate this below.
+As before, circles denote continuous nodes, squares denote
+discrete nodes, clear means hidden, shaded means observed.
+<!--
+(The observed nodes can be
+discrete or continuous; the crucial thing about an HMM is that the
+hidden nodes are discrete, so the system can model arbitrary dynamics
+-- providing, of course, that the hidden state space is large enough.)
+-->
+<p>
+<img src="Figures/hmm3.gif">
+<p>
+We have "unrolled" the model for three "time slices" -- the structure and parameters are
+assumed to repeat as the model is unrolled further.
+Hence to specify a DBN, we need to
+define the intra-slice topology (within a slice),
+the inter-slice topology (between two slices),
+as well as the parameters for the first two slices.
+(Such a two-slice temporal Bayes net is often called a 2TBN.)
+<p>
+We can specify the topology as follows.
+<PRE>
+intra = zeros(2);
+intra(1,2) = 1; % node 1 in slice t connects to node 2 in slice t
+
+inter = zeros(2);
+inter(1,1) = 1; % node 1 in slice t-1 connects to node 1 in slice t
+</pre>
+We can specify the parameters as follows,
+where for simplicity we assume the observed node is discrete.
+<pre>
+Q = 2; % num hidden states
+O = 2; % num observable symbols
+
+ns = [Q O];
+dnodes = 1:2;
+bnet = mk_dbn(intra, inter, ns, 'discrete', dnodes);
+for i=1:4
+  bnet.CPD{i} = tabular_CPD(bnet, i);
+end
+</pre>
+<p>
+We assume the distributions P(X(t) | X(t-1)) and
+P(Y(t) | X(t)) are independent of t for t > 1.
+Hence the CPD for nodes 5, 7, ... is the same as for node 3, so we say they
+are in the same equivalence class, with node 3 being the "representative"
+for this class. In other words, we have tied the parameters for nodes
+3, 5, 7, ...
+Similarly, nodes 4, 6, 8, ... are tied.
+Note, however, that (the parameters for) nodes 1 and 2 are not tied to
+subsequent slices.
+<p>
+Above we assumed the observation model P(Y(t) | X(t)) is independent of t for t>1, but
+it is conventional to assume this is true for all t.
+So we would like to put nodes 2, 4, 6, ... all in the same class.
+We can do this by explicitely defining the equivalence classes, as
+follows (see <a href="usage.html#tying">here</a> for more details on
+parameter tying).
+<p>
+We define eclass1(i) to be the equivalence class that node i in slice
+1 belongs to.
+Similarly, we define eclass2(i) to be the equivalence class that node i in slice
+2, 3, ..., belongs to.
+For an HMM, we have
+<pre>
+eclass1 = [1 2];
+eclass2 = [3 2];
+eclass = [eclass1 eclass2];
+</pre>
+This ties the observation model across slices,
+since e.g., eclass(4) = eclass(2) = 2.
+<p>
+By default,
+eclass1 = 1:ss, and eclass2 = (1:ss)+ss, where ss = slice size = the
+number of nodes per slice.
+<!--This will tie nodes in slices 3, 4, ... to the the nodes in slice 2,
+but none of the nodes in slice 2 to any in slice 1.-->
+But by using the above tieing pattern,
+we now only have 3 CPDs to specify, instead of 4:
+<pre>
+bnet = mk_dbn(intra, inter, ns, 'discrete', dnodes, 'eclass1', eclass1, 'eclass2', eclass2);
+prior0 = normalise(rand(Q,1));
+transmat0 = mk_stochastic(rand(Q,Q));
+obsmat0 = mk_stochastic(rand(Q,O));
+bnet.CPD{1} = tabular_CPD(bnet, 1, prior0);
+bnet.CPD{2} = tabular_CPD(bnet, 2, obsmat0);
+bnet.CPD{3} = tabular_CPD(bnet, 3, transmat0);
+</pre>
+We discuss how to do <a href="#inf">inference</a> and <a href="#learn">learning</a> on this model
+below.
+(See also
+my <a href="../HMM/hmm.html">HMM toolbox</a>, which is included with BNT.)
+
+<p>
+Some common variants on HMMs are shown below.
+BNT can handle all of these.
+<p>
+<center>
+<table>
+<tr>
+<td><img src="Figures/hmm_gauss.gif">
+<td><img src="Figures/hmm_mixgauss.gif"
+<td><img src="Figures/hmm_ar.gif">
+<tr>
+<td><img src="Figures/hmm_factorial.gif">
+<td><img src="Figures/hmm_coupled.gif"
+<td><img src="Figures/hmm_io.gif">
+<tr>
+</table>
+</center>
+
+
+
+<h2><a name="lds">Linear Dynamical Systems (LDSs) and Kalman filters</h2>
+
+A Linear Dynamical System (LDS) has the same topology as an HMM, but
+all the nodes are assumed to have linear-Gaussian distributions, i.e.,
+<pre>
+   x(t+1) = A*x(t) + w(t),  w ~ N(0, Q),  x(0) ~ N(init_x, init_V)
+   y(t)   = C*x(t) + v(t),  v ~ N(0, R)
+</pre>
+Some simple variants are shown below.
+<p>
+<center>
+<table>
+<tr>
+<td><img src="Figures/ar1.gif">
+<td><img src="Figures/sar.gif">
+<td><img src="Figures/kf.gif">
+<td><img src="Figures/skf.gif">
+</table>
+</center>
+<p>
+
+We can create a regular LDS in BNT as follows.
+<pre>
+
+intra = zeros(2);
+intra(1,2) = 1;
+inter = zeros(2);
+inter(1,1) = 1;
+n = 2;
+
+X = 2; % size of hidden state
+Y = 2; % size of observable state
+
+ns = [X Y];
+dnodes = [];
+onodes = [2];
+eclass1 = [1 2];
+eclass2 = [3 2];
+bnet = mk_dbn(intra, inter, ns, 'discrete', dnodes, 'eclass1', eclass1, 'eclass2', eclass2);
+
+x0 = rand(X,1);
+V0 = eye(X); % must be positive semi definite!
+C0 = rand(Y,X);
+R0 = eye(Y);
+A0 = rand(X,X);
+Q0 = eye(X);
+
+bnet.CPD{1} = gaussian_CPD(bnet, 1, 'mean', x0, 'cov', V0, 'cov_prior_weight', 0);
+bnet.CPD{2} = gaussian_CPD(bnet, 2, 'mean', zeros(Y,1), 'cov', R0, 'weights', C0, ...
+			   'clamp_mean', 1, 'cov_prior_weight', 0);
+bnet.CPD{3} = gaussian_CPD(bnet, 3, 'mean', zeros(X,1), 'cov', Q0, 'weights', A0, ...
+			   'clamp_mean', 1, 'cov_prior_weight', 0);
+</pre>
+We discuss how to do <a href="#inf">inference</a> and <a href="#learn">learning</a> on this model
+below.
+(See also
+my <a href="../Kalman/kalman.html">Kalman filter toolbox</a>, which is included with BNT.)
+<p>
+
+
+<h2><a name="chmm">Coupled HMMs</h2>
+
+Here is an example of a coupled HMM with N=5 chains, unrolled for T=3
+slices. Each hidden discrete node has a private observed Gaussian
+child.
+<p>
+<img src="Figures/chmm5.gif">
+<p>
+We can make this using the function
+<pre>
+Q = 2; % binary hidden nodes
+discrete_obs = 0; % cts observed nodes
+Y = 1; % scalar observed nodes
+bnet = mk_chmm(N, Q, Y, discrete_obs);
+</pre>
+
+<!--We will use this model <a href="#pred">below</a> to illustrate online prediction.-->
+
+
+
+<h2><a name="water">Water network</h2>
+
+Consider the following model
+of a water purification plant, developed
+by Finn V. Jensen, Uffe Kjærulff, Kristian G. Olesen, and Jan
+Pedersen.
+<!--
+The clear nodes represent the hidden state of the system in
+factored form, and the shaded nodes represent the observations in
+factored form.
+-->
+<!--
+(Click <a
+href="http://www-nt.cs.berkeley.edu/home/nir/public_html/Repository/water.htm">here</a>
+for more details on this model.
+Following Boyen and Koller, we have added discrete evidence nodes.)
+-->
+<!--
+We have "unrolled" the model for three "time slices" -- the structure and parameters are
+assumed to repeat as the model is unrolled further.
+Hence to specify a DBN, we need to
+define the intra-slice topology (within a slice),
+the inter-slice topology (between two slices),
+as well as the parameters for the first two slices.
+(Such a two-slice temporal Bayes net is often called a 2TBN.)
+-->
+<p>
+<center>
+<IMG SRC="Figures/water3_75.gif">
+</center>
+We now show how to specify this model in BNT.
+<pre>
+ss = 12; % slice size
+intra = zeros(ss);
+intra(1,9) = 1;
+intra(3,10) = 1;
+intra(4,11) = 1;
+intra(8,12) = 1;
+
+inter = zeros(ss);
+inter(1, [1 3]) = 1; % node 1 in slice 1 connects to nodes 1 and 3 in slice 2
+inter(2, [2 3 7]) = 1;
+inter(3, [3 4 5]) = 1;
+inter(4, [3 4 6]) = 1;
+inter(5, [3 5 6]) = 1;
+inter(6, [4 5 6]) = 1;
+inter(7, [7 8]) = 1;
+inter(8, [6 7 8]) = 1;
+
+onodes = 9:12; % observed
+dnodes = 1:ss; % discrete
+ns = 2*ones(1,ss); % binary nodes
+eclass1 = 1:12;
+eclass2 = [13:20 9:12];
+eclass = [eclass1 eclass2];
+bnet = mk_dbn(intra, inter, ns, 'discrete', dnodes, 'eclass1', eclass1, 'eclass2', eclass2);
+for e=1:max(eclass)
+  bnet.CPD{e} = tabular_CPD(bnet, e);
+end
+</pre>
+We have tied the observation parameters across all slices.
+Click <a href="param_tieing.html">here</a> for a more complex example
+of parameter tieing.
+
+<!--
+Let X(i,t) denote the i'th hidden node in slice t,
+and Y(i,y) denote the i'th observed node in slice t.
+We also use the notation Nj to refer to the j'th node in the
+unrolled network, e.g., N25 = X(1,3), N33 = Y(1,3).
+<p>
+We assume the distributions P(X(i,t) | X(i,t-1)) and
+P(Y(i,t) | X(i,t)) are independent of t for t > 1 and for all i.
+Hence the CPD for N25, N37, ... is the same as for N13, so we say they
+are in the same equivalence class, with N13 being the "representative"
+for this class. In other words, we have tied the parameters for nodes
+N13, N25, N37, ...
+Note, however, that the parameters for the nodes in the first slice
+are not tied, so each equivalence class for nodes 1..12 contains a
+single node.
+<p>
+Above we assumed P(Y(i,t) | X(i,t)) is independent of t for t>1, but
+it is conventional to assume this is true for all t.
+So we would like to put N9, N21, N33, ... all in the same class, and
+similarly for the other observed nodes.
+We can do this by explicitely defining the equivalence classes, as
+follows.
+<p>
+We define eclass1(i) to be the equivalence class that node i in slice
+1 belongs to.
+Similarly, we define eclass2(i) to be the equivalence class that node i in slice
+2, 3, ..., belongs to.
+For the water model, we have
+<pre>
+</pre>
+This ties the observation model across slices,
+since e.g., eclass(9) = eclass(21) = 9, so Y(1,1) and Y(1,2) belong to the
+same class.
+<p>
+By default,
+eclass1 = 1:ss, and eclass2 = (1:ss)+ss, where ss = slice size = the
+number of nodes per slice.
+This will tie nodes in slices 3, 4, ... to the the nodes in slice 2,
+but none of the nodes in slice 2 to any in slice 1.
+By using the above tieing pattern,
+we now only have 20 CPDs to specify, instead of 24:
+<pre>
+bnet = mk_dbn(intra, inter, ns, dnodes, eclass1, eclass2);
+for e=1:max(eclass)
+  bnet.CPD{e} = tabular_CPD(bnet, e);
+end
+</pre>
+-->
+
+
+
+<h2><a name="bat">BATnet</h2>
+
+As an example of a more complicated DBN, consider the following
+example,
+which is a model of a car's high level state, as might be used by
+an automated car.
+(The model is from Forbes, Huang, Kanazawa and Russell, "The BATmobile: Towards a
+Bayesian Automated Taxi", IJCAI 95. The figure is from
+Boyen and Koller, "Tractable Inference for Complex Stochastic
+Processes", UAI98.
+For simplicity, we only show the observed nodes for slice 2.)
+<p>
+<center>
+<IMG SRC="Figures/batnet.gif">
+</center>
+<p>
+Since this topology is so complicated,
+it is useful to be able to refer to the nodes by name, instead of
+number.
+<pre>
+names = {'LeftClr', 'RightClr', 'LatAct', ... 'Bclr', 'BYdotDiff'};
+ss = length(names);
+</pre>
+We can specify the intra-slice topology using a cell array as follows,
+where each row specifies a connection between two named nodes:
+<pre>
+intrac = {...
+   'LeftClr', 'LeftClrSens';
+  'RightClr', 'RightClrSens';
+  ...
+  'BYdotDiff', 'BcloseFast'};
+</pre>
+Finally, we can convert this cell array to an adjacency matrix using
+the following function:
+<pre>
+[intra, names] = mk_adj_mat(intrac, names, 1);
+</pre>
+This function also permutes the names so that they are in topological
+order.
+Given this ordering of the names, we can make the inter-slice
+connectivity matrix as follows:
+<pre>
+interc = {...
+   'LeftClr', 'LeftClr';
+   'LeftClr', 'LatAct';
+   ...
+   'FBStatus', 'LatAct'};
+
+inter = mk_adj_mat(interc, names, 0);  
+</pre>
+
+To refer to a node, we must know its number, which can be computed as
+in the following example:
+<pre>
+obs = {'LeftClrSens', 'RightClrSens', 'TurnSignalSens', 'XdotSens', 'YdotSens', 'FYdotDiffSens', ...
+      'FclrSens', 'BXdotSens', 'BclrSens', 'BYdotDiffSens'};
+for i=1:length(obs)
+  onodes(i) = strmatch(obs{i}, names);
+end
+onodes = sort(onodes);
+</pre>
+(We sort the onodes since most BNT routines assume that set-valued
+arguments are in sorted order.)
+We can now make the DBN:
+<pre>
+dnodes = 1:ss; 
+ns = 2*ones(1,ss); % binary nodes
+bnet = mk_dbn(intra, inter, ns, 'iscrete', dnodes);
+</pre>
+To specify the parameters, we must know the order of the parents.
+See the function BNT/general/mk_named_CPT for a way to do this in the
+case of tabular nodes. For simplicity, we just generate random
+parameters:
+<pre>
+for i=1:2*ss
+  bnet.CPD{i} = tabular_CPD(bnet, i);
+end
+</pre>
+A complete version of this example is available in BNT/examples/dynamic/bat1.m.
+
+
+
+
+<h1><a name="inf">Inference</h1>
+
+
+The general inference problem for DBNs is to compute
+P(X(i,t0) | Y(:, t1:t2)), where X(i,t) represents the i'th hidden
+variable at time t and  Y(:,t1:t2) represents all the evidence
+between times t1 and t2. 
+There are several special cases of interest, illustrated below.
+The arrow indicates t0: it is X(t0) that we are trying to estimate.
+The shaded region denotes t1:t2, the available data.
+<p>
+
+<img src="Figures/filter.gif">
+
+<p>
+BNT can currently only handle offline smoothing.
+(The HMM engine handles filtering and, to a limited extent, prediction.)
+The usage is similar to static
+inference engines, except now the evidence is a 2D cell array of
+size ss*T, where ss is the number of nodes per slice (ss = slice sizee)  and T is the
+number of slices.
+Also, 'marginal_nodes' takes two arguments, the nodes and the time-slice.
+For example, to compute P(X(i,t) | y(:,1:T)), we proceed as follows
+(where onodes are the indices of the observedd nodes in each slice,
+which correspond to y):
+<pre>
+ev = sample_dbn(bnet, T);
+evidence = cell(ss,T);
+evidence(onodes,:) = ev(onodes, :); % all cells besides onodes are empty
+[engine, ll] = enter_evidence(engine, evidence);
+marg = marginal_nodes(engine, i, t);
+</pre>
+
+
+<h2><a name="discrete">Discrete hidden nodes</h2>
+
+If all the hidden nodes are discrete,
+we can use the junction tree algorithm to perform inference.
+The simplest approach,
+<tt>jtree_unrolled_dbn_inf_engine</tt>,
+unrolls the DBN into a static network and applies jtree; however, for
+long sequences, this
+can be very slow and can result in numerical underflow.
+A better approach is to apply the jtree algorithm to pairs of
+neighboring slices at a time; this is implemented in
+<tt>jtree_dbn_inf_engine</tt>.
+
+<p>
+A DBN can be converted to an HMM if all the hidden nodes are discrete.
+In this case, you can use
+<tt>hmm_inf_engine</tt>. This is faster than jtree for small models
+because the constant factors of the algorithm are lower, but can be
+exponentially slower for models with many variables
+(e.g., > 6 binary hidden nodes).
+
+<p>
+The use of both
+<tt>jtree_dbn_inf_engine</tt>
+and
+<tt>hmm_inf_engine</tt>
+is deprecated.
+A better approach is to construct a smoother engine out of lower-level
+engines, which implement forward/backward operators.
+You can create these engines  as follows.
+<pre>
+engine = smoother_engine(hmm_2TBN_inf_engine(bnet));
+or
+engine = smoother_engine(jtree_2TBN_inf_engine(bnet));
+</pre>
+You then call them in the usual way:
+<pre>
+engine = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, nodes, t);
+</pre>
+Note: you must declare the observed nodes in the bnet before using
+hmm_2TBN_inf_engine. 
+
+
+<p>
+Unfortunately, when all the hiddden nodes are discrete,
+exact inference takes O(2^n) time, where n is the number of hidden
+nodes per slice,
+even if the model is sparse.
+The basic reason for this is that two nodes become correlated, even if
+there is no direct connection between them in the 2TBN,
+by virtue of sharing common ancestors in the past.
+Hence we need to use approximations.
+<p>
+A popular approximate inference algorithm for discrete DBNs, known as BK, is described in
+<ul>
+<li>
+<A HREF="http://robotics.Stanford.EDU/~xb/uai98/index.html">
+Tractable inference for complex stochastic processes </A>,
+Boyen and Koller, UAI 1998
+<li>
+<A HREF="http://robotics.Stanford.EDU/~xb/nips98/index.html">
+Approximate learning of dynamic models</a>, Boyen and Koller, NIPS
+1998.
+</ul>
+This approximates the belief state with a product of
+marginals on a specified set of clusters. For example, 
+in the water network, we might use the following clusters:
+<pre>
+engine = bk_inf_engine(bnet, { [1 2], [3 4 5 6], [7 8] });
+</pre>
+This engine can now be used just like the jtree engine.
+Two special cases of the BK algorithm are supported: 'ff' (fully
+factored) means each node has its own cluster, and 'exact' means there
+is 1 cluster that contains the whole slice. These can be created as
+follows:
+<pre>
+engine = bk_inf_engine(bnet, 'ff');
+engine = bk_inf_engine(bnet, 'exact');
+</pre>
+For pedagogical purposes, an implementation of BK-FF that uses an HMM
+instead of junction tree is available at
+<tt>bk_ff_hmm_inf_engine</tt>.
+
+
+
+<h2><a name="cts">Continuous hidden nodes</h2>
+
+If all the hidden nodes are linear-Gaussian, <em>and</em> the observed nodes are
+linear-Gaussian,
+the model is a <a href="http://www.cs.berkeley.edu/~murphyk/Bayes/kalman.html">
+linear dynamical system</a> (LDS).
+A DBN can be converted to an LDS if all the hidden nodes are linear-Gaussian
+and if they are all persistent. In this case, you can use
+<tt>kalman_inf_engine</tt>.
+For more general linear-gaussian models, you can use
+<tt>jtree_dbn_inf_engine</tt> or <tt>jtree_unrolled_dbn_inf_engine</tt>.
+
+<p>
+For nonlinear systems with Gaussian noise, the unscented Kalman filter (UKF),
+due to Julier and Uhlmann, is far superior to the well-known extended Kalman
+filter (EKF), both in theory and practice.
+<!--
+See
+<A HREF="http://phoebe.robots.ox.ac.uk/default.html">"A General Method for 
+Approximating Nonlinear Transformations of 
+Probability Distributions"</A>.
+(If the above link is down,
+try <a href="http://www.ece.ogi.edu/~ericwan/pubs.html">Eric Wan's</a>
+page, who has done a lot of work on the UKF.)
+<p>
+-->
+The key idea of the UKF is that it is easier to estimate a Gaussian distribution
+from a set of points than to approximate an arbitrary non-linear
+function.
+We start with points that are plus/minus sigma away from the mean along
+each dimension, and then pipe them through the nonlinearity, and
+then fit a Gaussian to the transformed points. 
+(No need to compute Jacobians, unlike the EKF!)
+
+<p>
+For systems with non-Gaussian noise, I recommend
+<a href="http://www.cs.berkeley.edu/~jfgf/smc/">Particle
+filtering</a> (PF), which is a popular sequential Monte Carlo technique.
+
+<p>
+The EKF can be used as a proposal distribution for a PF.
+This method is better than either one alone.
+See <a href="http://www.cs.berkeley.edu/~jfgf/upf.ps.gz">The Unscented Particle Filter</a>,
+by R van der Merwe, A Doucet, JFG de Freitas and E Wan, May 2000.
+<a href="http://www.cs.berkeley.edu/~jfgf/software.html">Matlab
+software</a> for the UPF is also available.
+<p>
+Note: none of this software is part of BNT.
+
+
+
+<h1><a name="learn">Learning</h1>
+
+Learning in DBNs can be done online or offline.
+Currently only offline learning is implemented in BNT.
+
+
+<h2><a name="param_learn">Parameter learning</h2>
+
+Offline parameter learning is very similar to learning in static networks,
+except now the training data is a cell-array of 2D cell-arrays.
+For example,
+cases{l}{i,t} is the value of node i in slice t in sequence l, or []
+if unobserved.
+Each sequence can be a different length, and may have missing values
+in arbitrary locations.
+Here is a typical code fragment for using EM.
+<pre>
+ncases = 2;
+cases = cell(1, ncases);
+for i=1:ncases
+  ev = sample_dbn(bnet, T);
+  cases{i} = cell(ss,T);
+  cases{i}(onodes,:) = ev(onodes, :);
+end
+[bnet2, LLtrace] = learn_params_dbn_em(engine, cases, 'max_iter', 10);
+</pre>
+If the observed node is vector-valued and stored in an OxT array, you
+need to assign each vector to a single cell, as in the following
+example.
+<pre>
+data = [xpos(:)'; ypos(:)']; 
+ncases = 1;
+cases = cell(1, ncases);
+onodes = bnet.observed;
+for i=1:ncases
+  cases{i} = cell(ss,T);
+  cases{i}(onodes,:) = num2cell(data(:,1:T), 1);
+end
+</pre>
+<p>
+For a complete code listing of how to do EM in a simple DBN, click
+<a href="dbn_hmm_demo.m">here</a>.
+
+<h2><a name="struct_learn">Structure learning</h2>
+
+There is currently only one structure learning algorithm for DBNs.
+This assumes all nodes are tabular and observed, and that there are
+no intra-slice connections. Hence we can find the optimal set of
+parents for each node separately, without worrying about directed
+cycles or node orderings.
+The function is called as follows
+<pre>
+inter = learn_struct_dbn_reveal(cases, ns, max_fan_in, penalty)
+</pre>
+A full example is given in BNT/examples/dynamic/reveal1.m.
+Setting the penalty term to 0 gives the maximum likelihood model; this
+is equivalent to maximizing the mutual information between parents and
+child (in the bioinformatics community, this is known as the REVEAL
+algorithm). A non-zero penalty invokes the BIC criterion, which
+lessens the chance of overfitting. 
+<p>
+<a href="http://www.bioss.sari.ac.uk/~dirk/software/DBmcmc/">
+Dirk Husmeier has extended MCMC model selection to DBNs</a>.
+
+</BODY>
diff --git a/sourcecodes/bnt-master/docs/usage_dbn_02nov13.html b/sourcecodes/bnt-master/docs/usage_dbn_02nov13.html
new file mode 100644
index 00000000..a1cd8f3a
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/usage_dbn_02nov13.html
@@ -0,0 +1,715 @@
+<HEAD>
+<TITLE>How to use BNT for DBNs</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF">
+<!-- white background is better for the pictures and equations -->
+
+Documentation last updated on 13 November 2002
+
+<h1>How to use BNT for DBNs</h1>
+
+<p>
+<ul>
+<li> <a href="#spec">Model specification</a>
+<ul>
+<li> <a href="#hmm">HMMs</a>
+<li> <a href="#lds">Kalman filters</a>
+<li> <a href="#chmm">Coupled HMMs</a>
+<li> <a href="#water">Water network</a>
+<li> <a href="#bat">BAT network</a>
+</ul>
+
+<li> <a href="#inf">Inference</a>
+<ul>
+<li> <a href="#discrete">Discrete hidden nodes</a>
+<li> <a href="#cts">Continuous hidden nodes</a>
+</ul>
+
+<li> <a href="#learn">Learning</a>
+<ul>
+<li> <a href="#param_learn">Parameter learning</a>
+<li> <a href="#struct_learn">Structure learning</a>
+</ul>
+
+</ul>
+
+Note:
+you are recommended to read an introduction
+to DBNs first, such as
+<a href="http://www.ai.mit.edu/~murphyk/Papers/dbnchapter.pdf">
+this book chapter</a>.
+
+
+<h1><a name="spec">Model specification</h1>
+
+
+<!--<h1><a name="dbn_intro">Dynamic Bayesian Networks (DBNs)</h1>-->
+
+Dynamic Bayesian Networks (DBNs) are directed graphical models of stochastic
+processes.
+They generalise <a href="#hmm">hidden Markov models (HMMs)</a>
+and <a href="#lds">linear dynamical systems (LDSs)</a>
+by representing the hidden (and observed) state in terms of state
+variables, which can have complex interdependencies.
+The graphical structure provides an easy way to specify these
+conditional independencies, and hence to provide a compact
+parameterization of the model.
+<p>
+Note that "temporal Bayesian network" would be a better name than
+"dynamic Bayesian network", since
+it is assumed that the model structure does not change, but
+the term DBN has become entrenched.
+We also normally assume that the parameters do not
+change, i.e., the model is time-invariant.
+However, we can always add extra
+hidden nodes to represent the current "regime", thereby creating
+mixtures of models to capture periodic non-stationarities.
+<p>
+There are some cases where the size of the state space can change over
+time, e.g., tracking a variable, but unknown, number of objects.
+In this case, we need to change the model structure over time.
+BNT does not support this.
+<!--
+, but see the following paper for a
+discussion of some of the issues:
+<ul>
+<li> <a href="ftp://ftp.cs.monash.edu.au/pub/annn/smc.ps">
+Dynamic belief networks for discrete monitoring</a>,
+A. E. Nicholson and J. M. Brady. 
+IEEE Systems, Man and Cybernetics, 24(11):1593-1610, 1994. 
+</ul>
+-->
+
+
+<h2><a name="hmm">Hidden Markov Models (HMMs)</h2>
+
+The simplest kind of DBN is a Hidden Markov Model (HMM), which has
+one discrete hidden node and one discrete or continuous
+observed node per slice. We illustrate this below.
+As before, circles denote continuous nodes, squares denote
+discrete nodes, clear means hidden, shaded means observed.
+<!--
+(The observed nodes can be
+discrete or continuous; the crucial thing about an HMM is that the
+hidden nodes are discrete, so the system can model arbitrary dynamics
+-- providing, of course, that the hidden state space is large enough.)
+-->
+<p>
+<img src="Figures/hmm3.gif">
+<p>
+We have "unrolled" the model for three "time slices" -- the structure and parameters are
+assumed to repeat as the model is unrolled further.
+Hence to specify a DBN, we need to
+define the intra-slice topology (within a slice),
+the inter-slice topology (between two slices),
+as well as the parameters for the first two slices.
+(Such a two-slice temporal Bayes net is often called a 2TBN.)
+<p>
+We can specify the topology as follows.
+<PRE>
+intra = zeros(2);
+intra(1,2) = 1; % node 1 in slice t connects to node 2 in slice t
+
+inter = zeros(2);
+inter(1,1) = 1; % node 1 in slice t-1 connects to node 1 in slice t
+</pre>
+We can specify the parameters as follows,
+where for simplicity we assume the observed node is discrete.
+<pre>
+Q = 2; % num hidden states
+O = 2; % num observable symbols
+
+ns = [Q O];
+dnodes = 1:2;
+bnet = mk_dbn(intra, inter, ns, 'discrete', dnodes);
+for i=1:4
+  bnet.CPD{i} = tabular_CPD(bnet, i);
+end
+</pre>
+<p>
+We assume the distributions P(X(t) | X(t-1)) and
+P(Y(t) | X(t)) are independent of t for t > 1.
+Hence the CPD for nodes 5, 7, ... is the same as for node 3, so we say they
+are in the same equivalence class, with node 3 being the "representative"
+for this class. In other words, we have tied the parameters for nodes
+3, 5, 7, ...
+Similarly, nodes 4, 6, 8, ... are tied.
+Note, however, that (the parameters for) nodes 1 and 2 are not tied to
+subsequent slices.
+<p>
+Above we assumed the observation model P(Y(t) | X(t)) is independent of t for t>1, but
+it is conventional to assume this is true for all t.
+So we would like to put nodes 2, 4, 6, ... all in the same class.
+We can do this by explicitely defining the equivalence classes, as
+follows (see <a href="usage.html#tying">here</a> for more details on
+parameter tying).
+<p>
+We define eclass1(i) to be the equivalence class that node i in slice
+1 belongs to.
+Similarly, we define eclass2(i) to be the equivalence class that node i in slice
+2, 3, ..., belongs to.
+For an HMM, we have
+<pre>
+eclass1 = [1 2];
+eclass2 = [3 2];
+eclass = [eclass1 eclass2];
+</pre>
+This ties the observation model across slices,
+since e.g., eclass(4) = eclass(2) = 2.
+<p>
+By default,
+eclass1 = 1:ss, and eclass2 = (1:ss)+ss, where ss = slice size = the
+number of nodes per slice.
+<!--This will tie nodes in slices 3, 4, ... to the the nodes in slice 2,
+but none of the nodes in slice 2 to any in slice 1.-->
+But by using the above tieing pattern,
+we now only have 3 CPDs to specify, instead of 4:
+<pre>
+bnet = mk_dbn(intra, inter, ns, 'discrete', dnodes, 'eclass1', eclass1, 'eclass2', eclass2);
+prior0 = normalise(rand(Q,1));
+transmat0 = mk_stochastic(rand(Q,Q));
+obsmat0 = mk_stochastic(rand(Q,O));
+bnet.CPD{1} = tabular_CPD(bnet, 1, prior0);
+bnet.CPD{2} = tabular_CPD(bnet, 2, obsmat0);
+bnet.CPD{3} = tabular_CPD(bnet, 3, transmat0);
+</pre>
+We discuss how to do <a href="#inf">inference</a> and <a href="#learn">learning</a> on this model
+below.
+(See also
+my <a href="../HMM/hmm.html">HMM toolbox</a>, which is included with BNT.)
+
+<p>
+Some common variants on HMMs are shown below.
+BNT can handle all of these.
+<p>
+<center>
+<table>
+<tr>
+<td><img src="Figures/hmm_gauss.gif">
+<td><img src="Figures/hmm_mixgauss.gif"
+<td><img src="Figures/hmm_ar.gif">
+<tr>
+<td><img src="Figures/hmm_factorial.gif">
+<td><img src="Figures/hmm_coupled.gif"
+<td><img src="Figures/hmm_io.gif">
+<tr>
+</table>
+</center>
+
+
+
+<h2><a name="lds">Linear Dynamical Systems (LDSs) and Kalman filters</h2>
+
+A Linear Dynamical System (LDS) has the same topology as an HMM, but
+all the nodes are assumed to have linear-Gaussian distributions, i.e.,
+<pre>
+   x(t+1) = A*x(t) + w(t),  w ~ N(0, Q),  x(0) ~ N(init_x, init_V)
+   y(t)   = C*x(t) + v(t),  v ~ N(0, R)
+</pre>
+Some simple variants are shown below.
+<p>
+<center>
+<table>
+<tr>
+<td><img src="Figures/ar1.gif">
+<td><img src="Figures/sar.gif">
+<td><img src="Figures/kf.gif">
+<td><img src="Figures/skf.gif">
+</table>
+</center>
+<p>
+
+We can create a regular LDS in BNT as follows.
+<pre>
+
+intra = zeros(2);
+intra(1,2) = 1;
+inter = zeros(2);
+inter(1,1) = 1;
+n = 2;
+
+X = 2; % size of hidden state
+Y = 2; % size of observable state
+
+ns = [X Y];
+dnodes = [];
+onodes = [2];
+eclass1 = [1 2];
+eclass2 = [3 2];
+bnet = mk_dbn(intra, inter, ns, 'discrete', dnodes, 'eclass1', eclass1, 'eclass2', eclass2);
+
+x0 = rand(X,1);
+V0 = eye(X); % must be positive semi definite!
+C0 = rand(Y,X);
+R0 = eye(Y);
+A0 = rand(X,X);
+Q0 = eye(X);
+
+bnet.CPD{1} = gaussian_CPD(bnet, 1, 'mean', x0, 'cov', V0, 'cov_prior_weight', 0);
+bnet.CPD{2} = gaussian_CPD(bnet, 2, 'mean', zeros(Y,1), 'cov', R0, 'weights', C0, ...
+			   'clamp_mean', 1, 'cov_prior_weight', 0);
+bnet.CPD{3} = gaussian_CPD(bnet, 3, 'mean', zeros(X,1), 'cov', Q0, 'weights', A0, ...
+			   'clamp_mean', 1, 'cov_prior_weight', 0);
+</pre>
+We discuss how to do <a href="#inf">inference</a> and <a href="#learn">learning</a> on this model
+below.
+(See also
+my <a href="../Kalman/kalman.html">Kalman filter toolbox</a>, which is included with BNT.)
+<p>
+
+
+<h2><a name="chmm">Coupled HMMs</h2>
+
+Here is an example of a coupled HMM with N=5 chains, unrolled for T=3
+slices. Each hidden discrete node has a private observed Gaussian
+child.
+<p>
+<img src="Figures/chmm5.gif">
+<p>
+We can make this using the function
+<pre>
+Q = 2; % binary hidden nodes
+discrete_obs = 0; % cts observed nodes
+Y = 1; % scalar observed nodes
+bnet = mk_chmm(N, Q, Y, discrete_obs);
+</pre>
+
+<!--We will use this model <a href="#pred">below</a> to illustrate online prediction.-->
+
+
+
+<h2><a name="water">Water network</h2>
+
+Consider the following model
+of a water purification plant, developed
+by Finn V. Jensen, Uffe Kjærulff, Kristian G. Olesen, and Jan
+Pedersen.
+<!--
+The clear nodes represent the hidden state of the system in
+factored form, and the shaded nodes represent the observations in
+factored form.
+-->
+<!--
+(Click <a
+href="http://www-nt.cs.berkeley.edu/home/nir/public_html/Repository/water.htm">here</a>
+for more details on this model.
+Following Boyen and Koller, we have added discrete evidence nodes.)
+-->
+<!--
+We have "unrolled" the model for three "time slices" -- the structure and parameters are
+assumed to repeat as the model is unrolled further.
+Hence to specify a DBN, we need to
+define the intra-slice topology (within a slice),
+the inter-slice topology (between two slices),
+as well as the parameters for the first two slices.
+(Such a two-slice temporal Bayes net is often called a 2TBN.)
+-->
+<p>
+<center>
+<IMG SRC="Figures/water3_75.gif">
+</center>
+We now show how to specify this model in BNT.
+<pre>
+ss = 12; % slice size
+intra = zeros(ss);
+intra(1,9) = 1;
+intra(3,10) = 1;
+intra(4,11) = 1;
+intra(8,12) = 1;
+
+inter = zeros(ss);
+inter(1, [1 3]) = 1; % node 1 in slice 1 connects to nodes 1 and 3 in slice 2
+inter(2, [2 3 7]) = 1;
+inter(3, [3 4 5]) = 1;
+inter(4, [3 4 6]) = 1;
+inter(5, [3 5 6]) = 1;
+inter(6, [4 5 6]) = 1;
+inter(7, [7 8]) = 1;
+inter(8, [6 7 8]) = 1;
+
+onodes = 9:12; % observed
+dnodes = 1:ss; % discrete
+ns = 2*ones(1,ss); % binary nodes
+eclass1 = 1:12;
+eclass2 = [13:20 9:12];
+eclass = [eclass1 eclass2];
+bnet = mk_dbn(intra, inter, ns, 'discrete', dnodes, 'eclass1', eclass1, 'eclass2', eclass2);
+for e=1:max(eclass)
+  bnet.CPD{e} = tabular_CPD(bnet, e);
+end
+</pre>
+We have tied the observation parameters across all slices.
+Click <a href="param_tieing.html">here</a> for a more complex example
+of parameter tieing.
+
+<!--
+Let X(i,t) denote the i'th hidden node in slice t,
+and Y(i,y) denote the i'th observed node in slice t.
+We also use the notation Nj to refer to the j'th node in the
+unrolled network, e.g., N25 = X(1,3), N33 = Y(1,3).
+<p>
+We assume the distributions P(X(i,t) | X(i,t-1)) and
+P(Y(i,t) | X(i,t)) are independent of t for t > 1 and for all i.
+Hence the CPD for N25, N37, ... is the same as for N13, so we say they
+are in the same equivalence class, with N13 being the "representative"
+for this class. In other words, we have tied the parameters for nodes
+N13, N25, N37, ...
+Note, however, that the parameters for the nodes in the first slice
+are not tied, so each equivalence class for nodes 1..12 contains a
+single node.
+<p>
+Above we assumed P(Y(i,t) | X(i,t)) is independent of t for t>1, but
+it is conventional to assume this is true for all t.
+So we would like to put N9, N21, N33, ... all in the same class, and
+similarly for the other observed nodes.
+We can do this by explicitely defining the equivalence classes, as
+follows.
+<p>
+We define eclass1(i) to be the equivalence class that node i in slice
+1 belongs to.
+Similarly, we define eclass2(i) to be the equivalence class that node i in slice
+2, 3, ..., belongs to.
+For the water model, we have
+<pre>
+</pre>
+This ties the observation model across slices,
+since e.g., eclass(9) = eclass(21) = 9, so Y(1,1) and Y(1,2) belong to the
+same class.
+<p>
+By default,
+eclass1 = 1:ss, and eclass2 = (1:ss)+ss, where ss = slice size = the
+number of nodes per slice.
+This will tie nodes in slices 3, 4, ... to the the nodes in slice 2,
+but none of the nodes in slice 2 to any in slice 1.
+By using the above tieing pattern,
+we now only have 20 CPDs to specify, instead of 24:
+<pre>
+bnet = mk_dbn(intra, inter, ns, dnodes, eclass1, eclass2);
+for e=1:max(eclass)
+  bnet.CPD{e} = tabular_CPD(bnet, e);
+end
+</pre>
+-->
+
+
+
+<h2><a name="bat">BATnet</h2>
+
+As an example of a more complicated DBN, consider the following
+example,
+which is a model of a car's high level state, as might be used by
+an automated car.
+(The model is from Forbes, Huang, Kanazawa and Russell, "The BATmobile: Towards a
+Bayesian Automated Taxi", IJCAI 95. The figure is from
+Boyen and Koller, "Tractable Inference for Complex Stochastic
+Processes", UAI98.
+For simplicity, we only show the observed nodes for slice 2.)
+<p>
+<center>
+<IMG SRC="Figures/batnet.gif">
+</center>
+<p>
+Since this topology is so complicated,
+it is useful to be able to refer to the nodes by name, instead of
+number.
+<pre>
+names = {'LeftClr', 'RightClr', 'LatAct', ... 'Bclr', 'BYdotDiff'};
+ss = length(names);
+</pre>
+We can specify the intra-slice topology using a cell array as follows,
+where each row specifies a connection between two named nodes:
+<pre>
+intrac = {...
+   'LeftClr', 'LeftClrSens';
+  'RightClr', 'RightClrSens';
+  ...
+  'BYdotDiff', 'BcloseFast'};
+</pre>
+Finally, we can convert this cell array to an adjacency matrix using
+the following function:
+<pre>
+[intra, names] = mk_adj_mat(intrac, names, 1);
+</pre>
+This function also permutes the names so that they are in topological
+order.
+Given this ordering of the names, we can make the inter-slice
+connectivity matrix as follows:
+<pre>
+interc = {...
+   'LeftClr', 'LeftClr';
+   'LeftClr', 'LatAct';
+   ...
+   'FBStatus', 'LatAct'};
+
+inter = mk_adj_mat(interc, names, 0);  
+</pre>
+
+To refer to a node, we must know its number, which can be computed as
+in the following example:
+<pre>
+obs = {'LeftClrSens', 'RightClrSens', 'TurnSignalSens', 'XdotSens', 'YdotSens', 'FYdotDiffSens', ...
+      'FclrSens', 'BXdotSens', 'BclrSens', 'BYdotDiffSens'};
+for i=1:length(obs)
+  onodes(i) = stringmatch(obs{i}, names);
+end
+onodes = sort(onodes);
+</pre>
+(We sort the onodes since most BNT routines assume that set-valued
+arguments are in sorted order.)
+We can now make the DBN:
+<pre>
+dnodes = 1:ss; 
+ns = 2*ones(1,ss); % binary nodes
+bnet = mk_dbn(intra, inter, ns, 'iscrete', dnodes);
+</pre>
+To specify the parameters, we must know the order of the parents.
+See the function BNT/general/mk_named_CPT for a way to do this in the
+case of tabular nodes. For simplicity, we just generate random
+parameters:
+<pre>
+for i=1:2*ss
+  bnet.CPD{i} = tabular_CPD(bnet, i);
+end
+</pre>
+A complete version of this example is available in BNT/examples/dynamic/bat1.m.
+
+
+
+
+<h1><a name="inf">Inference</h1>
+
+
+The general inference problem for DBNs is to compute
+P(X(i,t0) | Y(:, t1:t2)), where X(i,t) represents the i'th hidden
+variable at time t and  Y(:,t1:t2) represents all the evidence
+between times t1 and t2. 
+There are several special cases of interest, illustrated below.
+The arrow indicates t0: it is X(t0) that we are trying to estimate.
+The shaded region denotes t1:t2, the available data.
+<p>
+
+<img src="Figures/filter.gif">
+
+<p>
+BNT can currently only handle offline smoothing.
+(The HMM engine handles filtering and, to a limited extent, prediction.)
+The usage is similar to static
+inference engines, except now the evidence is a 2D cell array of
+size ss*T, where ss is the number of nodes per slice (ss = slice sizee)  and T is the
+number of slices.
+Also, 'marginal_nodes' takes two arguments, the nodes and the time-slice.
+For example, to compute P(X(i,t) | y(:,1:T)), we proceed as follows
+(where onodes are the indices of the observedd nodes in each slice,
+which correspond to y):
+<pre>
+ev = sample_dbn(bnet, T);
+evidence = cell(ss,T);
+evidence(onodes,:) = ev(onodes, :); % all cells besides onodes are empty
+[engine, ll] = enter_evidence(engine, evidence);
+marg = marginal_nodes(engine, i, t);
+</pre>
+
+
+<h2><a name="discrete">Discrete hidden nodes</h2>
+
+If all the hidden nodes are discrete,
+we can use the junction tree algorithm to perform inference.
+The simplest approach,
+<tt>jtree_unrolled_dbn_inf_engine</tt>,
+unrolls the DBN into a static network and applies jtree; however, for
+long sequences, this
+can be very slow and can result in numerical underflow.
+A better approach is to apply the jtree algorithm to pairs of
+neighboring slices at a time; this is implemented in
+<tt>jtree_dbn_inf_engine</tt>.
+
+<p>
+A DBN can be converted to an HMM if all the hidden nodes are discrete.
+In this case, you can use
+<tt>hmm_inf_engine</tt>. This is faster than jtree for small models
+because the constant factors of the algorithm are lower, but can be
+exponentially slower for models with many variables
+(e.g., > 6 binary hidden nodes).
+
+<p>
+The use of both
+<tt>jtree_dbn_inf_engine</tt>
+and
+<tt>hmm_inf_engine</tt>
+is deprecated.
+A better approach is to construct a smoother engine out of lower-level
+engines, which implement forward/backward operators.
+You can create these engines  as follows.
+<pre>
+engine = smoother_engine(hmm_2TBN_inf_engine(bnet));
+or
+engine = smoother_engine(jtree_2TBN_inf_engine(bnet));
+</pre>
+You then call them in the usual way:
+<pre>
+engine = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, nodes, t);
+</pre>
+Note: you must declare the observed nodes in the bnet before using
+hmm_2TBN_inf_engine. 
+
+
+<p>
+Unfortunately, when all the hiddden nodes are discrete,
+exact inference takes O(2^n) time, where n is the number of hidden
+nodes per slice,
+even if the model is sparse.
+The basic reason for this is that two nodes become correlated, even if
+there is no direct connection between them in the 2TBN,
+by virtue of sharing common ancestors in the past.
+Hence we need to use approximations.
+<p>
+A popular approximate inference algorithm for discrete DBNs, known as BK, is described in
+<ul>
+<li>
+<A HREF="http://robotics.Stanford.EDU/~xb/uai98/index.html">
+Tractable inference for complex stochastic processes </A>,
+Boyen and Koller, UAI 1998
+<li>
+<A HREF="http://robotics.Stanford.EDU/~xb/nips98/index.html">
+Approximate learning of dynamic models</a>, Boyen and Koller, NIPS
+1998.
+</ul>
+This approximates the belief state with a product of
+marginals on a specified set of clusters. For example, 
+in the water network, we might use the following clusters:
+<pre>
+engine = bk_inf_engine(bnet, { [1 2], [3 4 5 6], [7 8] });
+</pre>
+This engine can now be used just like the jtree engine.
+Two special cases of the BK algorithm are supported: 'ff' (fully
+factored) means each node has its own cluster, and 'exact' means there
+is 1 cluster that contains the whole slice. These can be created as
+follows:
+<pre>
+engine = bk_inf_engine(bnet, 'ff');
+engine = bk_inf_engine(bnet, 'exact');
+</pre>
+For pedagogical purposes, an implementation of BK-FF that uses an HMM
+instead of junction tree is available at
+<tt>bk_ff_hmm_inf_engine</tt>.
+
+
+
+<h2><a name="cts">Continuous hidden nodes</h2>
+
+If all the hidden nodes are linear-Gaussian, <em>and</em> the observed nodes are
+linear-Gaussian,
+the model is a <a href="http://www.cs.berkeley.edu/~murphyk/Bayes/kalman.html">
+linear dynamical system</a> (LDS).
+A DBN can be converted to an LDS if all the hidden nodes are linear-Gaussian
+and if they are all persistent. In this case, you can use
+<tt>kalman_inf_engine</tt>.
+For more general linear-gaussian models, you can use
+<tt>jtree_dbn_inf_engine</tt> or <tt>jtree_unrolled_dbn_inf_engine</tt>.
+
+<p>
+For nonlinear systems with Gaussian noise, the unscented Kalman filter (UKF),
+due to Julier and Uhlmann, is far superior to the well-known extended Kalman
+filter (EKF), both in theory and practice.
+<!--
+See
+<A HREF="http://phoebe.robots.ox.ac.uk/default.html">"A General Method for 
+Approximating Nonlinear Transformations of 
+Probability Distributions"</A>.
+(If the above link is down,
+try <a href="http://www.ece.ogi.edu/~ericwan/pubs.html">Eric Wan's</a>
+page, who has done a lot of work on the UKF.)
+<p>
+-->
+The key idea of the UKF is that it is easier to estimate a Gaussian distribution
+from a set of points than to approximate an arbitrary non-linear
+function.
+We start with points that are plus/minus sigma away from the mean along
+each dimension, and then pipe them through the nonlinearity, and
+then fit a Gaussian to the transformed points. 
+(No need to compute Jacobians, unlike the EKF!)
+
+<p>
+For systems with non-Gaussian noise, I recommend
+<a href="http://www.cs.berkeley.edu/~jfgf/smc/">Particle
+filtering</a> (PF), which is a popular sequential Monte Carlo technique.
+
+<p>
+The EKF can be used as a proposal distribution for a PF.
+This method is better than either one alone.
+See <a href="http://www.cs.berkeley.edu/~jfgf/upf.ps.gz">The Unscented Particle Filter</a>,
+by R van der Merwe, A Doucet, JFG de Freitas and E Wan, May 2000.
+<a href="http://www.cs.berkeley.edu/~jfgf/software.html">Matlab
+software</a> for the UPF is also available.
+<p>
+Note: none of this software is part of BNT.
+
+
+
+<h1><a name="learn">Learning</h1>
+
+Learning in DBNs can be done online or offline.
+Currently only offline learning is implemented in BNT.
+
+
+<h2><a name="param_learn">Parameter learning</h2>
+
+Offline parameter learning is very similar to learning in static networks,
+except now the training data is a cell-array of 2D cell-arrays.
+For example,
+cases{l}{i,t} is the value of node i in slice t in sequence l, or []
+if unobserved.
+Each sequence can be a different length, and may have missing values
+in arbitrary locations.
+Here is a typical code fragment for using EM.
+<pre>
+ncases = 2;
+cases = cell(1, ncases);
+for i=1:ncases
+  ev = sample_dbn(bnet, T);
+  cases{i} = cell(ss,T);
+  cases{i}(onodes,:) = ev(onodes, :);
+end
+[bnet2, LLtrace] = learn_params_dbn_em(engine, cases, 'max_iter', 10);
+</pre>
+If the observed node is vector-valued and stored in an OxT array, you
+need to assign each vector to a single cell, as in the following
+example.
+<pre>
+data = [xpos(:)'; ypos(:)']; 
+ncases = 1;
+cases = cell(1, ncases);
+onodes = bnet.observed;
+for i=1:ncases
+  cases{i} = cell(ss,T);
+  cases{i}(onodes,:) = num2cell(data(:,1:T), 1);
+end
+</pre>
+<p>
+For a complete code listing of how to do EM in a simple DBN, click
+<a href="dbn_hmm_demo.m">here</a>.
+
+<h2><a name="struct_learn">Structure learning</h2>
+
+There is currently only one structure learning algorithm for DBNs.
+This assumes all nodes are tabular and observed, and that there are
+no intra-slice connections. Hence we can find the optimal set of
+parents for each node separately, without worrying about directed
+cycles or node orderings.
+The function is called as follows
+<pre>
+inter = learn_struct_dbn_reveal(cases, ns, max_fan_in, penalty)
+</pre>
+A full example is given in BNT/examples/dynamic/reveal1.m.
+Setting the penalty term to 0 gives the maximum likelihood model; this
+is equivalent to maximizing the mutual information between parents and
+child (in the bioinformatics community, this is known as the REVEAL
+algorithm). A non-zero penalty invokes the BIC criterion, which
+lessens the chance of overfitting. 
+<p>
+<a href="http://www.bioss.sari.ac.uk/~dirk/software/DBmcmc/">
+Dirk Husmeier has extended MCMC model selection to DBNs</a>.
+
+</BODY>
diff --git a/sourcecodes/bnt-master/docs/usage_sf.html b/sourcecodes/bnt-master/docs/usage_sf.html
new file mode 100644
index 00000000..7fc3d2c5
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/usage_sf.html
@@ -0,0 +1,3242 @@
+<HEAD>
+<TITLE>How to use the Bayes Net Toolbox</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF">
+<!-- white background is better for the pictures and equations -->
+
+<h1>How to use the Bayes Net Toolbox</h1>
+
+This documentation was last updated on 7 June 2004.
+<br>
+Click <a href="changelog.html">here</a> for a list of changes made to
+BNT.
+<br>
+Click 
+<a href="http://bnt.insa-rouen.fr/">here</a>
+for a French version of this documentation (which might not
+be up-to-date).
+<br>
+Update 23 May 2005:
+Philippe LeRay has written
+a
+<a href="http://banquiseasi.insa-rouen.fr/projects/bnt-editor/">
+BNT GUI</a>
+and
+<a href="http://banquiseasi.insa-rouen.fr/projects/bnt-slp/">
+BNT Structure Learning Package</a>.
+
+<p>
+
+<ul>
+<li> <a href="#install">Installation</a>
+<ul>
+<li> <a href="#install">Installing the Matlab code</a>
+<li> <a href="#installC">Installing the C code</a>
+<li> <a href="../matlab_tips.html">Useful Matlab tips</a>.
+</ul>
+
+<li> <a href="#basics">Creating your first Bayes net</a>
+  <ul>
+  <li> <a href="#basics">Creating a model by hand</a>
+  <li> <a href="#file">Loading a model from a file</a>
+  <li> <a href="http://bnt.insa-rouen.fr/ajouts.html">Creating a model using a GUI</a>
+  </ul>
+
+<li> <a href="#inference">Inference</a>
+  <ul>
+  <li> <a href="#marginal">Computing marginal distributions</a>
+  <li> <a href="#joint">Computing joint distributions</a>
+  <li> <a href="#soft">Soft/virtual evidence</a>
+  <li> <a href="#mpe">Most probable explanation</a>
+  </ul>
+
+<li> <a href="#cpd">Conditional Probability Distributions</a>
+  <ul>
+  <li> <a href="#tabular">Tabular (multinomial) nodes</a>
+  <li> <a href="#noisyor">Noisy-or nodes</a>
+  <li> <a href="#deterministic">Other (noisy) deterministic nodes</a>
+  <li> <a href="#softmax">Softmax (multinomial logit) nodes</a>
+  <li> <a href="#mlp">Neural network nodes</a>
+  <li> <a href="#root">Root nodes</a>
+  <li> <a href="#gaussian">Gaussian nodes</a>
+  <li> <a href="#glm">Generalized linear model nodes</a>
+  <li> <a href="#dtree">Classification/regression tree nodes</a>
+  <li> <a href="#nongauss">Other continuous distributions</a>
+  <li> <a href="#cpd_summary">Summary of CPD types</a>
+  </ul>
+
+<li> <a href="#examples">Example models</a>
+  <ul>
+  <li> <a
+  href="http://www.media.mit.edu/wearables/mithril/BNT/mixtureBNT.txt">
+Gaussian mixture models</a>
+  <li> <a href="#pca">PCA, ICA, and all that</a>
+  <li> <a href="#mixep">Mixtures of experts</a>
+  <li> <a href="#hme">Hierarchical mixtures of experts</a>
+  <li> <a href="#qmr">QMR</a>
+  <li> <a href="#cg_model">Conditional Gaussian models</a>
+  <li> <a href="#hybrid">Other hybrid models</a>
+  </ul>
+
+<li> <a href="#param_learning">Parameter learning</a>
+  <ul>
+  <li> <a href="#load_data">Loading data from a file</a>
+  <li> <a href="#mle_complete">Maximum likelihood parameter estimation from complete data</a>
+  <li> <a href="#prior">Parameter priors</a>
+  <li> <a href="#bayes_learn">(Sequential) Bayesian parameter updating from complete data</a>
+  <li> <a href="#em">Maximum likelihood parameter estimation with  missing values (EM)</a>
+  <li> <a href="#tying">Parameter tying</a>
+  </ul>
+
+<li> <a href="#structure_learning">Structure learning</a>
+  <ul>
+  <li> <a href="#enumerate">Exhaustive search</a>
+  <li> <a href="#K2">K2</a>
+  <li> <a href="#hill_climb">Hill-climbing</a>
+  <li> <a href="#mcmc">MCMC</a>
+  <li> <a href="#active">Active learning</a>
+  <li> <a href="#struct_em">Structural EM</a>
+  <li> <a href="#graphdraw">Visualizing the learned graph  structure</a>
+  <li> <a href="#constraint">Constraint-based methods</a>
+  </ul>
+
+
+<li> <a href="#engines">Inference engines</a>
+  <ul>
+  <li> <a href="#jtree">Junction tree</a>
+  <li> <a href="#varelim">Variable elimination</a>
+  <li> <a href="#global">Global inference methods</a>
+  <li> <a href="#quickscore">Quickscore</a>
+  <li> <a href="#belprop">Belief propagation</a>
+  <li> <a href="#sampling">Sampling (Monte Carlo)</a>
+  <li> <a href="#engine_summary">Summary of inference engines</a>
+  </ul>
+
+
+<li> <a href="#influence">Influence diagrams/ decision making</a>
+
+
+<li> <a href="usage_dbn.html">DBNs, HMMs, Kalman filters and all that</a>
+</ul>
+
+</ul>
+
+
+
+
+<h1><a name="install">Installation</h1>
+
+<h2><a name="installM">Installing the Matlab code</h2>
+
+<ul>
+<li> <a href="bnt_download.html">Download</a> the FullBNT.zip file.
+
+<p>
+<li> Unpack the file. In Unix, type
+<!--"tar xvf BNT.tar".-->
+"unzip FullBNT.zip".
+In Windows, use
+a program like <a href="http://www.winzip.com">Winzip</a>. This will
+create a directory called FullBNT, which contains BNT and other libraries.
+(Files ending in ~ or # are emacs backup files, and can be ignored.)
+
+<p>
+<li> Read the file <tt>BNT/README.txt</tt> to make sure the date
+matches the one on the top of <a href=bnt.html>the BNT home page</a>.
+If not, you may need to press 'refresh' on your browser, and download
+again, to get the most recent version.
+
+<p>
+<li> <b>Edit the file "FullBNT/BNT/add_BNT_to_path.m"</b> so it contains the correct
+pathname.
+For example, in Windows,
+I download FullBNT.zip into C:\kmurphy\matlab, and 
+then ensure the second lines reads
+<pre>
+BNT_HOME = 'C:\kmurphy\matlab\FullBNT';
+</pre>
+
+<p>
+<li> Start up Matlab.
+
+<p>
+<li> Type "ver" at the Matlab prompt (">>").
+<b>You need Matlab version 5.2 or newer to run BNT</b>.
+(Versions 5.0 and 5.1 have a memory leak which seems to sometimes
+crash BNT.)
+<b>BNT will not run on Octave</b>.
+
+<p>
+<li> Move to the BNT directory.
+For example, in Windows, I type
+<pre>
+>> cd C:\kpmurphy\matlab\FullBNT\BNT
+</pre>
+
+<p>
+<li> Type "add_BNT_to_path".
+This executes the command
+<tt>addpath(genpath(BNT_HOME))</tt>,
+which adds all directories below FullBNT to the matlab path.
+
+<p>
+<li> Type "test_BNT".
+
+If all goes well, this will produce a bunch of numbers and maybe some
+warning messages (which you can ignore), but no error messages.
+(The warnings should only be of the form
+"Warning: Maximum number of iterations has been exceeded", and are
+produced by Netlab.)
+
+<p>
+<li> Problems? Did you remember to
+<b>Edit the file "FullBNT/BNT/add_BNT_to_path.m"</b> so it contains
+the right path??
+
+<p>
+<li> <a href="http://groups.yahoo.com/group/BayesNetToolbox/join">
+Join the BNT email list</a>
+
+<p>
+<li>Read
+<a href="../matlab_tips.html">some useful Matlab tips</a>.
+<!--
+For instance, this explains how to create a startup file, which can be
+used to set your path variable automatically, so you can avoid having
+to type the above commands every time.
+-->
+
+</ul>
+
+
+
+<h2><a name="installC">Installing the C code</h2>
+
+Some BNT functions also have C implementations.
+<b>It is not necessary to install the C code</b>, but it can result in a speedup
+of a factor of 2-5.
+To install all the C code, 
+edit installC_BNT.m so it contains the right path,
+then type <tt>installC_BNT</tt>.
+(Ignore warnings of the form 'invalid white space character in directive'.)
+To uninstall all the C code,
+edit uninstallC_BNT.m so it contains the right path,
+then type <tt>uninstallC_BNT</tt>.
+For an up-to-date list of the files which have C implementations, see
+BNT/installC_BNT.m.
+
+<p>
+mex is a script that lets you call C code from Matlab - it does not compile matlab to
+C (see mcc below).
+If your C/C++ compiler  is set up correctly, mex should work out of
+the box.
+If not, you might need to type
+<p>
+<tt> mex -setup</tt>
+<p>
+before calling installC.
+<p>
+To make mex call gcc on Windows,
+you must install <a
+href="http://www.mrc-cbu.cam.ac.uk/Imaging/gnumex20.html">gnumex</a>.
+You can use the <a href="http://www.mingw.org/">minimalist GNU for
+Windows</a> version of gcc, or
+the <a href="http://sources.redhat.com/cygwin/">cygwin</a> version.
+<p>
+In general, typing 
+'mex foo.c' from inside Matlab creates a file called
+'foo.mexglx' or 'foo.dll' (the exact file
+extension is system dependent - on Linux it is 'mexglx', on Windows it is '.dll').
+The resulting file will hide the original 'foo.m' (if it existed), i.e., 
+typing 'foo' at the prompt will call the compiled C version.
+To reveal the original matlab version, just delete foo.mexglx (this is
+what uninstallC does).
+<p>
+Sometimes it takes time for Matlab to realize that the file has
+changed from matlab to C or vice versa; try typing 'clear all' or
+restarting Matlab to refresh it.
+To find out which version of a file you are running, type
+'which foo'.
+<p>
+<a href="http://www.mathworks.com/products/compiler">mcc</a>, the
+Matlab to C compiler, is a separate product, 
+and is quite different from mex. It does not yet support
+objects/classes, which is why we can't compile all of BNT to C automatically.
+Also, hand-written C code is usually much
+better than the C code generated by mcc.
+
+
+<p>
+Acknowledgements:
+Most of the C code (e.g., for jtree and dpot) was written by Wei Hu;
+the triangulation C code was written by Ilya Shpitser;
+the Gibbs sampling C code (for discrete nodes) was written by Bhaskara
+Marthi.
+
+
+
+<h1><a name="basics">Creating your first Bayes net</h1>
+
+To define a Bayes net, you must specify the graph structure and then
+the parameters. We look at each in turn, using a simple example
+(adapted from Russell and
+Norvig, "Artificial Intelligence: a Modern Approach", Prentice Hall,
+1995, p454).
+
+
+<h2>Graph structure</h2>
+
+
+Consider the following network.
+
+<p>
+<center>
+<IMG SRC="Figures/sprinkler.gif">
+</center>
+<p>
+
+<P>
+To specify this directed acyclic graph (dag), we create an adjacency matrix:
+<PRE>
+N = 4; 
+dag = zeros(N,N);
+C = 1; S = 2; R = 3; W = 4;
+dag(C,[R S]) = 1;
+dag(R,W) = 1;
+dag(S,W)=1;
+</PRE>
+<P>
+We have numbered the nodes as follows:
+Cloudy = 1, Sprinkler = 2, Rain = 3, WetGrass = 4.
+<b>The nodes must always be numbered in topological order, i.e.,
+ancestors before descendants.</b>
+For a more complicated graph, this is a little inconvenient: we will
+see how to get around this <a href="usage_dbn.html#bat">below</a>.
+<p>
+In Matlab 6, you can use logical arrays instead of double arrays,
+which are 4 times smaller:
+<pre>
+dag = false(N,N);
+dag(C,[R S]) = true;
+...
+</pre>
+However, <b>some graph functions (eg acyclic) do not work on
+logical arrays</b>!
+<p>
+A preliminary attempt to make a <b>GUI</b>
+has been writte by Philippe LeRay and can be downloaded
+from <a href="http://bnt.insa-rouen.fr/ajouts.html">here</a>.
+<p>
+You can visualize the resulting  graph structure using
+the methods discussed <a href="#graphdraw">below</a>.
+
+<h2>Creating the Bayes net shell</h2>
+
+In addition to specifying the graph structure,
+we must specify the size and type of each node.
+If a node is discrete, its size is the
+number of possible values
+each node can take on; if a node is continuous,
+it can be a vector, and its size is the length of this vector.
+In this case, we will assume all nodes are discrete and binary.
+<PRE>
+discrete_nodes = 1:N;
+node_sizes = 2*ones(1,N); 
+</pre>
+If the nodes were not binary, you could type e.g., 
+<pre>
+node_sizes = [4 2 3 5];
+</pre>
+meaning that Cloudy has 4 possible values, 
+Sprinkler has 2 possible values, etc.
+Note that these are cardinal values, not ordinal, i.e., 
+they are not ordered in any way, like 'low', 'medium', 'high'.
+<p>
+We are now ready to make the Bayes net:
+<pre>
+bnet = mk_bnet(dag, node_sizes, 'discrete', discrete_nodes);
+</PRE>
+By default, all nodes are assumed to be discrete, so we can also just
+write
+<pre>
+bnet = mk_bnet(dag, node_sizes);
+</PRE>
+You may also specify which nodes will be observed.
+If you don't know, or if this not fixed in advance,
+just use the empty list (the default).
+<pre>
+onodes = [];
+bnet = mk_bnet(dag, node_sizes, 'discrete', discrete_nodes, 'observed', onodes);
+</PRE>
+Note that optional arguments are specified using a name/value syntax.
+This is common for many BNT functions.
+In general, to find out more about a function (e.g., which optional
+arguments it takes), please see its
+documentation string by typing
+<pre>
+help mk_bnet
+</pre>
+See also other <a href="matlab_tips.html">useful Matlab tips</a>.
+<p>
+It is possible to associate names with nodes, as follows:
+<pre>
+bnet = mk_bnet(dag, node_sizes, 'names', {'cloudy','S','R','W'}, 'discrete', 1:4);
+</pre>
+You can then refer to a node by its name:
+<pre>
+C = bnet.names('cloudy'); % bnet.names is an associative array
+bnet.CPD{C} = tabular_CPD(bnet, C, [0.5 0.5]);
+</pre>
+This feature uses my own associative array class.
+
+
+<h2><a name="cpt">Parameters</h2>
+
+A model consists of the graph structure and the parameters.
+The parameters are represented by CPD objects (CPD = Conditional
+Probability Distribution), which define the probability distribution
+of a node given its parents.
+(We will use the terms "node" and "random variable" interchangeably.)
+The simplest kind of CPD is a table (multi-dimensional array), which
+is suitable when all the nodes are discrete-valued. Note that the discrete
+values are not assumed to be ordered in any way; that is, they
+represent categorical quantities, like male and female, rather than
+ordinal quantities, like low, medium and high.
+(We will discuss CPDs in more detail <a href="#cpd">below</a>.)
+<p>
+Tabular CPDs, also called CPTs (conditional probability tables),
+are stored as multidimensional arrays, where the dimensions
+are arranged in the same order as the nodes, e.g., the CPT for node 4
+(WetGrass) is indexed by Sprinkler (2), Rain (3) and then WetGrass (4) itself.
+Hence the child is always the last dimension.
+If a node has no parents, its CPT is a column vector representing its
+prior.
+Note that in Matlab (unlike C), arrays are indexed
+from 1, and are layed out in memory such that the first index toggles
+fastest, e.g., the CPT for node 4 (WetGrass) is as follows
+<P>
+<P><IMG ALIGN=BOTTOM SRC="Figures/CPTgrass.gif"><P>
+<P>
+where we have used the convention that false==1, true==2.
+We can create this CPT in Matlab as follows
+<PRE>
+CPT = zeros(2,2,2);
+CPT(1,1,1) = 1.0;
+CPT(2,1,1) = 0.1;
+...
+</PRE>
+Here is an easier way:
+<PRE>
+CPT = reshape([1 0.1 0.1 0.01 0 0.9 0.9 0.99], [2 2 2]);
+</PRE>
+In fact, we don't need to reshape the array, since the CPD constructor
+will do that for us. So we can just write
+<pre>
+bnet.CPD{W} = tabular_CPD(bnet, W, 'CPT', [1 0.1 0.1 0.01 0 0.9 0.9 0.99]);
+</pre>
+The other nodes are created similarly (using the old syntax for
+optional parameters)
+<PRE>
+bnet.CPD{C} = tabular_CPD(bnet, C, [0.5 0.5]);
+bnet.CPD{R} = tabular_CPD(bnet, R, [0.8 0.2 0.2 0.8]);
+bnet.CPD{S} = tabular_CPD(bnet, S, [0.5 0.9 0.5 0.1]);
+bnet.CPD{W} = tabular_CPD(bnet, W, [1 0.1 0.1 0.01 0 0.9 0.9 0.99]);
+</PRE>
+
+
+<h2><a name="rnd_cpt">Random Parameters</h2>
+
+If we do not specify the CPT, random parameters will be
+created, i.e., each "row" of the CPT will be drawn from the uniform distribution.
+To ensure repeatable results, use
+<pre>
+rand('state', seed);
+randn('state', seed);
+</pre>
+To control the degree of randomness (entropy),
+you can sample each row of the CPT from a Dirichlet(p,p,...) distribution.
+If p << 1, this encourages "deterministic" CPTs (one entry near 1, the rest near 0).
+If p = 1, each entry is drawn from U[0,1].
+If p >> 1, the entries will all be near 1/k, where k is the arity of
+this node, i.e., each row will be nearly uniform.
+You can do this as follows, assuming this node
+is number i, and ns is the node_sizes.
+<pre>
+k = ns(i);
+ps = parents(dag, i);
+psz = prod(ns(ps));
+CPT = sample_dirichlet(p*ones(1,k), psz);
+bnet.CPD{i} = tabular_CPD(bnet, i, 'CPT', CPT);
+</pre>
+
+
+<h2><a name="file">Loading a network from a file</h2>
+
+If you already have a Bayes net represented in the XML-based
+<a href="http://www.cs.cmu.edu/afs/cs/user/fgcozman/www/Research/InterchangeFormat/">
+Bayes Net Interchange Format (BNIF)</a> (e.g., downloaded from the 
+<a
+href="http://www.cs.huji.ac.il/labs/compbio/Repository">
+Bayes Net repository</a>),
+you can convert it to BNT format using
+the 
+<a href="http://www.digitas.harvard.edu/~ken/bif2bnt/">BIF-BNT Java
+program</a> written by Ken Shan.
+(This is not necessarily up-to-date.)
+<p>
+<b>It is currently not possible to save/load a BNT matlab object to
+file</b>, but this is easily fixed if you modify all the constructors
+for all the classes (see matlab documentation).
+
+<h2>Creating a model using a GUI</h2>
+
+Click <a href="http://bnt.insa-rouen.fr/ajouts.html">here</a>.
+
+
+
+<h1><a name="inference">Inference</h1>
+
+Having created the BN, we can now use it for inference.
+There are many different algorithms for doing inference in Bayes nets,
+that make different tradeoffs between speed, 
+complexity, generality, and accuracy.
+BNT therefore offers a variety of different inference
+"engines". We will discuss these
+in more detail <a href="#engines">below</a>.
+For now, we will use the junction tree
+engine, which is the mother of all exact inference algorithms.
+This can be created as follows.
+<pre>
+engine = jtree_inf_engine(bnet);
+</pre>
+The other engines have similar constructors, but might take
+additional, algorithm-specific parameters.
+All engines are used in the same way, once they have been created.
+We illustrate this in the following sections.
+
+
+<h2><a name="marginal">Computing marginal distributions</h2>
+
+Suppose we want to compute the probability that the sprinker was on
+given that the grass is wet.
+The evidence consists of the fact that W=2. All the other nodes
+are hidden (unobserved). We can specify this as follows.
+<pre>
+evidence = cell(1,N);
+evidence{W} = 2;
+</pre>
+We use a 1D cell array instead of a vector to
+cope with the fact that nodes can be vectors of different lengths.
+In addition, the value [] can be used
+to denote 'no evidence', instead of having to specify the observation
+pattern as a separate argument.
+(Click <a href="cellarray.html">here</a> for a quick tutorial on cell
+arrays in matlab.)
+<p>
+We are now ready to add the evidence to the engine.
+<pre>
+[engine, loglik] = enter_evidence(engine, evidence);
+</pre>
+The behavior of this function is algorithm-specific, and is discussed
+in more detail <a href="#engines">below</a>.
+In the case of the jtree engine,
+enter_evidence implements a two-pass message-passing scheme.
+The first return argument contains the modified engine, which
+incorporates the evidence. The second return argument contains the
+log-likelihood of the evidence. (Not all engines are capable of
+computing the log-likelihood.)
+<p>
+Finally, we can compute p=P(S=2|W=2) as follows.
+<PRE>
+marg = marginal_nodes(engine, S);
+marg.T
+ans =
+      0.57024
+      0.42976
+p = marg.T(2);
+</PRE>
+We see that p = 0.4298.
+<p>
+Now let us add the evidence that it was raining, and see what
+difference it makes.
+<PRE>
+evidence{R} = 2;
+[engine, loglik] = enter_evidence(engine, evidence);
+marg = marginal_nodes(engine, S);
+p = marg.T(2);
+</PRE>
+We find that p = P(S=2|W=2,R=2) = 0.1945,
+which is lower than
+before, because the rain can ``explain away'' the
+fact that the grass is wet.
+<p>
+You can plot a marginal distribution over a discrete variable
+as a barchart using the built 'bar' function:
+<pre>
+bar(marg.T)
+</pre>
+This is what it looks like
+
+<p>
+<center>
+<IMG SRC="Figures/sprinkler_bar.gif">
+</center>
+<p>
+
+<h2><a name="observed">Observed nodes</h2>
+
+What happens if we ask for the marginal on an observed node, e.g. P(W|W=2)?
+An observed discrete node effectively only has 1 value (the observed
+      one) --- all other values would result in 0 probability.
+For efficiency, BNT treats observed (discrete) nodes as if they were
+      set to 1, as we see below:
+<pre>
+evidence = cell(1,N);
+evidence{W} = 2;
+engine = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, W);
+m.T
+ans =
+     1
+</pre>
+This can get a little confusing, since we assigned W=2.
+So we can ask BNT to add the evidence back in by passing in an optional argument:
+<pre>
+m = marginal_nodes(engine, W, 1);
+m.T
+ans =
+     0
+     1
+</pre>
+This shows that P(W=1|W=2) = 0 and P(W=2|W=2) = 1.
+
+
+
+<h2><a name="joint">Computing joint distributions</h2>
+
+We can compute the joint probability on a set of nodes as in the
+following example.
+<pre>
+evidence = cell(1,N);
+[engine, ll] = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, [S R W]);
+</pre>
+m is a structure. The 'T' field is a multi-dimensional array (in
+this case, 3-dimensional) that contains the joint probability
+distribution on the specified nodes.
+<pre>
+>> m.T
+ans(:,:,1) =
+    0.2900    0.0410
+    0.0210    0.0009
+ans(:,:,2) =
+         0    0.3690
+    0.1890    0.0891
+</pre>
+We see that P(S=1,R=1,W=2) = 0, since it is impossible for the grass
+to be wet if both the rain and sprinkler are off.
+<p>
+Let us now add some evidence to R.
+<pre>
+evidence{R} = 2;
+[engine, ll] = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, [S R W])
+m = 
+    domain: [2 3 4]
+         T: [2x1x2 double]
+>> m.T
+m.T
+ans(:,:,1) =
+    0.0820
+    0.0018
+ans(:,:,2) =
+    0.7380
+    0.1782
+</pre>
+The joint T(i,j,k) = P(S=i,R=j,W=k|evidence)
+should have T(i,1,k) = 0 for all i,k, since R=1 is incompatible
+with the evidence that R=2.
+Instead of creating large tables with many 0s, BNT sets the effective
+size of observed (discrete) nodes to 1, as explained above.
+This is why m.T has size 2x1x2.
+To get a 2x2x2 table, type
+<pre>
+m = marginal_nodes(engine, [S R W], 1)
+m = 
+    domain: [2 3 4]
+         T: [2x2x2 double]
+>> m.T
+m.T
+ans(:,:,1) =
+            0        0.082
+            0       0.0018
+ans(:,:,2) =
+            0        0.738
+            0       0.1782
+</pre>
+
+<p>
+Note: It is not always possible to compute the joint on arbitrary
+sets of nodes: it depends on which inference engine you use, as discussed 
+in more detail <a href="#engines">below</a>. 
+
+
+<h2><a name="soft">Soft/virtual evidence</h2>
+
+Sometimes a node is not observed, but we have some distribution over
+its possible values; this is often called "soft" or "virtual"
+evidence.
+One can use this as follows
+<pre>
+[engine, loglik] = enter_evidence(engine, evidence, 'soft', soft_evidence);
+</pre>
+where soft_evidence{i} is either [] (if node i has no soft evidence)
+or is a vector representing the probability distribution over i's
+possible values.
+For example, if we don't know i's exact value, but we know its
+likelihood ratio is 60/40, we can write evidence{i} = [] and
+soft_evidence{i} = [0.6 0.4].
+<p>
+Currently only jtree_inf_engine supports this option.
+It assumes that all hidden nodes, and all nodes for
+which we have soft evidence, are discrete.
+For a longer example, see BNT/examples/static/softev1.m. 
+
+
+<h2><a name="mpe">Most probable explanation</h2>
+
+To compute the most probable explanation (MPE) of the evidence (i.e.,
+the most probable assignment, or a mode of the joint), use
+<pre>
+[mpe, ll] = calc_mpe(engine, evidence);     
+</pre>
+mpe{i} is the most likely value of node i.
+This calls enter_evidence with the 'maximize' flag set to 1, which
+causes the engine to do max-product instead of sum-product.
+The resulting max-marginals are then thresholded.
+If there is more than one maximum probability assignment, we must take 
+    care to break ties in a consistent manner (thresholding the
+    max-marginals may give the wrong result). To force this behavior,
+    type
+<pre>
+[mpe, ll] = calc_mpe(engine, evidence, 1);     
+</pre>
+Note that computing the MPE is someties called abductive reasoning.
+    
+<p>
+You can also use <tt>calc_mpe_bucket</tt> written by Ron Zohar,
+that does a forwards max-product pass, and then a backwards traceback
+pass, which is how Viterbi is traditionally implemented.
+
+
+
+<h1><a name="cpd">Conditional Probability Distributions</h1>
+
+A Conditional Probability Distributions (CPD)
+defines P(X(i) | X(Pa(i))), where X(i) is the i'th node, and X(Pa(i))
+are the parents of node i. There are many ways to represent this
+distribution, which depend in part on whether X(i) and X(Pa(i)) are
+discrete, continuous, or a combination.
+We will discuss various representations below.
+
+
+<h2><a name="tabular">Tabular nodes</h2>
+
+If the CPD is represented as a table (i.e., if it is a multinomial
+distribution), it has a number of parameters that is exponential in
+the number of parents. See the example <a href="#cpt">above</a>.
+
+
+<h2><a name="noisyor">Noisy-or nodes</h2>
+
+A noisy-OR node is like a regular logical OR gate except that
+sometimes the effects of parents that are on get inhibited.
+Let the prob. that parent i gets inhibited be q(i).
+Then a node, C, with 2 parents, A and B, has the following CPD, where
+we use F and T to represent off and on (1 and 2 in BNT).
+<pre>
+A  B  P(C=off)      P(C=on)
+---------------------------
+F  F  1.0           0.0
+T  F  q(A)          1-q(A)
+F  T  q(B)          1-q(B)
+T  T  q(A)q(B)      q-q(A)q(B)
+</pre>
+Thus we see that the causes get inhibited independently.
+It is common to associate a "leak" node with a noisy-or CPD, which is
+like a parent that is always on. This can account for all other unmodelled
+causes which might turn the node on.
+<p>
+The noisy-or distribution is similar to the logistic distribution.
+To see this, let the nodes, S(i), have values in {0,1}, and let q(i,j)
+be the prob. that j inhibits i. Then
+<pre>
+Pr(S(i)=1 | parents(S(i))) = 1 - prod_{j} q(i,j)^S(j)
+</pre>
+Now define w(i,j) = -ln q(i,j) and rho(x) = 1-exp(-x). Then
+<pre>
+Pr(S(i)=1 | parents(S(i))) = rho(sum_j w(i,j) S(j))
+</pre>
+For a sigmoid node, we have
+<pre>
+Pr(S(i)=1 | parents(S(i))) = sigma(-sum_j w(i,j) S(j))
+</pre>
+where sigma(x) = 1/(1+exp(-x)). Hence they differ in the choice of
+the activation function (although both are monotonically increasing).
+In addition, in the case of a noisy-or, the weights are constrained to be
+positive, since they derive from probabilities q(i,j).
+In both cases, the number of parameters is <em>linear</em> in the
+number of parents, unlike the case of a multinomial distribution,
+where the number of parameters is exponential in the number of parents.
+We will see an example of noisy-OR nodes <a href="#qmr">below</a>.
+
+
+<h2><a name="deterministic">Other (noisy) deterministic nodes</h2>
+
+Deterministic CPDs for discrete random variables can be created using
+the deterministic_CPD class. It is also possible to 'flip' the output
+of the function with some probability, to simulate noise.
+The boolean_CPD class is just a special case of a
+deterministic CPD, where the parents and child are all binary.
+<p>
+Both of these classes are just "syntactic sugar" for the tabular_CPD
+class.
+
+
+
+<h2><a name="softmax">Softmax nodes</h2>
+
+If we have a discrete node with a continuous parent,
+we can define its CPD using a softmax function 
+(also known as the multinomial logit function).
+This acts like a soft thresholding operator, and is defined as follows:
+<pre>
+                    exp(w(:,i)'*x + b(i)) 
+Pr(Q=i | X=x)  =  -----------------------------
+                  sum_j   exp(w(:,j)'*x + b(j))
+
+</pre>
+The parameters of a softmax node, w(:,i) and b(i), i=1..|Q|, have the
+following interpretation: w(:,i)-w(:,j) is the normal vector to the
+decision boundary between classes i and j,
+and b(i)-b(j) is its offset (bias). For example, suppose
+X is a 2-vector, and Q is binary. Then
+<pre>
+w = [1 -1;
+     0 0];
+
+b = [0 0];
+</pre>
+means class 1 are points in the 2D plane with positive x coordinate,
+and class 2 are points in the 2D plane with negative x coordinate.
+If w has large magnitude, the decision boundary is sharp, otherwise it
+is soft.
+In the special case that Q is binary (0/1), the softmax function reduces to the logistic
+(sigmoid) function.
+<p>
+Fitting a softmax function can be done using the iteratively reweighted
+least squares (IRLS) algorithm.
+We use the implementation from
+<a href="http://www.ncrg.aston.ac.uk/netlab/">Netlab</a>.
+Note that since
+the softmax distribution is not in the exponential family, it does not
+have finite sufficient statistics, and hence we must store all the
+training data in uncompressed form.
+If this takes too much space, one should use online (stochastic) gradient
+descent (not implemented in BNT).
+<p>
+If a softmax node also has discrete parents,
+we use a different set of w/b parameters for each combination of
+parent values, as in the <a href="#gaussian">conditional linear
+Gaussian CPD</a>.
+This feature was implemented by Pierpaolo Brutti.
+He is currently extending it so that discrete parents can be treated
+as if they were continuous, by adding indicator variables to the X
+vector.
+<p>
+We will see an example of softmax nodes <a href="#mixexp">below</a>.
+
+
+<h2><a name="mlp">Neural network nodes</h2>
+
+Pierpaolo Brutti has implemented the mlp_CPD class, which uses a multi layer perceptron
+to implement a mapping from continuous parents to discrete children,
+similar to the softmax function.
+(If there are also discrete parents, it creates a mixture of MLPs.)
+It uses code from <a
+href="http://www.ncrg.aston.ac.uk/netlab/">Netlab</a>.
+This is work in progress.
+
+<h2><a name="root">Root nodes</h2>
+
+A root node has no parents and no parameters; it can be used to model
+an observed, exogeneous input variable, i.e., one which is "outside"
+the model. 
+This is useful for conditional density models.
+We will see an example of root nodes <a href="#mixexp">below</a>.
+
+
+<h2><a name="gaussian">Gaussian nodes</h2>
+
+We now consider a distribution suitable for the continuous-valued nodes.
+Suppose the node is called Y, its continuous parents (if any) are
+called X, and its discrete parents (if any) are called Q.
+The distribution on Y is defined as follows:
+<pre>
+- no parents: Y ~ N(mu, Sigma)
+- cts parents : Y|X=x ~ N(mu + W x, Sigma)
+- discrete parents: Y|Q=i ~ N(mu(:,i), Sigma(:,:,i))
+- cts and discrete parents: Y|X=x,Q=i ~ N(mu(:,i) + W(:,:,i) * x, Sigma(:,:,i))
+</pre>
+where N(mu, Sigma) denotes a Normal distribution with mean mu and
+covariance Sigma. Let |X|, |Y| and |Q| denote the sizes of X, Y and Q
+respectively.
+If there are no discrete parents, |Q|=1; if there is
+more than one, then |Q| = a vector of the sizes of each discrete parent.
+If there are no continuous parents, |X|=0; if there is more than one,
+then |X| = the sum of their sizes.
+Then mu is a |Y|*|Q| vector, Sigma is a |Y|*|Y|*|Q| positive
+semi-definite matrix, and W is a |Y|*|X|*|Q| regression (weight)
+matrix.
+<p>
+We can create a Gaussian node with random parameters as follows.
+<pre>
+bnet.CPD{i} = gaussian_CPD(bnet, i);
+</pre>
+We can specify the value of one or more of the parameters as in the
+following example, in which |Y|=2, and |Q|=1.
+<pre>
+bnet.CPD{i} = gaussian_CPD(bnet, i, 'mean', [0; 0], 'weights', randn(Y,X), 'cov', eye(Y));
+</pre>
+<p>
+We will see an example of conditional linear Gaussian nodes <a
+href="#cg_model">below</a>. 
+<p>
+<b>When learning Gaussians from data</b>, it is helpful to ensure the
+data has a small magnitde
+(see e.g., KPMstats/standardize) to prevent numerical problems.
+Unless you have a lot of data, it is also a very good idea to use
+diagonal instead of full covariance matrices.
+(BNT does not currently support spherical covariances, although it
+would be easy to add, since  KPMstats/clg_Mstep supports this option;
+you would just need to modify gaussian_CPD/update_ess to accumulate
+weighted inner products.)
+
+
+
+<h2><a name="nongauss">Other continuous distributions</h2>
+
+Currently BNT does not support any CPDs for continuous nodes other
+than the Gaussian.
+However, you can use a mixture of Gaussians to
+approximate other continuous distributions. We will see some an example
+of this with the IFA model <a href="#pca">below</a>.
+
+
+<h2><a name="glm">Generalized linear model nodes</h2>
+
+In the future, we may incorporate some of the functionality of
+<a href =
+"http://www.sci.usq.edu.au/staff/dunn/glmlab/glmlab.html">glmlab</a>
+into BNT.
+
+
+<h2><a name="dtree">Classification/regression tree nodes</h2>
+
+We plan to add classification and regression trees to define CPDs for
+discrete and continuous nodes, respectively.
+Trees have many advantages: they are easy to interpret, they can do
+feature selection, they can
+handle discrete and continuous inputs, they do not make strong
+assumptions about the form of the distribution, the number of
+parameters can grow in a data-dependent way (i.e., they are
+semi-parametric), they can handle missing data, etc.
+However, they are not yet implemented.
+<!--
+Yimin Zhang is currently (Feb '02) implementing this.
+-->
+
+
+<h2><a name="cpd_summary">Summary of CPD types</h2>
+
+We list all the different types of CPDs supported by BNT.
+For each CPD, we specify if the child and parents can be discrete (D) or
+continuous (C) (Binary (B) nodes are a special case).
+We also specify which methods each class supports.
+If a method is inherited, the name of the  parent class is mentioned.
+If a parent class calls a child method, this is mentioned.
+<p>
+The <tt>CPD_to_CPT</tt> method converts a CPD to a table; this
+requires that the child and all parents are discrete.
+The CPT might be exponentially big...
+<tt>convert_to_table</tt> evaluates a CPD with evidence, and
+represents the the resulting potential as an array.
+This requires that the child is discrete, and any continuous parents
+are observed.
+<tt>convert_to_pot</tt> evaluates a CPD with evidence, and
+represents the resulting potential as a dpot, gpot, cgpot or upot, as
+requested. (d=discrete, g=Gaussian, cg = conditional Gaussian, u =
+utility).
+
+<p>
+When we sample a node, all the parents are observed.
+When we compute the (log) probability of a node, all the parents and
+the child are observed.
+<p>
+We also specify if the parameters are learnable.
+For learning with EM, we require
+the methods <tt>reset_ess</tt>, <tt>update_ess</tt> and
+<tt>maximize_params</tt>. 
+For learning from fully observed data, we require
+the method <tt>learn_params</tt>.
+By default, all classes inherit this from generic_CPD, which simply
+calls <tt>update_ess</tt> N times, once for each data case, followed
+by <tt>maximize_params</tt>, i.e., it is like EM, without the E step.
+Some classes implement a batch formula, which is quicker.
+<p>
+Bayesian learning means computing a posterior over the parameters
+given fully observed data.
+<p>
+Pearl means we implement the methods <tt>compute_pi</tt> and
+<tt>compute_lambda_msg</tt>, used by
+<tt>pearl_inf_engine</tt>, which runs on directed graphs.
+<tt>belprop_inf_engine</tt> only needs <tt>convert_to_pot</tt>.H
+The pearl methods can exploit special properties of the CPDs for
+computing the messages efficiently, whereas belprop does not.
+<p>
+The only method implemented by generic_CPD is <tt>adjustable_CPD</tt>,
+which is not shown, since it is not very interesting.
+
+
+<p>
+
+
+<table>
+<table border units = pixels><tr>
+<td align=center>Name
+<td align=center>Child
+<td align=center>Parents
+<td align=center>Comments
+<td align=center>CPD_to_CPT
+<td align=center>conv_to_table
+<td align=center>conv_to_pot
+<td align=center>sample
+<td align=center>prob
+<td align=center>learn
+<td align=center>Bayes
+<td align=center>Pearl
+
+
+<tr>
+<!-- Name--><td>
+<!-- Child--><td>
+<!-- Parents--><td>
+<!-- Comments--><td>
+<!-- CPD_to_CPT--><td>
+<!-- conv_to_table--><td>
+<!-- conv_to_pot--><td>
+<!-- sample--><td>
+<!-- prob--><td>
+<!-- learn--><td>
+<!-- Bayes--><td>
+<!-- Pearl--><td>
+
+<tr>
+<!-- Name--><td>boolean
+<!-- Child--><td>B
+<!-- Parents--><td>B
+<!-- Comments--><td>Syntactic sugar for tabular
+<!-- CPD_to_CPT--><td>-
+<!-- conv_to_table--><td>-
+<!-- conv_to_pot--><td>-
+<!-- sample--><td>-
+<!-- prob--><td>-
+<!-- learn--><td>-
+<!-- Bayes--><td>-
+<!-- Pearl--><td>-
+
+<tr>
+<!-- Name--><td>deterministic
+<!-- Child--><td>D
+<!-- Parents--><td>D
+<!-- Comments--><td>Syntactic sugar for tabular
+<!-- CPD_to_CPT--><td>-
+<!-- conv_to_table--><td>-
+<!-- conv_to_pot--><td>-
+<!-- sample--><td>-
+<!-- prob--><td>-
+<!-- learn--><td>-
+<!-- Bayes--><td>-
+<!-- Pearl--><td>-
+
+<tr>
+<!-- Name--><td>Discrete
+<!-- Child--><td>D
+<!-- Parents--><td>C/D
+<!-- Comments--><td>Virtual class
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>Calls CPD_to_CPT
+<!-- conv_to_pot--><td>Calls conv_to_table
+<!-- sample--><td>Calls conv_to_table
+<!-- prob--><td>Calls conv_to_table
+<!-- learn--><td>N
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+<tr>
+<!-- Name--><td>Gaussian
+<!-- Child--><td>C
+<!-- Parents--><td>C/D
+<!-- Comments--><td>-
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>N
+<!-- conv_to_pot--><td>Y
+<!-- sample--><td>Y
+<!-- prob--><td>Y
+<!-- learn--><td>Y
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+<tr>
+<!-- Name--><td>gmux
+<!-- Child--><td>C
+<!-- Parents--><td>C/D
+<!-- Comments--><td>multiplexer
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>N
+<!-- conv_to_pot--><td>Y
+<!-- sample--><td>N
+<!-- prob--><td>N
+<!-- learn--><td>N
+<!-- Bayes--><td>N
+<!-- Pearl--><td>Y
+
+
+<tr>
+<!-- Name--><td>MLP
+<!-- Child--><td>D
+<!-- Parents--><td>C/D
+<!-- Comments--><td>multi layer perceptron
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>Y
+<!-- conv_to_pot--><td>Inherits from discrete
+<!-- sample--><td>Inherits from discrete
+<!-- prob--><td>Inherits from discrete
+<!-- learn--><td>Y
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+
+<tr>
+<!-- Name--><td>noisy-or
+<!-- Child--><td>B
+<!-- Parents--><td>B
+<!-- Comments--><td>-
+<!-- CPD_to_CPT--><td>Y
+<!-- conv_to_table--><td>Inherits from discrete
+<!-- conv_to_pot--><td>Inherits from discrete
+<!-- sample--><td>Inherits from discrete
+<!-- prob--><td>Inherits from discrete
+<!-- learn--><td>N
+<!-- Bayes--><td>N
+<!-- Pearl--><td>Y
+
+
+<tr>
+<!-- Name--><td>root
+<!-- Child--><td>C/D
+<!-- Parents--><td>none
+<!-- Comments--><td>no params
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>N
+<!-- conv_to_pot--><td>Y
+<!-- sample--><td>Y
+<!-- prob--><td>Y
+<!-- learn--><td>N
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+
+<tr>
+<!-- Name--><td>softmax
+<!-- Child--><td>D
+<!-- Parents--><td>C/D
+<!-- Comments--><td>-
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>Y
+<!-- conv_to_pot--><td>Inherits from discrete
+<!-- sample--><td>Inherits from discrete
+<!-- prob--><td>Inherits from discrete
+<!-- learn--><td>Y
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+
+<tr>
+<!-- Name--><td>generic
+<!-- Child--><td>C/D
+<!-- Parents--><td>C/D
+<!-- Comments--><td>Virtual class
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>N
+<!-- conv_to_pot--><td>N
+<!-- sample--><td>N
+<!-- prob--><td>N
+<!-- learn--><td>N
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+
+<tr>
+<!-- Name--><td>Tabular
+<!-- Child--><td>D
+<!-- Parents--><td>D
+<!-- Comments--><td>-
+<!-- CPD_to_CPT--><td>Y
+<!-- conv_to_table--><td>Inherits from discrete
+<!-- conv_to_pot--><td>Inherits from discrete
+<!-- sample--><td>Inherits from discrete
+<!-- prob--><td>Inherits from discrete
+<!-- learn--><td>Y
+<!-- Bayes--><td>Y
+<!-- Pearl--><td>Y
+
+</table>
+
+
+
+<h1><a name="examples">Example models</h1>
+
+
+<h2>Gaussian mixture models</h2>
+
+Richard W. DeVaul has made a detailed tutorial on how to fit mixtures
+of Gaussians using BNT. Available
+<a href="http://www.media.mit.edu/wearables/mithril/BNT/mixtureBNT.txt">here</a>.
+
+
+<h2><a name="pca">PCA, ICA, and all that </h2>
+
+In Figure (a) below, we show how Factor Analysis can be thought of as a
+graphical model. Here, X has an N(0,I) prior, and
+Y|X=x ~ N(mu + Wx, Psi),
+where Psi is diagonal and W is called the "factor loading matrix".
+Since the noise on both X and Y is diagonal, the components of these
+vectors are uncorrelated, and hence can be represented as individual
+scalar nodes, as we show in (b).
+(This is useful if parts of the observations on the Y vector are occasionally missing.)
+We usually take k=|X| << |Y|=D, so the model tries to explain
+many observations using a low-dimensional subspace.
+
+
+<center>
+<table>
+<tr>
+<td><img src="Figures/fa.gif">
+<td><img src="Figures/fa_scalar.gif">
+<td><img src="Figures/mfa.gif">
+<td><img src="Figures/ifa.gif">
+<tr>
+<td align=center> (a)
+<td align=center> (b)
+<td align=center> (c)
+<td align=center> (d)
+</table>
+</center>
+
+<p>
+We can create this model in BNT as follows.
+<pre>
+ns = [k D];
+dag = zeros(2,2);
+dag(1,2) = 1;
+bnet = mk_bnet(dag, ns, 'discrete', []);
+bnet.CPD{1} = gaussian_CPD(bnet, 1, 'mean', zeros(k,1), 'cov', eye(k), ...
+   'cov_type', 'diag', 'clamp_mean', 1, 'clamp_cov', 1);
+bnet.CPD{2} = gaussian_CPD(bnet, 2, 'mean', zeros(D,1), 'cov', diag(Psi0), 'weights', W0, ...
+   'cov_type', 'diag', 'clamp_mean', 1);
+</pre>
+
+The root node is clamped to the N(0,I) distribution, so that we will
+not update these parameters during learning.
+The mean of the leaf node is clamped to 0,
+since we assume the data has been centered (had its mean subtracted
+off); this is just for simplicity.
+Finally, the covariance of the leaf node is constrained to be
+diagonal. W0 and Psi0 are the initial parameter guesses.
+
+<p>
+We can fit this model (i.e., estimate its parameters in a maximum
+likelihood (ML) sense) using EM, as we
+explain <a href="#em">below</a>.
+Not surprisingly, the ML estimates for mu and Psi turn out to be
+identical to the
+sample mean and variance, which can be computed directly as
+<pre>
+mu_ML = mean(data);
+Psi_ML = diag(cov(data));
+</pre>
+Note that W can only be identified up to a rotation matrix, because of
+the spherical symmetry of the source.
+
+<p>
+If we restrict Psi to be spherical, i.e., Psi = sigma*I,
+there is a closed-form solution for W as well,
+i.e., we do not need to use EM.
+In particular, W contains the first |X| eigenvectors of the sample covariance
+matrix, with scalings determined by the eigenvalues and sigma.
+Classical PCA can be obtained by taking the sigma->0 limit.
+For details, see
+
+<ul>
+<li> <a href="ftp://hope.caltech.edu/pub/roweis/Empca/empca.ps">
+"EM algorithms for PCA and SPCA"</a>, Sam Roweis, NIPS 97.
+(<a href="ftp://hope.caltech.edu/pub/roweis/Code/empca.tar.gz">
+Matlab software</a>)
+
+<p>
+<li>
+<a
+href=http://neural-server.aston.ac.uk/cgi-bin/tr_avail.pl?trnumber=NCRG/97/003>
+"Mixtures of probabilistic principal component analyzers"</a>,
+Tipping and Bishop, Neural Computation 11(2):443--482, 1999.
+</ul>
+
+<p>
+By adding a hidden discrete variable, we can create mixtures of FA
+models, as shown in (c).
+Now we can explain the data using a set of subspaces.
+We can create this model in BNT as follows.
+<pre>
+ns = [M k D];
+dag = zeros(3);
+dag(1,3) = 1;
+dag(2,3) = 1;
+bnet = mk_bnet(dag, ns, 'discrete', 1);
+bnet.CPD{1} = tabular_CPD(bnet, 1, Pi0);
+bnet.CPD{2} = gaussian_CPD(bnet, 2, 'mean', zeros(k, 1), 'cov', eye(k), 'cov_type', 'diag', ...
+			   'clamp_mean', 1, 'clamp_cov', 1);
+bnet.CPD{3} = gaussian_CPD(bnet, 3, 'mean', Mu0', 'cov', repmat(diag(Psi0), [1 1 M]), ...
+			   'weights', W0, 'cov_type', 'diag', 'tied_cov', 1);
+</pre>
+Notice how the covariance matrix for Y is the same for all values of
+Q; that is, the noise level in each sub-space is assumed the same.
+However, we allow the offset, mu, to vary.
+For details, see
+<ul>
+
+<LI> 
+<a HREF="ftp://ftp.cs.toronto.edu/pub/zoubin/tr-96-1.ps.gz"> The EM 
+Algorithm for Mixtures of Factor Analyzers </A>,
+Ghahramani, Z. and Hinton, G.E. (1996),
+University of Toronto
+Technical Report CRG-TR-96-1.
+(<A HREF="ftp://ftp.cs.toronto.edu/pub/zoubin/mfa.tar.gz">Matlab software</A>)
+
+<p>
+<li>
+<a
+href=http://neural-server.aston.ac.uk/cgi-bin/tr_avail.pl?trnumber=NCRG/97/003>
+"Mixtures of probabilistic principal component analyzers"</a>,
+Tipping and Bishop, Neural Computation 11(2):443--482, 1999.
+</ul>
+
+<p>
+I have included Zoubin's specialized MFA code (with his permission)
+with the toolbox, so you can check that BNT gives the same results:
+see 'BNT/examples/static/mfa1.m'. 
+
+<p>
+Independent Factor Analysis (IFA) generalizes FA by allowing a
+non-Gaussian prior on each component of X.
+(Note that we can approximate a non-Gaussian prior using a mixture of
+Gaussians.)
+This means that the likelihood function is no longer rotationally
+invariant, so we can uniquely identify W and the hidden
+sources X.
+IFA also allows a non-diagonal Psi (i.e. correlations between the components of Y).
+We recover classical Independent Components Analysis (ICA)
+in the Psi -> 0 limit, and by assuming that |X|=|Y|, so that the
+weight matrix W is square and invertible.
+For details, see
+<ul>
+<li>
+<a href="http://www.gatsby.ucl.ac.uk/~hagai/ifa.ps">Independent Factor
+Analysis</a>, H. Attias, Neural Computation 11: 803--851, 1998.
+</ul>
+
+
+
+<h2><a name="mixexp">Mixtures of experts</h2>
+
+As an example of the use of the softmax function,
+we introduce the Mixture of Experts model.
+<!--
+We also show
+the Hierarchical Mixture of Experts model, where the hierarchy has two
+levels.
+(This is essentially a probabilistic decision tree of height two.)
+-->
+As before,
+circles denote continuous-valued nodes,
+squares denote discrete nodes, clear
+means hidden, and shaded means observed.
+<p>
+<center>
+<table>
+<tr>
+<td><img src="Figures/mixexp.gif">
+<!--
+<td><img src="Figures/hme.gif">
+-->
+</table>
+</center>
+<p>
+X is the observed
+input, Y is the output, and
+the Q nodes are hidden "gating" nodes, which select the appropriate
+set of parameters for Y. During training, Y is assumed observed,
+but for testing, the goal is to predict Y given X.
+Note that this is a <em>conditional</em> density model, so we don't
+associate any parameters with X.
+Hence X's CPD will be a root CPD, which is a way of modelling
+exogenous nodes.
+If the output is a continuous-valued quantity,
+we assume the "experts" are linear-regression units,
+and set Y's CPD to linear-Gaussian.
+If the output is discrete, we set Y's CPD to a softmax function.
+The Q CPDs will always be softmax functions.
+
+<p>
+As a concrete example, consider the mixture of experts model where X and Y are
+scalars, and Q is binary.
+This is just piecewise linear regression, where
+we have two line segments, i.e.,
+<P>
+<IMG ALIGN=BOTTOM SRC="Eqns/lin_reg_eqn.gif">
+<P>
+We can create this model with random parameters as follows.
+(This code is bundled in BNT/examples/static/mixexp2.m.)
+<PRE>
+X = 1;
+Q = 2;
+Y = 3;
+dag = zeros(3,3);
+dag(X,[Q Y]) = 1
+dag(Q,Y) = 1;
+ns = [1 2 1]; % make X and Y scalars, and have 2 experts
+onodes = [1 3];
+bnet = mk_bnet(dag, ns, 'discrete', 2, 'observed', onodes);
+
+rand('state', 0);
+randn('state', 0);
+bnet.CPD{1} = root_CPD(bnet, 1);
+bnet.CPD{2} = softmax_CPD(bnet, 2);
+bnet.CPD{3} = gaussian_CPD(bnet, 3);
+</PRE>
+Now let us fit this model using <a href="#em">EM</a>.
+First we <a href="#load_data">load the data</a> (1000 training cases) and plot them.
+<P>
+<PRE>
+data = load('/examples/static/Misc/mixexp_data.txt', '-ascii');        
+plot(data(:,1), data(:,2), '.');
+</PRE>
+<p>
+<center>
+<IMG SRC="Figures/mixexp_data.gif">
+</center>
+<p>
+This is what the model looks like before training.
+(Thanks to Thomas Hofman for writing this plotting routine.)
+<p>
+<center>
+<IMG SRC="Figures/mixexp_before.gif">
+</center>
+<p>
+Now let's train the model, and plot the final performance.
+(We will discuss how to train models in more detail <a href="#param_learning">below</a>.)
+<P>
+<PRE>
+ncases = size(data, 1); % each row of data is a training case
+cases = cell(3, ncases);
+cases([1 3], :) = num2cell(data'); % each column of cases is a training case
+engine = jtree_inf_engine(bnet);
+max_iter = 20;
+[bnet2, LLtrace] = learn_params_em(engine, cases, max_iter);
+</PRE>
+(We specify which nodes will be observed when we create the engine.
+Hence BNT knows that the hidden nodes are all discrete.
+For complex models, this can lead to a significant speedup.)
+Below we show what the model looks like after 16 iterations of EM
+(with 100 IRLS iterations per M step), when it converged
+using the default convergence tolerance (that the
+fractional change in the log-likelihood be less than 1e-3).
+Before learning, the log-likelihood was
+-322.927442; afterwards, it was -13.728778.
+<p>
+<center>
+<IMG SRC="Figures/mixexp_after.gif">
+</center>
+(See BNT/examples/static/mixexp2.m for details of the code.)
+
+
+
+<h2><a name="hme">Hierarchical mixtures of experts</h2>
+
+A hierarchical mixture of experts (HME) extends the mixture of experts
+model by having more than one hidden node. A two-level example is shown below, along
+with its more traditional representation as a neural network.
+This is like a (balanced) probabilistic decision tree of height 2.
+<p>
+<center>
+<IMG SRC="Figures/HMEforMatlab.jpg">
+</center>
+<p>
+<a href="mailto:pbrutti@stat.cmu.edu">Pierpaolo Brutti</a>
+has written an extensive set of routines for HMEs,
+which are bundled with BNT: see the examples/static/HME directory.
+These routines allow you to choose the number of hidden (gating)
+layers, and the form of the experts (softmax or MLP).
+See the file hmemenu, which provides a demo.
+For example, the figure below shows the decision boundaries learned
+for a ternary classification problem, using a 2 level HME with softmax
+gates and softmax experts; the training set is on the left, the
+testing set on the right.
+<p>
+<center>
+<!--<IMG SRC="Figures/hme_dec_boundary.gif">-->
+<IMG SRC="Figures/hme_dec_boundary.png">
+</center>
+<p>
+
+
+<p>
+For more details, see the following:
+<ul>
+
+<li> <a href="http://www.cs.berkeley.edu/~jordan/papers/hierarchies.ps.Z">
+Hierarchical mixtures of experts and the EM algorithm</a>
+M. I. Jordan and R. A. Jacobs. Neural Computation, 6, 181-214, 1994.
+
+<li> <a href =
+"http://www.cs.berkeley.edu/~dmartin/software">David Martin's
+matlab code for HME</a>
+
+<li> <a
+href="http://www.cs.berkeley.edu/~jordan/papers/uai.ps.Z">Why the
+logistic function? A tutorial discussion on 
+probabilities and neural networks.</a> M. I. Jordan. MIT Computational
+Cognitive Science Report 9503, August 1995. 
+
+<li> "Generalized Linear Models", McCullagh and Nelder, Chapman and
+Halll, 1983.
+
+<li>
+"Improved learning algorithms for mixtures of experts in multiclass
+classification".
+K. Chen, L. Xu, H. Chi.
+Neural Networks (1999) 12: 1229-1252.
+
+<li> <a href="http://www.oigeeza.com/steve/">
+Classification Using Hierarchical Mixtures of Experts</a>
+S.R. Waterhouse and A.J. Robinson.
+In Proc. IEEE Workshop on Neural Network for Signal Processing IV (1994), pp. 177-186
+
+<li> <a href="http://www.idiap.ch/~perry/">
+Localized mixtures of experts</a>,
+P. Moerland, 1998.
+
+<li> "Nonlinear gated experts for time series",
+A.S. Weigend and M. Mangeas, 1995.
+
+</ul>
+
+
+<h2><a name="qmr">QMR</h2>
+
+Bayes nets originally arose out of an attempt to add probabilities to
+expert systems, and this is still the most common use for BNs.
+A famous example is
+QMR-DT, a decision-theoretic reformulation of the Quick Medical
+Reference (QMR) model.
+<p>
+<center>
+<IMG ALIGN=BOTTOM SRC="Figures/qmr.gif">
+</center>
+Here, the top layer represents hidden disease nodes, and the bottom
+layer represents observed symptom nodes.
+The goal is to infer the posterior probability of each disease given
+all the symptoms (which can be present, absent or unknown).
+Each node in the top layer has a Bernoulli prior (with a low prior
+probability that the disease is present).
+Since each node in the bottom layer has a high fan-in, we use a
+noisy-OR parameterization; each disease has an independent chance of
+causing each symptom.
+The real QMR-DT model is copyright, but
+we can create a random QMR-like model as follows.
+<pre>
+function bnet = mk_qmr_bnet(G, inhibit, leak, prior)
+% MK_QMR_BNET Make a QMR model
+% bnet = mk_qmr_bnet(G, inhibit, leak, prior)
+%
+% G(i,j) = 1 iff there is an arc from disease i to finding j
+% inhibit(i,j) = inhibition probability on i->j arc
+% leak(j) = inhibition prob. on leak->j arc
+% prior(i) = prob. disease i is on
+
+[Ndiseases Nfindings] = size(inhibit);
+N = Ndiseases + Nfindings;
+finding_node = Ndiseases+1:N;
+ns = 2*ones(1,N);
+dag = zeros(N,N);
+dag(1:Ndiseases, finding_node) = G;
+bnet = mk_bnet(dag, ns, 'observed', finding_node);
+
+for d=1:Ndiseases
+  CPT = [1-prior(d) prior(d)];
+  bnet.CPD{d} = tabular_CPD(bnet, d, CPT');
+end
+
+for i=1:Nfindings
+  fnode = finding_node(i);
+  ps = parents(G, i);
+  bnet.CPD{fnode} = noisyor_CPD(bnet, fnode, leak(i), inhibit(ps, i));
+end
+</pre>
+In the file BNT/examples/static/qmr1, we create a random bipartite
+graph G, with 5 diseases and 10 findings, and random parameters.
+(In general, to create a random dag, use 'mk_random_dag'.)
+We can visualize the resulting  graph structure using
+the methods discussed <a href="#graphdraw">below</a>, with the
+following results:
+<p>
+<img src="Figures/qmr.rnd.jpg">
+
+<p>
+Now let us put some random evidence on all the leaves except the very
+first and very last, and compute the disease posteriors.
+<pre>
+pos = 2:floor(Nfindings/2);
+neg = (pos(end)+1):(Nfindings-1);
+onodes = myunion(pos, neg);
+evidence = cell(1, N);
+evidence(findings(pos)) = num2cell(repmat(2, 1, length(pos)));
+evidence(findings(neg)) = num2cell(repmat(1, 1, length(neg)));
+
+engine = jtree_inf_engine(bnet);
+[engine, ll] = enter_evidence(engine, evidence);
+post = zeros(1, Ndiseases);
+for i=diseases(:)'
+  m = marginal_nodes(engine, i);
+  post(i) = m.T(2);
+end
+</pre>
+Junction tree can be quite slow on large QMR models.
+Fortunately, it is possible to exploit properties of the noisy-OR
+function to speed up exact inference using an algorithm called
+<a href="#quickscore">quickscore</a>, discussed below.
+
+
+
+
+
+<h2><a name="cg_model">Conditional Gaussian models</h2>
+
+A conditional Gaussian model is one in which, conditioned on all the discrete
+nodes, the distribution over the remaining (continuous) nodes is
+multivariate Gaussian. This means we can have arcs from discrete (D)
+to continuous (C) nodes, but not vice versa.
+(We <em>are</em> allowed C->D arcs if the continuous nodes are observed,
+as in the <a href="#mixexp">mixture of experts</a> model,
+since this distribution can be represented with a discrete potential.)
+<p>
+We now give an example of a CG model, from
+the paper "Propagation of Probabilities, Means amd
+Variances in Mixed Graphical Association Models", Steffen Lauritzen,
+JASA 87(420):1098--1108, 1992 (reprinted in the book "Probabilistic Networks and Expert
+Systems", R. G. Cowell, A. P. Dawid, S. L. Lauritzen and
+D. J. Spiegelhalter, Springer, 1999.)
+
+<h3>Specifying the graph</h3>
+
+Consider the model of waste emissions from an incinerator plant shown below.
+We follow the standard convention that shaded nodes are observed,
+clear nodes are hidden.
+We also use the non-standard convention that
+square nodes are discrete (tabular) and round nodes are
+Gaussian.
+
+<p>
+<center>
+<IMG SRC="Figures/cg1.gif">
+</center>
+<p>
+
+We can create this model as follows.
+<pre>
+F = 1; W = 2; E = 3; B = 4; C = 5; D = 6; Min = 7; Mout = 8; L = 9;
+n = 9;
+
+dag = zeros(n);
+dag(F,E)=1;
+dag(W,[E Min D]) = 1;
+dag(E,D)=1;
+dag(B,[C D])=1;
+dag(D,[L Mout])=1;
+dag(Min,Mout)=1;
+
+% node sizes - all cts nodes are scalar, all discrete nodes are binary
+ns = ones(1, n);
+dnodes = [F W B];
+cnodes = mysetdiff(1:n, dnodes);
+ns(dnodes) = 2;
+
+bnet = mk_bnet(dag, ns, 'discrete', dnodes);
+</pre>
+'dnodes' is a list of the discrete nodes; 'cnodes' is the continuous
+nodes. 'mysetdiff' is a faster version of the built-in 'setdiff'.
+<p>
+
+
+<h3>Specifying the parameters</h3>
+
+The parameters of the discrete nodes can be specified as follows.
+<pre>
+bnet.CPD{B} = tabular_CPD(bnet, B, 'CPT', [0.85 0.15]); % 1=stable, 2=unstable
+bnet.CPD{F} = tabular_CPD(bnet, F, 'CPT', [0.95 0.05]); % 1=intact, 2=defect
+bnet.CPD{W} = tabular_CPD(bnet, W, 'CPT', [2/7 5/7]); % 1=industrial, 2=household
+</pre>
+
+<p>
+The parameters of the continuous nodes can be specified as follows.
+<pre>
+bnet.CPD{E} = gaussian_CPD(bnet, E, 'mean', [-3.9 -0.4 -3.2 -0.5], ...
+			   'cov', [0.00002 0.0001 0.00002 0.0001]);
+bnet.CPD{D} = gaussian_CPD(bnet, D, 'mean', [6.5 6.0 7.5 7.0], ...
+			   'cov', [0.03 0.04 0.1 0.1], 'weights', [1 1 1 1]);
+bnet.CPD{C} = gaussian_CPD(bnet, C, 'mean', [-2 -1], 'cov', [0.1 0.3]);
+bnet.CPD{L} = gaussian_CPD(bnet, L, 'mean', 3, 'cov', 0.25, 'weights', -0.5);
+bnet.CPD{Min} = gaussian_CPD(bnet, Min, 'mean', [0.5 -0.5], 'cov', [0.01 0.005]);
+bnet.CPD{Mout} = gaussian_CPD(bnet, Mout, 'mean', 0, 'cov', 0.002, 'weights', [1 1]);
+</pre>
+
+
+<h3><a name="cg_infer">Inference</h3>
+
+<!--Let us perform inference in the <a href="#cg_model">waste incinerator example</a>.-->
+First we compute the unconditional marginals.
+<pre>
+engine = jtree_inf_engine(bnet);
+evidence = cell(1,n);
+[engine, ll] = enter_evidence(engine, evidence);
+marg = marginal_nodes(engine, E);
+</pre>
+<!--(Of course, we could use <tt>cond_gauss_inf_engine</tt> instead of jtree.)-->
+'marg' is a structure that contains the fields 'mu' and 'Sigma', which
+contain the mean and (co)variance of the marginal on E.
+In this case, they are both scalars.
+Let us check they match the published figures (to 2 decimal places).
+<!--(We can't expect
+more precision than this in general because I have implemented the algorithm of
+Lauritzen (1992), which can be numerically unstable.)-->
+<pre>
+tol = 1e-2;
+assert(approxeq(marg.mu, -3.25, tol));
+assert(approxeq(sqrt(marg.Sigma), 0.709, tol));
+</pre>
+We can compute the other posteriors similarly.
+Now let us add some evidence.
+<pre>
+evidence = cell(1,n);
+evidence{W} = 1; % industrial
+evidence{L} = 1.1;
+evidence{C} = -0.9;
+[engine, ll] = enter_evidence(engine, evidence);
+</pre>
+Now we find
+<pre>
+marg = marginal_nodes(engine, E);
+assert(approxeq(marg.mu, -3.8983, tol));
+assert(approxeq(sqrt(marg.Sigma), 0.0763, tol));
+</pre>
+
+
+We can also compute the joint probability on a set of nodes.
+For example, P(D, Mout | evidence) is a 2D Gaussian:
+<pre>
+marg = marginal_nodes(engine, [D Mout])
+marg = 
+    domain: [6 8]
+        mu: [2x1 double]
+     Sigma: [2x2 double]
+         T: 1.0000
+</pre>
+The mean is
+<pre>
+marg.mu
+ans =
+    3.6077
+    4.1077
+</pre>
+and the covariance matrix is
+<pre>
+marg.Sigma
+ans =
+    0.1062    0.1062
+    0.1062    0.1182
+</pre>
+It is easy to visualize this posterior using standard Matlab plotting
+functions, e.g.,
+<pre>
+gaussplot2d(marg.mu, marg.Sigma);
+</pre>
+produces the following picture.
+
+<p>
+<center>
+<IMG SRC="Figures/gaussplot.png">
+</center>
+<p>
+
+
+The T field indicates that the mixing weight of this Gaussian
+component is 1.0.
+If the joint contains discrete and continuous variables, the result
+will be a mixture of Gaussians, e.g.,
+<pre>
+marg = marginal_nodes(engine, [F E])
+    domain: [1 3]
+        mu: [-3.9000 -0.4003]
+     Sigma: [1x1x2 double]
+         T: [0.9995 4.7373e-04]
+</pre>
+The interpretation is
+Sigma(i,j,k) = Cov[ E(i) E(j) | F=k ].
+In this case, E is a scalar, so i=j=1; k specifies the mixture component.
+<p>
+We saw in the sprinkler network that BNT sets the effective size of
+observed discrete nodes to 1, since they only have one legal value.
+For continuous nodes, BNT sets their length to 0,
+since they have been reduced to a point.
+For example,
+<pre>
+marg = marginal_nodes(engine, [B C])
+    domain: [4 5]
+        mu: []
+     Sigma: []
+         T: [0.0123 0.9877]
+</pre>
+It is simple to post-process the output of marginal_nodes.
+For example, the file BNT/examples/static/cg1 sets the mu term of
+observed nodes to their observed value, and the Sigma term to 0 (since
+observed nodes have no variance).
+
+<p>
+Note that the implemented version of the junction tree is numerically
+unstable when using CG potentials
+(which is why, in the example above, we only required our answers to agree with
+the published ones to 2dp.)
+This is why you might want to use <tt>stab_cond_gauss_inf_engine</tt>,
+implemented by Shan Huang. This is described in
+
+<ul>
+<li> "Stable Local Computation with Conditional Gaussian Distributions",
+S. Lauritzen and F. Jensen, Tech Report R-99-2014,
+Dept. Math. Sciences, Allborg Univ., 1999.
+</ul>
+
+However, even the numerically stable version
+can be computationally intractable if there are many hidden discrete
+nodes, because the number of mixture components grows exponentially e.g., in a
+<a href="usage_dbn.html#lds">switching linear dynamical system</a>.
+In general, one must resort to approximate inference techniques: see
+the discussion on <a href="#engines">inference engines</a> below.
+
+
+<h2><a name="hybrid">Other hybrid models</h2>
+
+When we have C->D arcs, where C is hidden, we need to use
+approximate inference.
+One approach (not implemented in BNT) is described in
+<ul>
+<li> <a
+href="http://www.cs.berkeley.edu/~murphyk/Papers/hybrid_uai99.ps.gz">A
+Variational Approximation for Bayesian Networks with 
+Discrete and Continuous Latent Variables</a>,
+K. Murphy, UAI 99.
+</ul>
+Of course, one can always use <a href="#sampling">sampling</a> methods
+for approximate inference in such models.
+
+
+
+<h1><a name="param_learning">Parameter Learning</h1>
+
+The parameter estimation routines in BNT can be classified into 4
+types, depending on whether the goal is to compute
+a full (Bayesian) posterior over the parameters or just a point
+estimate (e.g., Maximum Likelihood or Maximum A Posteriori),
+and whether all the variables are fully observed or there is missing
+data/ hidden variables (partial observability).
+<p>
+
+<TABLE BORDER>
+<tr>
+ <TH></TH>
+ <th>Full obs</th>
+ <th>Partial obs</th>
+</tr>
+<tr>
+ <th>Point</th>
+ <td><tt>learn_params</tt></td>
+ <td><tt>learn_params_em</tt></td>
+</tr>
+<tr>
+ <th>Bayes</th>
+ <td><tt>bayes_update_params</tt></td>
+ <td>not yet supported</td>
+</tr>
+</table>
+
+
+<h2><a name="load_data">Loading data from a file</h2>
+
+To load numeric data from an ASCII text file called 'dat.txt', where each row is a
+case and columns are separated by white-space, such as
+<pre>
+011979 1626.5 0.0
+021979 1367.0 0.0
+...
+</pre>
+you can use
+<pre>
+data = load('dat.txt');
+</pre>
+or
+<pre>
+load dat.txt -ascii
+</pre>
+In the latter case, the data is stored in a variable called 'dat' (the
+filename minus the extension).
+Alternatively, suppose the data is stored in a .csv file (has commas
+separating the columns, and contains a header line), such as
+<pre>
+header info goes here
+ORD,011979,1626.5,0.0
+DSM,021979,1367.0,0.0
+...
+</pre>
+You can load this using
+<pre>
+[a,b,c,d] = textread('dat.txt', '%s %d %f %f', 'delimiter', ',', 'headerlines', 1);
+</pre>
+If your file is not in either of these formats, you can either use Perl to convert
+it to this format, or use the Matlab scanf command.
+Type
+<tt>
+help iofun
+</tt>
+for more information on Matlab's file functions.
+<!--
+<p>
+To load data directly from Excel,
+you should buy the 
+<a href="http://www.mathworks.com/products/excellink/">Excel Link</a>.
+To load data directly from a relational database,
+you should buy the 
+<a href="http://www.mathworks.com/products/database">Database
+toolbox</a>.
+-->
+<p>
+BNT learning routines require data to be stored in a cell array.
+data{i,m} is the value of node i in case (example) m, i.e., each
+<em>column</em> is a case.
+If node i is not observed in case m (missing value), set
+data{i,m} = [].
+(Not all the learning routines can cope with such missing values, however.)
+In the special case that all the nodes are observed and are
+scalar-valued (as opposed to vector-valued), the data can be
+stored in a matrix (as opposed to a cell-array).
+<p>
+Suppose, as in the <a href="#mixexp">mixture of experts example</a>,
+that we have 3 nodes in the graph: X(1) is the observed input, X(3) is
+the observed output, and X(2) is a hidden (gating) node. We can
+create the dataset as follows.
+<pre>
+data = load('dat.txt');
+ncases = size(data, 1);
+cases = cell(3, ncases);
+cases([1 3], :) = num2cell(data');
+</pre>
+Notice how we transposed the data, to convert rows into columns.
+Also, cases{2,m} = [] for all m, since X(2) is always hidden.
+
+
+<h2><a name="mle_complete">Maximum likelihood parameter estimation from complete data</h2>
+
+As an example, let's generate some data from the sprinkler network, randomize the parameters,
+and then try to recover the original model.
+First we create some training data using forwards sampling.
+<pre>
+samples = cell(N, nsamples);
+for i=1:nsamples
+  samples(:,i) = sample_bnet(bnet);
+end
+</pre>
+samples{j,i} contains the value of the j'th node in case i.
+sample_bnet returns a cell array because, in general, each node might
+be a vector of different length.
+In this case, all nodes are discrete (and hence scalars), so we
+could have used a regular array instead (which can be quicker):
+<pre>
+data = cell2num(samples);
+</pre
+So now data(j,i) = samples{j,i}.
+<p>
+Now we create a network with random parameters.
+(The initial values of bnet2 don't matter in this case, since we can find the
+globally optimal MLE independent of where we start.)
+<pre>
+% Make a tabula rasa
+bnet2 = mk_bnet(dag, node_sizes);
+seed = 0;
+rand('state', seed);
+bnet2.CPD{C} = tabular_CPD(bnet2, C);
+bnet2.CPD{R} = tabular_CPD(bnet2, R);
+bnet2.CPD{S} = tabular_CPD(bnet2, S);
+bnet2.CPD{W} = tabular_CPD(bnet2, W);
+</pre>
+Finally, we find the maximum likelihood estimates of the parameters.
+<pre>
+bnet3 = learn_params(bnet2, samples);
+</pre>
+To view the learned parameters, we use a little Matlab hackery.
+<pre>
+CPT3 = cell(1,N);
+for i=1:N
+  s=struct(bnet3.CPD{i});  % violate object privacy
+  CPT3{i}=s.CPT;
+end
+</pre>
+Here are the parameters learned for node 4.
+<pre>
+dispcpt(CPT3{4})
+1 1 : 1.0000 0.0000 
+2 1 : 0.2000 0.8000 
+1 2 : 0.2273 0.7727 
+2 2 : 0.0000 1.0000 
+</pre>
+So we see that the learned parameters are fairly close to the "true"
+ones, which we display below.
+<pre>
+dispcpt(CPT{4})
+1 1 : 1.0000 0.0000 
+2 1 : 0.1000 0.9000 
+1 2 : 0.1000 0.9000 
+2 2 : 0.0100 0.9900 
+</pre>
+We can get better results by using a larger training set, or using
+informative priors (see <a href="#prior">below</a>).
+
+
+
+<h2><a name="prior">Parameter priors</h2>
+
+Currently, only tabular CPDs can have priors on their parameters.
+The conjugate prior for a multinomial is the Dirichlet.
+(For binary random variables, the multinomial is the same as the
+Bernoulli, and the Dirichlet is the same as the Beta.)
+<p>
+The Dirichlet has a simple interpretation in terms of pseudo counts.
+If we let N_ijk = the num. times X_i=k and Pa_i=j occurs in the
+training set, where Pa_i are the parents of X_i,
+then the maximum likelihood (ML) estimate is
+T_ijk = N_ijk  / N_ij (where N_ij = sum_k' N_ijk'), which will be 0 if N_ijk=0.
+To prevent us from declaring that (X_i=k, Pa_i=j) is impossible just because this
+event was not seen in the training set,
+we can pretend we saw value k of X_i, for each value j of Pa_i some number (alpha_ijk)
+of times in the past.
+The MAP (maximum a posterior) estimate is then
+<pre>
+T_ijk = (N_ijk + alpha_ijk) / (N_ij + alpha_ij)
+</pre>
+and is never 0 if all alpha_ijk > 0.
+For example, consider the network A->B, where A is binary and B has 3
+values.
+A uniform prior for B has the form
+<pre>
+    B=1 B=2 B=3
+A=1 1   1   1
+A=2 1   1   1
+</pre>
+which can be created using
+<pre>
+tabular_CPD(bnet, i, 'prior_type', 'dirichlet', 'dirichlet_type', 'unif');
+</pre>
+This prior does not satisfy the likelihood equivalence principle,
+which says that <a href="#markov_equiv">Markov equivalent</a> models
+should have the same marginal likelihood.
+A prior that does satisfy this principle is shown below.
+Heckerman (1995) calls this the
+BDeu prior (likelihood equivalent uniform Bayesian Dirichlet).
+<pre>
+    B=1 B=2 B=3
+A=1 1/6 1/6 1/6
+A=2 1/6 1/6 1/6
+</pre>
+where we put N/(q*r) in each bin; N is the equivalent sample size,
+r=|A|, q = |B|.
+This can be created as follows
+<pre>
+tabular_CPD(bnet, i, 'prior_type', 'dirichlet', 'dirichlet_type', 'BDeu');
+</pre>
+Here, 1 is the equivalent sample size, and is the strength of the
+prior.
+You can change this using
+<pre>
+tabular_CPD(bnet, i, 'prior_type', 'dirichlet', 'dirichlet_type', ...
+   'BDeu', 'dirichlet_weight', 10);
+</pre>
+<!--where counts is an array of pseudo-counts of the same size as the
+CPT.-->
+<!--
+<p>
+When you specify a prior, you should set row i of the CPT to the
+normalized version of row i of the pseudo-count matrix, i.e., to the
+expected values of the parameters. This will ensure that computing the
+marginal likelihood sequentially (see <a
+href="#bayes_learn">below</a>) and in batch form gives the same
+results.
+To do this, proceed as follows.
+<pre>
+tabular_CPD(bnet, i, 'prior', counts, 'CPT', mk_stochastic(counts));
+</pre>
+For a non-informative prior, you can just write
+<pre>
+tabular_CPD(bnet, i, 'prior', 'unif', 'CPT', 'unif');
+</pre>
+-->
+
+
+<h2><a name="bayes_learn">(Sequential) Bayesian parameter updating from complete data</h2>
+
+If we use conjugate priors and have fully observed data, we can
+compute the posterior over the parameters in batch form as follows.
+<pre>
+cases = sample_bnet(bnet, nsamples);
+bnet = bayes_update_params(bnet, cases);  
+LL = log_marg_lik_complete(bnet, cases);   
+</pre>
+bnet.CPD{i}.prior contains the new Dirichlet pseudocounts,
+and bnet.CPD{i}.CPT is set to the mean of the posterior (the
+normalized counts).
+(Hence if the initial pseudo counts are 0,
+<tt>bayes_update_params</tt> and <tt>learn_params</tt> will give the
+same result.)
+
+
+
+
+<p>
+We can compute the same result sequentially (on-line) as follows.
+<pre>
+LL = 0;
+for m=1:nsamples
+  LL = LL + log_marg_lik_complete(bnet, cases(:,m));
+  bnet = bayes_update_params(bnet, cases(:,m));
+end
+</pre>
+
+The file <tt>BNT/examples/static/StructLearn/model_select1</tt> has an example of
+sequential model selection which uses the same idea.
+We generate data from the model A->B
+and compute the posterior prob of all 3 dags on 2 nodes:
+ (1) A B,  (2) A <- B , (3) A -> B
+Models 2 and 3 are <a href="#markov_equiv">Markov equivalent</a>, and therefore indistinguishable from 
+observational data alone, so we expect their posteriors to be the same
+(assuming a prior which satisfies likelihood equivalence).
+If we use random parameters, the "true" model only gets a higher posterior after 2000 trials!
+However, if we make B a noisy NOT gate, the true model "wins" after 12
+trials, as shown below (red = model 1, blue/green (superimposed)
+represents models 2/3).
+<p>
+<img src="Figures/model_select.png">
+<p>
+The use of marginal likelihood for model selection is discussed in
+greater detail in the 
+section on <a href="structure_learning">structure learning</a>.
+
+
+
+
+<h2><a name="em">Maximum likelihood parameter estimation with missing values</h2>
+
+Now we consider learning when some values are not observed.
+Let us randomly hide half the values generated from the water
+sprinkler example.
+<pre>
+samples2 = samples;
+hide = rand(N, nsamples) > 0.5;
+[I,J]=find(hide);
+for k=1:length(I)
+  samples2{I(k), J(k)} = [];
+end
+</pre>
+samples2{i,l} is the value of node i in training case l, or [] if unobserved.
+<p>
+Now we will compute the MLEs using the EM algorithm.
+We need to use an inference algorithm to compute the expected
+sufficient statistics in the E step; the M (maximization) step is as
+above.
+<pre>
+engine2 = jtree_inf_engine(bnet2);
+max_iter = 10;
+[bnet4, LLtrace] = learn_params_em(engine2, samples2, max_iter);
+</pre>
+LLtrace(i) is the log-likelihood at iteration i. We can plot this as
+follows:
+<pre>
+plot(LLtrace, 'x-')
+</pre>
+Let's display the results after 10 iterations of EM.
+<pre>
+celldisp(CPT4)
+CPT4{1} =
+    0.6616
+    0.3384
+CPT4{2} =
+    0.6510    0.3490
+    0.8751    0.1249
+CPT4{3} =
+    0.8366    0.1634
+    0.0197    0.9803
+CPT4{4} =
+(:,:,1) =
+    0.8276    0.0546
+    0.5452    0.1658
+(:,:,2) =
+    0.1724    0.9454
+    0.4548    0.8342
+</pre>
+We can get improved performance by using one or more of the following
+methods:
+<ul>
+<li> Increasing the size of the training set.
+<li> Decreasing the amount of hidden data.
+<li> Running EM for longer.
+<li> Using informative priors.
+<li> Initialising EM from multiple starting points.
+</ul>
+
+Click <a href="#gaussian">here</a> for a discussion of learning
+Gaussians, which can cause numerical problems.
+<p>
+For a more complete example of learning with EM,
+see the script BNT/examples/static/learn1.m.
+
+<h2><a name="tying">Parameter tying</h2>
+
+In networks with repeated structure (e.g., chains and grids), it is
+common to assume that the parameters are the same at every node. This
+is called parameter tying, and reduces the amount of data needed for
+learning.
+<p>
+When we have tied parameters, there is no longer a one-to-one
+correspondence between nodes and CPDs.
+Rather, each CPD species the parameters for a whole equivalence class
+of nodes.
+It is easiest to see this by example.
+Consider the following <a href="usage_dbn.html#hmm">hidden Markov
+model (HMM)</a>
+<p>
+<img src="Figures/hmm3.gif">
+<p>
+<!--
+We can create this graph structure, assuming we have T time-slices,
+as follows.
+(We number the nodes as shown in the figure, but we could equally well
+number the hidden nodes 1:T, and the observed nodes T+1:2T.)
+<pre>
+N = 2*T;
+dag = zeros(N);
+hnodes = 1:2:2*T;
+for i=1:T-1
+  dag(hnodes(i), hnodes(i+1))=1;
+end
+onodes = 2:2:2*T;
+for i=1:T
+  dag(hnodes(i), onodes(i)) = 1;
+end
+</pre>
+<p>
+The hidden nodes are always discrete, and have Q possible values each,
+but the observed nodes can be discrete or continuous, and have O possible values/length.
+<pre>
+if cts_obs
+  dnodes = hnodes;
+else
+  dnodes = 1:N;
+end
+ns = ones(1,N);
+ns(hnodes) = Q;
+ns(onodes) = O;
+</pre>
+-->
+When HMMs are used for semi-infinite processes like speech recognition,
+we assume the transition matrix
+P(H(t+1)|H(t)) is the same for all t; this is called a time-invariant
+or homogenous Markov chain.
+Hence hidden nodes 2, 3, ..., T
+are all in the same equivalence class, say class Hclass.
+Similarly, the observation matrix P(O(t)|H(t)) is assumed to be the
+same for all t, so the observed nodes are all in the same equivalence
+class, say class Oclass.
+Finally, the prior term P(H(1)) is in a class all by itself, say class
+H1class.
+This is illustrated below, where we explicitly represent the
+parameters as random variables (dotted nodes).
+<p>
+<img src="Figures/hmm4_params.gif">
+<p>
+In BNT, we cannot represent parameters as random variables (nodes).
+Instead, we "hide" the
+parameters inside one CPD for each equivalence class,
+and then specify that the other CPDs should share these parameters, as
+follows.
+<pre>
+hnodes = 1:2:2*T;
+onodes = 2:2:2*T;
+H1class = 1; Hclass = 2; Oclass = 3;
+eclass = ones(1,N);
+eclass(hnodes(2:end)) = Hclass;
+eclass(hnodes(1)) = H1class;
+eclass(onodes) = Oclass;
+% create dag and ns in the usual way
+bnet = mk_bnet(dag, ns, 'discrete', dnodes, 'equiv_class', eclass);
+</pre>
+Finally, we define the parameters for each equivalence class:
+<pre>
+bnet.CPD{H1class} = tabular_CPD(bnet, hnodes(1)); % prior
+bnet.CPD{Hclass} = tabular_CPD(bnet, hnodes(2)); % transition matrix
+if cts_obs
+  bnet.CPD{Oclass} = gaussian_CPD(bnet, onodes(1));
+else
+  bnet.CPD{Oclass} = tabular_CPD(bnet, onodes(1));
+end
+</pre>
+In general, if bnet.CPD{e} = xxx_CPD(bnet, j), then j should be a
+member of e's equivalence class; that is, it is not always the case
+that e == j. You can use bnet.rep_of_eclass(e) to return the
+representative of equivalence class e.
+BNT will look up the parents of j to determine the size
+of the CPT to use. It assumes that this is the same for all members of
+the equivalence class.
+Click <a href="param_tieing.html">here</a> for
+a more complex example of parameter tying.
+<p>
+Note:
+Normally one would define an HMM as a
+<a href = "usage_dbn.html">Dynamic Bayes Net</a>
+(see the function BNT/examples/dynamic/mk_chmm.m).
+However, one can define an HMM as a static BN using the function
+BNT/examples/static/Models/mk_hmm_bnet.m.
+
+
+
+<h1><a name="structure_learning">Structure learning</h1>
+
+Update (9/29/03):
+Phillipe LeRay is developing some additional structure learning code
+on top of BNT. Click <a
+href="http://bnt.insa-rouen.fr/ajouts.html">here</a>
+for details.
+
+<p>
+
+There are two very different approaches to structure learning:
+constraint-based and search-and-score.
+In the <a href="#constraint">constraint-based approach</a>,
+we start with a fully connected graph, and remove edges if certain
+conditional independencies are measured in the data.
+This has the disadvantage that repeated independence tests lose
+statistical power.
+<p>
+In the more popular search-and-score approach,
+we perform a search through the space of possible DAGs, and either
+return the best one found (a point estimate), or return a sample of the
+models found (an approximation to the Bayesian posterior).
+<p>
+Unfortunately, the number of DAGs as a function of the number of
+nodes, G(n), is super-exponential in n.
+A closed form formula for G(n) is not known, but the first few values
+are shown below (from Cooper, 1999).
+
+<table>
+<tr>  <th>n</th>    <th align=left>G(n)</th> </tr>
+<tr>  <td>1</td>    <td>1</td> </tr>
+<tr>  <td>2</td>    <td>3</td> </tr>
+<tr>  <td>3</td>    <td>25</td> </tr>
+<tr>   <td>4</td>    <td>543</td> </tr> 
+<tr>   <td>5</td>    <td>29,281</td> </tr>
+<tr>   <td>6</td>    <td>3,781,503</td> </tr>
+<tr>   <td>7</td>    <td>1.1 x 10^9</td> </tr>
+<tr>   <td>8</td>    <td>7.8 x 10^11</td> </tr>
+<tr>   <td>9</td>    <td>1.2 x 10^15</td> </tr>
+<tr>   <td>10</td>    <td>4.2 x 10^18</td> </tr>
+</table>
+
+Since the number of DAGs is super-exponential in the number of nodes,
+we cannot exhaustively search the space, so we either use a local
+search algorithm (e.g., greedy hill climbining, perhaps with multiple
+restarts) or a global search algorithm (e.g., Markov Chain Monte
+Carlo). 
+<p>
+If we know a total ordering on the nodes,
+finding the best structure amounts to picking the best set of parents
+for each node independently.
+This is what the K2 algorithm does.
+If the ordering is unknown, we can search over orderings,
+which is more efficient than searching over DAGs (Koller and Friedman, 2000).
+<p>
+In addition to the search procedure, we must specify the scoring
+function. There are two popular choices. The Bayesian score integrates
+out the parameters, i.e., it is the marginal likelihood of the model.
+The BIC (Bayesian Information Criterion) is defined as
+log P(D|theta_hat) - 0.5*d*log(N), where D is the data, theta_hat is
+the ML estimate of the parameters, d is the number of parameters, and
+N is the number of data cases.
+The BIC method has the advantage of not requiring a prior.
+<p>
+BIC can be derived as a large sample
+approximation to the marginal likelihood.
+(It is also equal to the Minimum Description Length of a model.)
+However, in practice, the sample size does not need to be very large
+for the approximation to be good.
+For example, in the figure below, we plot the ratio between the log marginal likelihood
+and the BIC score against data-set size; we see that the ratio rapidly
+approaches 1, especially for non-informative priors. 
+(This plot was generated by the file BNT/examples/static/bic1.m. It
+uses the water sprinkler BN with BDeu Dirichlet priors with different
+equivalent sample sizes.)
+
+<p>
+<center>
+<IMG SRC="Figures/bic.png">
+</center>
+<p>
+
+<p>
+As with parameter learning, handling missing data/ hidden variables is
+much harder than the fully observed case.
+The structure learning routines in BNT can therefore be classified into 4
+types, analogously to the parameter learning case.
+<p>
+
+<TABLE BORDER>
+<tr>
+ <TH></TH>
+ <th>Full obs</th>
+ <th>Partial obs</th>
+</tr>
+<tr>
+ <th>Point</th>
+ <td><tt>learn_struct_K2</tt>  <br>
+<!--     <tt>learn_struct_hill_climb</tt></td> -->
+ <td><tt>not yet supported</tt></td>
+</tr>
+<tr>
+ <th>Bayes</th>
+ <td><tt>learn_struct_mcmc</tt></td>
+ <td>not yet supported</td>
+</tr>
+</table>
+
+
+<h2><a name="markov_equiv">Markov equivalence</h2>
+
+If two DAGs encode the same conditional independencies, they are
+called Markov equivalent. The set of all DAGs can be paritioned into
+Markov equivalence classes. Graphs within the same class can 
+have
+the direction of some of their arcs reversed without changing any of
+the CI relationships.
+Each class can be represented by a PDAG
+(partially directed acyclic graph) called an essential graph or
+pattern. This specifies which edges must be oriented in a certain
+direction, and which may be reversed.
+
+<p>
+When learning graph structure from observational data,
+the best one can hope to do is to identify the model up to Markov
+equivalence. To distinguish amongst graphs within the same equivalence
+class, one needs interventional data: see the discussion on <a
+href="#active">active learning</a> below.
+
+
+
+<h2><a name="enumerate">Exhaustive search</h2>
+
+The brute-force approach to structure learning is to enumerate all
+possible DAGs, and score each one. This provides a "gold standard"
+with which to compare other algorithms. We can do this as follows.
+<pre>
+dags = mk_all_dags(N);
+score = score_dags(data, ns, dags);
+</pre>
+where data(i,m) is the value of node i in case m,
+and ns(i) is the size of node i.
+If the DAGs have a lot of families in common, we can cache the sufficient statistics,
+making this potentially more efficient than scoring the DAGs one at a time.
+(Caching is not currently implemented, however.)
+<p>
+By default, we use the Bayesian scoring metric, and assume CPDs are
+represented by tables with BDeu(1) priors.
+We can override these defaults as follows.
+If we want to use uniform priors, we can say
+<pre>
+params = cell(1,N);
+for i=1:N
+  params{i} = {'prior', 'unif'};
+end
+score = score_dags(data, ns, dags, 'params', params);
+</pre>
+params{i} is a cell-array, containing optional arguments that are
+passed to the constructor for CPD i.
+<p>
+Now suppose we want to use different node types, e.g., 
+Suppose nodes 1 and 2 are Gaussian, and nodes 3 and 4 softmax (both
+these CPDs can support discrete and continuous parents, which is
+necessary since all other nodes will be considered as parents).
+The Bayesian scoring metric currently only works for tabular CPDs, so
+we will use BIC:
+<pre>
+score = score_dags(data, ns, dags, 'discrete', [3 4], 'params', [], 
+    'type', {'gaussian', 'gaussian', 'softmax', softmax'}, 'scoring_fn', 'bic')
+</pre>
+In practice, one can't enumerate all possible DAGs for N > 5,
+but one can evaluate any reasonably-sized set of hypotheses in this
+way (e.g., nearest neighbors of your current best guess).
+Think of this as "computer assisted model refinement" as opposed to de
+novo learning.
+
+
+<h2><a name="K2">K2</h2>
+
+The K2 algorithm (Cooper and Herskovits, 1992) is a greedy search algorithm that works as follows.
+Initially each node has no parents. It then adds incrementally that parent whose addition most
+increases the score of the resulting structure. When the addition of no single
+parent can increase the score, it stops adding parents to the node.
+Since we are using a fixed ordering, we do not need to check for
+cycles, and can choose the parents for each node independently.
+<p>
+The original paper used the Bayesian scoring
+metric with tabular CPDs and Dirichlet priors.
+BNT generalizes this to allow any kind of CPD, and either the Bayesian
+scoring metric or BIC, as in the example <a href="#enumerate">above</a>.
+In addition, you can specify
+an optional upper bound on the number of parents for each node.
+The file BNT/examples/static/k2demo1.m gives an example of how to use K2.
+We use the water sprinkler network and sample 100 cases from it as before.
+Then we see how much data it takes to recover the generating structure:
+<pre>
+order = [C S R W];
+max_fan_in = 2;
+sz = 5:5:100;
+for i=1:length(sz)
+  dag2 = learn_struct_K2(data(:,1:sz(i)), node_sizes, order, 'max_fan_in', max_fan_in);
+  correct(i) = isequal(dag, dag2);
+end
+</pre>
+Here are the results.
+<pre>
+correct =
+  Columns 1 through 12 
+     0     0     0     0     0     0     0     1     0     1     1     1
+  Columns 13 through 20 
+     1     1     1     1     1     1     1     1
+</pre>
+So we see it takes about sz(10)=50 cases. (BIC behaves similarly,
+showing that the prior doesn't matter too much.)
+In general, we cannot hope to recover the "true" generating structure,
+only one that is in its <a href="#markov_equiv">Markov equivalence
+class</a>.
+
+
+<h2><a name="hill_climb">Hill-climbing</h2>
+
+Hill-climbing starts at a specific point in space,
+considers all nearest neighbors, and moves to the neighbor
+that has the highest score; if no neighbors have higher
+score than the current point (i.e., we have reached a local maximum),
+the algorithm stops. One can then restart in another part of the space.
+<p>
+A common definition of "neighbor" is all graphs that can be
+generated from the current graph by adding, deleting or reversing a
+single arc, subject to the acyclicity constraint.
+Other neighborhoods are possible: see
+<a href="http://research.microsoft.com/~dmax/publications/jmlr02.pdf">
+Optimal Structure Identification with Greedy Search</a>, Max
+Chickering, JMLR 2002.
+
+<!--
+Note: This algorithm is currently (Feb '02) being implemented by Qian
+Diao.
+-->
+
+
+<h2><a name="mcmc">MCMC</h2>
+
+We can use a Markov Chain Monte Carlo (MCMC) algorithm called
+Metropolis-Hastings (MH) to search the space of all 
+DAGs.
+The standard proposal distribution is to consider moving to all
+nearest neighbors in the sense defined <a href="#hill_climb">above</a>.
+<p>
+The function can be called
+as in the following example.
+<pre>
+[sampled_graphs, accept_ratio] = learn_struct_mcmc(data, ns, 'nsamples', 100, 'burnin', 10);
+</pre>
+We can convert our set of sampled graphs to a histogram
+(empirical posterior over all the DAGs) thus
+<pre>
+all_dags = mk_all_dags(N);
+mcmc_post = mcmc_sample_to_hist(sampled_graphs, all_dags);
+</pre>
+To see how well this performs, let us compute the exact posterior exhaustively.
+<p>
+<pre>
+score = score_dags(data, ns, all_dags);
+post = normalise(exp(score)); % assuming uniform structural prior
+</pre>
+We plot the results below.
+(The data set was 100 samples drawn from a random 4 node bnet; see the
+file BNT/examples/static/mcmc1.)
+<pre>
+subplot(2,1,1)
+bar(post)
+subplot(2,1,2)
+bar(mcmc_post)
+</pre>
+<img src="Figures/mcmc_post.jpg" width="800" height="500">
+<p>
+We can also plot the acceptance ratio versus number of MCMC steps,
+as a crude convergence diagnostic.
+<pre>
+clf
+plot(accept_ratio)
+</pre>
+<img src="Figures/mcmc_accept.jpg" width="800" height="300">
+<p>
+Even though the number of samples needed by MCMC is theoretically
+polynomial (not exponential) in the dimensionality of the search space, in practice it has been
+found that MCMC does not converge in reasonable time for graphs with
+more than about 10 nodes.
+
+
+
+
+<h2><a name="active">Active structure learning</h2>
+
+As was mentioned <a href="#markov_equiv">above</a>,
+one can only learn a DAG up to Markov equivalence, even given infinite data.
+If one is interested in learning the structure of a causal network,
+one needs interventional data.
+(By "intervention" we mean forcing a node to take on a specific value,
+thereby effectively severing its incoming arcs.)
+<p>
+Most of the scoring functions accept an optional argument
+that specifies whether a node was observed to have a certain value, or
+was forced to have that value: we set clamped(i,m)=1 if node i was
+forced in training case m. e.g., see the file
+BNT/examples/static/cooper_yoo.
+<p>
+An interesting question is to decide which interventions to perform
+(c.f., design of experiments). For details, see the following tech
+report
+<ul>
+<li> <a href = "../../Papers/alearn.ps.gz">
+Active learning of causal Bayes net structure</a>, Kevin Murphy, March
+2001.
+</ul>
+
+
+<h2><a name="struct_em">Structural EM</h2>
+
+Computing the Bayesian score when there is partial observability is
+computationally challenging, because the parameter posterior becomes
+multimodal (the hidden nodes induce a mixture distribution).
+One therefore needs to use approximations such as BIC.
+Unfortunately, search algorithms are still expensive, because we need
+to run EM at each step to compute the MLE, which is needed to compute
+the score of each model. An alternative approach is
+to do the local search steps inside of the M step of EM, which is more
+efficient since the data has been "filled in" - this is
+called the structural EM algorithm (Friedman 1997), and provably
+converges to a local maximum of the BIC score.
+<p> 
+Wei Hu has implemented SEM for discrete nodes.
+You can download his package from
+<a href="../SEM.zip">here</a>.
+Please address all questions about this code to
+wei.hu@intel.com.
+See also <a href="#phl">Phl's implementation of SEM</a>.
+
+<!--
+<h2><a name="reveal">REVEAL algorithm</h2>
+
+A simple way to learn the structure of a fully observed, discrete,
+factored DBN from a time series is described <a
+href="usage_dbn.html#struct_learn">here</a>.
+-->
+
+
+<h2><a name="graphdraw">Visualizing the graph</h2>
+
+You can visualize an arbitrary graph (such as one learned using the
+structure learning routines) with Matlab code contributed by
+<a href="http://www.mbfys.kun.nl/~cemgil/matlab/layout.html">Ali
+Taylan Cemgil</a>
+from the University of Nijmegen.
+For static BNs, call it as follows:
+<pre>
+draw_graph(bnet.dag);
+</pre>
+For example, this is the output produced on a
+<a href="#qmr">random QMR-like model</a>:
+<p>
+<img src="Figures/qmr.rnd.jpg">
+<p>
+If you install the excellent <a
+href="http://www.research.att.com/sw/tools/graphviz">graphhviz</a>, an
+open-source graph visualization package from AT&T,
+you can create a much better visualization as follows
+<pre>
+graph_to_dot(bnet.dag)
+</pre>
+This works by converting the adjacency matrix to a file suitable
+for input to graphviz (using the dot format),
+then converting the output of graphviz to postscript, and displaying the results using
+ghostview.
+You can do each of these steps separately for more control, as shown
+below.
+<pre>
+graph_to_dot(bnet.dag, 'filename', 'foo.dot');
+dot -Tps foo.dot -o foo.ps
+ghostview foo.ps &
+</pre>
+
+<h2><a name = "constraint">Constraint-based methods</h2>
+
+The IC algorithm (Pearl and Verma, 1991),
+and the faster, but otherwise equivalent, PC algorithm (Spirtes, Glymour, and Scheines 1993),
+computes many conditional independence tests,
+and combines these constraints into a
+PDAG to represent the whole
+<a href="#markov_equiv">Markov equivalence class</a>.
+<p>
+IC*/FCI extend IC/PC to handle latent variables: see <a href="#ic_star">below</a>.
+(IC stands for inductive causation; PC stands for Peter and Clark,
+the first names of Spirtes and Glymour; FCI stands for fast causal
+inference.
+What we, following Pearl (2000), call IC* was called
+IC in the original Pearl and Verma paper.)
+For details, see
+<ul>
+<li>
+<a href="http://hss.cmu.edu/html/departments/philosophy/TETRAD/tetrad.html">Causation,
+Prediction, and Search</a>, Spirtes, Glymour and 
+Scheines (SGS), 2001 (2nd edition), MIT Press.
+<li> 
+<a href="http://bayes.cs.ucla.edu/BOOK-2K/index.html">Causality: Models, Reasoning and Inference</a>, J. Pearl, 
+2000, Cambridge University Press.
+</ul>
+
+<p>
+
+The PC algorithm takes as arguments a function f, the number of nodes N,
+the maximum fan in K, and additional arguments A which are passed to f.
+The function f(X,Y,S,A) returns 1 if X is conditionally independent of Y given S, and 0
+otherwise.
+For example, suppose we cheat by
+passing in a CI "oracle" which has access to the true DAG; the oracle
+tests for d-separation in this DAG, i.e.,
+f(X,Y,S) calls dsep(X,Y,S,dag). We can to this as follows.
+<pre>
+pdag = learn_struct_pdag_pc('dsep', N, max_fan_in, dag);
+</pre>
+pdag(i,j) = -1 if there is definitely an i->j arc,
+and pdag(i,j) = 1 if there is either an i->j or and i<-j arc.
+<p>
+Applied to the sprinkler network, this returns
+<pre>
+pdag =
+     0     1     1     0
+     1     0     0    -1
+     1     0     0    -1
+     0     0     0     0
+</pre>
+So as expected, we see that the V-structure at the W node is uniquely identified,
+but the other arcs have ambiguous orientation.
+<p>
+We now give an example from p141 (1st edn) / p103 (2nd end) of the SGS
+book.
+This example concerns the female orgasm.
+We are given a correlation matrix C between 7 measured factors (such
+as subjective experiences of coital and masturbatory experiences),
+derived from 281 samples, and want to learn a causal model of the
+data. We will not discuss the merits of this type of work here, but
+merely show how to reproduce the results in the SGS book.
+Their program,
+<a href="http://hss.cmu.edu/html/departments/philosophy/TETRAD/tetrad.html">Tetrad</a>,
+makes use of the Fisher Z-test for conditional
+independence, so we do the same:
+<pre>
+max_fan_in = 4;
+nsamples = 281;
+alpha = 0.05;
+pdag = learn_struct_pdag_pc('cond_indep_fisher_z', n, max_fan_in, C, nsamples, alpha);
+</pre>
+In this case, the CI test is
+<pre>
+f(X,Y,S) = cond_indep_fisher_z(X,Y,S,  C,nsamples,alpha)
+</pre>
+The results match those of Fig 12a of SGS apart from two edge
+differences; presumably this is due to rounding error (although it
+could be a bug, either in BNT or in Tetrad).
+This example can be found in the file BNT/examples/static/pc2.m.
+
+<p>
+
+The IC* algorithm (Pearl and Verma, 1991),
+and the faster FCI algorithm (Spirtes, Glymour, and Scheines 1993),
+are like the IC/PC algorithm, except that they can detect the presence
+of latent variables.
+See the file <tt>learn_struct_pdag_ic_star</tt> written by Tamar
+Kushnir. The output is a matrix P, defined as follows
+(see Pearl (2000), p52 for details):
+<pre>
+% P(i,j) = -1 if there is either a latent variable L such that i <-L->j OR there is a directed edge from i->j.
+% P(i,j) = -2 if there is a marked directed i-*>j edge.
+% P(i,j) = P(j,i) = 1 if there is and undirected edge i--j
+% P(i,j) = P(j,i) = 2 if there is a latent variable L such that i<-L->j.
+</pre>
+
+
+<h2><a name="phl">Philippe Leray's structure learning package</h2>
+
+Philippe Leray has written a 
+<a href="http://bnt.insa-rouen.fr/ajouts.html">
+structure learning package</a> that uses BNT.
+
+It currently (Juen 2003) has the following features:
+<ul>
+<li>PC with Chi2 statistical test 
+<li>             MWST : Maximum weighted Spanning Tree 
+<li>             Hill Climbing 
+<li>             Greedy Search 
+<li>             Structural EM 
+<li>             hist_ic : optimal Histogram based on IC information criterion 
+<li>             cpdag_to_dag 
+<li>             dag_to_cpdag 
+<li>             ... 
+</ul>
+
+
+</a>
+
+
+<!--
+<h2><a name="read_learning">Further reading on learning</h2>
+
+I recommend the following tutorials for more details on learning.
+<ul>
+<li> <a
+href="http://www.cs.berkeley.edu/~murphyk/Papers/intel.ps.gz">My short
+tutorial</a> on graphical models, which contains an overview of learning.
+
+<li> 
+<A HREF="ftp://ftp.research.microsoft.com/pub/tr/TR-95-06.PS">
+A tutorial on learning with Bayesian networks</a>, D. Heckerman,
+Microsoft Research Tech Report, 1995.
+
+<li> <A HREF="http://www-cad.eecs.berkeley.edu/~wray/Mirror/lwgmja">
+Operations for Learning with Graphical Models</a>,
+W. L. Buntine, JAIR'94, 159--225.
+</ul>
+<p>
+-->
+
+
+
+
+
+<h1><a name="engines">Inference engines</h1>
+
+Up until now, we have used the junction tree algorithm for inference.
+However, sometimes this is too slow, or not even applicable.
+In general, there are many inference algorithms each of which make
+different tradeoffs between speed, accuracy, complexity and
+generality. Furthermore, there might be many implementations of the
+same algorithm; for instance, a general purpose, readable version,
+and a highly-optimized, specialized one.
+To cope with this variety, we treat each inference algorithm as an
+object, which we call an inference engine.
+
+<p>
+An inference engine is an object that contains a bnet and supports the
+'enter_evidence' and 'marginal_nodes' methods.  The engine constructor
+takes the bnet as argument and may do some model-specific processing.
+When 'enter_evidence' is called, the engine may do some
+evidence-specific processing.  Finally, when 'marginal_nodes' is
+called, the engine may do some query-specific processing.
+
+<p>
+The amount of work done when each stage is specified -- structure,
+parameters, evidence, and query -- depends on the engine.  The cost of
+work done early in this sequence can be amortized.  On the other hand,
+one can make better optimizations if one waits until later in the
+sequence.
+For example, the parameters might imply
+conditional indpendencies that are not evident in the graph structure,
+but can nevertheless be exploited; the evidence indicates which nodes
+are observed and hence can effectively be disconnected from the
+graph; and the query might indicate that large parts of the network
+are d-separated from the query nodes.  (Since it is not the actual
+<em>values</em> of the evidence that matters, just which nodes are observed,
+many engines allow you to specify which nodes will be observed when they are constructed,
+i.e., before calling 'enter_evidence'. Some engines can still cope if
+the actual pattern of evidence is different, e.g., if there is missing
+data.)
+<p>
+
+Although being maximally lazy (i.e., only doing work when a query is
+issued) may seem desirable,
+this is not always the most efficient.
+For example,
+when learning using EM, we need to call marginal_nodes N times, where N is the
+number of nodes. <a href="varelim">Variable elimination</a> would end
+up repeating a lot of work
+each time marginal_nodes is called, making it inefficient for
+learning. The junction tree algorithm, by contrast, uses dynamic
+programming to avoid this redundant computation --- it calculates all
+marginals in two passes during 'enter_evidence', so calling
+'marginal_nodes' takes constant time.
+<p>
+We will discuss some of the inference algorithms implemented in BNT
+below, and finish with a <a href="#engine_summary">summary</a> of all
+of them.
+
+
+
+
+
+
+
+<h2><a name="varelim">Variable elimination</h2>
+
+The variable elimination algorithm, also known as bucket elimination
+or peeling, is one of the simplest inference algorithms.
+The basic idea is to "push sums inside of products"; this is explained
+in more detail
+<a
+href="http://HTTP.CS.Berkeley.EDU/~murphyk/Bayes/bayes.html#infer">here</a>. 
+<p>
+The principle of distributing sums over products can be generalized
+greatly to apply to any commutative semiring.
+This forms the basis of many common algorithms, such as Viterbi
+decoding and the Fast Fourier Transform. For details, see
+
+<ul>
+<li> R. McEliece and S. M. Aji, 2000.
+<!--<a href="http://www.systems.caltech.edu/EE/Faculty/rjm/papers/GDL.ps">-->
+<a href="GDL.pdf">
+The Generalized Distributive Law</a>,
+IEEE Trans. Inform. Theory, vol. 46, no. 2 (March 2000),
+pp. 325--343. 
+
+
+<li>
+F. R. Kschischang, B. J. Frey and H.-A. Loeliger, 2001.
+<a href="http://www.cs.toronto.edu/~frey/papers/fgspa.abs.html">
+Factor graphs and the sum-product algorithm</a>
+IEEE Transactions on Information Theory, February, 2001.
+
+</ul>
+
+<p>
+Choosing an order in which to sum out the variables so as to minimize
+computational cost is known to be NP-hard.
+The implementation of this algorithm in
+<tt>var_elim_inf_engine</tt> makes no attempt to optimize this
+ordering (in contrast, say, to <tt>jtree_inf_engine</tt>, which uses a
+greedy search procedure to find a good ordering).
+<p>
+Note: unlike most algorithms, var_elim does all its computational work
+inside of <tt>marginal_nodes</tt>, not inside of
+<tt>enter_evidence</tt>.
+
+
+
+
+<h2><a name="global">Global inference methods</h2>
+
+The simplest inference algorithm of all is to explicitely construct
+the joint distribution over all the nodes, and then to marginalize it.
+This is implemented in <tt>global_joint_inf_engine</tt>.
+Since the size of the joint is exponential in the
+number of discrete (hidden) nodes, this is not a very practical algorithm.
+It is included merely for pedagogical and debugging purposes.
+<p>
+Three specialized versions of this algorithm have also been implemented,
+corresponding to the cases where all the nodes are discrete (D), all
+are Gaussian (G), and some are discrete and some Gaussian (CG).
+They are called <tt>enumerative_inf_engine</tt>,
+<tt>gaussian_inf_engine</tt>,
+and <tt>cond_gauss_inf_engine</tt> respectively.
+<p>
+Note: unlike most algorithms, these global inference algorithms do all their computational work
+inside of <tt>marginal_nodes</tt>, not inside of
+<tt>enter_evidence</tt>.
+
+
+<h2><a name="quickscore">Quickscore</h2>
+
+The junction tree algorithm is quite slow on the <a href="#qmr">QMR</a> network,
+since the cliques are so big.
+One simple trick we can use is to notice that hidden leaves do not
+affect the posteriors on the roots, and hence do not need to be
+included in the network.
+A second trick is to notice that the negative findings can be
+"absorbed" into the prior:
+see the file
+BNT/examples/static/mk_minimal_qmr_bnet for details.
+<p>
+
+A much more significant speedup is obtained by exploiting special
+properties of the noisy-or node, as done by the quickscore
+algorithm. For details, see
+<ul>
+<li> Heckerman, "A tractable inference algorithm for diagnosing multiple diseases", UAI 89.
+<li> Rish and Dechter, "On the impact of causal independence", UCI
+tech report, 1998.
+</ul>
+
+This has been implemented in BNT as a special-purpose inference
+engine, which can be created and used as follows:
+<pre>
+engine = quickscore_inf_engine(inhibit, leak, prior);
+engine = enter_evidence(engine, pos, neg);
+m = marginal_nodes(engine, i);
+</pre>
+
+
+<h2><a name="belprop">Belief propagation</h2>
+
+Even using quickscore, exact inference takes time that is exponential
+in the number of positive findings.
+Hence for large networks we need to resort to approximate inference techniques.
+See for example
+<ul>
+<li> T. Jaakkola and M. Jordan, "Variational probabilistic inference and the
+QMR-DT network", JAIR 10, 1999.
+
+<li> K. Murphy, Y. Weiss and M. Jordan, "Loopy belief propagation for approximate inference: an empirical study",
+   UAI 99.
+</ul>
+The latter approximation
+entails applying Pearl's belief propagation algorithm to a model even
+if it has loops (hence the name loopy belief propagation).
+Pearl's algorithm, implemented as <tt>pearl_inf_engine</tt>, gives
+exact results when applied to singly-connected graphs
+(a.k.a. polytrees, since
+the underlying undirected topology is a tree, but a node may have
+multiple parents).
+To apply this algorithm to a graph with loops, 
+use <tt>pearl_inf_engine</tt>.
+This can use a centralized or distributed message passing protocol.
+You can use it as in the following example.
+<pre>
+engine = pearl_inf_engine(bnet, 'max_iter', 30);
+engine = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, i);
+</pre>
+We found that this algorithm often converges, and when it does, often
+is very accurate, but it depends on the precise setting of the
+parameter values of the network.
+(See the file BNT/examples/static/qmr1 to repeat the experiment for yourself.)
+Understanding when and why belief propagation converges/ works
+is a topic of ongoing research.
+<p>
+<tt>pearl_inf_engine</tt> can exploit special structure in noisy-or
+and gmux nodes to compute messages efficiently.
+<p>
+<tt>belprop_inf_engine</tt> is like pearl, but uses potentials to
+represent messages. Hence this is slower.
+<p>
+<tt>belprop_fg_inf_engine</tt> is like belprop,
+but is designed for factor graphs.
+
+
+
+<h2><a name="sampling">Sampling</h2>
+
+BNT now (Mar '02) has two sampling (Monte Carlo) inference algorithms:
+<ul>
+<li> <tt>likelihood_weighting_inf_engine</tt> which does importance
+sampling and can handle any node type.
+<li> <tt>gibbs_sampling_inf_engine</tt>, written by Bhaskara Marthi.
+Currently this can only handle tabular CPDs.
+For a much faster and more powerful Gibbs sampling program, see
+<a href="http://www.mrc-bsu.cam.ac.uk/bugs">BUGS</a>.
+</ul>
+Note: To generate samples from a network (which is not the same as inference!),
+use <tt>sample_bnet</tt>.
+
+
+
+<h2><a name="engine_summary">Summary of inference engines</h2>
+
+
+The inference engines differ in many ways. Here are
+some of the major "axes":
+<ul>
+<li> Works for all topologies or makes restrictions? 
+<li> Works for all node types or makes restrictions?
+<li> Exact or approximate inference?
+</ul>
+
+<p>
+In terms of topology, most engines handle any kind of DAG.
+<tt>belprop_fg</tt> does approximate inference on factor graphs (FG), which
+can be used to represent directed, undirected, and mixed (chain)
+graphs.
+(In the future, we plan to support exact inference on chain graphs.)
+<tt>quickscore</tt> only works on QMR-like models.
+<p>
+In terms of node types: algorithms that use potentials can handle
+discrete (D), Gaussian (G) or conditional Gaussian (CG) models.
+Sampling algorithms can essentially handle any kind of node (distribution).
+Other algorithms make more restrictive assumptions in exchange for
+speed.
+<p>
+Finally, most algorithms are designed to give the exact answer.
+The belief propagation algorithms are exact if applied to trees, and
+in some other cases.
+Sampling is considered approximate, even though, in the limit of an
+infinite number of samples, it gives the exact answer.
+
+<p>
+
+Here is a summary of the properties 
+of all the engines in BNT which work on static networks.
+<p>
+<table>
+<table border units = pixels><tr>
+<td align=left width=0>Name
+<td align=left width=0>Exact?
+<td align=left width=0>Node type?
+<td align=left width=0>topology
+<tr>
+<tr>
+<td align=left> belprop
+<td align=left> approx
+<td align=left> D
+<td align=left> DAG
+<tr>
+<td align=left> belprop_fg
+<td align=left> approx
+<td align=left> D
+<td align=left> factor graph
+<tr>
+<td align=left> cond_gauss
+<td align=left> exact
+<td align=left> CG
+<td align=left> DAG
+<tr>
+<td align=left> enumerative
+<td align=left> exact
+<td align=left> D
+<td align=left> DAG
+<tr>
+<td align=left> gaussian
+<td align=left> exact
+<td align=left> G
+<td align=left> DAG
+<tr>
+<td align=left> gibbs
+<td align=left> approx
+<td align=left> D
+<td align=left> DAG
+<tr>
+<td align=left> global_joint
+<td align=left> exact
+<td align=left> D,G,CG
+<td align=left> DAG
+<tr>
+<td align=left> jtree
+<td align=left> exact
+<td align=left> D,G,CG
+<td align=left> DAG
+b<tr>
+<td align=left> likelihood_weighting
+<td align=left> approx
+<td align=left> any
+<td align=left> DAG
+<tr>
+<td align=left> pearl
+<td align=left> approx
+<td align=left> D,G
+<td align=left> DAG
+<tr>
+<td align=left> pearl
+<td align=left> exact
+<td align=left> D,G
+<td align=left> polytree
+<tr>
+<td align=left> quickscore
+<td align=left> exact
+<td align=left> noisy-or
+<td align=left> QMR
+<tr>
+<td align=left> stab_cond_gauss
+<td align=left> exact
+<td align=left> CG
+<td align=left> DAG
+<tr>
+<td align=left> var_elim
+<td align=left> exact
+<td align=left> D,G,CG
+<td align=left> DAG
+</table>
+
+
+
+<h1><a name="influence">Influence diagrams/ decision making</h1>
+
+BNT implements an exact algorithm for solving LIMIDs (limited memory
+influence diagrams), described in
+<ul>
+<li> S. L. Lauritzen and D. Nilsson.
+<a href="http://www.math.auc.dk/~steffen/papers/limids.pdf">
+Representing and solving decision problems with limited
+information</a>
+Management Science, 47, 1238 - 1251. September 2001.
+</ul>
+LIMIDs explicitely show all information arcs, rather than implicitely
+assuming no forgetting. This allows them to model forgetful
+controllers.
+<p>
+See the examples in <tt>BNT/examples/limids</tt> for details.
+
+
+
+
+<h1>DBNs, HMMs, Kalman filters and all that</h1>
+
+Click <a href="usage_dbn.html">here</a> for documentation about how to
+use BNT for dynamical systems and sequence data.
+
+
+</BODY>
diff --git a/sourcecodes/bnt-master/docs/whyNotSourceforge.html b/sourcecodes/bnt-master/docs/whyNotSourceforge.html
new file mode 100644
index 00000000..7c17e425
--- /dev/null
+++ b/sourcecodes/bnt-master/docs/whyNotSourceforge.html
@@ -0,0 +1,17 @@
+On 4 October 2007, I decided to move BNT back from
+<a href="http://bnt.sourceforge.net/">sourceforge</a> to my
+own website, where I could modify it more easily. I have no plans to
+add new functionality, but I at least want it to ensure it runs
+correctly on new versions of matlab. Despite new users complaining on
+the Yahoo group that BNT would 
+not work  on the latest  version of Matlab,  nobody in the sourceforce
+community did anything about it. As an opensource project, it was basically
+a failure (although I would like
+to thank Nicholas Saunier and Tom Murray (yozhik) for
+making code updates, 
+as well as Hiroaki Ogawa and mayliszt,
+and Bob Welch for answering many questions on the newsgroup.)
+For historical purposes,
+v1.0.3 (as of 4 Oct 07) has been cached
+<a href="http://www.cs.ubc.ca/~murphyk/Software/BNT/FullBNT-1.0.3.zip">here</a>.
+