├── .idea ├── .gitignore ├── .name ├── 1111.iml ├── inspectionProfiles │ ├── Project_Default.xml │ └── profiles_settings.xml ├── misc.xml └── modules.xml ├── AFL.py ├── AFLDDPG_10.4_new.py ├── AFLDDPG_10.4_new_test.py ├── AFLDDPG_weight(bad_node).py ├── AFLDDPG_weight.py ├── FLDDPG_weight.py ├── __pycache__ ├── agent.cpython-37.pyc ├── agent.cpython-39.pyc ├── ddpg.cpython-37.pyc ├── ddpg.cpython-39.pyc ├── ddpg_env.cpython-37.pyc ├── ddpg_env.cpython-39.pyc ├── ddpg_env_10_4.cpython-37.pyc ├── ddpg_env_10_4_new.cpython-37.pyc ├── local_Update.cpython-37.pyc ├── local_Update.cpython-39.pyc ├── local_model.cpython-37.pyc ├── local_model.cpython-39.pyc ├── options.cpython-37.pyc ├── options.cpython-39.pyc ├── parameters.cpython-37.pyc ├── parameters.cpython-39.pyc ├── sampling.cpython-37.pyc └── sampling.cpython-39.pyc ├── acc_bad_node.py ├── agent.py ├── ddpg_env_10_4_new.py ├── local_Update.py ├── local_model.py ├── logs ├── events.out.tfevents.1674788653.LAPTOP-OELRD270 ├── events.out.tfevents.1674788865.LAPTOP-OELRD270 └── events.out.tfevents.1674789082.LAPTOP-OELRD270 ├── options.py ├── parameters.py ├── plot_acc_compare.py ├── plot_cost_compare.py ├── plot_differ_beta.py ├── plot_loss_vs_cost.py ├── results └── models │ ├── epo_mnist_cnn_10_C[1]_iid[1]_E[1]_B[1].pkl │ ├── epo_mnist_cnn_1_C[1]_iid[1]_E[1]_B[1].pkl │ ├── epo_mnist_cnn_2_C[1]_iid[1]_E[1]_B[1].pkl │ ├── mnist_cnn_10_C[0.1]_iid[1]_E[10]_B[1].pkl │ ├── mnist_cnn_10_C[1]_iid[1]_E[1]_B[1].pkl │ ├── mnist_cnn_1_C[0.1]_iid[1]_E[3]_B[1].pkl │ ├── mnist_cnn_1_C[0.2]_iid[1]_E[3]_B[1].pkl │ ├── mnist_cnn_1_C[1]_iid[1]_E[3]_B[1].pkl │ ├── mnist_cnn_2_C[0.1]_iid[0]_E[2]_B[1].pkl │ ├── mnist_cnn_2_C[0.1]_iid[1]_E[2]_B[1].pkl │ ├── mnist_cnn_2_C[0.2]_iid[0]_E[3]_B[1].pkl │ ├── mnist_cnn_2_C[0.2]_iid[1]_E[3]_B[1].pkl │ ├── mnist_cnn_3_C[0.05]_iid[1]_E[3]_B[1].pkl │ ├── step_mnist_cnn_10_C[1]_iid[1]_E[1]_B[1].pkl │ ├── step_mnist_cnn_10_C[1]_iid[1]_E[1]_B[1]_time.struct_time(tm_year=2023, tm_mon=1, tm_mday=27, tm_hour=10, tm_min=48, tm_sec=16, tm_wday=4, tm_yday=27, tm_isdst=0).pkl │ ├── step_mnist_cnn_10_C[1]_iid[1]_E[1]_B[1]_time.struct_time(tm_year=2023, tm_mon=1, tm_mday=27, tm_hour=11, tm_min=17, tm_sec=3, tm_wday=4, tm_yday=27, tm_isdst=0).pkl │ ├── step_mnist_cnn_10_C[1]_iid[1]_E[1]_B[1]_time.struct_time(tm_year=2023, tm_mon=1, tm_mday=27, tm_hour=11, tm_min=43, tm_sec=6, tm_wday=4, tm_yday=27, tm_isdst=0).pkl │ ├── step_mnist_cnn_10_C[1]_iid[1]_E[1]_B[1]_time.struct_time(tm_year=2023, tm_mon=1, tm_mday=31, tm_hour=9, tm_min=42, tm_sec=49, tm_wday=1, tm_yday=31, tm_isdst=0).pkl │ ├── step_mnist_cnn_1_C[1]_iid[1]_E[1]_B[1].pkl │ ├── step_mnist_cnn_1_C[1]_iid[1]_E[1]_B[1]_%b_%d_%Y_%H_%M_%S.pkl │ └── step_mnist_cnn_1_C[1]_iid[1]_E[1]_B[1]_time.struct_time(tm_year=2022, tm_mon=10, tm_mday=21, tm_hour=21, tm_min=5, tm_sec=9, tm_wday=4, tm_yday=294, tm_isdst=0).pkl └── sampling.py /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | -------------------------------------------------------------------------------- /.idea/.name: -------------------------------------------------------------------------------- 1 | 2.py -------------------------------------------------------------------------------- /.idea/1111.iml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/.idea/1111.iml -------------------------------------------------------------------------------- /.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/.idea/inspectionProfiles/Project_Default.xml -------------------------------------------------------------------------------- /.idea/inspectionProfiles/profiles_settings.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/.idea/inspectionProfiles/profiles_settings.xml -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/.idea/misc.xml -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/.idea/modules.xml -------------------------------------------------------------------------------- /AFL.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/AFL.py -------------------------------------------------------------------------------- /AFLDDPG_10.4_new.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/AFLDDPG_10.4_new.py -------------------------------------------------------------------------------- /AFLDDPG_10.4_new_test.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/AFLDDPG_10.4_new_test.py -------------------------------------------------------------------------------- /AFLDDPG_weight(bad_node).py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/AFLDDPG_weight(bad_node).py -------------------------------------------------------------------------------- /AFLDDPG_weight.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/AFLDDPG_weight.py -------------------------------------------------------------------------------- /FLDDPG_weight.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/FLDDPG_weight.py -------------------------------------------------------------------------------- /__pycache__/agent.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/__pycache__/agent.cpython-37.pyc -------------------------------------------------------------------------------- /__pycache__/agent.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/__pycache__/agent.cpython-39.pyc -------------------------------------------------------------------------------- /__pycache__/ddpg.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/__pycache__/ddpg.cpython-37.pyc -------------------------------------------------------------------------------- /__pycache__/ddpg.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/__pycache__/ddpg.cpython-39.pyc -------------------------------------------------------------------------------- /__pycache__/ddpg_env.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/__pycache__/ddpg_env.cpython-37.pyc -------------------------------------------------------------------------------- /__pycache__/ddpg_env.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/__pycache__/ddpg_env.cpython-39.pyc -------------------------------------------------------------------------------- /__pycache__/ddpg_env_10_4.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/__pycache__/ddpg_env_10_4.cpython-37.pyc -------------------------------------------------------------------------------- /__pycache__/ddpg_env_10_4_new.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/__pycache__/ddpg_env_10_4_new.cpython-37.pyc -------------------------------------------------------------------------------- /__pycache__/local_Update.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/__pycache__/local_Update.cpython-37.pyc -------------------------------------------------------------------------------- /__pycache__/local_Update.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/__pycache__/local_Update.cpython-39.pyc -------------------------------------------------------------------------------- /__pycache__/local_model.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/__pycache__/local_model.cpython-37.pyc -------------------------------------------------------------------------------- /__pycache__/local_model.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/__pycache__/local_model.cpython-39.pyc -------------------------------------------------------------------------------- /__pycache__/options.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/__pycache__/options.cpython-37.pyc -------------------------------------------------------------------------------- /__pycache__/options.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/__pycache__/options.cpython-39.pyc -------------------------------------------------------------------------------- /__pycache__/parameters.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/__pycache__/parameters.cpython-37.pyc -------------------------------------------------------------------------------- /__pycache__/parameters.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/__pycache__/parameters.cpython-39.pyc -------------------------------------------------------------------------------- /__pycache__/sampling.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/__pycache__/sampling.cpython-37.pyc -------------------------------------------------------------------------------- /__pycache__/sampling.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/__pycache__/sampling.cpython-39.pyc -------------------------------------------------------------------------------- /acc_bad_node.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/acc_bad_node.py -------------------------------------------------------------------------------- /agent.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/agent.py -------------------------------------------------------------------------------- /ddpg_env_10_4_new.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/ddpg_env_10_4_new.py -------------------------------------------------------------------------------- /local_Update.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/local_Update.py -------------------------------------------------------------------------------- /local_model.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/local_model.py -------------------------------------------------------------------------------- /logs/events.out.tfevents.1674788653.LAPTOP-OELRD270: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/logs/events.out.tfevents.1674788653.LAPTOP-OELRD270 -------------------------------------------------------------------------------- /logs/events.out.tfevents.1674788865.LAPTOP-OELRD270: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/logs/events.out.tfevents.1674788865.LAPTOP-OELRD270 -------------------------------------------------------------------------------- /logs/events.out.tfevents.1674789082.LAPTOP-OELRD270: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/logs/events.out.tfevents.1674789082.LAPTOP-OELRD270 -------------------------------------------------------------------------------- /options.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/options.py -------------------------------------------------------------------------------- /parameters.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/parameters.py -------------------------------------------------------------------------------- /plot_acc_compare.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/plot_acc_compare.py -------------------------------------------------------------------------------- /plot_cost_compare.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/plot_cost_compare.py -------------------------------------------------------------------------------- /plot_differ_beta.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/plot_differ_beta.py -------------------------------------------------------------------------------- /plot_loss_vs_cost.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/plot_loss_vs_cost.py -------------------------------------------------------------------------------- /results/models/epo_mnist_cnn_10_C[1]_iid[1]_E[1]_B[1].pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/results/models/epo_mnist_cnn_10_C[1]_iid[1]_E[1]_B[1].pkl -------------------------------------------------------------------------------- /results/models/epo_mnist_cnn_1_C[1]_iid[1]_E[1]_B[1].pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/results/models/epo_mnist_cnn_1_C[1]_iid[1]_E[1]_B[1].pkl -------------------------------------------------------------------------------- /results/models/epo_mnist_cnn_2_C[1]_iid[1]_E[1]_B[1].pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/results/models/epo_mnist_cnn_2_C[1]_iid[1]_E[1]_B[1].pkl -------------------------------------------------------------------------------- /results/models/mnist_cnn_10_C[0.1]_iid[1]_E[10]_B[1].pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/results/models/mnist_cnn_10_C[0.1]_iid[1]_E[10]_B[1].pkl -------------------------------------------------------------------------------- /results/models/mnist_cnn_10_C[1]_iid[1]_E[1]_B[1].pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/results/models/mnist_cnn_10_C[1]_iid[1]_E[1]_B[1].pkl -------------------------------------------------------------------------------- /results/models/mnist_cnn_1_C[0.1]_iid[1]_E[3]_B[1].pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/results/models/mnist_cnn_1_C[0.1]_iid[1]_E[3]_B[1].pkl -------------------------------------------------------------------------------- /results/models/mnist_cnn_1_C[0.2]_iid[1]_E[3]_B[1].pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/results/models/mnist_cnn_1_C[0.2]_iid[1]_E[3]_B[1].pkl -------------------------------------------------------------------------------- /results/models/mnist_cnn_1_C[1]_iid[1]_E[3]_B[1].pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/results/models/mnist_cnn_1_C[1]_iid[1]_E[3]_B[1].pkl -------------------------------------------------------------------------------- /results/models/mnist_cnn_2_C[0.1]_iid[0]_E[2]_B[1].pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/results/models/mnist_cnn_2_C[0.1]_iid[0]_E[2]_B[1].pkl -------------------------------------------------------------------------------- /results/models/mnist_cnn_2_C[0.1]_iid[1]_E[2]_B[1].pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/results/models/mnist_cnn_2_C[0.1]_iid[1]_E[2]_B[1].pkl -------------------------------------------------------------------------------- /results/models/mnist_cnn_2_C[0.2]_iid[0]_E[3]_B[1].pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/results/models/mnist_cnn_2_C[0.2]_iid[0]_E[3]_B[1].pkl -------------------------------------------------------------------------------- /results/models/mnist_cnn_2_C[0.2]_iid[1]_E[3]_B[1].pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/results/models/mnist_cnn_2_C[0.2]_iid[1]_E[3]_B[1].pkl -------------------------------------------------------------------------------- /results/models/mnist_cnn_3_C[0.05]_iid[1]_E[3]_B[1].pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/results/models/mnist_cnn_3_C[0.05]_iid[1]_E[3]_B[1].pkl -------------------------------------------------------------------------------- /results/models/step_mnist_cnn_10_C[1]_iid[1]_E[1]_B[1].pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/results/models/step_mnist_cnn_10_C[1]_iid[1]_E[1]_B[1].pkl -------------------------------------------------------------------------------- /results/models/step_mnist_cnn_10_C[1]_iid[1]_E[1]_B[1]_time.struct_time(tm_year=2023, tm_mon=1, tm_mday=27, tm_hour=10, tm_min=48, tm_sec=16, tm_wday=4, tm_yday=27, tm_isdst=0).pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/results/models/step_mnist_cnn_10_C[1]_iid[1]_E[1]_B[1]_time.struct_time(tm_year=2023, tm_mon=1, tm_mday=27, tm_hour=10, tm_min=48, tm_sec=16, tm_wday=4, tm_yday=27, tm_isdst=0).pkl -------------------------------------------------------------------------------- /results/models/step_mnist_cnn_10_C[1]_iid[1]_E[1]_B[1]_time.struct_time(tm_year=2023, tm_mon=1, tm_mday=27, tm_hour=11, tm_min=17, tm_sec=3, tm_wday=4, tm_yday=27, tm_isdst=0).pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/results/models/step_mnist_cnn_10_C[1]_iid[1]_E[1]_B[1]_time.struct_time(tm_year=2023, tm_mon=1, tm_mday=27, tm_hour=11, tm_min=17, tm_sec=3, tm_wday=4, tm_yday=27, tm_isdst=0).pkl -------------------------------------------------------------------------------- /results/models/step_mnist_cnn_10_C[1]_iid[1]_E[1]_B[1]_time.struct_time(tm_year=2023, tm_mon=1, tm_mday=27, tm_hour=11, tm_min=43, tm_sec=6, tm_wday=4, tm_yday=27, tm_isdst=0).pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/results/models/step_mnist_cnn_10_C[1]_iid[1]_E[1]_B[1]_time.struct_time(tm_year=2023, tm_mon=1, tm_mday=27, tm_hour=11, tm_min=43, tm_sec=6, tm_wday=4, tm_yday=27, tm_isdst=0).pkl -------------------------------------------------------------------------------- /results/models/step_mnist_cnn_10_C[1]_iid[1]_E[1]_B[1]_time.struct_time(tm_year=2023, tm_mon=1, tm_mday=31, tm_hour=9, tm_min=42, tm_sec=49, tm_wday=1, tm_yday=31, tm_isdst=0).pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/results/models/step_mnist_cnn_10_C[1]_iid[1]_E[1]_B[1]_time.struct_time(tm_year=2023, tm_mon=1, tm_mday=31, tm_hour=9, tm_min=42, tm_sec=49, tm_wday=1, tm_yday=31, tm_isdst=0).pkl -------------------------------------------------------------------------------- /results/models/step_mnist_cnn_1_C[1]_iid[1]_E[1]_B[1].pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/results/models/step_mnist_cnn_1_C[1]_iid[1]_E[1]_B[1].pkl -------------------------------------------------------------------------------- /results/models/step_mnist_cnn_1_C[1]_iid[1]_E[1]_B[1]_%b_%d_%Y_%H_%M_%S.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/results/models/step_mnist_cnn_1_C[1]_iid[1]_E[1]_B[1]_%b_%d_%Y_%H_%M_%S.pkl -------------------------------------------------------------------------------- /results/models/step_mnist_cnn_1_C[1]_iid[1]_E[1]_B[1]_time.struct_time(tm_year=2022, tm_mon=10, tm_mday=21, tm_hour=21, tm_min=5, tm_sec=9, tm_wday=4, tm_yday=294, tm_isdst=0).pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/results/models/step_mnist_cnn_1_C[1]_iid[1]_E[1]_B[1]_time.struct_time(tm_year=2022, tm_mon=10, tm_mday=21, tm_hour=21, tm_min=5, tm_sec=9, tm_wday=4, tm_yday=294, tm_isdst=0).pkl -------------------------------------------------------------------------------- /sampling.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qiongwu86/AFLDDPG/HEAD/sampling.py --------------------------------------------------------------------------------