summaryrefslogtreecommitdiffstats
path: root/arm-fm-22k/lib_src/eas_fmtables.c
diff options
context:
space:
mode:
Diffstat (limited to 'arm-fm-22k/lib_src/eas_fmtables.c')
-rw-r--r--arm-fm-22k/lib_src/eas_fmtables.c368
1 files changed, 368 insertions, 0 deletions
diff --git a/arm-fm-22k/lib_src/eas_fmtables.c b/arm-fm-22k/lib_src/eas_fmtables.c
new file mode 100644
index 0000000..25c6961
--- /dev/null
+++ b/arm-fm-22k/lib_src/eas_fmtables.c
@@ -0,0 +1,368 @@
+/*----------------------------------------------------------------------------
+ *
+ * File:
+ * eas_fmtables.c
+ *
+ * Contents and purpose:
+ * Contains lookup tables for the FM synthesizer
+ *
+ *
+ * Copyright Sonic Network Inc. 2005
+
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ *----------------------------------------------------------------------------
+ * Revision Control:
+ * $Revision: 82 $
+ * $Date: 2006-07-10 11:45:19 -0700 (Mon, 10 Jul 2006) $
+ *
+ *----------------------------------------------------------------------------
+*/
+
+
+#include "eas_types.h"
+
+/* this table is needed by the DSP and the main processor */
+const EAS_U8 fmScaleTable[16] =
+{
+ 0,8,16,24,32,40,48,56,64,72,80,96,128,160,192,255
+};
+
+/* these tables are needed on the main processor */
+#ifndef _DSP_CODE
+const EAS_I16 fmControlTable[128] =
+{
+ -32768,-14313,-12265,-11067,-10217,-9558,-9019,-8563,
+ -8169,-7821,-7510,-7228,-6971,-6734,-6515,-6312,
+ -6121,-5942,-5773,-5613,-5462,-5317,-5180,-5049,
+ -4923,-4802,-4686,-4575,-4467,-4364,-4264,-4167,
+ -4073,-3982,-3894,-3808,-3725,-3644,-3565,-3488,
+ -3414,-3341,-3269,-3200,-3132,-3066,-3001,-2937,
+ -2875,-2814,-2754,-2696,-2638,-2582,-2527,-2473,
+ -2419,-2367,-2316,-2265,-2216,-2167,-2119,-2071,
+ -2025,-1979,-1934,-1889,-1846,-1803,-1760,-1718,
+ -1677,-1636,-1596,-1556,-1517,-1478,-1440,-1403,
+ -1366,-1329,-1293,-1257,-1221,-1186,-1152,-1118,
+ -1084,-1051,-1018,-985,-953,-921,-889,-858,
+ -827,-796,-766,-736,-706,-677,-648,-619,
+ -590,-562,-534,-506,-479,-452,-425,-398,
+ -371,-345,-319,-293,-268,-242,-217,-192,
+ -168,-143,-119,-95,-71,-47,-23,0
+};
+
+const EAS_U16 fmRateTable[128] =
+{
+ 32767,32764,32758,32747,32731,32712,32688,32659,
+ 32627,32590,32548,32503,32453,32398,32340,32277,
+ 32211,32140,32065,31985,31902,31815,31724,31628,
+ 31529,31426,31319,31208,31094,30976,30854,30728,
+ 30599,30466,30330,30191,30048,29902,29752,29599,
+ 29443,29285,29123,28958,28790,28619,28445,28269,
+ 28090,27909,27725,27538,27349,27158,26964,26769,
+ 26571,26371,26169,25965,25760,25552,25343,25132,
+ 24920,24706,24490,24274,24056,23836,23616,23394,
+ 23172,22948,22724,22499,22273,22046,21819,21591,
+ 21363,21135,20906,20676,20447,20217,19987,19758,
+ 19528,19298,19069,18840,18610,18382,18153,17926,
+ 17698,17471,17245,17020,16795,16571,16347,16125,
+ 15903,15683,15463,15245,15027,14811,14596,14382,
+ 14169,13957,13747,13538,13331,13125,12920,12717,
+ 12516,12316,12117,11921,11725,11532,11340,0
+};
+
+const EAS_U16 fmAttackTable[15] =
+{
+ 27,54,109,327,655,1310,2730,4095,
+ 4681,5461,6553,8191,10922,16383,32767
+};
+
+const EAS_U8 fmDecayTable[16] =
+{
+ 4,7,10,15,20,25,30,35,40,50,60,70,80,90,100,127
+};
+
+const EAS_U8 fmReleaseTable[16] =
+{
+ 10,15,20,25,30,35,40,45,50,60,70,80,90,100,113,127
+};
+#endif
+
+/* this table is needed only on the DSP */
+#if defined(_DSP_CODE) || !defined(_SPLIT_ARCHITECTURE)
+//---------------------------------------------------------------------
+// sineTable
+//
+// Contains sine lookup table
+//---------------------------------------------------------------------
+
+const EAS_I16 sineTable[2048] =
+{
+ 0,101,201,302,402,503,603,704,
+ 804,905,1005,1106,1206,1307,1407,1507,
+ 1608,1708,1809,1909,2009,2110,2210,2310,
+ 2410,2511,2611,2711,2811,2911,3012,3112,
+ 3212,3312,3412,3512,3612,3712,3811,3911,
+ 4011,4111,4210,4310,4410,4509,4609,4708,
+ 4808,4907,5007,5106,5205,5305,5404,5503,
+ 5602,5701,5800,5899,5998,6096,6195,6294,
+ 6393,6491,6590,6688,6786,6885,6983,7081,
+ 7179,7277,7375,7473,7571,7669,7767,7864,
+ 7962,8059,8157,8254,8351,8448,8545,8642,
+ 8739,8836,8933,9030,9126,9223,9319,9416,
+ 9512,9608,9704,9800,9896,9992,10087,10183,
+ 10278,10374,10469,10564,10659,10754,10849,10944,
+ 11039,11133,11228,11322,11417,11511,11605,11699,
+ 11793,11886,11980,12074,12167,12260,12353,12446,
+ 12539,12632,12725,12817,12910,13002,13094,13187,
+ 13279,13370,13462,13554,13645,13736,13828,13919,
+ 14010,14101,14191,14282,14372,14462,14553,14643,
+ 14732,14822,14912,15001,15090,15180,15269,15358,
+ 15446,15535,15623,15712,15800,15888,15976,16063,
+ 16151,16238,16325,16413,16499,16586,16673,16759,
+ 16846,16932,17018,17104,17189,17275,17360,17445,
+ 17530,17615,17700,17784,17869,17953,18037,18121,
+ 18204,18288,18371,18454,18537,18620,18703,18785,
+ 18868,18950,19032,19113,19195,19276,19357,19438,
+ 19519,19600,19680,19761,19841,19921,20000,20080,
+ 20159,20238,20317,20396,20475,20553,20631,20709,
+ 20787,20865,20942,21019,21096,21173,21250,21326,
+ 21403,21479,21554,21630,21705,21781,21856,21930,
+ 22005,22079,22154,22227,22301,22375,22448,22521,
+ 22594,22667,22739,22812,22884,22956,23027,23099,
+ 23170,23241,23311,23382,23452,23522,23592,23662,
+ 23731,23801,23870,23938,24007,24075,24143,24211,
+ 24279,24346,24413,24480,24547,24613,24680,24746,
+ 24811,24877,24942,25007,25072,25137,25201,25265,
+ 25329,25393,25456,25519,25582,25645,25708,25770,
+ 25832,25893,25955,26016,26077,26138,26198,26259,
+ 26319,26378,26438,26497,26556,26615,26674,26732,
+ 26790,26848,26905,26962,27019,27076,27133,27189,
+ 27245,27300,27356,27411,27466,27521,27575,27629,
+ 27683,27737,27790,27843,27896,27949,28001,28053,
+ 28105,28157,28208,28259,28310,28360,28411,28460,
+ 28510,28560,28609,28658,28706,28755,28803,28850,
+ 28898,28945,28992,29039,29085,29131,29177,29223,
+ 29268,29313,29358,29403,29447,29491,29534,29578,
+ 29621,29664,29706,29749,29791,29832,29874,29915,
+ 29956,29997,30037,30077,30117,30156,30195,30234,
+ 30273,30311,30349,30387,30424,30462,30498,30535,
+ 30571,30607,30643,30679,30714,30749,30783,30818,
+ 30852,30885,30919,30952,30985,31017,31050,31082,
+ 31113,31145,31176,31206,31237,31267,31297,31327,
+ 31356,31385,31414,31442,31470,31498,31526,31553,
+ 31580,31607,31633,31659,31685,31710,31736,31760,
+ 31785,31809,31833,31857,31880,31903,31926,31949,
+ 31971,31993,32014,32036,32057,32077,32098,32118,
+ 32137,32157,32176,32195,32213,32232,32250,32267,
+ 32285,32302,32318,32335,32351,32367,32382,32397,
+ 32412,32427,32441,32455,32469,32482,32495,32508,
+ 32521,32533,32545,32556,32567,32578,32589,32599,
+ 32609,32619,32628,32637,32646,32655,32663,32671,
+ 32678,32685,32692,32699,32705,32711,32717,32722,
+ 32728,32732,32737,32741,32745,32748,32752,32755,
+ 32757,32759,32761,32763,32765,32766,32766,32767,
+ 32767,32767,32766,32766,32765,32763,32761,32759,
+ 32757,32755,32752,32748,32745,32741,32737,32732,
+ 32728,32722,32717,32711,32705,32699,32692,32685,
+ 32678,32671,32663,32655,32646,32637,32628,32619,
+ 32609,32599,32589,32578,32567,32556,32545,32533,
+ 32521,32508,32495,32482,32469,32455,32441,32427,
+ 32412,32397,32382,32367,32351,32335,32318,32302,
+ 32285,32267,32250,32232,32213,32195,32176,32157,
+ 32137,32118,32098,32077,32057,32036,32014,31993,
+ 31971,31949,31926,31903,31880,31857,31833,31809,
+ 31785,31760,31736,31710,31685,31659,31633,31607,
+ 31580,31553,31526,31498,31470,31442,31414,31385,
+ 31356,31327,31297,31267,31237,31206,31176,31145,
+ 31113,31082,31050,31017,30985,30952,30919,30885,
+ 30852,30818,30783,30749,30714,30679,30643,30607,
+ 30571,30535,30498,30462,30424,30387,30349,30311,
+ 30273,30234,30195,30156,30117,30077,30037,29997,
+ 29956,29915,29874,29832,29791,29749,29706,29664,
+ 29621,29578,29534,29491,29447,29403,29358,29313,
+ 29268,29223,29177,29131,29085,29039,28992,28945,
+ 28898,28850,28803,28755,28706,28658,28609,28560,
+ 28510,28460,28411,28360,28310,28259,28208,28157,
+ 28105,28053,28001,27949,27896,27843,27790,27737,
+ 27683,27629,27575,27521,27466,27411,27356,27300,
+ 27245,27189,27133,27076,27019,26962,26905,26848,
+ 26790,26732,26674,26615,26556,26497,26438,26378,
+ 26319,26259,26198,26138,26077,26016,25955,25893,
+ 25832,25770,25708,25645,25582,25519,25456,25393,
+ 25329,25265,25201,25137,25072,25007,24942,24877,
+ 24811,24746,24680,24613,24547,24480,24413,24346,
+ 24279,24211,24143,24075,24007,23938,23870,23801,
+ 23731,23662,23592,23522,23452,23382,23311,23241,
+ 23170,23099,23027,22956,22884,22812,22739,22667,
+ 22594,22521,22448,22375,22301,22227,22154,22079,
+ 22005,21930,21856,21781,21705,21630,21554,21479,
+ 21403,21326,21250,21173,21096,21019,20942,20865,
+ 20787,20709,20631,20553,20475,20396,20317,20238,
+ 20159,20080,20000,19921,19841,19761,19680,19600,
+ 19519,19438,19357,19276,19195,19113,19032,18950,
+ 18868,18785,18703,18620,18537,18454,18371,18288,
+ 18204,18121,18037,17953,17869,17784,17700,17615,
+ 17530,17445,17360,17275,17189,17104,17018,16932,
+ 16846,16759,16673,16586,16499,16413,16325,16238,
+ 16151,16063,15976,15888,15800,15712,15623,15535,
+ 15446,15358,15269,15180,15090,15001,14912,14822,
+ 14732,14643,14553,14462,14372,14282,14191,14101,
+ 14010,13919,13828,13736,13645,13554,13462,13370,
+ 13279,13187,13094,13002,12910,12817,12725,12632,
+ 12539,12446,12353,12260,12167,12074,11980,11886,
+ 11793,11699,11605,11511,11417,11322,11228,11133,
+ 11039,10944,10849,10754,10659,10564,10469,10374,
+ 10278,10183,10087,9992,9896,9800,9704,9608,
+ 9512,9416,9319,9223,9126,9030,8933,8836,
+ 8739,8642,8545,8448,8351,8254,8157,8059,
+ 7962,7864,7767,7669,7571,7473,7375,7277,
+ 7179,7081,6983,6885,6786,6688,6590,6491,
+ 6393,6294,6195,6096,5998,5899,5800,5701,
+ 5602,5503,5404,5305,5205,5106,5007,4907,
+ 4808,4708,4609,4509,4410,4310,4210,4111,
+ 4011,3911,3811,3712,3612,3512,3412,3312,
+ 3212,3112,3012,2911,2811,2711,2611,2511,
+ 2410,2310,2210,2110,2009,1909,1809,1708,
+ 1608,1507,1407,1307,1206,1106,1005,905,
+ 804,704,603,503,402,302,201,101,
+ 0,-101,-201,-302,-402,-503,-603,-704,
+ -804,-905,-1005,-1106,-1206,-1307,-1407,-1507,
+ -1608,-1708,-1809,-1909,-2009,-2110,-2210,-2310,
+ -2410,-2511,-2611,-2711,-2811,-2911,-3012,-3112,
+ -3212,-3312,-3412,-3512,-3612,-3712,-3811,-3911,
+ -4011,-4111,-4210,-4310,-4410,-4509,-4609,-4708,
+ -4808,-4907,-5007,-5106,-5205,-5305,-5404,-5503,
+ -5602,-5701,-5800,-5899,-5998,-6096,-6195,-6294,
+ -6393,-6491,-6590,-6688,-6786,-6885,-6983,-7081,
+ -7179,-7277,-7375,-7473,-7571,-7669,-7767,-7864,
+ -7962,-8059,-8157,-8254,-8351,-8448,-8545,-8642,
+ -8739,-8836,-8933,-9030,-9126,-9223,-9319,-9416,
+ -9512,-9608,-9704,-9800,-9896,-9992,-10087,-10183,
+ -10278,-10374,-10469,-10564,-10659,-10754,-10849,-10944,
+ -11039,-11133,-11228,-11322,-11417,-11511,-11605,-11699,
+ -11793,-11886,-11980,-12074,-12167,-12260,-12353,-12446,
+ -12539,-12632,-12725,-12817,-12910,-13002,-13094,-13187,
+ -13279,-13370,-13462,-13554,-13645,-13736,-13828,-13919,
+ -14010,-14101,-14191,-14282,-14372,-14462,-14553,-14643,
+ -14732,-14822,-14912,-15001,-15090,-15180,-15269,-15358,
+ -15446,-15535,-15623,-15712,-15800,-15888,-15976,-16063,
+ -16151,-16238,-16325,-16413,-16499,-16586,-16673,-16759,
+ -16846,-16932,-17018,-17104,-17189,-17275,-17360,-17445,
+ -17530,-17615,-17700,-17784,-17869,-17953,-18037,-18121,
+ -18204,-18288,-18371,-18454,-18537,-18620,-18703,-18785,
+ -18868,-18950,-19032,-19113,-19195,-19276,-19357,-19438,
+ -19519,-19600,-19680,-19761,-19841,-19921,-20000,-20080,
+ -20159,-20238,-20317,-20396,-20475,-20553,-20631,-20709,
+ -20787,-20865,-20942,-21019,-21096,-21173,-21250,-21326,
+ -21403,-21479,-21554,-21630,-21705,-21781,-21856,-21930,
+ -22005,-22079,-22154,-22227,-22301,-22375,-22448,-22521,
+ -22594,-22667,-22739,-22812,-22884,-22956,-23027,-23099,
+ -23170,-23241,-23311,-23382,-23452,-23522,-23592,-23662,
+ -23731,-23801,-23870,-23938,-24007,-24075,-24143,-24211,
+ -24279,-24346,-24413,-24480,-24547,-24613,-24680,-24746,
+ -24811,-24877,-24942,-25007,-25072,-25137,-25201,-25265,
+ -25329,-25393,-25456,-25519,-25582,-25645,-25708,-25770,
+ -25832,-25893,-25955,-26016,-26077,-26138,-26198,-26259,
+ -26319,-26378,-26438,-26497,-26556,-26615,-26674,-26732,
+ -26790,-26848,-26905,-26962,-27019,-27076,-27133,-27189,
+ -27245,-27300,-27356,-27411,-27466,-27521,-27575,-27629,
+ -27683,-27737,-27790,-27843,-27896,-27949,-28001,-28053,
+ -28105,-28157,-28208,-28259,-28310,-28360,-28411,-28460,
+ -28510,-28560,-28609,-28658,-28706,-28755,-28803,-28850,
+ -28898,-28945,-28992,-29039,-29085,-29131,-29177,-29223,
+ -29268,-29313,-29358,-29403,-29447,-29491,-29534,-29578,
+ -29621,-29664,-29706,-29749,-29791,-29832,-29874,-29915,
+ -29956,-29997,-30037,-30077,-30117,-30156,-30195,-30234,
+ -30273,-30311,-30349,-30387,-30424,-30462,-30498,-30535,
+ -30571,-30607,-30643,-30679,-30714,-30749,-30783,-30818,
+ -30852,-30885,-30919,-30952,-30985,-31017,-31050,-31082,
+ -31113,-31145,-31176,-31206,-31237,-31267,-31297,-31327,
+ -31356,-31385,-31414,-31442,-31470,-31498,-31526,-31553,
+ -31580,-31607,-31633,-31659,-31685,-31710,-31736,-31760,
+ -31785,-31809,-31833,-31857,-31880,-31903,-31926,-31949,
+ -31971,-31993,-32014,-32036,-32057,-32077,-32098,-32118,
+ -32137,-32157,-32176,-32195,-32213,-32232,-32250,-32267,
+ -32285,-32302,-32318,-32335,-32351,-32367,-32382,-32397,
+ -32412,-32427,-32441,-32455,-32469,-32482,-32495,-32508,
+ -32521,-32533,-32545,-32556,-32567,-32578,-32589,-32599,
+ -32609,-32619,-32628,-32637,-32646,-32655,-32663,-32671,
+ -32678,-32685,-32692,-32699,-32705,-32711,-32717,-32722,
+ -32728,-32732,-32737,-32741,-32745,-32748,-32752,-32755,
+ -32757,-32759,-32761,-32763,-32765,-32766,-32766,-32767,
+ -32767,-32767,-32766,-32766,-32765,-32763,-32761,-32759,
+ -32757,-32755,-32752,-32748,-32745,-32741,-32737,-32732,
+ -32728,-32722,-32717,-32711,-32705,-32699,-32692,-32685,
+ -32678,-32671,-32663,-32655,-32646,-32637,-32628,-32619,
+ -32609,-32599,-32589,-32578,-32567,-32556,-32545,-32533,
+ -32521,-32508,-32495,-32482,-32469,-32455,-32441,-32427,
+ -32412,-32397,-32382,-32367,-32351,-32335,-32318,-32302,
+ -32285,-32267,-32250,-32232,-32213,-32195,-32176,-32157,
+ -32137,-32118,-32098,-32077,-32057,-32036,-32014,-31993,
+ -31971,-31949,-31926,-31903,-31880,-31857,-31833,-31809,
+ -31785,-31760,-31736,-31710,-31685,-31659,-31633,-31607,
+ -31580,-31553,-31526,-31498,-31470,-31442,-31414,-31385,
+ -31356,-31327,-31297,-31267,-31237,-31206,-31176,-31145,
+ -31113,-31082,-31050,-31017,-30985,-30952,-30919,-30885,
+ -30852,-30818,-30783,-30749,-30714,-30679,-30643,-30607,
+ -30571,-30535,-30498,-30462,-30424,-30387,-30349,-30311,
+ -30273,-30234,-30195,-30156,-30117,-30077,-30037,-29997,
+ -29956,-29915,-29874,-29832,-29791,-29749,-29706,-29664,
+ -29621,-29578,-29534,-29491,-29447,-29403,-29358,-29313,
+ -29268,-29223,-29177,-29131,-29085,-29039,-28992,-28945,
+ -28898,-28850,-28803,-28755,-28706,-28658,-28609,-28560,
+ -28510,-28460,-28411,-28360,-28310,-28259,-28208,-28157,
+ -28105,-28053,-28001,-27949,-27896,-27843,-27790,-27737,
+ -27683,-27629,-27575,-27521,-27466,-27411,-27356,-27300,
+ -27245,-27189,-27133,-27076,-27019,-26962,-26905,-26848,
+ -26790,-26732,-26674,-26615,-26556,-26497,-26438,-26378,
+ -26319,-26259,-26198,-26138,-26077,-26016,-25955,-25893,
+ -25832,-25770,-25708,-25645,-25582,-25519,-25456,-25393,
+ -25329,-25265,-25201,-25137,-25072,-25007,-24942,-24877,
+ -24811,-24746,-24680,-24613,-24547,-24480,-24413,-24346,
+ -24279,-24211,-24143,-24075,-24007,-23938,-23870,-23801,
+ -23731,-23662,-23592,-23522,-23452,-23382,-23311,-23241,
+ -23170,-23099,-23027,-22956,-22884,-22812,-22739,-22667,
+ -22594,-22521,-22448,-22375,-22301,-22227,-22154,-22079,
+ -22005,-21930,-21856,-21781,-21705,-21630,-21554,-21479,
+ -21403,-21326,-21250,-21173,-21096,-21019,-20942,-20865,
+ -20787,-20709,-20631,-20553,-20475,-20396,-20317,-20238,
+ -20159,-20080,-20000,-19921,-19841,-19761,-19680,-19600,
+ -19519,-19438,-19357,-19276,-19195,-19113,-19032,-18950,
+ -18868,-18785,-18703,-18620,-18537,-18454,-18371,-18288,
+ -18204,-18121,-18037,-17953,-17869,-17784,-17700,-17615,
+ -17530,-17445,-17360,-17275,-17189,-17104,-17018,-16932,
+ -16846,-16759,-16673,-16586,-16499,-16413,-16325,-16238,
+ -16151,-16063,-15976,-15888,-15800,-15712,-15623,-15535,
+ -15446,-15358,-15269,-15180,-15090,-15001,-14912,-14822,
+ -14732,-14643,-14553,-14462,-14372,-14282,-14191,-14101,
+ -14010,-13919,-13828,-13736,-13645,-13554,-13462,-13370,
+ -13279,-13187,-13094,-13002,-12910,-12817,-12725,-12632,
+ -12539,-12446,-12353,-12260,-12167,-12074,-11980,-11886,
+ -11793,-11699,-11605,-11511,-11417,-11322,-11228,-11133,
+ -11039,-10944,-10849,-10754,-10659,-10564,-10469,-10374,
+ -10278,-10183,-10087,-9992,-9896,-9800,-9704,-9608,
+ -9512,-9416,-9319,-9223,-9126,-9030,-8933,-8836,
+ -8739,-8642,-8545,-8448,-8351,-8254,-8157,-8059,
+ -7962,-7864,-7767,-7669,-7571,-7473,-7375,-7277,
+ -7179,-7081,-6983,-6885,-6786,-6688,-6590,-6491,
+ -6393,-6294,-6195,-6096,-5998,-5899,-5800,-5701,
+ -5602,-5503,-5404,-5305,-5205,-5106,-5007,-4907,
+ -4808,-4708,-4609,-4509,-4410,-4310,-4210,-4111,
+ -4011,-3911,-3811,-3712,-3612,-3512,-3412,-3312,
+ -3212,-3112,-3012,-2911,-2811,-2711,-2611,-2511,
+ -2410,-2310,-2210,-2110,-2009,-1909,-1809,-1708,
+ -1608,-1507,-1407,-1307,-1206,-1106,-1005,-905,
+ -804,-704,-603,-503,-402,-302,-201,-101
+};
+#endif
+