summaryrefslogtreecommitdiff
path: root/pjmedia
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2007-04-07 20:45:55 +0000
committerBenny Prijono <bennylp@teluu.com>2007-04-07 20:45:55 +0000
commit4e142ea98dbc56e5efb1ad729f099f9cfefd0169 (patch)
tree44f542dd0215fb8bb2dc5c8f95d37a825741920a /pjmedia
parentff909fc7306b566d21558a510eaad4c85fe02412 (diff)
Moved plc, resample, and mp3 to third_party
git-svn-id: http://svn.pjsip.org/repos/pjproject/branches/split-3rd-party@1175 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjmedia')
-rw-r--r--pjmedia/build/pjmedia.dsp9
-rw-r--r--pjmedia/src/pjmedia/BladeMP3EncDLL.h283
-rw-r--r--pjmedia/src/pjmedia/largefilter.h16391
-rw-r--r--pjmedia/src/pjmedia/mp3_writer.c563
-rw-r--r--pjmedia/src/pjmedia/plc_steveu.h153
-rw-r--r--pjmedia/src/pjmedia/smallfilter.h4617
6 files changed, 7 insertions, 22009 deletions
diff --git a/pjmedia/build/pjmedia.dsp b/pjmedia/build/pjmedia.dsp
index 3105cd54..6846ffe5 100644
--- a/pjmedia/build/pjmedia.dsp
+++ b/pjmedia/build/pjmedia.dsp
@@ -194,11 +194,16 @@ SOURCE=..\src\pjmedia\port.c
# End Source File
# Begin Source File
-SOURCE=..\src\pjmedia\resample.c
+SOURCE=..\src\pjmedia\resample_port.c
# End Source File
# Begin Source File
-SOURCE=..\src\pjmedia\resample_port.c
+SOURCE=..\src\pjmedia\resample_resample.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\pjmedia\resample_speex.c
+# PROP Exclude_From_Build 1
# End Source File
# Begin Source File
diff --git a/pjmedia/src/pjmedia/BladeMP3EncDLL.h b/pjmedia/src/pjmedia/BladeMP3EncDLL.h
deleted file mode 100644
index 2e32b913..00000000
--- a/pjmedia/src/pjmedia/BladeMP3EncDLL.h
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
- * Blade Type of DLL Interface for Lame encoder
- *
- * Copyright (c) 1999-2002 A.L. Faber
- * Based on bladedll.h version 1.0 written by Jukka Poikolainen
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * 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. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-//#define _BLADEDLL 1
-
-#ifndef ___BLADEDLL_H_INCLUDED___
-#define ___BLADEDLL_H_INCLUDED___
-
-#ifdef __GNUC__
-//#define ATTRIBUTE_PACKED __attribute__((packed))
-#define ATTRIBUTE_PACKED
-#else
-#define ATTRIBUTE_PACKED
-#pragma pack(push)
-#pragma pack(1)
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* encoding formats */
-
-#define BE_CONFIG_MP3 0
-#define BE_CONFIG_LAME 256
-
-/* type definitions */
-
-typedef unsigned long HBE_STREAM;
-typedef HBE_STREAM *PHBE_STREAM;
-typedef unsigned long BE_ERR;
-
-/* error codes */
-
-#define BE_ERR_SUCCESSFUL 0x00000000
-#define BE_ERR_INVALID_FORMAT 0x00000001
-#define BE_ERR_INVALID_FORMAT_PARAMETERS 0x00000002
-#define BE_ERR_NO_MORE_HANDLES 0x00000003
-#define BE_ERR_INVALID_HANDLE 0x00000004
-#define BE_ERR_BUFFER_TOO_SMALL 0x00000005
-
-/* other constants */
-
-#define BE_MAX_HOMEPAGE 128
-
-/* format specific variables */
-
-#define BE_MP3_MODE_STEREO 0
-#define BE_MP3_MODE_JSTEREO 1
-#define BE_MP3_MODE_DUALCHANNEL 2
-#define BE_MP3_MODE_MONO 3
-
-
-
-#define MPEG1 1
-#define MPEG2 0
-
-#ifdef _BLADEDLL
-#undef FLOAT
- #include <Windows.h>
-#endif
-
-#define CURRENT_STRUCT_VERSION 1
-#define CURRENT_STRUCT_SIZE sizeof(BE_CONFIG) // is currently 331 bytes
-
-
-typedef enum
-{
- VBR_METHOD_NONE = -1,
- VBR_METHOD_DEFAULT = 0,
- VBR_METHOD_OLD = 1,
- VBR_METHOD_NEW = 2,
- VBR_METHOD_MTRH = 3,
- VBR_METHOD_ABR = 4
-} VBRMETHOD;
-
-typedef enum
-{
- LQP_NOPRESET =-1,
-
- // QUALITY PRESETS
- LQP_NORMAL_QUALITY = 0,
- LQP_LOW_QUALITY = 1,
- LQP_HIGH_QUALITY = 2,
- LQP_VOICE_QUALITY = 3,
- LQP_R3MIX = 4,
- LQP_VERYHIGH_QUALITY = 5,
- LQP_STANDARD = 6,
- LQP_FAST_STANDARD = 7,
- LQP_EXTREME = 8,
- LQP_FAST_EXTREME = 9,
- LQP_INSANE = 10,
- LQP_ABR = 11,
- LQP_CBR = 12,
- LQP_MEDIUM = 13,
- LQP_FAST_MEDIUM = 14,
-
- // NEW PRESET VALUES
- LQP_PHONE =1000,
- LQP_SW =2000,
- LQP_AM =3000,
- LQP_FM =4000,
- LQP_VOICE =5000,
- LQP_RADIO =6000,
- LQP_TAPE =7000,
- LQP_HIFI =8000,
- LQP_CD =9000,
- LQP_STUDIO =10000
-
-} LAME_QUALITY_PRESET;
-
-
-
-typedef struct {
- unsigned long dwConfig; // BE_CONFIG_XXXXX
- // Currently only BE_CONFIG_MP3 is supported
- union {
-
- struct {
-
- unsigned long dwSampleRate; // 48000, 44100 and 32000 allowed
- unsigned char byMode; // BE_MP3_MODE_STEREO, BE_MP3_MODE_DUALCHANNEL, BE_MP3_MODE_MONO
- unsigned short wBitrate; // 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256 and 320 allowed
- int bPrivate;
- int bCRC;
- int bCopyright;
- int bOriginal;
-
- } mp3; // BE_CONFIG_MP3
-
- struct
- {
- // STRUCTURE INFORMATION
- unsigned long dwStructVersion;
- unsigned long dwStructSize;
-
- // BASIC ENCODER SETTINGS
- unsigned long dwSampleRate; // SAMPLERATE OF INPUT FILE
- unsigned long dwReSampleRate; // DOWNSAMPLERATE, 0=ENCODER DECIDES
- long nMode; // BE_MP3_MODE_STEREO, BE_MP3_MODE_DUALCHANNEL, BE_MP3_MODE_MONO
- unsigned long dwBitrate; // CBR bitrate, VBR min bitrate
- unsigned long dwMaxBitrate; // CBR ignored, VBR Max bitrate
- long nPreset; // Quality preset, use one of the settings of the LAME_QUALITY_PRESET enum
- unsigned long dwMpegVersion; // FUTURE USE, MPEG-1 OR MPEG-2
- unsigned long dwPsyModel; // FUTURE USE, SET TO 0
- unsigned long dwEmphasis; // FUTURE USE, SET TO 0
-
- // BIT STREAM SETTINGS
- int bPrivate; // Set Private Bit (TRUE/FALSE)
- int bCRC; // Insert CRC (TRUE/FALSE)
- int bCopyright; // Set Copyright Bit (TRUE/FALSE)
- int bOriginal; // Set Original Bit (TRUE/FALSE)
-
- // VBR STUFF
- int bWriteVBRHeader; // WRITE XING VBR HEADER (TRUE/FALSE)
- int bEnableVBR; // USE VBR ENCODING (TRUE/FALSE)
- int nVBRQuality; // VBR QUALITY 0..9
- unsigned long dwVbrAbr_bps; // Use ABR in stead of nVBRQuality
- VBRMETHOD nVbrMethod;
- int bNoRes; // Disable Bit resorvoir (TRUE/FALSE)
-
- // MISC SETTINGS
- int bStrictIso; // Use strict ISO encoding rules (TRUE/FALSE)
- unsigned short nQuality; // Quality Setting, HIGH unsigned char should be NOT LOW byte, otherwhise quality=5
-
- // FUTURE USE, SET TO 0, align strucutre to 331 bytes
- unsigned char btReserved[255-4*sizeof(unsigned long) - sizeof( unsigned short )];
-
- } LHV1; // LAME header version 1
-
- struct {
-
- unsigned long dwSampleRate;
- unsigned char byMode;
- unsigned short wBitrate;
- unsigned char byEncodingMethod;
-
- } aac;
-
- } format;
-
-} BE_CONFIG, *PBE_CONFIG ATTRIBUTE_PACKED;
-
-
-typedef struct {
-
- // BladeEnc DLL Version number
-
- unsigned char byDLLMajorVersion;
- unsigned char byDLLMinorVersion;
-
- // BladeEnc Engine Version Number
-
- unsigned char byMajorVersion;
- unsigned char byMinorVersion;
-
- // DLL Release date
-
- unsigned char byDay;
- unsigned char byMonth;
- unsigned short wYear;
-
- // BladeEnc Homepage URL
-
- char zHomepage[BE_MAX_HOMEPAGE + 1];
-
- unsigned char byAlphaLevel;
- unsigned char byBetaLevel;
- unsigned char byMMXEnabled;
-
- unsigned char btReserved[125];
-
-
-} BE_VERSION, *PBE_VERSION ATTRIBUTE_PACKED;
-
-#ifndef _BLADEDLL
-
-typedef unsigned long (*BEINITSTREAM) (PBE_CONFIG, unsigned long *, unsigned long *, PHBE_STREAM);
-typedef unsigned long (*BEENCODECHUNK) (HBE_STREAM, unsigned long, short *, unsigned char *, unsigned long *);
-
-// added for floating point audio -- DSPguru, jd
-typedef unsigned long (*BEENCODECHUNKFLOATS16NI) (HBE_STREAM, unsigned long, float *, float *, unsigned char *, unsigned long *);
-typedef unsigned long (*BEDEINITSTREAM) (HBE_STREAM, unsigned char *, unsigned long *);
-typedef unsigned long (*BECLOSESTREAM) (HBE_STREAM);
-typedef void (*BEVERSION) (PBE_VERSION);
-typedef unsigned long (*BEWRITEVBRHEADER) (const char*);
-typedef unsigned long (*BEWRITEINFOTAG) (HBE_STREAM, const char * );
-
-#define TEXT_BEINITSTREAM "beInitStream"
-#define TEXT_BEENCODECHUNK "beEncodeChunk"
-#define TEXT_BEENCODECHUNKFLOATS16NI "beEncodeChunkFloatS16NI"
-#define TEXT_BEDEINITSTREAM "beDeinitStream"
-#define TEXT_BECLOSESTREAM "beCloseStream"
-#define TEXT_BEVERSION "beVersion"
-#define TEXT_BEWRITEVBRHEADER "beWriteVBRHeader"
-#define TEXT_BEFLUSHNOGAP "beFlushNoGap"
-#define TEXT_BEWRITEINFOTAG "beWriteInfoTag"
-
-
-#else
-
-__declspec(dllexport) unsigned long beInitStream(PBE_CONFIG pbeConfig, Punsigned long dwSamples, Punsigned long dwBufferSize, PHBE_STREAM phbeStream);
-__declspec(dllexport) unsigned long beEncodeChunk(HBE_STREAM hbeStream, unsigned long nSamples, PSHORT pSamples, Punsigned char pOutput, Punsigned long pdwOutput);
-
-// added for floating point audio -- DSPguru, jd
-__declspec(dllexport) unsigned long beEncodeChunkFloatS16NI(HBE_STREAM hbeStream, unsigned long nSamples, PFLOAT buffer_l, PFLOAT buffer_r, Punsigned char pOutput, Punsigned long pdwOutput);
-__declspec(dllexport) unsigned long beDeinitStream(HBE_STREAM hbeStream, Punsigned char pOutput, Punsigned long pdwOutput);
-__declspec(dllexport) unsigned long beCloseStream(HBE_STREAM hbeStream);
-__declspec(dllexport) VOID beVersion(PBE_VERSION pbeVersion);
-__declspec(dllexport) unsigned long beWriteVBRHeader(LPCSTR lpszFileName);
-__declspec(dllexport) unsigned long beFlushNoGap(HBE_STREAM hbeStream, Punsigned char pOutput, Punsigned long pdwOutput);
-__declspec(dllexport) unsigned long beWriteInfoTag( HBE_STREAM hbeStream, LPCSTR lpszFileName );
-
-#endif
-
-#ifndef __GNUC__
-#pragma pack(pop)
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/pjmedia/src/pjmedia/largefilter.h b/pjmedia/src/pjmedia/largefilter.h
deleted file mode 100644
index 1c3f7c0a..00000000
--- a/pjmedia/src/pjmedia/largefilter.h
+++ /dev/null
@@ -1,16391 +0,0 @@
-/* Included by resamplesubs.c */
-#define LARGE_FILTER_NMULT ((RES_HWORD)65)
-#define LARGE_FILTER_SCALE 14746 /* Unity-gain scale factor */
-#define LARGE_FILTER_NWING 8192 /* Filter table length */
-static const RES_HWORD LARGE_FILTER_IMP[] /* Impulse response */ = {
-32767,
-32766,
-32764,
-32761,
-32756,
-32750,
-32743,
-32734,
-32724,
-32713,
-32700,
-32686,
-32671,
-32654,
-32636,
-32617,
-32596,
-32574,
-32551,
-32526,
-32500,
-32473,
-32445,
-32415,
-32383,
-32351,
-32317,
-32282,
-32246,
-32208,
-32169,
-32129,
-32087,
-32044,
-32000,
-31955,
-31908,
-31860,
-31811,
-31760,
-31708,
-31655,
-31601,
-31545,
-31489,
-31431,
-31371,
-31311,
-31249,
-31186,
-31122,
-31056,
-30990,
-30922,
-30853,
-30783,
-30711,
-30639,
-30565,
-30490,
-30414,
-30337,
-30258,
-30179,
-30098,
-30016,
-29933,
-29849,
-29764,
-29677,
-29590,
-29501,
-29411,
-29321,
-29229,
-29136,
-29042,
-28947,
-28851,
-28753,
-28655,
-28556,
-28456,
-28354,
-28252,
-28149,
-28044,
-27939,
-27833,
-27725,
-27617,
-27508,
-27398,
-27287,
-27175,
-27062,
-26948,
-26833,
-26717,
-26601,
-26483,
-26365,
-26246,
-26125,
-26005,
-25883,
-25760,
-25637,
-25512,
-25387,
-25261,
-25135,
-25007,
-24879,
-24750,
-24620,
-24490,
-24358,
-24226,
-24094,
-23960,
-23826,
-23691,
-23556,
-23420,
-23283,
-23146,
-23008,
-22869,
-22730,
-22590,
-22449,
-22308,
-22166,
-22024,
-21881,
-21738,
-21594,
-21449,
-21304,
-21159,
-21013,
-20866,
-20719,
-20572,
-20424,
-20275,
-20127,
-19977,
-19828,
-19678,
-19527,
-19376,
-19225,
-19073,
-18921,
-18769,
-18616,
-18463,
-18310,
-18157,
-18003,
-17849,
-17694,
-17539,
-17384,
-17229,
-17074,
-16918,
-16762,
-16606,
-16450,
-16294,
-16137,
-15980,
-15823,
-15666,
-15509,
-15352,
-15195,
-15037,
-14880,
-14722,
-14564,
-14407,
-14249,
-14091,
-13933,
-13775,
-13618,
-13460,
-13302,
-13144,
-12987,
-12829,
-12671,
-12514,
-12356,
-12199,
-12042,
-11885,
-11728,
-11571,
-11414,
-11257,
-11101,
-10945,
-10789,
-10633,
-10477,
-10322,
-10167,
-10012,
-9857,
-9702,
-9548,
-9394,
-9241,
-9087,
-8934,
-8781,
-8629,
-8477,
-8325,
-8174,
-8023,
-7872,
-7722,
-7572,
-7422,
-7273,
-7124,
-6976,
-6828,
-6681,
-6534,
-6387,
-6241,
-6096,
-5951,
-5806,
-5662,
-5518,
-5375,
-5233,
-5091,
-4949,
-4808,
-4668,
-4528,
-4389,
-4250,
-4112,
-3975,
-3838,
-3702,
-3566,
-3431,
-3297,
-3163,
-3030,
-2898,
-2766,
-2635,
-2505,
-2375,
-2246,
-2118,
-1990,
-1864,
-1738,
-1612,
-1487,
-1364,
-1240,
-1118,
-996,
-875,
-755,
-636,
-517,
-400,
-283,
-166,
-51,
--63,
--176,
--289,
--401,
--513,
--623,
--733,
--841,
--949,
--1056,
--1162,
--1268,
--1372,
--1476,
--1578,
--1680,
--1781,
--1881,
--1980,
--2078,
--2176,
--2272,
--2367,
--2462,
--2556,
--2648,
--2740,
--2831,
--2921,
--3010,
--3098,
--3185,
--3271,
--3356,
--3441,
--3524,
--3606,
--3688,
--3768,
--3848,
--3926,
--4004,
--4080,
--4156,
--4231,
--4304,
--4377,
--4449,
--4519,
--4589,
--4658,
--4726,
--4792,
--4858,
--4923,
--4987,
--5050,
--5111,
--5172,
--5232,
--5291,
--5349,
--5406,
--5462,
--5517,
--5571,
--5624,
--5675,
--5726,
--5776,
--5825,
--5873,
--5920,
--5966,
--6011,
--6055,
--6098,
--6140,
--6181,
--6222,
--6261,
--6299,
--6336,
--6372,
--6407,
--6441,
--6475,
--6507,
--6538,
--6569,
--6598,
--6626,
--6654,
--6680,
--6706,
--6730,
--6754,
--6777,
--6798,
--6819,
--6839,
--6858,
--6876,
--6893,
--6909,
--6924,
--6938,
--6951,
--6964,
--6975,
--6986,
--6995,
--7004,
--7012,
--7019,
--7025,
--7030,
--7035,
--7038,
--7040,
--7042,
--7043,
--7043,
--7042,
--7040,
--7038,
--7034,
--7030,
--7025,
--7019,
--7012,
--7004,
--6996,
--6986,
--6976,
--6965,
--6954,
--6941,
--6928,
--6914,
--6899,
--6884,
--6867,
--6850,
--6832,
--6814,
--6794,
--6774,
--6753,
--6732,
--6709,
--6686,
--6663,
--6638,
--6613,
--6587,
--6561,
--6534,
--6506,
--6478,
--6448,
--6419,
--6388,
--6357,
--6325,
--6293,
--6260,
--6226,
--6192,
--6157,
--6122,
--6086,
--6049,
--6012,
--5975,
--5936,
--5897,
--5858,
--5818,
--5778,
--5737,
--5695,
--5653,
--5611,
--5568,
--5524,
--5480,
--5436,
--5391,
--5345,
--5300,
--5253,
--5207,
--5159,
--5112,
--5064,
--5015,
--4966,
--4917,
--4868,
--4818,
--4767,
--4716,
--4665,
--4614,
--4562,
--4510,
--4457,
--4404,
--4351,
--4298,
--4244,
--4190,
--4136,
--4081,
--4026,
--3971,
--3916,
--3860,
--3804,
--3748,
--3692,
--3635,
--3578,
--3521,
--3464,
--3406,
--3349,
--3291,
--3233,
--3175,
--3117,
--3058,
--3000,
--2941,
--2882,
--2823,
--2764,
--2705,
--2646,
--2587,
--2527,
--2468,
--2408,
--2349,
--2289,
--2229,
--2169,
--2110,
--2050,
--1990,
--1930,
--1870,
--1811,
--1751,
--1691,
--1631,
--1571,
--1512,
--1452,
--1392,
--1333,
--1273,
--1214,
--1154,
--1095,
--1036,
--977,
--918,
--859,
--800,
--741,
--683,
--624,
--566,
--508,
--450,
--392,
--335,
--277,
--220,
--163,
--106,
--49,
-6,
-63,
-119,
-175,
-230,
-286,
-341,
-396,
-450,
-505,
-559,
-613,
-667,
-720,
-773,
-826,
-878,
-931,
-983,
-1034,
-1086,
-1137,
-1187,
-1238,
-1288,
-1337,
-1387,
-1436,
-1484,
-1533,
-1581,
-1628,
-1675,
-1722,
-1769,
-1815,
-1861,
-1906,
-1951,
-1996,
-2040,
-2084,
-2127,
-2170,
-2212,
-2255,
-2296,
-2338,
-2378,
-2419,
-2459,
-2498,
-2538,
-2576,
-2615,
-2652,
-2690,
-2727,
-2763,
-2799,
-2834,
-2870,
-2904,
-2938,
-2972,
-3005,
-3038,
-3070,
-3102,
-3133,
-3164,
-3194,
-3224,
-3253,
-3282,
-3310,
-3338,
-3365,
-3392,
-3418,
-3444,
-3469,
-3494,
-3518,
-3542,
-3566,
-3588,
-3611,
-3632,
-3653,
-3674,
-3694,
-3714,
-3733,
-3752,
-3770,
-3788,
-3805,
-3821,
-3837,
-3853,
-3868,
-3882,
-3896,
-3910,
-3923,
-3935,
-3947,
-3958,
-3969,
-3980,
-3989,
-3999,
-4007,
-4016,
-4023,
-4031,
-4037,
-4044,
-4049,
-4054,
-4059,
-4063,
-4067,
-4070,
-4073,
-4075,
-4076,
-4077,
-4078,
-4078,
-4078,
-4077,
-4076,
-4074,
-4071,
-4068,
-4065,
-4061,
-4057,
-4052,
-4047,
-4041,
-4035,
-4028,
-4021,
-4013,
-4005,
-3997,
-3988,
-3978,
-3968,
-3958,
-3947,
-3936,
-3924,
-3912,
-3899,
-3886,
-3872,
-3858,
-3844,
-3829,
-3814,
-3798,
-3782,
-3766,
-3749,
-3731,
-3714,
-3696,
-3677,
-3658,
-3639,
-3619,
-3599,
-3578,
-3558,
-3536,
-3515,
-3493,
-3470,
-3448,
-3425,
-3401,
-3378,
-3353,
-3329,
-3304,
-3279,
-3254,
-3228,
-3202,
-3175,
-3149,
-3122,
-3094,
-3067,
-3039,
-3011,
-2982,
-2953,
-2924,
-2895,
-2865,
-2835,
-2805,
-2775,
-2744,
-2713,
-2682,
-2651,
-2619,
-2587,
-2555,
-2523,
-2490,
-2457,
-2424,
-2391,
-2358,
-2324,
-2290,
-2256,
-2222,
-2188,
-2153,
-2119,
-2084,
-2049,
-2014,
-1978,
-1943,
-1907,
-1872,
-1836,
-1800,
-1764,
-1727,
-1691,
-1655,
-1618,
-1581,
-1545,
-1508,
-1471,
-1434,
-1397,
-1360,
-1322,
-1285,
-1248,
-1210,
-1173,
-1135,
-1098,
-1060,
-1023,
-985,
-947,
-910,
-872,
-834,
-797,
-759,
-721,
-684,
-646,
-608,
-571,
-533,
-496,
-458,
-421,
-383,
-346,
-308,
-271,
-234,
-197,
-160,
-123,
-86,
-49,
-12,
--23,
--60,
--96,
--133,
--169,
--205,
--241,
--277,
--313,
--348,
--384,
--419,
--455,
--490,
--525,
--559,
--594,
--628,
--663,
--697,
--731,
--765,
--798,
--832,
--865,
--898,
--931,
--963,
--996,
--1028,
--1060,
--1092,
--1124,
--1155,
--1186,
--1217,
--1248,
--1279,
--1309,
--1339,
--1369,
--1398,
--1428,
--1457,
--1486,
--1514,
--1542,
--1571,
--1598,
--1626,
--1653,
--1680,
--1707,
--1733,
--1760,
--1785,
--1811,
--1836,
--1862,
--1886,
--1911,
--1935,
--1959,
--1982,
--2006,
--2029,
--2051,
--2074,
--2096,
--2118,
--2139,
--2160,
--2181,
--2202,
--2222,
--2242,
--2261,
--2280,
--2299,
--2318,
--2336,
--2354,
--2372,
--2389,
--2406,
--2423,
--2439,
--2455,
--2470,
--2486,
--2500,
--2515,
--2529,
--2543,
--2557,
--2570,
--2583,
--2595,
--2607,
--2619,
--2631,
--2642,
--2652,
--2663,
--2673,
--2683,
--2692,
--2701,
--2710,
--2718,
--2726,
--2734,
--2741,
--2748,
--2754,
--2760,
--2766,
--2772,
--2777,
--2782,
--2786,
--2790,
--2794,
--2797,
--2800,
--2803,
--2805,
--2807,
--2809,
--2810,
--2811,
--2812,
--2812,
--2812,
--2812,
--2811,
--2810,
--2808,
--2807,
--2804,
--2802,
--2799,
--2796,
--2792,
--2789,
--2785,
--2780,
--2775,
--2770,
--2765,
--2759,
--2753,
--2746,
--2740,
--2732,
--2725,
--2717,
--2709,
--2701,
--2692,
--2683,
--2674,
--2664,
--2655,
--2644,
--2634,
--2623,
--2612,
--2601,
--2589,
--2577,
--2565,
--2552,
--2539,
--2526,
--2513,
--2499,
--2485,
--2471,
--2457,
--2442,
--2427,
--2412,
--2396,
--2380,
--2364,
--2348,
--2331,
--2315,
--2297,
--2280,
--2263,
--2245,
--2227,
--2209,
--2190,
--2171,
--2152,
--2133,
--2114,
--2094,
--2075,
--2055,
--2034,
--2014,
--1993,
--1972,
--1951,
--1930,
--1909,
--1887,
--1865,
--1843,
--1821,
--1799,
--1776,
--1754,
--1731,
--1708,
--1685,
--1662,
--1638,
--1614,
--1591,
--1567,
--1543,
--1519,
--1494,
--1470,
--1445,
--1421,
--1396,
--1371,
--1346,
--1321,
--1295,
--1270,
--1244,
--1219,
--1193,
--1167,
--1142,
--1116,
--1090,
--1064,
--1037,
--1011,
--985,
--958,
--932,
--905,
--879,
--852,
--826,
--799,
--772,
--745,
--719,
--692,
--665,
--638,
--611,
--584,
--557,
--530,
--503,
--476,
--449,
--422,
--395,
--368,
--341,
--314,
--287,
--260,
--234,
--207,
--180,
--153,
--126,
--100,
--73,
--46,
--20,
-6,
-32,
-59,
-85,
-111,
-138,
-164,
-190,
-216,
-242,
-268,
-294,
-319,
-345,
-370,
-396,
-421,
-446,
-471,
-496,
-521,
-546,
-571,
-595,
-619,
-644,
-668,
-692,
-716,
-739,
-763,
-787,
-810,
-833,
-856,
-879,
-902,
-924,
-947,
-969,
-991,
-1013,
-1035,
-1056,
-1078,
-1099,
-1120,
-1141,
-1162,
-1182,
-1202,
-1223,
-1243,
-1262,
-1282,
-1301,
-1320,
-1339,
-1358,
-1377,
-1395,
-1413,
-1431,
-1449,
-1467,
-1484,
-1501,
-1518,
-1535,
-1551,
-1567,
-1583,
-1599,
-1615,
-1630,
-1645,
-1660,
-1674,
-1689,
-1703,
-1717,
-1731,
-1744,
-1757,
-1770,
-1783,
-1795,
-1808,
-1820,
-1831,
-1843,
-1854,
-1865,
-1876,
-1886,
-1897,
-1907,
-1916,
-1926,
-1935,
-1944,
-1953,
-1961,
-1970,
-1978,
-1985,
-1993,
-2000,
-2007,
-2014,
-2020,
-2026,
-2032,
-2038,
-2043,
-2048,
-2053,
-2058,
-2062,
-2066,
-2070,
-2073,
-2077,
-2080,
-2083,
-2085,
-2087,
-2089,
-2091,
-2093,
-2094,
-2095,
-2095,
-2096,
-2096,
-2096,
-2096,
-2095,
-2094,
-2093,
-2092,
-2090,
-2088,
-2086,
-2084,
-2081,
-2079,
-2075,
-2072,
-2069,
-2065,
-2061,
-2056,
-2052,
-2047,
-2042,
-2037,
-2031,
-2025,
-2019,
-2013,
-2006,
-2000,
-1993,
-1986,
-1978,
-1971,
-1963,
-1955,
-1946,
-1938,
-1929,
-1920,
-1911,
-1901,
-1892,
-1882,
-1872,
-1862,
-1851,
-1841,
-1830,
-1819,
-1807,
-1796,
-1784,
-1772,
-1760,
-1748,
-1735,
-1723,
-1710,
-1697,
-1684,
-1670,
-1657,
-1643,
-1629,
-1615,
-1601,
-1586,
-1572,
-1557,
-1542,
-1527,
-1512,
-1496,
-1481,
-1465,
-1449,
-1433,
-1417,
-1401,
-1384,
-1368,
-1351,
-1334,
-1317,
-1300,
-1283,
-1265,
-1248,
-1230,
-1212,
-1195,
-1177,
-1159,
-1140,
-1122,
-1104,
-1085,
-1067,
-1048,
-1029,
-1010,
-991,
-972,
-953,
-934,
-915,
-895,
-876,
-856,
-837,
-817,
-797,
-777,
-758,
-738,
-718,
-698,
-678,
-658,
-637,
-617,
-597,
-577,
-556,
-536,
-516,
-495,
-475,
-454,
-434,
-414,
-393,
-373,
-352,
-332,
-311,
-291,
-270,
-250,
-229,
-208,
-188,
-168,
-147,
-127,
-106,
-86,
-65,
-45,
-25,
-5,
--15,
--35,
--55,
--75,
--95,
--115,
--135,
--155,
--175,
--195,
--215,
--234,
--254,
--274,
--293,
--313,
--332,
--351,
--370,
--390,
--409,
--428,
--446,
--465,
--484,
--503,
--521,
--539,
--558,
--576,
--594,
--612,
--630,
--648,
--666,
--683,
--701,
--718,
--735,
--752,
--769,
--786,
--803,
--819,
--836,
--852,
--868,
--885,
--900,
--916,
--932,
--947,
--963,
--978,
--993,
--1008,
--1023,
--1038,
--1052,
--1066,
--1081,
--1095,
--1108,
--1122,
--1136,
--1149,
--1162,
--1175,
--1188,
--1201,
--1214,
--1226,
--1238,
--1250,
--1262,
--1274,
--1285,
--1297,
--1308,
--1319,
--1330,
--1340,
--1351,
--1361,
--1371,
--1381,
--1390,
--1400,
--1409,
--1418,
--1427,
--1436,
--1445,
--1453,
--1461,
--1469,
--1477,
--1485,
--1492,
--1499,
--1506,
--1513,
--1520,
--1526,
--1532,
--1538,
--1544,
--1550,
--1555,
--1560,
--1566,
--1570,
--1575,
--1579,
--1584,
--1588,
--1592,
--1595,
--1599,
--1602,
--1605,
--1608,
--1610,
--1613,
--1615,
--1617,
--1619,
--1620,
--1622,
--1623,
--1624,
--1625,
--1625,
--1626,
--1626,
--1626,
--1626,
--1625,
--1625,
--1624,
--1623,
--1622,
--1621,
--1619,
--1617,
--1615,
--1613,
--1611,
--1608,
--1605,
--1603,
--1599,
--1596,
--1593,
--1589,
--1585,
--1581,
--1577,
--1572,
--1568,
--1563,
--1558,
--1553,
--1547,
--1542,
--1536,
--1530,
--1524,
--1518,
--1511,
--1505,
--1498,
--1491,
--1484,
--1477,
--1469,
--1462,
--1454,
--1446,
--1438,
--1430,
--1421,
--1413,
--1404,
--1395,
--1386,
--1377,
--1367,
--1358,
--1348,
--1338,
--1328,
--1318,
--1308,
--1297,
--1287,
--1276,
--1265,
--1254,
--1243,
--1232,
--1221,
--1209,
--1198,
--1186,
--1174,
--1162,
--1150,
--1138,
--1125,
--1113,
--1100,
--1087,
--1075,
--1062,
--1049,
--1035,
--1022,
--1009,
--995,
--982,
--968,
--954,
--941,
--927,
--913,
--898,
--884,
--870,
--856,
--841,
--827,
--812,
--797,
--783,
--768,
--753,
--738,
--723,
--708,
--692,
--677,
--662,
--647,
--631,
--616,
--600,
--585,
--569,
--554,
--538,
--522,
--506,
--491,
--475,
--459,
--443,
--427,
--411,
--395,
--379,
--363,
--347,
--331,
--315,
--299,
--283,
--267,
--251,
--235,
--218,
--202,
--186,
--170,
--154,
--138,
--122,
--106,
--90,
--74,
--58,
--42,
--26,
--10,
-5,
-21,
-37,
-53,
-69,
-85,
-100,
-116,
-132,
-147,
-163,
-179,
-194,
-209,
-225,
-240,
-256,
-271,
-286,
-301,
-316,
-331,
-346,
-361,
-376,
-391,
-405,
-420,
-434,
-449,
-463,
-477,
-492,
-506,
-520,
-534,
-548,
-561,
-575,
-589,
-602,
-615,
-629,
-642,
-655,
-668,
-681,
-694,
-706,
-719,
-731,
-744,
-756,
-768,
-780,
-792,
-804,
-816,
-827,
-839,
-850,
-861,
-872,
-883,
-894,
-905,
-915,
-926,
-936,
-946,
-956,
-966,
-976,
-986,
-995,
-1005,
-1014,
-1023,
-1032,
-1041,
-1049,
-1058,
-1066,
-1075,
-1083,
-1091,
-1099,
-1106,
-1114,
-1121,
-1128,
-1135,
-1142,
-1149,
-1156,
-1162,
-1169,
-1175,
-1181,
-1187,
-1192,
-1198,
-1203,
-1208,
-1214,
-1218,
-1223,
-1228,
-1232,
-1237,
-1241,
-1245,
-1249,
-1252,
-1256,
-1259,
-1262,
-1265,
-1268,
-1271,
-1273,
-1276,
-1278,
-1280,
-1282,
-1284,
-1285,
-1287,
-1288,
-1289,
-1290,
-1291,
-1292,
-1292,
-1292,
-1293,
-1293,
-1292,
-1292,
-1292,
-1291,
-1290,
-1289,
-1288,
-1287,
-1285,
-1284,
-1282,
-1280,
-1278,
-1276,
-1274,
-1271,
-1269,
-1266,
-1263,
-1260,
-1257,
-1253,
-1250,
-1246,
-1242,
-1238,
-1234,
-1230,
-1225,
-1221,
-1216,
-1211,
-1206,
-1201,
-1196,
-1190,
-1185,
-1179,
-1173,
-1167,
-1161,
-1155,
-1149,
-1142,
-1136,
-1129,
-1122,
-1115,
-1108,
-1101,
-1094,
-1086,
-1078,
-1071,
-1063,
-1055,
-1047,
-1039,
-1030,
-1022,
-1013,
-1005,
-996,
-987,
-978,
-969,
-960,
-951,
-941,
-932,
-922,
-913,
-903,
-893,
-883,
-873,
-863,
-853,
-842,
-832,
-821,
-811,
-800,
-789,
-778,
-768,
-757,
-746,
-734,
-723,
-712,
-701,
-689,
-678,
-666,
-654,
-643,
-631,
-619,
-607,
-596,
-584,
-572,
-559,
-547,
-535,
-523,
-511,
-498,
-486,
-474,
-461,
-449,
-436,
-424,
-411,
-399,
-386,
-373,
-361,
-348,
-335,
-322,
-310,
-297,
-284,
-271,
-258,
-246,
-233,
-220,
-207,
-194,
-181,
-168,
-156,
-143,
-130,
-117,
-104,
-91,
-78,
-65,
-53,
-40,
-27,
-14,
-1,
--10,
--23,
--36,
--48,
--61,
--74,
--86,
--99,
--111,
--124,
--136,
--149,
--161,
--174,
--186,
--198,
--211,
--223,
--235,
--247,
--259,
--271,
--283,
--295,
--307,
--319,
--330,
--342,
--354,
--365,
--377,
--388,
--399,
--411,
--422,
--433,
--444,
--455,
--466,
--477,
--488,
--499,
--509,
--520,
--530,
--541,
--551,
--561,
--571,
--581,
--591,
--601,
--611,
--621,
--631,
--640,
--650,
--659,
--668,
--677,
--686,
--695,
--704,
--713,
--722,
--730,
--739,
--747,
--755,
--763,
--771,
--779,
--787,
--795,
--803,
--810,
--817,
--825,
--832,
--839,
--846,
--853,
--859,
--866,
--873,
--879,
--885,
--891,
--897,
--903,
--909,
--915,
--920,
--926,
--931,
--936,
--941,
--946,
--951,
--955,
--960,
--964,
--969,
--973,
--977,
--981,
--985,
--988,
--992,
--995,
--999,
--1002,
--1005,
--1008,
--1011,
--1013,
--1016,
--1018,
--1020,
--1023,
--1025,
--1026,
--1028,
--1030,
--1031,
--1033,
--1034,
--1035,
--1036,
--1037,
--1038,
--1038,
--1039,
--1039,
--1039,
--1039,
--1039,
--1039,
--1039,
--1038,
--1038,
--1037,
--1036,
--1036,
--1034,
--1033,
--1032,
--1031,
--1029,
--1027,
--1026,
--1024,
--1022,
--1019,
--1017,
--1015,
--1012,
--1010,
--1007,
--1004,
--1001,
--998,
--995,
--991,
--988,
--984,
--980,
--977,
--973,
--969,
--965,
--960,
--956,
--951,
--947,
--942,
--937,
--932,
--927,
--922,
--917,
--912,
--906,
--901,
--895,
--889,
--883,
--877,
--871,
--865,
--859,
--853,
--846,
--840,
--833,
--826,
--819,
--812,
--805,
--798,
--791,
--784,
--777,
--769,
--762,
--754,
--746,
--739,
--731,
--723,
--715,
--707,
--699,
--691,
--682,
--674,
--665,
--657,
--648,
--640,
--631,
--622,
--614,
--605,
--596,
--587,
--578,
--569,
--559,
--550,
--541,
--532,
--522,
--513,
--503,
--494,
--484,
--474,
--465,
--455,
--445,
--436,
--426,
--416,
--406,
--396,
--386,
--376,
--366,
--356,
--346,
--336,
--325,
--315,
--305,
--295,
--285,
--274,
--264,
--254,
--243,
--233,
--223,
--212,
--202,
--192,
--181,
--171,
--161,
--150,
--140,
--129,
--119,
--108,
--98,
--88,
--77,
--67,
--57,
--46,
--36,
--25,
--15,
--5,
-5,
-15,
-25,
-35,
-46,
-56,
-66,
-76,
-86,
-97,
-107,
-117,
-127,
-137,
-147,
-157,
-167,
-177,
-186,
-196,
-206,
-216,
-225,
-235,
-245,
-254,
-264,
-273,
-283,
-292,
-301,
-311,
-320,
-329,
-338,
-347,
-356,
-365,
-374,
-383,
-392,
-400,
-409,
-418,
-426,
-435,
-443,
-451,
-460,
-468,
-476,
-484,
-492,
-500,
-508,
-515,
-523,
-531,
-538,
-546,
-553,
-560,
-568,
-575,
-582,
-589,
-596,
-602,
-609,
-616,
-622,
-629,
-635,
-642,
-648,
-654,
-660,
-666,
-672,
-678,
-683,
-689,
-694,
-700,
-705,
-710,
-715,
-720,
-725,
-730,
-735,
-739,
-744,
-748,
-753,
-757,
-761,
-765,
-769,
-773,
-777,
-780,
-784,
-787,
-791,
-794,
-797,
-800,
-803,
-806,
-809,
-811,
-814,
-816,
-818,
-821,
-823,
-825,
-827,
-828,
-830,
-832,
-833,
-835,
-836,
-837,
-838,
-839,
-840,
-841,
-841,
-842,
-842,
-843,
-843,
-843,
-843,
-843,
-843,
-843,
-842,
-842,
-841,
-840,
-840,
-839,
-838,
-837,
-835,
-834,
-833,
-831,
-830,
-828,
-826,
-824,
-822,
-820,
-818,
-816,
-813,
-811,
-808,
-806,
-803,
-800,
-797,
-794,
-791,
-788,
-784,
-781,
-777,
-774,
-770,
-766,
-763,
-759,
-755,
-750,
-746,
-742,
-738,
-733,
-729,
-724,
-719,
-714,
-710,
-705,
-700,
-694,
-689,
-684,
-679,
-673,
-668,
-662,
-657,
-651,
-645,
-639,
-633,
-627,
-621,
-615,
-609,
-603,
-596,
-590,
-584,
-577,
-571,
-564,
-557,
-551,
-544,
-537,
-530,
-523,
-516,
-509,
-502,
-495,
-487,
-480,
-473,
-465,
-458,
-450,
-443,
-435,
-428,
-420,
-413,
-405,
-397,
-389,
-381,
-374,
-366,
-358,
-350,
-342,
-334,
-326,
-318,
-310,
-301,
-293,
-285,
-277,
-269,
-260,
-252,
-244,
-236,
-227,
-219,
-211,
-202,
-194,
-185,
-177,
-169,
-160,
-152,
-143,
-135,
-126,
-118,
-110,
-101,
-93,
-84,
-76,
-67,
-59,
-50,
-42,
-34,
-25,
-17,
-8,
-0,
--7,
--16,
--24,
--32,
--41,
--49,
--57,
--66,
--74,
--82,
--90,
--98,
--106,
--115,
--123,
--131,
--139,
--147,
--155,
--163,
--171,
--179,
--186,
--194,
--202,
--210,
--217,
--225,
--233,
--240,
--248,
--255,
--263,
--270,
--278,
--285,
--292,
--299,
--307,
--314,
--321,
--328,
--335,
--342,
--349,
--356,
--362,
--369,
--376,
--382,
--389,
--396,
--402,
--408,
--415,
--421,
--427,
--433,
--439,
--445,
--451,
--457,
--463,
--469,
--475,
--480,
--486,
--491,
--497,
--502,
--507,
--513,
--518,
--523,
--528,
--533,
--538,
--542,
--547,
--552,
--556,
--561,
--565,
--570,
--574,
--578,
--582,
--586,
--590,
--594,
--598,
--602,
--605,
--609,
--612,
--616,
--619,
--622,
--625,
--629,
--632,
--634,
--637,
--640,
--643,
--645,
--648,
--650,
--653,
--655,
--657,
--659,
--661,
--663,
--665,
--667,
--668,
--670,
--671,
--673,
--674,
--675,
--676,
--678,
--679,
--679,
--680,
--681,
--682,
--682,
--683,
--683,
--683,
--684,
--684,
--684,
--684,
--684,
--684,
--683,
--683,
--682,
--682,
--681,
--681,
--680,
--679,
--678,
--677,
--676,
--675,
--674,
--672,
--671,
--669,
--668,
--666,
--664,
--662,
--661,
--659,
--657,
--654,
--652,
--650,
--648,
--645,
--643,
--640,
--637,
--635,
--632,
--629,
--626,
--623,
--620,
--617,
--613,
--610,
--607,
--603,
--600,
--596,
--593,
--589,
--585,
--581,
--577,
--573,
--569,
--565,
--561,
--557,
--552,
--548,
--544,
--539,
--534,
--530,
--525,
--520,
--516,
--511,
--506,
--501,
--496,
--491,
--486,
--481,
--475,
--470,
--465,
--460,
--454,
--449,
--443,
--438,
--432,
--426,
--421,
--415,
--409,
--403,
--398,
--392,
--386,
--380,
--374,
--368,
--362,
--355,
--349,
--343,
--337,
--331,
--324,
--318,
--312,
--305,
--299,
--292,
--286,
--280,
--273,
--266,
--260,
--253,
--247,
--240,
--234,
--227,
--220,
--213,
--207,
--200,
--193,
--187,
--180,
--173,
--166,
--159,
--153,
--146,
--139,
--132,
--125,
--118,
--112,
--105,
--98,
--91,
--84,
--77,
--70,
--64,
--57,
--50,
--43,
--36,
--29,
--22,
--16,
--9,
--2,
-4,
-11,
-17,
-24,
-31,
-38,
-44,
-51,
-58,
-64,
-71,
-78,
-84,
-91,
-98,
-104,
-111,
-117,
-124,
-130,
-137,
-143,
-149,
-156,
-162,
-168,
-175,
-181,
-187,
-193,
-199,
-205,
-212,
-218,
-224,
-230,
-236,
-241,
-247,
-253,
-259,
-265,
-270,
-276,
-282,
-287,
-293,
-298,
-304,
-309,
-314,
-320,
-325,
-330,
-335,
-340,
-345,
-350,
-355,
-360,
-365,
-370,
-375,
-380,
-384,
-389,
-393,
-398,
-402,
-407,
-411,
-415,
-419,
-424,
-428,
-432,
-436,
-440,
-443,
-447,
-451,
-455,
-458,
-462,
-465,
-469,
-472,
-475,
-479,
-482,
-485,
-488,
-491,
-494,
-497,
-499,
-502,
-505,
-507,
-510,
-512,
-515,
-517,
-519,
-522,
-524,
-526,
-528,
-530,
-532,
-533,
-535,
-537,
-538,
-540,
-541,
-543,
-544,
-545,
-546,
-548,
-549,
-550,
-550,
-551,
-552,
-553,
-553,
-554,
-554,
-555,
-555,
-555,
-556,
-556,
-556,
-556,
-556,
-556,
-555,
-555,
-555,
-554,
-554,
-553,
-553,
-552,
-551,
-551,
-550,
-549,
-548,
-547,
-546,
-545,
-543,
-542,
-541,
-539,
-538,
-536,
-534,
-533,
-531,
-529,
-527,
-525,
-523,
-521,
-519,
-517,
-514,
-512,
-510,
-507,
-505,
-502,
-500,
-497,
-494,
-492,
-489,
-486,
-483,
-480,
-477,
-474,
-471,
-467,
-464,
-461,
-457,
-454,
-450,
-447,
-443,
-440,
-436,
-432,
-429,
-425,
-421,
-417,
-413,
-409,
-405,
-401,
-397,
-393,
-388,
-384,
-380,
-375,
-371,
-367,
-362,
-358,
-353,
-349,
-344,
-339,
-335,
-330,
-325,
-321,
-316,
-311,
-306,
-301,
-296,
-291,
-286,
-281,
-276,
-271,
-266,
-261,
-256,
-251,
-245,
-240,
-235,
-230,
-225,
-219,
-214,
-209,
-203,
-198,
-193,
-187,
-182,
-176,
-171,
-165,
-160,
-154,
-149,
-144,
-138,
-132,
-127,
-121,
-116,
-110,
-105,
-99,
-94,
-88,
-83,
-77,
-71,
-66,
-60,
-55,
-49,
-44,
-38,
-33,
-27,
-21,
-16,
-10,
-5,
-0,
--5,
--11,
--16,
--22,
--27,
--33,
--38,
--43,
--49,
--54,
--60,
--65,
--70,
--76,
--81,
--86,
--92,
--97,
--102,
--107,
--113,
--118,
--123,
--128,
--133,
--138,
--143,
--148,
--153,
--158,
--163,
--168,
--173,
--178,
--183,
--188,
--192,
--197,
--202,
--207,
--211,
--216,
--221,
--225,
--230,
--234,
--239,
--243,
--247,
--252,
--256,
--260,
--265,
--269,
--273,
--277,
--281,
--285,
--289,
--293,
--297,
--301,
--305,
--308,
--312,
--316,
--319,
--323,
--327,
--330,
--334,
--337,
--340,
--344,
--347,
--350,
--353,
--357,
--360,
--363,
--366,
--369,
--372,
--374,
--377,
--380,
--383,
--385,
--388,
--390,
--393,
--395,
--398,
--400,
--402,
--405,
--407,
--409,
--411,
--413,
--415,
--417,
--419,
--420,
--422,
--424,
--425,
--427,
--429,
--430,
--431,
--433,
--434,
--435,
--436,
--438,
--439,
--440,
--441,
--442,
--442,
--443,
--444,
--445,
--445,
--446,
--446,
--447,
--447,
--448,
--448,
--448,
--448,
--449,
--449,
--449,
--449,
--449,
--448,
--448,
--448,
--448,
--447,
--447,
--446,
--446,
--445,
--445,
--444,
--443,
--442,
--442,
--441,
--440,
--439,
--438,
--437,
--435,
--434,
--433,
--432,
--430,
--429,
--427,
--426,
--424,
--423,
--421,
--419,
--418,
--416,
--414,
--412,
--410,
--408,
--406,
--404,
--402,
--400,
--397,
--395,
--393,
--390,
--388,
--385,
--383,
--380,
--378,
--375,
--373,
--370,
--367,
--364,
--361,
--359,
--356,
--353,
--350,
--347,
--344,
--340,
--337,
--334,
--331,
--328,
--324,
--321,
--318,
--314,
--311,
--307,
--304,
--300,
--297,
--293,
--290,
--286,
--282,
--279,
--275,
--271,
--267,
--263,
--260,
--256,
--252,
--248,
--244,
--240,
--236,
--232,
--228,
--224,
--220,
--216,
--212,
--207,
--203,
--199,
--195,
--191,
--186,
--182,
--178,
--174,
--169,
--165,
--161,
--156,
--152,
--148,
--143,
--139,
--134,
--130,
--126,
--121,
--117,
--112,
--108,
--103,
--99,
--95,
--90,
--86,
--81,
--77,
--72,
--68,
--63,
--59,
--54,
--50,
--45,
--41,
--36,
--32,
--27,
--23,
--18,
--14,
--9,
--5,
-0,
-3,
-7,
-12,
-16,
-21,
-25,
-29,
-34,
-38,
-43,
-47,
-51,
-56,
-60,
-64,
-69,
-73,
-77,
-81,
-85,
-90,
-94,
-98,
-102,
-106,
-110,
-115,
-119,
-123,
-127,
-131,
-135,
-139,
-143,
-146,
-150,
-154,
-158,
-162,
-166,
-169,
-173,
-177,
-181,
-184,
-188,
-192,
-195,
-199,
-202,
-206,
-209,
-212,
-216,
-219,
-223,
-226,
-229,
-232,
-236,
-239,
-242,
-245,
-248,
-251,
-254,
-257,
-260,
-263,
-266,
-268,
-271,
-274,
-277,
-279,
-282,
-284,
-287,
-289,
-292,
-294,
-297,
-299,
-301,
-304,
-306,
-308,
-310,
-312,
-314,
-316,
-318,
-320,
-322,
-324,
-326,
-328,
-329,
-331,
-333,
-334,
-336,
-337,
-339,
-340,
-341,
-343,
-344,
-345,
-346,
-348,
-349,
-350,
-351,
-352,
-353,
-354,
-354,
-355,
-356,
-357,
-357,
-358,
-358,
-359,
-359,
-360,
-360,
-361,
-361,
-361,
-361,
-362,
-362,
-362,
-362,
-362,
-362,
-362,
-361,
-361,
-361,
-361,
-360,
-360,
-360,
-359,
-359,
-358,
-358,
-357,
-356,
-356,
-355,
-354,
-353,
-352,
-351,
-350,
-349,
-348,
-347,
-346,
-345,
-344,
-343,
-341,
-340,
-339,
-337,
-336,
-334,
-333,
-331,
-330,
-328,
-326,
-324,
-323,
-321,
-319,
-317,
-315,
-313,
-311,
-309,
-307,
-305,
-303,
-301,
-299,
-297,
-294,
-292,
-290,
-288,
-285,
-283,
-280,
-278,
-275,
-273,
-270,
-268,
-265,
-263,
-260,
-257,
-254,
-252,
-249,
-246,
-243,
-240,
-238,
-235,
-232,
-229,
-226,
-223,
-220,
-217,
-214,
-211,
-208,
-204,
-201,
-198,
-195,
-192,
-188,
-185,
-182,
-179,
-175,
-172,
-169,
-165,
-162,
-159,
-155,
-152,
-149,
-145,
-142,
-138,
-135,
-131,
-128,
-124,
-121,
-117,
-114,
-110,
-107,
-103,
-100,
-96,
-93,
-89,
-85,
-82,
-78,
-75,
-71,
-67,
-64,
-60,
-57,
-53,
-49,
-46,
-42,
-39,
-35,
-31,
-28,
-24,
-21,
-17,
-14,
-10,
-6,
-3,
-0,
--3,
--7,
--10,
--14,
--18,
--21,
--25,
--28,
--32,
--35,
--39,
--42,
--45,
--49,
--52,
--56,
--59,
--63,
--66,
--69,
--73,
--76,
--79,
--83,
--86,
--89,
--93,
--96,
--99,
--102,
--105,
--109,
--112,
--115,
--118,
--121,
--124,
--127,
--130,
--133,
--136,
--139,
--142,
--145,
--148,
--151,
--154,
--157,
--160,
--162,
--165,
--168,
--171,
--173,
--176,
--179,
--181,
--184,
--186,
--189,
--191,
--194,
--196,
--199,
--201,
--204,
--206,
--208,
--211,
--213,
--215,
--217,
--219,
--221,
--224,
--226,
--228,
--230,
--232,
--234,
--236,
--237,
--239,
--241,
--243,
--245,
--246,
--248,
--250,
--251,
--253,
--254,
--256,
--257,
--259,
--260,
--262,
--263,
--264,
--266,
--267,
--268,
--269,
--270,
--271,
--273,
--274,
--275,
--275,
--276,
--277,
--278,
--279,
--280,
--281,
--281,
--282,
--283,
--283,
--284,
--284,
--285,
--285,
--286,
--286,
--286,
--287,
--287,
--287,
--287,
--288,
--288,
--288,
--288,
--288,
--288,
--288,
--288,
--288,
--288,
--287,
--287,
--287,
--287,
--286,
--286,
--286,
--285,
--285,
--284,
--284,
--283,
--283,
--282,
--281,
--281,
--280,
--279,
--278,
--277,
--277,
--276,
--275,
--274,
--273,
--272,
--271,
--270,
--269,
--267,
--266,
--265,
--264,
--262,
--261,
--260,
--258,
--257,
--256,
--254,
--253,
--251,
--250,
--248,
--247,
--245,
--243,
--242,
--240,
--238,
--236,
--235,
--233,
--231,
--229,
--227,
--225,
--223,
--221,
--219,
--217,
--215,
--213,
--211,
--209,
--207,
--205,
--203,
--201,
--198,
--196,
--194,
--192,
--189,
--187,
--185,
--182,
--180,
--178,
--175,
--173,
--170,
--168,
--165,
--163,
--160,
--158,
--155,
--153,
--150,
--148,
--145,
--142,
--140,
--137,
--135,
--132,
--129,
--127,
--124,
--121,
--118,
--116,
--113,
--110,
--108,
--105,
--102,
--99,
--96,
--94,
--91,
--88,
--85,
--82,
--80,
--77,
--74,
--71,
--68,
--65,
--63,
--60,
--57,
--54,
--51,
--48,
--45,
--42,
--40,
--37,
--34,
--31,
--28,
--25,
--22,
--20,
--17,
--14,
--11,
--8,
--5,
--2,
-0,
-2,
-5,
-8,
-11,
-13,
-16,
-19,
-22,
-25,
-27,
-30,
-33,
-36,
-38,
-41,
-44,
-47,
-49,
-52,
-55,
-57,
-60,
-63,
-65,
-68,
-71,
-73,
-76,
-78,
-81,
-83,
-86,
-88,
-91,
-93,
-96,
-98,
-101,
-103,
-106,
-108,
-110,
-113,
-115,
-117,
-120,
-122,
-124,
-127,
-129,
-131,
-133,
-135,
-137,
-140,
-142,
-144,
-146,
-148,
-150,
-152,
-154,
-156,
-158,
-160,
-161,
-163,
-165,
-167,
-169,
-171,
-172,
-174,
-176,
-177,
-179,
-181,
-182,
-184,
-185,
-187,
-188,
-190,
-191,
-193,
-194,
-195,
-197,
-198,
-199,
-201,
-202,
-203,
-204,
-205,
-207,
-208,
-209,
-210,
-211,
-212,
-213,
-214,
-215,
-216,
-216,
-217,
-218,
-219,
-219,
-220,
-221,
-222,
-222,
-223,
-223,
-224,
-224,
-225,
-225,
-226,
-226,
-227,
-227,
-227,
-227,
-228,
-228,
-228,
-228,
-228,
-229,
-229,
-229,
-229,
-229,
-229,
-229,
-229,
-228,
-228,
-228,
-228,
-228,
-228,
-227,
-227,
-227,
-226,
-226,
-225,
-225,
-225,
-224,
-224,
-223,
-222,
-222,
-221,
-221,
-220,
-219,
-218,
-218,
-217,
-216,
-215,
-214,
-214,
-213,
-212,
-211,
-210,
-209,
-208,
-207,
-206,
-205,
-203,
-202,
-201,
-200,
-199,
-197,
-196,
-195,
-194,
-192,
-191,
-190,
-188,
-187,
-185,
-184,
-182,
-181,
-179,
-178,
-176,
-175,
-173,
-172,
-170,
-168,
-167,
-165,
-163,
-162,
-160,
-158,
-156,
-155,
-153,
-151,
-149,
-147,
-146,
-144,
-142,
-140,
-138,
-136,
-134,
-132,
-130,
-128,
-126,
-124,
-122,
-120,
-118,
-116,
-114,
-112,
-110,
-108,
-106,
-104,
-102,
-99,
-97,
-95,
-93,
-91,
-89,
-87,
-84,
-82,
-80,
-78,
-76,
-73,
-71,
-69,
-67,
-64,
-62,
-60,
-58,
-56,
-53,
-51,
-49,
-47,
-44,
-42,
-40,
-38,
-35,
-33,
-31,
-28,
-26,
-24,
-22,
-19,
-17,
-15,
-13,
-10,
-8,
-6,
-4,
-1,
-0,
--2,
--4,
--6,
--9,
--11,
--13,
--15,
--17,
--20,
--22,
--24,
--26,
--28,
--30,
--33,
--35,
--37,
--39,
--41,
--43,
--45,
--47,
--49,
--52,
--54,
--56,
--58,
--60,
--62,
--64,
--66,
--68,
--70,
--72,
--74,
--76,
--77,
--79,
--81,
--83,
--85,
--87,
--89,
--90,
--92,
--94,
--96,
--98,
--99,
--101,
--103,
--105,
--106,
--108,
--110,
--111,
--113,
--114,
--116,
--118,
--119,
--121,
--122,
--124,
--125,
--127,
--128,
--130,
--131,
--132,
--134,
--135,
--136,
--138,
--139,
--140,
--142,
--143,
--144,
--145,
--146,
--148,
--149,
--150,
--151,
--152,
--153,
--154,
--155,
--156,
--157,
--158,
--159,
--160,
--161,
--162,
--162,
--163,
--164,
--165,
--166,
--166,
--167,
--168,
--168,
--169,
--170,
--170,
--171,
--171,
--172,
--172,
--173,
--173,
--174,
--174,
--175,
--175,
--175,
--176,
--176,
--176,
--177,
--177,
--177,
--177,
--178,
--178,
--178,
--178,
--178,
--178,
--178,
--178,
--178,
--178,
--178,
--178,
--178,
--178,
--178,
--178,
--177,
--177,
--177,
--177,
--177,
--176,
--176,
--176,
--175,
--175,
--175,
--174,
--174,
--173,
--173,
--172,
--172,
--171,
--171,
--170,
--170,
--169,
--168,
--168,
--167,
--166,
--166,
--165,
--164,
--163,
--163,
--162,
--161,
--160,
--159,
--158,
--158,
--157,
--156,
--155,
--154,
--153,
--152,
--151,
--150,
--149,
--148,
--147,
--145,
--144,
--143,
--142,
--141,
--140,
--139,
--137,
--136,
--135,
--134,
--132,
--131,
--130,
--128,
--127,
--126,
--124,
--123,
--122,
--120,
--119,
--118,
--116,
--115,
--113,
--112,
--110,
--109,
--107,
--106,
--104,
--103,
--101,
--100,
--98,
--97,
--95,
--94,
--92,
--90,
--89,
--87,
--86,
--84,
--82,
--81,
--79,
--77,
--76,
--74,
--72,
--71,
--69,
--67,
--66,
--64,
--62,
--60,
--59,
--57,
--55,
--54,
--52,
--50,
--48,
--47,
--45,
--43,
--41,
--40,
--38,
--36,
--34,
--33,
--31,
--29,
--27,
--25,
--24,
--22,
--20,
--18,
--17,
--15,
--13,
--11,
--10,
--8,
--6,
--4,
--3,
--1,
-0,
-2,
-3,
-5,
-7,
-8,
-10,
-12,
-14,
-15,
-17,
-19,
-20,
-22,
-24,
-25,
-27,
-29,
-30,
-32,
-34,
-35,
-37,
-39,
-40,
-42,
-43,
-45,
-47,
-48,
-50,
-51,
-53,
-54,
-56,
-57,
-59,
-60,
-62,
-63,
-65,
-66,
-68,
-69,
-70,
-72,
-73,
-75,
-76,
-77,
-79,
-80,
-81,
-83,
-84,
-85,
-87,
-88,
-89,
-90,
-92,
-93,
-94,
-95,
-96,
-97,
-99,
-100,
-101,
-102,
-103,
-104,
-105,
-106,
-107,
-108,
-109,
-110,
-111,
-112,
-113,
-114,
-115,
-116,
-117,
-117,
-118,
-119,
-120,
-121,
-121,
-122,
-123,
-124,
-124,
-125,
-126,
-126,
-127,
-128,
-128,
-129,
-129,
-130,
-130,
-131,
-131,
-132,
-132,
-133,
-133,
-134,
-134,
-135,
-135,
-135,
-136,
-136,
-136,
-136,
-137,
-137,
-137,
-137,
-138,
-138,
-138,
-138,
-138,
-138,
-138,
-138,
-139,
-139,
-139,
-139,
-139,
-139,
-139,
-138,
-138,
-138,
-138,
-138,
-138,
-138,
-138,
-137,
-137,
-137,
-137,
-136,
-136,
-136,
-136,
-135,
-135,
-134,
-134,
-134,
-133,
-133,
-132,
-132,
-132,
-131,
-131,
-130,
-129,
-129,
-128,
-128,
-127,
-127,
-126,
-125,
-125,
-124,
-123,
-123,
-122,
-121,
-121,
-120,
-119,
-118,
-117,
-117,
-116,
-115,
-114,
-113,
-113,
-112,
-111,
-110,
-109,
-108,
-107,
-106,
-105,
-104,
-103,
-102,
-101,
-100,
-99,
-98,
-97,
-96,
-95,
-94,
-93,
-92,
-91,
-90,
-89,
-87,
-86,
-85,
-84,
-83,
-82,
-81,
-79,
-78,
-77,
-76,
-75,
-73,
-72,
-71,
-70,
-68,
-67,
-66,
-65,
-63,
-62,
-61,
-60,
-58,
-57,
-56,
-54,
-53,
-52,
-50,
-49,
-48,
-47,
-45,
-44,
-43,
-41,
-40,
-39,
-37,
-36,
-34,
-33,
-32,
-30,
-29,
-28,
-26,
-25,
-24,
-22,
-21,
-20,
-18,
-17,
-16,
-14,
-13,
-11,
-10,
-9,
-7,
-6,
-5,
-3,
-2,
-1,
-0,
--1,
--2,
--4,
--5,
--6,
--8,
--9,
--10,
--11,
--13,
--14,
--15,
--17,
--18,
--19,
--20,
--22,
--23,
--24,
--26,
--27,
--28,
--29,
--30,
--32,
--33,
--34,
--35,
--37,
--38,
--39,
--40,
--41,
--42,
--44,
--45,
--46,
--47,
--48,
--49,
--50,
--51,
--53,
--54,
--55,
--56,
--57,
--58,
--59,
--60,
--61,
--62,
--63,
--64,
--65,
--66,
--67,
--68,
--69,
--70,
--71,
--71,
--72,
--73,
--74,
--75,
--76,
--77,
--77,
--78,
--79,
--80,
--81,
--81,
--82,
--83,
--84,
--84,
--85,
--86,
--87,
--87,
--88,
--89,
--89,
--90,
--90,
--91,
--92,
--92,
--93,
--93,
--94,
--94,
--95,
--95,
--96,
--96,
--97,
--97,
--98,
--98,
--99,
--99,
--99,
--100,
--100,
--100,
--101,
--101,
--101,
--102,
--102,
--102,
--102,
--103,
--103,
--103,
--103,
--103,
--104,
--104,
--104,
--104,
--104,
--104,
--104,
--105,
--105,
--105,
--105,
--105,
--105,
--105,
--105,
--105,
--105,
--105,
--105,
--104,
--104,
--104,
--104,
--104,
--104,
--104,
--104,
--103,
--103,
--103,
--103,
--103,
--102,
--102,
--102,
--102,
--101,
--101,
--101,
--100,
--100,
--100,
--99,
--99,
--99,
--98,
--98,
--97,
--97,
--97,
--96,
--96,
--95,
--95,
--94,
--94,
--93,
--93,
--92,
--92,
--91,
--90,
--90,
--89,
--89,
--88,
--87,
--87,
--86,
--86,
--85,
--84,
--84,
--83,
--82,
--81,
--81,
--80,
--79,
--79,
--78,
--77,
--76,
--76,
--75,
--74,
--73,
--72,
--72,
--71,
--70,
--69,
--68,
--67,
--67,
--66,
--65,
--64,
--63,
--62,
--61,
--61,
--60,
--59,
--58,
--57,
--56,
--55,
--54,
--53,
--52,
--51,
--50,
--49,
--48,
--48,
--47,
--46,
--45,
--44,
--43,
--42,
--41,
--40,
--39,
--38,
--37,
--36,
--35,
--34,
--33,
--32,
--31,
--30,
--29,
--28,
--27,
--26,
--25,
--24,
--23,
--21,
--20,
--19,
--18,
--17,
--16,
--15,
--14,
--13,
--12,
--11,
--10,
--9,
--8,
--7,
--6,
--5,
--4,
--3,
--2,
--1,
-0,
-0,
-1,
-2,
-3,
-4,
-5,
-6,
-7,
-8,
-9,
-10,
-11,
-12,
-13,
-14,
-15,
-16,
-17,
-18,
-19,
-20,
-21,
-22,
-22,
-23,
-24,
-25,
-26,
-27,
-28,
-29,
-30,
-31,
-32,
-32,
-33,
-34,
-35,
-36,
-37,
-38,
-38,
-39,
-40,
-41,
-42,
-42,
-43,
-44,
-45,
-46,
-46,
-47,
-48,
-49,
-49,
-50,
-51,
-52,
-52,
-53,
-54,
-54,
-55,
-56,
-56,
-57,
-58,
-58,
-59,
-59,
-60,
-61,
-61,
-62,
-62,
-63,
-64,
-64,
-65,
-65,
-66,
-66,
-67,
-67,
-68,
-68,
-69,
-69,
-69,
-70,
-70,
-71,
-71,
-72,
-72,
-72,
-73,
-73,
-73,
-74,
-74,
-74,
-75,
-75,
-75,
-76,
-76,
-76,
-76,
-77,
-77,
-77,
-77,
-77,
-78,
-78,
-78,
-78,
-78,
-78,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-78,
-78,
-78,
-78,
-78,
-78,
-77,
-77,
-77,
-77,
-77,
-76,
-76,
-76,
-76,
-75,
-75,
-75,
-74,
-74,
-74,
-74,
-73,
-73,
-72,
-72,
-72,
-71,
-71,
-71,
-70,
-70,
-69,
-69,
-69,
-68,
-68,
-67,
-67,
-66,
-66,
-65,
-65,
-64,
-64,
-63,
-63,
-62,
-62,
-61,
-61,
-60,
-60,
-59,
-59,
-58,
-57,
-57,
-56,
-56,
-55,
-55,
-54,
-53,
-53,
-52,
-51,
-51,
-50,
-50,
-49,
-48,
-48,
-47,
-46,
-46,
-45,
-44,
-44,
-43,
-42,
-41,
-41,
-40,
-39,
-39,
-38,
-37,
-37,
-36,
-35,
-34,
-34,
-33,
-32,
-31,
-31,
-30,
-29,
-28,
-28,
-27,
-26,
-25,
-25,
-24,
-23,
-22,
-22,
-21,
-20,
-19,
-19,
-18,
-17,
-16,
-16,
-15,
-14,
-13,
-12,
-12,
-11,
-10,
-9,
-9,
-8,
-7,
-6,
-6,
-5,
-4,
-3,
-3,
-2,
-1,
-0,
-0,
-0,
--1,
--2,
--2,
--3,
--4,
--5,
--5,
--6,
--7,
--8,
--8,
--9,
--10,
--10,
--11,
--12,
--13,
--13,
--14,
--15,
--15,
--16,
--17,
--17,
--18,
--19,
--19,
--20,
--21,
--21,
--22,
--23,
--23,
--24,
--25,
--25,
--26,
--27,
--27,
--28,
--28,
--29,
--30,
--30,
--31,
--31,
--32,
--33,
--33,
--34,
--34,
--35,
--35,
--36,
--36,
--37,
--37,
--38,
--38,
--39,
--39,
--40,
--40,
--41,
--41,
--42,
--42,
--43,
--43,
--44,
--44,
--45,
--45,
--45,
--46,
--46,
--47,
--47,
--47,
--48,
--48,
--49,
--49,
--49,
--50,
--50,
--50,
--51,
--51,
--51,
--51,
--52,
--52,
--52,
--53,
--53,
--53,
--53,
--54,
--54,
--54,
--54,
--54,
--55,
--55,
--55,
--55,
--55,
--56,
--56,
--56,
--56,
--56,
--56,
--56,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--56,
--56,
--56,
--56,
--56,
--56,
--56,
--55,
--55,
--55,
--55,
--55,
--54,
--54,
--54,
--54,
--54,
--53,
--53,
--53,
--53,
--52,
--52,
--52,
--52,
--51,
--51,
--51,
--50,
--50,
--50,
--50,
--49,
--49,
--49,
--48,
--48,
--48,
--47,
--47,
--46,
--46,
--46,
--45,
--45,
--45,
--44,
--44,
--43,
--43,
--43,
--42,
--42,
--41,
--41,
--40,
--40,
--40,
--39,
--39,
--38,
--38,
--37,
--37,
--36,
--36,
--35,
--35,
--35,
--34,
--34,
--33,
--33,
--32,
--32,
--31,
--31,
--30,
--30,
--29,
--29,
--28,
--28,
--27,
--26,
--26,
--25,
--25,
--24,
--24,
--23,
--23,
--22,
--22,
--21,
--21,
--20,
--19,
--19,
--18,
--18,
--17,
--17,
--16,
--16,
--15,
--15,
--14,
--13,
--13,
--12,
--12,
--11,
--11,
--10,
--9,
--9,
--8,
--8,
--7,
--7,
--6,
--6,
--5,
--4,
--4,
--3,
--3,
--2,
--2,
--1,
--1,
-0,
-0,
-0,
-1,
-1,
-2,
-2,
-3,
-3,
-4,
-4,
-5,
-5,
-6,
-7,
-7,
-8,
-8,
-9,
-9,
-10,
-10,
-11,
-11,
-12,
-12,
-13,
-13,
-14,
-14,
-15,
-15,
-16,
-16,
-17,
-17,
-18,
-18,
-18,
-19,
-19,
-20,
-20,
-21,
-21,
-22,
-22,
-22,
-23,
-23,
-24,
-24,
-25,
-25,
-25,
-26,
-26,
-27,
-27,
-27,
-28,
-28,
-28,
-29,
-29,
-30,
-30,
-30,
-31,
-31,
-31,
-32,
-32,
-32,
-33,
-33,
-33,
-33,
-34,
-34,
-34,
-35,
-35,
-35,
-35,
-36,
-36,
-36,
-36,
-37,
-37,
-37,
-37,
-38,
-38,
-38,
-38,
-38,
-39,
-39,
-39,
-39,
-39,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-41,
-41,
-41,
-41,
-41,
-41,
-41,
-41,
-41,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-41,
-41,
-41,
-41,
-41,
-41,
-41,
-41,
-41,
-41,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-39,
-39,
-39,
-39,
-39,
-38,
-38,
-38,
-38,
-38,
-37,
-37,
-37,
-37,
-37,
-36,
-36,
-36,
-36,
-35,
-35,
-35,
-35,
-34,
-34,
-34,
-34,
-33,
-33,
-33,
-33,
-32,
-32,
-32,
-31,
-31,
-31,
-30,
-30,
-30,
-30,
-29,
-29,
-29,
-28,
-28,
-28,
-27,
-27,
-27,
-26,
-26,
-26,
-25,
-25,
-25,
-24,
-24,
-23,
-23,
-23,
-22,
-22,
-22,
-21,
-21,
-21,
-20,
-20,
-19,
-19,
-19,
-18,
-18,
-18,
-17,
-17,
-16,
-16,
-16,
-15,
-15,
-14,
-14,
-14,
-13,
-13,
-12,
-12,
-12,
-11,
-11,
-10,
-10,
-10,
-9,
-9,
-8,
-8,
-8,
-7,
-7,
-6,
-6,
-6,
-5,
-5,
-4,
-4,
-4,
-3,
-3,
-2,
-2,
-2,
-1,
-1,
-1,
-0,
-0,
-0,
-0,
-0,
--1,
--1,
--2,
--2,
--2,
--3,
--3,
--3,
--4,
--4,
--5,
--5,
--5,
--6,
--6,
--6,
--7,
--7,
--7,
--8,
--8,
--9,
--9,
--9,
--10,
--10,
--10,
--11,
--11,
--11,
--12,
--12,
--12,
--13,
--13,
--13,
--14,
--14,
--14,
--14,
--15,
--15,
--15,
--16,
--16,
--16,
--17,
--17,
--17,
--17,
--18,
--18,
--18,
--19,
--19,
--19,
--19,
--20,
--20,
--20,
--20,
--21,
--21,
--21,
--21,
--21,
--22,
--22,
--22,
--22,
--23,
--23,
--23,
--23,
--23,
--24,
--24,
--24,
--24,
--24,
--25,
--25,
--25,
--25,
--25,
--25,
--26,
--26,
--26,
--26,
--26,
--26,
--26,
--27,
--27,
--27,
--27,
--27,
--27,
--27,
--27,
--27,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--29,
--29,
--29,
--29,
--29,
--29,
--29,
--29,
--29,
--29,
--29,
--29,
--29,
--29,
--29,
--29,
--29,
--29,
--29,
--29,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--27,
--27,
--27,
--27,
--27,
--27,
--27,
--27,
--27,
--27,
--26,
--26,
--26,
--26,
--26,
--26,
--26,
--25,
--25,
--25,
--25,
--25,
--25,
--25,
--24,
--24,
--24,
--24,
--24,
--24,
--23,
--23,
--23,
--23,
--23,
--22,
--22,
--22,
--22,
--22,
--21,
--21,
--21,
--21,
--21,
--20,
--20,
--20,
--20,
--20,
--19,
--19,
--19,
--19,
--18,
--18,
--18,
--18,
--17,
--17,
--17,
--17,
--16,
--16,
--16,
--16,
--15,
--15,
--15,
--15,
--14,
--14,
--14,
--14,
--13,
--13,
--13,
--13,
--12,
--12,
--12,
--12,
--11,
--11,
--11,
--11,
--10,
--10,
--10,
--9,
--9,
--9,
--9,
--8,
--8,
--8,
--7,
--7,
--7,
--7,
--6,
--6,
--6,
--6,
--5,
--5,
--5,
--4,
--4,
--4,
--4,
--3,
--3,
--3,
--2,
--2,
--2,
--2,
--1,
--1,
--1,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-1,
-1,
-1,
-2,
-2,
-2,
-2,
-3,
-3,
-3,
-3,
-4,
-4,
-4,
-5,
-5,
-5,
-5,
-6,
-6,
-6,
-6,
-6,
-7,
-7,
-7,
-7,
-8,
-8,
-8,
-8,
-9,
-9,
-9,
-9,
-10,
-10,
-10,
-10,
-10,
-11,
-11,
-11,
-11,
-11,
-12,
-12,
-12,
-12,
-12,
-13,
-13,
-13,
-13,
-13,
-14,
-14,
-14,
-14,
-14,
-14,
-15,
-15,
-15,
-15,
-15,
-15,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-17,
-17,
-17,
-17,
-17,
-17,
-17,
-17,
-18,
-18,
-18,
-18,
-18,
-18,
-18,
-18,
-18,
-19,
-19,
-19,
-19,
-19,
-19,
-19,
-19,
-19,
-19,
-19,
-19,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-19,
-19,
-19,
-19,
-19,
-19,
-19,
-19,
-19,
-19,
-19,
-19,
-19,
-19,
-18,
-18,
-18,
-18,
-18,
-18,
-18,
-18,
-18,
-18,
-17,
-17,
-17,
-17,
-17,
-17,
-17,
-17,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-15,
-15,
-15,
-15,
-15,
-15,
-15,
-14,
-14,
-14,
-14,
-14,
-14,
-14,
-13,
-13,
-13,
-13,
-13,
-13,
-12,
-12,
-12,
-12,
-12,
-12,
-11,
-11,
-11,
-11,
-11,
-11,
-10,
-10,
-10,
-10,
-10,
-9,
-9,
-9,
-9,
-9,
-9,
-8,
-8,
-8,
-8,
-8,
-7,
-7,
-7,
-7,
-7,
-7,
-6,
-6,
-6,
-6,
-6,
-5,
-5,
-5,
-5,
-5,
-4,
-4,
-4,
-4,
-4,
-4,
-3,
-3,
-3,
-3,
-3,
-2,
-2,
-2,
-2,
-2,
-2,
-1,
-1,
-1,
-1,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
--1,
--1,
--1,
--1,
--1,
--2,
--2,
--2,
--2,
--2,
--2,
--3,
--3,
--3,
--3,
--3,
--3,
--4,
--4,
--4,
--4,
--4,
--4,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--6,
--6,
--6,
--6,
--6,
--6,
--6,
--7,
--7,
--7,
--7,
--7,
--7,
--7,
--7,
--8,
--8,
--8,
--8,
--8,
--8,
--8,
--8,
--9,
--9,
--9,
--9,
--9,
--9,
--9,
--9,
--9,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--9,
--9,
--9,
--9,
--9,
--9,
--9,
--9,
--9,
--9,
--9,
--8,
--8,
--8,
--8,
--8,
--8,
--8,
--8,
--8,
--8,
--7,
--7,
--7,
--7,
--7,
--7,
--7,
--7,
--7,
--6,
--6,
--6,
--6,
--6,
--6,
--6,
--6,
--6,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0};
-
-static const RES_HWORD LARGE_FILTER_IMPD[] /* Impulse response differences */ = {
--1,
--2,
--3,
--5,
--6,
--7,
--9,
--10,
--11,
--13,
--14,
--15,
--17,
--18,
--19,
--21,
--22,
--23,
--25,
--26,
--27,
--28,
--30,
--32,
--32,
--34,
--35,
--36,
--38,
--39,
--40,
--42,
--43,
--44,
--45,
--47,
--48,
--49,
--51,
--52,
--53,
--54,
--56,
--56,
--58,
--60,
--60,
--62,
--63,
--64,
--66,
--66,
--68,
--69,
--70,
--72,
--72,
--74,
--75,
--76,
--77,
--79,
--79,
--81,
--82,
--83,
--84,
--85,
--87,
--87,
--89,
--90,
--90,
--92,
--93,
--94,
--95,
--96,
--98,
--98,
--99,
--100,
--102,
--102,
--103,
--105,
--105,
--106,
--108,
--108,
--109,
--110,
--111,
--112,
--113,
--114,
--115,
--116,
--116,
--118,
--118,
--119,
--121,
--120,
--122,
--123,
--123,
--125,
--125,
--126,
--126,
--128,
--128,
--129,
--130,
--130,
--132,
--132,
--132,
--134,
--134,
--135,
--135,
--136,
--137,
--137,
--138,
--139,
--139,
--140,
--141,
--141,
--142,
--142,
--143,
--143,
--144,
--145,
--145,
--145,
--146,
--147,
--147,
--147,
--148,
--149,
--148,
--150,
--149,
--150,
--151,
--151,
--151,
--152,
--152,
--152,
--153,
--153,
--153,
--153,
--154,
--154,
--155,
--155,
--155,
--155,
--155,
--156,
--156,
--156,
--156,
--156,
--157,
--157,
--157,
--157,
--157,
--157,
--157,
--158,
--157,
--158,
--158,
--157,
--158,
--158,
--158,
--158,
--157,
--158,
--158,
--158,
--157,
--158,
--158,
--157,
--158,
--157,
--157,
--157,
--157,
--157,
--157,
--157,
--156,
--156,
--156,
--156,
--156,
--155,
--155,
--155,
--155,
--155,
--154,
--154,
--153,
--154,
--153,
--153,
--152,
--152,
--152,
--151,
--151,
--151,
--150,
--150,
--150,
--149,
--149,
--148,
--148,
--147,
--147,
--147,
--146,
--145,
--145,
--145,
--144,
--144,
--143,
--142,
--142,
--142,
--141,
--140,
--140,
--139,
--139,
--138,
--137,
--137,
--136,
--136,
--135,
--134,
--134,
--133,
--132,
--132,
--131,
--130,
--130,
--129,
--128,
--128,
--126,
--126,
--126,
--125,
--123,
--124,
--122,
--122,
--121,
--120,
--119,
--119,
--117,
--117,
--117,
--115,
--114,
--113,
--113,
--112,
--112,
--110,
--110,
--108,
--108,
--107,
--106,
--106,
--104,
--104,
--102,
--102,
--101,
--100,
--99,
--98,
--98,
--96,
--95,
--95,
--94,
--92,
--92,
--91,
--90,
--89,
--88,
--87,
--86,
--85,
--85,
--83,
--82,
--82,
--80,
--80,
--78,
--78,
--76,
--76,
--75,
--73,
--73,
--72,
--70,
--70,
--69,
--68,
--66,
--66,
--65,
--64,
--63,
--61,
--61,
--60,
--59,
--58,
--57,
--56,
--55,
--54,
--53,
--51,
--51,
--50,
--49,
--48,
--47,
--46,
--45,
--44,
--43,
--42,
--41,
--41,
--39,
--38,
--37,
--36,
--35,
--34,
--34,
--32,
--31,
--31,
--29,
--28,
--28,
--26,
--26,
--24,
--24,
--23,
--21,
--21,
--20,
--19,
--18,
--17,
--16,
--15,
--14,
--13,
--13,
--11,
--11,
--9,
--9,
--8,
--7,
--6,
--5,
--5,
--3,
--2,
--2,
--1,
-0,
-1,
-2,
-2,
-4,
-4,
-5,
-6,
-7,
-8,
-8,
-10,
-10,
-11,
-11,
-13,
-13,
-14,
-15,
-15,
-17,
-17,
-18,
-18,
-20,
-20,
-21,
-21,
-23,
-23,
-23,
-25,
-25,
-26,
-26,
-27,
-28,
-28,
-30,
-29,
-31,
-31,
-32,
-32,
-33,
-34,
-34,
-35,
-35,
-36,
-37,
-37,
-37,
-39,
-39,
-39,
-40,
-40,
-41,
-42,
-42,
-42,
-43,
-44,
-44,
-44,
-45,
-46,
-45,
-47,
-46,
-48,
-47,
-48,
-49,
-49,
-49,
-49,
-50,
-51,
-51,
-51,
-51,
-52,
-52,
-53,
-53,
-53,
-53,
-54,
-54,
-54,
-55,
-55,
-55,
-55,
-56,
-56,
-56,
-56,
-57,
-57,
-57,
-57,
-58,
-57,
-58,
-58,
-58,
-58,
-59,
-58,
-59,
-59,
-59,
-59,
-59,
-59,
-59,
-60,
-59,
-60,
-59,
-60,
-60,
-60,
-59,
-60,
-60,
-60,
-60,
-59,
-60,
-60,
-60,
-60,
-59,
-60,
-60,
-59,
-60,
-59,
-60,
-59,
-59,
-59,
-59,
-59,
-59,
-59,
-58,
-59,
-58,
-58,
-58,
-58,
-57,
-58,
-57,
-57,
-57,
-57,
-55,
-57,
-56,
-56,
-55,
-56,
-55,
-55,
-54,
-55,
-54,
-54,
-54,
-53,
-53,
-53,
-52,
-53,
-52,
-51,
-52,
-51,
-50,
-51,
-50,
-49,
-50,
-49,
-48,
-49,
-48,
-47,
-47,
-47,
-47,
-46,
-46,
-45,
-45,
-45,
-44,
-44,
-43,
-43,
-42,
-43,
-41,
-42,
-40,
-41,
-40,
-39,
-40,
-38,
-39,
-37,
-38,
-37,
-36,
-36,
-35,
-36,
-34,
-34,
-34,
-33,
-33,
-32,
-32,
-31,
-31,
-30,
-30,
-29,
-29,
-28,
-28,
-27,
-27,
-26,
-26,
-25,
-25,
-24,
-24,
-24,
-22,
-23,
-21,
-21,
-21,
-20,
-20,
-19,
-19,
-18,
-18,
-17,
-16,
-16,
-16,
-15,
-14,
-14,
-14,
-13,
-12,
-12,
-11,
-11,
-11,
-9,
-10,
-8,
-9,
-7,
-8,
-6,
-7,
-5,
-5,
-5,
-4,
-4,
-3,
-3,
-2,
-1,
-1,
-1,
-0,
-0,
--1,
--1,
--2,
--3,
--3,
--3,
--4,
--4,
--5,
--5,
--6,
--6,
--7,
--7,
--8,
--8,
--8,
--9,
--10,
--10,
--10,
--11,
--11,
--12,
--12,
--13,
--13,
--14,
--14,
--14,
--15,
--15,
--16,
--16,
--16,
--17,
--18,
--17,
--18,
--19,
--19,
--19,
--20,
--20,
--21,
--20,
--22,
--21,
--22,
--23,
--22,
--23,
--24,
--23,
--25,
--24,
--25,
--25,
--25,
--26,
--26,
--27,
--26,
--27,
--28,
--27,
--28,
--28,
--29,
--29,
--29,
--29,
--30,
--30,
--30,
--30,
--31,
--31,
--31,
--31,
--32,
--32,
--32,
--32,
--33,
--33,
--33,
--33,
--33,
--34,
--34,
--34,
--34,
--34,
--35,
--34,
--35,
--35,
--35,
--36,
--35,
--36,
--35,
--36,
--36,
--36,
--37,
--36,
--36,
--37,
--37,
--36,
--37,
--37,
--37,
--37,
--37,
--38,
--37,
--37,
--38,
--37,
--38,
--37,
--38,
--37,
--38,
--38,
--37,
--38,
--38,
--37,
--38,
--38,
--37,
--38,
--38,
--37,
--38,
--37,
--38,
--37,
--38,
--37,
--38,
--37,
--37,
--37,
--37,
--37,
--37,
--37,
--37,
--35,
--37,
--36,
--37,
--36,
--36,
--36,
--36,
--36,
--35,
--36,
--35,
--36,
--35,
--35,
--34,
--35,
--34,
--35,
--34,
--34,
--34,
--33,
--34,
--33,
--33,
--33,
--32,
--33,
--32,
--32,
--32,
--32,
--31,
--31,
--31,
--31,
--31,
--30,
--30,
--30,
--29,
--30,
--29,
--29,
--28,
--28,
--29,
--27,
--28,
--27,
--27,
--27,
--26,
--27,
--25,
--26,
--25,
--26,
--24,
--25,
--24,
--24,
--23,
--24,
--23,
--22,
--23,
--22,
--22,
--21,
--21,
--21,
--21,
--20,
--20,
--19,
--19,
--19,
--19,
--18,
--18,
--18,
--17,
--17,
--17,
--16,
--16,
--15,
--16,
--14,
--15,
--14,
--14,
--14,
--13,
--13,
--12,
--12,
--12,
--12,
--11,
--10,
--11,
--10,
--10,
--9,
--9,
--9,
--8,
--8,
--8,
--7,
--7,
--6,
--6,
--6,
--6,
--5,
--5,
--4,
--4,
--4,
--3,
--3,
--3,
--2,
--2,
--2,
--1,
--1,
--1,
-0,
-0,
-0,
-1,
-1,
-2,
-1,
-3,
-2,
-3,
-3,
-4,
-3,
-4,
-5,
-5,
-5,
-5,
-6,
-6,
-7,
-6,
-8,
-7,
-8,
-8,
-8,
-9,
-9,
-9,
-10,
-9,
-11,
-10,
-11,
-11,
-11,
-12,
-12,
-12,
-13,
-13,
-13,
-13,
-14,
-14,
-14,
-14,
-15,
-15,
-15,
-16,
-16,
-16,
-16,
-17,
-16,
-18,
-17,
-17,
-18,
-18,
-18,
-19,
-19,
-19,
-19,
-19,
-20,
-19,
-20,
-21,
-20,
-21,
-21,
-21,
-21,
-21,
-22,
-22,
-22,
-22,
-22,
-23,
-22,
-23,
-23,
-23,
-23,
-24,
-24,
-23,
-24,
-24,
-24,
-25,
-24,
-25,
-24,
-25,
-25,
-25,
-25,
-26,
-25,
-26,
-25,
-26,
-26,
-25,
-26,
-26,
-26,
-27,
-26,
-26,
-27,
-26,
-27,
-26,
-27,
-26,
-27,
-27,
-27,
-26,
-27,
-27,
-27,
-27,
-27,
-27,
-27,
-27,
-27,
-27,
-27,
-27,
-27,
-27,
-27,
-27,
-27,
-26,
-27,
-27,
-27,
-27,
-26,
-27,
-27,
-26,
-26,
-26,
-27,
-26,
-26,
-27,
-26,
-26,
-26,
-26,
-26,
-26,
-25,
-26,
-25,
-26,
-25,
-25,
-25,
-25,
-25,
-25,
-25,
-24,
-24,
-25,
-24,
-24,
-24,
-23,
-24,
-24,
-23,
-23,
-23,
-23,
-23,
-22,
-23,
-22,
-22,
-22,
-22,
-21,
-22,
-21,
-21,
-21,
-21,
-20,
-20,
-21,
-20,
-19,
-20,
-19,
-19,
-19,
-19,
-19,
-18,
-18,
-18,
-18,
-18,
-17,
-17,
-17,
-17,
-16,
-16,
-16,
-16,
-16,
-15,
-15,
-15,
-14,
-15,
-14,
-14,
-14,
-13,
-13,
-13,
-13,
-12,
-13,
-12,
-11,
-12,
-11,
-11,
-11,
-10,
-11,
-10,
-9,
-10,
-9,
-9,
-9,
-8,
-9,
-8,
-7,
-8,
-7,
-7,
-7,
-6,
-6,
-6,
-6,
-5,
-5,
-5,
-5,
-4,
-4,
-4,
-3,
-4,
-3,
-3,
-2,
-2,
-2,
-2,
-2,
-1,
-1,
-0,
-1,
-0,
-0,
-0,
--1,
--1,
--1,
--1,
--2,
--2,
--2,
--2,
--3,
--2,
--4,
--3,
--3,
--4,
--4,
--5,
--4,
--5,
--5,
--5,
--6,
--6,
--6,
--6,
--7,
--6,
--7,
--7,
--8,
--7,
--8,
--8,
--9,
--8,
--9,
--9,
--9,
--10,
--9,
--10,
--10,
--10,
--11,
--10,
--11,
--11,
--12,
--11,
--12,
--12,
--12,
--12,
--13,
--12,
--13,
--13,
--13,
--14,
--13,
--14,
--14,
--14,
--14,
--15,
--14,
--15,
--15,
--15,
--15,
--16,
--15,
--16,
--16,
--16,
--16,
--16,
--17,
--16,
--17,
--17,
--17,
--17,
--17,
--18,
--17,
--18,
--18,
--17,
--18,
--18,
--19,
--18,
--18,
--19,
--18,
--19,
--19,
--19,
--19,
--19,
--19,
--19,
--19,
--20,
--19,
--20,
--19,
--20,
--20,
--20,
--19,
--20,
--20,
--20,
--20,
--20,
--21,
--20,
--20,
--20,
--21,
--20,
--20,
--21,
--20,
--21,
--20,
--20,
--21,
--20,
--21,
--20,
--21,
--20,
--21,
--20,
--21,
--21,
--20,
--20,
--21,
--20,
--21,
--20,
--21,
--20,
--20,
--20,
--20,
--20,
--20,
--20,
--20,
--20,
--20,
--20,
--20,
--20,
--20,
--19,
--20,
--20,
--19,
--20,
--19,
--19,
--19,
--20,
--19,
--19,
--18,
--19,
--19,
--19,
--18,
--18,
--19,
--18,
--18,
--18,
--18,
--18,
--18,
--17,
--18,
--17,
--17,
--17,
--17,
--17,
--17,
--16,
--17,
--16,
--16,
--17,
--15,
--16,
--16,
--15,
--16,
--15,
--15,
--15,
--15,
--15,
--14,
--14,
--15,
--14,
--13,
--14,
--14,
--13,
--13,
--13,
--13,
--13,
--13,
--12,
--12,
--12,
--12,
--12,
--11,
--12,
--11,
--11,
--11,
--10,
--11,
--10,
--10,
--10,
--9,
--10,
--9,
--9,
--9,
--9,
--9,
--8,
--8,
--8,
--8,
--8,
--7,
--7,
--7,
--7,
--7,
--6,
--6,
--6,
--6,
--6,
--5,
--5,
--6,
--4,
--5,
--4,
--5,
--4,
--4,
--3,
--4,
--3,
--3,
--3,
--2,
--3,
--2,
--2,
--2,
--1,
--2,
--1,
--1,
--1,
-0,
--1,
-0,
-0,
-0,
-1,
-0,
-1,
-1,
-1,
-1,
-2,
-2,
-2,
-2,
-2,
-3,
-3,
-2,
-4,
-3,
-3,
-4,
-4,
-4,
-4,
-5,
-4,
-5,
-5,
-5,
-6,
-5,
-6,
-6,
-6,
-6,
-7,
-6,
-7,
-7,
-7,
-7,
-8,
-7,
-8,
-8,
-8,
-8,
-9,
-8,
-9,
-9,
-9,
-9,
-10,
-9,
-10,
-10,
-10,
-10,
-10,
-11,
-10,
-11,
-11,
-11,
-11,
-11,
-11,
-12,
-11,
-12,
-12,
-12,
-12,
-12,
-13,
-12,
-13,
-13,
-12,
-13,
-13,
-14,
-13,
-13,
-14,
-13,
-14,
-14,
-13,
-14,
-14,
-15,
-14,
-14,
-14,
-15,
-14,
-15,
-15,
-14,
-15,
-15,
-15,
-15,
-15,
-16,
-15,
-15,
-15,
-16,
-15,
-16,
-15,
-16,
-15,
-16,
-16,
-16,
-15,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-17,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-15,
-16,
-16,
-16,
-16,
-16,
-15,
-16,
-16,
-15,
-16,
-16,
-15,
-15,
-16,
-15,
-16,
-15,
-15,
-15,
-15,
-15,
-15,
-15,
-15,
-15,
-14,
-15,
-14,
-15,
-14,
-14,
-15,
-14,
-14,
-14,
-14,
-13,
-14,
-14,
-13,
-13,
-14,
-13,
-13,
-13,
-13,
-13,
-12,
-13,
-12,
-13,
-12,
-12,
-12,
-12,
-12,
-12,
-11,
-12,
-11,
-11,
-11,
-11,
-11,
-11,
-10,
-11,
-10,
-10,
-10,
-10,
-10,
-10,
-9,
-10,
-9,
-9,
-9,
-9,
-8,
-9,
-8,
-9,
-8,
-8,
-8,
-7,
-8,
-7,
-7,
-7,
-7,
-7,
-7,
-6,
-7,
-6,
-6,
-6,
-5,
-6,
-5,
-5,
-6,
-4,
-5,
-5,
-4,
-5,
-4,
-4,
-4,
-3,
-4,
-3,
-3,
-3,
-3,
-3,
-2,
-3,
-2,
-2,
-2,
-2,
-1,
-2,
-1,
-1,
-1,
-1,
-1,
-0,
-0,
-1,
-0,
--1,
-0,
-0,
--1,
--1,
--1,
--1,
--1,
--2,
--1,
--2,
--2,
--2,
--2,
--2,
--3,
--2,
--3,
--3,
--3,
--3,
--4,
--3,
--4,
--4,
--4,
--4,
--4,
--5,
--4,
--5,
--5,
--5,
--5,
--5,
--6,
--5,
--6,
--6,
--6,
--6,
--6,
--6,
--7,
--6,
--7,
--7,
--7,
--7,
--7,
--7,
--8,
--8,
--7,
--8,
--8,
--8,
--8,
--9,
--8,
--9,
--8,
--9,
--9,
--9,
--9,
--9,
--9,
--10,
--9,
--10,
--9,
--10,
--10,
--10,
--10,
--10,
--10,
--11,
--10,
--11,
--10,
--11,
--11,
--11,
--10,
--11,
--11,
--12,
--11,
--11,
--11,
--12,
--11,
--12,
--12,
--11,
--12,
--12,
--12,
--11,
--12,
--12,
--13,
--12,
--12,
--12,
--12,
--13,
--12,
--12,
--13,
--12,
--13,
--12,
--13,
--12,
--13,
--13,
--12,
--13,
--13,
--13,
--12,
--13,
--13,
--13,
--13,
--12,
--13,
--13,
--13,
--13,
--13,
--13,
--12,
--13,
--13,
--13,
--13,
--13,
--13,
--13,
--12,
--13,
--13,
--13,
--13,
--11,
--13,
--13,
--12,
--13,
--13,
--12,
--13,
--12,
--13,
--12,
--13,
--12,
--13,
--12,
--12,
--13,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--11,
--12,
--12,
--11,
--12,
--11,
--11,
--12,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--10,
--11,
--10,
--11,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--9,
--10,
--9,
--9,
--9,
--9,
--9,
--9,
--9,
--9,
--8,
--9,
--8,
--8,
--8,
--8,
--8,
--8,
--8,
--8,
--7,
--7,
--8,
--7,
--7,
--7,
--7,
--6,
--7,
--7,
--6,
--6,
--6,
--6,
--6,
--6,
--6,
--5,
--6,
--5,
--5,
--5,
--5,
--5,
--4,
--5,
--4,
--5,
--4,
--4,
--4,
--4,
--3,
--4,
--3,
--4,
--3,
--3,
--3,
--3,
--2,
--3,
--2,
--2,
--3,
--2,
--1,
--2,
--2,
--1,
--2,
--1,
--1,
--1,
--1,
--1,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-1,
-1,
-0,
-2,
-1,
-1,
-1,
-2,
-2,
-1,
-2,
-2,
-3,
-2,
-2,
-3,
-2,
-3,
-3,
-3,
-3,
-3,
-4,
-3,
-4,
-4,
-3,
-4,
-4,
-4,
-5,
-4,
-5,
-4,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-6,
-5,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-7,
-6,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-8,
-7,
-8,
-8,
-7,
-8,
-8,
-8,
-8,
-8,
-8,
-9,
-8,
-9,
-8,
-9,
-8,
-9,
-9,
-8,
-9,
-9,
-9,
-9,
-9,
-10,
-9,
-9,
-9,
-10,
-9,
-10,
-9,
-10,
-10,
-9,
-10,
-10,
-9,
-10,
-10,
-10,
-10,
-10,
-10,
-10,
-10,
-10,
-10,
-11,
-10,
-10,
-10,
-10,
-11,
-10,
-10,
-11,
-10,
-10,
-11,
-10,
-10,
-11,
-10,
-10,
-11,
-10,
-11,
-10,
-11,
-10,
-10,
-11,
-10,
-10,
-11,
-10,
-11,
-10,
-10,
-10,
-10,
-10,
-10,
-11,
-10,
-10,
-10,
-10,
-11,
-10,
-10,
-10,
-10,
-10,
-10,
-10,
-10,
-9,
-10,
-10,
-10,
-9,
-10,
-10,
-9,
-10,
-9,
-10,
-9,
-9,
-10,
-9,
-9,
-9,
-9,
-9,
-9,
-9,
-9,
-9,
-8,
-9,
-9,
-8,
-9,
-8,
-8,
-9,
-8,
-8,
-8,
-8,
-8,
-8,
-7,
-8,
-8,
-7,
-8,
-7,
-7,
-8,
-7,
-7,
-7,
-7,
-6,
-7,
-7,
-6,
-7,
-6,
-7,
-6,
-6,
-6,
-6,
-6,
-6,
-5,
-6,
-5,
-6,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-4,
-5,
-4,
-5,
-4,
-4,
-4,
-4,
-4,
-4,
-3,
-4,
-3,
-4,
-3,
-3,
-3,
-3,
-3,
-3,
-2,
-3,
-2,
-2,
-3,
-2,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--3,
--2,
--3,
--2,
--3,
--3,
--3,
--3,
--3,
--3,
--4,
--3,
--4,
--3,
--4,
--4,
--3,
--4,
--4,
--5,
--4,
--4,
--4,
--5,
--4,
--5,
--5,
--5,
--4,
--5,
--5,
--6,
--5,
--5,
--5,
--6,
--5,
--6,
--5,
--6,
--6,
--6,
--6,
--6,
--6,
--6,
--6,
--6,
--7,
--6,
--6,
--7,
--6,
--7,
--7,
--6,
--7,
--7,
--7,
--7,
--7,
--7,
--7,
--7,
--8,
--7,
--7,
--8,
--7,
--8,
--7,
--8,
--7,
--8,
--7,
--8,
--8,
--8,
--8,
--7,
--8,
--8,
--8,
--8,
--8,
--8,
--8,
--8,
--9,
--8,
--8,
--8,
--8,
--9,
--8,
--8,
--8,
--9,
--8,
--8,
--9,
--8,
--9,
--8,
--8,
--9,
--8,
--9,
--8,
--9,
--8,
--8,
--9,
--8,
--9,
--8,
--9,
--8,
--9,
--8,
--8,
--9,
--8,
--9,
--8,
--7,
--9,
--8,
--8,
--9,
--8,
--8,
--9,
--8,
--8,
--8,
--8,
--8,
--9,
--8,
--8,
--8,
--8,
--8,
--8,
--8,
--8,
--7,
--8,
--8,
--8,
--7,
--8,
--8,
--7,
--8,
--7,
--8,
--7,
--8,
--7,
--7,
--7,
--8,
--7,
--7,
--7,
--7,
--7,
--7,
--7,
--6,
--7,
--7,
--6,
--7,
--7,
--6,
--6,
--7,
--6,
--6,
--6,
--6,
--6,
--6,
--6,
--6,
--6,
--6,
--5,
--6,
--5,
--6,
--5,
--5,
--6,
--5,
--5,
--5,
--5,
--5,
--4,
--5,
--5,
--4,
--5,
--4,
--5,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--3,
--4,
--3,
--4,
--3,
--3,
--3,
--4,
--3,
--2,
--3,
--3,
--3,
--2,
--3,
--2,
--3,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--1,
--2,
--1,
--2,
--1,
--1,
--1,
--2,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-2,
-1,
-2,
-1,
-2,
-2,
-2,
-1,
-2,
-2,
-3,
-2,
-2,
-2,
-3,
-2,
-3,
-3,
-2,
-3,
-3,
-3,
-3,
-3,
-3,
-4,
-3,
-3,
-4,
-3,
-4,
-3,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-5,
-4,
-4,
-5,
-5,
-4,
-5,
-5,
-4,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-6,
-5,
-5,
-5,
-6,
-5,
-6,
-5,
-6,
-6,
-5,
-6,
-6,
-6,
-5,
-6,
-6,
-6,
-6,
-6,
-6,
-7,
-6,
-6,
-6,
-6,
-7,
-6,
-6,
-7,
-6,
-7,
-6,
-6,
-7,
-7,
-6,
-7,
-6,
-7,
-6,
-7,
-7,
-7,
-6,
-7,
-7,
-6,
-7,
-7,
-7,
-7,
-6,
-7,
-7,
-7,
-7,
-7,
-6,
-7,
-7,
-7,
-7,
-7,
-7,
-6,
-7,
-7,
-7,
-7,
-7,
-7,
-6,
-7,
-7,
-6,
-7,
-6,
-7,
-7,
-7,
-6,
-7,
-7,
-6,
-7,
-7,
-6,
-7,
-7,
-6,
-7,
-6,
-7,
-6,
-7,
-6,
-6,
-7,
-6,
-6,
-7,
-6,
-6,
-6,
-6,
-6,
-7,
-6,
-6,
-6,
-6,
-5,
-6,
-6,
-6,
-6,
-5,
-6,
-6,
-5,
-6,
-5,
-6,
-5,
-5,
-6,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-4,
-5,
-4,
-5,
-4,
-5,
-4,
-4,
-4,
-5,
-4,
-4,
-4,
-4,
-3,
-4,
-4,
-4,
-3,
-4,
-3,
-4,
-3,
-3,
-4,
-3,
-3,
-3,
-3,
-3,
-3,
-2,
-3,
-3,
-2,
-3,
-2,
-3,
-2,
-2,
-3,
-2,
-2,
-2,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-1,
-2,
-1,
-1,
-1,
-2,
-1,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
--1,
--1,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--2,
--2,
--1,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--3,
--2,
--2,
--3,
--2,
--3,
--2,
--3,
--3,
--2,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--4,
--3,
--3,
--4,
--3,
--4,
--3,
--4,
--3,
--4,
--4,
--3,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--5,
--4,
--4,
--5,
--4,
--4,
--5,
--4,
--5,
--4,
--5,
--5,
--4,
--5,
--5,
--4,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--6,
--5,
--5,
--5,
--5,
--6,
--5,
--5,
--6,
--5,
--5,
--6,
--5,
--6,
--5,
--6,
--5,
--6,
--5,
--5,
--6,
--6,
--5,
--6,
--5,
--6,
--5,
--6,
--5,
--6,
--5,
--6,
--6,
--5,
--6,
--5,
--6,
--5,
--6,
--5,
--6,
--6,
--5,
--6,
--5,
--5,
--5,
--6,
--5,
--6,
--5,
--6,
--5,
--5,
--6,
--5,
--6,
--5,
--5,
--6,
--5,
--5,
--6,
--5,
--5,
--5,
--6,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--4,
--5,
--5,
--5,
--4,
--5,
--5,
--4,
--5,
--4,
--5,
--4,
--4,
--5,
--4,
--4,
--5,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--3,
--4,
--4,
--3,
--4,
--4,
--3,
--4,
--3,
--3,
--4,
--3,
--3,
--3,
--4,
--3,
--3,
--3,
--3,
--3,
--2,
--3,
--3,
--3,
--2,
--3,
--2,
--3,
--2,
--3,
--2,
--2,
--3,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--1,
--2,
--2,
--1,
--2,
--2,
--1,
--1,
--2,
--1,
--1,
--1,
--2,
--1,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-1,
-2,
-1,
-1,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-2,
-1,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-3,
-2,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-3,
-4,
-3,
-3,
-4,
-3,
-4,
-3,
-4,
-3,
-4,
-3,
-4,
-4,
-3,
-4,
-4,
-4,
-4,
-3,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-5,
-4,
-4,
-4,
-4,
-5,
-4,
-4,
-4,
-5,
-4,
-4,
-5,
-4,
-4,
-5,
-4,
-5,
-4,
-4,
-5,
-4,
-5,
-4,
-5,
-4,
-4,
-5,
-4,
-5,
-4,
-5,
-4,
-5,
-4,
-5,
-4,
-5,
-4,
-5,
-4,
-5,
-4,
-5,
-4,
-5,
-4,
-5,
-3,
-4,
-5,
-4,
-5,
-4,
-4,
-5,
-4,
-5,
-4,
-4,
-5,
-4,
-4,
-5,
-4,
-4,
-4,
-4,
-5,
-4,
-4,
-4,
-4,
-4,
-5,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-3,
-4,
-4,
-4,
-4,
-4,
-3,
-4,
-4,
-4,
-3,
-4,
-4,
-3,
-4,
-3,
-4,
-3,
-3,
-4,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-2,
-3,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-1,
-2,
-1,
-1,
-2,
-1,
-1,
-1,
-2,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--2,
--1,
--2,
--1,
--2,
--2,
--2,
--1,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--3,
--2,
--2,
--2,
--3,
--2,
--3,
--2,
--3,
--2,
--3,
--2,
--3,
--2,
--3,
--3,
--3,
--2,
--3,
--3,
--3,
--3,
--2,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--4,
--3,
--3,
--3,
--3,
--4,
--3,
--3,
--3,
--4,
--3,
--3,
--4,
--3,
--3,
--4,
--3,
--3,
--4,
--3,
--4,
--3,
--4,
--3,
--4,
--3,
--4,
--3,
--4,
--3,
--4,
--3,
--4,
--3,
--4,
--4,
--3,
--4,
--3,
--4,
--4,
--3,
--4,
--3,
--4,
--4,
--3,
--4,
--3,
--4,
--4,
--3,
--4,
--3,
--4,
--3,
--4,
--4,
--3,
--3,
--3,
--4,
--3,
--4,
--4,
--3,
--4,
--3,
--4,
--3,
--4,
--3,
--3,
--4,
--3,
--4,
--3,
--4,
--3,
--3,
--4,
--3,
--3,
--4,
--3,
--3,
--4,
--3,
--3,
--3,
--3,
--4,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--2,
--3,
--3,
--3,
--2,
--3,
--3,
--2,
--3,
--2,
--3,
--2,
--3,
--2,
--3,
--2,
--3,
--2,
--2,
--3,
--2,
--2,
--2,
--2,
--2,
--3,
--2,
--2,
--2,
--2,
--2,
--2,
--1,
--2,
--2,
--2,
--2,
--1,
--2,
--2,
--1,
--2,
--1,
--2,
--1,
--2,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--1,
--1,
--1,
--2,
--1,
--1,
-0,
--1,
--1,
--1,
--1,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-2,
-1,
-1,
-1,
-2,
-1,
-1,
-2,
-1,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-2,
-1,
-2,
-2,
-2,
-1,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-3,
-2,
-2,
-2,
-3,
-2,
-2,
-3,
-2,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-3,
-2,
-3,
-2,
-3,
-3,
-2,
-3,
-3,
-3,
-2,
-3,
-3,
-2,
-3,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-3,
-3,
-3,
-2,
-2,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-2,
-3,
-3,
-2,
-3,
-3,
-2,
-3,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-2,
-3,
-2,
-2,
-3,
-2,
-2,
-3,
-2,
-2,
-2,
-2,
-2,
-3,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-1,
-2,
-2,
-2,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-1,
-2,
-1,
-1,
-2,
-1,
-1,
-1,
-1,
-2,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--2,
--1,
--1,
--1,
--1,
--2,
--1,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--2,
--1,
--2,
--1,
--2,
--1,
--2,
--1,
--2,
--1,
--2,
--2,
--1,
--2,
--2,
--1,
--2,
--2,
--2,
--1,
--2,
--2,
--2,
--2,
--1,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--3,
--2,
--2,
--2,
--2,
--2,
--2,
--3,
--2,
--2,
--2,
--2,
--3,
--2,
--2,
--2,
--3,
--2,
--2,
--2,
--2,
--3,
--2,
--2,
--2,
--3,
--2,
--2,
--2,
--3,
--2,
--2,
--3,
--2,
--2,
--2,
--3,
--2,
--2,
--2,
--3,
--2,
--2,
--2,
--3,
--1,
--2,
--2,
--2,
--3,
--2,
--2,
--2,
--2,
--3,
--2,
--2,
--2,
--2,
--2,
--3,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--3,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--1,
--2,
--2,
--2,
--2,
--2,
--2,
--1,
--2,
--2,
--2,
--2,
--1,
--2,
--2,
--2,
--1,
--2,
--2,
--1,
--2,
--1,
--2,
--2,
--1,
--2,
--1,
--2,
--1,
--2,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--1,
--1,
--2,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-1,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-2,
-1,
-1,
-1,
-1,
-1,
-1,
-2,
-1,
-1,
-1,
-2,
-1,
-1,
-2,
-1,
-1,
-2,
-1,
-1,
-2,
-1,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-2,
-1,
-2,
-1,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-2,
-2,
-1,
-2,
-2,
-2,
-1,
-2,
-2,
-2,
-1,
-2,
-2,
-2,
-2,
-1,
-2,
-2,
-2,
-1,
-2,
-2,
-2,
-1,
-2,
-2,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-2,
-1,
-2,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-1,
-2,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-1,
-2,
-1,
-2,
-1,
-1,
-2,
-1,
-1,
-2,
-1,
-1,
-2,
-1,
-1,
-1,
-2,
-1,
-1,
-1,
-1,
-1,
-2,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-1,
-0,
-1,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--2,
--1,
--1,
--1,
--1,
--1,
--1,
--2,
--1,
--1,
--1,
--1,
--2,
--1,
--1,
--1,
--2,
--1,
--1,
--1,
--2,
--1,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--1,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--1,
--1,
--2,
--1,
--1,
--1,
--2,
--1,
--1,
--1,
--1,
--1,
--2,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--2,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-2,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-1,
-0,
-1,
-1,
-0,
-1,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
-0,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0};
diff --git a/pjmedia/src/pjmedia/mp3_writer.c b/pjmedia/src/pjmedia/mp3_writer.c
deleted file mode 100644
index 98a0da29..00000000
--- a/pjmedia/src/pjmedia/mp3_writer.c
+++ /dev/null
@@ -1,563 +0,0 @@
-/* $Id$ */
-/*
- * Copyright (C) 2003-2007 Benny Prijono <benny@prijono.org>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-/*
- * Contributed by:
- * Toni < buldozer at aufbix dot org >
- */
-#include <pjmedia/mp3_port.h>
-#include <pjmedia/errno.h>
-#include <pj/assert.h>
-#include <pj/file_access.h>
-#include <pj/file_io.h>
-#include <pj/log.h>
-#include <pj/pool.h>
-#include <pj/string.h>
-#include <pj/unicode.h>
-
-
-/* Include BladeDLL declarations */
-#include "BladeMP3EncDLL.h"
-
-
-#define THIS_FILE "mp3_writer.c"
-#define SIGNATURE PJMEDIA_PORT_SIGNATURE('F', 'W', 'M', '3')
-#define BYTES_PER_SAMPLE 2
-
-static struct BladeDLL
-{
- void *hModule;
- int refCount;
- BEINITSTREAM beInitStream;
- BEENCODECHUNK beEncodeChunk;
- BEDEINITSTREAM beDeinitStream;
- BECLOSESTREAM beCloseStream;
- BEVERSION beVersion;
- BEWRITEVBRHEADER beWriteVBRHeader;
- BEWRITEINFOTAG beWriteInfoTag;
-} BladeDLL;
-
-
-struct mp3_file_port
-{
- pjmedia_port base;
- pj_size_t total;
- pj_oshandle_t fd;
- pj_size_t cb_size;
- pj_status_t (*cb)(pjmedia_port*, void*);
-
- unsigned silence_duration;
-
- pj_str_t mp3_filename;
- pjmedia_mp3_encoder_option mp3_option;
- unsigned mp3_samples_per_frame;
- pj_int16_t *mp3_sample_buf;
- unsigned mp3_sample_pos;
- HBE_STREAM mp3_stream;
- unsigned char *mp3_buf;
-};
-
-
-static pj_status_t file_put_frame(pjmedia_port *this_port,
- const pjmedia_frame *frame);
-static pj_status_t file_get_frame(pjmedia_port *this_port,
- pjmedia_frame *frame);
-static pj_status_t file_on_destroy(pjmedia_port *this_port);
-
-
-#if defined(PJ_WIN32) || defined(_WIN32) || defined(WIN32)
-
-#include <windows.h>
-#define DLL_NAME PJ_T("LAME_ENC.DLL")
-
-/*
- * Load BladeEncoder DLL.
- */
-static pj_status_t init_blade_dll(void)
-{
- if (BladeDLL.refCount == 0) {
- #define GET_PROC(type, name) \
- BladeDLL.name = (type)GetProcAddress(BladeDLL.hModule, PJ_T(#name)); \
- if (BladeDLL.name == NULL) { \
- PJ_LOG(1,(THIS_FILE, "Unable to find %s in %s", #name, DLL_NAME)); \
- return PJ_RETURN_OS_ERROR(GetLastError()); \
- }
-
- BE_VERSION beVersion;
- BladeDLL.hModule = (void*)LoadLibrary(DLL_NAME);
- if (BladeDLL.hModule == NULL) {
- pj_status_t status = PJ_RETURN_OS_ERROR(GetLastError());
- char errmsg[PJ_ERR_MSG_SIZE];
-
- pj_strerror(status, errmsg, sizeof(errmsg));
- PJ_LOG(1,(THIS_FILE, "Unable to load %s: %s", DLL_NAME, errmsg));
- return status;
- }
-
- GET_PROC(BEINITSTREAM, beInitStream);
- GET_PROC(BEENCODECHUNK, beEncodeChunk);
- GET_PROC(BEDEINITSTREAM, beDeinitStream);
- GET_PROC(BECLOSESTREAM, beCloseStream);
- GET_PROC(BEVERSION, beVersion);
- GET_PROC(BEWRITEVBRHEADER, beWriteVBRHeader);
- GET_PROC(BEWRITEINFOTAG, beWriteInfoTag);
-
- #undef GET_PROC
-
- BladeDLL.beVersion(&beVersion);
- PJ_LOG(4,(THIS_FILE, "%s encoder v%d.%d loaded (%s)", DLL_NAME,
- beVersion.byMajorVersion, beVersion.byMinorVersion,
- beVersion.zHomepage));
- }
- ++BladeDLL.refCount;
- return PJ_SUCCESS;
-}
-
-/*
- * Decrement the reference counter of the DLL.
- */
-static void deinit_blade_dll()
-{
- --BladeDLL.refCount;
- if (BladeDLL.refCount == 0 && BladeDLL.hModule) {
- FreeLibrary(BladeDLL.hModule);
- BladeDLL.hModule = NULL;
- PJ_LOG(4,(THIS_FILE, "%s unloaded", DLL_NAME));
- }
-}
-
-#else
-
-static pj_status_t init_blade_dll(void)
-{
- PJ_LOG(1,(THIS_FILE, "Error: MP3 writer port only works on Windows for now"));
- return PJ_ENOTSUP;
-}
-
-static void deinit_blade_dll()
-{
-}
-#endif
-
-
-
-/*
- * Initialize MP3 encoder.
- */
-static pj_status_t init_mp3_encoder(struct mp3_file_port *fport,
- pj_pool_t *pool)
-{
- BE_CONFIG LConfig;
- unsigned long InSamples;
- unsigned long OutBuffSize;
- long MP3Err;
-
- /*
- * Initialize encoder configuration.
- */
- pj_bzero(&LConfig, sizeof(BE_CONFIG));
- LConfig.dwConfig = BE_CONFIG_LAME;
- LConfig.format.LHV1.dwStructVersion = 1;
- LConfig.format.LHV1.dwStructSize = sizeof(BE_CONFIG);
- LConfig.format.LHV1.dwSampleRate = fport->base.info.clock_rate;
- LConfig.format.LHV1.dwReSampleRate = 0;
-
- if (fport->base.info.channel_count==1)
- LConfig.format.LHV1.nMode = BE_MP3_MODE_MONO;
- else if (fport->base.info.channel_count==2)
- LConfig.format.LHV1.nMode = BE_MP3_MODE_STEREO;
- else
- return PJMEDIA_ENCCHANNEL;
-
- LConfig.format.LHV1.dwBitrate = fport->mp3_option.bit_rate / 1000;
- LConfig.format.LHV1.nPreset = LQP_NOPRESET;
- LConfig.format.LHV1.bCopyright = 0;
- LConfig.format.LHV1.bCRC = 1;
- LConfig.format.LHV1.bOriginal = 1;
- LConfig.format.LHV1.bPrivate = 0;
-
- if (!fport->mp3_option.vbr) {
- LConfig.format.LHV1.nVbrMethod = VBR_METHOD_NONE;
- LConfig.format.LHV1.bWriteVBRHeader = 0;
- LConfig.format.LHV1.bEnableVBR = 0;
- } else {
- LConfig.format.LHV1.nVbrMethod = VBR_METHOD_DEFAULT;
- LConfig.format.LHV1.bWriteVBRHeader = 1;
- LConfig.format.LHV1.dwVbrAbr_bps = fport->mp3_option.bit_rate;
- LConfig.format.LHV1.nVBRQuality = (pj_uint16_t)
- fport->mp3_option.quality;
- LConfig.format.LHV1.bEnableVBR = 1;
- }
-
- LConfig.format.LHV1.nQuality = (pj_uint16_t)
- (((0-fport->mp3_option.quality-1)<<8) |
- fport->mp3_option.quality);
-
- /*
- * Init MP3 stream.
- */
- InSamples = 0;
- MP3Err = BladeDLL.beInitStream(&LConfig, &InSamples, &OutBuffSize,
- &fport->mp3_stream);
- if (MP3Err != BE_ERR_SUCCESSFUL)
- return PJMEDIA_ERROR;
-
- /*
- * Allocate sample buffer.
- */
- fport->mp3_samples_per_frame = (unsigned)InSamples;
- fport->mp3_sample_buf = pj_pool_alloc(pool, fport->mp3_samples_per_frame * 2);
- if (!fport->mp3_sample_buf)
- return PJ_ENOMEM;
-
- /*
- * Allocate encoded MP3 buffer.
- */
- fport->mp3_buf = pj_pool_alloc(pool, (pj_size_t)OutBuffSize);
- if (fport->mp3_buf == NULL)
- return PJ_ENOMEM;
-
-
- return PJ_SUCCESS;
-}
-
-
-/*
- * Create MP3 file writer port.
- */
-PJ_DEF(pj_status_t)
-pjmedia_mp3_writer_port_create( pj_pool_t *pool,
- const char *filename,
- unsigned sampling_rate,
- unsigned channel_count,
- unsigned samples_per_frame,
- unsigned bits_per_sample,
- const pjmedia_mp3_encoder_option *param_option,
- pjmedia_port **p_port )
-{
- struct mp3_file_port *fport;
- pj_status_t status;
-
- status = init_blade_dll();
- if (status != PJ_SUCCESS)
- return status;
-
- /* Check arguments. */
- PJ_ASSERT_RETURN(pool && filename && p_port, PJ_EINVAL);
-
- /* Only supports 16bits per sample for now. */
- PJ_ASSERT_RETURN(bits_per_sample == 16, PJ_EINVAL);
-
- /* Create file port instance. */
- fport = pj_pool_zalloc(pool, sizeof(struct mp3_file_port));
- PJ_ASSERT_RETURN(fport != NULL, PJ_ENOMEM);
-
- /* Initialize port info. */
- pj_strdup2_with_null(pool, &fport->mp3_filename, filename);
- pjmedia_port_info_init(&fport->base.info, &fport->mp3_filename, SIGNATURE,
- sampling_rate, channel_count, bits_per_sample,
- samples_per_frame);
-
- fport->base.get_frame = &file_get_frame;
- fport->base.put_frame = &file_put_frame;
- fport->base.on_destroy = &file_on_destroy;
-
-
- /* Open file in write and read mode.
- * We need the read mode because we'll modify the WAVE header once
- * the recording has completed.
- */
- status = pj_file_open(pool, filename, PJ_O_WRONLY, &fport->fd);
- if (status != PJ_SUCCESS) {
- deinit_blade_dll();
- return status;
- }
-
- /* Copy and initialize option with default settings */
- if (param_option) {
- pj_memcpy(&fport->mp3_option, param_option,
- sizeof(pjmedia_mp3_encoder_option));
- } else {
- pj_bzero(&fport->mp3_option, sizeof(pjmedia_mp3_encoder_option));
- fport->mp3_option.vbr = PJ_TRUE;
- }
-
- /* Calculate bitrate if it's not specified, only if it's not VBR. */
- if (fport->mp3_option.bit_rate == 0 && !fport->mp3_option.vbr)
- fport->mp3_option.bit_rate = sampling_rate * channel_count;
-
- /* Set default quality if it's not specified */
- if (fport->mp3_option.quality == 0)
- fport->mp3_option.quality = 2;
-
- /* Init mp3 encoder */
- status = init_mp3_encoder(fport, pool);
- if (status != PJ_SUCCESS) {
- pj_file_close(fport->fd);
- deinit_blade_dll();
- return status;
- }
-
- /* Done. */
- *p_port = &fport->base;
-
- PJ_LOG(4,(THIS_FILE,
- "MP3 file writer '%.*s' created: samp.rate=%dKHz, "
- "bitrate=%dkbps%s, quality=%d",
- (int)fport->base.info.name.slen,
- fport->base.info.name.ptr,
- fport->base.info.clock_rate/1000,
- fport->mp3_option.bit_rate/1000,
- (fport->mp3_option.vbr ? " (VBR)" : ""),
- fport->mp3_option.quality));
-
- return PJ_SUCCESS;
-}
-
-
-
-/*
- * Register callback.
- */
-PJ_DEF(pj_status_t)
-pjmedia_mp3_writer_port_set_cb( pjmedia_port *port,
- pj_size_t pos,
- void *user_data,
- pj_status_t (*cb)(pjmedia_port *port,
- void *usr_data))
-{
- struct mp3_file_port *fport;
-
- /* Sanity check */
- PJ_ASSERT_RETURN(port && cb, PJ_EINVAL);
-
- /* Check that this is really a writer port */
- PJ_ASSERT_RETURN(port->info.signature == SIGNATURE, PJ_EINVALIDOP);
-
- fport = (struct mp3_file_port*) port;
-
- fport->cb_size = pos;
- fport->base.port_data.pdata = user_data;
- fport->cb = cb;
-
- return PJ_SUCCESS;
-
-}
-
-
-/*
- * Put a frame into the buffer. When the buffer is full, flush the buffer
- * to the file.
- */
-static pj_status_t file_put_frame(pjmedia_port *this_port,
- const pjmedia_frame *frame)
-{
- struct mp3_file_port *fport = (struct mp3_file_port *)this_port;
- unsigned long MP3Err;
- pj_ssize_t bytes;
- pj_status_t status;
- unsigned long WriteSize;
-
- /* Record silence if input is no-frame */
- if (frame->type == PJMEDIA_FRAME_TYPE_NONE || frame->size == 0) {
- unsigned samples_left = fport->base.info.samples_per_frame;
- unsigned samples_copied = 0;
-
- /* Only want to record at most 1 second of silence */
- if (fport->silence_duration >= fport->base.info.clock_rate)
- return PJ_SUCCESS;
-
- while (samples_left) {
- unsigned samples_needed = fport->mp3_samples_per_frame -
- fport->mp3_sample_pos;
- if (samples_needed > samples_left)
- samples_needed = samples_left;
-
- pjmedia_zero_samples(fport->mp3_sample_buf + fport->mp3_sample_pos,
- samples_needed);
- fport->mp3_sample_pos += samples_needed;
- samples_left -= samples_needed;
- samples_copied += samples_needed;
-
- /* Encode if we have full frame */
- if (fport->mp3_sample_pos == fport->mp3_samples_per_frame) {
-
- /* Clear position */
- fport->mp3_sample_pos = 0;
-
- /* Encode ! */
- MP3Err = BladeDLL.beEncodeChunk(fport->mp3_stream,
- fport->mp3_samples_per_frame,
- fport->mp3_sample_buf,
- fport->mp3_buf,
- &WriteSize);
- if (MP3Err != BE_ERR_SUCCESSFUL)
- return PJMEDIA_ERROR;
-
- /* Write the chunk */
- bytes = WriteSize;
- status = pj_file_write(fport->fd, fport->mp3_buf, &bytes);
- if (status != PJ_SUCCESS)
- return status;
-
- /* Increment total written. */
- fport->total += bytes;
- }
- }
-
- fport->silence_duration += fport->base.info.samples_per_frame;
-
- }
- /* If encoder is expecting different sample size, then we need to
- * buffer the samples.
- */
- else if (fport->mp3_samples_per_frame !=
- fport->base.info.samples_per_frame)
- {
- unsigned samples_left = frame->size / 2;
- unsigned samples_copied = 0;
- const pj_int16_t *src_samples = frame->buf;
-
- fport->silence_duration = 0;
-
- while (samples_left) {
- unsigned samples_needed = fport->mp3_samples_per_frame -
- fport->mp3_sample_pos;
- if (samples_needed > samples_left)
- samples_needed = samples_left;
-
- pjmedia_copy_samples(fport->mp3_sample_buf + fport->mp3_sample_pos,
- src_samples + samples_copied,
- samples_needed);
- fport->mp3_sample_pos += samples_needed;
- samples_left -= samples_needed;
- samples_copied += samples_needed;
-
- /* Encode if we have full frame */
- if (fport->mp3_sample_pos == fport->mp3_samples_per_frame) {
-
- /* Clear position */
- fport->mp3_sample_pos = 0;
-
- /* Encode ! */
- MP3Err = BladeDLL.beEncodeChunk(fport->mp3_stream,
- fport->mp3_samples_per_frame,
- fport->mp3_sample_buf,
- fport->mp3_buf,
- &WriteSize);
- if (MP3Err != BE_ERR_SUCCESSFUL)
- return PJMEDIA_ERROR;
-
- /* Write the chunk */
- bytes = WriteSize;
- status = pj_file_write(fport->fd, fport->mp3_buf, &bytes);
- if (status != PJ_SUCCESS)
- return status;
-
- /* Increment total written. */
- fport->total += bytes;
- }
- }
-
- } else {
-
- fport->silence_duration = 0;
-
- /* Encode ! */
- MP3Err = BladeDLL.beEncodeChunk(fport->mp3_stream,
- fport->mp3_samples_per_frame,
- frame->buf,
- fport->mp3_buf,
- &WriteSize);
- if (MP3Err != BE_ERR_SUCCESSFUL)
- return PJMEDIA_ERROR;
-
- /* Write the chunk */
- bytes = WriteSize;
- status = pj_file_write(fport->fd, fport->mp3_buf, &bytes);
- if (status != PJ_SUCCESS)
- return status;
-
- /* Increment total written. */
- fport->total += bytes;
- }
-
- /* Increment total written, and check if we need to call callback */
-
- if (fport->cb && fport->total >= fport->cb_size) {
- pj_status_t (*cb)(pjmedia_port*, void*);
- pj_status_t status;
-
- cb = fport->cb;
- fport->cb = NULL;
-
- status = (*cb)(this_port, this_port->port_data.pdata);
- return status;
- }
-
- return PJ_SUCCESS;
-}
-
-/*
- * Get frame, basicy is a no-op operation.
- */
-static pj_status_t file_get_frame(pjmedia_port *this_port,
- pjmedia_frame *frame)
-{
- PJ_UNUSED_ARG(this_port);
- PJ_UNUSED_ARG(frame);
- return PJ_EINVALIDOP;
-}
-
-
-/*
- * Close the port, modify file header with updated file length.
- */
-static pj_status_t file_on_destroy(pjmedia_port *this_port)
-{
- struct mp3_file_port *fport = (struct mp3_file_port*)this_port;
- pj_status_t status;
- unsigned long WriteSize;
- unsigned long MP3Err;
-
-
- /* Close encoder */
- MP3Err = BladeDLL.beDeinitStream(fport->mp3_stream, fport->mp3_buf,
- &WriteSize);
- if (MP3Err == BE_ERR_SUCCESSFUL) {
- pj_ssize_t bytes = WriteSize;
- status = pj_file_write(fport->fd, fport->mp3_buf, &bytes);
- }
-
- /* Close file */
- status = pj_file_close(fport->fd);
-
- /* Write additional VBR header */
- if (fport->mp3_option.vbr) {
- MP3Err = BladeDLL.beWriteVBRHeader(fport->mp3_filename.ptr);
- }
-
-
- /* Decrement DLL reference counter */
- deinit_blade_dll();
-
- /* Done. */
- return PJ_SUCCESS;
-}
-
diff --git a/pjmedia/src/pjmedia/plc_steveu.h b/pjmedia/src/pjmedia/plc_steveu.h
deleted file mode 100644
index 483e774b..00000000
--- a/pjmedia/src/pjmedia/plc_steveu.h
+++ /dev/null
@@ -1,153 +0,0 @@
-/*! \file
- * \brief SpanDSP - a series of DSP components for telephony
- *
- * plc.h
- *
- * \author Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2004 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * This version may be optionally licenced under the GNU LGPL licence.
- *
- * A license has been granted to Digium (via disclaimer) for the use of
- * this code.
- */
-
-
-#if !defined(_PLC_H_)
-#define _PLC_H_
-
-
-/*! \page plc_page Packet loss concealment
-\section plc_page_sec_1 What does it do?
-The packet loss concealment module provides a suitable synthetic fill-in signal,
-to minimise the audible effect of lost packets in VoIP applications. It is not
-tied to any particular codec, and could be used with almost any codec which does not
-specify its own procedure for packet loss concealment.
-
-Where a codec specific concealment procedure exists, the algorithm is usually built
-around knowledge of the characteristics of the particular codec. It will, therefore,
-generally give better results for that particular codec than this generic concealer will.
-
-\section plc_page_sec_2 How does it work?
-While good packets are being received, the plc_rx() routine keeps a record of the trailing
-section of the known speech signal. If a packet is missed, plc_fillin() is called to produce
-a synthetic replacement for the real speech signal. The average mean difference function
-(AMDF) is applied to the last known good signal, to determine its effective pitch.
-Based on this, the last pitch period of signal is saved. Essentially, this cycle of speech
-will be repeated over and over until the real speech resumes. However, several refinements
-are needed to obtain smooth pleasant sounding results.
-
-- The two ends of the stored cycle of speech will not always fit together smoothly. This can
- cause roughness, or even clicks, at the joins between cycles. To soften this, the
- 1/4 pitch period of real speech preceeding the cycle to be repeated is blended with the last
- 1/4 pitch period of the cycle to be repeated, using an overlap-add (OLA) technique (i.e.
- in total, the last 5/4 pitch periods of real speech are used).
-
-- The start of the synthetic speech will not always fit together smoothly with the tail of
- real speech passed on before the erasure was identified. Ideally, we would like to modify
- the last 1/4 pitch period of the real speech, to blend it into the synthetic speech. However,
- it is too late for that. We could have delayed the real speech a little, but that would
- require more buffer manipulation, and hurt the efficiency of the no-lost-packets case
- (which we hope is the dominant case). Instead we use a degenerate form of OLA to modify
- the start of the synthetic data. The last 1/4 pitch period of real speech is time reversed,
- and OLA is used to blend it with the first 1/4 pitch period of synthetic speech. The result
- seems quite acceptable.
-
-- As we progress into the erasure, the chances of the synthetic signal being anything like
- correct steadily fall. Therefore, the volume of the synthesized signal is made to decay
- linearly, such that after 50ms of missing audio it is reduced to silence.
-
-- When real speech resumes, an extra 1/4 pitch period of sythetic speech is blended with the
- start of the real speech. If the erasure is small, this smoothes the transition. If the erasure
- is long, and the synthetic signal has faded to zero, the blending softens the start up of the
- real signal, avoiding a kind of "click" or "pop" effect that might occur with a sudden onset.
-
-\section plc_page_sec_3 How do I use it?
-Before audio is processed, call plc_init() to create an instance of the packet loss
-concealer. For each received audio packet that is acceptable (i.e. not including those being
-dropped for being too late) call plc_rx() to record the content of the packet. Note this may
-modify the packet a little after a period of packet loss, to blend real synthetic data smoothly.
-When a real packet is not available in time, call plc_fillin() to create a sythetic substitute.
-That's it!
-*/
-
-/*! Minimum allowed pitch (66 Hz) */
-#define PLC_PITCH_MIN 120
-/*! Maximum allowed pitch (200 Hz) */
-#define PLC_PITCH_MAX 40
-/*! Maximum pitch OLA window */
-#define PLC_PITCH_OVERLAP_MAX (PLC_PITCH_MIN >> 2)
-/*! The length over which the AMDF function looks for similarity (20 ms) */
-#define CORRELATION_SPAN 160
-/*! History buffer length. The buffer much also be at leat 1.25 times
- PLC_PITCH_MIN, but that is much smaller than the buffer needs to be for
- the pitch assessment. */
-#define PLC_HISTORY_LEN (CORRELATION_SPAN + PLC_PITCH_MIN)
-
-typedef struct
-{
- /*! Consecutive erased samples */
- int missing_samples;
- /*! Current offset into pitch period */
- int pitch_offset;
- /*! Pitch estimate */
- int pitch;
- /*! Buffer for a cycle of speech */
- float pitchbuf[PLC_PITCH_MIN];
- /*! History buffer */
- pj_int16_t history[PLC_HISTORY_LEN];
- /*! Current pointer into the history buffer */
- int buf_ptr;
-} plc_state_t;
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*! Process a block of received audio samples.
- \brief Process a block of received audio samples.
- \param s The packet loss concealer context.
- \param amp The audio sample buffer.
- \param len The number of samples in the buffer.
- \return The number of samples in the buffer. */
-int plc_rx(plc_state_t *s, pj_int16_t amp[], int len);
-
-/*! Fill-in a block of missing audio samples.
- \brief Fill-in a block of missing audio samples.
- \param s The packet loss concealer context.
- \param amp The audio sample buffer.
- \param len The number of samples to be synthesised.
- \return The number of samples synthesized. */
-int plc_fillin(plc_state_t *s, pj_int16_t amp[], int len);
-
-/*! Process a block of received V.29 modem audio samples.
- \brief Process a block of received V.29 modem audio samples.
- \param s The packet loss concealer context.
- \return A pointer to the he packet loss concealer context. */
-plc_state_t *plc_init(plc_state_t *s);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-/*- End of file ------------------------------------------------------------*/
-
diff --git a/pjmedia/src/pjmedia/smallfilter.h b/pjmedia/src/pjmedia/smallfilter.h
deleted file mode 100644
index 396fcb14..00000000
--- a/pjmedia/src/pjmedia/smallfilter.h
+++ /dev/null
@@ -1,4617 +0,0 @@
-/* Included by resamplesubs.c */
-#define SMALL_FILTER_NMULT ((RES_HWORD)13)
-#define SMALL_FILTER_SCALE 13128 /* Unity-gain scale factor */
-#define SMALL_FILTER_NWING 1536 /* Filter table length */
-static const RES_HWORD SMALL_FILTER_IMP[] /* Impulse response */ = {
-32767,
-32766,
-32764,
-32760,
-32755,
-32749,
-32741,
-32731,
-32721,
-32708,
-32695,
-32679,
-32663,
-32645,
-32625,
-32604,
-32582,
-32558,
-32533,
-32506,
-32478,
-32448,
-32417,
-32385,
-32351,
-32316,
-32279,
-32241,
-32202,
-32161,
-32119,
-32075,
-32030,
-31984,
-31936,
-31887,
-31836,
-31784,
-31731,
-31676,
-31620,
-31563,
-31504,
-31444,
-31383,
-31320,
-31256,
-31191,
-31124,
-31056,
-30987,
-30916,
-30845,
-30771,
-30697,
-30621,
-30544,
-30466,
-30387,
-30306,
-30224,
-30141,
-30057,
-29971,
-29884,
-29796,
-29707,
-29617,
-29525,
-29433,
-29339,
-29244,
-29148,
-29050,
-28952,
-28852,
-28752,
-28650,
-28547,
-28443,
-28338,
-28232,
-28125,
-28017,
-27908,
-27797,
-27686,
-27574,
-27461,
-27346,
-27231,
-27115,
-26998,
-26879,
-26760,
-26640,
-26519,
-26398,
-26275,
-26151,
-26027,
-25901,
-25775,
-25648,
-25520,
-25391,
-25262,
-25131,
-25000,
-24868,
-24735,
-24602,
-24467,
-24332,
-24197,
-24060,
-23923,
-23785,
-23647,
-23507,
-23368,
-23227,
-23086,
-22944,
-22802,
-22659,
-22515,
-22371,
-22226,
-22081,
-21935,
-21789,
-21642,
-21494,
-21346,
-21198,
-21049,
-20900,
-20750,
-20600,
-20449,
-20298,
-20146,
-19995,
-19842,
-19690,
-19537,
-19383,
-19230,
-19076,
-18922,
-18767,
-18612,
-18457,
-18302,
-18146,
-17990,
-17834,
-17678,
-17521,
-17365,
-17208,
-17051,
-16894,
-16737,
-16579,
-16422,
-16264,
-16106,
-15949,
-15791,
-15633,
-15475,
-15317,
-15159,
-15001,
-14843,
-14685,
-14527,
-14369,
-14212,
-14054,
-13896,
-13739,
-13581,
-13424,
-13266,
-13109,
-12952,
-12795,
-12639,
-12482,
-12326,
-12170,
-12014,
-11858,
-11703,
-11548,
-11393,
-11238,
-11084,
-10929,
-10776,
-10622,
-10469,
-10316,
-10164,
-10011,
-9860,
-9708,
-9557,
-9407,
-9256,
-9106,
-8957,
-8808,
-8659,
-8511,
-8364,
-8216,
-8070,
-7924,
-7778,
-7633,
-7488,
-7344,
-7200,
-7057,
-6914,
-6773,
-6631,
-6490,
-6350,
-6210,
-6071,
-5933,
-5795,
-5658,
-5521,
-5385,
-5250,
-5115,
-4981,
-4848,
-4716,
-4584,
-4452,
-4322,
-4192,
-4063,
-3935,
-3807,
-3680,
-3554,
-3429,
-3304,
-3180,
-3057,
-2935,
-2813,
-2692,
-2572,
-2453,
-2335,
-2217,
-2101,
-1985,
-1870,
-1755,
-1642,
-1529,
-1418,
-1307,
-1197,
-1088,
-979,
-872,
-765,
-660,
-555,
-451,
-348,
-246,
-145,
-44,
--54,
--153,
--250,
--347,
--443,
--537,
--631,
--724,
--816,
--908,
--998,
--1087,
--1175,
--1263,
--1349,
--1435,
--1519,
--1603,
--1685,
--1767,
--1848,
--1928,
--2006,
--2084,
--2161,
--2237,
--2312,
--2386,
--2459,
--2531,
--2603,
--2673,
--2742,
--2810,
--2878,
--2944,
--3009,
--3074,
--3137,
--3200,
--3261,
--3322,
--3381,
--3440,
--3498,
--3554,
--3610,
--3665,
--3719,
--3772,
--3824,
--3875,
--3925,
--3974,
--4022,
--4069,
--4116,
--4161,
--4205,
--4249,
--4291,
--4333,
--4374,
--4413,
--4452,
--4490,
--4527,
--4563,
--4599,
--4633,
--4666,
--4699,
--4730,
--4761,
--4791,
--4820,
--4848,
--4875,
--4901,
--4926,
--4951,
--4974,
--4997,
--5019,
--5040,
--5060,
--5080,
--5098,
--5116,
--5133,
--5149,
--5164,
--5178,
--5192,
--5205,
--5217,
--5228,
--5238,
--5248,
--5257,
--5265,
--5272,
--5278,
--5284,
--5289,
--5293,
--5297,
--5299,
--5301,
--5303,
--5303,
--5303,
--5302,
--5300,
--5298,
--5295,
--5291,
--5287,
--5282,
--5276,
--5270,
--5263,
--5255,
--5246,
--5237,
--5228,
--5217,
--5206,
--5195,
--5183,
--5170,
--5157,
--5143,
--5128,
--5113,
--5097,
--5081,
--5064,
--5047,
--5029,
--5010,
--4991,
--4972,
--4952,
--4931,
--4910,
--4889,
--4867,
--4844,
--4821,
--4797,
--4774,
--4749,
--4724,
--4699,
--4673,
--4647,
--4620,
--4593,
--4566,
--4538,
--4510,
--4481,
--4452,
--4422,
--4393,
--4363,
--4332,
--4301,
--4270,
--4238,
--4206,
--4174,
--4142,
--4109,
--4076,
--4042,
--4009,
--3975,
--3940,
--3906,
--3871,
--3836,
--3801,
--3765,
--3729,
--3693,
--3657,
--3620,
--3584,
--3547,
--3510,
--3472,
--3435,
--3397,
--3360,
--3322,
--3283,
--3245,
--3207,
--3168,
--3129,
--3091,
--3052,
--3013,
--2973,
--2934,
--2895,
--2855,
--2816,
--2776,
--2736,
--2697,
--2657,
--2617,
--2577,
--2537,
--2497,
--2457,
--2417,
--2377,
--2337,
--2297,
--2256,
--2216,
--2176,
--2136,
--2096,
--2056,
--2016,
--1976,
--1936,
--1896,
--1856,
--1817,
--1777,
--1737,
--1698,
--1658,
--1619,
--1579,
--1540,
--1501,
--1462,
--1423,
--1384,
--1345,
--1306,
--1268,
--1230,
--1191,
--1153,
--1115,
--1077,
--1040,
--1002,
--965,
--927,
--890,
--854,
--817,
--780,
--744,
--708,
--672,
--636,
--600,
--565,
--530,
--494,
--460,
--425,
--391,
--356,
--322,
--289,
--255,
--222,
--189,
--156,
--123,
--91,
--59,
--27,
-4,
-35,
-66,
-97,
-127,
-158,
-188,
-218,
-247,
-277,
-306,
-334,
-363,
-391,
-419,
-447,
-474,
-501,
-528,
-554,
-581,
-606,
-632,
-657,
-683,
-707,
-732,
-756,
-780,
-803,
-827,
-850,
-872,
-895,
-917,
-939,
-960,
-981,
-1002,
-1023,
-1043,
-1063,
-1082,
-1102,
-1121,
-1139,
-1158,
-1176,
-1194,
-1211,
-1228,
-1245,
-1262,
-1278,
-1294,
-1309,
-1325,
-1340,
-1354,
-1369,
-1383,
-1397,
-1410,
-1423,
-1436,
-1448,
-1461,
-1473,
-1484,
-1496,
-1507,
-1517,
-1528,
-1538,
-1548,
-1557,
-1566,
-1575,
-1584,
-1592,
-1600,
-1608,
-1616,
-1623,
-1630,
-1636,
-1643,
-1649,
-1654,
-1660,
-1665,
-1670,
-1675,
-1679,
-1683,
-1687,
-1690,
-1694,
-1697,
-1700,
-1702,
-1704,
-1706,
-1708,
-1709,
-1711,
-1712,
-1712,
-1713,
-1713,
-1713,
-1713,
-1712,
-1711,
-1710,
-1709,
-1708,
-1706,
-1704,
-1702,
-1700,
-1697,
-1694,
-1691,
-1688,
-1685,
-1681,
-1677,
-1673,
-1669,
-1664,
-1660,
-1655,
-1650,
-1644,
-1639,
-1633,
-1627,
-1621,
-1615,
-1609,
-1602,
-1596,
-1589,
-1582,
-1575,
-1567,
-1560,
-1552,
-1544,
-1536,
-1528,
-1520,
-1511,
-1503,
-1494,
-1485,
-1476,
-1467,
-1458,
-1448,
-1439,
-1429,
-1419,
-1409,
-1399,
-1389,
-1379,
-1368,
-1358,
-1347,
-1337,
-1326,
-1315,
-1304,
-1293,
-1282,
-1271,
-1260,
-1248,
-1237,
-1225,
-1213,
-1202,
-1190,
-1178,
-1166,
-1154,
-1142,
-1130,
-1118,
-1106,
-1094,
-1081,
-1069,
-1057,
-1044,
-1032,
-1019,
-1007,
-994,
-981,
-969,
-956,
-943,
-931,
-918,
-905,
-892,
-879,
-867,
-854,
-841,
-828,
-815,
-802,
-790,
-777,
-764,
-751,
-738,
-725,
-713,
-700,
-687,
-674,
-662,
-649,
-636,
-623,
-611,
-598,
-585,
-573,
-560,
-548,
-535,
-523,
-510,
-498,
-486,
-473,
-461,
-449,
-437,
-425,
-413,
-401,
-389,
-377,
-365,
-353,
-341,
-330,
-318,
-307,
-295,
-284,
-272,
-261,
-250,
-239,
-228,
-217,
-206,
-195,
-184,
-173,
-163,
-152,
-141,
-131,
-121,
-110,
-100,
-90,
-80,
-70,
-60,
-51,
-41,
-31,
-22,
-12,
-3,
--5,
--14,
--23,
--32,
--41,
--50,
--59,
--67,
--76,
--84,
--93,
--101,
--109,
--117,
--125,
--133,
--140,
--148,
--156,
--163,
--170,
--178,
--185,
--192,
--199,
--206,
--212,
--219,
--226,
--232,
--239,
--245,
--251,
--257,
--263,
--269,
--275,
--280,
--286,
--291,
--297,
--302,
--307,
--312,
--317,
--322,
--327,
--332,
--336,
--341,
--345,
--349,
--354,
--358,
--362,
--366,
--369,
--373,
--377,
--380,
--384,
--387,
--390,
--394,
--397,
--400,
--402,
--405,
--408,
--411,
--413,
--416,
--418,
--420,
--422,
--424,
--426,
--428,
--430,
--432,
--433,
--435,
--436,
--438,
--439,
--440,
--442,
--443,
--444,
--445,
--445,
--446,
--447,
--447,
--448,
--448,
--449,
--449,
--449,
--449,
--449,
--449,
--449,
--449,
--449,
--449,
--449,
--448,
--448,
--447,
--447,
--446,
--445,
--444,
--443,
--443,
--442,
--441,
--440,
--438,
--437,
--436,
--435,
--433,
--432,
--430,
--429,
--427,
--426,
--424,
--422,
--420,
--419,
--417,
--415,
--413,
--411,
--409,
--407,
--405,
--403,
--400,
--398,
--396,
--393,
--391,
--389,
--386,
--384,
--381,
--379,
--376,
--374,
--371,
--368,
--366,
--363,
--360,
--357,
--355,
--352,
--349,
--346,
--343,
--340,
--337,
--334,
--331,
--328,
--325,
--322,
--319,
--316,
--313,
--310,
--307,
--304,
--301,
--298,
--294,
--291,
--288,
--285,
--282,
--278,
--275,
--272,
--269,
--265,
--262,
--259,
--256,
--252,
--249,
--246,
--243,
--239,
--236,
--233,
--230,
--226,
--223,
--220,
--217,
--213,
--210,
--207,
--204,
--200,
--197,
--194,
--191,
--187,
--184,
--181,
--178,
--175,
--172,
--168,
--165,
--162,
--159,
--156,
--153,
--150,
--147,
--143,
--140,
--137,
--134,
--131,
--128,
--125,
--122,
--120,
--117,
--114,
--111,
--108,
--105,
--102,
--99,
--97,
--94,
--91,
--88,
--86,
--83,
--80,
--78,
--75,
--72,
--70,
--67,
--65,
--62,
--59,
--57,
--55,
--52,
--50,
--47,
--45,
--43,
--40,
--38,
--36,
--33,
--31,
--29,
--27,
--25,
--22,
--20,
--18,
--16,
--14,
--12,
--10,
--8,
--6,
--4,
--2,
-0,
-0,
-2,
-4,
-6,
-8,
-9,
-11,
-13,
-14,
-16,
-17,
-19,
-21,
-22,
-24,
-25,
-27,
-28,
-29,
-31,
-32,
-33,
-35,
-36,
-37,
-38,
-40,
-41,
-42,
-43,
-44,
-45,
-46,
-47,
-48,
-49,
-50,
-51,
-52,
-53,
-54,
-55,
-56,
-56,
-57,
-58,
-59,
-59,
-60,
-61,
-62,
-62,
-63,
-63,
-64,
-64,
-65,
-66,
-66,
-66,
-67,
-67,
-68,
-68,
-69,
-69,
-69,
-70,
-70,
-70,
-70,
-71,
-71,
-71,
-71,
-71,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-71,
-71,
-71,
-71,
-71,
-70,
-70,
-70,
-70,
-69,
-69,
-69,
-69,
-68,
-68,
-68,
-67,
-67,
-67,
-66,
-66,
-66,
-65,
-65,
-64,
-64,
-64,
-63,
-63,
-62,
-62,
-62,
-61,
-61,
-60,
-60,
-59,
-59,
-58,
-58,
-58,
-57,
-57,
-56,
-56,
-55,
-55,
-54,
-54,
-53,
-53,
-52,
-52,
-51,
-51,
-50,
-50,
-49,
-48,
-48,
-47,
-47,
-46,
-46,
-45,
-45,
-44,
-44,
-43,
-43,
-42,
-42,
-41,
-41,
-40,
-39,
-39,
-38,
-38,
-37,
-37,
-36,
-36,
-35,
-35,
-34,
-34,
-33,
-33,
-32,
-32,
-31,
-31,
-30,
-30,
-29,
-29,
-28,
-28,
-27,
-27,
-26,
-26,
-25,
-25,
-24,
-24,
-23,
-23,
-23,
-22,
-22,
-21,
-21,
-20,
-20,
-20,
-19,
-19,
-18,
-18,
-17,
-17,
-17,
-16,
-16,
-15,
-15,
-15,
-14,
-14,
-14,
-13,
-13,
-12,
-12,
-12,
-11,
-11,
-11,
-10,
-10,
-10,
-9,
-9,
-9,
-9,
-8,
-8,
-8,
-7,
-7,
-7,
-7,
-6,
-6,
-6,
-6,
-5,
-5,
-5,
-5,
-4,
-4,
-4,
-4,
-3,
-3,
-3,
-3,
-3,
-2,
-2,
-2,
-2,
-2,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1
-};
-
-static const RES_HWORD SMALL_FILTER_IMPD[] = {
--1,
--2,
--4,
--5,
--6,
--8,
--10,
--10,
--13,
--13,
--16,
--16,
--18,
--20,
--21,
--22,
--24,
--25,
--27,
--28,
--30,
--31,
--32,
--34,
--35,
--37,
--38,
--39,
--41,
--42,
--44,
--45,
--46,
--48,
--49,
--51,
--52,
--53,
--55,
--56,
--57,
--59,
--60,
--61,
--63,
--64,
--65,
--67,
--68,
--69,
--71,
--71,
--74,
--74,
--76,
--77,
--78,
--79,
--81,
--82,
--83,
--84,
--86,
--87,
--88,
--89,
--90,
--92,
--92,
--94,
--95,
--96,
--98,
--98,
--100,
--100,
--102,
--103,
--104,
--105,
--106,
--107,
--108,
--109,
--111,
--111,
--112,
--113,
--115,
--115,
--116,
--117,
--119,
--119,
--120,
--121,
--121,
--123,
--124,
--124,
--126,
--126,
--127,
--128,
--129,
--129,
--131,
--131,
--132,
--133,
--133,
--135,
--135,
--135,
--137,
--137,
--138,
--138,
--140,
--139,
--141,
--141,
--142,
--142,
--143,
--144,
--144,
--145,
--145,
--146,
--146,
--147,
--148,
--148,
--148,
--149,
--149,
--150,
--150,
--151,
--151,
--152,
--151,
--153,
--152,
--153,
--154,
--153,
--154,
--154,
--155,
--155,
--155,
--155,
--156,
--156,
--156,
--156,
--157,
--156,
--157,
--157,
--157,
--157,
--158,
--157,
--158,
--158,
--157,
--158,
--158,
--158,
--158,
--158,
--158,
--158,
--158,
--158,
--158,
--157,
--158,
--158,
--157,
--158,
--157,
--158,
--157,
--157,
--157,
--156,
--157,
--156,
--156,
--156,
--156,
--155,
--155,
--155,
--155,
--154,
--155,
--153,
--154,
--153,
--153,
--152,
--153,
--151,
--152,
--151,
--150,
--151,
--150,
--149,
--149,
--149,
--148,
--147,
--148,
--146,
--146,
--146,
--145,
--145,
--144,
--144,
--143,
--143,
--141,
--142,
--141,
--140,
--140,
--139,
--138,
--138,
--137,
--137,
--136,
--135,
--135,
--134,
--133,
--132,
--132,
--132,
--130,
--130,
--129,
--128,
--128,
--127,
--126,
--125,
--125,
--124,
--123,
--122,
--122,
--121,
--120,
--119,
--118,
--118,
--116,
--116,
--115,
--115,
--113,
--113,
--111,
--111,
--110,
--109,
--109,
--107,
--107,
--105,
--105,
--104,
--103,
--102,
--101,
--101,
--98,
--99,
--97,
--97,
--96,
--94,
--94,
--93,
--92,
--92,
--90,
--89,
--88,
--88,
--86,
--86,
--84,
--84,
--82,
--82,
--81,
--80,
--78,
--78,
--77,
--76,
--75,
--74,
--73,
--72,
--72,
--70,
--69,
--68,
--68,
--66,
--65,
--65,
--63,
--63,
--61,
--61,
--59,
--59,
--58,
--56,
--56,
--55,
--54,
--53,
--52,
--51,
--50,
--49,
--48,
--47,
--47,
--45,
--44,
--44,
--42,
--42,
--41,
--39,
--39,
--38,
--37,
--36,
--36,
--34,
--33,
--33,
--31,
--31,
--30,
--29,
--28,
--27,
--26,
--25,
--25,
--23,
--23,
--22,
--21,
--20,
--20,
--18,
--18,
--17,
--16,
--15,
--14,
--14,
--13,
--12,
--11,
--10,
--10,
--9,
--8,
--7,
--6,
--6,
--5,
--4,
--4,
--2,
--2,
--2,
-0,
-0,
-1,
-2,
-2,
-3,
-4,
-4,
-5,
-6,
-6,
-7,
-8,
-9,
-9,
-9,
-11,
-11,
-11,
-12,
-13,
-13,
-14,
-15,
-15,
-16,
-16,
-17,
-17,
-18,
-19,
-19,
-19,
-20,
-21,
-21,
-21,
-22,
-23,
-23,
-24,
-23,
-25,
-25,
-25,
-26,
-26,
-27,
-27,
-27,
-28,
-28,
-29,
-29,
-30,
-29,
-30,
-31,
-31,
-31,
-32,
-32,
-32,
-32,
-33,
-33,
-34,
-33,
-34,
-35,
-34,
-35,
-35,
-35,
-36,
-36,
-36,
-36,
-37,
-36,
-37,
-37,
-38,
-37,
-38,
-37,
-38,
-39,
-38,
-38,
-39,
-39,
-38,
-39,
-39,
-40,
-39,
-39,
-40,
-39,
-40,
-40,
-39,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-41,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-39,
-40,
-40,
-39,
-40,
-39,
-40,
-39,
-39,
-39,
-39,
-39,
-39,
-39,
-38,
-38,
-39,
-38,
-38,
-38,
-37,
-38,
-37,
-38,
-37,
-36,
-37,
-37,
-36,
-36,
-36,
-36,
-36,
-35,
-35,
-36,
-34,
-35,
-34,
-35,
-34,
-33,
-34,
-33,
-33,
-33,
-33,
-32,
-32,
-32,
-31,
-31,
-31,
-31,
-30,
-31,
-30,
-30,
-29,
-30,
-29,
-28,
-29,
-28,
-28,
-28,
-27,
-27,
-27,
-26,
-27,
-25,
-26,
-25,
-26,
-24,
-25,
-24,
-24,
-23,
-24,
-23,
-22,
-23,
-22,
-22,
-21,
-21,
-21,
-21,
-20,
-20,
-19,
-20,
-19,
-18,
-19,
-18,
-18,
-17,
-17,
-17,
-17,
-16,
-16,
-15,
-16,
-15,
-14,
-15,
-14,
-14,
-13,
-13,
-13,
-12,
-13,
-12,
-11,
-12,
-11,
-10,
-11,
-10,
-10,
-9,
-9,
-9,
-9,
-8,
-8,
-8,
-8,
-7,
-7,
-6,
-7,
-6,
-5,
-6,
-5,
-5,
-5,
-4,
-4,
-4,
-3,
-4,
-3,
-3,
-2,
-2,
-2,
-2,
-1,
-2,
-1,
-0,
-1,
-0,
-0,
-0,
--1,
--1,
--1,
--1,
--1,
--2,
--2,
--2,
--2,
--3,
--3,
--3,
--3,
--3,
--4,
--4,
--4,
--4,
--5,
--4,
--5,
--5,
--6,
--5,
--6,
--6,
--6,
--6,
--6,
--7,
--6,
--7,
--7,
--7,
--8,
--7,
--8,
--8,
--8,
--8,
--8,
--9,
--8,
--9,
--9,
--9,
--9,
--9,
--10,
--9,
--10,
--10,
--10,
--10,
--10,
--10,
--11,
--10,
--11,
--10,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--12,
--11,
--12,
--12,
--11,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--13,
--12,
--12,
--13,
--12,
--13,
--12,
--13,
--13,
--12,
--13,
--13,
--12,
--13,
--13,
--13,
--13,
--12,
--13,
--13,
--13,
--13,
--13,
--12,
--13,
--13,
--13,
--13,
--13,
--12,
--13,
--13,
--13,
--12,
--13,
--13,
--13,
--12,
--13,
--13,
--12,
--13,
--12,
--13,
--12,
--13,
--12,
--12,
--13,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--11,
--12,
--11,
--12,
--11,
--12,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--10,
--11,
--11,
--10,
--10,
--11,
--10,
--10,
--10,
--10,
--10,
--9,
--10,
--10,
--9,
--10,
--9,
--8,
--9,
--9,
--9,
--9,
--9,
--9,
--8,
--9,
--8,
--9,
--8,
--8,
--8,
--8,
--8,
--7,
--8,
--8,
--7,
--7,
--8,
--7,
--7,
--7,
--7,
--6,
--7,
--7,
--6,
--7,
--6,
--6,
--6,
--6,
--6,
--6,
--5,
--6,
--5,
--6,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--4,
--5,
--4,
--4,
--5,
--4,
--4,
--4,
--3,
--4,
--4,
--3,
--4,
--3,
--3,
--4,
--3,
--3,
--2,
--3,
--3,
--3,
--2,
--3,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--1,
--2,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-2,
-1,
-1,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-2,
-2,
-1,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-3,
-2,
-2,
-3,
-2,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-3,
-2,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-2,
-3,
-3,
-2,
-3,
-3,
-2,
-3,
-2,
-3,
-3,
-2,
-2,
-3,
-2,
-3,
-2,
-2,
-3,
-2,
-2,
-3,
-2,
-2,
-2,
-2,
-3,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-0,
-2,
-2,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-1,
-2,
-2,
-1,
-2,
-1,
-2,
-1,
-1,
-2,
-1,
-1,
-2,
-1,
-1,
-1,
-2,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
--1,
--2,
--4,
--5,
--6,
--8,
--10,
--10,
--13,
--13,
--16,
--16,
--18,
--20,
--21,
--22,
--24,
--25,
--27,
--28,
--30,
--31,
--32,
--34,
--35,
--37,
--38,
--39,
--41,
--42,
--44,
--45,
--46,
--48,
--49,
--51,
--52,
--53,
--55,
--56,
--57,
--59,
--60,
--61,
--63,
--64,
--65,
--67,
--68,
--69,
--71,
--71,
--74,
--74,
--76,
--77,
--78,
--79,
--81,
--82,
--83,
--84,
--86,
--87,
--88,
--89,
--90,
--92,
--92,
--94,
--95,
--96,
--98,
--98,
--100,
--100,
--102,
--103,
--104,
--105,
--106,
--107,
--108,
--109,
--111,
--111,
--112,
--113,
--115,
--115,
--116,
--117,
--119,
--119,
--120,
--121,
--121,
--123,
--124,
--124,
--126,
--126,
--127,
--128,
--129,
--129,
--131,
--131,
--132,
--133,
--133,
--135,
--135,
--135,
--137,
--137,
--138,
--138,
--140,
--139,
--141,
--141,
--142,
--142,
--143,
--144,
--144,
--145,
--145,
--146,
--146,
--147,
--148,
--148,
--148,
--149,
--149,
--150,
--150,
--151,
--151,
--152,
--151,
--153,
--152,
--153,
--154,
--153,
--154,
--154,
--155,
--155,
--155,
--155,
--156,
--156,
--156,
--156,
--157,
--156,
--157,
--157,
--157,
--157,
--158,
--157,
--158,
--158,
--157,
--158,
--158,
--158,
--158,
--158,
--158,
--158,
--158,
--158,
--158,
--157,
--158,
--158,
--157,
--158,
--157,
--158,
--157,
--157,
--157,
--156,
--157,
--156,
--156,
--156,
--156,
--155,
--155,
--155,
--155,
--154,
--155,
--153,
--154,
--153,
--153,
--152,
--153,
--151,
--152,
--151,
--150,
--151,
--150,
--149,
--149,
--149,
--148,
--147,
--148,
--146,
--146,
--146,
--145,
--145,
--144,
--144,
--143,
--143,
--141,
--142,
--141,
--140,
--140,
--139,
--138,
--138,
--137,
--137,
--136,
--135,
--135,
--134,
--133,
--132,
--132,
--132,
--130,
--130,
--129,
--128,
--128,
--127,
--126,
--125,
--125,
--124,
--123,
--122,
--122,
--121,
--120,
--119,
--118,
--118,
--116,
--116,
--115,
--115,
--113,
--113,
--111,
--111,
--110,
--109,
--109,
--107,
--107,
--105,
--105,
--104,
--103,
--102,
--101,
--101,
--98,
--99,
--97,
--97,
--96,
--94,
--94,
--93,
--92,
--92,
--90,
--89,
--88,
--88,
--86,
--86,
--84,
--84,
--82,
--82,
--81,
--80,
--78,
--78,
--77,
--76,
--75,
--74,
--73,
--72,
--72,
--70,
--69,
--68,
--68,
--66,
--65,
--65,
--63,
--63,
--61,
--61,
--59,
--59,
--58,
--56,
--56,
--55,
--54,
--53,
--52,
--51,
--50,
--49,
--48,
--47,
--47,
--45,
--44,
--44,
--42,
--42,
--41,
--39,
--39,
--38,
--37,
--36,
--36,
--34,
--33,
--33,
--31,
--31,
--30,
--29,
--28,
--27,
--26,
--25,
--25,
--23,
--23,
--22,
--21,
--20,
--20,
--18,
--18,
--17,
--16,
--15,
--14,
--14,
--13,
--12,
--11,
--10,
--10,
--9,
--8,
--7,
--6,
--6,
--5,
--4,
--4,
--2,
--2,
--2,
-0,
-0,
-1,
-2,
-2,
-3,
-4,
-4,
-5,
-6,
-6,
-7,
-8,
-9,
-9,
-9,
-11,
-11,
-11,
-12,
-13,
-13,
-14,
-15,
-15,
-16,
-16,
-17,
-17,
-18,
-19,
-19,
-19,
-20,
-21,
-21,
-21,
-22,
-23,
-23,
-24,
-23,
-25,
-25,
-25,
-26,
-26,
-27,
-27,
-27,
-28,
-28,
-29,
-29,
-30,
-29,
-30,
-31,
-31,
-31,
-32,
-32,
-32,
-32,
-33,
-33,
-34,
-33,
-34,
-35,
-34,
-35,
-35,
-35,
-36,
-36,
-36,
-36,
-37,
-36,
-37,
-37,
-38,
-37,
-38,
-37,
-38,
-39,
-38,
-38,
-39,
-39,
-38,
-39,
-39,
-40,
-39,
-39,
-40,
-39,
-40,
-40,
-39,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-41,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-39,
-40,
-40,
-39,
-40,
-39,
-40,
-39,
-39,
-39,
-39,
-39,
-39,
-39,
-38,
-38,
-39,
-38,
-38,
-38,
-37,
-38,
-37,
-38,
-37,
-36,
-37,
-37,
-36,
-36,
-36,
-36,
-36,
-35,
-35,
-36,
-34,
-35,
-34,
-35,
-34,
-33,
-34,
-33,
-33,
-33,
-33,
-32,
-32,
-32,
-31,
-31,
-31,
-31,
-30,
-31,
-30,
-30,
-29,
-30,
-29,
-28,
-29,
-28,
-28,
-28,
-27,
-27,
-27,
-26,
-27,
-25,
-26,
-25,
-26,
-24,
-25,
-24,
-24,
-23,
-24,
-23,
-22,
-23,
-22,
-22,
-21,
-21,
-21,
-21,
-20,
-20,
-19,
-20,
-19,
-18,
-19,
-18,
-18,
-17,
-17,
-17,
-17,
-16,
-16,
-15,
-16,
-15,
-14,
-15,
-14,
-14,
-13,
-13,
-13,
-12,
-13,
-12,
-11,
-12,
-11,
-10,
-11,
-10,
-10,
-9,
-9,
-9,
-9,
-8,
-8,
-8,
-8,
-7,
-7,
-6,
-7,
-6,
-5,
-6,
-5,
-5,
-5,
-4,
-4,
-4,
-3,
-4,
-3,
-3,
-2,
-2,
-2,
-2,
-1,
-2,
-1,
-0,
-1,
-0,
-0,
-0,
--1,
--1,
--1,
--1,
--1,
--2,
--2,
--2,
--2,
--3,
--3,
--3,
--3,
--3,
--4,
--4,
--4,
--4,
--5,
--4,
--5,
--5,
--6,
--5,
--6,
--6,
--6,
--6,
--6,
--7,
--6,
--7,
--7,
--7,
--8,
--7,
--8,
--8,
--8,
--8,
--8,
--9,
--8,
--9,
--9,
--9,
--9,
--9,
--10,
--9,
--10,
--10,
--10,
--10,
--10,
--10,
--11,
--10,
--11,
--10,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--12,
--11,
--12,
--12,
--11,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--13,
--12,
--12,
--13,
--12,
--13,
--12,
--13,
--13,
--12,
--13,
--13,
--12,
--13,
--13,
--13,
--13,
--12,
--13,
--13,
--13,
--13,
--13,
--12,
--13,
--13,
--13,
--13,
--13,
--12,
--13,
--13,
--13,
--12,
--13,
--13,
--13,
--12,
--13,
--13,
--12,
--13,
--12,
--13,
--12,
--13,
--12,
--12,
--13,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--11,
--12,
--11,
--12,
--11,
--12,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--10,
--11,
--11,
--10,
--10,
--11,
--10,
--10,
--10,
--10,
--10,
--9,
--10,
--10,
--9,
--10,
--9,
--8,
--9,
--9,
--9,
--9,
--9,
--9,
--8,
--9,
--8,
--9,
--8,
--8,
--8,
--8,
--8,
--7,
--8,
--8,
--7,
--7,
--8,
--7,
--7,
--7,
--7,
--6,
--7,
--7,
--6,
--7,
--6,
--6,
--6,
--6,
--6,
--6,
--5,
--6,
--5,
--6,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--4,
--5,
--4,
--4,
--5,
--4,
--4,
--4,
--3,
--4,
--4,
--3,
--4,
--3,
--3,
--4,
--3,
--3,
--2,
--3,
--3,
--3,
--2,
--3,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--1,
--2,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-2,
-1,
-1,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-2,
-2,
-1,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-3,
-2,
-2,
-3,
-2,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-3,
-2,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-2,
-3,
-3,
-2,
-3,
-3,
-2,
-3,
-2,
-3,
-3,
-2,
-2,
-3,
-2,
-3,
-2,
-2,
-3,
-2,
-2,
-3,
-2,
-2,
-2,
-2,
-3,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-0,
-2,
-2,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-1,
-2,
-2,
-1,
-2,
-1,
-2,
-1,
-1,
-2,
-1,
-1,
-2,
-1,
-1,
-1,
-2,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1
-};