bson_ext 1.5.0 → 1.5.1
Sign up to get free protection for your applications and to get access to all the features.
- data/ext/cbson/version.h +1 -1
- data/ext/cmongo/c-driver/src/bson.c +699 -0
- data/ext/cmongo/c-driver/src/bson.h +229 -0
- data/ext/cmongo/c-driver/src/gridfs.c +799 -0
- data/ext/cmongo/c-driver/src/gridfs.h +278 -0
- data/ext/cmongo/c-driver/src/md5.c +381 -0
- data/ext/cmongo/c-driver/src/md5.h +91 -0
- data/ext/cmongo/c-driver/src/mongo.c +1020 -0
- data/ext/cmongo/c-driver/src/mongo.h +260 -0
- data/ext/cmongo/c-driver/src/mongo_except.h +143 -0
- data/ext/cmongo/c-driver/src/numbers.c +127 -0
- data/ext/cmongo/c-driver/src/platform_hacks.h +93 -0
- data/ext/cmongo/c-driver/test/all_types.c +223 -0
- data/ext/cmongo/c-driver/test/auth.c +28 -0
- data/ext/cmongo/c-driver/test/benchmark.c +434 -0
- data/ext/cmongo/c-driver/test/count_delete.c +64 -0
- data/ext/cmongo/c-driver/test/endian_swap.c +31 -0
- data/ext/cmongo/c-driver/test/errors.c +71 -0
- data/ext/cmongo/c-driver/test/examples.c +75 -0
- data/ext/cmongo/c-driver/test/gridfs.c +217 -0
- data/ext/cmongo/c-driver/test/json.c +169 -0
- data/ext/cmongo/c-driver/test/pair.c +41 -0
- data/ext/cmongo/c-driver/test/replica_set.c +81 -0
- data/ext/cmongo/c-driver/test/resize.c +35 -0
- data/ext/cmongo/c-driver/test/simple.c +110 -0
- data/ext/cmongo/c-driver/test/sizes.c +22 -0
- data/ext/cmongo/c-driver/test/test.h +19 -0
- data/ext/cmongo/c-driver/test/update.c +107 -0
- metadata +66 -21
@@ -0,0 +1,260 @@
|
|
1
|
+
/* mongo.h */
|
2
|
+
|
3
|
+
/* Copyright 2009, 2010 10gen Inc.
|
4
|
+
*
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
* you may not use this file except in compliance with the License.
|
7
|
+
* You may obtain a copy of the License at
|
8
|
+
*
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
*
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
* See the License for the specific language governing permissions and
|
15
|
+
* limitations under the License.
|
16
|
+
*/
|
17
|
+
|
18
|
+
#ifndef _MONGO_H_
|
19
|
+
#define _MONGO_H_
|
20
|
+
|
21
|
+
#include "mongo_except.h"
|
22
|
+
#include "bson.h"
|
23
|
+
|
24
|
+
#ifdef _WIN32
|
25
|
+
#include <windows.h>
|
26
|
+
#include <winsock.h>
|
27
|
+
#define mongo_close_socket(sock) ( closesocket(sock) )
|
28
|
+
typedef int socklen_t;
|
29
|
+
#else
|
30
|
+
#include <arpa/inet.h>
|
31
|
+
#include <sys/types.h>
|
32
|
+
#include <sys/socket.h>
|
33
|
+
#include <netdb.h>
|
34
|
+
#include <netinet/in.h>
|
35
|
+
#include <netinet/tcp.h>
|
36
|
+
#define mongo_close_socket(sock) ( close(sock) )
|
37
|
+
#endif
|
38
|
+
|
39
|
+
#if defined(_XOPEN_SOURCE) || defined(_POSIX_SOURCE) || _POSIX_C_SOURCE >= 1
|
40
|
+
#define _MONGO_USE_GETADDRINFO
|
41
|
+
#endif
|
42
|
+
|
43
|
+
MONGO_EXTERN_C_START
|
44
|
+
|
45
|
+
typedef struct mongo_host_port {
|
46
|
+
char host[255];
|
47
|
+
int port;
|
48
|
+
struct mongo_host_port* next;
|
49
|
+
} mongo_host_port;
|
50
|
+
|
51
|
+
typedef struct {
|
52
|
+
mongo_host_port* seeds; /*< The list of seed nodes provided by the user. */
|
53
|
+
mongo_host_port* hosts; /*< The list of host and ports reported by the replica set */
|
54
|
+
char* name; /*< The name of the replica set. */
|
55
|
+
bson_bool_t primary_connected; /*< Whether we've managed to connect to a primary node. */
|
56
|
+
} mongo_replset;
|
57
|
+
|
58
|
+
typedef struct {
|
59
|
+
mongo_host_port* primary;
|
60
|
+
mongo_replset* replset;
|
61
|
+
int sock;
|
62
|
+
bson_bool_t connected;
|
63
|
+
mongo_exception_context exception;
|
64
|
+
} mongo_connection;
|
65
|
+
|
66
|
+
#pragma pack(1)
|
67
|
+
typedef struct {
|
68
|
+
int len;
|
69
|
+
int id;
|
70
|
+
int responseTo;
|
71
|
+
int op;
|
72
|
+
} mongo_header;
|
73
|
+
|
74
|
+
typedef struct {
|
75
|
+
mongo_header head;
|
76
|
+
char data;
|
77
|
+
} mongo_message;
|
78
|
+
|
79
|
+
typedef struct {
|
80
|
+
int flag; /* non-zero on failure */
|
81
|
+
int64_t cursorID;
|
82
|
+
int start;
|
83
|
+
int num;
|
84
|
+
} mongo_reply_fields;
|
85
|
+
|
86
|
+
typedef struct {
|
87
|
+
mongo_header head;
|
88
|
+
mongo_reply_fields fields;
|
89
|
+
char objs;
|
90
|
+
} mongo_reply;
|
91
|
+
#pragma pack()
|
92
|
+
|
93
|
+
typedef struct {
|
94
|
+
mongo_reply * mm; /* message is owned by cursor */
|
95
|
+
mongo_connection * conn; /* connection is *not* owned by cursor */
|
96
|
+
const char* ns; /* owned by cursor */
|
97
|
+
bson current;
|
98
|
+
} mongo_cursor;
|
99
|
+
|
100
|
+
enum mongo_operations {
|
101
|
+
mongo_op_msg = 1000, /* generic msg command followed by a string */
|
102
|
+
mongo_op_update = 2001, /* update object */
|
103
|
+
mongo_op_insert = 2002,
|
104
|
+
mongo_op_query = 2004,
|
105
|
+
mongo_op_get_more = 2005,
|
106
|
+
mongo_op_delete = 2006,
|
107
|
+
mongo_op_kill_cursors = 2007
|
108
|
+
};
|
109
|
+
|
110
|
+
|
111
|
+
/*
|
112
|
+
* CONNECTIONS
|
113
|
+
*/
|
114
|
+
typedef enum {
|
115
|
+
mongo_conn_success = 0,
|
116
|
+
mongo_conn_bad_arg,
|
117
|
+
mongo_conn_no_socket,
|
118
|
+
mongo_conn_fail,
|
119
|
+
mongo_conn_not_master, /* leaves conn connected to slave */
|
120
|
+
mongo_conn_bad_set_name, /* The provided replica set name doesn't match the existing replica set */
|
121
|
+
mongo_conn_cannot_find_primary
|
122
|
+
} mongo_conn_return;
|
123
|
+
|
124
|
+
/*
|
125
|
+
* Connect to a single MongoDB server.
|
126
|
+
*
|
127
|
+
* @param conn a mongo_connection object.
|
128
|
+
* @param host a numerical network address or a network hostname.
|
129
|
+
* @param port the port to connect to.
|
130
|
+
*
|
131
|
+
* @return mongo_conn_return
|
132
|
+
*/
|
133
|
+
mongo_conn_return mongo_connect( mongo_connection * conn , const char* host, int port );
|
134
|
+
|
135
|
+
/*
|
136
|
+
* Initialize a connection object for connecting with a replica set.
|
137
|
+
*
|
138
|
+
* @param conn a mongo_connection object.
|
139
|
+
* @param name the name of the replica set to connect to.
|
140
|
+
* */
|
141
|
+
void mongo_replset_init_conn( mongo_connection* conn, const char* name );
|
142
|
+
|
143
|
+
/*
|
144
|
+
* Add a seed node to the connection object.
|
145
|
+
*
|
146
|
+
* You must specify at least one seed node before connecting to a replica set.
|
147
|
+
*
|
148
|
+
* @param conn a mongo_connection object.
|
149
|
+
* @param host a numerical network address or a network hostname.
|
150
|
+
* @param port the port to connect to.
|
151
|
+
*/
|
152
|
+
int mongo_replset_add_seed( mongo_connection* conn, const char* host, int port );
|
153
|
+
|
154
|
+
/*
|
155
|
+
* Connect to a replica set.
|
156
|
+
*
|
157
|
+
* Before passing a connection object to this method, you must already have called
|
158
|
+
* mongo_replset_init_conn and mongo_replset_add_seed.
|
159
|
+
*
|
160
|
+
* @param conn a mongo_connection object.
|
161
|
+
*
|
162
|
+
* @return mongo_conn_return
|
163
|
+
*/
|
164
|
+
mongo_conn_return mongo_replset_connect( mongo_connection* conn );
|
165
|
+
|
166
|
+
/*
|
167
|
+
* Try reconnecting to the server using the existing connection settings.
|
168
|
+
*
|
169
|
+
* This method will disconnect the current socket. If you've authentication,
|
170
|
+
* you'll need to re-authenticate after calling this function.
|
171
|
+
*
|
172
|
+
* @param conn
|
173
|
+
*
|
174
|
+
* @return mongo_conn_return
|
175
|
+
*/
|
176
|
+
mongo_conn_return mongo_reconnect( mongo_connection * conn );
|
177
|
+
|
178
|
+
/*
|
179
|
+
* Close the current connection to the server.
|
180
|
+
*/
|
181
|
+
bson_bool_t mongo_disconnect( mongo_connection * conn );
|
182
|
+
|
183
|
+
/*
|
184
|
+
* Close any existing connection to the server and free all allocated
|
185
|
+
* memory associated with the conn object.
|
186
|
+
*
|
187
|
+
* You must always call this method when finished with the connection object.
|
188
|
+
*
|
189
|
+
* @param conn
|
190
|
+
*
|
191
|
+
* @return bson_bool_t
|
192
|
+
*/
|
193
|
+
bson_bool_t mongo_destroy( mongo_connection * conn );
|
194
|
+
|
195
|
+
/* ----------------------------
|
196
|
+
CORE METHODS - insert update remove query getmore
|
197
|
+
------------------------------ */
|
198
|
+
|
199
|
+
void mongo_insert( mongo_connection * conn , const char * ns , bson * data );
|
200
|
+
void mongo_insert_batch( mongo_connection * conn , const char * ns , bson ** data , int num );
|
201
|
+
|
202
|
+
static const int MONGO_UPDATE_UPSERT = 0x1;
|
203
|
+
static const int MONGO_UPDATE_MULTI = 0x2;
|
204
|
+
void mongo_update(mongo_connection* conn, const char* ns, const bson* cond, const bson* op, int flags);
|
205
|
+
|
206
|
+
void mongo_remove(mongo_connection* conn, const char* ns, const bson* cond);
|
207
|
+
|
208
|
+
mongo_cursor* mongo_find(mongo_connection* conn, const char* ns, bson* query, bson* fields ,int nToReturn ,int nToSkip, int options);
|
209
|
+
bson_bool_t mongo_cursor_next(mongo_cursor* cursor);
|
210
|
+
void mongo_cursor_destroy(mongo_cursor* cursor);
|
211
|
+
|
212
|
+
/* out can be NULL if you don't care about results. useful for commands */
|
213
|
+
bson_bool_t mongo_find_one(mongo_connection* conn, const char* ns, bson* query, bson* fields, bson* out);
|
214
|
+
|
215
|
+
int64_t mongo_count(mongo_connection* conn, const char* db, const char* coll, bson* query);
|
216
|
+
|
217
|
+
/* ----------------------------
|
218
|
+
HIGHER LEVEL - indexes - command helpers eval
|
219
|
+
------------------------------ */
|
220
|
+
|
221
|
+
/* Returns true on success */
|
222
|
+
/* WARNING: Unlike other drivers these do not cache results */
|
223
|
+
|
224
|
+
static const int MONGO_INDEX_UNIQUE = 0x1;
|
225
|
+
static const int MONGO_INDEX_DROP_DUPS = 0x2;
|
226
|
+
bson_bool_t mongo_create_index(mongo_connection * conn, const char * ns, bson * key, int options, bson * out);
|
227
|
+
bson_bool_t mongo_create_simple_index(mongo_connection * conn, const char * ns, const char* field, int options, bson * out);
|
228
|
+
|
229
|
+
/* ----------------------------
|
230
|
+
COMMANDS
|
231
|
+
------------------------------ */
|
232
|
+
|
233
|
+
bson_bool_t mongo_run_command(mongo_connection * conn, const char * db, bson * command, bson * out);
|
234
|
+
|
235
|
+
/* for simple commands with a single k-v pair */
|
236
|
+
bson_bool_t mongo_simple_int_command(mongo_connection * conn, const char * db, const char* cmd, int arg, bson * out);
|
237
|
+
bson_bool_t mongo_simple_str_command(mongo_connection * conn, const char * db, const char* cmd, const char* arg, bson * out);
|
238
|
+
|
239
|
+
bson_bool_t mongo_cmd_drop_db(mongo_connection * conn, const char * db);
|
240
|
+
bson_bool_t mongo_cmd_drop_collection(mongo_connection * conn, const char * db, const char * collection, bson * out);
|
241
|
+
|
242
|
+
void mongo_cmd_add_user(mongo_connection* conn, const char* db, const char* user, const char* pass);
|
243
|
+
bson_bool_t mongo_cmd_authenticate(mongo_connection* conn, const char* db, const char* user, const char* pass);
|
244
|
+
|
245
|
+
/* return value is master status */
|
246
|
+
bson_bool_t mongo_cmd_ismaster(mongo_connection * conn, bson * out);
|
247
|
+
|
248
|
+
/* true return indicates error */
|
249
|
+
bson_bool_t mongo_cmd_get_last_error(mongo_connection * conn, const char * db, bson * out);
|
250
|
+
bson_bool_t mongo_cmd_get_prev_error(mongo_connection * conn, const char * db, bson * out);
|
251
|
+
void mongo_cmd_reset_error(mongo_connection * conn, const char * db);
|
252
|
+
|
253
|
+
/* ----------------------------
|
254
|
+
UTILS
|
255
|
+
------------------------------ */
|
256
|
+
|
257
|
+
MONGO_EXTERN_C_END
|
258
|
+
|
259
|
+
|
260
|
+
#endif
|
@@ -0,0 +1,143 @@
|
|
1
|
+
/* mongo_except.h */
|
2
|
+
|
3
|
+
/* Copyright 2009 10gen Inc.
|
4
|
+
*
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
* you may not use this file except in compliance with the License.
|
7
|
+
* You may obtain a copy of the License at
|
8
|
+
*
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
*
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
* See the License for the specific language governing permissions and
|
15
|
+
* limitations under the License.
|
16
|
+
*/
|
17
|
+
|
18
|
+
/* This file is based loosely on cexcept (http://www.nicemice.net/cexcept/). I
|
19
|
+
* have modified it to work better with mongo's API.
|
20
|
+
*
|
21
|
+
* The MONGO_TRY, MONGO_CATCH, and MONGO_TROW macros assume that a pointer to
|
22
|
+
* the current connection is available as 'conn'. If you would like to use a
|
23
|
+
* different name, use the _GENERIC version of these macros.
|
24
|
+
*
|
25
|
+
* WARNING: do not return or otherwise jump (excluding MONGO_TRHOW()) out of a
|
26
|
+
* MONGO_TRY block as the nessesary clean-up code will not be called. Jumping
|
27
|
+
* out of the MONGO_CATCH block is OK.
|
28
|
+
*/
|
29
|
+
|
30
|
+
#ifdef MONGO_CODE_EXAMPLE
|
31
|
+
mongo_connection conn[1]; /* makes conn a ptr to the connection */
|
32
|
+
|
33
|
+
MONGO_TRY{
|
34
|
+
mongo_find_one(...);
|
35
|
+
MONGO_THROW(conn, MONGO_EXCEPT_NETWORK);
|
36
|
+
}MONGO_CATCH{
|
37
|
+
switch(conn->exception->type){
|
38
|
+
case MONGO_EXCEPT_NETWORK:
|
39
|
+
do_something();
|
40
|
+
case MONGO_EXCEPT_FIND_ERR:
|
41
|
+
do_something();
|
42
|
+
default:
|
43
|
+
MONGO_RETHROW();
|
44
|
+
}
|
45
|
+
}
|
46
|
+
#endif
|
47
|
+
|
48
|
+
/* ORIGINAL CEXEPT COPYRIGHT:
|
49
|
+
cexcept: README 2.0.1 (2008-Jul-23-Wed)
|
50
|
+
http://www.nicemice.net/cexcept/
|
51
|
+
Adam M. Costello
|
52
|
+
http://www.nicemice.net/amc/
|
53
|
+
|
54
|
+
The package is both free-as-in-speech and free-as-in-beer:
|
55
|
+
|
56
|
+
Copyright (c) 2000-2008 Adam M. Costello and Cosmin Truta.
|
57
|
+
This package may be modified only if its author and version
|
58
|
+
information is updated accurately, and may be redistributed
|
59
|
+
only if accompanied by this unaltered notice. Subject to those
|
60
|
+
restrictions, permission is granted to anyone to do anything with
|
61
|
+
this package. The copyright holders make no guarantees regarding
|
62
|
+
this package, and are not responsible for any damage resulting from
|
63
|
+
its use.
|
64
|
+
*/
|
65
|
+
|
66
|
+
#ifndef _MONGO_EXCEPT_H_
|
67
|
+
#define _MONGO_EXCEPT_H_
|
68
|
+
|
69
|
+
#include <setjmp.h>
|
70
|
+
|
71
|
+
/* always non-zero */
|
72
|
+
typedef enum{
|
73
|
+
MONGO_EXCEPT_NETWORK=1,
|
74
|
+
MONGO_EXCEPT_FIND_ERR
|
75
|
+
}mongo_exception_type;
|
76
|
+
|
77
|
+
|
78
|
+
typedef struct {
|
79
|
+
jmp_buf base_handler;
|
80
|
+
jmp_buf *penv;
|
81
|
+
int caught;
|
82
|
+
volatile mongo_exception_type type;
|
83
|
+
}mongo_exception_context;
|
84
|
+
|
85
|
+
#define MONGO_TRY MONGO_TRY_GENERIC(conn)
|
86
|
+
#define MONGO_CATCH MONGO_CATCH_GENERIC(conn)
|
87
|
+
#define MONGO_THROW(e) MONGO_THROW_GENERIC(conn, e)
|
88
|
+
#define MONGO_RETHROW() MONGO_RETHROW_GENERIC(conn)
|
89
|
+
|
90
|
+
/* the rest of this file is implementation details */
|
91
|
+
|
92
|
+
/* this is done in mongo_connect */
|
93
|
+
#define MONGO_INIT_EXCEPTION(exception_ptr) \
|
94
|
+
do{ \
|
95
|
+
mongo_exception_type t; /* exception_ptr won't be available */\
|
96
|
+
(exception_ptr)->penv = &(exception_ptr)->base_handler; \
|
97
|
+
if ((t = setjmp((exception_ptr)->base_handler))) { /* yes, '=' is correct */ \
|
98
|
+
switch(t){ \
|
99
|
+
case MONGO_EXCEPT_NETWORK: bson_fatal_msg(0, "network error"); \
|
100
|
+
case MONGO_EXCEPT_FIND_ERR: bson_fatal_msg(0, "error in find"); \
|
101
|
+
default: bson_fatal_msg(0, "unknown exception"); \
|
102
|
+
} \
|
103
|
+
} \
|
104
|
+
}while(0)
|
105
|
+
|
106
|
+
#define MONGO_TRY_GENERIC(connection) \
|
107
|
+
{ \
|
108
|
+
jmp_buf *exception__prev, exception__env; \
|
109
|
+
exception__prev = (connection)->exception.penv; \
|
110
|
+
(connection)->exception.penv = &exception__env; \
|
111
|
+
if (setjmp(exception__env) == 0) { \
|
112
|
+
do
|
113
|
+
|
114
|
+
#define MONGO_CATCH_GENERIC(connection) \
|
115
|
+
while ((connection)->exception.caught = 0, \
|
116
|
+
(connection)->exception.caught); \
|
117
|
+
} \
|
118
|
+
else { \
|
119
|
+
(connection)->exception.caught = 1; \
|
120
|
+
} \
|
121
|
+
(connection)->exception.penv = exception__prev; \
|
122
|
+
} \
|
123
|
+
if (!(connection)->exception.caught ) { } \
|
124
|
+
else
|
125
|
+
|
126
|
+
/* Try ends with do, and Catch begins with while(0) and ends with */
|
127
|
+
/* else, to ensure that Try/Catch syntax is similar to if/else */
|
128
|
+
/* syntax. */
|
129
|
+
/* */
|
130
|
+
/* The 0 in while(0) is expressed as x=0,x in order to appease */
|
131
|
+
/* compilers that warn about constant expressions inside while(). */
|
132
|
+
/* Most compilers should still recognize that the condition is always */
|
133
|
+
/* false and avoid generating code for it. */
|
134
|
+
|
135
|
+
#define MONGO_THROW_GENERIC(connection, type_in) \
|
136
|
+
for (;; longjmp(*(connection)->exception.penv, type_in)) \
|
137
|
+
(connection)->exception.type = type_in
|
138
|
+
|
139
|
+
#define MONGO_RETHROW_GENERIC(connection) \
|
140
|
+
MONGO_THROW_GENERIC(connection, (connection)->exception.type)
|
141
|
+
|
142
|
+
|
143
|
+
#endif
|
@@ -0,0 +1,127 @@
|
|
1
|
+
/* Copyright 2009 10gen Inc.
|
2
|
+
*
|
3
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
* you may not use this file except in compliance with the License.
|
5
|
+
* You may obtain a copy of the License at
|
6
|
+
*
|
7
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
*
|
9
|
+
* Unless required by applicable law or agreed to in writing, software
|
10
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
* See the License for the specific language governing permissions and
|
13
|
+
* limitations under the License.
|
14
|
+
*/
|
15
|
+
|
16
|
+
/* all the numbers that fit in a 4 byte string */
|
17
|
+
const char bson_numstrs[1000][4] = {
|
18
|
+
"0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
|
19
|
+
"10", "11", "12", "13", "14", "15", "16", "17", "18", "19",
|
20
|
+
"20", "21", "22", "23", "24", "25", "26", "27", "28", "29",
|
21
|
+
"30", "31", "32", "33", "34", "35", "36", "37", "38", "39",
|
22
|
+
"40", "41", "42", "43", "44", "45", "46", "47", "48", "49",
|
23
|
+
"50", "51", "52", "53", "54", "55", "56", "57", "58", "59",
|
24
|
+
"60", "61", "62", "63", "64", "65", "66", "67", "68", "69",
|
25
|
+
"70", "71", "72", "73", "74", "75", "76", "77", "78", "79",
|
26
|
+
"80", "81", "82", "83", "84", "85", "86", "87", "88", "89",
|
27
|
+
"90", "91", "92", "93", "94", "95", "96", "97", "98", "99",
|
28
|
+
|
29
|
+
"100", "101", "102", "103", "104", "105", "106", "107", "108", "109",
|
30
|
+
"110", "111", "112", "113", "114", "115", "116", "117", "118", "119",
|
31
|
+
"120", "121", "122", "123", "124", "125", "126", "127", "128", "129",
|
32
|
+
"130", "131", "132", "133", "134", "135", "136", "137", "138", "139",
|
33
|
+
"140", "141", "142", "143", "144", "145", "146", "147", "148", "149",
|
34
|
+
"150", "151", "152", "153", "154", "155", "156", "157", "158", "159",
|
35
|
+
"160", "161", "162", "163", "164", "165", "166", "167", "168", "169",
|
36
|
+
"170", "171", "172", "173", "174", "175", "176", "177", "178", "179",
|
37
|
+
"180", "181", "182", "183", "184", "185", "186", "187", "188", "189",
|
38
|
+
"190", "191", "192", "193", "194", "195", "196", "197", "198", "199",
|
39
|
+
|
40
|
+
"200", "201", "202", "203", "204", "205", "206", "207", "208", "209",
|
41
|
+
"210", "211", "212", "213", "214", "215", "216", "217", "218", "219",
|
42
|
+
"220", "221", "222", "223", "224", "225", "226", "227", "228", "229",
|
43
|
+
"230", "231", "232", "233", "234", "235", "236", "237", "238", "239",
|
44
|
+
"240", "241", "242", "243", "244", "245", "246", "247", "248", "249",
|
45
|
+
"250", "251", "252", "253", "254", "255", "256", "257", "258", "259",
|
46
|
+
"260", "261", "262", "263", "264", "265", "266", "267", "268", "269",
|
47
|
+
"270", "271", "272", "273", "274", "275", "276", "277", "278", "279",
|
48
|
+
"280", "281", "282", "283", "284", "285", "286", "287", "288", "289",
|
49
|
+
"290", "291", "292", "293", "294", "295", "296", "297", "298", "299",
|
50
|
+
|
51
|
+
"300", "301", "302", "303", "304", "305", "306", "307", "308", "309",
|
52
|
+
"310", "311", "312", "313", "314", "315", "316", "317", "318", "319",
|
53
|
+
"320", "321", "322", "323", "324", "325", "326", "327", "328", "329",
|
54
|
+
"330", "331", "332", "333", "334", "335", "336", "337", "338", "339",
|
55
|
+
"340", "341", "342", "343", "344", "345", "346", "347", "348", "349",
|
56
|
+
"350", "351", "352", "353", "354", "355", "356", "357", "358", "359",
|
57
|
+
"360", "361", "362", "363", "364", "365", "366", "367", "368", "369",
|
58
|
+
"370", "371", "372", "373", "374", "375", "376", "377", "378", "379",
|
59
|
+
"380", "381", "382", "383", "384", "385", "386", "387", "388", "389",
|
60
|
+
"390", "391", "392", "393", "394", "395", "396", "397", "398", "399",
|
61
|
+
|
62
|
+
"400", "401", "402", "403", "404", "405", "406", "407", "408", "409",
|
63
|
+
"410", "411", "412", "413", "414", "415", "416", "417", "418", "419",
|
64
|
+
"420", "421", "422", "423", "424", "425", "426", "427", "428", "429",
|
65
|
+
"430", "431", "432", "433", "434", "435", "436", "437", "438", "439",
|
66
|
+
"440", "441", "442", "443", "444", "445", "446", "447", "448", "449",
|
67
|
+
"450", "451", "452", "453", "454", "455", "456", "457", "458", "459",
|
68
|
+
"460", "461", "462", "463", "464", "465", "466", "467", "468", "469",
|
69
|
+
"470", "471", "472", "473", "474", "475", "476", "477", "478", "479",
|
70
|
+
"480", "481", "482", "483", "484", "485", "486", "487", "488", "489",
|
71
|
+
"490", "491", "492", "493", "494", "495", "496", "497", "498", "499",
|
72
|
+
|
73
|
+
"500", "501", "502", "503", "504", "505", "506", "507", "508", "509",
|
74
|
+
"510", "511", "512", "513", "514", "515", "516", "517", "518", "519",
|
75
|
+
"520", "521", "522", "523", "524", "525", "526", "527", "528", "529",
|
76
|
+
"530", "531", "532", "533", "534", "535", "536", "537", "538", "539",
|
77
|
+
"540", "541", "542", "543", "544", "545", "546", "547", "548", "549",
|
78
|
+
"550", "551", "552", "553", "554", "555", "556", "557", "558", "559",
|
79
|
+
"560", "561", "562", "563", "564", "565", "566", "567", "568", "569",
|
80
|
+
"570", "571", "572", "573", "574", "575", "576", "577", "578", "579",
|
81
|
+
"580", "581", "582", "583", "584", "585", "586", "587", "588", "589",
|
82
|
+
"590", "591", "592", "593", "594", "595", "596", "597", "598", "599",
|
83
|
+
|
84
|
+
"600", "601", "602", "603", "604", "605", "606", "607", "608", "609",
|
85
|
+
"610", "611", "612", "613", "614", "615", "616", "617", "618", "619",
|
86
|
+
"620", "621", "622", "623", "624", "625", "626", "627", "628", "629",
|
87
|
+
"630", "631", "632", "633", "634", "635", "636", "637", "638", "639",
|
88
|
+
"640", "641", "642", "643", "644", "645", "646", "647", "648", "649",
|
89
|
+
"650", "651", "652", "653", "654", "655", "656", "657", "658", "659",
|
90
|
+
"660", "661", "662", "663", "664", "665", "666", "667", "668", "669",
|
91
|
+
"670", "671", "672", "673", "674", "675", "676", "677", "678", "679",
|
92
|
+
"680", "681", "682", "683", "684", "685", "686", "687", "688", "689",
|
93
|
+
"690", "691", "692", "693", "694", "695", "696", "697", "698", "699",
|
94
|
+
|
95
|
+
"700", "701", "702", "703", "704", "705", "706", "707", "708", "709",
|
96
|
+
"710", "711", "712", "713", "714", "715", "716", "717", "718", "719",
|
97
|
+
"720", "721", "722", "723", "724", "725", "726", "727", "728", "729",
|
98
|
+
"730", "731", "732", "733", "734", "735", "736", "737", "738", "739",
|
99
|
+
"740", "741", "742", "743", "744", "745", "746", "747", "748", "749",
|
100
|
+
"750", "751", "752", "753", "754", "755", "756", "757", "758", "759",
|
101
|
+
"760", "761", "762", "763", "764", "765", "766", "767", "768", "769",
|
102
|
+
"770", "771", "772", "773", "774", "775", "776", "777", "778", "779",
|
103
|
+
"780", "781", "782", "783", "784", "785", "786", "787", "788", "789",
|
104
|
+
"790", "791", "792", "793", "794", "795", "796", "797", "798", "799",
|
105
|
+
|
106
|
+
"800", "801", "802", "803", "804", "805", "806", "807", "808", "809",
|
107
|
+
"810", "811", "812", "813", "814", "815", "816", "817", "818", "819",
|
108
|
+
"820", "821", "822", "823", "824", "825", "826", "827", "828", "829",
|
109
|
+
"830", "831", "832", "833", "834", "835", "836", "837", "838", "839",
|
110
|
+
"840", "841", "842", "843", "844", "845", "846", "847", "848", "849",
|
111
|
+
"850", "851", "852", "853", "854", "855", "856", "857", "858", "859",
|
112
|
+
"860", "861", "862", "863", "864", "865", "866", "867", "868", "869",
|
113
|
+
"870", "871", "872", "873", "874", "875", "876", "877", "878", "879",
|
114
|
+
"880", "881", "882", "883", "884", "885", "886", "887", "888", "889",
|
115
|
+
"890", "891", "892", "893", "894", "895", "896", "897", "898", "899",
|
116
|
+
|
117
|
+
"900", "901", "902", "903", "904", "905", "906", "907", "908", "909",
|
118
|
+
"910", "911", "912", "913", "914", "915", "916", "917", "918", "919",
|
119
|
+
"920", "921", "922", "923", "924", "925", "926", "927", "928", "929",
|
120
|
+
"930", "931", "932", "933", "934", "935", "936", "937", "938", "939",
|
121
|
+
"940", "941", "942", "943", "944", "945", "946", "947", "948", "949",
|
122
|
+
"950", "951", "952", "953", "954", "955", "956", "957", "958", "959",
|
123
|
+
"960", "961", "962", "963", "964", "965", "966", "967", "968", "969",
|
124
|
+
"970", "971", "972", "973", "974", "975", "976", "977", "978", "979",
|
125
|
+
"980", "981", "982", "983", "984", "985", "986", "987", "988", "989",
|
126
|
+
"990", "991", "992", "993", "994", "995", "996", "997", "998", "999",
|
127
|
+
};
|