graphcut-0.3/ 0000755 0001750 0000144 00000000000 10656013115 012215 5 ustar kramm users graphcut-0.3/graphcut.c 0000644 0001750 0000144 00000050411 10656011401 014173 0 ustar kramm users /*
graphcut- a graphcut implementation working on grid graphs based
on the Boykov Kolmogorov algorithm
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 3 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, see .
*/
#include
#include
#include
#include
#include
#include "graphcut.h"
#include "image.h"
//#define DEBUG
//#define CHECKS
#ifdef DEBUG
#define DBG
#else
#define DBG if(0)
#endif
#define ACTIVE 0x10
#define IN_TREE 0x20
#define RIGHT_FLAG 1
#define UP_FLAG 2
#define LEFT_FLAG 4
#define DOWN_FLAG 8
#define TWOTREES
/* [REVERSE-DIR(2)] [IN_TREE] [ACTIVE] [UP][DOWN][LEFT][RIGHT] */
static int inv[4] = {2, 3, 0, 1};
static int bit[4] = {1, 2, 4, 8};
static int xadd[4] = {1,0,-1,0};
static int yadd[4] = {0,-1,0,1};
static char*dirname[] = {"right","up","left","down","stay"};
typedef struct _posqueue_entry {
int pos;
struct _posqueue_entry*next;
} posqueue_entry_t;
typedef struct _posqueue {
posqueue_entry_t*list;
} posqueue_t;
typedef struct _graphcut_workspace {
unsigned char*flags1;
unsigned char*flags2;
map_t*map;
int width;
int height;
int size;
int add[4];
int pos1;
int pos2;
posqueue_t*queue1;
posqueue_t*queue2;
posqueue_t*tmpqueue;
} graphcut_workspace_t;
static posqueue_t*posqueue_new()
{
posqueue_t*m = (posqueue_t*)malloc(sizeof(posqueue_t));
memset(m, 0, sizeof(posqueue_t));
return m;
}
static void posqueue_delete(posqueue_t*q)
{
free(q);
}
static inline void posqueue_addpos(posqueue_t*queue, int pos)
{
posqueue_entry_t*old = queue->list;
queue->list = malloc(sizeof(posqueue_entry_t));
queue->list->pos = pos;
queue->list->next = old;
}
static inline int posqueue_extract(posqueue_t*queue)
{
posqueue_entry_t*item = queue->list;
int pos;
if(!item)
return -1;
pos = item->pos;
queue->list = queue->list->next;
free(item);
return pos;
}
static inline int posqueue_notempty(posqueue_t*queue)
{
return (int)queue->list;
}
static void posqueue_print(posqueue_t*queue)
{
posqueue_entry_t*e = queue->list;
while(e) {
printf("%d ", e->pos);
e = e->next;
}
printf("\n");
}
static void posqueue_purge(posqueue_t*queue)
{
posqueue_entry_t*e = queue->list;
while(e) {
posqueue_entry_t*next = e->next;
e->next = 0;free(e);
e = next;
}
queue->list = 0;
}
map_t* map_new(int width, int height)
{
map_t*map = malloc(sizeof(map_t));
map->width = width;
map->height = height;
map->weight[0] = malloc(sizeof(map->weight[0][0])*width*height);
map->weight[1] = malloc(sizeof(map->weight[1][0])*width*height);
map->weight[2] = malloc(sizeof(map->weight[2][0])*width*height);
map->weight[3] = malloc(sizeof(map->weight[3][0])*width*height);
memset(map->weight[0], 0, sizeof(map->weight[0][0])*width*height);
memset(map->weight[1], 0, sizeof(map->weight[1][0])*width*height);
memset(map->weight[2], 0, sizeof(map->weight[2][0])*width*height);
memset(map->weight[3], 0, sizeof(map->weight[3][0])*width*height);
return map;
}
void map_delete(map_t*map)
{
free(map->weight[0]);map->weight[0] = 0;
free(map->weight[1]);map->weight[1] = 0;
free(map->weight[2]);map->weight[2] = 0;
free(map->weight[3]);map->weight[3] = 0;
free(map);
}
static void make_map_borders(map_t*map)
{
int x,y;
for(x=0;xwidth;x++) {
map->weight[DOWN][(map->height-1)*map->width+x] = 0;
map->weight[UP][0*map->width+x] = 0;
}
for(y=0;ywidth;y++) {
map->weight[RIGHT][map->width-1+y*map->width] = 0;
map->weight[LEFT][y*map->width] = 0;
}
}
void inverse_map(map_t*map)
{
int t,size=map->width*map->height;
int d=0;
weight_t max = 0;
weight_t min = MAX_WEIGHT;
for(d=0;d<4;d++) {
for(t=0;tweight[d][t] < min)
min = map->weight[d][t];
if(map->weight[d][t] > max)
max = map->weight[d][t];
}
}
for(d=0;d<4;d++) {
for(t=0;tweight[d][t];
//v = max-(v-min);
//v = 15 * ((v-min))/(max-min) + 1;
v = ((max-min) - (v-min));// + 1;
v = (U32)((double)v*(double)v*(double)v / 280);
map->weight[d][t] = v;
}
}
make_map_borders(map);
}
int coldiff(RGBA a, RGBA b)
{
int dr = a.r - b.r;
int dg = a.g - b.g;
int db = a.b - b.b;
return (int)(1+sqrt(dr*dr + dg*dg + db*db));
}
map_t* map_from_image(image_t*img)
{
map_t*map = map_new(img->width, img->height);
int x,y;
for(y=0;yheight;y++) {
RGBA*prev = y?&img->data[(y-1)*img->width]:&img->data[y*img->width];
RGBA*line = &img->data[y*img->width];
RGBA*next= (yheight-1)?&img->data[(y+1)*img->width]:&img->data[y*img->width];
int prevx = 0;
int nextx = 1;
int pos = y*map->width;
for(x=0;xwidth;x++) {
map->weight[RIGHT][pos] = (weight_t)coldiff(line[x],line[nextx]); //right
map->weight[UP ][pos] = (weight_t)coldiff(prev[x],line[x]); //up
map->weight[LEFT ][pos] = (weight_t)coldiff(line[x],line[prevx]); //left
map->weight[DOWN ][pos] = (weight_t)coldiff(next[x],line[x]); //down
pos++;
prevx = x;
if(xwidth-2) {
nextx++;
}
}
}
inverse_map(map);
return map;
}
void map_save(map_t*map, char*filename)
{
FILE*fi = fopen(filename, "wb");
fprintf(fi, "width: %d\n", map->width);
fprintf(fi, "height: %d\n", map->width);
fprintf(fi, "[left]\n");
int x,y;
for(y=0;yheight;y++) {
for(x=0;xwidth;x++) {
fprintf(fi, "%d ", map->weight[LEFT][y*map->width+x]);
}
fprintf(fi, "\n");
}
fprintf(fi, "[up]\n");
for(y=0;yheight;y++) {
for(x=0;xwidth;x++) {
fprintf(fi, "%d ", map->weight[UP][y*map->width+x]);
}
fprintf(fi, "\n");
}
fprintf(fi, "[right]\n");
for(y=0;yheight;y++) {
for(x=0;xwidth;x++) {
fprintf(fi, "%d ", map->weight[RIGHT][y*map->width+x]);
}
fprintf(fi, "\n");
}
fprintf(fi, "[down]\n");
for(y=0;yheight;y++) {
for(x=0;xwidth;x++) {
fprintf(fi, "%d ", map->weight[DOWN][y*map->width+x]);
}
fprintf(fi, "\n");
}
fclose(fi);
}
static graphcut_workspace_t*graphcut_workspace_new(map_t*map, int width, int height, int pos1, int pos2)
{
graphcut_workspace_t*workspace = malloc(sizeof(graphcut_workspace_t));
workspace->width = width;
workspace->height = height;
workspace->flags1 = malloc(width*height);
memset(workspace->flags1, 0, width*height);
workspace->flags2 = malloc(width*height);
memset(workspace->flags2, 0, width*height);
workspace->size = width*height;
workspace->add[0] = 1;
workspace->add[1] = -width;
workspace->add[2] = -1;
workspace->add[3] = width;
workspace->pos1 = pos1;
workspace->pos2 = pos2;
workspace->map = map;
workspace->queue1 = posqueue_new();
workspace->queue2 = posqueue_new();
workspace->tmpqueue = posqueue_new();
return workspace;
}
static void graphcut_workspace_delete(graphcut_workspace_t*w)
{
posqueue_delete(w->queue1);w->queue1=0;
posqueue_delete(w->queue2);w->queue2=0;
if(w->flags1) free(w->flags1);w->flags1=0;
if(w->flags2) free(w->flags2);w->flags2=0;
free(w);
}
typedef struct _path {
int*pos;
unsigned char*dir;
unsigned char*firsthalf;
int length;
} path_t;
static path_t*path_new(int len)
{
path_t*p = malloc(sizeof(path_t));
p->pos = malloc(sizeof(int)*len);
p->dir = malloc(sizeof(unsigned char)*len);
p->firsthalf = malloc(sizeof(unsigned char)*len);
p->length = len;
return p;
}
static void path_delete(path_t*path)
{
free(path->pos);path->pos = 0;
free(path->dir);path->dir = 0;
free(path->firsthalf);path->firsthalf = 0;
free(path);
}
static path_t*extract_path(graphcut_workspace_t*work, unsigned char*mytree, unsigned char*othertree, int pos, int newpos, int dir)
{
int t;
int p = pos;
int len1 = 0;
/* walk up tree1 */
while(p != work->pos1) {
p += work->add[mytree[p]>>6];
len1++;
}
p = newpos;
int len2 = 0;
/* walk up tree2 */
while(p != work->pos2) {
p += work->add[othertree[p]>>6];
len2++;
}
path_t*path = path_new(len1+len2+2);
t = len1;
path->pos[t] = p = pos;
path->dir[t] = dir;
path->firsthalf[t] = 1;
while(p != work->pos1) {
assert(mytree[p]&IN_TREE);
char dir = mytree[p]>>6;
p += work->add[dir];
t--;
path->pos[t] = p;
path->dir[t] = inv[dir];
path->firsthalf[t] = 1;
}
assert(!t);
t = len1+1;
p = newpos;
while(p != work->pos2) {
assert(othertree[p]&IN_TREE);
path->pos[t] = p;
path->dir[t] = othertree[p]>>6;
path->firsthalf[t] = 0;
p += work->add[othertree[p]>>6];
t++;
}
/* terminator */
path->pos[t] = p;
path->dir[t] = 4; // last node
path->firsthalf[t] = 0;
assert(t == len1+len2+1);
return path;
}
static void map_print(graphcut_workspace_t*w)
{
int y;
map_t*map = w->map;
for(y=0;yheight;y++) {
int c=0;
for(c=0;c<4;c++) {
int x;
for(x=0;xwidth;x++) {
int p = y*w->width+x;
unsigned char f = w->flags1[p]|w->flags2[p];
char cc1='-', cc2='.', cc3='.', cc4='.',cc5='.', cc6='-';
char mark=' ';
if(f) {
if(f&LEFT_FLAG) cc1='<';
if(f&RIGHT_FLAG) cc6='>';
if(f&UP_FLAG) cc2='^';
if(f&DOWN_FLAG) cc5='v';
char*cc = " atA";
char*dd = "ruld";
cc3=cc[((f>>4)&3)];
if(w->flags2[p]) {
mark = '*';
}
if(w->flags1[p] && w->flags2[p]) {
cc3 = '?';
mark = '?';
}
cc4=dd[f>>6];
}
if(c==0) printf(" %c %2d%c ", mark, map->weight[UP][p], cc2);
if(c==1) printf(" %2d%c%c%c%c%-2d", map->weight[LEFT][p], cc1, cc3, cc4, cc6, map->weight[RIGHT][p]);
if(c==2) printf(" %c%-2d ", cc5, map->weight[DOWN][p]);
if(c==3) printf(" ");
}
printf(" |\n");
}
}
}
static void path_print(path_t*path, int width)
{
int t;
for(t=0;tlength;t++) {
int p = path->pos[t];
printf("%d/%d(%d)", p%width, p/width, path->firsthalf[t]);
if(tlength-1)
printf(" -%s-> ", dirname[path->dir[t]]);
}
printf("\n");
}
static void workspace_print(graphcut_workspace_t*w)
{
printf("queue1: ");posqueue_print(w->queue1);
printf("queue2: ");posqueue_print(w->queue2);
map_print(w);
}
static void myassert(graphcut_workspace_t*w, char assertion, const char*file, int line, const char*func)
{
if(!assertion) {
printf("Assertion %s:%d (%s) failed:\n", file, line, func);
workspace_print(w);
exit(0);
}
}
#define ASSERT(w,c) {myassert(w,c,__FILE__,__LINE__,__func__);}
static path_t* expand_pos(graphcut_workspace_t*w, posqueue_t*queue, int pos, char reverse, unsigned char*mytree, unsigned char*othertree)
{
map_t*map = w->map;
int dir;
if(!(mytree[pos]&IN_TREE) || !(mytree[pos]&ACTIVE)) {
/* this node got deleted or marked inactive in the meantime. ignore it */
return 0;
}
for(dir=0;dir<4;dir++) {
int newpos = pos + w->add[dir];
if(newpos<0 || newpos>=w->size || mytree[newpos])
continue;
int weight=0;
if(!reverse) {
weight = map->weight[dir][pos];
} else {
weight = map->weight[inv[dir]][newpos];
}
if(weight) {
if(othertree[newpos]) {
posqueue_addpos(queue, pos); mytree[pos] |= ACTIVE; // re-add, this vertice might have other connections
path_t*path;
if(reverse) {
path = extract_path(w, othertree, mytree, newpos, pos, inv[dir]);
} else {
path = extract_path(w, mytree, othertree, pos, newpos, dir);
}
return path;
} else {
DBG printf("advance into direction %d to new pos %d\n", dir, newpos);
mytree[pos] |= bit[dir];
mytree[newpos] = (inv[dir]<<6)|ACTIVE|IN_TREE;
posqueue_addpos(queue, newpos);
#if 0
posqueue_addpos(queue, pos); mytree[pos] |= ACTIVE; // re-add, this vertice might have other connections
return 0;
#endif
}
}
}
/* if we couldn't expand this node anymore, it's now an inactive node */
mytree[pos] &= ~ACTIVE;
return 0;
}
static weight_t decrease_weights(map_t*map, path_t*path)
{
int t;
int min = 0;
#ifdef CHECKS
for(t=0;tlength-1;t++) {
assert(path->pos[t]width*map->height);
int x1 = path->pos[t] % map->width;
int y1 = path->pos[t] / map->width;
int x2 = path->pos[t+1] % map->width;
int y2 = path->pos[t+1] / map->width;
assert(path->dir[t]<4);
assert(xadd[path->dir[t]] == x2-x1);
assert(yadd[path->dir[t]] == y2-y1);
}
assert(path->dir[path->length-1] == 4);
#endif
for(t=0;tlength-1;t++) {
int w = map->weight[path->dir[t]][path->pos[t]];
if(t == 0 || w < min)
min = w;
}
if(min<=0)
return;
for(t=0;tlength-1;t++) {
map->weight[path->dir[t]][path->pos[t]] -= min;
map->weight[inv[path->dir[t]]][path->pos[t+1]] += min;
}
return min;
}
static void bool_op(graphcut_workspace_t*w, unsigned char*flags, int pos, unsigned char and, unsigned char or)
{
posqueue_t*q = w->tmpqueue;
posqueue_purge(q);
posqueue_addpos(q, pos);
while(posqueue_notempty(q)) {
int p = posqueue_extract(q);
flags[p] = (flags[p]&and)|or;
int dir;
for(dir=0;dir<4;dir++) {
if(flags[p] & bit[dir]) {
posqueue_addpos(q, p+w->add[dir]);
}
}
}
}
static int reconnect(graphcut_workspace_t*w, unsigned char*flags, int pos, char reverse)
{
map_t*map = w->map;
int d;
for(d=0;d<4;d++) {
int add = w->add[d];
int newpos = pos+add;
if(newpos<0 || newpos>=w->size)
continue;
int weight;
if(!reverse) {
weight = map->weight[inv[d]][newpos];
} else {
weight = map->weight[d][pos];
}
if(weight && (flags[pos+add]&IN_TREE)) {
DBG printf("successfully reconnected node %d/%d to %d/%d\n", pos%w->width, pos/w->width, (pos+add)%w->width, (pos+add)/w->width);
flags[pos] = (flags[pos]&0x3f) | d<<6; // reverse
flags[pos + add] |= bit[inv[d]]; // forward
return 1;
}
}
return 0;
}
//#define SIMPLE
static void destroy_subtree(graphcut_workspace_t*w, unsigned char*flags, int pos, posqueue_t*posqueue, int startpos)
{
DBG printf("destroying subtree starting with %d/%d\n", pos%w->width, pos/w->width);
#ifdef SIMPLE
posqueue_purge(q);
posqueue_addpos(q, startpos);
memset(flags, 0, w->width*w->height);
return;
#else
posqueue_t*q = w->tmpqueue;
posqueue_purge(q);
posqueue_addpos(q, pos);
while(posqueue_notempty(q)) {
int p = posqueue_extract(q);
int dir;
for(dir=0;dir<4;dir++) {
int newpos = p+w->add[dir];
if(newpos<0 || newpos>w->size)
continue;
if(flags[p] & bit[dir]) {
posqueue_addpos(q, newpos);
} else if((flags[newpos]&(ACTIVE|IN_TREE)) == IN_TREE) {
// TODO: we should check the weight of that edge right now, right here.
// if it's zero, we don't need to do anything.
posqueue_addpos(posqueue, newpos);
flags[newpos]|=ACTIVE;
}
}
DBG printf("removed pos %d/%d\n", p%w->width, p/w->width);
flags[p] = 0;
}
#endif
}
static void combust_tree(graphcut_workspace_t*w, posqueue_t*q1, posqueue_t*q2, path_t*path)
{
map_t*map = w->map;
int t;
for(t=0;tlength-1 && path->firsthalf[t+1];t++) {
int pos = path->pos[t];
int dir = path->dir[t];
int newpos = pos+w->add[dir];
if(!map->weight[dir][pos]) {
/* disconnect node */
DBG printf("remove link %d/%d->%d/%d from tree 1\n", pos%w->width,pos/w->width, newpos%w->width,newpos/w->width);
w->flags1[pos] &= ~(bit[dir]);
w->flags1[newpos] &= 0x0f|ACTIVE;
bool_op(w, w->flags1, newpos, ~IN_TREE, 0);
/* try to reconnect the path to some other tree part */
if(reconnect(w, w->flags1, newpos, 0)) {
bool_op(w, w->flags1, newpos, ~0, IN_TREE);
} else {
destroy_subtree(w, w->flags1, newpos, q1, w->pos1);
break;
}
}
}
for(t=path->length-1;t>0 && !path->firsthalf[t-1];t--) {
int pos = path->pos[t];
int newpos = path->pos[t-1];
int dir = inv[path->dir[t-1]];
int newpos2 = pos+w->add[dir];
assert(newpos == newpos2);
if(!map->weight[inv[dir]][newpos]) {
/* disconnect node */
DBG printf("remove link %d/%d->%d/%d from tree 2\n", pos%w->width,pos/w->width, newpos%w->width,newpos/w->width);
w->flags2[pos] &= ~(bit[dir]);
w->flags2[newpos] &= 0x0f|ACTIVE;
bool_op(w, w->flags2, newpos, ~IN_TREE, 0);
/* try to reconnect the path to some other tree part */
if(reconnect(w, w->flags2, newpos, 1)) {
bool_op(w, w->flags2, newpos, ~0, IN_TREE);
} else {
destroy_subtree(w, w->flags2, newpos, q2, w->pos2);
break;
}
}
}
}
static void check_map(map_t*map)
{
int x,y,d;
int val = 0;
for(x=0;xwidth;x++) {
if(map->weight[DOWN][(map->height-1)*map->width+x])
val |= DOWN_FLAG;
if(map->weight[UP][0*map->width+x])
val |= UP_FLAG;
}
for(y=0;yheight;y++) {
if(map->weight[RIGHT][map->width-1+y*map->width])
val |= RIGHT_FLAG;
if(map->weight[LEFT][y*map->width])
val |= LEFT_FLAG;
}
if(val) {
fprintf(stderr, "Warning: The map hasn't proper edges (positive weights extend beyond the bitmap, %02x)\n", val);
fprintf(stderr, "I'm fixing this now, but you should be more careful.\n");
}
val = 0;
for(x=0;xwidth;x++)
for(y=0;yheight;y++)
for(d=0;d<4;d++) {
if(map->weight[d]<=0)
val = 1;
}
if(val) {
fprintf(stderr, "Warning: The map has non-positive values\n");
}
make_map_borders(map);
}
unsigned char* find_cut(map_t*map, int x1, int y1, int x2, int y2)
{
int pos1 = y1*map->width+x1;
int pos2 = y2*map->width+x2;
int max_flow = 0;
assert(pos1 != pos2);
graphcut_workspace_t* w = graphcut_workspace_new(map, map->width, map->height, pos1, pos2);
posqueue_addpos(w->queue1, pos1); w->flags1[pos1] |= ACTIVE|IN_TREE;
posqueue_addpos(w->queue2, pos2); w->flags2[pos2] |= ACTIVE|IN_TREE;
check_map(map);
while(1) {
path_t*path;
while(1) {
char done1=0,done2=0;
int p1 = posqueue_extract(w->queue1);
DBG printf("extend 1 from %d/%d\n", p1%w->width, p1/w->width);
if(p1<0) {
int t;
/* convert flags1 to map */
unsigned char*result = w->flags1;
for(t=0;tsize;t++) {
if(w->flags1[t]&IN_TREE) result[t] = 1;
else result[t] = 0;
}
w->flags1 = 0;
graphcut_workspace_delete(w);
printf("max flow: %d\n", max_flow);
return result;
}
path = expand_pos(w, w->queue1, p1, 0, w->flags1, w->flags2);
DBG workspace_print(w);
if(path)
break;
#ifdef TWOTREES
int p2 = posqueue_extract(w->queue2);
DBG printf("extend 2 from %d/%d\n", p2%w->width, p2/w->width);
if(p2<0) {
int t;
/* convert flags2 to map */
unsigned char*result = w->flags2;
for(t=0;tsize;t++) {
if(w->flags2[t]&IN_TREE) result[t] = 0;
else result[t] = 1;
}
w->flags2 = 0;
graphcut_workspace_delete(w);
printf("max flow: %d\n", max_flow);
return result;
}
path = expand_pos(w, w->queue2, p2, 1, w->flags2, w->flags1);
DBG workspace_print(w);
if(path)
break;
#endif
}
DBG printf("found connection between tree1 and tree2\n");
DBG path_print(path, w->width);
DBG printf("decreasing weights\n");
max_flow += decrease_weights(map, path);
DBG workspace_print(w);
DBG printf("destroying trees\n");
combust_tree(w, w->queue1, w->queue2, path);
DBG workspace_print(w);
path_delete(path);
}
}
graphcut-0.3/test.c 0000644 0001750 0000144 00000007752 10656012610 013352 0 ustar kramm users /*
graphcut- a graphcut implementation working on grid graphs based
on the Boykov Kolmogorov algorithm
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 3 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, see .
*/
#include
#include
#include
#include
#include
#include
#include "graphcut.h"
#include "image.h"
#define DBG if(0)
static int test_small()
{
/* this graph is the same as in the file "smallgraph.{svg,pdf,map}" */
weight_t weight[4][16] =
{{7,1,1,0, //right
2,4,1,0,
3,3,3,0,
4,1,4,0},
{0,0,0,0, //up
4,2,3,2,
1,4,7,5,
1,2,5,4},
{0,3,1,3, //left
0,4,4,3,
0,3,1,3,
0,1,3,2},
{3,5,1,1, //down
1,1,4,1,
1,3,2,4,
0,0,0,0},
};
map_t map;
map.width = 4;
map.height = 4;
map.weight[RIGHT] = weight[0];
map.weight[UP] = weight[1];
map.weight[LEFT] = weight[2];
map.weight[DOWN] = weight[3];
map_save(&map, "smallgraph.map");
unsigned char*cut = find_cut(&map, 0, 0, 3, 3);
/* print out the minimal cut */
int x,y;
for(y=0;ywidth-1;
int y1 = (img->height*1/2);
int y2 = (img->height*1/2);
map_t*map = map_from_image(img);
/* maximize all weights on the left and right column */
int x,y;
for(y=1;yheight-1;y++) {
map->weight[DOWN][y*map->width+0] = MAX_WEIGHT;
map->weight[UP ][y*map->width+0] = MAX_WEIGHT;
map->weight[DOWN][y*map->width+map->width-1] = MAX_WEIGHT;
map->weight[UP ][y*map->width+map->width-1] = MAX_WEIGHT;
}
unsigned char*cut1 = find_cut(map, x1, y1, x2, y2);
map_delete(map);
/* generate an image where the minimal cut is marked */
int t;
for(t=0;twidth*img->height;t++) {
if(!cut1[t]) {
img->data[t].r = 0;
}
img->data[t].a = 255;
}
image_save(img, "test.png");
image_delete(img);
}
int main()
{
test_small();
//test_big();
//test_image();
}
graphcut-0.3/Makefile 0000644 0001750 0000144 00000000435 10656010442 013657 0 ustar kramm users all: test graphcut.o
graphcut.o: graphcut.c graphcut.h image.h
gcc -O2 -c graphcut.c -o graphcut.o
image.o: image.c image.h
gcc -O2 -c image.c -o image.o
test: test.c image.o graphcut.o graphcut.h image.h
gcc -O2 test.c graphcut.o image.o -lm -lz -o test
clean:
rm -f *.o test
graphcut-0.3/LICENSE 0000644 0001750 0000144 00000104513 10642030763 013231 0 ustar kramm users GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc.
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
Copyright (C)
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 3 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, see .
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
Copyright (C)
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
.
graphcut-0.3/graphcut.h 0000644 0001750 0000144 00000002413 10656011405 014203 0 ustar kramm users /*
graphcut- a graphcut implementation working on grid graphs based
on the Boykov Kolmogorov algorithm
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 3 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, see .
*/
#ifndef __graphcut_h__
#define __graphcut_h__
#include "image.h"
typedef signed int weight_t;
#define MAX_WEIGHT 0x07ffffff
#define RIGHT 0
#define UP 1
#define LEFT 2
#define DOWN 3
typedef struct _map {
weight_t*(weight[4]);
int width;
int height;
} map_t;
map_t* map_new(int width, int height);
void inverse_map(map_t*map);
void map_delete(map_t*);
void map_save(map_t*map, char*filename);
map_t* map_from_image(image_t*img);
unsigned char* find_cut(map_t*map, int x1, int y1, int x2, int y2);
#endif
graphcut-0.3/mkgfx.py 0000644 0001750 0000144 00000013737 10656011674 013726 0 ustar kramm users #!/usr/bin/python
fo = open("smallgraph.svg", "wb");
fo.write("""
""")
graphcut-0.3/smallgraph.pdf 0000644 0001750 0000144 00000207023 10656012763 015056 0 ustar kramm users %PDF-1.4
%
3 0 obj
<<
/Type /Catalog
/Pages 2 0 R
>>
endobj
4 0 obj
<<
/Type /Page
/Parent 2 0 R
/MediaBox [ 0 0 595.27557373 841.88977051 ]
/Resources 5 0 R
/Contents 6 0 R
/Group
<< /Type /Group
/S /Transparency
/CS /DeviceRGB
>>
>>
endobj
6 0 obj
<<
/Length 7 0 R
>>
stream
0.8 0 0 -0.8 0 842 cm
q
1 0 0 1 0 0 cm
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
60 50 m
60 55.52 55.52 60 50 60 c
44.48 60 40 55.52 40 50 c
40 44.48 44.48 40 50 40 c
55.52 40 60 44.48 60 50 c
h
S
Q
q
0 0 0 rg
52.85742188 44.38476562 m
52.85742188 46.08398438 l
52.34960103 45.82357688 51.8222578 45.62826458 51.27539062 45.49804688 c
50.7285089 45.36784817 50.16210321 45.30274407 49.57617188 45.30273438 c
48.68424011 45.30274407 48.01366786 45.43946269 47.56445312 45.71289062 c
47.12174167 45.98633714 46.90038772 46.39649298 46.90039062 46.94335938 c
46.90038772 47.36003368 47.05989277 47.68880939 47.37890625 47.9296875 c
47.69791297 48.16406934 48.33918837 48.38867849 49.30273438 48.60351562 c
49.91796875 48.74023438 l
51.19400322 49.01367786 52.09895023 49.40104727 52.6328125 49.90234375 c
53.17316791 50.39714002 53.44334993 51.0904987 53.44335938 51.98242188 c
53.44334993 52.99804888 53.0397045 53.80208453 52.23242188 54.39453125 c
51.43163319 54.98697918 50.32811867 55.28320284 48.921875 55.28320312 c
48.33593316 55.28320284 47.72395461 55.22460915 47.0859375 55.10742188 c
46.45442463 54.99674479 45.78710759 54.82747413 45.08398438 54.59960938 c
45.08398438 52.74414062 l
45.74804513 53.08919462 46.40234135 53.34961103 47.046875 53.52539062 c
47.69140256 53.69466276 48.32942275 53.7792981 48.9609375 53.77929688 c
49.80728586 53.7792981 50.45832687 53.63606907 50.9140625 53.34960938 c
51.3697843 53.05664257 51.59764865 52.64648673 51.59765625 52.11914062 c
51.59764865 51.63086274 51.43163319 51.25651416 51.09960938 50.99609375 c
50.77408177 50.73568135 50.05468145 50.48503056 48.94140625 50.24414062 c
48.31640625 50.09765625 l
47.2031218 49.86328639 46.39908614 49.50521383 45.90429688 49.0234375 c
45.4095038 48.53516271 45.16210821 47.86784567 45.16210938 47.02148438 c
45.16210821 45.99284755 45.52669118 45.19857751 46.25585938 44.63867188 c
46.98502306 44.07878696 48.02017827 43.79883933 49.36132812 43.79882812 c
50.0253846 43.79883933 50.65038397 43.8476674 51.23632812 43.9453125 c
51.8222578 44.04297971 52.36262185 44.18946394 52.85742188 44.38476562 c
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
50 60 m
50 60 102 155 50 250 c
S
Q
q
0.57617458 -1.05262664 1.05262664 0.57617458 57.20218229 236.84216696 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
88.17285156 143.20800781 m
89.5888536 143.51075368 90.69236812 144.14063586 91.48339844 145.09765625 c
92.2841634 146.05469645 92.68455363 147.23633589 92.68457031 148.64257812 c
92.68455363 150.80078545 91.94236687 152.47070565 90.45800781 153.65234375 c
88.97361984 154.83398454 86.86424695 155.42480426 84.12988281 155.42480469 c
83.21190685 155.42480426 82.26464217 155.33203092 81.28808594 155.14648438 c
80.32128474 154.97070315 79.32030918 154.70214874 78.28515625 154.34082031 c
78.28515625 151.484375 l
79.10546564 151.96289366 80.00390225 152.32422143 80.98046875 152.56835938 c
81.95702529 152.81250219 82.97753208 152.93457238 84.04199219 152.93457031 c
85.89745104 152.93457238 87.30858244 152.56836181 88.27539062 151.8359375 c
89.25193987 151.10351952 89.74022063 150.03906746 89.74023438 148.64257812 c
89.74022063 147.35352327 89.28611953 146.3476649 88.37792969 145.625 c
87.47948071 144.89258823 86.22459915 144.52637766 84.61328125 144.52636719 c
82.06445312 144.52636719 l
82.06445312 142.09472656 l
84.73046875 142.09472656 l
86.18553669 142.09473947 87.29881683 141.80665382 88.0703125 141.23046875 c
88.84178403 140.64454561 89.22752583 139.8047027 89.22753906 138.7109375 c
89.22752583 137.58790804 88.82713561 136.7285339 88.02636719 136.1328125 c
87.23534033 135.52736322 86.09764615 135.22462915 84.61328125 135.22460938 c
83.80272657 135.22462915 82.93358682 135.31251969 82.00585938 135.48828125 c
81.07811992 135.66408184 80.05761313 135.93751906 78.94433594 136.30859375 c
78.94433594 133.671875 l
80.06737875 133.35939664 81.11718238 133.12502187 82.09375 132.96875 c
83.08007104 132.81252219 84.00780449 132.73439727 84.87695312 132.734375 c
87.12303575 132.73439727 88.90037772 133.24709207 90.20898438 134.27246094 c
91.51756261 135.28810565 92.17185883 136.6650574 92.171875 138.40332031 c
92.17185883 139.6142732 91.82517949 140.6396628 91.13183594 141.47949219 c
90.43846212 142.309583 89.45213499 142.8857543 88.17285156 143.20800781 c
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
60 50 m
60 50 155 -2 250 50 c
S
Q
q
-1.05262664 -0.57617458 0.57617458 -1.05262664 236.84216696 42.79781771 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
157.4609375 2.12988281 m
171.5234375 2.12988281 l
171.5234375 3.38964844 l
163.58398438 24 l
160.49316406 24 l
167.96386719 4.62011719 l
157.4609375 4.62011719 l
157.4609375 2.12988281 l
f
Q
q
0 0 0 rg
270 50 m
270 55.52 265.52 60 260 60 c
254.48 60 250 55.52 250 50 c
250 44.48 254.48 40 260 40 c
265.52 40 270 44.48 270 50 c
h
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
270 50 m
270 55.52 265.52 60 260 60 c
254.48 60 250 55.52 250 50 c
250 44.48 254.48 40 260 40 c
265.52 40 270 44.48 270 50 c
h
S
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
260 60 m
260 60 312 155 260 250 c
S
Q
q
0.57617458 -1.05262664 1.05262664 0.57617458 267.20218229 236.84216696 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
289.23730469 133.12988281 m
300.85351562 133.12988281 l
300.85351562 135.62011719 l
291.94726562 135.62011719 l
291.94726562 140.98144531 l
292.37694675 140.8349751 292.80663382 140.72755333 293.23632812 140.65917969 c
293.66600796 140.58106911 294.09569503 140.54200665 294.52539062 140.54199219 c
296.96678591 140.54200665 298.90037772 141.21095129 300.32617188 142.54882812 c
301.75193737 143.88672986 302.46482729 145.69825149 302.46484375 147.98339844 c
302.46482729 150.33691873 301.73240614 152.16797158 300.26757812 153.4765625 c
298.80272157 154.77539085 296.73729395 155.42480426 294.07128906 155.42480469 c
293.15331316 155.42480426 292.2158141 155.34667934 291.25878906 155.19042969 c
290.31151913 155.03417965 289.33007479 154.79980489 288.31445312 154.48730469 c
288.31445312 151.51367188 l
289.19335618 151.99219051 290.1015584 152.34863546 291.0390625 152.58300781 c
291.97655652 152.817385 292.96776647 152.93457238 294.01269531 152.93457031 c
295.70213874 152.93457238 297.04002802 152.49023688 298.02636719 151.6015625 c
299.0126823 150.71289491 299.50584587 149.50684143 299.50585938 147.98339844 c
299.50584587 146.45996948 299.0126823 145.253916 298.02636719 144.36523438 c
297.04002802 143.47657402 295.70213874 143.03223853 294.01269531 143.03222656 c
293.22167247 143.03223853 292.43065763 143.12012907 291.63964844 143.29589844 c
290.85839358 143.47169122 290.05761313 143.74512844 289.23730469 144.11621094 c
289.23730469 133.12988281 l
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
250 50 m
250 50 155 102 60 50 c
S
Q
q
1.05262664 0.57617458 -0.57617458 1.05262664 73.15783304 57.20218229 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
167.17285156 90.20800781 m
168.5888536 90.51075368 169.69236812 91.14063586 170.48339844 92.09765625 c
171.2841634 93.05469645 171.68455363 94.23633589 171.68457031 95.64257812 c
171.68455363 97.80078545 170.94236687 99.47070565 169.45800781 100.65234375 c
167.97361984 101.83398454 165.86424695 102.42480426 163.12988281 102.42480469 c
162.21190685 102.42480426 161.26464217 102.33203092 160.28808594 102.14648438 c
159.32128474 101.97070315 158.32030918 101.70214874 157.28515625 101.34082031 c
157.28515625 98.484375 l
158.10546564 98.96289366 159.00390225 99.32422143 159.98046875 99.56835938 c
160.95702529 99.81250219 161.97753208 99.93457238 163.04199219 99.93457031 c
164.89745104 99.93457238 166.30858244 99.56836181 167.27539062 98.8359375 c
168.25193987 98.10351952 168.74022063 97.03906746 168.74023438 95.64257812 c
168.74022063 94.35352327 168.28611953 93.3476649 167.37792969 92.625 c
166.47948071 91.89258823 165.22459915 91.52637766 163.61328125 91.52636719 c
161.06445312 91.52636719 l
161.06445312 89.09472656 l
163.73046875 89.09472656 l
165.18553669 89.09473947 166.29881683 88.80665382 167.0703125 88.23046875 c
167.84178403 87.64454561 168.22752583 86.8047027 168.22753906 85.7109375 c
168.22752583 84.58790804 167.82713561 83.7285339 167.02636719 83.1328125 c
166.23534033 82.52736322 165.09764615 82.22462915 163.61328125 82.22460938 c
162.80272657 82.22462915 161.93358682 82.31251969 161.00585938 82.48828125 c
160.07811992 82.66408184 159.05761313 82.93751906 157.94433594 83.30859375 c
157.94433594 80.671875 l
159.06737875 80.35939664 160.11718238 80.12502188 161.09375 79.96875 c
162.08007104 79.81252219 163.00780449 79.73439727 163.87695312 79.734375 c
166.12303575 79.73439727 167.90037772 80.24709207 169.20898438 81.27246094 c
170.51756261 82.28810565 171.17185883 83.6650574 171.171875 85.40332031 c
171.17185883 86.6142732 170.82517949 87.6396628 170.13183594 88.47949219 c
169.43846212 89.309583 168.45213499 89.8857543 167.17285156 90.20800781 c
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
270 50 m
270 50 365 -2 460 50 c
S
Q
q
-1.05262664 -0.57617458 0.57617458 -1.05262664 446.84216696 42.79781771 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
368.72070312 21.50976562 m
373.5546875 21.50976562 l
373.5546875 4.82519531 l
368.29589844 5.87988281 l
368.29589844 3.18457031 l
373.52539062 2.12988281 l
376.484375 2.12988281 l
376.484375 21.50976562 l
381.31835938 21.50976562 l
381.31835938 24 l
368.72070312 24 l
368.72070312 21.50976562 l
f
Q
q
0 0 0 rg
480 50 m
480 55.52 475.52 60 470 60 c
464.48 60 460 55.52 460 50 c
460 44.48 464.48 40 470 40 c
475.52 40 480 44.48 480 50 c
h
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
480 50 m
480 55.52 475.52 60 470 60 c
464.48 60 460 55.52 460 50 c
460 44.48 464.48 40 470 40 c
475.52 40 480 44.48 480 50 c
h
S
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
470 60 m
470 60 522 155 470 250 c
S
Q
q
0.57617458 -1.05262664 1.05262664 0.57617458 477.20218229 236.84216696 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
499.72070312 152.50976562 m
504.5546875 152.50976562 l
504.5546875 135.82519531 l
499.29589844 136.87988281 l
499.29589844 134.18457031 l
504.52539062 133.12988281 l
507.484375 133.12988281 l
507.484375 152.50976562 l
512.31835938 152.50976562 l
512.31835938 155 l
499.72070312 155 l
499.72070312 152.50976562 l
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
460 50 m
460 50 365 102 270 50 c
S
Q
q
1.05262664 0.57617458 -0.57617458 1.05262664 283.15783304 57.20218229 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
368.72070312 99.50976562 m
373.5546875 99.50976562 l
373.5546875 82.82519531 l
368.29589844 83.87988281 l
368.29589844 81.18457031 l
373.52539062 80.12988281 l
376.484375 80.12988281 l
376.484375 99.50976562 l
381.31835938 99.50976562 l
381.31835938 102 l
368.72070312 102 l
368.72070312 99.50976562 l
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
480 50 m
480 50 575 -2 670 50 c
S
Q
q
-1.05262664 -0.57617458 0.57617458 -1.05262664 656.84216696 42.79781771 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
578.72070312 21.50976562 m
583.5546875 21.50976562 l
583.5546875 4.82519531 l
578.29589844 5.87988281 l
578.29589844 3.18457031 l
583.52539062 2.12988281 l
586.484375 2.12988281 l
586.484375 21.50976562 l
591.31835938 21.50976562 l
591.31835938 24 l
578.72070312 24 l
578.72070312 21.50976562 l
f
Q
q
0 0 0 rg
690 50 m
690 55.52 685.52 60 680 60 c
674.48 60 670 55.52 670 50 c
670 44.48 674.48 40 680 40 c
685.52 40 690 44.48 690 50 c
h
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
690 50 m
690 55.52 685.52 60 680 60 c
674.48 60 670 55.52 670 50 c
670 44.48 674.48 40 680 40 c
685.52 40 690 44.48 690 50 c
h
S
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
680 60 m
680 60 732 155 680 250 c
S
Q
q
0.57617458 -1.05262664 1.05262664 0.57617458 687.20218229 236.84216696 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
709.72070312 152.50976562 m
714.5546875 152.50976562 l
714.5546875 135.82519531 l
709.29589844 136.87988281 l
709.29589844 134.18457031 l
714.52539062 133.12988281 l
717.484375 133.12988281 l
717.484375 152.50976562 l
722.31835938 152.50976562 l
722.31835938 155 l
709.72070312 155 l
709.72070312 152.50976562 l
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
670 50 m
670 50 575 102 480 50 c
S
Q
q
1.05262664 0.57617458 -0.57617458 1.05262664 493.15783304 57.20218229 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
587.17285156 90.20800781 m
588.5888536 90.51075368 589.69236812 91.14063586 590.48339844 92.09765625 c
591.2841634 93.05469645 591.68455363 94.23633589 591.68457031 95.64257812 c
591.68455363 97.80078545 590.94236687 99.47070565 589.45800781 100.65234375 c
587.97361984 101.83398454 585.86424695 102.42480426 583.12988281 102.42480469 c
582.21190685 102.42480426 581.26464217 102.33203092 580.28808594 102.14648438 c
579.32128474 101.97070315 578.32030918 101.70214874 577.28515625 101.34082031 c
577.28515625 98.484375 l
578.10546564 98.96289366 579.00390225 99.32422143 579.98046875 99.56835938 c
580.95702529 99.81250219 581.97753208 99.93457238 583.04199219 99.93457031 c
584.89745104 99.93457238 586.30858244 99.56836181 587.27539062 98.8359375 c
588.25193987 98.10351952 588.74022063 97.03906746 588.74023438 95.64257812 c
588.74022063 94.35352327 588.28611953 93.3476649 587.37792969 92.625 c
586.47948071 91.89258823 585.22459915 91.52637766 583.61328125 91.52636719 c
581.06445312 91.52636719 l
581.06445312 89.09472656 l
583.73046875 89.09472656 l
585.18553669 89.09473947 586.29881683 88.80665382 587.0703125 88.23046875 c
587.84178403 87.64454561 588.22752583 86.8047027 588.22753906 85.7109375 c
588.22752583 84.58790804 587.82713561 83.7285339 587.02636719 83.1328125 c
586.23534033 82.52736322 585.09764615 82.22462915 583.61328125 82.22460938 c
582.80272657 82.22462915 581.93358682 82.31251969 581.00585938 82.48828125 c
580.07811992 82.66408184 579.05761313 82.93751906 577.94433594 83.30859375 c
577.94433594 80.671875 l
579.06737875 80.35939664 580.11718238 80.12502188 581.09375 79.96875 c
582.08007104 79.81252219 583.00780449 79.73439727 583.87695312 79.734375 c
586.12303575 79.73439727 587.90037772 80.24709207 589.20898438 81.27246094 c
590.51756261 82.28810565 591.17185883 83.6650574 591.171875 85.40332031 c
591.17185883 86.6142732 590.82517949 87.6396628 590.13183594 88.47949219 c
589.43846212 89.309583 588.45213499 89.8857543 587.17285156 90.20800781 c
f
Q
q
0 0 0 rg
60 260 m
60 265.52 55.52 270 50 270 c
44.48 270 40 265.52 40 260 c
40 254.48 44.48 250 50 250 c
55.52 250 60 254.48 60 260 c
h
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
60 260 m
60 265.52 55.52 270 50 270 c
44.48 270 40 265.52 40 260 c
40 254.48 44.48 250 50 250 c
55.52 250 60 254.48 60 260 c
h
S
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
50 270 m
50 270 102 365 50 460 c
S
Q
q
0.57617458 -1.05262664 1.05262664 0.57617458 57.20218229 446.84216696 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
79.72070312 362.50976562 m
84.5546875 362.50976562 l
84.5546875 345.82519531 l
79.29589844 346.87988281 l
79.29589844 344.18457031 l
84.52539062 343.12988281 l
87.484375 343.12988281 l
87.484375 362.50976562 l
92.31835938 362.50976562 l
92.31835938 365 l
79.72070312 365 l
79.72070312 362.50976562 l
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
50 250 m
50 250 -2 155 50 60 c
S
Q
q
-0.57617458 1.05262664 -1.05262664 -0.57617458 42.79781771 73.15783304 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
9.33789062 135.70800781 m
1.8671875 147.3828125 l
9.33789062 147.3828125 l
9.33789062 135.70800781 l
8.56152344 133.12988281 m
12.28222656 133.12988281 l
12.28222656 147.3828125 l
15.40234375 147.3828125 l
15.40234375 149.84375 l
12.28222656 149.84375 l
12.28222656 155 l
9.33789062 155 l
9.33789062 149.84375 l
-0.53515625 149.84375 l
-0.53515625 146.98730469 l
8.56152344 133.12988281 l
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
60 260 m
60 260 155 208 250 260 c
S
Q
q
-1.05262664 -0.57617458 0.57617458 -1.05262664 236.84216696 252.79781771 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
160.75683594 231.50976562 m
171.08398438 231.50976562 l
171.08398438 234 l
157.19726562 234 l
157.19726562 231.50976562 l
158.32030918 230.3476599 159.84862796 228.79004427 161.78222656 226.83691406 c
163.72557721 224.87403256 164.94627912 223.60938539 165.44433594 223.04296875 c
166.39159017 221.97852765 167.0507692 221.08009104 167.421875 220.34765625 c
167.80272157 219.60548314 167.99315107 218.87794481 167.99316406 218.16503906 c
167.99315107 217.00294668 167.58299523 216.05568201 166.76269531 215.32324219 c
165.95213749 214.59083972 164.89256823 214.22462915 163.58398438 214.22460938 c
162.65624234 214.22462915 161.67479801 214.3857618 160.63964844 214.70800781 c
159.6142532 215.03029241 158.51562148 215.51857317 157.34375 216.17285156 c
157.34375 213.18457031 l
158.53515271 212.70607598 159.64843285 212.34474822 160.68359375 212.10058594 c
161.71874328 211.85646746 162.66600796 211.73439727 163.52539062 211.734375 c
165.79100483 211.73439727 167.59764365 212.30080295 168.9453125 213.43359375 c
170.29295346 214.56642568 170.96678091 216.08009604 170.96679688 217.97460938 c
170.96678091 218.873062 170.79588264 219.72755333 170.45410156 220.53808594 c
170.12205519 221.33887985 169.51170424 222.28614453 168.62304688 223.37988281 c
168.37889287 223.66309627 167.60252646 224.48340795 166.29394531 225.84082031 c
164.98534158 227.18848337 163.1396403 229.07812992 160.75683594 231.50976562 c
f
Q
q
0 0 0 rg
270 260 m
270 265.52 265.52 270 260 270 c
254.48 270 250 265.52 250 260 c
250 254.48 254.48 250 260 250 c
265.52 250 270 254.48 270 260 c
h
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
270 260 m
270 265.52 265.52 270 260 270 c
254.48 270 250 265.52 250 260 c
250 254.48 254.48 250 260 250 c
265.52 250 270 254.48 270 260 c
h
S
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
260 270 m
260 270 312 365 260 460 c
S
Q
q
0.57617458 -1.05262664 1.05262664 0.57617458 267.20218229 446.84216696 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
289.72070312 362.50976562 m
294.5546875 362.50976562 l
294.5546875 345.82519531 l
289.29589844 346.87988281 l
289.29589844 344.18457031 l
294.52539062 343.12988281 l
297.484375 343.12988281 l
297.484375 362.50976562 l
302.31835938 362.50976562 l
302.31835938 365 l
289.72070312 365 l
289.72070312 362.50976562 l
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
260 250 m
260 250 208 155 260 60 c
S
Q
q
-0.57617458 1.05262664 -1.05262664 -0.57617458 252.79781771 73.15783304 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
213.75683594 152.50976562 m
224.08398438 152.50976562 l
224.08398438 155 l
210.19726562 155 l
210.19726562 152.50976562 l
211.32030918 151.3476599 212.84862796 149.79004427 214.78222656 147.83691406 c
216.72557721 145.87403256 217.94627912 144.60938539 218.44433594 144.04296875 c
219.39159017 142.97852765 220.0507692 142.08009104 220.421875 141.34765625 c
220.80272157 140.60548314 220.99315107 139.87794481 220.99316406 139.16503906 c
220.99315107 138.00294668 220.58299523 137.05568201 219.76269531 136.32324219 c
218.95213749 135.59083972 217.89256823 135.22462915 216.58398438 135.22460938 c
215.65624234 135.22462915 214.67479801 135.3857618 213.63964844 135.70800781 c
212.6142532 136.03029241 211.51562148 136.51857317 210.34375 137.17285156 c
210.34375 134.18457031 l
211.53515271 133.70607598 212.64843285 133.34474822 213.68359375 133.10058594 c
214.71874328 132.85646746 215.66600796 132.73439727 216.52539062 132.734375 c
218.79100483 132.73439727 220.59764365 133.30080295 221.9453125 134.43359375 c
223.29295346 135.56642568 223.96678091 137.08009604 223.96679688 138.97460938 c
223.96678091 139.873062 223.79588264 140.72755333 223.45410156 141.53808594 c
223.12205519 142.33887985 222.51170424 143.28614453 221.62304688 144.37988281 c
221.37889287 144.66309627 220.60252646 145.48340795 219.29394531 146.84082031 c
217.98534158 148.18848337 216.1396403 150.07812992 213.75683594 152.50976562 c
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
250 260 m
250 260 155 312 60 260 c
S
Q
q
1.05262664 0.57617458 -0.57617458 1.05262664 73.15783304 267.20218229 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
166.33789062 292.70800781 m
158.8671875 304.3828125 l
166.33789062 304.3828125 l
166.33789062 292.70800781 l
165.56152344 290.12988281 m
169.28222656 290.12988281 l
169.28222656 304.3828125 l
172.40234375 304.3828125 l
172.40234375 306.84375 l
169.28222656 306.84375 l
169.28222656 312 l
166.33789062 312 l
166.33789062 306.84375 l
156.46484375 306.84375 l
156.46484375 303.98730469 l
165.56152344 290.12988281 l
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
270 260 m
270 260 365 208 460 260 c
S
Q
q
-1.05262664 -0.57617458 0.57617458 -1.05262664 446.84216696 252.79781771 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
376.33789062 214.70800781 m
368.8671875 226.3828125 l
376.33789062 226.3828125 l
376.33789062 214.70800781 l
375.56152344 212.12988281 m
379.28222656 212.12988281 l
379.28222656 226.3828125 l
382.40234375 226.3828125 l
382.40234375 228.84375 l
379.28222656 228.84375 l
379.28222656 234 l
376.33789062 234 l
376.33789062 228.84375 l
366.46484375 228.84375 l
366.46484375 225.98730469 l
375.56152344 212.12988281 l
f
Q
q
0 0 0 rg
480 260 m
480 265.52 475.52 270 470 270 c
464.48 270 460 265.52 460 260 c
460 254.48 464.48 250 470 250 c
475.52 250 480 254.48 480 260 c
h
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
480 260 m
480 265.52 475.52 270 470 270 c
464.48 270 460 265.52 460 260 c
460 254.48 464.48 250 470 250 c
475.52 250 480 254.48 480 260 c
h
S
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
470 270 m
470 270 522 365 470 460 c
S
Q
q
0.57617458 -1.05262664 1.05262664 0.57617458 477.20218229 446.84216696 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
507.33789062 345.70800781 m
499.8671875 357.3828125 l
507.33789062 357.3828125 l
507.33789062 345.70800781 l
506.56152344 343.12988281 m
510.28222656 343.12988281 l
510.28222656 357.3828125 l
513.40234375 357.3828125 l
513.40234375 359.84375 l
510.28222656 359.84375 l
510.28222656 365 l
507.33789062 365 l
507.33789062 359.84375 l
497.46484375 359.84375 l
497.46484375 356.98730469 l
506.56152344 343.12988281 l
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
470 250 m
470 250 418 155 470 60 c
S
Q
q
-0.57617458 1.05262664 -1.05262664 -0.57617458 462.79781771 73.15783304 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
430.17285156 143.20800781 m
431.5888536 143.51075368 432.69236812 144.14063586 433.48339844 145.09765625 c
434.2841634 146.05469645 434.68455363 147.23633589 434.68457031 148.64257812 c
434.68455363 150.80078545 433.94236687 152.47070565 432.45800781 153.65234375 c
430.97361984 154.83398454 428.86424695 155.42480426 426.12988281 155.42480469 c
425.21190685 155.42480426 424.26464217 155.33203092 423.28808594 155.14648438 c
422.32128474 154.97070315 421.32030918 154.70214874 420.28515625 154.34082031 c
420.28515625 151.484375 l
421.10546564 151.96289366 422.00390225 152.32422143 422.98046875 152.56835938 c
423.95702529 152.81250219 424.97753208 152.93457238 426.04199219 152.93457031 c
427.89745104 152.93457238 429.30858244 152.56836181 430.27539062 151.8359375 c
431.25193987 151.10351952 431.74022063 150.03906746 431.74023438 148.64257812 c
431.74022063 147.35352327 431.28611953 146.3476649 430.37792969 145.625 c
429.47948071 144.89258823 428.22459915 144.52637766 426.61328125 144.52636719 c
424.06445312 144.52636719 l
424.06445312 142.09472656 l
426.73046875 142.09472656 l
428.18553669 142.09473947 429.29881683 141.80665382 430.0703125 141.23046875 c
430.84178403 140.64454561 431.22752583 139.8047027 431.22753906 138.7109375 c
431.22752583 137.58790804 430.82713561 136.7285339 430.02636719 136.1328125 c
429.23534033 135.52736322 428.09764615 135.22462915 426.61328125 135.22460938 c
425.80272657 135.22462915 424.93358682 135.31251969 424.00585938 135.48828125 c
423.07811992 135.66408184 422.05761313 135.93751906 420.94433594 136.30859375 c
420.94433594 133.671875 l
422.06737875 133.35939664 423.11718238 133.12502187 424.09375 132.96875 c
425.08007104 132.81252219 426.00780449 132.73439727 426.87695312 132.734375 c
429.12303575 132.73439727 430.90037772 133.24709207 432.20898438 134.27246094 c
433.51756261 135.28810565 434.17185883 136.6650574 434.171875 138.40332031 c
434.17185883 139.6142732 433.82517949 140.6396628 433.13183594 141.47949219 c
432.43846212 142.309583 431.45213499 142.8857543 430.17285156 143.20800781 c
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
460 260 m
460 260 365 312 270 260 c
S
Q
q
1.05262664 0.57617458 -0.57617458 1.05262664 283.15783304 267.20218229 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
376.33789062 292.70800781 m
368.8671875 304.3828125 l
376.33789062 304.3828125 l
376.33789062 292.70800781 l
375.56152344 290.12988281 m
379.28222656 290.12988281 l
379.28222656 304.3828125 l
382.40234375 304.3828125 l
382.40234375 306.84375 l
379.28222656 306.84375 l
379.28222656 312 l
376.33789062 312 l
376.33789062 306.84375 l
366.46484375 306.84375 l
366.46484375 303.98730469 l
375.56152344 290.12988281 l
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
480 260 m
480 260 575 208 670 260 c
S
Q
q
-1.05262664 -0.57617458 0.57617458 -1.05262664 656.84216696 252.79781771 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
578.72070312 231.50976562 m
583.5546875 231.50976562 l
583.5546875 214.82519531 l
578.29589844 215.87988281 l
578.29589844 213.18457031 l
583.52539062 212.12988281 l
586.484375 212.12988281 l
586.484375 231.50976562 l
591.31835938 231.50976562 l
591.31835938 234 l
578.72070312 234 l
578.72070312 231.50976562 l
f
Q
q
0 0 0 rg
690 260 m
690 265.52 685.52 270 680 270 c
674.48 270 670 265.52 670 260 c
670 254.48 674.48 250 680 250 c
685.52 250 690 254.48 690 260 c
h
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
690 260 m
690 265.52 685.52 270 680 270 c
674.48 270 670 265.52 670 260 c
670 254.48 674.48 250 680 250 c
685.52 250 690 254.48 690 260 c
h
S
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
680 270 m
680 270 732 365 680 460 c
S
Q
q
0.57617458 -1.05262664 1.05262664 0.57617458 687.20218229 446.84216696 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
709.72070312 362.50976562 m
714.5546875 362.50976562 l
714.5546875 345.82519531 l
709.29589844 346.87988281 l
709.29589844 344.18457031 l
714.52539062 343.12988281 l
717.484375 343.12988281 l
717.484375 362.50976562 l
722.31835938 362.50976562 l
722.31835938 365 l
709.72070312 365 l
709.72070312 362.50976562 l
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
680 250 m
680 250 628 155 680 60 c
S
Q
q
-0.57617458 1.05262664 -1.05262664 -0.57617458 672.79781771 73.15783304 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
633.75683594 152.50976562 m
644.08398438 152.50976562 l
644.08398438 155 l
630.19726562 155 l
630.19726562 152.50976562 l
631.32030918 151.3476599 632.84862796 149.79004427 634.78222656 147.83691406 c
636.72557721 145.87403256 637.94627912 144.60938539 638.44433594 144.04296875 c
639.39159017 142.97852765 640.0507692 142.08009104 640.421875 141.34765625 c
640.80272157 140.60548314 640.99315107 139.87794481 640.99316406 139.16503906 c
640.99315107 138.00294668 640.58299523 137.05568201 639.76269531 136.32324219 c
638.95213749 135.59083972 637.89256823 135.22462915 636.58398438 135.22460938 c
635.65624234 135.22462915 634.67479801 135.3857618 633.63964844 135.70800781 c
632.6142532 136.03029241 631.51562148 136.51857317 630.34375 137.17285156 c
630.34375 134.18457031 l
631.53515271 133.70607598 632.64843285 133.34474822 633.68359375 133.10058594 c
634.71874328 132.85646746 635.66600796 132.73439727 636.52539062 132.734375 c
638.79100483 132.73439727 640.59764365 133.30080295 641.9453125 134.43359375 c
643.29295346 135.56642568 643.96678091 137.08009604 643.96679688 138.97460938 c
643.96678091 139.873062 643.79588264 140.72755333 643.45410156 141.53808594 c
643.12205519 142.33887985 642.51170424 143.28614453 641.62304688 144.37988281 c
641.37889287 144.66309627 640.60252646 145.48340795 639.29394531 146.84082031 c
637.98534158 148.18848337 636.1396403 150.07812992 633.75683594 152.50976562 c
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
670 260 m
670 260 575 312 480 260 c
S
Q
q
1.05262664 0.57617458 -0.57617458 1.05262664 493.15783304 267.20218229 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
587.17285156 300.20800781 m
588.5888536 300.51075368 589.69236812 301.14063586 590.48339844 302.09765625 c
591.2841634 303.05469645 591.68455363 304.23633589 591.68457031 305.64257812 c
591.68455363 307.80078545 590.94236687 309.47070565 589.45800781 310.65234375 c
587.97361984 311.83398454 585.86424695 312.42480426 583.12988281 312.42480469 c
582.21190685 312.42480426 581.26464217 312.33203092 580.28808594 312.14648438 c
579.32128474 311.97070315 578.32030918 311.70214874 577.28515625 311.34082031 c
577.28515625 308.484375 l
578.10546564 308.96289366 579.00390225 309.32422143 579.98046875 309.56835938 c
580.95702529 309.81250219 581.97753208 309.93457238 583.04199219 309.93457031 c
584.89745104 309.93457238 586.30858244 309.56836181 587.27539062 308.8359375 c
588.25193987 308.10351952 588.74022063 307.03906746 588.74023438 305.64257812 c
588.74022063 304.35352327 588.28611953 303.3476649 587.37792969 302.625 c
586.47948071 301.89258823 585.22459915 301.52637766 583.61328125 301.52636719 c
581.06445312 301.52636719 l
581.06445312 299.09472656 l
583.73046875 299.09472656 l
585.18553669 299.09473947 586.29881683 298.80665382 587.0703125 298.23046875 c
587.84178403 297.64454561 588.22752583 296.8047027 588.22753906 295.7109375 c
588.22752583 294.58790804 587.82713561 293.7285339 587.02636719 293.1328125 c
586.23534033 292.52736322 585.09764615 292.22462915 583.61328125 292.22460938 c
582.80272657 292.22462915 581.93358682 292.31251969 581.00585938 292.48828125 c
580.07811992 292.66408184 579.05761313 292.93751906 577.94433594 293.30859375 c
577.94433594 290.671875 l
579.06737875 290.35939664 580.11718238 290.12502188 581.09375 289.96875 c
582.08007104 289.81252219 583.00780449 289.73439727 583.87695312 289.734375 c
586.12303575 289.73439727 587.90037772 290.24709207 589.20898438 291.27246094 c
590.51756261 292.28810565 591.17185883 293.6650574 591.171875 295.40332031 c
591.17185883 296.6142732 590.82517949 297.6396628 590.13183594 298.47949219 c
589.43846212 299.309583 588.45213499 299.8857543 587.17285156 300.20800781 c
f
Q
q
0 0 0 rg
60 470 m
60 475.52 55.52 480 50 480 c
44.48 480 40 475.52 40 470 c
40 464.48 44.48 460 50 460 c
55.52 460 60 464.48 60 470 c
h
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
60 470 m
60 475.52 55.52 480 50 480 c
44.48 480 40 475.52 40 470 c
40 464.48 44.48 460 50 460 c
55.52 460 60 464.48 60 470 c
h
S
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
50 480 m
50 480 102 575 50 670 c
S
Q
q
0.57617458 -1.05262664 1.05262664 0.57617458 57.20218229 656.84216696 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
79.72070312 572.50976562 m
84.5546875 572.50976562 l
84.5546875 555.82519531 l
79.29589844 556.87988281 l
79.29589844 554.18457031 l
84.52539062 553.12988281 l
87.484375 553.12988281 l
87.484375 572.50976562 l
92.31835938 572.50976562 l
92.31835938 575 l
79.72070312 575 l
79.72070312 572.50976562 l
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
50 460 m
50 460 -2 365 50 270 c
S
Q
q
-0.57617458 1.05262664 -1.05262664 -0.57617458 42.79781771 283.15783304 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
1.72070312 362.50976562 m
6.5546875 362.50976562 l
6.5546875 345.82519531 l
1.29589844 346.87988281 l
1.29589844 344.18457031 l
6.52539062 343.12988281 l
9.484375 343.12988281 l
9.484375 362.50976562 l
14.31835938 362.50976562 l
14.31835938 365 l
1.72070312 365 l
1.72070312 362.50976562 l
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
60 470 m
60 470 155 418 250 470 c
S
Q
q
-1.05262664 -0.57617458 0.57617458 -1.05262664 236.84216696 462.79781771 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
167.17285156 432.20800781 m
168.5888536 432.51075368 169.69236812 433.14063586 170.48339844 434.09765625 c
171.2841634 435.05469645 171.68455363 436.23633589 171.68457031 437.64257812 c
171.68455363 439.80078545 170.94236687 441.47070565 169.45800781 442.65234375 c
167.97361984 443.83398454 165.86424695 444.42480426 163.12988281 444.42480469 c
162.21190685 444.42480426 161.26464217 444.33203092 160.28808594 444.14648438 c
159.32128474 443.97070315 158.32030918 443.70214874 157.28515625 443.34082031 c
157.28515625 440.484375 l
158.10546564 440.96289366 159.00390225 441.32422143 159.98046875 441.56835938 c
160.95702529 441.81250219 161.97753208 441.93457238 163.04199219 441.93457031 c
164.89745104 441.93457238 166.30858244 441.56836181 167.27539062 440.8359375 c
168.25193987 440.10351952 168.74022063 439.03906746 168.74023438 437.64257812 c
168.74022063 436.35352327 168.28611953 435.3476649 167.37792969 434.625 c
166.47948071 433.89258823 165.22459915 433.52637766 163.61328125 433.52636719 c
161.06445312 433.52636719 l
161.06445312 431.09472656 l
163.73046875 431.09472656 l
165.18553669 431.09473947 166.29881683 430.80665382 167.0703125 430.23046875 c
167.84178403 429.64454561 168.22752583 428.8047027 168.22753906 427.7109375 c
168.22752583 426.58790804 167.82713561 425.7285339 167.02636719 425.1328125 c
166.23534033 424.52736322 165.09764615 424.22462915 163.61328125 424.22460938 c
162.80272657 424.22462915 161.93358682 424.31251969 161.00585938 424.48828125 c
160.07811992 424.66408184 159.05761313 424.93751906 157.94433594 425.30859375 c
157.94433594 422.671875 l
159.06737875 422.35939664 160.11718238 422.12502188 161.09375 421.96875 c
162.08007104 421.81252219 163.00780449 421.73439727 163.87695312 421.734375 c
166.12303575 421.73439727 167.90037772 422.24709207 169.20898438 423.27246094 c
170.51756261 424.28810565 171.17185883 425.6650574 171.171875 427.40332031 c
171.17185883 428.6142732 170.82517949 429.6396628 170.13183594 430.47949219 c
169.43846212 431.309583 168.45213499 431.8857543 167.17285156 432.20800781 c
f
Q
q
0 0 0 rg
270 470 m
270 475.52 265.52 480 260 480 c
254.48 480 250 475.52 250 470 c
250 464.48 254.48 460 260 460 c
265.52 460 270 464.48 270 470 c
h
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
270 470 m
270 475.52 265.52 480 260 480 c
254.48 480 250 475.52 250 470 c
250 464.48 254.48 460 260 460 c
265.52 460 270 464.48 270 470 c
h
S
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
260 480 m
260 480 312 575 260 670 c
S
Q
q
0.57617458 -1.05262664 1.05262664 0.57617458 267.20218229 656.84216696 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
298.17285156 563.20800781 m
299.5888536 563.51075368 300.69236812 564.14063586 301.48339844 565.09765625 c
302.2841634 566.05469645 302.68455363 567.23633589 302.68457031 568.64257812 c
302.68455363 570.80078545 301.94236687 572.47070565 300.45800781 573.65234375 c
298.97361984 574.83398454 296.86424695 575.42480426 294.12988281 575.42480469 c
293.21190685 575.42480426 292.26464217 575.33203092 291.28808594 575.14648438 c
290.32128474 574.97070315 289.32030918 574.70214874 288.28515625 574.34082031 c
288.28515625 571.484375 l
289.10546564 571.96289366 290.00390225 572.32422143 290.98046875 572.56835938 c
291.95702529 572.81250219 292.97753208 572.93457238 294.04199219 572.93457031 c
295.89745104 572.93457238 297.30858244 572.56836181 298.27539062 571.8359375 c
299.25193987 571.10351952 299.74022063 570.03906746 299.74023438 568.64257812 c
299.74022063 567.35352327 299.28611953 566.3476649 298.37792969 565.625 c
297.47948071 564.89258823 296.22459915 564.52637766 294.61328125 564.52636719 c
292.06445312 564.52636719 l
292.06445312 562.09472656 l
294.73046875 562.09472656 l
296.18553669 562.09473947 297.29881683 561.80665382 298.0703125 561.23046875 c
298.84178403 560.64454561 299.22752583 559.8047027 299.22753906 558.7109375 c
299.22752583 557.58790804 298.82713561 556.7285339 298.02636719 556.1328125 c
297.23534033 555.52736322 296.09764615 555.22462915 294.61328125 555.22460938 c
293.80272657 555.22462915 292.93358682 555.31251969 292.00585938 555.48828125 c
291.07811992 555.66408184 290.05761313 555.93751906 288.94433594 556.30859375 c
288.94433594 553.671875 l
290.06737875 553.35939664 291.11718238 553.12502188 292.09375 552.96875 c
293.08007104 552.81252219 294.00780449 552.73439727 294.87695312 552.734375 c
297.12303575 552.73439727 298.90037772 553.24709207 300.20898438 554.27246094 c
301.51756261 555.28810565 302.17185883 556.6650574 302.171875 558.40332031 c
302.17185883 559.6142732 301.82517949 560.6396628 301.13183594 561.47949219 c
300.43846212 562.309583 299.45213499 562.8857543 298.17285156 563.20800781 c
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
260 460 m
260 460 208 365 260 270 c
S
Q
q
-0.57617458 1.05262664 -1.05262664 -0.57617458 252.79781771 283.15783304 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
219.33789062 345.70800781 m
211.8671875 357.3828125 l
219.33789062 357.3828125 l
219.33789062 345.70800781 l
218.56152344 343.12988281 m
222.28222656 343.12988281 l
222.28222656 357.3828125 l
225.40234375 357.3828125 l
225.40234375 359.84375 l
222.28222656 359.84375 l
222.28222656 365 l
219.33789062 365 l
219.33789062 359.84375 l
209.46484375 359.84375 l
209.46484375 356.98730469 l
218.56152344 343.12988281 l
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
250 470 m
250 470 155 522 60 470 c
S
Q
q
1.05262664 0.57617458 -0.57617458 1.05262664 73.15783304 477.20218229 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
167.17285156 510.20800781 m
168.5888536 510.51075368 169.69236812 511.14063586 170.48339844 512.09765625 c
171.2841634 513.05469645 171.68455363 514.23633589 171.68457031 515.64257812 c
171.68455363 517.80078545 170.94236687 519.47070565 169.45800781 520.65234375 c
167.97361984 521.83398454 165.86424695 522.42480426 163.12988281 522.42480469 c
162.21190685 522.42480426 161.26464217 522.33203092 160.28808594 522.14648438 c
159.32128474 521.97070315 158.32030918 521.70214874 157.28515625 521.34082031 c
157.28515625 518.484375 l
158.10546564 518.96289366 159.00390225 519.32422143 159.98046875 519.56835938 c
160.95702529 519.81250219 161.97753208 519.93457238 163.04199219 519.93457031 c
164.89745104 519.93457238 166.30858244 519.56836181 167.27539062 518.8359375 c
168.25193987 518.10351952 168.74022063 517.03906746 168.74023438 515.64257812 c
168.74022063 514.35352327 168.28611953 513.3476649 167.37792969 512.625 c
166.47948071 511.89258823 165.22459915 511.52637766 163.61328125 511.52636719 c
161.06445312 511.52636719 l
161.06445312 509.09472656 l
163.73046875 509.09472656 l
165.18553669 509.09473947 166.29881683 508.80665382 167.0703125 508.23046875 c
167.84178403 507.64454561 168.22752583 506.8047027 168.22753906 505.7109375 c
168.22752583 504.58790804 167.82713561 503.7285339 167.02636719 503.1328125 c
166.23534033 502.52736322 165.09764615 502.22462915 163.61328125 502.22460938 c
162.80272657 502.22462915 161.93358682 502.31251969 161.00585938 502.48828125 c
160.07811992 502.66408184 159.05761313 502.93751906 157.94433594 503.30859375 c
157.94433594 500.671875 l
159.06737875 500.35939664 160.11718238 500.12502188 161.09375 499.96875 c
162.08007104 499.81252219 163.00780449 499.73439727 163.87695312 499.734375 c
166.12303575 499.73439727 167.90037772 500.24709207 169.20898438 501.27246094 c
170.51756261 502.28810565 171.17185883 503.6650574 171.171875 505.40332031 c
171.17185883 506.6142732 170.82517949 507.6396628 170.13183594 508.47949219 c
169.43846212 509.309583 168.45213499 509.8857543 167.17285156 510.20800781 c
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
270 470 m
270 470 365 418 460 470 c
S
Q
q
-1.05262664 -0.57617458 0.57617458 -1.05262664 446.84216696 462.79781771 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
377.17285156 432.20800781 m
378.5888536 432.51075368 379.69236812 433.14063586 380.48339844 434.09765625 c
381.2841634 435.05469645 381.68455363 436.23633589 381.68457031 437.64257812 c
381.68455363 439.80078545 380.94236687 441.47070565 379.45800781 442.65234375 c
377.97361984 443.83398454 375.86424695 444.42480426 373.12988281 444.42480469 c
372.21190685 444.42480426 371.26464217 444.33203092 370.28808594 444.14648438 c
369.32128474 443.97070315 368.32030918 443.70214874 367.28515625 443.34082031 c
367.28515625 440.484375 l
368.10546564 440.96289366 369.00390225 441.32422143 369.98046875 441.56835938 c
370.95702529 441.81250219 371.97753208 441.93457238 373.04199219 441.93457031 c
374.89745104 441.93457238 376.30858244 441.56836181 377.27539062 440.8359375 c
378.25193987 440.10351952 378.74022063 439.03906746 378.74023438 437.64257812 c
378.74022063 436.35352327 378.28611953 435.3476649 377.37792969 434.625 c
376.47948071 433.89258823 375.22459915 433.52637766 373.61328125 433.52636719 c
371.06445312 433.52636719 l
371.06445312 431.09472656 l
373.73046875 431.09472656 l
375.18553669 431.09473947 376.29881683 430.80665382 377.0703125 430.23046875 c
377.84178403 429.64454561 378.22752583 428.8047027 378.22753906 427.7109375 c
378.22752583 426.58790804 377.82713561 425.7285339 377.02636719 425.1328125 c
376.23534033 424.52736322 375.09764615 424.22462915 373.61328125 424.22460938 c
372.80272657 424.22462915 371.93358682 424.31251969 371.00585938 424.48828125 c
370.07811992 424.66408184 369.05761313 424.93751906 367.94433594 425.30859375 c
367.94433594 422.671875 l
369.06737875 422.35939664 370.11718238 422.12502188 371.09375 421.96875 c
372.08007104 421.81252219 373.00780449 421.73439727 373.87695312 421.734375 c
376.12303575 421.73439727 377.90037772 422.24709207 379.20898438 423.27246094 c
380.51756261 424.28810565 381.17185883 425.6650574 381.171875 427.40332031 c
381.17185883 428.6142732 380.82517949 429.6396628 380.13183594 430.47949219 c
379.43846212 431.309583 378.45213499 431.8857543 377.17285156 432.20800781 c
f
Q
q
0 0 0 rg
480 470 m
480 475.52 475.52 480 470 480 c
464.48 480 460 475.52 460 470 c
460 464.48 464.48 460 470 460 c
475.52 460 480 464.48 480 470 c
h
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
480 470 m
480 475.52 475.52 480 470 480 c
464.48 480 460 475.52 460 470 c
460 464.48 464.48 460 470 460 c
475.52 460 480 464.48 480 470 c
h
S
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
470 480 m
470 480 522 575 470 670 c
S
Q
q
0.57617458 -1.05262664 1.05262664 0.57617458 477.20218229 656.84216696 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
501.75683594 572.50976562 m
512.08398438 572.50976562 l
512.08398438 575 l
498.19726562 575 l
498.19726562 572.50976562 l
499.32030918 571.3476599 500.84862796 569.79004427 502.78222656 567.83691406 c
504.72557721 565.87403256 505.94627912 564.60938539 506.44433594 564.04296875 c
507.39159017 562.97852765 508.0507692 562.08009104 508.421875 561.34765625 c
508.80272157 560.60548314 508.99315107 559.87794481 508.99316406 559.16503906 c
508.99315107 558.00294668 508.58299523 557.05568201 507.76269531 556.32324219 c
506.95213749 555.59083972 505.89256823 555.22462915 504.58398438 555.22460938 c
503.65624234 555.22462915 502.67479801 555.3857618 501.63964844 555.70800781 c
500.6142532 556.03029241 499.51562148 556.51857317 498.34375 557.17285156 c
498.34375 554.18457031 l
499.53515271 553.70607598 500.64843285 553.34474822 501.68359375 553.10058594 c
502.71874328 552.85646746 503.66600796 552.73439727 504.52539062 552.734375 c
506.79100483 552.73439727 508.59764365 553.30080295 509.9453125 554.43359375 c
511.29295346 555.56642568 511.96678091 557.08009604 511.96679688 558.97460938 c
511.96678091 559.873062 511.79588264 560.72755333 511.45410156 561.53808594 c
511.12205519 562.33887985 510.51170424 563.28614453 509.62304688 564.37988281 c
509.37889287 564.66309627 508.60252646 565.48340795 507.29394531 566.84082031 c
505.98534158 568.18848337 504.1396403 570.07812992 501.75683594 572.50976562 c
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
470 460 m
470 460 418 365 470 270 c
S
Q
q
-0.57617458 1.05262664 -1.05262664 -0.57617458 462.79781771 283.15783304 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
420.4609375 343.12988281 m
434.5234375 343.12988281 l
434.5234375 344.38964844 l
426.58398438 365 l
423.49316406 365 l
430.96386719 345.62011719 l
420.4609375 345.62011719 l
420.4609375 343.12988281 l
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
460 470 m
460 470 365 522 270 470 c
S
Q
q
1.05262664 0.57617458 -0.57617458 1.05262664 283.15783304 477.20218229 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
368.72070312 519.50976562 m
373.5546875 519.50976562 l
373.5546875 502.82519531 l
368.29589844 503.87988281 l
368.29589844 501.18457031 l
373.52539062 500.12988281 l
376.484375 500.12988281 l
376.484375 519.50976562 l
381.31835938 519.50976562 l
381.31835938 522 l
368.72070312 522 l
368.72070312 519.50976562 l
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
480 470 m
480 470 575 418 670 470 c
S
Q
q
-1.05262664 -0.57617458 0.57617458 -1.05262664 656.84216696 462.79781771 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
587.17285156 432.20800781 m
588.5888536 432.51075368 589.69236812 433.14063586 590.48339844 434.09765625 c
591.2841634 435.05469645 591.68455363 436.23633589 591.68457031 437.64257812 c
591.68455363 439.80078545 590.94236687 441.47070565 589.45800781 442.65234375 c
587.97361984 443.83398454 585.86424695 444.42480426 583.12988281 444.42480469 c
582.21190685 444.42480426 581.26464217 444.33203092 580.28808594 444.14648438 c
579.32128474 443.97070315 578.32030918 443.70214874 577.28515625 443.34082031 c
577.28515625 440.484375 l
578.10546564 440.96289366 579.00390225 441.32422143 579.98046875 441.56835938 c
580.95702529 441.81250219 581.97753208 441.93457238 583.04199219 441.93457031 c
584.89745104 441.93457238 586.30858244 441.56836181 587.27539062 440.8359375 c
588.25193987 440.10351952 588.74022063 439.03906746 588.74023438 437.64257812 c
588.74022063 436.35352327 588.28611953 435.3476649 587.37792969 434.625 c
586.47948071 433.89258823 585.22459915 433.52637766 583.61328125 433.52636719 c
581.06445312 433.52636719 l
581.06445312 431.09472656 l
583.73046875 431.09472656 l
585.18553669 431.09473947 586.29881683 430.80665382 587.0703125 430.23046875 c
587.84178403 429.64454561 588.22752583 428.8047027 588.22753906 427.7109375 c
588.22752583 426.58790804 587.82713561 425.7285339 587.02636719 425.1328125 c
586.23534033 424.52736322 585.09764615 424.22462915 583.61328125 424.22460938 c
582.80272657 424.22462915 581.93358682 424.31251969 581.00585938 424.48828125 c
580.07811992 424.66408184 579.05761313 424.93751906 577.94433594 425.30859375 c
577.94433594 422.671875 l
579.06737875 422.35939664 580.11718238 422.12502188 581.09375 421.96875 c
582.08007104 421.81252219 583.00780449 421.73439727 583.87695312 421.734375 c
586.12303575 421.73439727 587.90037772 422.24709207 589.20898438 423.27246094 c
590.51756261 424.28810565 591.17185883 425.6650574 591.171875 427.40332031 c
591.17185883 428.6142732 590.82517949 429.6396628 590.13183594 430.47949219 c
589.43846212 431.309583 588.45213499 431.8857543 587.17285156 432.20800781 c
f
Q
q
0 0 0 rg
690 470 m
690 475.52 685.52 480 680 480 c
674.48 480 670 475.52 670 470 c
670 464.48 674.48 460 680 460 c
685.52 460 690 464.48 690 470 c
h
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
690 470 m
690 475.52 685.52 480 680 480 c
674.48 480 670 475.52 670 470 c
670 464.48 674.48 460 680 460 c
685.52 460 690 464.48 690 470 c
h
S
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
680 480 m
680 480 732 575 680 670 c
S
Q
q
0.57617458 -1.05262664 1.05262664 0.57617458 687.20218229 656.84216696 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
717.33789062 555.70800781 m
709.8671875 567.3828125 l
717.33789062 567.3828125 l
717.33789062 555.70800781 l
716.56152344 553.12988281 m
720.28222656 553.12988281 l
720.28222656 567.3828125 l
723.40234375 567.3828125 l
723.40234375 569.84375 l
720.28222656 569.84375 l
720.28222656 575 l
717.33789062 575 l
717.33789062 569.84375 l
707.46484375 569.84375 l
707.46484375 566.98730469 l
716.56152344 553.12988281 l
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
680 460 m
680 460 628 365 680 270 c
S
Q
q
-0.57617458 1.05262664 -1.05262664 -0.57617458 672.79781771 283.15783304 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
631.23730469 343.12988281 m
642.85351562 343.12988281 l
642.85351562 345.62011719 l
633.94726562 345.62011719 l
633.94726562 350.98144531 l
634.37694675 350.8349751 634.80663382 350.72755333 635.23632812 350.65917969 c
635.66600796 350.58106911 636.09569503 350.54200665 636.52539062 350.54199219 c
638.96678591 350.54200665 640.90037772 351.21095129 642.32617188 352.54882812 c
643.75193737 353.88672986 644.46482729 355.69825149 644.46484375 357.98339844 c
644.46482729 360.33691873 643.73240614 362.16797158 642.26757812 363.4765625 c
640.80272157 364.77539085 638.73729395 365.42480426 636.07128906 365.42480469 c
635.15331316 365.42480426 634.2158141 365.34667934 633.25878906 365.19042969 c
632.31151913 365.03417965 631.33007479 364.79980489 630.31445312 364.48730469 c
630.31445312 361.51367188 l
631.19335618 361.99219051 632.1015584 362.34863546 633.0390625 362.58300781 c
633.97655652 362.817385 634.96776647 362.93457238 636.01269531 362.93457031 c
637.70213874 362.93457238 639.04002802 362.49023688 640.02636719 361.6015625 c
641.0126823 360.71289491 641.50584587 359.50684143 641.50585938 357.98339844 c
641.50584587 356.45996948 641.0126823 355.253916 640.02636719 354.36523438 c
639.04002802 353.47657402 637.70213874 353.03223853 636.01269531 353.03222656 c
635.22167247 353.03223853 634.43065763 353.12012907 633.63964844 353.29589844 c
632.85839358 353.47169122 632.05761313 353.74512844 631.23730469 354.11621094 c
631.23730469 343.12988281 l
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
670 470 m
670 470 575 522 480 470 c
S
Q
q
1.05262664 0.57617458 -0.57617458 1.05262664 493.15783304 477.20218229 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
587.17285156 510.20800781 m
588.5888536 510.51075368 589.69236812 511.14063586 590.48339844 512.09765625 c
591.2841634 513.05469645 591.68455363 514.23633589 591.68457031 515.64257812 c
591.68455363 517.80078545 590.94236687 519.47070565 589.45800781 520.65234375 c
587.97361984 521.83398454 585.86424695 522.42480426 583.12988281 522.42480469 c
582.21190685 522.42480426 581.26464217 522.33203092 580.28808594 522.14648438 c
579.32128474 521.97070315 578.32030918 521.70214874 577.28515625 521.34082031 c
577.28515625 518.484375 l
578.10546564 518.96289366 579.00390225 519.32422143 579.98046875 519.56835938 c
580.95702529 519.81250219 581.97753208 519.93457238 583.04199219 519.93457031 c
584.89745104 519.93457238 586.30858244 519.56836181 587.27539062 518.8359375 c
588.25193987 518.10351952 588.74022063 517.03906746 588.74023438 515.64257812 c
588.74022063 514.35352327 588.28611953 513.3476649 587.37792969 512.625 c
586.47948071 511.89258823 585.22459915 511.52637766 583.61328125 511.52636719 c
581.06445312 511.52636719 l
581.06445312 509.09472656 l
583.73046875 509.09472656 l
585.18553669 509.09473947 586.29881683 508.80665382 587.0703125 508.23046875 c
587.84178403 507.64454561 588.22752583 506.8047027 588.22753906 505.7109375 c
588.22752583 504.58790804 587.82713561 503.7285339 587.02636719 503.1328125 c
586.23534033 502.52736322 585.09764615 502.22462915 583.61328125 502.22460938 c
582.80272657 502.22462915 581.93358682 502.31251969 581.00585938 502.48828125 c
580.07811992 502.66408184 579.05761313 502.93751906 577.94433594 503.30859375 c
577.94433594 500.671875 l
579.06737875 500.35939664 580.11718238 500.12502188 581.09375 499.96875 c
582.08007104 499.81252219 583.00780449 499.73439727 583.87695312 499.734375 c
586.12303575 499.73439727 587.90037772 500.24709207 589.20898438 501.27246094 c
590.51756261 502.28810565 591.17185883 503.6650574 591.171875 505.40332031 c
591.17185883 506.6142732 590.82517949 507.6396628 590.13183594 508.47949219 c
589.43846212 509.309583 588.45213499 509.8857543 587.17285156 510.20800781 c
f
Q
q
0 0 0 rg
60 680 m
60 685.52 55.52 690 50 690 c
44.48 690 40 685.52 40 680 c
40 674.48 44.48 670 50 670 c
55.52 670 60 674.48 60 680 c
h
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
60 680 m
60 685.52 55.52 690 50 690 c
44.48 690 40 685.52 40 680 c
40 674.48 44.48 670 50 670 c
55.52 670 60 674.48 60 680 c
h
S
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
50 670 m
50 670 -2 575 50 480 c
S
Q
q
-0.57617458 1.05262664 -1.05262664 -0.57617458 42.79781771 493.15783304 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
1.72070312 572.50976562 m
6.5546875 572.50976562 l
6.5546875 555.82519531 l
1.29589844 556.87988281 l
1.29589844 554.18457031 l
6.52539062 553.12988281 l
9.484375 553.12988281 l
9.484375 572.50976562 l
14.31835938 572.50976562 l
14.31835938 575 l
1.72070312 575 l
1.72070312 572.50976562 l
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
60 680 m
60 680 155 628 250 680 c
S
Q
q
-1.05262664 -0.57617458 0.57617458 -1.05262664 236.84216696 672.79781771 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
166.33789062 634.70800781 m
158.8671875 646.3828125 l
166.33789062 646.3828125 l
166.33789062 634.70800781 l
165.56152344 632.12988281 m
169.28222656 632.12988281 l
169.28222656 646.3828125 l
172.40234375 646.3828125 l
172.40234375 648.84375 l
169.28222656 648.84375 l
169.28222656 654 l
166.33789062 654 l
166.33789062 648.84375 l
156.46484375 648.84375 l
156.46484375 645.98730469 l
165.56152344 632.12988281 l
f
Q
q
0 0 0 rg
270 680 m
270 685.52 265.52 690 260 690 c
254.48 690 250 685.52 250 680 c
250 674.48 254.48 670 260 670 c
265.52 670 270 674.48 270 680 c
h
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
270 680 m
270 685.52 265.52 690 260 690 c
254.48 690 250 685.52 250 680 c
250 674.48 254.48 670 260 670 c
265.52 670 270 674.48 270 680 c
h
S
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
260 670 m
260 670 208 575 260 480 c
S
Q
q
-0.57617458 1.05262664 -1.05262664 -0.57617458 252.79781771 493.15783304 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
213.75683594 572.50976562 m
224.08398438 572.50976562 l
224.08398438 575 l
210.19726562 575 l
210.19726562 572.50976562 l
211.32030918 571.3476599 212.84862796 569.79004427 214.78222656 567.83691406 c
216.72557721 565.87403256 217.94627912 564.60938539 218.44433594 564.04296875 c
219.39159017 562.97852765 220.0507692 562.08009104 220.421875 561.34765625 c
220.80272157 560.60548314 220.99315107 559.87794481 220.99316406 559.16503906 c
220.99315107 558.00294668 220.58299523 557.05568201 219.76269531 556.32324219 c
218.95213749 555.59083972 217.89256823 555.22462915 216.58398438 555.22460938 c
215.65624234 555.22462915 214.67479801 555.3857618 213.63964844 555.70800781 c
212.6142532 556.03029241 211.51562148 556.51857317 210.34375 557.17285156 c
210.34375 554.18457031 l
211.53515271 553.70607598 212.64843285 553.34474822 213.68359375 553.10058594 c
214.71874328 552.85646746 215.66600796 552.73439727 216.52539062 552.734375 c
218.79100483 552.73439727 220.59764365 553.30080295 221.9453125 554.43359375 c
223.29295346 555.56642568 223.96678091 557.08009604 223.96679688 558.97460938 c
223.96678091 559.873062 223.79588264 560.72755333 223.45410156 561.53808594 c
223.12205519 562.33887985 222.51170424 563.28614453 221.62304688 564.37988281 c
221.37889287 564.66309627 220.60252646 565.48340795 219.29394531 566.84082031 c
217.98534158 568.18848337 216.1396403 570.07812992 213.75683594 572.50976562 c
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
250 680 m
250 680 155 732 60 680 c
S
Q
q
1.05262664 0.57617458 -0.57617458 1.05262664 73.15783304 687.20218229 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
158.72070312 729.50976562 m
163.5546875 729.50976562 l
163.5546875 712.82519531 l
158.29589844 713.87988281 l
158.29589844 711.18457031 l
163.52539062 710.12988281 l
166.484375 710.12988281 l
166.484375 729.50976562 l
171.31835938 729.50976562 l
171.31835938 732 l
158.72070312 732 l
158.72070312 729.50976562 l
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
270 680 m
270 680 365 628 460 680 c
S
Q
q
-1.05262664 -0.57617458 0.57617458 -1.05262664 446.84216696 672.79781771 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
368.72070312 651.50976562 m
373.5546875 651.50976562 l
373.5546875 634.82519531 l
368.29589844 635.87988281 l
368.29589844 633.18457031 l
373.52539062 632.12988281 l
376.484375 632.12988281 l
376.484375 651.50976562 l
381.31835938 651.50976562 l
381.31835938 654 l
368.72070312 654 l
368.72070312 651.50976562 l
f
Q
q
0 0 0 rg
480 680 m
480 685.52 475.52 690 470 690 c
464.48 690 460 685.52 460 680 c
460 674.48 464.48 670 470 670 c
475.52 670 480 674.48 480 680 c
h
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
480 680 m
480 685.52 475.52 690 470 690 c
464.48 690 460 685.52 460 680 c
460 674.48 464.48 670 470 670 c
475.52 670 480 674.48 480 680 c
h
S
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
470 670 m
470 670 418 575 470 480 c
S
Q
q
-0.57617458 1.05262664 -1.05262664 -0.57617458 462.79781771 493.15783304 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
421.23730469 553.12988281 m
432.85351562 553.12988281 l
432.85351562 555.62011719 l
423.94726562 555.62011719 l
423.94726562 560.98144531 l
424.37694675 560.8349751 424.80663382 560.72755333 425.23632812 560.65917969 c
425.66600796 560.58106911 426.09569503 560.54200665 426.52539062 560.54199219 c
428.96678591 560.54200665 430.90037772 561.21095129 432.32617188 562.54882812 c
433.75193737 563.88672986 434.46482729 565.69825149 434.46484375 567.98339844 c
434.46482729 570.33691873 433.73240614 572.16797158 432.26757812 573.4765625 c
430.80272157 574.77539085 428.73729395 575.42480426 426.07128906 575.42480469 c
425.15331316 575.42480426 424.2158141 575.34667934 423.25878906 575.19042969 c
422.31151913 575.03417965 421.33007479 574.79980489 420.31445312 574.48730469 c
420.31445312 571.51367188 l
421.19335618 571.99219051 422.1015584 572.34863546 423.0390625 572.58300781 c
423.97655652 572.817385 424.96776647 572.93457238 426.01269531 572.93457031 c
427.70213874 572.93457238 429.04002802 572.49023688 430.02636719 571.6015625 c
431.0126823 570.71289491 431.50584587 569.50684143 431.50585938 567.98339844 c
431.50584587 566.45996948 431.0126823 565.253916 430.02636719 564.36523438 c
429.04002802 563.47657402 427.70213874 563.03223853 426.01269531 563.03222656 c
425.22167247 563.03223853 424.43065763 563.12012907 423.63964844 563.29589844 c
422.85839358 563.47169122 422.05761313 563.74512844 421.23730469 564.11621094 c
421.23730469 553.12988281 l
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
460 680 m
460 680 365 732 270 680 c
S
Q
q
1.05262664 0.57617458 -0.57617458 1.05262664 283.15783304 687.20218229 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
377.17285156 720.20800781 m
378.5888536 720.51075368 379.69236812 721.14063586 380.48339844 722.09765625 c
381.2841634 723.05469645 381.68455363 724.23633589 381.68457031 725.64257812 c
381.68455363 727.80078545 380.94236687 729.47070565 379.45800781 730.65234375 c
377.97361984 731.83398454 375.86424695 732.42480426 373.12988281 732.42480469 c
372.21190685 732.42480426 371.26464217 732.33203092 370.28808594 732.14648438 c
369.32128474 731.97070315 368.32030918 731.70214874 367.28515625 731.34082031 c
367.28515625 728.484375 l
368.10546564 728.96289366 369.00390225 729.32422143 369.98046875 729.56835938 c
370.95702529 729.81250219 371.97753208 729.93457238 373.04199219 729.93457031 c
374.89745104 729.93457238 376.30858244 729.56836181 377.27539062 728.8359375 c
378.25193987 728.10351952 378.74022063 727.03906746 378.74023438 725.64257812 c
378.74022063 724.35352327 378.28611953 723.3476649 377.37792969 722.625 c
376.47948071 721.89258823 375.22459915 721.52637766 373.61328125 721.52636719 c
371.06445312 721.52636719 l
371.06445312 719.09472656 l
373.73046875 719.09472656 l
375.18553669 719.09473947 376.29881683 718.80665382 377.0703125 718.23046875 c
377.84178403 717.64454561 378.22752583 716.8047027 378.22753906 715.7109375 c
378.22752583 714.58790804 377.82713561 713.7285339 377.02636719 713.1328125 c
376.23534033 712.52736322 375.09764615 712.22462915 373.61328125 712.22460938 c
372.80272657 712.22462915 371.93358682 712.31251969 371.00585938 712.48828125 c
370.07811992 712.66408184 369.05761313 712.93751906 367.94433594 713.30859375 c
367.94433594 710.671875 l
369.06737875 710.35939664 370.11718238 710.12502188 371.09375 709.96875 c
372.08007104 709.81252219 373.00780449 709.73439727 373.87695312 709.734375 c
376.12303575 709.73439727 377.90037772 710.24709207 379.20898438 711.27246094 c
380.51756261 712.28810565 381.17185883 713.6650574 381.171875 715.40332031 c
381.17185883 716.6142732 380.82517949 717.6396628 380.13183594 718.47949219 c
379.43846212 719.309583 378.45213499 719.8857543 377.17285156 720.20800781 c
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
480 680 m
480 680 575 628 670 680 c
S
Q
q
-1.05262664 -0.57617458 0.57617458 -1.05262664 656.84216696 672.79781771 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
586.33789062 634.70800781 m
578.8671875 646.3828125 l
586.33789062 646.3828125 l
586.33789062 634.70800781 l
585.56152344 632.12988281 m
589.28222656 632.12988281 l
589.28222656 646.3828125 l
592.40234375 646.3828125 l
592.40234375 648.84375 l
589.28222656 648.84375 l
589.28222656 654 l
586.33789062 654 l
586.33789062 648.84375 l
576.46484375 648.84375 l
576.46484375 645.98730469 l
585.56152344 632.12988281 l
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
690 680 m
690 685.52 685.52 690 680 690 c
674.48 690 670 685.52 670 680 c
670 674.48 674.48 670 680 670 c
685.52 670 690 674.48 690 680 c
h
S
Q
q
0 0 0 rg
680.66210938 671.95703125 m
680.66210938 675.0625 l
684.36328125 675.0625 l
684.36328125 676.45898438 l
680.66210938 676.45898438 l
680.66210938 682.39648438 l
680.66210571 683.28841417 680.7825483 683.86133026 681.0234375 684.11523438 c
681.27082906 684.36914226 681.76887544 684.49609525 682.51757812 684.49609375 c
684.36328125 684.49609375 l
684.36328125 686 l
682.51757812 686 l
681.13085524 686 680.17382495 685.7428388 679.64648438 685.22851562 c
679.11913851 684.70768358 678.85546689 683.76367411 678.85546875 682.39648438 c
678.85546875 676.45898438 l
677.53710938 676.45898438 l
677.53710938 675.0625 l
678.85546875 675.0625 l
678.85546875 671.95703125 l
680.66210938 671.95703125 l
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
680 670 m
680 670 628 575 680 480 c
S
Q
q
-0.57617458 1.05262664 -1.05262664 -0.57617458 672.79781771 493.15783304 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
639.33789062 555.70800781 m
631.8671875 567.3828125 l
639.33789062 567.3828125 l
639.33789062 555.70800781 l
638.56152344 553.12988281 m
642.28222656 553.12988281 l
642.28222656 567.3828125 l
645.40234375 567.3828125 l
645.40234375 569.84375 l
642.28222656 569.84375 l
642.28222656 575 l
639.33789062 575 l
639.33789062 569.84375 l
629.46484375 569.84375 l
629.46484375 566.98730469 l
638.56152344 553.12988281 l
f
Q
q
0 0 0 RG
[] 0 d
1.5 w
0 j
0 J
4 M
670 680 m
670 680 575 732 480 680 c
S
Q
q
1.05262664 0.57617458 -0.57617458 1.05262664 493.15783304 687.20218229 cm
q
0 0 0 rg
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
f*
Q
q
0 0 0 RG
[] 0 d
1.25 w
0 j
0 J
4 M
0 0 m
5 -5 l
-12.5 0 l
5 5 l
0 0 l
h
S
Q
Q
q
0 0 0 rg
580.75683594 729.50976562 m
591.08398438 729.50976562 l
591.08398438 732 l
577.19726562 732 l
577.19726562 729.50976562 l
578.32030918 728.3476599 579.84862796 726.79004427 581.78222656 724.83691406 c
583.72557721 722.87403256 584.94627912 721.60938539 585.44433594 721.04296875 c
586.39159017 719.97852765 587.0507692 719.08009104 587.421875 718.34765625 c
587.80272157 717.60548314 587.99315107 716.87794481 587.99316406 716.16503906 c
587.99315107 715.00294668 587.58299523 714.05568201 586.76269531 713.32324219 c
585.95213749 712.59083972 584.89256823 712.22462915 583.58398438 712.22460938 c
582.65624234 712.22462915 581.67479801 712.3857618 580.63964844 712.70800781 c
579.6142532 713.03029241 578.51562148 713.51857317 577.34375 714.17285156 c
577.34375 711.18457031 l
578.53515271 710.70607598 579.64843285 710.34474822 580.68359375 710.10058594 c
581.71874328 709.85646746 582.66600796 709.73439727 583.52539062 709.734375 c
585.79100483 709.73439727 587.59764365 710.30080295 588.9453125 711.43359375 c
590.29295346 712.56642568 590.96678091 714.08009604 590.96679688 715.97460938 c
590.96678091 716.873062 590.79588264 717.72755333 590.45410156 718.53808594 c
590.12205519 719.33887985 589.51170424 720.28614453 588.62304688 721.37988281 c
588.37889287 721.66309627 587.60252646 722.48340795 586.29394531 723.84082031 c
584.98534158 725.18848337 583.1396403 727.07812992 580.75683594 729.50976562 c
f
Q
Q
endstream
endobj
7 0 obj
68238
endobj
5 0 obj
<<
/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
>>
endobj
1 0 obj
<<
/Title(smallgraph.pdf)
/Author(Unknown)
/Creator(www.inkscape.org)
/Producer(Inkscape inkscape 0.45.1)
/CreationDate(D:20070807064923Z)
>>
endobj
2 0 obj
<<
/Type /Pages
/Count 1
/Kids [
4 0 R
]
>>
endobj
xref
0 8
0000000000 65535 f
0000068658 00000 n
0000068825 00000 n
0000000015 00000 n
0000000068 00000 n
0000068589 00000 n
0000000276 00000 n
0000068568 00000 n
trailer
<<
/Size 7
/Root 3 0 R
/Info 1 0 R
>>
startxref
68896
%%EOF
graphcut-0.3/smallgraph.map 0000644 0001750 0000144 00000000276 10656012654 015062 0 ustar kramm users width: 4
height: 4
[left]
0 3 1 3
0 4 4 3
0 3 1 3
0 1 3 2
[up]
0 0 0 0
4 2 3 2
1 4 7 5
1 2 5 4
[right]
7 1 1 0
2 4 1 0
3 3 3 0
4 1 4 0
[down]
3 5 1 1
1 1 4 1
1 3 2 4
0 0 0 0
graphcut-0.3/smallgraph.svg 0000644 0001750 0000144 00000126114 10656012621 015076 0 ustar kramm users
graphcut-0.3/png.c 0000644 0001750 0000144 00000046546 10656011410 013160 0 ustar kramm users /*
graphcut- a graphcut implementation working on grid graphs based
on the Boykov Kolmogorov algorithm
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 3 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, see .
*/
#include
#include
#include
#include
#include
#include
#include "png.h"
typedef unsigned char u8;
typedef unsigned long u32;
typedef struct _COL {
u8 a,r,g,b;
} COL;
#define REVERSESWAP16(s) ((((s)>>8)&0x00ff)|(((s)<<8)&0xff00))
#define REVERSESWAP32(s) (REVERSESWAP16(((s)>>16)&0x0000ffff)|((REVERSESWAP16(s)<<16)&0xffff0000))
static int png_read_chunk(char (*head)[4], int*destlen, u8**destdata, FILE*fi)
{
unsigned int len;
if(destlen) *destlen=0;
if(destdata) *destdata=0;
if(!fread(&len, 4, 1, fi)) {
return 0;
}
if(!fread(head, 4, 1, fi)) {
return 0;
}
len = REVERSESWAP32(len);
if(destlen) *destlen = len;
if(destdata) {
if(!len) {
*destdata = 0;
} else {
*destdata = (u8*)malloc(len);
if(!fread(*destdata, len, 1, fi)) {
*destdata = 0;
if(destlen) *destlen=0;
return 0;
}
}
fseek(fi, 4, SEEK_CUR);
} else {
fseek(fi, len+4, SEEK_CUR);
}
return 1;
}
static unsigned int png_get_dword(FILE*fi)
{
unsigned int a;
fread(&a,4,1,fi);
return REVERSESWAP32(a);
}
struct png_header
{
int width;
int height;
int bpp;
int mode;
};
static int png_read_header(FILE*fi, struct png_header*header)
{
char id[4];
int len;
int ok=0;
u8 head[8] = {137,80,78,71,13,10,26,10};
u8 head2[8];
u8*data;
fread(head2,8,1,fi);
if(strncmp((const char*)head,(const char*)head2,4))
return 0;
while(png_read_chunk(&id, &len, &data, fi))
{
//printf("Chunk: %c%c%c%c (len:%d)\n", id[0],id[1],id[2],id[3], len);
if(!strncasecmp(id, "IHDR", 4)) {
char a,b,c,f,i;
if(len < 8) exit(1);
header->width = REVERSESWAP32(*(u32*)&data[0]);
header->height = REVERSESWAP32(*(u32*)&data[4]);
a = data[8]; // should be 8
b = data[9]; // should be 3(indexed) or 2(rgb)
c = data[10]; // compression mode (0)
f = data[11]; // filter mode (0)
i = data[12]; // interlace mode (0)
if(b!=0 && b!=4 && b!=2 && b!=3 && b!=6) {
fprintf(stderr, "Image mode %d not supported!\n", b);
return 0;
}
if(a!=8 && (b==2 || b==6)) {
printf("Bpp %d in mode %d not supported!\n", a);
return 0;
}
if(c!=0) {
printf("Compression mode %d not supported!\n", c);
return 0;
}
if(f!=0) {
printf("Filter mode %d not supported!\n", f);
return 0;
}
if(i!=0) {
printf("Interlace mode %d not supported!\n", i);
return 0;
}
//printf("%dx%d bpp:%d mode:%d comp:%d filter:%d interlace:%d\n",header->width, header->height, a,b,c,f,i);
header->bpp = a;
header->mode = b;
ok = 1;
}
free(data);
}
return ok;
}
typedef unsigned char byte;
#define ABS(a) ((a)>0?(a):(-(a)))
byte inline PaethPredictor (byte a,byte b,byte c)
{
// a = left, b = above, c = upper left
int p = a + b - c; // initial estimate
int pa = ABS(p - a); // distances to a, b, c
int pb = ABS(p - b);
int pc = ABS(p - c);
// return nearest of a,b,c,
// breaking ties in order a,b,c.
if (pa <= pb && pa <= pc)
return a;
else if (pb <= pc)
return b;
else return c;
}
static void applyfilter1(int mode, u8*src, u8*old, u8*dest, int width)
{
int x;
unsigned char last=0;
unsigned char upperlast=0;
if(mode==0) {
for(x=0;x=32 && data[t]<128)
printf("%c", data[t]);
else
printf("?");
}
printf("\n");*/
}
if(data)
free(data);
}
if(!zimagedata || uncompress(imagedata, &imagedatalen, zimagedata, zimagedatalen) != Z_OK) {
printf("Couldn't uncompress %s!\n", sname);
if(zimagedata)
free(zimagedata);
return 0;
}
free(zimagedata);
fclose(fi);
*destwidth = header.width;
*destheight = header.height;
data2 = (u8*)malloc(header.width*header.height*4);
if(header.mode == 4)
{
int i,s=0;
int x,y;
int pos=0;
u8* old= (u8*)malloc(header.width*2);
memset(old, 0, header.width*2);
*destdata = data2;
for(y=0;y=0;x--) {
u8 gray = dest[x*2+0];
u8 alpha = dest[x*2+1];
dest[x*4+0] = alpha;
dest[x*4+1] = gray;
dest[x*4+2] = gray;
dest[x*4+3] = gray;
}
}
free(old);
free(imagedata);
} else if(header.mode == 6 || header.mode == 2) {
int i,s=0;
int x,y;
int pos=0;
*destdata = data2;
for(y=0;y>header.bpp);
palettelen = 1<32 bit conversion */
for(i=0;i>(16-header.bpp-(s&7)))&v;
s+=header.bpp;
}
src = tmpline;
pos+=(header.width*header.bpp+7)/8;
}
if(!y) {
memset(destline,0,header.width);
old = &destline[y*header.width];
} else {
old = tmpline;
}
applyfilter1(mode, src, old, destline, header.width);
memcpy(tmpline,destline,header.width);
for(x=0;x> 1);
}
crc32_table[t] = c;
}
}
static inline void png_write_byte(FILE*fi, u8 byte)
{
fwrite(&byte,1,1,fi);
mycrc32 = crc32_table[(mycrc32 ^ byte) & 0xff] ^ (mycrc32 >> 8);
}
static void png_start_chunk(FILE*fi, char*type, int len)
{
u8 mytype[4]={0,0,0,0};
u32 mylen = REVERSESWAP32(len);
memcpy(mytype,type,strlen(type));
fwrite(&mylen, 4, 1, fi);
mycrc32=0xffffffff;
png_write_byte(fi,mytype[0]);
png_write_byte(fi,mytype[1]);
png_write_byte(fi,mytype[2]);
png_write_byte(fi,mytype[3]);
}
static void png_write_bytes(FILE*fi, u8*bytes, int len)
{
int t;
for(t=0;t>24);
png_write_byte(fi,dword>>16);
png_write_byte(fi,dword>>8);
png_write_byte(fi,dword);
}
static void png_end_chunk(FILE*fi)
{
u32 tmp = REVERSESWAP32((mycrc32^0xffffffff));
fwrite(&tmp,4,1,fi);
}
void writePNG(char*filename, unsigned char*data, int width, int height)
{
FILE*fi;
int crc;
int t;
u8 format;
u8 tmp;
u8* data2=0;
u8* data3=0;
u32 datalen;
u32 datalen2;
u32 datalen3;
u8 head[] = {137,80,78,71,13,10,26,10}; // PNG header
int cols;
char alpha = 1;
int pos = 0;
int error;
u32 tmp32;
int bpp;
int ret;
make_crc32_table();
bpp = 32;
cols = 0;
format = 5;
datalen = (width*height*bpp/8+cols*8);
fi = fopen(filename, "wb");
if(!fi) {
perror("open");
return;
}
fwrite(head,sizeof(head),1,fi);
png_start_chunk(fi, "IHDR", 13);
png_write_dword(fi,width);
png_write_dword(fi,height);
png_write_byte(fi,8);
if(format == 3)
png_write_byte(fi,3); //indexed
else if(format == 5 && alpha==0)
png_write_byte(fi,2); //rgb
else if(format == 5 && alpha==1)
png_write_byte(fi,6); //rgba
else return;
png_write_byte(fi,0); //compression mode
png_write_byte(fi,0); //filter mode
png_write_byte(fi,0); //interlace mode
png_end_chunk(fi);
/* if(format == 3) {
png_start_chunk(fi, "PLTE", 768);
for(t=0;t<256;t++) {
png_write_byte(fi,palette[t].r);
png_write_byte(fi,palette[t].g);
png_write_byte(fi,palette[t].b);
}
png_end_chunk(fi);
}*/
{
int pos2 = 0;
int x,y;
int srcwidth = width * (bpp/8);
datalen3 = (width*4+5)*height;
data3 = (u8*)malloc(datalen3);
for(y=0;y